back to gallery
design language·ceramic-calibration-console

Ceramic Calibration Console

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.

the spec

specification

philosophy
summary
Ceramic Calibration Console is a restrained product interface language for technical settings, project spaces, forms, documentation, and data tables. It treats the application as a calibrated instrument: quiet ceramic surfaces, compact controls, highly readable labels, and a single fresh cyan accent used only where attention or focus is earned.
values
Readability before atmosphere: labels, metadata, captions, and table cells keep generous leading and modest weight so dense product work stays calm.Instrument-like restraint: the identity comes from fine calibration rails, crisp dividers, and consistent density rather than decorative gradients or icon bento filler.Cool neutral specificity: slate, zinc, ceramic white, graphite, and smoke-blue replace beige monoculture while preserving warmth through type rhythm.Accessible signal discipline: cyan marks primary action, focus, active navigation, and selected data only; semantic states remain separate and readable.Production credibility: every visual decision is tokenized into surfaces, borders, type roles, state layers, and table/form behavior that can ship in software.Compact without being cramped: controls and rows are economical, but text line-height and grouping gaps maintain comprehension.
anti-values
×Huge overbold tight-tracked headings, gradient keyword emphasis, and billboard SaaS hero rhetoric.×Sterile gradient panels, generic grid backgrounds, unrelated icon bento boxes, and pulsing-dot hero pills.×Nested rounded stat-card patterns, beige-as-taste monoculture, and decorative color used to fill empty space.×Browser-default form controls, invisible focus states, and dense tables with 14px low-leading text.
tokens
borders4 items
accent width
2px
character
Near-invisible ink dividers with cyan calibration rails for selected or focused regions.
default width
1px
style
solid
colors12 items
accent
#0B7895
background
#F3F7F8
border
#121A2014
error
#B33A3A
info
#0B7895
muted
#64727B
primary
#0B7895
secondary
#3E5360
success
#357A53
surface
#FFFFFF
text
#121A20
warning
#8A6815
motion3 items
duration
140ms
easing
cubic-bezier(.2,0,.1,1)
philosophy
Functional state confirmation only: color, border, and slight translate changes; no pulsing, parallax, or ornamental animation.
radii5 items
full
9999px
lg
24px
md
16px
none
0
sm
0
shadows3 items
lg
0 22px 60px rgba(18,26,32,0.08)
md
0 12px 30px rgba(18,26,32,0.06)
sm
0 1px 0 rgba(18,26,32,0.04)
spacing2 items
base
8px
scale
4, 8, 12, 16, 24, 32, 48, 64, 96
surfaces3 items
bg pattern
No generic grid; optional horizontal document ruling via repeating-linear-gradient at 36px intervals inside text wells only, opacity under 3%.
card style
Panels have 16px or 24px radii, 1px rgba(18,26,32,0.08) border, a 1px top highlight rgba(255,255,255,0.92), and restrained shadow only for elevated inspector surfaces.
treatment
Crisp white and blue-white ceramic panels on smoke-blue canvas; use inset dividers and no decorative gradients.
typography10 items
base size
16px
body font
IBM Plex Sans
fallbacks
Newsreader falls back to Georgia, serif; IBM Plex Sans falls back to Inter, ui-sans-serif, system-ui, sans-serif; IBM Plex Mono falls back to ui-monospace, SFMono-Regular, Menlo, monospace.
google fonts url
https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,400;0,450;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500;600&family=Newsreader:opsz,wght@16..72,500;16..72,600&display=swap
heading font
Newsreader
letter spacing
-0.02em
line height
1.55
mono font
IBM Plex Mono
roles
body IBM Plex Sans 400/450 at 15-16px with 1.55 line-height and -0.02em tracking for docs, descriptions, forms, and navigation.·data IBM Plex Mono 500 for IDs, times, coordinates, and numerals using tabular alignment and 0em tracking.·display Newsreader 500/600 for section titles only, 1.12 line-height, -0.035em tracking, optical-size feeling through large but modest sizes.·labels IBM Plex Sans 600 uppercase micro-labels at 11px with 0.08em tracking; normal labels remain sentence case 13px/1.45.
scale ratio
1.2
rules
composition
Begin with an app shell, not a marketing hero: persistent rail, header, workspace, and inspector all visible.Use asymmetric columns such as 220px navigation, minmax table/document workspace, and 340px inspector rather than equal card rows.Make one dense zone and one spacious reading zone in every major screen so rhythm is not uniformly 24px.Prefer fine dividers and section headers over nested cards; if a panel is nested it must have a different function and lower visual weight.Use cyan calibration rails to locate the current object across navigation, table row, and inspector instead of adding badges everywhere.Keep iconography optional, monochrome, and label-supported; text carries meaning.
density
The language supports enterprise density through compact 36px controls and 40px table rows, but surrounding groups expand to 48-96px gaps so dense work never becomes cramped.
hierarchy
Section titles use Newsreader, restrained weight, and -0.035em tracking; never huge, tight, or overbold.Primary UI labels are sentence case IBM Plex Sans 500/600 with readable 13px sizes; micro-labels can be uppercase with 0.08em tracking.Body and documentation copy sits at 15-16px, 1.55 line-height, and 54-72ch measure to protect comprehension.Tables use 13-14px cells with 36-44px row height, tabular mono numerals, and color only for selected/current states.Primary action is the only filled cyan control; secondary actions are white with ink borders.
signature patterns
Calibration rails: active modules receive a 2px cyan left border plus a short 18px horizontal rule aligned to the title baseline.Document wells: long-form notes appear on ruled white surfaces using ultra-low-opacity horizontal lines, not generic page grids.Offset focus frames: keyboard focus draws a 2px cyan outline with 2px offset around square or 16px controls and never uses glow shadows.State continuity: the same cyan rail aligns the selected nav item, chosen table row, and inspector header for one visible object path.Measured table density: rows use mono IDs and tabular numerals with subtle row separators instead of boxed nested stat cards.
layout
breakpoints
>=1180px three-column instrument shell; 760-1179px rail becomes top tabs and inspector stacks below workspace; <760px single-column flow with sticky action bar and full-width controls.
density
Compact control density is allowed for settings and data entry, but rows, form fields, and metadata keep line-height above 1.4 and never compress below readable touch targets on mobile.
grid

Desktop uses a 220px rail, 1fr workspace, and 340px inspector inside a max 1440px app frame with 16-24px gutters; content columns avoid equal card triplets.

