back to gallery
design language·aerial

Aerial

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
Aerial is a late-night broadcast design language: it dresses an interface like a warm analog channel picked up after midnight — sodium-amber phosphor over deep indigo, broadcast frames that tune in through a vertical-hold roll, a frequency dial with a glowing cyan needle, and a station ident that never sleeps. Where a control-room reading of the cathode tube goes cold and green, Aerial goes warm and human: the glow of a tube TV in a dark room, not a mission console. Everything is a station you tune into.
values
warm late-night broadcast intimacy over clinical control-room coldnesseverything is a station you tune into — channels, not stacked panelsthe value reads before the label; numerics carry the brightest sodium bloomframing is a coloured ribbon and a phosphor bloom, never a grey outlinestatus spoken in plain broadcast language: live, cued, recording, locked
anti-values
×cold green mission-console telemetry×grey-bordered boxed widgets and cards-in-cards×flat hierarchy with everything equally bright×scroll cues and down-arrow indicators×decoration without an idea
tokens
colors16 items
bg
#140A24
surface
#1E1138
surface_2
#281748
text
#FBEFE0
muted
#A99BC9
border
#3A2A5E
accent
#FFB02E
accent_2
#FF4D9D
accent_3
#46E4FF
on_accent
#140A24
primary
#FFB02E
secondary
#FF4D9D
success
#5BE5A6
warning
#FFB02E
error
#FF5C7A
info
#46E4FF
typography9 items
base size
17px
body font
Space Grotesk
heading font
Big Shoulders Display
mono font
DM Mono
heading weight
800
heading transform
uppercase
letter spacing
-0.01em
line height
1.6
google fonts url
https://fonts.googleapis.com/css2?family=Big+Shoulders+Display:wght@500;700;800;900&family=Space+Grotesk:wght@400;500;600;700&family=DM+Mono:wght@400;500&display=swap
radii4 items
none
0px
md
16px
lg
24px
full
9999px
shadows3 items
glow amber
0 0 28px rgba(255,176,46,0.28)
glow magenta
0 0 28px rgba(255,77,157,0.26)
glow cyan
0 0 28px rgba(70,228,255,0.24)
spacing2 items
base
8px
scale
4px, 8px, 12px, 16px, 24px, 32px, 48px, 64px, 96px
surfaces3 items
treatment
deep indigo broadcast frame with a scanline roll overlay on display zones
card style
broadcast frame: solid indigo surface, sodium-to-magenta ribbon on the left edge, faint horizontal roll-bar seam
bg pattern
subtle horizontal scanline roll + warm phosphor glow blobs
borders4 items
default width
0px
accent width
6px
style
none
character
no grey borders; framing is a left coloured ribbon (sodium→magenta) plus a phosphor bloom, never a flat outline
motion3 items
duration
180ms
easing
cubic-bezier(0.2,0.75,0.25,1)
philosophy
frames tune into view with a gentle rise like a picture finding vertical hold; hover and focus brighten the bloom, never bounce or reshape
rules
composition
Compose screens as a broadcast schedule: a station ident bar, a full-viewport hero you tune into, then channels stacked top to bottom. Each region is a broadcast frame opened by a tuning ribbon (channel chip + station name + frequency dial). Never nest a frame in a frame; never box navigation into a floating pill.
hierarchy
Numerics carry the highest contrast and the brightest sodium bloom; the value reads before its label. Labels live quiet in DM Mono. Magenta means live, cyan means cued/locked, sodium means recording. Body copy stays secondary.
density

Schedule density — substantial information per frame, separated by obvious frame gaps and contrasting indigo underlays so it reads engineered, never crowded.

signature
The tuning ribbon — a channel chip, a station name, and a frequency dial with a glowing cyan needle — opening a broadcast frame: sodium-to-magenta left ribbon, faint horizontal roll-bar seam, scanline roll overlay over display zones.
layout
grid
Desktop dashboard: a left tuner rail (a breathing nav list, not a boxed widget) and a main stack of broadcast frames in a 12-column rhythm. Landing: full-bleed hero, then full-width channel sections. Tablet collapses the rail to a top strip; phone is a single column with each tuning ribbon stacked above its frame.
whitespace

