Operational Slate Semantics
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Download DESIGN.md
Portable DESIGN.md source of truth for most agents and apps.
specification
philosophy
tokens
borders4 items
- accent width
- 4px
- character
- low-contrast neutral rules with semantic rails only at state boundaries
- default width
- 1px
- style
- solid
colors12 items
motion3 items
- duration
- 140ms
- easing
- cubic-bezier(0.2, 0, 0.1, 1)
- philosophy
- fast confirmation motion for focus, disclosure, and table selection; no ornamental animation
radii5 items
- full
- 9999px
- lg
- 10px
- md
- 6px
- none
- 0
- sm
- 3px
shadows3 items
- lg
- 0 18px 44px rgba(23,32,42,0.12)
- md
- 0 8px 24px rgba(23,32,42,0.08)
- sm
- 0 1px 2px rgba(23,32,42,0.06)
spacing2 items
- base
- 8px
- scale
- 4, 8, 12, 16, 24, 32, 48, 64
surfaces3 items
- bg pattern
- subtle 24px calibration grid using rgba(31,99,198,0.035) lines
- card style
- flat operational panels with 1px borders, compact headers, and rare elevation only for overlays
- treatment
- cool canvas with warm white and bone slabs for task areas
typography8 items
- base size
- 16px
- body font
- Source Sans 3
- google fonts url
- https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Source+Sans+3:wght@400;500;600;700;800&display=swap
- heading font
- Source Sans 3
- letter spacing
- -0.01em
- line height
- 1.48
- mono font
- IBM Plex Mono
- scale ratio
- 1.2
rules
Build screens as a three-zone control plane: persistent navigation, evidence-rich workspace, and a narrow decision rail for state, audit, and next actions.
Favor compact enterprise density with 8px rhythm, 40px controls, 44px table rows, and enough whitespace around decisions to preserve scan accuracy.
Let typography weight, alignment, and surface containment establish order; blue marks the primary path while semantic colors appear only on labeled status components.
layout
mobile 375px single column, tablet 768px stacked nav and rail, desktop 1200px+ three-zone control plane
12-column desktop grid with 280px nav, flexible 8-column workspace, and 320px decision rail.
Use 24px section gutters, 16px panel interiors, and 8px intra-control rhythm to keep dense information legible.
guidance
- Use semantic aliases for every status foreground, background, border, and icon role.
- Pair every status color with iconography or text labels for accessibility.
- Keep dense tables mostly neutral and reserve chroma for exception rails, badges, and focused actions.
- Define matching light and dark tokens before shipping a component.
- Do not place raw hex values inside feature code or one-off chart components.
- Do not use decorative gradients, rainbow chips, or chroma-filled table rows in operational screens.
- Do not rely on red/green alone to communicate state.
- Do not invent dark-mode overrides without matching semantic roles.
katagami spec
# Operational Slate Semantics ## Philosophy Operational Slate Semantics is a production color language for complex enterprise SaaS: gray hierarchy does most of the work, one trustworthy blue carries brand and primary action, and semantic ramps communicate system state without decorative chroma. ### Values - Neutral hierarchy before color expression - Semantic predictability across dense workflows - Accessibility with redundant status cues - Equal light and dark mode role coverage - Token discipline that forbids raw hex usage in product code ### Anti-Values - Rainbow dashboards that use chroma as ornament - Status communicated by color alone - Ad hoc dark-mode inversions - Low-contrast tinted table fills - Decorative gradients inside operational views ### Visual Character - Use a cool #F6F8FA application canvas with warmer #FFFFFF and #F4F1EC work surfaces separated by 1px neutral borders. - Reserve #1F63C6 blue for primary controls, active navigation, focus rings, and sparse brand anchors instead of general decoration. - Render status with left-edge 4px rails, small glyph badges, and text labels so success, warning, error, and info never rely on hue alone. - Keep tables high-density with hairline row dividers, tabular numbers, muted zebra bands, and no decorative chroma in body cells. - Provide dark-mode equivalence through named roles and restrained elevated slabs rather than one-off override colors. ## Tokens ### Borders - **Accent Width**: 4px - **Character**: low-contrast neutral rules with semantic rails only at state boundaries - **Default Width**: 1px - **Style**: solid ### Colors | Name | Value | |------|-------| | accent | `#3B82F6` | | background | `#F6F8FA` | | border | `#D8DEE6` | | error | `#B42318` | | info | `#255FCF` | | muted | `#647181` | | primary | `#1F63C6` | | secondary | `#6B7280` | | success | `#0E7A4F` | | surface | `#FFFFFF` | | text | `#17202A` | | warning | `#B85C00` | ### Motion - **Duration**: 140ms - **Easing**: cubic-bezier(0.2, 0, 0.1, 1) - **Philosophy**: fast confirmation motion for focus, disclosure, and table selection; no ornamental animation ### Radii - **Full**: 9999px - **Lg**: 10px - **Md**: 6px - **None**: 0 - **Sm**: 3px ### Shadows - **Lg**: 0 18px 44px rgba(23,32,42,0.12) - **Md**: 0 8px 24px rgba(23,32,42,0.08) - **Sm**: 0 1px 2px rgba(23,32,42,0.06) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64] ### Surfaces - **Bg Pattern**: subtle 24px calibration grid using rgba(31,99,198,0.035) lines - **Card Style**: flat operational panels with 1px borders, compact headers, and rare elevation only for overlays - **Treatment**: cool canvas with warm white and bone slabs for task areas ### Typography - **Base Size**: 16px - **Body Font**: Source Sans 3 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Source+Sans+3:wght@400;500;600;700;800&display=swap - **Heading Font**: Source Sans 3 - **Letter Spacing**: -0.01em - **Line Height**: 1.48 - **Mono Font**: IBM Plex Mono - **Scale Ratio**: 1.2 ## Rules ### Composition Build screens as a three-zone control plane: persistent navigation, evidence-rich workspace, and a narrow decision rail for state, audit, and next actions. ### Density Favor compact enterprise density with 8px rhythm, 40px controls, 44px table rows, and enough whitespace around decisions to preserve scan accuracy. ### Hierarchy Let typography weight, alignment, and surface containment establish order; blue marks the primary path while semantic colors appear only on labeled status components. ### Signature Patterns - Semantic rail cards use a 4px left border plus icon chip plus explicit label, keeping the card body neutral for dense reading. - Evidence tables use sticky mono headers, tabular numeric columns, subdued zebra bands, and non-color indicators for row exceptions. - Control clusters use blue focus halos offset outside 1px neutral borders, making keyboard state visible without repainting the whole component. - Data visualization uses paired hue and dash or hatch encodings, with chart tokens isolated from product semantic tokens. ## Layout ### Breakpoints mobile 375px single column, tablet 768px stacked nav and rail, desktop 1200px+ three-zone control plane ### Grid 12-column desktop grid with 280px nav, flexible 8-column workspace, and 320px decision rail. ### Whitespace Use 24px section gutters, 16px panel interiors, and 8px intra-control rhythm to keep dense information legible. ## Guidance ### Do - Use semantic aliases for every status foreground, background, border, and icon role. - Pair every status color with iconography or text labels for accessibility. - Keep dense tables mostly neutral and reserve chroma for exception rails, badges, and focused actions. - Define matching light and dark tokens before shipping a component. ### Don't - Do not place raw hex values inside feature code or one-off chart components. - Do not use decorative gradients, rainbow chips, or chroma-filled table rows in operational screens. - Do not rely on red/green alone to communicate state. - Do not invent dark-mode overrides without matching semantic roles.
DESIGN.md
---
version: "alpha"
name: "Operational Slate Semantics"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
accent: "#3B82F6"
background: "#F6F8FA"
border: "#D8DEE6"
error: "#B42318"
info: "#255FCF"
muted: "#647181"
primary: "#1F63C6"
secondary: "#6B7280"
success: "#0E7A4F"
surface: "#FFFFFF"
text: "#17202A"
warning: "#B85C00"
typography:
headline-lg:
fontFamily: "Source Sans 3"
fontSize: "1.728rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Source Sans 3"
fontSize: "1.44rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Source Sans 3"
fontSize: "16px"
fontWeight: 400
lineHeight: 1.48
letterSpacing: "-0.01em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
full: "9999px"
lg: "10px"
md: "6px"
none: "0px"
sm: "3px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
components:
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-background:
backgroundColor: "{colors.background}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-warning:
backgroundColor: "{colors.warning}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Operational Slate Semantics
## Overview
Operational Slate Semantics is a production color language for complex enterprise SaaS: gray hierarchy does most of the work, one trustworthy blue carries brand and primary action, and semantic ramps communicate system state without decorative chroma.
### Values
- Neutral hierarchy before color expression
- Semantic predictability across dense workflows
- Accessibility with redundant status cues
- Equal light and dark mode role coverage
- Token discipline that forbids raw hex usage in product code
### Anti-Values
- Rainbow dashboards that use chroma as ornament
- Status communicated by color alone
- Ad hoc dark-mode inversions
- Low-contrast tinted table fills
- Decorative gradients inside operational views
### Visual Character
- Use a cool #F6F8FA application canvas with warmer #FFFFFF and #F4F1EC work surfaces separated by 1px neutral borders.
- Reserve #1F63C6 blue for primary controls, active navigation, focus rings, and sparse brand anchors instead of general decoration.
- Render status with left-edge 4px rails, small glyph badges, and text labels so success, warning, error, and info never rely on hue alone.
- Keep tables high-density with hairline row dividers, tabular numbers, muted zebra bands, and no decorative chroma in body cells.
- Provide dark-mode equivalence through named roles and restrained elevated slabs rather than one-off override colors.
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| accent | `#3B82F6` |
| background | `#F6F8FA` |
| border | `#D8DEE6` |
| error | `#B42318` |
| info | `#255FCF` |
| muted | `#647181` |
| primary | `#1F63C6` |
| secondary | `#6B7280` |
| success | `#0E7A4F` |
| surface | `#FFFFFF` |
| text | `#17202A` |
| warning | `#B85C00` |
## Typography
- **Headline-Lg**: Source Sans 3, 1.728rem, weight 700, line-height 1.1.
- **Headline-Md**: Source Sans 3, 1.44rem, weight 600, line-height 1.15.
- **Body-Md**: Source Sans 3, 16px, weight 400, line-height 1.48.
- **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`
### Breakpoints
mobile 375px single column, tablet 768px stacked nav and rail, desktop 1200px+ three-zone control plane
### Grid
12-column desktop grid with 280px nav, flexible 8-column workspace, and 320px decision rail.
### Whitespace
Use 24px section gutters, 16px panel interiors, and 8px intra-control rhythm to keep dense information legible.
## Elevation & Depth
### Shadows
- **Lg**: 0 18px 44px rgba(23,32,42,0.12)
- **Md**: 0 8px 24px rgba(23,32,42,0.08)
- **Sm**: 0 1px 2px rgba(23,32,42,0.06)
## Shapes
### Rounded
- **Full**: `9999px`
- **Lg**: `10px`
- **Md**: `6px`
- **None**: `0px`
- **Sm**: `3px`
### Surfaces
- **Bg Pattern**: subtle 24px calibration grid using rgba(31,99,198,0.035) lines
- **Card Style**: flat operational panels with 1px borders, compact headers, and rare elevation only for overlays
- **Treatment**: cool canvas with warm white and bone slabs for task areas
### Borders
- **Accent Width**: 4px
- **Character**: low-contrast neutral rules with semantic rails only at state boundaries
- **Default Width**: 1px
- **Style**: solid
## Components
### Composition
Build screens as a three-zone control plane: persistent navigation, evidence-rich workspace, and a narrow decision rail for state, audit, and next actions.
### Density
Favor compact enterprise density with 8px rhythm, 40px controls, 44px table rows, and enough whitespace around decisions to preserve scan accuracy.
### Hierarchy
Let typography weight, alignment, and surface containment establish order; blue marks the primary path while semantic colors appear only on labeled status components.
### Signature Patterns
- Semantic rail cards use a 4px left border plus icon chip plus explicit label, keeping the card body neutral for dense reading.
- Evidence tables use sticky mono headers, tabular numeric columns, subdued zebra bands, and non-color indicators for row exceptions.
- Control clusters use blue focus halos offset outside 1px neutral borders, making keyboard state visible without repainting the whole component.
- Data visualization uses paired hue and dash or hatch encodings, with chart tokens isolated from product semantic tokens.
## 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-019ea9b3-61cf-73e2-9626-34e714d84791/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 semantic aliases for every status foreground, background, border, and icon role.
- Do Pair every status color with iconography or text labels for accessibility.
- Do Keep dense tables mostly neutral and reserve chroma for exception rails, badges, and focused actions.
- Do Define matching light and dark tokens before shipping a component.
- Don't Do not place raw hex values inside feature code or one-off chart components.
- Don't Do not use decorative gradients, rainbow chips, or chroma-filled table rows in operational screens.
- Don't Do not rely on red/green alone to communicate state.
- Don't Do not invent dark-mode overrides without matching semantic roles.
shadcn/ui theme
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "operational-slate-semantics",
"type": "registry:theme",
"title": "Operational Slate Semantics shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F6F8FA",
"foreground": "#17202A",
"card": "#FFFFFF",
"card-foreground": "#17202A",
"popover": "#FFFFFF",
"popover-foreground": "#17202A",
"primary": "#1F63C6",
"primary-foreground": "#ffffff",
"secondary": "#6B7280",
"secondary-foreground": "#ffffff",
"muted": "#647181",
"muted-foreground": "#17202A",
"accent": "#3B82F6",
"accent-foreground": "#ffffff",
"destructive": "#B42318",
"border": "#D8DEE6",
"input": "#D8DEE6",
"ring": "#3B82F6",
"chart-1": "#1F63C6",
"chart-2": "#6B7280",
"chart-3": "#3B82F6",
"chart-4": "#0E7A4F",
"chart-5": "#B85C00",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#17202A",
"sidebar-primary": "#1F63C6",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#255FCF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D8DEE6",
"sidebar-ring": "#3B82F6",
"radius": "6px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1F63C6",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#3B82F6",
"accent-foreground": "#ffffff",
"destructive": "#B42318",
"border": "#303642",
"input": "#303642",
"ring": "#3B82F6",
"chart-1": "#1F63C6",
"chart-2": "#6B7280",
"chart-3": "#3B82F6",
"chart-4": "#0E7A4F",
"chart-5": "#B85C00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1F63C6",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3B82F6",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#3B82F6",
"radius": "6px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ea9b3-61cf-73e2-9626-34e714d84791",
"slug": "operational-slate-semantics",
"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": {
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"colors": [
"accent",
"background",
"border",
"error",
"info",
"muted",
"primary",
"secondary",
"success",
"surface",
"text",
"warning"
],
"motion": [
"duration",
"easing",
"philosophy"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
]
}
}
}
```embodiments
at a glance
Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Components
Components rendered with this language’s tokens — colors, type, and rounded corners as specified.
Spacing
- base8px
- xs4px
- sm8px
- md12px
- lg16px
- xl24px
- 2xl32px
- 3xl48px
- 4xl64px
Shape
implementation kit
DESIGN.md with shadcn
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.
advanced implementation filesoptional machine-readable theme, CSS, TSX starter, recipes, and preview contract
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #F6F8FA;
--foreground: #17202A;
--card: #FFFFFF;
--card-foreground: #17202A;
--popover: #FFFFFF;
--popover-foreground: #17202A;
--primary: #1F63C6;
--primary-foreground: #ffffff;
--secondary: #6B7280;
--secondary-foreground: #ffffff;
--muted: #647181;
--muted-foreground: #17202A;
--accent: #3B82F6;
--accent-foreground: #ffffff;
--destructive: #B42318;
--border: #D8DEE6;
--input: #D8DEE6;
--ring: #3B82F6;
--chart-1: #1F63C6;
--chart-2: #6B7280;
--chart-3: #3B82F6;
--chart-4: #0E7A4F;
--chart-5: #B85C00;
--sidebar: #FFFFFF;
--sidebar-foreground: #17202A;
--sidebar-primary: #1F63C6;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #255FCF;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #D8DEE6;
--sidebar-ring: #3B82F6;
--radius: 6px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #1F63C6;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #3B82F6;
--accent-foreground: #ffffff;
--destructive: #B42318;
--border: #303642;
--input: #303642;
--ring: #3B82F6;
--chart-1: #1F63C6;
--chart-2: #6B7280;
--chart-3: #3B82F6;
--chart-4: #0E7A4F;
--chart-5: #B85C00;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #1F63C6;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3B82F6;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #3B82F6;
--radius: 6px;
}
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 OperationalSlateSemanticsShadcnKit() {
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">Operational Slate Semantics</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": "operational-slate-semantics",
"type": "registry:theme",
"title": "Operational Slate Semantics shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F6F8FA",
"foreground": "#17202A",
"card": "#FFFFFF",
"card-foreground": "#17202A",
"popover": "#FFFFFF",
"popover-foreground": "#17202A",
"primary": "#1F63C6",
"primary-foreground": "#ffffff",
"secondary": "#6B7280",
"secondary-foreground": "#ffffff",
"muted": "#647181",
"muted-foreground": "#17202A",
"accent": "#3B82F6",
"accent-foreground": "#ffffff",
"destructive": "#B42318",
"border": "#D8DEE6",
"input": "#D8DEE6",
"ring": "#3B82F6",
"chart-1": "#1F63C6",
"chart-2": "#6B7280",
"chart-3": "#3B82F6",
"chart-4": "#0E7A4F",
"chart-5": "#B85C00",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#17202A",
"sidebar-primary": "#1F63C6",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#255FCF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D8DEE6",
"sidebar-ring": "#3B82F6",
"radius": "6px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1F63C6",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#3B82F6",
"accent-foreground": "#ffffff",
"destructive": "#B42318",
"border": "#303642",
"input": "#303642",
"ring": "#3B82F6",
"chart-1": "#1F63C6",
"chart-2": "#6B7280",
"chart-3": "#3B82F6",
"chart-4": "#0E7A4F",
"chart-5": "#B85C00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1F63C6",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3B82F6",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#3B82F6",
"radius": "6px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ea9b3-61cf-73e2-9626-34e714d84791",
"slug": "operational-slate-semantics",
"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": {
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"colors": [
"accent",
"background",
"border",
"error",
"info",
"muted",
"primary",
"secondary",
"success",
"surface",
"text",
"warning"
],
"motion": [
"duration",
"easing",
"philosophy"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
]
}
}
}
# Operational Slate Semantics shadcn/ui Components
Author: `katagami-agent`
## Intent
Translate a disciplined enterprise semantic palette into shadcn/ui without inventing a second component system. The preview must feel like a credible control plane: neutral first, one blue action path, and status states that always include icon or text redundancy.
## Required primitives
button, card, input, textarea, select, dialog, sheet, tabs, badge, separator, checkbox, switch, slider, tooltip, dropdown-menu, and table from `@/components/ui/*`.
## Token cues
Use `{colors.background}` as the cool canvas, `{colors.surface}` for panels, `{colors.primary}` only for primary actions, active navigation, and focus rings. Use `{colors.success}`, `{colors.warning}`, `{colors.error}`, and `{colors.info}` only inside labeled state rails, badges, and icon chips. Borders use `{colors.border}` by default.
## Visual character to preserve
- Cool gray application canvas with warm white or bone task slabs.
- 1px neutral panel borders, 4px semantic rails on state cards, and compact headers.
- Dense tables with tabular numbers, zebra bands, and status labels rather than colored cells.
- Blue focus halos outside the control border.
## ShadSync visual profile
family: enterprise-semantic; material: flat-slate; contour: rectilinear-soft; border: hairline-plus-state-rail; underlay: calibration-grid; grain: false; stickerBadges: false; motion: fast-confirmation; density: compact; accents: trusted-blue-plus-semantic-ramps.
## Signature component recipes
- button: 40px height, 6px radius, primary filled blue, secondary white with neutral border, focus ring `0 0 0 3px rgba(31,99,198,.18)`.
- card: white surface, 1px neutral border, 10px radius, optional 4px left semantic rail for status cards.
- input: 38-40px height, white fill, neutral border, blue border and halo on focus; never tint whole field for errors.
- textarea: same field treatment, 14px body text, validation message below with icon and text.
- select: same as input with mono or compact label above in dense forms.
- dialog: white slab, 1px border, 10px radius, restrained medium shadow, semantic alert rail when needed.
- sheet: warm bone header, white body, neutral separators, no decorative gradient.
- tabs: active tab uses blue text and 2px bottom rule; inactive tabs remain gray.
- badge: compact mono label, icon optional, semantic foreground plus pale background only after contrast testing.
- separator: 1px neutral rule; never use colored separators except semantic rail boundaries.
- checkbox: 16px square, 3px radius, blue checked state, visible focus halo.
- switch: neutral track, blue checked thumb track, text label required for state meaning.
- slider: blue active track, gray remaining track, visible numeric value.
- tooltip: dark slate background, white text, concise operational copy.
- dropdown-menu: white card, 1px border, compact 8px item rhythm, blue focus item background.
- table: sticky mono headers, 44px rows, neutral zebra bands, status cell includes icon chip and label.
## Preview shots
application-shell shows nav, metrics, table, and decision rail. detail-editor shows token edit form with dialog and validation. data-operations shows table, chart, filters, dropdown, slider, switches, and tooltips.
## Implementation contract
Import local primitives from `@/components/ui/*`. Do not create bespoke buttons, inputs, or tables. Use semantic aliases and class composition to express rails, focus rings, density, and neutral surfaces. Do not place raw hex in feature components except inside the generated theme layer.
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
export function SemanticRailCard() {
return (
<Card className="border-l-4 border-l-warning bg-card text-card-foreground shadow-sm">
<CardHeader className="border-b bg-muted/40 py-3">
<CardTitle className="text-base tracking-tight">Billing table needs label redundancy</CardTitle>
</CardHeader>
<CardContent className="space-y-4 pt-4">
<Badge variant="outline" className="font-mono text-[11px]">! Warning state</Badge>
<Table>
<TableHeader><TableRow><TableHead>Token</TableHead><TableHead>Ratio</TableHead></TableRow></TableHeader>
<TableBody><TableRow><TableCell>warning.bg / text</TableCell><TableCell className="font-mono">7.1</TableCell></TableRow></TableBody>
</Table>
<Button>Open token diff</Button>
</CardContent>
</Card>
)
}
```
{
"artifact": "katagami:shadcn-preview-shots",
"author": "katagami-agent",
"componentRecipes": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"generatedBy": "katagami-agent",
"renderable": true,
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"shots": [
{
"avoid": [
"decorative chroma",
"color-only status",
"gradient panels"
],
"composition": "Three-zone SaaS control plane with navigation, exception table, and semantic decision rail.",
"id": "application-shell",
"mustShowStates": [
"primary blue action",
"warning rail with icon label",
"error badge with text",
"keyboard focus halo"
],
"primitives": [
"button",
"card",
"tabs",
"badge",
"separator",
"table",
"tooltip",
"dropdown-menu"
],
"scene": {
"actions": [
"Approve release",
"Export audit"
],
"description": "Design systems team reviews token coverage, contrast, and table chroma discipline before release.",
"eyebrow": "Production readiness",
"headline": "Semantic palette audit queue",
"rows": [
{
"ratio": "7.1",
"status": "Warning: label missing",
"team": "Billing Ops"
},
{
"ratio": "3.2",
"status": "Error: failing foreground",
"team": "Support"
},
{
"ratio": "5.8",
"status": "Success: ready",
"team": "Identity"
}
],
"stats": [
{
"label": "Passing contrast pairs",
"value": "98.7%"
},
{
"label": "Raw hex debt",
"value": "0"
},
{
"label": "Dark aliases",
"value": "128"
}
]
}
},
{
"avoid": [
"tinted form backgrounds",
"raw hex in labels",
"missing helper text"
],
"composition": "Token detail editor with warm header, neutral form fields, validation copy, and semantic rail summary.",
"id": "detail-editor",
"mustShowStates": [
"focused input",
"checked checkbox",
"enabled switch",
"warning validation text"
],
"primitives": [
"dialog",
"sheet",
"input",
"textarea",
"select",
"checkbox",
"switch",
"button",
"badge",
"separator"
],
"scene": {
"actions": [
"Save aliases",
"Cancel"
],
"description": "Edit brand.blue aliases with accessible foreground, background, border, icon, and focus roles.",
"eyebrow": "Token editor",
"fields": [
{
"label": "Primitive ramp",
"value": "brand.blue.50-1000"
},
{
"label": "Owner",
"value": "Design Systems"
},
{
"label": "Validation note",
"value": "Pair warning state with icon and text label."
}
],
"headline": "Register OKLCH-ready primitive ramp"
}
},
{
"avoid": [
"rainbow charts",
"colored body cells",
"unlabeled toggles"
],
"composition": "Dense operations screen combining chart controls, colorblind-safe hatch series, and neutral rows.",
"id": "data-operations",
"mustShowStates": [
"chart hatch encoding",
"active filter badge",
"slider numeric value",
"neutral zebra table"
],
"primitives": [
"card",
"table",
"slider",
"switch",
"select",
"badge",
"button",
"tooltip",
"dropdown-menu",
"separator"
],
"scene": {
"actions": [
"Run sweep",
"Open chart menu"
],
"description": "Operational analytics validates hue plus pattern encodings and isolates chart tokens from product semantics.",
"eyebrow": "Data visualization safety",
"headline": "Chart token compliance sweep",
"rows": [
{
"encoding": "blue solid + label",
"result": "Ready",
"series": "Revenue forecast"
},
{
"encoding": "blue hatch + marker",
"result": "Ready",
"series": "Incident risk"
}
],
"stats": [
{
"label": "Hatched series",
"value": "6"
},
{
"label": "Color-only findings",
"value": "0"
}
]
}
}
],
"version": "preview-shots-v1",
"visualProfile": {
"accents": "trusted-blue with labeled success warning error info ramps",
"border": "hairline-plus-state-rail",
"contour": "rectilinear-soft",
"density": "compact",
"family": "enterprise-semantic",
"grain": false,
"material": "flat-slate",
"motion": "fast-confirmation",
"stickerBadges": false,
"underlay": "calibration-grid"
}
}