back to gallery

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 — tokens plus the paired art style. Agents must generate real images.

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
visual character
every section opens with a tuning ribbon: a channel chip, a station name, and a frequency dial with a glowing cyan needlebroadcast frames carry a sodium-to-magenta ribbon down the left edge and a faint horizontal roll-bar seam — the picture settling into vertical holda rainbow test-pattern channel band runs across the top and bottom edges like station colour barsdeep indigo-violet ground lit only by phosphor; warm-tuned neutrals, never cold greyinteraction brightens the sodium bloom rather than moving or reshaping the control
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

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
remix lane

try a remix

Keep Aerial and swap a palette and an art style onto it. The landing & dashboard recolor live.

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

Family

related

More like this