responsive
Tables become horizontally scrollable within a bordered well on tablet and convert key rows into label/value strips on mobile; focus outlines and rail cues remain visible.
whitespace
Tight related label/value gaps are 4-8px, form field groups are 12-16px, panel padding is 24px, and unrelated screen regions separate by 64-96px to pass the 8:1 rhythm test.
guidance
do
  • Use cool ceramic whites, smoke-blue canvas, graphite text, and near-invisible rgba dividers as the foundation.
  • Reserve cyan for primary actions, keyboard focus, active navigation, selected rows, and data highlights that require attention.
  • Pair Newsreader section titles with IBM Plex Sans UI/body and IBM Plex Mono data, or preserve the same role contrast if substituting fonts.
  • Keep body copy 15-16px with 1.5-1.6 line-height; keep captions and metadata readable with 12-13px minimum and enough leading.
  • Prefer one dominant workspace plus one inspector over equal-card dashboards; let form and table structure create interest.
  • Show focus states on every interactive element with offset cyan outlines meeting contrast requirements.
  • Use semantic colors separately from accent cyan and verify AA contrast for text, controls, and status messages.
  • Tokenize row height, divider opacity, control height, rail width, and type roles so implementation stays consistent.
avoid
  • Do not use huge overbold tight-tracked headings, billboard hero sections, or gradient keyword emphasis.
  • Do not add sterile gradient surfaces, generic grid backgrounds, pulsing-dot pills, or unrelated icon bento boxes.
  • Do not use beige as taste shorthand; if a warm paper exception is needed, justify it and keep it conceptually earned.
  • Do not make three equal stat cards in a row or nest rounded cards inside rounded cards to fill space.
  • Do not rely on icons without text labels in settings, docs, forms, or tables.
  • Do not set dense UI at 14px with default tracking and cramped line-height; readability is the main luxury.
  • Do not let semantic success/error/warning colors compete with cyan accent usage.
  • Do not hide browser focus outlines unless replaced by the offset focus frame.
katagami spec
# Ceramic Calibration Console

## Philosophy

Ceramic Calibration Console is a restrained product interface language for technical settings, project spaces, forms, documentation, and data tables. It treats the application as a calibrated instrument: quiet ceramic surfaces, compact controls, highly readable labels, and a single fresh cyan accent used only where attention or focus is earned.

### Values

- Readability before atmosphere: labels, metadata, captions, and table cells keep generous leading and modest weight so dense product work stays calm.
- Instrument-like restraint: the identity comes from fine calibration rails, crisp dividers, and consistent density rather than decorative gradients or icon bento filler.
- Cool neutral specificity: slate, zinc, ceramic white, graphite, and smoke-blue replace beige monoculture while preserving warmth through type rhythm.
- Accessible signal discipline: cyan marks primary action, focus, active navigation, and selected data only; semantic states remain separate and readable.
- Production credibility: every visual decision is tokenized into surfaces, borders, type roles, state layers, and table/form behavior that can ship in software.
- Compact without being cramped: controls and rows are economical, but text line-height and grouping gaps maintain comprehension.

### Anti-Values

- Huge overbold tight-tracked headings, gradient keyword emphasis, and billboard SaaS hero rhetoric.
- Sterile gradient panels, generic grid backgrounds, unrelated icon bento boxes, and pulsing-dot hero pills.
- Nested rounded stat-card patterns, beige-as-taste monoculture, and decorative color used to fill empty space.
- Browser-default form controls, invisible focus states, and dense tables with 14px low-leading text.

### Visual Character

- Use a pale smoke-blue page canvas with crisp white panels separated by 1px rgba ink dividers and almost no shadows, producing a ceramic instrument casing rather than stacked cards.
- Apply thin cyan calibration rails as 2px left borders and short horizontal rule segments on active panels, selected table rows, and focused form groups.
- Build hierarchy with modest Newsreader section titles, IBM Plex Sans UI/body text, uppercase micro-labels with positive tracking, and tabular IBM Plex Mono numerals.
- Compose application shells as asymmetric split workspaces: a narrow navigation rail, a broad table/document column, and an inset settings inspector with visible density contrast.
- Render focus and active states as squared cyan outlines offset from 0/16px radii, never as glows, pulsing dots, gradients, or animated pills.

## Tokens

### Borders

- **Accent Width**: 2px
- **Character**: Near-invisible ink dividers with cyan calibration rails for selected or focused regions.
- **Default Width**: 1px
- **Style**: solid

### Colors

| Name | Value |
|------|-------|
| accent | `#0B7895` |
| background | `#F3F7F8` |
| border | `#121A2014` |
| error | `#B33A3A` |
| info | `#0B7895` |
| muted | `#64727B` |
| primary | `#0B7895` |
| secondary | `#3E5360` |
| success | `#357A53` |
| surface | `#FFFFFF` |
| text | `#121A20` |
| warning | `#8A6815` |

### Motion

- **Duration**: 140ms
- **Easing**: cubic-bezier(.2,0,.1,1)
- **Philosophy**: Functional state confirmation only: color, border, and slight translate changes; no pulsing, parallax, or ornamental animation.

### Radii

- **Full**: 9999px
- **Lg**: 24px
- **Md**: 16px
- **None**: 0
- **Sm**: 0

### Shadows

- **Lg**: 0 22px 60px rgba(18,26,32,0.08)
- **Md**: 0 12px 30px rgba(18,26,32,0.06)
- **Sm**: 0 1px 0 rgba(18,26,32,0.04)

### Spacing

- **Base**: 8px
- **Scale**: [4,8,12,16,24,32,48,64,96]

### Surfaces

- **Bg Pattern**: No generic grid; optional horizontal document ruling via repeating-linear-gradient at 36px intervals inside text wells only, opacity under 3%.
- **Card Style**: Panels have 16px or 24px radii, 1px rgba(18,26,32,0.08) border, a 1px top highlight rgba(255,255,255,0.92), and restrained shadow only for elevated inspector surfaces.
- **Treatment**: Crisp white and blue-white ceramic panels on smoke-blue canvas; use inset dividers and no decorative gradients.

### Typography

