# Styles, custom colors and JSON themes: dress every Plume visual at once

> The Style card shared by every Plume Studio visual: 20 complete styles, free custom colors to step out of a style, and a JSON theme to apply your brand guidelines everywhere.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/themes-json
- Published: 2026-10-09

Every Plume Studio visual (Table Plume, Bar Plume, Ridgeline Plume, Map Plume, Bar Slicer Plume…) has the **same Style card** in the Format pane, right below the **Plume Studio License** card. It has four groups, in the same order:

| Part | What it does |
|---|---|
| **Style** | A complete ready-made look: colors, three palettes, fonts, frame, table header, bar fill, effects. Then **Theme JSON ★**, **Follow report theme** and **Reverse gradients**. |
| **Custom colors** | The **Customize colors** switch: start from the style and pick the background, text, accent, series and gradient yourself. Free. |
| **Text**, **Animations** | The font (and, in slicers, the text size and density), then animations. |

The background drawn by the visual, the border, the rounded corners and the shadow are in the **Frame** card (see [the shared cards](/en/tutorials/bien-demarrer-visuels-plume#frame)). In slicers, there is no **Reverse gradients** switch.

Pick the same **Style** (or paste the same **Theme JSON**) in every visual of a page: they match automatically.

## 1. Pick a style

| Style | Mood | Offer |
|---|---|---|
| *None* | Each visual's default look | free |
| *Minimal* | Slate and a single bright color, no extra strokes | free |
| *Black & White* | No color at all: black, grays and hatching, perfect for print | free |
| *Newspaper* | Newsprint, black ink, double rule, small caps, one red accent | ★ |
| *Vintage (antique plate)* | Parchment, sepia, indigo and gold leaf, paper texture | ★ |
| *Earth* | Terracotta, olive, ochre and sand | ★ |
| *Nordic* | Glacier blue, cold white, a touch of raspberry | ★ |
| *Executive* | The board report: navy, teal, filled header | ★ |
| *Accessible (high legibility)* | Okabe-Ito and Cividis (color-blind safe), strong contrast | ★ |
| *Pastel* | Soft tints, very rounded corners, pill header | ★ |
| *Bauhaus (pop)* | Primary red, blue and yellow, thick black outlines, hard shadow | ★ |
| *Climate* | Warming stripes, blues against reds | ★ |
| *Blueprint* | Blue paper, grid, dashed strokes, typewriter font | ★ |
| *Unknown Pleasures* | White lines on pure black | ★ |
| *Graphite (dark)* | Warm charcoal, raised cards, coral accent | ★ |
| *Neon* | Indigo night, magenta and cyan, glow, gradient bars | ★ |
| *Terminal (Matrix)* | Green phosphor screen, monospace font, scanlines | ★ |
| *Infographic* | Night slate, orange, pink, purple, cyan, pill bars | ★ |
| *Cockpit (HUD)* | Near-black fir green, mint, coral, amber, segmented bars | ★ |
| *Hologram* | Abyssal blue, electric cyan, translucent fills and glow | ★ |

Each style carries **three palettes**: one for series (bars, lines, categories), one for gradients (heat maps, Ridgeline, Map Plume) and one for deviations (growth, above or below target). It also sets the *favorable* and *unfavorable* colors of KPI cards, Waterfall and Gantt.

Each visual adapts the style to its shape: in **Table Plume**, *Executive* uses a filled header and banded rows, *Newspaper* a double rule and small caps, *Terminal* lowercase "> column" headers; in **Bar Plume**, *Neon* draws gradient bars, *Black & White* hatching, *Bauhaus* outlines; in **Ridgeline Plume**, *Terminal* draws glowing green crest lines.

> **Tip:** A setting you changed by hand (for example the label color) **always wins** over the style. To get the style's color back, set that option back to its default value (reset the card in the Format pane).

## 2. Step out of the style: custom colors (free)

Turn on **Style › Custom colors › Customize colors**. Each box shows the current style's color: change only the ones you want, the others keep following the style.

| Color | What it changes |
|---|---|
| **Background**, **Text**, **Secondary text**, **Lines and grid** | The visual's background, titles and values, axes and notes, strokes |
| **Accent** | Selection, cursor, buttons, links, data bars |
| **Favorable**, **Unfavorable** | Positive and negative deviations (▲ ▼), Gantt statuses |
| **Series 1** to **Series 8** | Series and category colors, in order |
| **Gradient palette** | A gradient from the catalog: *Viridis*, *Magma*, *Inferno*, *Cividis*, *Warming stripes*, *Spectral*… (the *Plume* palettes are free) |
| **Gradient: start**, **middle (diverging)**, **end** | Your own gradient, applied last: it replaces the ends of the chosen palette. With a middle color it becomes diverging: centered on zero when values go from negative to positive. Series colors do not change |

The slicers have one more color: **Bar track**.

To go back to the style, turn the switch off: the colors above are then ignored, **except the Gradient palette** (and, in Ridgeline Plume and Map Plume, colors 1 to 5 of the *Custom* palette), which stays applied. To remove it, pick *Style or theme palette*. A box set back to empty (reset) takes the style's color again.

> **Note:** Custom colors are **free**, even on a ★ style: only the ★ style then shows the "Premium preview" watermark.

## 3. Paste a JSON theme

A JSON theme describes your brand in a short text. Copy an example below, adapt it, then paste it into **Style › Theme JSON ★**. Every field is optional: only include what you want to change.

Easier: build your style guide in the [brand kit](/en/brand-kit). You pick colors, fonts and palettes, the real visuals update live, and the page writes the JSON for you.

The **v2** format groups the settings and starts from a style with `extends`:

```json
{
  "name": "Acme brand",
  "extends": "executive",
  "colors": { "accent": "#C81D25", "positive": "#1E7A4F", "negative": "#C81D25" },
  "palettes": {
    "categorical": ["#0B3954", "#087E8B", "#BFD7EA", "#FF5A5F", "#C81D25"],
    "sequential": "viridis",
    "diverging": ["#0B3954", "#F2F2F2", "#C81D25"]
  },
  "typography": { "fontFamily": "Segoe UI", "numberFamily": "Bahnschrift", "headerCase": "upper", "letterSpacing": 0.06 },
  "shape": { "radius": 4, "borderStyle": "solid", "shadow": "soft" },
  "table": { "header": "filled", "headerBackground": "#0B3954", "headerColor": "#FFFFFF", "banding": true },
  "marks": { "fill": "solid", "barRadius": 2, "lineWidth": 2, "curve": "smooth" },
  "effects": { "glow": false, "texture": "none" }
}
```

| Group | Field | Values |
|---|---|---|
| — | `extends` (or `style`) | id of one of the 20 styles: `none`, `minimal`, `blackWhite`, `press`, `vintage`, `earth`, `nordic`, `executive`, `accessible`, `pastel`, `bauhaus`, `climate`, `blueprint`, `unknownPleasures`, `dark`, `neon`, `terminal`, `infographic`, `cockpit`, `hologram` |
| `colors` | `background`, `background2` | color, or `null` / `"transparent"` (transparent background); `background` also accepts `"none"`: a visual with no background (see below) |
| | `surface` | KPI cards, headers, highlighted cells |
| | `foreground`, `muted`, `grid`, `stroke` | text, secondary text, strokes, outlines |
| | `accent`, `accent2` | accent, second accent (glow) |
| | `positive`, `negative` | favorable, unfavorable |
| `palettes` | `categorical` | 2 to 12 colors, or a palette id |
| | `sequential` | 2 to 12 colors, or an id (`viridis`, `magma`, `inferno`, `cividis`…; in Map Plume also `sepia`, `hypso`, `parchment`) |
| | `diverging` | 3 to 12 colors (neutral middle), or an id |
| | `reverse` | `true` / `false`: reverse the gradients (adds to the "Reverse gradients" switch: either one is enough) |
| `typography` | `fontFamily`, `titleFamily`, `numberFamily` | font of text, titles, numbers |
| | `headerCase` | `none`, `upper`, `smallcaps`, `italic`, `prompt` ("> column" headers) |
| | `headerWeight`, `letterSpacing` | 100 to 900; 0 to 0.3 (em) |
| `shape` | `radius` | 0 to 24 |
| | `border`, `borderWidth`, `borderStyle`, `borderColor` | `true`/`false`; 0 to 4; `solid`, `dashed`, `dotted`, `double`; color |
| | `shadow` | `none`, `soft`, `hard` (offset shadow), `glow` |
| `table` | `header` | `plain`, `rule`, `thickRule`, `double`, `filled`, `pill`, `ticks`, `stripes` |
| | `headerBackground`, `headerColor` | colors of the `filled` header |
| | `banding`, `rowLines`, `colLines` | `true`/`false`; `solid`, `dashed`, `dotted`, `none`; `true`/`false` |
| `marks` | `fill` | `solid`, `gradient`, `outlined`, `glass`, `hatch`, `halftone`, `segmented` |
| | `barRadius`, `lineWidth`, `curve`, `markers`, `outline` | 0 to 99 (99 = pill); 0.5 to 6; `linear`, `smooth`, `step`; `true`/`false`; `none`, `auto` |
| `effects` | `glow`, `glowColor`, `texture` | `true`/`false`; color; `none`, `paper`, `halftone`, `grid`, `scanlines`, `stripes` |

Colors are written in hexadecimal: `#B8462A` (also `#RGB` and `#RRGGBBAA`, whose opacity is ignored). A value outside the list or the range is clamped to the nearest bound or ignored.

### The former format (v1) is still accepted

```json
{ "style": "nordic", "palette": ["#0b3954", "#087e8b", "#ff5a5f"], "accent": "#c81d25", "background": null, "radius": 0 }
```

Flat fields (`accent`, `foreground`, `muted`, `grid`, `stroke`, `background`, `background2`, `fontFamily`, `radius`, `border`) and `palette` (list of colors or id) still work.

### Example: just your accent color

```json
{ "colors": { "accent": "#0057B8" } }
```

### Example: a custom dark mode, starting from Graphite

```json
{
  "extends": "dark",
  "colors": { "background": "#0f172a", "surface": "#1e293b", "accent": "#38bdf8" },
  "palettes": { "categorical": ["#38bdf8", "#f472b6", "#facc15", "#4ade80"] },
  "effects": { "glow": true }
}
```

### Example: a visual with no background, sitting on the page

```json
{ "extends": "minimal", "noBackground": true }
```

`"noBackground": true` (or `"background": "none"`, flat or inside `colors`) makes the visual **fully transparent**: no background, no card (`surface`), no border and no shadow. The visual sits directly on the page color or image. `"background": null` or `"transparent"` only removes the background and keeps the style's border and shadow.

### Example: a map in hypsometric tints (Map Plume)

```json
{ "extends": "nordic", "palettes": { "sequential": "hypso" } }
```

> **Note:** The same text works in every Plume visual: paste it into each of them to harmonize a whole page. Fields a visual does not use are simply ignored.

### Which groups each visual uses

| Group | Visuals |
|---|---|
| `colors`, `typography`, `shape`, `effects` | every visual; the theme's background, border, corner radius and shadow fill the **Frame** card while its settings are left at their default (a setting changed by hand wins) |
| `palettes.categorical` | charts, KPI cards and tables (series, categories); no effect on the slicers |
| `palettes.sequential`, `palettes.diverging` | visuals that draw a gradient or deviations (Ridgeline Plume, Map Plume, color scales of Table Plume and Matrix Plume…) |
| `table` | Table Plume and Matrix Plume |
| `marks` | charts (bars, lines, points, ridges, map); no effect on the slicers |

In the slicers (Bar Slicer, Basic Slicer, Filter Bar, Period, Range, Date Picker, Text Plume), the theme acts on `background`, `foreground`, `muted`, `grid`, `accent`, `borderColor`, `glowColor`, the fonts (`fontFamily`, `titleFamily`), `headerCase`, `letterSpacing`, the frame (`radius`, `border`, `borderWidth`, `borderStyle`, `shadow`), `glow` and `texture`. Palettes, `surface`, `background2`, `stroke`, `accent2`, `positive`, `negative` and `numberFamily` have no effect there (except the older `palette` given as a list of colors without `accent`, which sets the accent color). The theme's font, corner radius and frame only apply while the matching Format pane options are left at their default.

## 4. What wins?

Settings apply in this order; the last one wins:

1. the visual's default values;
2. the **Style**;
3. the **Theme JSON**;
4. the **Gradient palette** (when it is not *Style or theme palette*);
5. **Follow report theme**;
6. the **Custom colors**;
7. settings you changed by hand in the other cards;
8. formats driven by a DAX formula (fx button, "Dynamic format" field);
9. Windows **high contrast** mode, always first for accessibility.

## 5. Troubleshooting

- **"Invalid theme JSON: ignored"** shows in edit mode: the text is not valid JSON. Check the straight quotes `"` (not “ ”), the commas between fields and that there is no comma after the last field. The visual keeps its look meanwhile.
- **A color does not change**: it may be set by hand in another card (it then wins), or written in an unsupported format (`red`, `rgb(…)`): use `#RRGGBB`.
- **A palette chosen in an older report**: it shows in **Custom colors › Gradient palette**, even with the switch off; pick *Style or theme palette* to go back to the style.
- **The font does not change**: it must be installed on every report reader's computer. Styles only use fonts shipped with Windows (Segoe UI, Bahnschrift, Consolas, Georgia, Times New Roman, Verdana, Arial); web fonts are never loaded (Microsoft certification rule).

## Free or premium?

The *None*, *Minimal* and *Black & White* styles, **Custom colors**, the *Plume* palettes and **Follow report theme** are free. The other styles, the other gradient palettes and **Theme JSON** are premium features: without a license key they work with a "Premium preview" watermark. A key bought on [the Pricing page](/en/pricing) removes it. A free style makes its own palettes free: *Minimal*'s gray gradient does not trigger the watermark.