Broadcast spacing: tight within a frame's data, generous between framed channels, protected around the hero.

density

engineered schedule density — full but never crowded

responsive
Renders from ~390px to 2560px+. Non-essential table columns (host) and nav links drop on mobile rather than overflow; the full-bleed hero spans 100vw while contained content is capped and centred on ultra-wide.
breakpoints
xl
1200px
lg
1024px
md
768px
sm
480px
guidance
do
  • Let sodium-amber be the resting glow; reserve magenta for live and cyan for cued/locked.
  • Open every region with a tuning ribbon keyed to a channel.
  • Use DM Mono channel codes, frequencies, and timestamps for broadcast credibility.
  • Keep numerics largest and brightest — the value reads before the label.
  • Apply scanline roll overlays to display zones, not every surface.
avoid
  • Do not go cold or green; this is a warm late-night channel, not a mission console.
  • Do not box navigation into a floating pill or nest a frame inside a frame.
  • Do not flatten hierarchy by making all text equally bright.
  • Do not use grey borders; the ribbon and the bloom are the framing.
  • Do not add scroll cues or down-arrow indicators.
imagery
pairs with

cathode

summary
Imagery captured off a glowing cathode-ray tube — baked-in scanlines, phosphor bloom, chromatic-aberration fringing and a gentle barrel curve — applied to a broadcast world: rooftop aerials, transmission waves, test patterns and station idents. Warm sodium-amber key with hot magenta and tuner cyan accents over deep indigo. Full-bleed phosphor output with no monitor bezel.
subjects
rooftop television broadcast aerials against transmission wavesconcentric carrier-wave and signal-propagation ringstest-pattern colour bars and station identstuning dials and frequency scales
usage

The landing hero swaps via background-image: var(--hero-image). Keep the overlay legible over the image; never an img tag.

katagami spec
# Aerial

## Philosophy

Aerial is a late-night broadcast design language: it dresses an interface like a warm analog channel picked up after midnight — sodium-amber phosphor over deep indigo, broadcast frames that tune in through a vertical-hold roll, a frequency dial with a glowing cyan needle, and a station ident that never sleeps. Where a control-room reading of the cathode tube goes cold and green, Aerial goes warm and human: the glow of a tube TV in a dark room, not a mission console. Everything is a station you tune into.

### Values

- warm late-night broadcast intimacy over clinical control-room coldness
- everything is a station you tune into — channels, not stacked panels
- the value reads before the label; numerics carry the brightest sodium bloom
- framing is a coloured ribbon and a phosphor bloom, never a grey outline
- status spoken in plain broadcast language: live, cued, recording, locked

### Anti-Values

- cold green mission-console telemetry
- grey-bordered boxed widgets and cards-in-cards
- flat hierarchy with everything equally bright
- scroll cues and down-arrow indicators
- decoration without an idea

### Visual Character

- every section opens with a tuning ribbon: a channel chip, a station name, and a frequency dial with a glowing cyan needle
- broadcast frames carry a sodium-to-magenta ribbon down the left edge and a faint horizontal roll-bar seam — the picture settling into vertical hold
- a rainbow test-pattern channel band runs across the top and bottom edges like station colour bars
- deep indigo-violet ground lit only by phosphor; warm-tuned neutrals, never cold grey
- interaction brightens the sodium bloom rather than moving or reshaping the control

## Tokens

### Colors

| Name | Value |
|------|-------|
| bg | `#140A24` |
| surface | `#1E1138` |
| surface_2 | `#281748` |
| text | `#FBEFE0` |
| muted | `#A99BC9` |
| border | `#3A2A5E` |
| accent | `#FFB02E` |
| accent_2 | `#FF4D9D` |
| accent_3 | `#46E4FF` |
| on_accent | `#140A24` |
| primary | `#FFB02E` |
| secondary | `#FF4D9D` |
| success | `#5BE5A6` |
| warning | `#FFB02E` |
| error | `#FF5C7A` |
| info | `#46E4FF` |