- **Base Size**: 16px
- **Body Font**: IBM Plex Sans
- **Fallbacks**: Newsreader falls back to Georgia, serif; IBM Plex Sans falls back to Inter, ui-sans-serif, system-ui, sans-serif; IBM Plex Mono falls back to ui-monospace, SFMono-Regular, Menlo, monospace.
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,400;0,450;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500;600&family=Newsreader:opsz,wght@16..72,500;16..72,600&display=swap
- **Heading Font**: Newsreader
- **Letter Spacing**: -0.02em
- **Line Height**: 1.55
- **Mono Font**: IBM Plex Mono
- **Roles**: {"body":"IBM Plex Sans 400/450 at 15-16px with 1.55 line-height and -0.02em tracking for docs, descriptions, forms, and navigation.","data":"IBM Plex Mono 500 for IDs, times, coordinates, and numerals using tabular alignment and 0em tracking.","display":"Newsreader 500/600 for section titles only, 1.12 line-height, -0.035em tracking, optical-size feeling through large but modest sizes.","labels":"IBM Plex Sans 600 uppercase micro-labels at 11px with 0.08em tracking; normal labels remain sentence case 13px/1.45."}
- **Scale Ratio**: 1.2

## Rules

### Composition

- Begin with an app shell, not a marketing hero: persistent rail, header, workspace, and inspector all visible.
- Use asymmetric columns such as 220px navigation, minmax table/document workspace, and 340px inspector rather than equal card rows.
- Make one dense zone and one spacious reading zone in every major screen so rhythm is not uniformly 24px.
- Prefer fine dividers and section headers over nested cards; if a panel is nested it must have a different function and lower visual weight.
- Use cyan calibration rails to locate the current object across navigation, table row, and inspector instead of adding badges everywhere.
- Keep iconography optional, monochrome, and label-supported; text carries meaning.

### Density

The language supports enterprise density through compact 36px controls and 40px table rows, but surrounding groups expand to 48-96px gaps so dense work never becomes cramped.

### Hierarchy

- Section titles use Newsreader, restrained weight, and -0.035em tracking; never huge, tight, or overbold.
- Primary UI labels are sentence case IBM Plex Sans 500/600 with readable 13px sizes; micro-labels can be uppercase with 0.08em tracking.
- Body and documentation copy sits at 15-16px, 1.55 line-height, and 54-72ch measure to protect comprehension.
- Tables use 13-14px cells with 36-44px row height, tabular mono numerals, and color only for selected/current states.
- Primary action is the only filled cyan control; secondary actions are white with ink borders.

### Signature Patterns

- Calibration rails: active modules receive a 2px cyan left border plus a short 18px horizontal rule aligned to the title baseline.
- Document wells: long-form notes appear on ruled white surfaces using ultra-low-opacity horizontal lines, not generic page grids.
- Offset focus frames: keyboard focus draws a 2px cyan outline with 2px offset around square or 16px controls and never uses glow shadows.
- State continuity: the same cyan rail aligns the selected nav item, chosen table row, and inspector header for one visible object path.
- Measured table density: rows use mono IDs and tabular numerals with subtle row separators instead of boxed nested stat cards.

## Layout

### Breakpoints

>=1180px three-column instrument shell; 760-1179px rail becomes top tabs and inspector stacks below workspace; <760px single-column flow with sticky action bar and full-width controls.

### Density

Compact control density is allowed for settings and data entry, but rows, form fields, and metadata keep line-height above 1.4 and never compress below readable touch targets on mobile.

### Grid

Desktop uses a 220px rail, 1fr workspace, and 340px inspector inside a max 1440px app frame with 16-24px gutters; content columns avoid equal card triplets.

### Responsive

Tables become horizontally scrollable within a bordered well on tablet and convert key rows into label/value strips on mobile; focus outlines and rail cues remain visible.

### Whitespace

Tight related label/value gaps are 4-8px, form field groups are 12-16px, panel padding is 24px, and unrelated screen regions separate by 64-96px to pass the 8:1 rhythm test.

## Guidance

### Do

- Use cool ceramic whites, smoke-blue canvas, graphite text, and near-invisible rgba dividers as the foundation.
- Reserve cyan for primary actions, keyboard focus, active navigation, selected rows, and data highlights that require attention.
- Pair Newsreader section titles with IBM Plex Sans UI/body and IBM Plex Mono data, or preserve the same role contrast if substituting fonts.
- Keep body copy 15-16px with 1.5-1.6 line-height; keep captions and metadata readable with 12-13px minimum and enough leading.
- Prefer one dominant workspace plus one inspector over equal-card dashboards; let form and table structure create interest.
- Show focus states on every interactive element with offset cyan outlines meeting contrast requirements.
- Use semantic colors separately from accent cyan and verify AA contrast for text, controls, and status messages.
- Tokenize row height, divider opacity, control height, rail width, and type roles so implementation stays consistent.

### Don't

- Do not use huge overbold tight-tracked headings, billboard hero sections, or gradient keyword emphasis.
- Do not add sterile gradient surfaces, generic grid backgrounds, pulsing-dot pills, or unrelated icon bento boxes.
- Do not use beige as taste shorthand; if a warm paper exception is needed, justify it and keep it conceptually earned.
- Do not make three equal stat cards in a row or nest rounded cards inside rounded cards to fill space.
- Do not rely on icons without text labels in settings, docs, forms, or tables.
- Do not set dense UI at 14px with default tracking and cramped line-height; readability is the main luxury.
- Do not let semantic success/error/warning colors compete with cyan accent usage.
- Do not hide browser focus outlines unless replaced by the offset focus frame.

### Accessibility

Body text and primary controls meet WCAG AA; cyan on white is used with dark text or thick borders where needed; focus is always visible; data status never depends on color alone.

### Usage Context

Best for settings consoles, project spaces, technical document review, lab/instrument software, admin tables, audit workflows, and refined SaaS product shells that need quiet authority.
DESIGN.md
---
version: "alpha"
name: "Ceramic Calibration Console"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  accent: "#0B7895"
  background: "#F3F7F8"
  error: "#B33A3A"
  info: "#0B7895"
  muted: "#64727B"
  primary: "#0B7895"
  secondary: "#3E5360"
  success: "#357A53"
  surface: "#FFFFFF"
  text: "#121A20"
  warning: "#8A6815"
typography:
  headline-lg:
    fontFamily: "Newsreader"
    fontSize: "1.728rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.02em"
  headline-md:
    fontFamily: "Newsreader"
    fontSize: "1.44rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.02em"
  body-md:
    fontFamily: "IBM Plex Sans"
    fontSize: "16px"
    fontWeight: 400
    lineHeight: 1.55
    letterSpacing: "-0.02em"
  label-md:
    fontFamily: "IBM Plex Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  full: "9999px"
  lg: "24px"
  md: "16px"
  none: "0px"
  sm: "0px"
