back to gallery
design language·cairn

Cairn

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
Cairn is an under-ice sounding console for instruments that observe more than they speak. The interface is a descent, not a dashboard: full-width strata stacked top to bottom, every reading marked to its depth on a continuous spine, one luminous ice-light plumb line dropped through them. The surface speaks loudly, the deep speaks in pings, and the deepest reading is read last. An abyssal polar-dark ground, ice-light cyan as the sounding line and the one action, and a warm amber return ping.
values
the descent is the structure: importance is position on the column, the deepest reading read lastone continuous line: a depth spine and a plumb line tie every reading to its true depthstacked strata: full-width registers, loud and open up top, dense with telemetry belowlight in the dark: ice-light and one warm amber clarify state against an abyssal ground, never neonmechanical precision: every reading is squared, labelled in mono, pinned to a measured depth
anti-values
×a grid of equal tiles spread across an empty field, or a generic SaaS dashboard×borders, top rules, divider hairlines, or single accent-edge panels×neon glow, vaporwave gradients, or decoration without an idea×a condensed all-caps masthead, or defaulting to a flat-white ground
tokens
colors16 items
bg
#06121A
surface
#0C1E29
surface_2
#112A38
text
#EAF4F4
muted
#7C97A2
border
#15303D
accent
#7FE8E0
on_accent
#04141A
signal
#F0A24B
primary
#7FE8E0
secondary
#7C97A2
background
#06121A
success
#58C39A
warning
#F0A24B
error
#E0685E
info
#7FE8E0
typography10 items
base size
17px
body font
IBM Plex Sans
heading font
Space Grotesk
mono font
IBM Plex Mono
heading weight
700
heading transform
none
letter spacing
-0.02em
line height
1.55
scale ratio
1.25
google fonts url
https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap
radii5 items
none
0
sm
0
md
0
lg
0
full
9999px
shadows3 items
sm
none
md
0 18px 40px rgba(0,0,0,.4)
lg
0 24px 60px rgba(0,0,0,.45)
spacing2 items
base
8px
scale
4, 8, 12, 16, 24, 32, 48, 64, 96, 128
surfaces3 items
treatment
dark station panes on an abyssal column; panes lift only by surface tone, never tinted into heavy cards; separation is the strata grid, the depth spine, and lift
card style
Dark, square, zero-radius panes with no border and no top rule; a focal pane sits at its depth on the spine; status reads from a circular pip, never an accent edge
bg pattern
an abyssal vertical depth wash with very-low-opacity icy coordinate arcs; the depth spine and one ice-light plumb line descend the left edge through the strata
borders4 items
default width
1px
accent width
0
style
solid
character
Hairline grid gaps on #15303D do the dividing; identity comes from the depth spine and the plumb line, never from a heavy or single-accent edge
motion3 items
duration
180ms
easing
cubic-bezier(0.16, 1, 0.3, 1)
philosophy
the fully-settled page is the no-JS default; reveals layer on top behind a .js class and a scroll observer, disabled under prefers-reduced-motion; motion reads as a slow descent and settle, never a bounce
rules
composition
The interface is a descent, not a dashboard: a depth-spine rail with metre ticks plus a wide content column; sections are full-width strata stacked top to bottom, each pinned to its depth, and one ice-light plumb line descends through them.
hierarchy
Three voices: an oversized natural-case Space Grotesk display readout, calm 17px+ blue-gray IBM Plex Sans body, and tiny IBM Plex Mono depths, times, and station IDs. Hierarchy is position on the column and one dramatic scale jump from display to micro telemetry.
density
Open and loud up top, dense telemetry below; dense readings sit in strata islands separated by hairline grid gaps, never filling an empty field with equal tiles.
signature
A continuous depth spine carries metre numerals and 1px ticks; one luminous ice-light plumb line drops through every stratum; full-width strata bands stack top to bottom, each marked to its depth; panes are dark and square with no border; ice-light is the line and the one action, a warm amber is the return ping.
layout
grid
A depth-spine rail (~64px) with metre ticks paired with a wide content column; sections are full-width strata stacked top to bottom, each pinned to its depth; telemetry islands use minmax(0,1fr) columns separated by hairline grid gaps.
whitespace

