Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Portable DESIGN.md source of truth for most agents and apps.
Build hierarchy from how surfaces catch light. Keep panes clear and translucent with no borders or opaque fills. Run a single spectral caustic light-line through the page as the divider and the mark of a focused surface. Hold dispersion (the rainbow fringe) to the highest-contrast edges only.
Importance is carried by light, not by heavier boxes or louder colour. Focused and active elements glow with a cyan ring and gain the spectral top-edge; they never darken. Typography weight provides secondary hierarchy on each clear pane.
Spacious and atmospheric; clear glass needs breathing room. Minimum 22-24px internal padding on panes, generous space above titles.
The caustic light-line: a 2px spectral gradient (cyan -> periwinkle -> rose -> amber, fading at both ends) used as section divider, the top edge of a lit pane, the active-nav underline, and the fill of progress and split-bar tracks; it recolours on a palette swap because it is built from the role accents.
Contained content caps at 1180px centred; the full-bleed hero spans 100vw. Panes float with 20-24px gaps; grids use minmax(0,1fr) and min-width:0 so children shrink rather than overflow.
Whitespace is the optical-black field carrying faint ambient colour, not blank white. Generous internal padding and space above titles.
Low to medium; the refractive material needs room to read.
From ~390px mobile to 2560px+ ultra-wide. Stack to one column on mobile, drop secondary nav links, darken the hero veil for legibility; the hero headline uses clamp(33px,8.2vw,86px) and wraps, never clipping at 390px.
caustic-refraction
Refractive optical-light studies: subjects seen and lit through clear and frosted glass, washed by caustic light with thin chromatic-dispersion fringes on the highest-contrast edges, glowing against deep darkness.
One full-bleed hero per landing showing the caustic beam dispersing across the dark with calm negative space for the overlay; feature and section imagery in the same refractive technique.
# Caustic ## Philosophy A refractive interface system where light behaviour does the structural work. Surfaces stay clear and translucent on optical-black; caustics carry hierarchy, a single spectral light-line carries rhythm, and dispersion marks emphasis. It keeps the source's essence — refraction, translucency, depth through light — but stages it as light in darkness instead of frosting everything into blur. ### Values - Light as structure: a focused surface glows and catches the light rather than darkening or growing a heavier box - Clarity over blur: panes stay clear and translucent; the system changes how light moves across them, not how opaque they are - Refraction as rhythm: one spectral caustic light-line replaces rules and dividers - Dispersion as signal: the rainbow fringe is spent only on the highest-contrast edges, so it always reads as emphasis - Material honesty: surfaces behave like real optical glass against a dark field, the way a prism is shown in a dark room ### Anti-Values - Frosting everything into blur and calling it hierarchy - Opaque flat card fills, grey borders, or one-sided accent edges - Letting the spectrum flood — three accents stay highlighters, never washes - Light-first white minimalism as a default; this language stages light against darkness - Arbitrary in-between radii or hard black drop shadows ### Visual Character - Clear, translucent panes over a deep optical-black field, with a 1px inner highlight and a soft black shadow instead of borders. - A 2px spectral caustic light-line (cyan to periwinkle to rose to amber, fading at both ends) recurs as the divider, the top edge of a focused pane, and the active-nav underline. - Focused and active surfaces glow with a cyan ring rather than darkening; importance reads by how brightly a surface catches the light. - Three spectral accents (cyan, rose, amber) used like highlighters against the dark, plus faint blurred colour-fields as the ambient light the glass refracts. - A disciplined optical geometry of 16px and 24px containers and full pills, Space Grotesk display, Inter body, IBM Plex Mono metadata. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#0A0C12` | | surface | `#12151E` | | surface_2 | `#171B27` | | text | `#F4F6FB` | | muted | `#8A93A8` | | border | `rgba(255,255,255,0.08)` | | hairline | `rgba(255,255,255,0.12)` | | accent | `#3DE0E6` | | accent_2 | `#FF5C8A` | | accent_3 | `#FFC14D` | | on_accent | `#07090F` | | success | `#4FD79B` | | warning | `#FFC14D` | | error | `#FF6B7E` | | info | `#3DE0E6` | ### Typography - **Base Size**: 17px - **Body Font**: Inter - **Heading Font**: Space Grotesk - **Mono Font**: IBM Plex Mono - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: -0.03em - **Line Height**: 1.55 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0px - **Sm**: 16px - **Md**: 24px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 2px 10px rgba(0,0,0,0.40) - **Md**: 0 8px 32px rgba(0,0,0,0.50) - **Lg**: 0 18px 50px rgba(0,0,0,0.55) - **Glow**: 0 0 0 1px rgba(61,224,230,0.35), 0 0 28px rgba(61,224,230,0.22) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Surfaces - **Treatment**: Clear translucent panes: linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.012)) with an inset 1px white highlight and a soft black shadow, over a deep optical-black field carrying faint cyan/rose/amber ambient blobs. - **Card Style**: 24px-radius clear lenses, no borders or opaque fills; a focused (lit) pane glows with a cyan ring and carries the spectral light-line on its top edge. - **Bg Pattern**: Optical-black ground with oversized, very soft blurred cyan, rose, and amber radial fields as the ambient light the glass refracts. ### Borders - **Default Width**: 0 - **Character**: No borders. Depth from a 1px inner highlight, the caustic rim, and soft shadows; never grey edges or one-sided accents. ### Motion - **Duration**: 260ms - **Easing**: cubic-bezier(.2,.8,.2,1) - **Philosophy**: Liquid but restrained behind a reduced-motion gate. The settled page is the no-JS default; an inline script gates a gentle scroll-reveal. Hover lifts a pane 2px and deepens its glow. ## Rules ### Composition Build hierarchy from how surfaces catch light. Keep panes clear and translucent with no borders or opaque fills. Run a single spectral caustic light-line through the page as the divider and the mark of a focused surface. Hold dispersion (the rainbow fringe) to the highest-contrast edges only. ### Hierarchy Importance is carried by light, not by heavier boxes or louder colour. Focused and active elements glow with a cyan ring and gain the spectral top-edge; they never darken. Typography weight provides secondary hierarchy on each clear pane. ### Density Spacious and atmospheric; clear glass needs breathing room. Minimum 22-24px internal padding on panes, generous space above titles. ### Signature The caustic light-line: a 2px spectral gradient (cyan -> periwinkle -> rose -> amber, fading at both ends) used as section divider, the top edge of a lit pane, the active-nav underline, and the fill of progress and split-bar tracks; it recolours on a palette swap because it is built from the role accents. ## Layout ### Grid Contained content caps at 1180px centred; the full-bleed hero spans 100vw. Panes float with 20-24px gaps; grids use minmax(0,1fr) and min-width:0 so children shrink rather than overflow. ### Whitespace Whitespace is the optical-black field carrying faint ambient colour, not blank white. Generous internal padding and space above titles. ### Density Low to medium; the refractive material needs room to read. ### Responsive From ~390px mobile to 2560px+ ultra-wide. Stack to one column on mobile, drop secondary nav links, darken the hero veil for legibility; the hero headline uses clamp(33px,8.2vw,86px) and wraps, never clipping at 390px. ### Breakpoints - **Mobile**: 390px - **Tablet**: 768px - **Desktop**: 1180px ## Guidance ### Do - Build hierarchy from how surfaces catch light; let a focused pane glow rather than darken. - Keep every pane clear and translucent — no opaque flat fills, no borders. - Run the single spectral caustic light-line through the page as the divider and the mark of a lit surface. - Hold dispersion (the rainbow fringe) to the sharpest, highest-contrast edges only. - Stay on optical-black so the three spectral accents glow like real refracted light. - Commit to 16px and 24px containers and full pills; style every form control with custom states. - Use soft, colored or black shadows and a cyan glow for focus — never hard outlines. ### Don't - Don't frost or blur everything into a hierarchy; clarity is the point. - Don't use opaque flat card fills, grey borders, or one-sided accent edges. - Don't let the spectrum flood; three accents used like highlighters, never washes. - Don't mix arbitrary radii; commit to 16 / 24 / full. - Don't let semantic colours lead — they stay a quiet, legible part of the palette. - Don't box navigation into a floating pill bar or nest cards. ### Accessibility Text holds WCAG AA contrast against the clear pane surface, not just the field behind it. Focus is a visible cyan glow ring. Custom checkboxes, radios, switches, sliders, selects, and progress replace all browser defaults. Reduced-motion users get the settled state instantly with no blur transitions. ## Imagery Direction ### Pairs With caustic-refraction ### Summary Refractive optical-light studies: subjects seen and lit through clear and frosted glass, washed by caustic light with thin chromatic-dispersion fringes on the highest-contrast edges, glowing against deep darkness. ### Subjects - a faceted optical prism - a single product or object through glass - a portrait through a lens - a city skyline refracted through glass - abstract caustic light-nets ### Usage One full-bleed hero per landing showing the caustic beam dispersing across the dark with calm negative space for the overlay; feature and section imagery in the same refractive technique.
---
version: "alpha"
name: "Caustic"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#0A0C12"
surface: "#12151E"
surface_2: "#171B27"
text: "#F4F6FB"
muted: "#8A93A8"
accent: "#3DE0E6"
accent_2: "#FF5C8A"
accent_3: "#FFC14D"
on_accent: "#07090F"
success: "#4FD79B"
warning: "#FFC14D"
error: "#FF6B7E"
info: "#3DE0E6"
typography:
headline-lg:
fontFamily: "Space Grotesk"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.03em"
headline-md:
fontFamily: "Space Grotesk"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.03em"
body-md:
fontFamily: "Inter"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.03em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "16px"
md: "24px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_3:
backgroundColor: "{colors.accent_3}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#000000"
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"
---
# Caustic
## Overview
A refractive interface system where light behaviour does the structural work. Surfaces stay clear and translucent on optical-black; caustics carry hierarchy, a single spectral light-line carries rhythm, and dispersion marks emphasis. It keeps the source's essence — refraction, translucency, depth through light — but stages it as light in darkness instead of frosting everything into blur.
### Values
- Light as structure: a focused surface glows and catches the light rather than darkening or growing a heavier box
- Clarity over blur: panes stay clear and translucent; the system changes how light moves across them, not how opaque they are
- Refraction as rhythm: one spectral caustic light-line replaces rules and dividers
- Dispersion as signal: the rainbow fringe is spent only on the highest-contrast edges, so it always reads as emphasis
- Material honesty: surfaces behave like real optical glass against a dark field, the way a prism is shown in a dark room
### Anti-Values
- Frosting everything into blur and calling it hierarchy
- Opaque flat card fills, grey borders, or one-sided accent edges
- Letting the spectrum flood — three accents stay highlighters, never washes
- Light-first white minimalism as a default; this language stages light against darkness
- Arbitrary in-between radii or hard black drop shadows
### Visual Character
- Clear, translucent panes over a deep optical-black field, with a 1px inner highlight and a soft black shadow instead of borders.
- A 2px spectral caustic light-line (cyan to periwinkle to rose to amber, fading at both ends) recurs as the divider, the top edge of a focused pane, and the active-nav underline.
- Focused and active surfaces glow with a cyan ring rather than darkening; importance reads by how brightly a surface catches the light.
- Three spectral accents (cyan, rose, amber) used like highlighters against the dark, plus faint blurred colour-fields as the ambient light the glass refracts.
- A disciplined optical geometry of 16px and 24px containers and full pills, Space Grotesk display, Inter body, IBM Plex Mono metadata.
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| bg | `#0A0C12` |
| surface | `#12151E` |
| surface_2 | `#171B27` |
| text | `#F4F6FB` |
| muted | `#8A93A8` |
| accent | `#3DE0E6` |
| accent_2 | `#FF5C8A` |
| accent_3 | `#FFC14D` |
| on_accent | `#07090F` |
| success | `#4FD79B` |
| warning | `#FFC14D` |
| error | `#FF6B7E` |
| info | `#3DE0E6` |
## Typography
- **Headline-Lg**: Space Grotesk, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Space Grotesk, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Inter, 17px, weight 400, line-height 1.5.
- **Label-Md**: 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`
### Grid
Contained content caps at 1180px centred; the full-bleed hero spans 100vw. Panes float with 20-24px gaps; grids use minmax(0,1fr) and min-width:0 so children shrink rather than overflow.
### Whitespace
Whitespace is the optical-black field carrying faint ambient colour, not blank white. Generous internal padding and space above titles.
### Density
Low to medium; the refractive material needs room to read.
### Responsive
From ~390px mobile to 2560px+ ultra-wide. Stack to one column on mobile, drop secondary nav links, darken the hero veil for legibility; the hero headline uses clamp(33px,8.2vw,86px) and wraps, never clipping at 390px.
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 768px
- **Desktop**: 1180px
## Elevation & Depth
### Shadows
- **Sm**: 0 2px 10px rgba(0,0,0,0.40)
- **Md**: 0 8px 32px rgba(0,0,0,0.50)
- **Lg**: 0 18px 50px rgba(0,0,0,0.55)
- **Glow**: 0 0 0 1px rgba(61,224,230,0.35), 0 0 28px rgba(61,224,230,0.22)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `16px`
- **Md**: `24px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: Clear translucent panes: linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.012)) with an inset 1px white highlight and a soft black shadow, over a deep optical-black field carrying faint cyan/rose/amber ambient blobs.
- **Card Style**: 24px-radius clear lenses, no borders or opaque fills; a focused (lit) pane glows with a cyan ring and carries the spectral light-line on its top edge.
- **Bg Pattern**: Optical-black ground with oversized, very soft blurred cyan, rose, and amber radial fields as the ambient light the glass refracts.
### Borders
- **Default Width**: 0
- **Character**: No borders. Depth from a 1px inner highlight, the caustic rim, and soft shadows; never grey edges or one-sided accents.
## Components
### Composition
Build hierarchy from how surfaces catch light. Keep panes clear and translucent with no borders or opaque fills. Run a single spectral caustic light-line through the page as the divider and the mark of a focused surface. Hold dispersion (the rainbow fringe) to the highest-contrast edges only.
### Hierarchy
Importance is carried by light, not by heavier boxes or louder colour. Focused and active elements glow with a cyan ring and gain the spectral top-edge; they never darken. Typography weight provides secondary hierarchy on each clear pane.
### Density
Spacious and atmospheric; clear glass needs breathing room. Minimum 22-24px internal padding on panes, generous space above titles.
### Signature
The caustic light-line: a 2px spectral gradient (cyan -> periwinkle -> rose -> amber, fading at both ends) used as section divider, the top edge of a lit pane, the active-nav underline, and the fill of progress and split-bar tracks; it recolours on a palette swap because it is built from the role accents.
## 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-019efd9f-65f4-7b13-a093-13b150e72873/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 Build hierarchy from how surfaces catch light; let a focused pane glow rather than darken.
- Do Keep every pane clear and translucent — no opaque flat fills, no borders.
- Do Run the single spectral caustic light-line through the page as the divider and the mark of a lit surface.
- Do Hold dispersion (the rainbow fringe) to the sharpest, highest-contrast edges only.
- Do Stay on optical-black so the three spectral accents glow like real refracted light.
- Do Commit to 16px and 24px containers and full pills; style every form control with custom states.
- Do Use soft, colored or black shadows and a cyan glow for focus — never hard outlines.
- Don't Don't frost or blur everything into a hierarchy; clarity is the point.
- Don't Don't use opaque flat card fills, grey borders, or one-sided accent edges.
- Don't Don't let the spectrum flood; three accents used like highlighters, never washes.
- Don't Don't mix arbitrary radii; commit to 16 / 24 / full.
- Don't Don't let semantic colours lead — they stay a quiet, legible part of the palette.
- Don't Don't box navigation into a floating pill bar or nest cards.
### Accessibility
Text holds WCAG AA contrast against the clear pane surface, not just the field behind it. Focus is a visible cyan glow ring. Custom checkboxes, radios, switches, sliders, selects, and progress replace all browser defaults. Reduced-motion users get the settled state instantly with no blur transitions.
## Imagery Direction
### Pairs With
caustic-refraction
### Summary
Refractive optical-light studies: subjects seen and lit through clear and frosted glass, washed by caustic light with thin chromatic-dispersion fringes on the highest-contrast edges, glowing against deep darkness.
### Subjects
- a faceted optical prism
- a single product or object through glass
- a portrait through a lens
- a city skyline refracted through glass
- abstract caustic light-nets
### Usage
One full-bleed hero per landing showing the caustic beam dispersing across the dark with calm negative space for the overlay; feature and section imagery in the same refractive technique.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "caustic",
"type": "registry:theme",
"title": "Caustic shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0A0C12",
"foreground": "#F4F6FB",
"card": "#12151E",
"card-foreground": "#F4F6FB",
"popover": "#12151E",
"popover-foreground": "#F4F6FB",
"primary": "#F4F6FB",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#8A93A8",
"muted-foreground": "#F4F6FB",
"accent": "#3DE0E6",
"accent-foreground": "#111111",
"destructive": "#FF6B7E",
"border": "rgba(255,255,255,0.08)",
"input": "rgba(255,255,255,0.08)",
"ring": "#3DE0E6",
"chart-1": "#F4F6FB",
"chart-2": "#f4f4f5",
"chart-3": "#3DE0E6",
"chart-4": "#4FD79B",
"chart-5": "#FFC14D",
"sidebar": "#12151E",
"sidebar-foreground": "#F4F6FB",
"sidebar-primary": "#F4F6FB",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#3DE0E6",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "rgba(255,255,255,0.08)",
"sidebar-ring": "#3DE0E6",
"radius": "24px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#F4F6FB",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#3DE0E6",
"accent-foreground": "#111111",
"destructive": "#FF6B7E",
"border": "#303642",
"input": "#303642",
"ring": "#3DE0E6",
"chart-1": "#F4F6FB",
"chart-2": "#f4f4f5",
"chart-3": "#3DE0E6",
"chart-4": "#4FD79B",
"chart-5": "#FFC14D",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#F4F6FB",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#3DE0E6",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#3DE0E6",
"radius": "24px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efd9f-65f4-7b13-a093-13b150e72873",
"slug": "caustic",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_3",
"bg",
"border",
"error",
"hairline",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"glow",
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"character",
"default_width"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
produced by opus-4.8 · sourced by opus-4.8 · images by gpt-image-2
Keep Causticand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
Copy this when the target app uses shadcn/ui. It packages the Katagami DESIGN.md context with the install list, theme variables, component recipes, preview-shot contract, and starter TSX in one Markdown companion.
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #0A0C12;
--foreground: #F4F6FB;
--card: #12151E;
--card-foreground: #F4F6FB;
--popover: #12151E;
--popover-foreground: #F4F6FB;
--primary: #F4F6FB;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #8A93A8;
--muted-foreground: #F4F6FB;
--accent: #3DE0E6;
--accent-foreground: #111111;
--destructive: #FF6B7E;
--border: rgba(255,255,255,0.08);
--input: rgba(255,255,255,0.08);
--ring: #3DE0E6;
--chart-1: #F4F6FB;
--chart-2: #f4f4f5;
--chart-3: #3DE0E6;
--chart-4: #4FD79B;
--chart-5: #FFC14D;
--sidebar: #12151E;
--sidebar-foreground: #F4F6FB;
--sidebar-primary: #F4F6FB;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #3DE0E6;
--sidebar-accent-foreground: #111111;
--sidebar-border: rgba(255,255,255,0.08);
--sidebar-ring: #3DE0E6;
--radius: 24px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #F4F6FB;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #3DE0E6;
--accent-foreground: #111111;
--destructive: #FF6B7E;
--border: #303642;
--input: #303642;
--ring: #3DE0E6;
--chart-1: #F4F6FB;
--chart-2: #f4f4f5;
--chart-3: #3DE0E6;
--chart-4: #4FD79B;
--chart-5: #FFC14D;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #F4F6FB;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #3DE0E6;
--sidebar-accent-foreground: #111111;
--sidebar-border: #303642;
--sidebar-ring: #3DE0E6;
--radius: 24px;
}
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 CausticShadcnKit() {
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">Caustic</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": "caustic",
"type": "registry:theme",
"cssVars": {
"theme": {
"font-sans": "Inter, system-ui, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"font-display": "Space Grotesk, system-ui, sans-serif",
"radius": "1.5rem"
},
"dark": {
"background": "#0A0C12",
"foreground": "#F4F6FB",
"card": "#12151E",
"card-foreground": "#F4F6FB",
"popover": "#12151E",
"popover-foreground": "#F4F6FB",
"primary": "#3DE0E6",
"primary-foreground": "#07090F",
"secondary": "#171B27",
"secondary-foreground": "#F4F6FB",
"muted": "#171B27",
"muted-foreground": "#8A93A8",
"accent": "#FF5C8A",
"accent-foreground": "#160308",
"destructive": "#FF6B7E",
"destructive-foreground": "#2a060c",
"border": "rgba(255,255,255,0.12)",
"input": "rgba(255,255,255,0.12)",
"ring": "#3DE0E6",
"chart-1": "#3DE0E6",
"chart-2": "#7FA9FF",
"chart-3": "#FF5C8A",
"chart-4": "#FFC14D",
"chart-5": "#4FD79B",
"radius": "1.5rem"
},
"light": {
"background": "#0A0C12",
"foreground": "#F4F6FB",
"card": "#12151E",
"card-foreground": "#F4F6FB",
"popover": "#12151E",
"popover-foreground": "#F4F6FB",
"primary": "#3DE0E6",
"primary-foreground": "#07090F",
"secondary": "#171B27",
"secondary-foreground": "#F4F6FB",
"muted": "#171B27",
"muted-foreground": "#8A93A8",
"accent": "#FF5C8A",
"accent-foreground": "#160308",
"destructive": "#FF6B7E",
"destructive-foreground": "#2a060c",
"border": "rgba(255,255,255,0.12)",
"input": "rgba(255,255,255,0.12)",
"ring": "#3DE0E6",
"radius": "1.5rem"
}
},
"visualProfile": {
"mode": "dark",
"ground": "optical-black",
"material": "clear-translucent-glass",
"borders": "none (1px inner highlight + caustic rim instead)",
"radius": { "sm": "16px", "lg": "24px", "full": "9999px" },
"elevation": "soft black shadows + cyan glow on focus",
"signature": "spectral caustic light-line (cyan->periwinkle->rose->amber) as divider, lit-edge mark, and track fill",
"accentUsage": "three spectral accents used like highlighters; never washes",
"notes": "Surfaces stay clear and translucent over a deep dark field. Focus glows rather than darkens. Do not stamp a generic house chassis or grey borders."
}
}
# Caustic shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efd9f-65f4-7b13-a093-13b150e72873`
Slug: `caustic`
## Intent
A refractive interface system where light behaviour does the structural work. Surfaces stay clear and translucent on optical-black; caustics carry hierarchy, a single spectral light-line carries rhythm, and dispersion marks emphasis. It keeps the source's essence — refraction, translucency, depth through light — but stages it as light in darkness instead of frosting everything into blur.
## 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:
{
"bg": "#0A0C12",
"surface": "#12151E",
"surface_2": "#171B27",
"text": "#F4F6FB",
"muted": "#8A93A8",
"border": "rgba(255,255,255,0.08)",
"hairline": "rgba(255,255,255,0.12)",
"accent": "#3DE0E6",
"accent_2": "#FF5C8A",
"accent_3": "#FFC14D",
"on_accent": "#07090F",
"success": "#4FD79B",
"warning": "#FFC14D",
"error": "#FF6B7E",
"info": "#3DE0E6"
}
Typography:
{
"base_size": "17px",
"body_font": "Inter",
"heading_font": "Space Grotesk",
"mono_font": "IBM Plex Mono",
"heading_weight": "600",
"heading_transform": "none",
"letter_spacing": "-0.03em",
"line_height": "1.55",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap"
}
## Visual character to preserve
- Clear, translucent panes over a deep optical-black field, with a 1px inner highlight and a soft black shadow instead of borders.
- A 2px spectral caustic light-line (cyan to periwinkle to rose to amber, fading at both ends) recurs as the divider, the top edge of a focused pane, and the active-nav underline.
- Focused and active surfaces glow with a cyan ring rather than darkening; importance reads by how brightly a surface catches the light.
- Three spectral accents (cyan, rose, amber) used like highlighters against the dark, plus faint blurred colour-fields as the ambient light the glass refracts.
- A disciplined optical geometry of 16px and 24px containers and full pills, Space Grotesk display, Inter body, IBM Plex Mono metadata.
## ShadSync visual profile
{
"family": "system",
"material": "flat",
"contour": "blob",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "lift",
"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/caustic/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: Build hierarchy from how surfaces catch light; let a focused pane glow rather than darken.; Keep every pane clear and translucent — no opaque flat fills, no borders.; Run the single spectral caustic light-line through the page as the divider and the mark of a lit surface.; Hold dispersion (the rainbow fringe) to the sharpest, highest-contrast edges only.; Stay on optical-black so the three spectral accents glow like real refracted light.; Commit to 16px and 24px containers and full pills; style every form control with custom states.; Use soft, colored or black shadows and a cyan glow for focus — never hard outlines.
- Do not: Don't frost or blur everything into a hierarchy; clarity is the point.; Don't use opaque flat card fills, grey borders, or one-sided accent edges.; Don't let the spectrum flood; three accents used like highlighters, never washes.; Don't mix arbitrary radii; commit to 16 / 24 / full.; Don't let semantic colours lead — they stay a quiet, legible part of the palette.; Don't box navigation into a floating pill bar or nest cards.
## 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 CausticShadcnKit() {
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">Caustic</h2>
<p className="mt-1 max-w-xl text-sm text-muted-foreground">
Use the Katagami registry theme, then compose these shadcn primitives
with the language-specific component recipes.
</p>
</div>
<Button>Apply theme</Button>
</div>
<Tabs defaultValue="components">
<TabsList>
<TabsTrigger value="components">Components</TabsTrigger>
<TabsTrigger value="states">States</TabsTrigger>
<TabsTrigger value="export">Export</TabsTrigger>
</TabsList>
</Tabs>
<Card>
<CardHeader>
<CardTitle>Component recipe</CardTitle>
<CardDescription>
Replace this starter content with the agent-authored product scene
from components.md and preview-shots.json.
</CardDescription>
</CardHeader>
<CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
<Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
<Button variant="secondary">Preview state</Button>
</CardContent>
<CardFooter className="justify-between">
<Badge>Ready</Badge>
<Button variant="outline">Copy recipe</Button>
</CardFooter>
</Card>
</section>
);
}
```
## Layout notes
{
"grid": "Contained content caps at 1180px centred; the full-bleed hero spans 100vw. Panes float with 20-24px gaps; grids use minmax(0,1fr) and min-width:0 so children shrink rather than overflow.",
"whitespace": "Whitespace is the optical-black field carrying faint ambient colour, not blank white. Generous internal padding and space above titles.",
"density": "Low to medium; the refractive material needs room to read.",
"responsive": "From ~390px mobile to 2560px+ ultra-wide. Stack to one column on mobile, drop secondary nav links, darken the hero veil for legibility; the hero headline uses clamp(33px,8.2vw,86px) and wraps, never clipping at 390px.",
"breakpoints": {
"mobile": "390px",
"tablet": "768px",
"desktop": "1180px"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"generator": "katagami-ui-compatibility-projection",
"generatedBy": "katagami-ui-projection",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": {
"id": "en-019efd9f-65f4-7b13-a093-13b150e72873",
"name": "Caustic",
"slug": "caustic"
},
"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": [
"Clear, translucent panes over a deep optical-black field, with a 1px inner highlight and a soft black shadow instead of borders.",
"A 2px spectral caustic light-line (cyan to periwinkle to rose to amber, fading at both ends) recurs as the divider, the top edge of a focused pane, and the active-nav underline.",
"Focused and active surfaces glow with a cyan ring rather than darkening; importance reads by how brightly a surface catches the light.",
"Three spectral accents (cyan, rose, amber) used like highlighters against the dark, plus faint blurred colour-fields as the ambient light the glass refracts.",
"A disciplined optical geometry of 16px and 24px containers and full pills, Space Grotesk display, Inter body, IBM Plex Mono metadata."
],
"visualProfile": {
"family": "system",
"material": "flat",
"contour": "pebble",
"border": "solid",
"underlay": false,
"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": "Caustic 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": [
"Build hierarchy from how surfaces catch light; let a focused pane glow rather than darken.",
"Keep every pane clear and translucent — no opaque flat fills, no borders.",
"Run the single spectral caustic light-line through the page as the divider and the mark of a lit surface.",
"Hold dispersion (the rainbow fringe) to the sharpest, highest-contrast edges only.",
"Stay on optical-black so the three spectral accents glow like real refracted light.",
"Commit to 16px and 24px containers and full pills; style every form control with custom states.",
"Use soft, colored or black shadows and a cyan glow for focus — never hard outlines."
],
"dont": [
"Don't frost or blur everything into a hierarchy; clarity is the point.",
"Don't use opaque flat card fills, grey borders, or one-sided accent edges.",
"Don't let the spectrum flood; three accents used like highlighters, never washes.",
"Don't mix arbitrary radii; commit to 16 / 24 / full.",
"Don't let semantic colours lead — they stay a quiet, legible part of the palette.",
"Don't box navigation into a floating pill bar or nest cards."
]
}
}