spacing:
  base: "8px"
  xs: "4px"
  sm: "8px"
  md: "12px"
  lg: "16px"
  xl: "24px"
  2xl: "32px"
  3xl: "48px"
  4xl: "64px"
  step-8: "96px"
components:
  color-reference-accent:
    backgroundColor: "{colors.accent}"
  color-reference-background:
    backgroundColor: "{colors.background}"
  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"
---

# Ceramic Calibration Console

## Overview

Ceramic Calibration Console is a restrained product interface language for technical settings, project spaces, forms, documentation, and data tables. It treats the application as a calibrated instrument: quiet ceramic surfaces, compact controls, highly readable labels, and a single fresh cyan accent used only where attention or focus is earned.

### Values

- Readability before atmosphere: labels, metadata, captions, and table cells keep generous leading and modest weight so dense product work stays calm.
- Instrument-like restraint: the identity comes from fine calibration rails, crisp dividers, and consistent density rather than decorative gradients or icon bento filler.
- Cool neutral specificity: slate, zinc, ceramic white, graphite, and smoke-blue replace beige monoculture while preserving warmth through type rhythm.
- Accessible signal discipline: cyan marks primary action, focus, active navigation, and selected data only; semantic states remain separate and readable.
- Production credibility: every visual decision is tokenized into surfaces, borders, type roles, state layers, and table/form behavior that can ship in software.
- Compact without being cramped: controls and rows are economical, but text line-height and grouping gaps maintain comprehension.

### Anti-Values

- Huge overbold tight-tracked headings, gradient keyword emphasis, and billboard SaaS hero rhetoric.
- Sterile gradient panels, generic grid backgrounds, unrelated icon bento boxes, and pulsing-dot hero pills.
- Nested rounded stat-card patterns, beige-as-taste monoculture, and decorative color used to fill empty space.
- Browser-default form controls, invisible focus states, and dense tables with 14px low-leading text.

### Visual Character

- Use a pale smoke-blue page canvas with crisp white panels separated by 1px rgba ink dividers and almost no shadows, producing a ceramic instrument casing rather than stacked cards.
- Apply thin cyan calibration rails as 2px left borders and short horizontal rule segments on active panels, selected table rows, and focused form groups.
- Build hierarchy with modest Newsreader section titles, IBM Plex Sans UI/body text, uppercase micro-labels with positive tracking, and tabular IBM Plex Mono numerals.
- Compose application shells as asymmetric split workspaces: a narrow navigation rail, a broad table/document column, and an inset settings inspector with visible density contrast.
- Render focus and active states as squared cyan outlines offset from 0/16px radii, never as glows, pulsing dots, gradients, or animated pills.

## 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 | `#0B7895` |
| background | `#F3F7F8` |
| error | `#B33A3A` |
| info | `#0B7895` |
| muted | `#64727B` |
| primary | `#0B7895` |
| secondary | `#3E5360` |
| success | `#357A53` |
| surface | `#FFFFFF` |
| text | `#121A20` |
| warning | `#8A6815` |

## Typography