Whitespace is the open column up top: generous padding above titles and around the hero, tightening into 4-12px telemetry stacks deeper down.

density

open-top-dense-below

responsive
Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, the spine collapses to a thin depth rail, and the least-essential table column drops; the full-bleed hero spans 100vw while contained content caps and centres.
breakpoints
mobile
390px
tablet
768px
desktop
1440px
ultrawide
1700px
guidance
do
  • Stack readings on the line and mark each one to its true depth on the spine.
  • Keep the ground a deliberate abyssal polar dark; let the plumb line glow against it.
  • Reserve ice-light for the sounding line, focus, and the single primary action.
  • Use the warm amber only for a return ping — a flagged crossing or a weak return.
  • Set depths, times, coordinates, and station IDs in IBM Plex Mono.
  • Create one dramatic scale jump between the display readout and the micro telemetry.
  • Separate with the strata grid, the depth spine, and surface lift — never borders.
avoid
  • Spread a grid of equal tiles across an empty field, or build a generic SaaS dashboard.
  • Add borders, top rules, divider hairlines, or a single accent edge to a pane.
  • Round the corners, or use neon glow and gradients as decoration.
  • Lead with a condensed all-caps masthead, or default to a flat-white ground.
  • Rely on colour alone for state; carry status with a label plus a circular pip.
imagery
pairs with

glacis-ink

summary
Subjects rendered in Glacis Ink: a cold technical line-drawing overprint with crisp 1px carbon contour and no fill, faint icy coordinate rings and calibration ticks, sparse blue-gray hatching, corner-bracket ticks. For Cairn the contour plate is inverted to glow as ice-light line against the abyssal dark column, composed strictly vertical as a stratified sounding profile with a plumb line and a suspended sonde.
subjects
ice-core cross-section / sounding profile (vertical strata)under-ice conductivity sonde on a plumb lineunder-ice hydrophone listening arraydrift buoy frozen into pack icesub-glacial lake bathymetric column
usage
Full-viewport landing hero driven by background-image: var(--hero-image); the plate is a vertical contour study of the ice/water column, inverted to glow on the dark, with a directional well keeping the overlaid headline legible — never a literal gauge or dashboard object.
katagami spec
# Cairn

## Philosophy

Cairn is an under-ice sounding console for instruments that observe more than they speak. The interface is a descent, not a dashboard: full-width strata stacked top to bottom, every reading marked to its depth on a continuous spine, one luminous ice-light plumb line dropped through them. The surface speaks loudly, the deep speaks in pings, and the deepest reading is read last. An abyssal polar-dark ground, ice-light cyan as the sounding line and the one action, and a warm amber return ping.

### Values

- the descent is the structure: importance is position on the column, the deepest reading read last
- one continuous line: a depth spine and a plumb line tie every reading to its true depth
- stacked strata: full-width registers, loud and open up top, dense with telemetry below
- light in the dark: ice-light and one warm amber clarify state against an abyssal ground, never neon
- mechanical precision: every reading is squared, labelled in mono, pinned to a measured depth

### Anti-Values

- a grid of equal tiles spread across an empty field, or a generic SaaS dashboard
- borders, top rules, divider hairlines, or single accent-edge panels
- neon glow, vaporwave gradients, or decoration without an idea
- a condensed all-caps masthead, or defaulting to a flat-white ground

### Visual Character