### Typography

- **Base Size**: 17px
- **Body Font**: Space Grotesk
- **Heading Font**: Big Shoulders Display
- **Mono Font**: DM Mono
- **Heading Weight**: 800
- **Heading Transform**: uppercase
- **Letter Spacing**: -0.01em
- **Line Height**: 1.6
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Big+Shoulders+Display:wght@500;700;800;900&family=Space+Grotesk:wght@400;500;600;700&family=DM+Mono:wght@400;500&display=swap

### Radii

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

### Shadows

- **Glow Amber**: 0 0 28px rgba(255,176,46,0.28)
- **Glow Magenta**: 0 0 28px rgba(255,77,157,0.26)
- **Glow Cyan**: 0 0 28px rgba(70,228,255,0.24)

### Spacing

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

### Surfaces

- **Treatment**: deep indigo broadcast frame with a scanline roll overlay on display zones
- **Card Style**: broadcast frame: solid indigo surface, sodium-to-magenta ribbon on the left edge, faint horizontal roll-bar seam
- **Bg Pattern**: subtle horizontal scanline roll + warm phosphor glow blobs

### Borders

- **Default Width**: 0px
- **Accent Width**: 6px
- **Style**: none
- **Character**: no grey borders; framing is a left coloured ribbon (sodium→magenta) plus a phosphor bloom, never a flat outline

### Motion

- **Duration**: 180ms
- **Easing**: cubic-bezier(0.2,0.75,0.25,1)
- **Philosophy**: frames tune into view with a gentle rise like a picture finding vertical hold; hover and focus brighten the bloom, never bounce or reshape

## Rules

### Composition

Compose screens as a broadcast schedule: a station ident bar, a full-viewport hero you tune into, then channels stacked top to bottom. Each region is a broadcast frame opened by a tuning ribbon (channel chip + station name + frequency dial). Never nest a frame in a frame; never box navigation into a floating pill.

### Hierarchy

Numerics carry the highest contrast and the brightest sodium bloom; the value reads before its label. Labels live quiet in DM Mono. Magenta means live, cyan means cued/locked, sodium means recording. Body copy stays secondary.

### Density

Schedule density — substantial information per frame, separated by obvious frame gaps and contrasting indigo underlays so it reads engineered, never crowded.

### Signature

The tuning ribbon — a channel chip, a station name, and a frequency dial with a glowing cyan needle — opening a broadcast frame: sodium-to-magenta left ribbon, faint horizontal roll-bar seam, scanline roll overlay over display zones.

## Layout

### Grid

Desktop dashboard: a left tuner rail (a breathing nav list, not a boxed widget) and a main stack of broadcast frames in a 12-column rhythm. Landing: full-bleed hero, then full-width channel sections. Tablet collapses the rail to a top strip; phone is a single column with each tuning ribbon stacked above its frame.

### Whitespace

Broadcast spacing: tight within a frame's data, generous between framed channels, protected around the hero.

### Density

engineered schedule density — full but never crowded

### Responsive

Renders from ~390px to 2560px+. Non-essential table columns (host) and nav links drop on mobile rather than overflow; the full-bleed hero spans 100vw while contained content is capped and centred on ultra-wide.

### Breakpoints

- **Xl**: 1200px
- **Lg**: 1024px
- **Md**: 768px
- **Sm**: 480px

## Guidance

### Do

- Let sodium-amber be the resting glow; reserve magenta for live and cyan for cued/locked.
- Open every region with a tuning ribbon keyed to a channel.
- Use DM Mono channel codes, frequencies, and timestamps for broadcast credibility.
- Keep numerics largest and brightest — the value reads before the label.
- Apply scanline roll overlays to display zones, not every surface.

### Don't

- Do not go cold or green; this is a warm late-night channel, not a mission console.
- Do not box navigation into a floating pill or nest a frame inside a frame.
- Do not flatten hierarchy by making all text equally bright.
- Do not use grey borders; the ribbon and the bloom are the framing.
- Do not add scroll cues or down-arrow indicators.