- **Headline-Lg**: Newsreader, 1.728rem, weight 700, line-height 1.1.
- **Headline-Md**: Newsreader, 1.44rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 16px, 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`

### Breakpoints

>=1180px three-column instrument shell; 760-1179px rail becomes top tabs and inspector stacks below workspace; <760px single-column flow with sticky action bar and full-width controls.

### Density

Compact control density is allowed for settings and data entry, but rows, form fields, and metadata keep line-height above 1.4 and never compress below readable touch targets on mobile.

### Grid

Desktop uses a 220px rail, 1fr workspace, and 340px inspector inside a max 1440px app frame with 16-24px gutters; content columns avoid equal card triplets.

### Responsive

Tables become horizontally scrollable within a bordered well on tablet and convert key rows into label/value strips on mobile; focus outlines and rail cues remain visible.

### Whitespace

Tight related label/value gaps are 4-8px, form field groups are 12-16px, panel padding is 24px, and unrelated screen regions separate by 64-96px to pass the 8:1 rhythm test.

## Elevation & Depth

### Shadows

- **Lg**: 0 22px 60px rgba(18,26,32,0.08)
- **Md**: 0 12px 30px rgba(18,26,32,0.06)
- **Sm**: 0 1px 0 rgba(18,26,32,0.04)

## Shapes

### Rounded

- **Full**: `9999px`
- **Lg**: `24px`
- **Md**: `16px`
- **None**: `0px`
- **Sm**: `0px`

### Surfaces

- **Bg Pattern**: No generic grid; optional horizontal document ruling via repeating-linear-gradient at 36px intervals inside text wells only, opacity under 3%.
- **Card Style**: Panels have 16px or 24px radii, 1px rgba(18,26,32,0.08) border, a 1px top highlight rgba(255,255,255,0.92), and restrained shadow only for elevated inspector surfaces.
- **Treatment**: Crisp white and blue-white ceramic panels on smoke-blue canvas; use inset dividers and no decorative gradients.

### Borders

- **Accent Width**: 2px
- **Character**: Near-invisible ink dividers with cyan calibration rails for selected or focused regions.
- **Default Width**: 1px
- **Style**: solid

## Components

### Composition

- Begin with an app shell, not a marketing hero: persistent rail, header, workspace, and inspector all visible.
- Use asymmetric columns such as 220px navigation, minmax table/document workspace, and 340px inspector rather than equal card rows.
- Make one dense zone and one spacious reading zone in every major screen so rhythm is not uniformly 24px.
- Prefer fine dividers and section headers over nested cards; if a panel is nested it must have a different function and lower visual weight.
- Use cyan calibration rails to locate the current object across navigation, table row, and inspector instead of adding badges everywhere.
- Keep iconography optional, monochrome, and label-supported; text carries meaning.

### Density

The language supports enterprise density through compact 36px controls and 40px table rows, but surrounding groups expand to 48-96px gaps so dense work never becomes cramped.

### Hierarchy

- Section titles use Newsreader, restrained weight, and -0.035em tracking; never huge, tight, or overbold.
- Primary UI labels are sentence case IBM Plex Sans 500/600 with readable 13px sizes; micro-labels can be uppercase with 0.08em tracking.
- Body and documentation copy sits at 15-16px, 1.55 line-height, and 54-72ch measure to protect comprehension.
- Tables use 13-14px cells with 36-44px row height, tabular mono numerals, and color only for selected/current states.
- Primary action is the only filled cyan control; secondary actions are white with ink borders.

### Signature Patterns

- Calibration rails: active modules receive a 2px cyan left border plus a short 18px horizontal rule aligned to the title baseline.
- Document wells: long-form notes appear on ruled white surfaces using ultra-low-opacity horizontal lines, not generic page grids.
- Offset focus frames: keyboard focus draws a 2px cyan outline with 2px offset around square or 16px controls and never uses glow shadows.
- State continuity: the same cyan rail aligns the selected nav item, chosen table row, and inspector header for one visible object path.
- Measured table density: rows use mono IDs and tabular numerals with subtle row separators instead of boxed nested stat cards.

## 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/ceramic-calibration-console/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 cool ceramic whites, smoke-blue canvas, graphite text, and near-invisible rgba dividers as the foundation.
- Do Reserve cyan for primary actions, keyboard focus, active navigation, selected rows, and data highlights that require attention.
- Do Pair Newsreader section titles with IBM Plex Sans UI/body and IBM Plex Mono data, or preserve the same role contrast if substituting fonts.
- Do Keep body copy 15-16px with 1.5-1.6 line-height; keep captions and metadata readable with 12-13px minimum and enough leading.
- Do Prefer one dominant workspace plus one inspector over equal-card dashboards; let form and table structure create interest.
- Do Show focus states on every interactive element with offset cyan outlines meeting contrast requirements.
- Do Use semantic colors separately from accent cyan and verify AA contrast for text, controls, and status messages.
- Do Tokenize row height, divider opacity, control height, rail width, and type roles so implementation stays consistent.
- Don't Do not use huge overbold tight-tracked headings, billboard hero sections, or gradient keyword emphasis.
- Don't Do not add sterile gradient surfaces, generic grid backgrounds, pulsing-dot pills, or unrelated icon bento boxes.
- Don't Do not use beige as taste shorthand; if a warm paper exception is needed, justify it and keep it conceptually earned.
- Don't Do not make three equal stat cards in a row or nest rounded cards inside rounded cards to fill space.
- Don't Do not rely on icons without text labels in settings, docs, forms, or tables.
- Don't Do not set dense UI at 14px with default tracking and cramped line-height; readability is the main luxury.
- Don't Do not let semantic success/error/warning colors compete with cyan accent usage.
- Don't Do not hide browser focus outlines unless replaced by the offset focus frame.

### Accessibility

Body text and primary controls meet WCAG AA; cyan on white is used with dark text or thick borders where needed; focus is always visible; data status never depends on color alone.

### Usage Context

Best for settings consoles, project spaces, technical document review, lab/instrument software, admin tables, audit workflows, and refined SaaS product shells that need quiet authority.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ceramic-calibration-console",
  "type": "registry:theme",
  "title": "Ceramic Calibration Console shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#F3F7F8",
      "foreground": "#121A20",
      "card": "#FFFFFF",
      "card-foreground": "#121A20",
      "popover": "#FFFFFF",
      "popover-foreground": "#121A20",
      "primary": "#0B7895",
      "primary-foreground": "#ffffff",
      "secondary": "#3E5360",
      "secondary-foreground": "#ffffff",
      "muted": "#64727B",
      "muted-foreground": "#121A20",
      "accent": "#0B7895",
      "accent-foreground": "#ffffff",
      "destructive": "#B33A3A",
      "border": "#121A2014",
      "input": "#121A2014",
      "ring": "#0B7895",
      "chart-1": "#0B7895",
      "chart-2": "#3E5360",
      "chart-3": "#0B7895",
      "chart-4": "#357A53",
      "chart-5": "#8A6815",
      "sidebar": "#FFFFFF",
      "sidebar-foreground": "#121A20",
      "sidebar-primary": "#0B7895",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#0B7895",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#121A2014",
      "sidebar-ring": "#0B7895",
      "radius": "16px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#0B7895",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#0B7895",
      "accent-foreground": "#ffffff",
      "destructive": "#B33A3A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#0B7895",
      "chart-1": "#0B7895",
      "chart-2": "#3E5360",
      "chart-3": "#0B7895",
      "chart-4": "#357A53",
      "chart-5": "#8A6815",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#0B7895",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#0B7895",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#0B7895",
      "radius": "16px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "ceramic-calibration-console",
    "slug": "ceramic-calibration-console",
    "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",
        "fallbacks",
        "google_fonts_url",
        "heading_font",
        "letter_spacing",
        "line_height",
        "mono_font",
        "roles",
        "scale_ratio"
      ]
    }
  }
}
```
in the wild

embodiments

the full element showcase
embodiment · ceramic-calibration-console
DESIGN.md

at a glance

Palette

Typography

headline-lgNewsreader · 28px · 700

The quick brown fox jumps

headline-mdNewsreader · 23px · 600

The quick brown fox jumps

body-mdIBM Plex Sans · 16px · 400

The quick brown fox jumps

label-mdIBM Plex Mono · 12px · 600

The quick brown fox jumps

Components

New
Card title

Components rendered with this language’s tokens — colors, type, and rounded corners as specified.

Spacing

  • base8px
  • xs4px
  • sm8px
  • md12px
  • lg16px
  • xl24px
  • 2xl32px
  • 3xl48px
  • 4xl64px
  • step-896px

Shape

full9999px
lg24px
md16px
none0px
sm0px
shadcn/ui

implementation kit

needs agent-authored kitcompatibility fallback
shadcn compatibility only
The generated theme variables are available, but the polished shadcn component recipes and shots have not been authored by the Katagami agent yet.
fallbackprimitives render
Compatibility proof
Local shadcn-style primitives accept the generated theme variables.
primarysurfacemutedwarningerror
table rhythm
buttonok
cardok
inputok
recommendedcompatibility fallback

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
shadcn add
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table
theme css
:root {
  --background: #F3F7F8;
  --foreground: #121A20;
  --card: #FFFFFF;
  --card-foreground: #121A20;
  --popover: #FFFFFF;
  --popover-foreground: #121A20;
  --primary: #0B7895;
  --primary-foreground: #ffffff;
  --secondary: #3E5360;
  --secondary-foreground: #ffffff;
  --muted: #64727B;
  --muted-foreground: #121A20;
  --accent: #0B7895;
  --accent-foreground: #ffffff;
  --destructive: #B33A3A;
  --border: #121A2014;
  --input: #121A2014;
  --ring: #0B7895;
  --chart-1: #0B7895;
  --chart-2: #3E5360;
  --chart-3: #0B7895;
  --chart-4: #357A53;
  --chart-5: #8A6815;
  --sidebar: #FFFFFF;
  --sidebar-foreground: #121A20;
  --sidebar-primary: #0B7895;
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #0B7895;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #121A2014;
  --sidebar-ring: #0B7895;
  --radius: 16px;
}

