---
title: Dashboard themes
description: Choose a built-in chart theme, set theme precedence, or create and validate an organization theme.
species: reference
---
# Dashboard themes

A theme controls chart surfaces, ink, chrome, categorical and numeric palettes, typography, furniture, tables, and mark styles. It changes presentation, never query data.

## Theme precedence

The closest explicit choice wins:

1. A chart's `theme="slug"` attribute.
2. The dashboard's `theme:` frontmatter.
3. The organization default.
4. `supernova` when no organization default is set.

## Built-in themes

| Slug | Character |
|---|---|
| `supernova` | Near-black ground, one warm accent, and the standard palette |
| `mercury` | Serif headlines on warm paper and restrained inks; pinned light |
| `starlight` | Dawn's warm glow on obsidian black |
| `redshift` | Ember and rust with cool series slots |
| `blueshift` | Cool scientific hues, dense grid, and tabular numerals |
| `pulsar` | Electric high-energy dark; pinned dark |
| `aurora` | Polar greens and violets with gentle radius |
| `eclipse` | Minimal chrome and one corona-gold accent |
| `apollo` | Phosphor and amber on console black; pinned dark |
| `voyager` | Copper, gold, and navy on cream |

Open **Themes** to preview every built-in against the same sample dashboard and set the organization default.

## Create an organization theme

Choose **Edit theme**, start from a built-in, and enter the brand colors and presentation choices. Saving writes `themes/<slug>.json` to your data repo. Built-in slugs are reserved and cannot be overwritten.

Every save validates contrast, color-vision distinguishability, numeric ramps, required modes, and the closed theme schema. Invalid themes are refused with the failing rule instead of degrading at render time.

## Override one chart

```text
<Chart data={revenue-daily} type="bar" x="day" y="revenue" theme="mercury" />
```

Use a per-chart override when the data needs a presentation different from the rest of the page. Palette slots are assigned by series identity, so filtering does not repaint a surviving series as a different category.