### Accessibility

Body 17px+, numerics larger and brightest; high contrast (phosphor white on deep indigo, never dark-on-dark). Every control explicitly styled with a visible cyan-bloom focus state. Status is never carried by colour alone — pills pair colour with a DM Mono label and an inline-SVG glyph. Motion respects prefers-reduced-motion; the settled page renders with no JavaScript.

## Imagery Direction

### Pairs With

cathode

### Summary

Imagery captured off a glowing cathode-ray tube — baked-in scanlines, phosphor bloom, chromatic-aberration fringing and a gentle barrel curve — applied to a broadcast world: rooftop aerials, transmission waves, test patterns and station idents. Warm sodium-amber key with hot magenta and tuner cyan accents over deep indigo. Full-bleed phosphor output with no monitor bezel.

### Subjects

- rooftop television broadcast aerials against transmission waves
- concentric carrier-wave and signal-propagation rings
- test-pattern colour bars and station idents
- tuning dials and frequency scales

### Usage

The landing hero swaps via background-image: var(--hero-image). Keep the overlay legible over the image; never an img tag.
DESIGN.md
---
version: "alpha"
name: "Aerial"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  bg: "#140A24"
  surface: "#1E1138"
  surface_2: "#281748"
  text: "#FBEFE0"
  muted: "#A99BC9"
  border: "#3A2A5E"
  accent: "#FFB02E"
  accent_2: "#FF4D9D"
  accent_3: "#46E4FF"
  on_accent: "#140A24"
  primary: "#FFB02E"
  secondary: "#FF4D9D"
  success: "#5BE5A6"
  warning: "#FFB02E"
  error: "#FF5C7A"
  info: "#46E4FF"
typography:
  headline-lg:
    fontFamily: "Big Shoulders Display"
    fontSize: "2.075rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.01em"
  headline-md:
    fontFamily: "Big Shoulders Display"
    fontSize: "1.66rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.01em"
  body-md:
    fontFamily: "Space Grotesk"
    fontSize: "17px"
    fontWeight: 400
    lineHeight: 1.5
    letterSpacing: "-0.01em"
  label-md:
    fontFamily: "DM Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  none: "0px"
  md: "16px"
  lg: "24px"
  full: "9999px"
spacing:
  base: "8px"
  xs: "4px"
  sm: "8px"
  md: "12px"
  lg: "16px"
  xl: "24px"
  2xl: "32px"
  3xl: "48px"
  4xl: "64px"
  step-8: "96px"
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-accent_2:
    backgroundColor: "{colors.accent_2}"
  color-reference-accent_3:
    backgroundColor: "{colors.accent_3}"
  color-reference-on_accent:
    backgroundColor: "{colors.on_accent}"
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-secondary:
    backgroundColor: "{colors.secondary}"
  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"
---

# Aerial

## Overview

Aerial is a late-night broadcast design language: it dresses an interface like a warm analog channel picked up after midnight — sodium-amber phosphor over deep indigo, broadcast frames that tune in through a vertical-hold roll, a frequency dial with a glowing cyan needle, and a station ident that never sleeps. Where a control-room reading of the cathode tube goes cold and green, Aerial goes warm and human: the glow of a tube TV in a dark room, not a mission console. Everything is a station you tune into.

### Values

- warm late-night broadcast intimacy over clinical control-room coldness
- everything is a station you tune into — channels, not stacked panels
- the value reads before the label; numerics carry the brightest sodium bloom
- framing is a coloured ribbon and a phosphor bloom, never a grey outline
- status spoken in plain broadcast language: live, cued, recording, locked

### Anti-Values

- cold green mission-console telemetry
- grey-bordered boxed widgets and cards-in-cards
- flat hierarchy with everything equally bright
- scroll cues and down-arrow indicators
- decoration without an idea

### Visual Character

- every section opens with a tuning ribbon: a channel chip, a station name, and a frequency dial with a glowing cyan needle
- broadcast frames carry a sodium-to-magenta ribbon down the left edge and a faint horizontal roll-bar seam — the picture settling into vertical hold
- a rainbow test-pattern channel band runs across the top and bottom edges like station colour bars
- deep indigo-violet ground lit only by phosphor; warm-tuned neutrals, never cold grey
- interaction brightens the sodium bloom rather than moving or reshaping the control