.dark {
  --background: #0f1115;
  --foreground: #f8fafc;
  --card: #181b22;
  --card-foreground: #f8fafc;
  --popover: #181b22;
  --popover-foreground: #f8fafc;
  --primary: #0B7895;
  --primary-foreground: #ffffff;
  --secondary: #252a33;
  --secondary-foreground: #f8fafc;
  --muted: #252a33;
  --muted-foreground: #a1a1aa;
  --accent: #0B7895;
  --accent-foreground: #ffffff;
  --destructive: #B33A3A;
  --border: #303642;
  --input: #303642;
  --ring: #0B7895;
  --chart-1: #0B7895;
  --chart-2: #3E5360;
  --chart-3: #0B7895;
  --chart-4: #357A53;
  --chart-5: #8A6815;
  --sidebar: #181b22;
  --sidebar-foreground: #f8fafc;
  --sidebar-primary: #0B7895;
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #0B7895;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #303642;
  --sidebar-ring: #0B7895;
  --radius: 16px;
}
tsx starter
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 CeramicCalibrationConsoleShadcnKit() {
  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">Ceramic Calibration Console</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>
  );
}
theme JSONcompatibility fallback
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ceramic-calibration-console",
  "type": "registry:theme",
  "title": "Ceramic Calibration Console shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#F3F7F8",
      "foreground": "#121A20",
      "card": "#FFFFFF",
      "card-foreground": "#121A20",
      "popover": "#FFFFFF",
      "popover-foreground": "#121A20",
      "primary": "#0B7895",
      "primary-foreground": "#ffffff",
      "secondary": "#3E5360",
      "secondary-foreground": "#ffffff",
      "muted": "#64727B",
      "muted-foreground": "#121A20",
      "accent": "#0B7895",
      "accent-foreground": "#ffffff",
      "destructive": "#B33A3A",
      "border": "#121A2014",
      "input": "#121A2014",
      "ring": "#0B7895",
      "chart-1": "#0B7895",
      "chart-2": "#3E5360",
      "chart-3": "#0B7895",
      "chart-4": "#357A53",
      "chart-5": "#8A6815",
      "sidebar": "#FFFFFF",
      "sidebar-foreground": "#121A20",
      "sidebar-primary": "#0B7895",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#0B7895",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#121A2014",
      "sidebar-ring": "#0B7895",
      "radius": "16px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#0B7895",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#0B7895",
      "accent-foreground": "#ffffff",
      "destructive": "#B33A3A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#0B7895",
      "chart-1": "#0B7895",
      "chart-2": "#3E5360",
      "chart-3": "#0B7895",
      "chart-4": "#357A53",
      "chart-5": "#8A6815",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#0B7895",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#0B7895",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#0B7895",
      "radius": "16px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "ceramic-calibration-console",
    "slug": "ceramic-calibration-console",
    "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",
        "fallbacks",
        "google_fonts_url",
        "heading_font",
        "letter_spacing",
        "line_height",
        "mono_font",
        "roles",
        "scale_ratio"
      ]
    }
  }
}
component recipescompatibility fallback
# Ceramic Calibration Console shadcn/ui Components

Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `ceramic-calibration-console`
Slug: `ceramic-calibration-console`

## Intent

Ceramic Calibration Console is a restrained product interface language for technical settings, project spaces, forms, documentation, and data tables. It treats the application as a calibrated instrument: quiet ceramic surfaces, compact controls, highly readable labels, and a single fresh cyan accent used only where attention or focus is earned.

## Required primitives

- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table

Install with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.

## Token cues

Colors:

{
  "accent": "#0B7895",
  "background": "#F3F7F8",
  "border": "#121A2014",
  "error": "#B33A3A",
  "info": "#0B7895",
  "muted": "#64727B",
  "primary": "#0B7895",
  "secondary": "#3E5360",
  "success": "#357A53",
  "surface": "#FFFFFF",
  "text": "#121A20",
  "warning": "#8A6815"
}

Typography:

{
  "base_size": "16px",
  "body_font": "IBM Plex Sans",
  "fallbacks": "Newsreader falls back to Georgia, serif; IBM Plex Sans falls back to Inter, ui-sans-serif, system-ui, sans-serif; IBM Plex Mono falls back to ui-monospace, SFMono-Regular, Menlo, monospace.",
  "google_fonts_url": "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,400;0,450;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500;600&family=Newsreader:opsz,wght@16..72,500;16..72,600&display=swap",
  "heading_font": "Newsreader",
  "letter_spacing": "-0.02em",
  "line_height": 1.55,
  "mono_font": "IBM Plex Mono",
  "roles": {
    "body": "IBM Plex Sans 400/450 at 15-16px with 1.55 line-height and -0.02em tracking for docs, descriptions, forms, and navigation.",
    "data": "IBM Plex Mono 500 for IDs, times, coordinates, and numerals using tabular alignment and 0em tracking.",
    "display": "Newsreader 500/600 for section titles only, 1.12 line-height, -0.035em tracking, optical-size feeling through large but modest sizes.",
    "labels": "IBM Plex Sans 600 uppercase micro-labels at 11px with 0.08em tracking; normal labels remain sentence case 13px/1.45."
  },
  "scale_ratio": 1.2
}

## Visual character to preserve

- Use a pale smoke-blue page canvas with crisp white panels separated by 1px rgba ink dividers and almost no shadows, producing a ceramic instrument casing rather than stacked cards.
- Apply thin cyan calibration rails as 2px left borders and short horizontal rule segments on active panels, selected table rows, and focused form groups.
- Build hierarchy with modest Newsreader section titles, IBM Plex Sans UI/body text, uppercase micro-labels with positive tracking, and tabular IBM Plex Mono numerals.
- Compose application shells as asymmetric split workspaces: a narrow navigation rail, a broad table/document column, and an inset settings inspector with visible density contrast.
- Render focus and active states as squared cyan outlines offset from 0/16px radii, never as glows, pulsing dots, gradients, or animated pills.

## ShadSync visual profile