- An abyssal polar-dark ground (#06121A) reads as the water under the ice and the polar winter, never a flat black and never white.
- A continuous depth spine runs the left edge with metre numerals and 1px ticks; one ice-light plumb line descends through every stratum, glowing against the dark.
- Sections are full-width horizontal strata stacked top to bottom — surface, firn, glacial ice, ice base, water column, bedrock — each pinned to its depth.
- Panes are dark, square, lifted only by surface tone; separation is the strata grid (a hairline gap), the spine, and the lift — never a border or an accent edge.
- Space Grotesk display in natural case pairs with IBM Plex Sans body and IBM Plex Mono depths, times, and station IDs, with one dramatic scale jump from display readout to micro telemetry.
- The landing hero is an engraved ice-core sounding plate in Glacis Ink, inverted to glow as ice-light line on the abyssal column.

## Tokens

### Colors

| Name | Value |
|------|-------|
| bg | `#06121A` |
| surface | `#0C1E29` |
| surface_2 | `#112A38` |
| text | `#EAF4F4` |
| muted | `#7C97A2` |
| border | `#15303D` |
| accent | `#7FE8E0` |
| on_accent | `#04141A` |
| signal | `#F0A24B` |
| primary | `#7FE8E0` |
| secondary | `#7C97A2` |
| background | `#06121A` |
| success | `#58C39A` |
| warning | `#F0A24B` |
| error | `#E0685E` |
| info | `#7FE8E0` |

### Typography

- **Base Size**: 17px
- **Body Font**: IBM Plex Sans
- **Heading Font**: Space Grotesk
- **Mono Font**: IBM Plex Mono
- **Heading Weight**: 700
- **Heading Transform**: none
- **Letter Spacing**: -0.02em
- **Line Height**: 1.55
- **Scale Ratio**: 1.25
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap

### Radii

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

### Shadows

- **Sm**: none
- **Md**: 0 18px 40px rgba(0,0,0,.4)
- **Lg**: 0 24px 60px rgba(0,0,0,.45)

### Spacing

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

### Surfaces

- **Treatment**: dark station panes on an abyssal column; panes lift only by surface tone, never tinted into heavy cards; separation is the strata grid, the depth spine, and lift
- **Card Style**: Dark, square, zero-radius panes with no border and no top rule; a focal pane sits at its depth on the spine; status reads from a circular pip, never an accent edge
- **Bg Pattern**: an abyssal vertical depth wash with very-low-opacity icy coordinate arcs; the depth spine and one ice-light plumb line descend the left edge through the strata

### Borders

- **Default Width**: 1px
- **Accent Width**: 0
- **Style**: solid
- **Character**: Hairline grid gaps on #15303D do the dividing; identity comes from the depth spine and the plumb line, never from a heavy or single-accent edge

### Motion

- **Duration**: 180ms
- **Easing**: cubic-bezier(0.16, 1, 0.3, 1)
- **Philosophy**: the fully-settled page is the no-JS default; reveals layer on top behind a .js class and a scroll observer, disabled under prefers-reduced-motion; motion reads as a slow descent and settle, never a bounce

## Rules

### Composition

The interface is a descent, not a dashboard: a depth-spine rail with metre ticks plus a wide content column; sections are full-width strata stacked top to bottom, each pinned to its depth, and one ice-light plumb line descends through them.

### Hierarchy

Three voices: an oversized natural-case Space Grotesk display readout, calm 17px+ blue-gray IBM Plex Sans body, and tiny IBM Plex Mono depths, times, and station IDs. Hierarchy is position on the column and one dramatic scale jump from display to micro telemetry.

### Density

Open and loud up top, dense telemetry below; dense readings sit in strata islands separated by hairline grid gaps, never filling an empty field with equal tiles.

### Signature

A continuous depth spine carries metre numerals and 1px ticks; one luminous ice-light plumb line drops through every stratum; full-width strata bands stack top to bottom, each marked to its depth; panes are dark and square with no border; ice-light is the line and the one action, a warm amber is the return ping.

## Layout

### Grid

A depth-spine rail (~64px) with metre ticks paired with a wide content column; sections are full-width strata stacked top to bottom, each pinned to its depth; telemetry islands use minmax(0,1fr) columns separated by hairline grid gaps.

### Whitespace

Whitespace is the open column up top: generous padding above titles and around the hero, tightening into 4-12px telemetry stacks deeper down.

### Density

open-top-dense-below

### Responsive

Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, the spine collapses to a thin depth rail, and the least-essential table column drops; the full-bleed hero spans 100vw while contained content caps and centres.

### Breakpoints

- **Mobile**: 390px
- **Tablet**: 768px
- **Desktop**: 1440px
- **Ultrawide**: 1700px

## Guidance

### Do

- Stack readings on the line and mark each one to its true depth on the spine.
- Keep the ground a deliberate abyssal polar dark; let the plumb line glow against it.
- Reserve ice-light for the sounding line, focus, and the single primary action.
- Use the warm amber only for a return ping — a flagged crossing or a weak return.
- Set depths, times, coordinates, and station IDs in IBM Plex Mono.
- Create one dramatic scale jump between the display readout and the micro telemetry.
- Separate with the strata grid, the depth spine, and surface lift — never borders.

### Don't

- Spread a grid of equal tiles across an empty field, or build a generic SaaS dashboard.
- Add borders, top rules, divider hairlines, or a single accent edge to a pane.
- Round the corners, or use neon glow and gradients as decoration.
- Lead with a condensed all-caps masthead, or default to a flat-white ground.
- Rely on colour alone for state; carry status with a label plus a circular pip.

### Accessibility

Text holds AA contrast on the abyssal dark ground; body is 17px+, table rows 13-14.5px mono. Focus is a visible 2px ice-light inset, never colour-only; state is carried by a label plus a circular pip. Motion respects prefers-reduced-motion and the settled state needs no JavaScript.

## Imagery Direction

### Pairs With

glacis-ink

### Summary

Subjects rendered in Glacis Ink: a cold technical line-drawing overprint with crisp 1px carbon contour and no fill, faint icy coordinate rings and calibration ticks, sparse blue-gray hatching, corner-bracket ticks. For Cairn the contour plate is inverted to glow as ice-light line against the abyssal dark column, composed strictly vertical as a stratified sounding profile with a plumb line and a suspended sonde.

### Subjects

- ice-core cross-section / sounding profile (vertical strata)
- under-ice conductivity sonde on a plumb line
- under-ice hydrophone listening array
- drift buoy frozen into pack ice
- sub-glacial lake bathymetric column

### Usage

Full-viewport landing hero driven by background-image: var(--hero-image); the plate is a vertical contour study of the ice/water column, inverted to glow on the dark, with a directional well keeping the overlaid headline legible — never a literal gauge or dashboard object.
DESIGN.md
---
version: "alpha"
name: "Cairn"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  bg: "#06121A"
  surface: "#0C1E29"
  surface_2: "#112A38"
  text: "#EAF4F4"
  muted: "#7C97A2"
  border: "#15303D"
  accent: "#7FE8E0"
  on_accent: "#04141A"
  signal: "#F0A24B"
  primary: "#7FE8E0"
  secondary: "#7C97A2"
  background: "#06121A"
  success: "#58C39A"
  warning: "#F0A24B"
  error: "#E0685E"
  info: "#7FE8E0"
typography:
  headline-lg:
    fontFamily: "Space Grotesk"
    fontSize: "2.075rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.02em"
  headline-md:
    fontFamily: "Space Grotesk"
    fontSize: "1.66rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.02em"
  body-md:
    fontFamily: "IBM Plex Sans"
    fontSize: "17px"
    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:
  none: "0px"
  sm: "0px"
  md: "0px"
  lg: "0px"
  full: "9999px"
spacing:
  base: "8px"
  xs: "4px"
  sm: "8px"
  md: "12px"
  lg: "16px"
  xl: "24px"
  2xl: "32px"
  3xl: "48px"
  4xl: "64px"
  step-8: "96px"
  step-9: "128px"
components:
  color-reference-bg:
    backgroundColor: "{colors.bg}"
  color-reference-surface:
    backgroundColor: "{colors.surface}"
  color-reference-surface_2:
    backgroundColor: "{colors.surface_2}"
  color-reference-text:
    backgroundColor: "{colors.text}"
  color-reference-muted:
    backgroundColor: "{colors.muted}"
  color-reference-border:
    backgroundColor: "{colors.border}"
  color-reference-accent:
    backgroundColor: "{colors.accent}"
  color-reference-on_accent:
    backgroundColor: "{colors.on_accent}"
  color-reference-signal:
    backgroundColor: "{colors.signal}"
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-secondary:
    backgroundColor: "{colors.secondary}"
  color-reference-background:
    backgroundColor: "{colors.background}"
  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.primary}"
    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"