## 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 | `#140A24` |
| surface | `#1E1138` |
| surface_2 | `#281748` |
| text | `#FBEFE0` |
| muted | `#A99BC9` |
| border | `#3A2A5E` |
| accent | `#FFB02E` |
| accent_2 | `#FF4D9D` |
| accent_3 | `#46E4FF` |
| on_accent | `#140A24` |
| primary | `#FFB02E` |
| secondary | `#FF4D9D` |
| success | `#5BE5A6` |
| warning | `#FFB02E` |
| error | `#FF5C7A` |
| info | `#46E4FF` |

## Typography

- **Headline-Lg**: Big Shoulders Display, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Big Shoulders Display, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Space Grotesk, 17px, weight 400, line-height 1.5.
- **Label-Md**: DM 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

Desktop dashboard: a left tuner rail (a breathing nav list, not a boxed widget) and a main stack of broadcast frames in a 12-column rhythm. Landing: full-bleed hero, then full-width channel sections. Tablet collapses the rail to a top strip; phone is a single column with each tuning ribbon stacked above its frame.

### Whitespace

Broadcast spacing: tight within a frame's data, generous between framed channels, protected around the hero.

### Density

engineered schedule density — full but never crowded

### Responsive

Renders from ~390px to 2560px+. Non-essential table columns (host) and nav links drop on mobile rather than overflow; the full-bleed hero spans 100vw while contained content is capped and centred on ultra-wide.

### Breakpoints

- **Xl**: 1200px
- **Lg**: 1024px
- **Md**: 768px
- **Sm**: 480px

## Elevation & Depth

### Shadows

- **Glow Amber**: 0 0 28px rgba(255,176,46,0.28)
- **Glow Magenta**: 0 0 28px rgba(255,77,157,0.26)
- **Glow Cyan**: 0 0 28px rgba(70,228,255,0.24)

## Shapes

### Rounded

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

### Surfaces

- **Treatment**: deep indigo broadcast frame with a scanline roll overlay on display zones
- **Card Style**: broadcast frame: solid indigo surface, sodium-to-magenta ribbon on the left edge, faint horizontal roll-bar seam
- **Bg Pattern**: subtle horizontal scanline roll + warm phosphor glow blobs

### Borders

- **Default Width**: 0px
- **Accent Width**: 6px
- **Style**: none
- **Character**: no grey borders; framing is a left coloured ribbon (sodium→magenta) plus a phosphor bloom, never a flat outline

## Components

### Composition

Compose screens as a broadcast schedule: a station ident bar, a full-viewport hero you tune into, then channels stacked top to bottom. Each region is a broadcast frame opened by a tuning ribbon (channel chip + station name + frequency dial). Never nest a frame in a frame; never box navigation into a floating pill.

### Hierarchy

Numerics carry the highest contrast and the brightest sodium bloom; the value reads before its label. Labels live quiet in DM Mono. Magenta means live, cyan means cued/locked, sodium means recording. Body copy stays secondary.

### Density

Schedule density — substantial information per frame, separated by obvious frame gaps and contrasting indigo underlays so it reads engineered, never crowded.

### Signature

The tuning ribbon — a channel chip, a station name, and a frequency dial with a glowing cyan needle — opening a broadcast frame: sodium-to-magenta left ribbon, faint horizontal roll-bar seam, scanline roll overlay over display zones.

## 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-019efa5c-f0a6-7b83-bed3-759ffd500de2/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 Let sodium-amber be the resting glow; reserve magenta for live and cyan for cued/locked.
- Do Open every region with a tuning ribbon keyed to a channel.
- Do Use DM Mono channel codes, frequencies, and timestamps for broadcast credibility.
- Do Keep numerics largest and brightest — the value reads before the label.
- Do Apply scanline roll overlays to display zones, not every surface.
- Don't Do not go cold or green; this is a warm late-night channel, not a mission console.
- Don't Do not box navigation into a floating pill or nest a frame inside a frame.
- Don't Do not flatten hierarchy by making all text equally bright.
- Don't Do not use grey borders; the ribbon and the bloom are the framing.
- Don't Do not add scroll cues or down-arrow indicators.