{
  "family": "system",
  "material": "flat",
  "contour": "pebble",
  "border": "solid",
  "underlay": true,
  "grain": false,
  "stickerBadges": false,
  "motion": "still",
  "density": "balanced",
  "accents": [
    "primary",
    "accent",
    "secondary",
    "muted"
  ]
}

## Signature component recipes

### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.

### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.

### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.

### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.

### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.

## Preview shots

- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.

## Implementation contract

- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/ceramic-calibration-console/registry-theme.json` variables, then use these recipes for composition and state design.
- Preserve Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: Use cool ceramic whites, smoke-blue canvas, graphite text, and near-invisible rgba dividers as the foundation.; Reserve cyan for primary actions, keyboard focus, active navigation, selected rows, and data highlights that require attention.; Pair Newsreader section titles with IBM Plex Sans UI/body and IBM Plex Mono data, or preserve the same role contrast if substituting fonts.; Keep body copy 15-16px with 1.5-1.6 line-height; keep captions and metadata readable with 12-13px minimum and enough leading.; Prefer one dominant workspace plus one inspector over equal-card dashboards; let form and table structure create interest.; Show focus states on every interactive element with offset cyan outlines meeting contrast requirements.; Use semantic colors separately from accent cyan and verify AA contrast for text, controls, and status messages.; Tokenize row height, divider opacity, control height, rail width, and type roles so implementation stays consistent.
- Do not: Do not use huge overbold tight-tracked headings, billboard hero sections, or gradient keyword emphasis.; Do not add sterile gradient surfaces, generic grid backgrounds, pulsing-dot pills, or unrelated icon bento boxes.; Do not use beige as taste shorthand; if a warm paper exception is needed, justify it and keep it conceptually earned.; Do not make three equal stat cards in a row or nest rounded cards inside rounded cards to fill space.; Do not rely on icons without text labels in settings, docs, forms, or tables.; Do not set dense UI at 14px with default tracking and cramped line-height; readability is the main luxury.; Do not let semantic success/error/warning colors compete with cyan accent usage.; Do not hide browser focus outlines unless replaced by the offset focus frame.

## Copy-paste component example

This generated starter proves the import shape. Production Katagami agents should replace it with a language-specific product composition.

```tsx
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardDescription,
  CardFooter,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";