---

# Cairn

## Overview

Cairn is an under-ice sounding console for instruments that observe more than they speak. The interface is a descent, not a dashboard: full-width strata stacked top to bottom, every reading marked to its depth on a continuous spine, one luminous ice-light plumb line dropped through them. The surface speaks loudly, the deep speaks in pings, and the deepest reading is read last. An abyssal polar-dark ground, ice-light cyan as the sounding line and the one action, and a warm amber return ping.

### Values

- the descent is the structure: importance is position on the column, the deepest reading read last
- one continuous line: a depth spine and a plumb line tie every reading to its true depth
- stacked strata: full-width registers, loud and open up top, dense with telemetry below
- light in the dark: ice-light and one warm amber clarify state against an abyssal ground, never neon
- mechanical precision: every reading is squared, labelled in mono, pinned to a measured depth

### Anti-Values

- a grid of equal tiles spread across an empty field, or a generic SaaS dashboard
- borders, top rules, divider hairlines, or single accent-edge panels
- neon glow, vaporwave gradients, or decoration without an idea
- a condensed all-caps masthead, or defaulting to a flat-white ground

### Visual Character

- An abyssal polar-dark ground (#06121A) reads as the water under the ice and the polar winter, never a flat black and never white.
- A continuous depth spine runs the left edge with metre numerals and 1px ticks; one ice-light plumb line descends through every stratum, glowing against the dark.
- Sections are full-width horizontal strata stacked top to bottom — surface, firn, glacial ice, ice base, water column, bedrock — each pinned to its depth.
- Panes are dark, square, lifted only by surface tone; separation is the strata grid (a hairline gap), the spine, and the lift — never a border or an accent edge.
- Space Grotesk display in natural case pairs with IBM Plex Sans body and IBM Plex Mono depths, times, and station IDs, with one dramatic scale jump from display readout to micro telemetry.
- The landing hero is an engraved ice-core sounding plate in Glacis Ink, inverted to glow as ice-light line on the abyssal column.

## 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 | `#06121A` |
| surface | `#0C1E29` |
| surface_2 | `#112A38` |
| text | `#EAF4F4` |
| muted | `#7C97A2` |
| border | `#15303D` |
| accent | `#7FE8E0` |
| on_accent | `#04141A` |
| signal | `#F0A24B` |
| primary | `#7FE8E0` |
| secondary | `#7C97A2` |
| background | `#06121A` |
| success | `#58C39A` |
| warning | `#F0A24B` |
| error | `#E0685E` |
| info | `#7FE8E0` |

## 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**: IBM Plex Sans, 17px, weight 400, line-height 1.55.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.

## Layout

### Spacing Tokens

- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `96px`
- **Step-9**: `128px`

### Grid

A depth-spine rail (~64px) with metre ticks paired with a wide content column; sections are full-width strata stacked top to bottom, each pinned to its depth; telemetry islands use minmax(0,1fr) columns separated by hairline grid gaps.

### Whitespace

Whitespace is the open column up top: generous padding above titles and around the hero, tightening into 4-12px telemetry stacks deeper down.

### Density

open-top-dense-below

### Responsive

Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, the spine collapses to a thin depth rail, and the least-essential table column drops; the full-bleed hero spans 100vw while contained content caps and centres.

### Breakpoints

- **Mobile**: 390px
- **Tablet**: 768px
- **Desktop**: 1440px
- **Ultrawide**: 1700px

## Elevation & Depth

### Shadows

- **Sm**: none
- **Md**: 0 18px 40px rgba(0,0,0,.4)
- **Lg**: 0 24px 60px rgba(0,0,0,.45)

## Shapes

### Rounded

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

### Surfaces

- **Treatment**: dark station panes on an abyssal column; panes lift only by surface tone, never tinted into heavy cards; separation is the strata grid, the depth spine, and lift
- **Card Style**: Dark, square, zero-radius panes with no border and no top rule; a focal pane sits at its depth on the spine; status reads from a circular pip, never an accent edge
- **Bg Pattern**: an abyssal vertical depth wash with very-low-opacity icy coordinate arcs; the depth spine and one ice-light plumb line descend the left edge through the strata

### Borders

- **Default Width**: 1px
- **Accent Width**: 0
- **Style**: solid
- **Character**: Hairline grid gaps on #15303D do the dividing; identity comes from the depth spine and the plumb line, never from a heavy or single-accent edge

## Components

### Composition

The interface is a descent, not a dashboard: a depth-spine rail with metre ticks plus a wide content column; sections are full-width strata stacked top to bottom, each pinned to its depth, and one ice-light plumb line descends through them.

### Hierarchy

Three voices: an oversized natural-case Space Grotesk display readout, calm 17px+ blue-gray IBM Plex Sans body, and tiny IBM Plex Mono depths, times, and station IDs. Hierarchy is position on the column and one dramatic scale jump from display to micro telemetry.

### Density

Open and loud up top, dense telemetry below; dense readings sit in strata islands separated by hairline grid gaps, never filling an empty field with equal tiles.

### Signature

A continuous depth spine carries metre numerals and 1px ticks; one luminous ice-light plumb line drops through every stratum; full-width strata bands stack top to bottom, each marked to its depth; panes are dark and square with no border; ice-light is the line and the one action, a warm amber is the return ping.

## 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-019ef8cb-ddf8-7702-b2cb-560170b94b6a/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 Stack readings on the line and mark each one to its true depth on the spine.
- Do Keep the ground a deliberate abyssal polar dark; let the plumb line glow against it.
- Do Reserve ice-light for the sounding line, focus, and the single primary action.
- Do Use the warm amber only for a return ping — a flagged crossing or a weak return.
- Do Set depths, times, coordinates, and station IDs in IBM Plex Mono.
- Do Create one dramatic scale jump between the display readout and the micro telemetry.
- Do Separate with the strata grid, the depth spine, and surface lift — never borders.
- Don't Spread a grid of equal tiles across an empty field, or build a generic SaaS dashboard.
- Don't Add borders, top rules, divider hairlines, or a single accent edge to a pane.
- Don't Round the corners, or use neon glow and gradients as decoration.
- Don't Lead with a condensed all-caps masthead, or default to a flat-white ground.
- Don't Rely on colour alone for state; carry status with a label plus a circular pip.

### Accessibility

Text holds AA contrast on the abyssal dark ground; body is 17px+, table rows 13-14.5px mono. Focus is a visible 2px ice-light inset, never colour-only; state is carried by a label plus a circular pip. Motion respects prefers-reduced-motion and the settled state needs no JavaScript.

## Imagery Direction

### Pairs With

glacis-ink

### Summary

Subjects rendered in Glacis Ink: a cold technical line-drawing overprint with crisp 1px carbon contour and no fill, faint icy coordinate rings and calibration ticks, sparse blue-gray hatching, corner-bracket ticks. For Cairn the contour plate is inverted to glow as ice-light line against the abyssal dark column, composed strictly vertical as a stratified sounding profile with a plumb line and a suspended sonde.

### Subjects

- ice-core cross-section / sounding profile (vertical strata)
- under-ice conductivity sonde on a plumb line
- under-ice hydrophone listening array
- drift buoy frozen into pack ice
- sub-glacial lake bathymetric column

### Usage

Full-viewport landing hero driven by background-image: var(--hero-image); the plate is a vertical contour study of the ice/water column, inverted to glow on the dark, with a directional well keeping the overlaid headline legible — never a literal gauge or dashboard object.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "cairn",
  "type": "registry:theme",
  "title": "Cairn shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#06121A",
      "foreground": "#EAF4F4",
      "card": "#0C1E29",
      "card-foreground": "#EAF4F4",
      "popover": "#0C1E29",
      "popover-foreground": "#EAF4F4",
      "primary": "#7FE8E0",
      "primary-foreground": "#111111",
      "secondary": "#7C97A2",
      "secondary-foreground": "#ffffff",
      "muted": "#7C97A2",
      "muted-foreground": "#EAF4F4",
      "accent": "#7FE8E0",
      "accent-foreground": "#111111",
      "destructive": "#E0685E",
      "border": "#15303D",
      "input": "#15303D",
      "ring": "#7FE8E0",
      "chart-1": "#7FE8E0",
      "chart-2": "#7C97A2",
      "chart-3": "#7FE8E0",
      "chart-4": "#58C39A",
      "chart-5": "#F0A24B",
      "sidebar": "#0C1E29",
      "sidebar-foreground": "#EAF4F4",
      "sidebar-primary": "#7FE8E0",
      "sidebar-primary-foreground": "#111111",
      "sidebar-accent": "#7FE8E0",
      "sidebar-accent-foreground": "#111111",
      "sidebar-border": "#15303D",
      "sidebar-ring": "#7FE8E0",
      "radius": "0"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#7FE8E0",
      "primary-foreground": "#111111",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#7FE8E0",
      "accent-foreground": "#111111",
      "destructive": "#E0685E",
      "border": "#303642",
      "input": "#303642",
      "ring": "#7FE8E0",
      "chart-1": "#7FE8E0",
      "chart-2": "#7C97A2",
      "chart-3": "#7FE8E0",
      "chart-4": "#58C39A",
      "chart-5": "#F0A24B",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#7FE8E0",
      "sidebar-primary-foreground": "#111111",
      "sidebar-accent": "#7FE8E0",
      "sidebar-accent-foreground": "#111111",
      "sidebar-border": "#303642",
      "sidebar-ring": "#7FE8E0",
      "radius": "0"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019ef8cb-ddf8-7702-b2cb-560170b94b6a",
    "slug": "cairn",
    "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",
        "background",
        "bg",
        "border",
        "error",
        "info",
        "muted",
        "on_accent",
        "primary",
        "secondary",
        "signal",
        "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",
        "scale_ratio"
      ],
      "radii": [
        "full",
        "lg",
        "md",
        "none",
        "sm"
      ],
      "shadows": [
        "lg",
        "md",
        "sm"
      ],
      "spacing": [
        "base",
        "scale"
      ],
      "surfaces": [
        "bg_pattern",
        "card_style",
        "treatment"
      ],
      "borders": [
        "accent_width",
        "character",
        "default_width",
        "style"
      ],
      "motion": [
        "duration",
        "easing",
        "philosophy"
      ]
    }
  }
}
```
in the wild

embodiments

bespoke marketing landingopen full page ↗
landing · cairn
DESIGN.md

at a glance

Typography

headline-lgSpace Grotesk · 33px · 700

The quick brown fox jumps

headline-mdSpace Grotesk · 27px · 600

The quick brown fox jumps

body-mdIBM Plex Sans · 17px · 400

The quick brown fox jumps

label-mdIBM Plex Mono · 12px · 600

The quick brown fox jumps

shadcn/ui

implementation kit

built with

Agent-generated

remix lane

try a remix

Keep Cairnand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.

UI language · fixed
Cairn
Palette
Art style
Landing Page
live preview · recolored + filled
lineage

Family

Evolved from
related

More like this