### Accessibility

Body 17px+, numerics larger and brightest; high contrast (phosphor white on deep indigo, never dark-on-dark). Every control explicitly styled with a visible cyan-bloom focus state. Status is never carried by colour alone — pills pair colour with a DM Mono label and an inline-SVG glyph. Motion respects prefers-reduced-motion; the settled page renders with no JavaScript.

## Imagery Direction

### Pairs With

cathode

### Summary

Imagery captured off a glowing cathode-ray tube — baked-in scanlines, phosphor bloom, chromatic-aberration fringing and a gentle barrel curve — applied to a broadcast world: rooftop aerials, transmission waves, test patterns and station idents. Warm sodium-amber key with hot magenta and tuner cyan accents over deep indigo. Full-bleed phosphor output with no monitor bezel.

### Subjects

- rooftop television broadcast aerials against transmission waves
- concentric carrier-wave and signal-propagation rings
- test-pattern colour bars and station idents
- tuning dials and frequency scales

### Usage

The landing hero swaps via background-image: var(--hero-image). Keep the overlay legible over the image; never an img tag.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "aerial",
  "type": "registry:theme",
  "title": "Aerial shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#140A24",
      "foreground": "#FBEFE0",
      "card": "#1E1138",
      "card-foreground": "#FBEFE0",
      "popover": "#1E1138",
      "popover-foreground": "#FBEFE0",
      "primary": "#FFB02E",
      "primary-foreground": "#ffffff",
      "secondary": "#FF4D9D",
      "secondary-foreground": "#ffffff",
      "muted": "#A99BC9",
      "muted-foreground": "#FBEFE0",
      "accent": "#FFB02E",
      "accent-foreground": "#ffffff",
      "destructive": "#FF5C7A",
      "border": "#3A2A5E",
      "input": "#3A2A5E",
      "ring": "#FFB02E",
      "chart-1": "#FFB02E",
      "chart-2": "#FF4D9D",
      "chart-3": "#FFB02E",
      "chart-4": "#5BE5A6",
      "chart-5": "#FFB02E",
      "sidebar": "#1E1138",
      "sidebar-foreground": "#FBEFE0",
      "sidebar-primary": "#FFB02E",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#46E4FF",
      "sidebar-accent-foreground": "#111111",
      "sidebar-border": "#3A2A5E",
      "sidebar-ring": "#FFB02E",
      "radius": "16px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#FFB02E",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#FFB02E",
      "accent-foreground": "#ffffff",
      "destructive": "#FF5C7A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#FFB02E",
      "chart-1": "#FFB02E",
      "chart-2": "#FF4D9D",
      "chart-3": "#FFB02E",
      "chart-4": "#5BE5A6",
      "chart-5": "#FFB02E",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#FFB02E",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#FFB02E",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#FFB02E",
      "radius": "16px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019efa5c-f0a6-7b83-bed3-759ffd500de2",
    "slug": "aerial",
    "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",
        "info",
        "muted",
        "on_accent",
        "primary",
        "secondary",
        "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"
      ],
      "shadows": [
        "glow_amber",
        "glow_cyan",
        "glow_magenta"
      ],
      "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 · aerial
DESIGN.md

at a glance

Typography

headline-lgBig Shoulders Display · 33px · 700

The quick brown fox jumps

headline-mdBig Shoulders Display · 27px · 600

The quick brown fox jumps

body-mdSpace Grotesk · 17px · 400

The quick brown fox jumps

label-mdDM Mono · 12px · 600

The quick brown fox jumps

shadcn/ui

implementation kit

built with

Agent-generated

remix lane

try a remix

Keep Aerialand 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
Aerial
Palette
Art style
Landing Page
live preview · recolored + filled
lineage

Family

related

More like this