export function CeramicCalibrationConsoleShadcnKit() {
  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">Ceramic Calibration Console</h2>
          <p className="mt-1 max-w-xl text-sm text-muted-foreground">
            Use the Katagami registry theme, then compose these shadcn primitives
            with the language-specific component recipes.
          </p>
        </div>
        <Button>Apply theme</Button>
      </div>

      <Tabs defaultValue="components">
        <TabsList>
          <TabsTrigger value="components">Components</TabsTrigger>
          <TabsTrigger value="states">States</TabsTrigger>
          <TabsTrigger value="export">Export</TabsTrigger>
        </TabsList>
      </Tabs>

      <Card>
        <CardHeader>
          <CardTitle>Component recipe</CardTitle>
          <CardDescription>
            Replace this starter content with the agent-authored product scene
            from components.md and preview-shots.json.
          </CardDescription>
        </CardHeader>
        <CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
          <Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
          <Button variant="secondary">Preview state</Button>
        </CardContent>
        <CardFooter className="justify-between">
          <Badge>Ready</Badge>
          <Button variant="outline">Copy recipe</Button>
        </CardFooter>
      </Card>
    </section>
  );
}
```

## Layout notes

{
  "breakpoints": ">=1180px three-column instrument shell; 760-1179px rail becomes top tabs and inspector stacks below workspace; <760px single-column flow with sticky action bar and full-width controls.",
  "density": "Compact control density is allowed for settings and data entry, but rows, form fields, and metadata keep line-height above 1.4 and never compress below readable touch targets on mobile.",
  "grid": "Desktop uses a 220px rail, 1fr workspace, and 340px inspector inside a max 1440px app frame with 16-24px gutters; content columns avoid equal card triplets.",
  "responsive": "Tables become horizontally scrollable within a bordered well on tablet and convert key rows into label/value strips on mobile; focus outlines and rail cues remain visible.",
  "whitespace": "Tight related label/value gaps are 4-8px, form field groups are 12-16px, panel padding is 24px, and unrelated screen regions separate by 64-96px to pass the 8:1 rhythm test."
}
preview shotscompatibility fallback
{
  "artifact": "katagami:shadcn-preview-shots",
  "version": "preview-shots-v1",
  "generator": "katagami-ui-compatibility-projection",
  "generatedBy": "katagami-ui-projection",
  "requiresVisualProfile": true,
  "schema": "katagami:shadcn-preview-shots/renderable-v1",
  "renderable": true,
  "language": {
    "id": "ceramic-calibration-console",
    "name": "Ceramic Calibration Console",
    "slug": "ceramic-calibration-console"
  },
  "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": [
    "Use a pale smoke-blue page canvas with crisp white panels separated by 1px rgba ink dividers and almost no shadows, producing a ceramic instrument casing rather than stacked cards.",
    "Apply thin cyan calibration rails as 2px left borders and short horizontal rule segments on active panels, selected table rows, and focused form groups.",
    "Build hierarchy with modest Newsreader section titles, IBM Plex Sans UI/body text, uppercase micro-labels with positive tracking, and tabular IBM Plex Mono numerals.",
    "Compose application shells as asymmetric split workspaces: a narrow navigation rail, a broad table/document column, and an inset settings inspector with visible density contrast.",
    "Render focus and active states as squared cyan outlines offset from 0/16px radii, never as glows, pulsing dots, gradients, or animated pills."
  ],
  "visualProfile": {
    "family": "system",
    "material": "flat",
    "contour": "pebble",
    "border": "solid",
    "underlay": true,
    "grain": false,
    "stickerBadges": false,
    "motion": "still",
    "density": "balanced",
    "accents": [
      "primary",
      "accent",
      "secondary",
      "muted"
    ]
  },
  "shots": [
    {
      "id": "application-shell",
      "title": "Application shell",
      "viewport": "desktop",
      "primitives": [
        "button",
        "card",
        "input",
        "select",
        "tabs",
        "badge",
        "separator",
        "table"
      ],
      "composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
      "mustShow": [
        "primary and secondary actions",
        "card hierarchy",
        "filterable state",
        "table or list density"
      ],
      "avoid": [
        "component inventory walls",
        "placeholder-only content",
        "generic rounded SaaS chrome"
      ],
      "scene": {
        "eyebrow": "workspace spread",
        "headline": "Ceramic Calibration Console launch room",
        "description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
        "primaryAction": "Apply theme",
        "secondaryAction": "Review states",
        "stats": [
          {
            "label": "components",
            "value": "16",
            "tone": "accent"
          },
          {
            "label": "states",
            "value": "ready"
          },
          {
            "label": "density",
            "value": "balanced",
            "tone": "warning"
          }
        ],
        "rows": [
          {
            "label": "Primary flow",
            "value": "mapped",
            "status": "active"
          },
          {
            "label": "Token coverage",
            "value": "semantic",
            "status": "synced"
          },
          {
            "label": "Responsive proof",
            "value": "queued",
            "status": "review"
          }
        ],
        "statuses": [
          "Active",
          "Synced",
          "Draft"
        ]
      }
    },
    {
      "id": "detail-editor",
      "title": "Detail editor",
      "viewport": "tablet",
      "primitives": [
        "button",
        "card",
        "input",
        "textarea",
        "select",
        "checkbox",
        "switch",
        "slider",
        "dialog",
        "sheet"
      ],
      "composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
      "mustShow": [
        "focus ring",
        "error or destructive state",
        "dialog or sheet treatment",
        "written guidance content"
      ],
      "avoid": [
        "unstyled browser controls",
        "floating cards inside cards",
        "missing labels"
      ],
      "scene": {
        "eyebrow": "editing flow",
        "headline": "Language recipe editor",
        "description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
        "primaryAction": "Save recipe",
        "secondaryAction": "Open sheet",
        "fields": [
          {
            "label": "Component family",
            "value": "Narrative cards"
          },
          {
            "label": "State treatment",
            "value": "Visible focus + validation"
          },
          {
            "label": "Motion",
            "value": "Small lift, no opacity-only fade"
          }
        ],
        "statuses": [
          "Focus",
          "Invalid",
          "Confirmed"
        ]
      }
    },
    {
      "id": "data-operations",
      "title": "Data operations",
      "viewport": "mobile",
      "primitives": [
        "button",
        "tabs",
        "badge",
        "dropdown-menu",
        "table",
        "tooltip",
        "separator"
      ],
      "composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
      "mustShow": [
        "responsive reflow",
        "dense row styling",
        "menu affordance",
        "status badge system"
      ],
      "avoid": [
        "desktop-only tables",
        "text overflow",
        "default shadcn spacing without Katagami character"
      ],
      "scene": {
        "eyebrow": "operations",
        "headline": "Compact review queue",
        "description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
        "primaryAction": "Resolve",
        "secondaryAction": "Filter",
        "rows": [
          {
            "label": "Button hierarchy",
            "value": "approved",
            "status": "ok"
          },
          {
            "label": "Table rhythm",
            "value": "needs pass",
            "status": "watch"
          },
          {
            "label": "Empty state",
            "value": "designed",
            "status": "done"
          }
        ],
        "statuses": [
          "Queued",
          "Blocked",
          "Done"
        ]
      }
    }
  ],
  "componentRecipes": [
    {
      "primitive": "button",
      "intent": "Prove action hierarchy, focus, disabled, and destructive states."
    },
    {
      "primitive": "card",
      "intent": "Carry the language surface, border, elevation, and density rules."
    },
    {
      "primitive": "input",
      "intent": "Show labels, focus rings, validation, and spacing rhythm."
    },
    {
      "primitive": "textarea",
      "intent": "Show longer guidance, validation copy, and writing density."
    },
    {
      "primitive": "select",
      "intent": "Show filtering, selection contrast, and menu trigger styling."
    },
    {
      "primitive": "dialog",
      "intent": "Show centered decision states and overlay treatment."
    },
    {
      "primitive": "sheet",
      "intent": "Show contextual side panels and responsive editing."
    },
    {
      "primitive": "tabs",
      "intent": "Show navigational structure and active/inactive contrast."
    },
    {
      "primitive": "badge",
      "intent": "Show compact status vocabulary and semantic colors."
    },
    {
      "primitive": "separator",
      "intent": "Show section rhythm without generic gray dividers."
    },
    {
      "primitive": "checkbox",
      "intent": "Show binary selection with visible focus and checked states."
    },
    {
      "primitive": "switch",
      "intent": "Show settings toggles and on/off contrast."
    },
    {
      "primitive": "slider",
      "intent": "Show numeric adjustment with track/thumb styling."
    },
    {
      "primitive": "tooltip",
      "intent": "Show concise explanation styling above compact controls."
    },
    {
      "primitive": "dropdown-menu",
      "intent": "Show action menus, destructive items, and grouped choices."
    },
    {
      "primitive": "table",
      "intent": "Show dense operational data, separators, row states, and responsive behavior."
    }
  ],
  "qualityRules": {
    "do": [
      "Use cool ceramic whites, smoke-blue canvas, graphite text, and near-invisible rgba dividers as the foundation.",
      "Reserve cyan for primary actions, keyboard focus, active navigation, selected rows, and data highlights that require attention.",
      "Pair Newsreader section titles with IBM Plex Sans UI/body and IBM Plex Mono data, or preserve the same role contrast if substituting fonts.",
      "Keep body copy 15-16px with 1.5-1.6 line-height; keep captions and metadata readable with 12-13px minimum and enough leading.",
      "Prefer one dominant workspace plus one inspector over equal-card dashboards; let form and table structure create interest.",
      "Show focus states on every interactive element with offset cyan outlines meeting contrast requirements.",
      "Use semantic colors separately from accent cyan and verify AA contrast for text, controls, and status messages.",
      "Tokenize row height, divider opacity, control height, rail width, and type roles so implementation stays consistent."
    ],
    "dont": [
      "Do not use huge overbold tight-tracked headings, billboard hero sections, or gradient keyword emphasis.",
      "Do not add sterile gradient surfaces, generic grid backgrounds, pulsing-dot pills, or unrelated icon bento boxes.",
      "Do not use beige as taste shorthand; if a warm paper exception is needed, justify it and keep it conceptually earned.",
      "Do not make three equal stat cards in a row or nest rounded cards inside rounded cards to fill space.",
      "Do not rely on icons without text labels in settings, docs, forms, or tables.",
      "Do not set dense UI at 14px with default tracking and cramped line-height; readability is the main luxury.",
      "Do not let semantic success/error/warning colors compete with cyan accent usage.",
      "Do not hide browser focus outlines unless replaced by the offset focus frame."
    ]
  }
}
related

More like this