Skip to content
Plume Visuals
← Back
Core range

Waffle and pictogram chart for Power BI Waffle Plume

A percentage, parts or a headcount as cells or pictograms, with the shape of your choice.

Tutorials ↓

Interactive demo

The real Power BI visual, running in your browser with the sample report's fictitious data. Switch scenario, style or year: the visual updates as it does in Power BI. Premium ★ features are shown here without the watermark; in Power BI, without a license, they show “Plume Visuals · Premium preview”.

Power BI has no waffle chart. Waffle Plume turns a rate, a split or a headcount into a grid of cells: 43% colors 43 cells out of 100, each channel colors its share of one waffle, each person stands for 2 employees. Two free modes (percentage, parts of a whole), correct percentages thanks to the Total field, a grid of 1 to 50 rows and columns, four fill orders, 22 free shapes and a different shape per category. With premium: the play axis (the cells fill or empty from one year to the next), the Units mode (pictograms, 1 cell = N units), snake orders, 131 more shapes, your own SVG or one SVG icon per category from a measure, a partly filled last cell, target cells and small multiples.

Use cases

  • Satisfaction, progress or target coverage rates, as 100 cells
  • Revenue split by channel in a single waffle
  • Headcount by department or contract as pictograms (one person = N employees)
  • Project progress: done, in progress, to do
  • Channel shares year by year, replayed with the play axis

FreeIncluded for free

  • Two modes: percentage (one waffle per category) and parts of a whole (one shared waffle)
  • Correct percentages: value ÷ Total, % measures, share of the sum; rounding without losing a cell
  • Grid of 1 to 50 rows and columns, four fill orders (rows or columns, from the top or the bottom)
  • 22 free shapes (square, circle, heart, drop, person, house…) and one shape per category
  • Headline value, legend with %, cell-by-cell reveal
  • Category labels (show, size, color, width); single percentage waffle with the big number
  • Tooltips, cross-filtering, highlighting inside the cells, keyboard, right-click menu; dynamic formats (fx and DAX)

PremiumPremium features

  • Play axis: play ▶, slider, speed, loop; cells fill or empty from one period to the next
  • Units mode: pictograms, 1 cell = N units; snake fill orders; headline with “percentage and value” or “value of total”
  • 131 more shapes (people, transport, business, nature, buildings…)
  • Your pasted SVG, or one SVG icon per category from a DAX measure (cleaned, never loaded from the web)
  • Partly filled last cell (exact fraction)
  • Target: circled cell, missing cells dashed
  • Small multiples: one waffle per region or per year
  • Catalog-wide styles (Neon, Newspaper, Nordic…), palettes, theme JSON

Usable without a key to try them, with a watermark.

Tutorials

Start with Getting started, then pick from the how-to guides. The Fields and settings page describes every option of the Format pane.

  1. Getting startedBeginner6 min readA 100-cell waffle chart with your own shapes in Power BIGetting started with Waffle Plume: show a percentage as 100 cells, share one waffle between several categories, pick the cell shape and read the result.
  2. How-to guidesIntermediate5 min readWaffle Plume: correct percentages, pictograms, targets and SVGWaffle Plume use cases: a rate computed on a total, one waffle per category, pictograms, the year-by-year change, a target, your own SVG icons and small multiples.
  3. Fields and settingsAdvanced19 min readWaffle Plume: every field and setting of the Format paneComplete reference of Waffle Plume: the eight fields, every setting of the Data colors, Layout, Cells, Headline value, Target, Legend, Playback and Interactions cards.
  4. BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.

Fields to drop into the visual

FieldContent
CategoryThe parts of the waffle (channel, contract…)Optional
ValueA rate, or an amount (1 to 6 measures)Required
Total (100%)What fills the whole waffle: % = value ÷ totalOptional
TargetTarget cell circled, missing cells dashedOptionalPremium
Small multiplesOne waffle per region, per year…OptionalPremium
SVG iconText measure: one SVG per categoryOptionalPremium
Play axisYear, month or date: the cells fill or emptyOptionalPremium
TooltipsExtra measuresOptional
Dynamic formatMeasures renamed card.setting (e.g. title.text): the Format pane driven by DAXOptional

Missing a feature? We adapt our visuals or build custom ones. Request a custom visual

Found a bug in Waffle Plume, or have an idea to improve it? Report a bug · Suggest an idea

Technical reference for AI assistants

This section is meant for AI assistants (ChatGPT, Claude, Copilot…): every field, every Format pane option with its internal name, the expected data shape and DAX examples. Generated from the visual's code, version 1.1.0.0. Paste it into your assistant so it can guide you.

Raw Markdown version (/ai/visuals/waffle.md)
# Waffle Plume: technical reference for AI assistants

> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.1.0.0**. This page is generated from the visual's source code at each site build: field names, option names and defaults are exact for this version.

Use it to help someone build a report with Waffle Plume: which fields to drag, how to shape the data, which Format pane option to change, or how to write the visual's settings in a PBIP `visual.json` file.

- Product page: https://plumevisuals.com/en/visuals/waffle (French: https://plumevisuals.com/fr/visuels/waffle)
- Summary: A percentage, parts or a headcount as cells or pictograms, with the shape of your choice.
- Power BI visual GUID (`visualType`): `plumeWaffleC707BF468E704234BE22DABB0FE758B2`
- Power BI visuals API: 5.11.1
- Support: https://plumevisuals.com/support · contact@plumevisuals.com
- Index of everything on the site for AI assistants: https://plumevisuals.com/llms.txt

## What the visual does

Waffle Plume (identifier `waffle`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; AppSource submission in preparation) that draws **waffle charts and pictogram charts**: a grid of cells where each cell is a share of a whole, or a number of units. Power BI Desktop has no native waffle chart.

**New in version 1.1.0.0 (30/10/2026):** Free native-parity additions: adjustable category labels (row names) and a large value in Shares mode.

- **Three modes** (`layout.mode`): `percent` (one waffle per category or per measure, the percentage written in large type next to it), `parts` (every category colors its share of one waffle; rounding by largest remainder so the total is always the full grid), `units` ★ (one row of cells per category, 1 cell = N units, isotype style, with a key "= N"). `auto` (default) = `parts` with a Category or several measures, else `percent`.
- **Correct percentages** (`layout.scale`, default `auto`): with the Total field, value ÷ total; a measure formatted as % or values between 0 and 1 are read as ratios; several categories give their share of the sum; a single value ≤ 100 is read in points; otherwise the largest value = 100%. Explicit choices: `share`, `ratio`, `points`, `max`. Above 100%: the waffle is full, the headline shows the real value, the tooltip says "exceeds 100%".
- **Grid**: 1 to 50 rows and columns (10 × 10 by default), six fill orders (`rows`, `rowsBottom`, `columns`, `columnsBottom`, and the premium `snake` ★, `snakeBottom` ★), spacing, corner radius.
- **Shapes** (Savi's idea): 153 shapes of the Plume library (22 free), one shape per category in the Data colors card, a pasted SVG ★ or one SVG icon per category returned by a measure ★. SVG is sanitized (allow-list) and never loaded from the web.
- **Play axis ★** (premium since 10/22/2026, shared Plume player): one frame per value of the Play axis field; from one frame to the next the cells that change switch one by one in fill order (they fill, or empty in reverse order) and the headline counts; grid size and colors are computed over all frames.
- Cell-by-cell reveal (or fade) when data changes, never with reduced motion or on a dashboard tile.

## Free vs premium (★)

- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes, "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes and `style.themeJson` are **premium**.
- Free in Waffle Plume: the `percent` and `parts` modes (and `auto`), every scale rule, Total field, grid size, the four fill orders `rows`, `rowsBottom`, `columns`, `columnsBottom`, spacing, radius, the **22 free shapes** (`circle`, `square`, `roundedSquare`, `rectangle`, `triangle`, `diamond`, `hexagon`, `star`, `heart`, `cloud`, `drop`, `bubble`, `arrow`, `person`, `house`, `barrel`, `bottle`, `glass`, `wineGlass`, `thermometer`, `battery`, `batteryVertical`) also per category, rounding (`round`, `floor`), empty cells, headline (`pct` or `value`), legend, sorting, Others grouping, one waffle per category or per measure, reveal, tooltips, selection, highlighting.
- Premium features of Waffle Plume:
  - the `play` role ("Play axis ★", « Axe de lecture ★ ») as soon as it holds a value, and its "Playback ★" card (rebalancing of 10/22/2026);
  - `layout.mode` = `units` (Units mode, pictograms);
  - `layout.order` = `snake` or `snakeBottom`;
  - `headline.content` = `pctValue` or `valueTotal`, when the headline is shown in Percentage mode (no effect, so no watermark, in Parts mode);
  - any other shape (131), in `cells.shape` or per category (`dataColors.itemShape`);
  - `cells.shape` = `svg` with a valid `cells.svg`; the `icon` role ("SVG icon ★") with a valid SVG;
  - `cells.partial` = `partial` (partly filled last cell, a cell can be shared by two categories);
  - the `target` role ("Target ★") while `target.show` is on;
  - the `multiples` role ("Small multiples ★").
- Without a valid key, a premium feature in use shows, in edit mode, a "Premium preview" note in the footer; in reading view, **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») is repeated lightly across the whole visual, without catching the mouse. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the **first card** of the Format pane. Premium options and list values have " ★" appended to their label.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `waffle` or the whole catalog. In edit mode, a wrong key shows "Invalid license key", "License expired (date)" or "This key does not cover this visual".
- Licenses last one year (one-time payment, no automatic renewal, key accepted for 30 more days, reminders 30 and 7 days before the end). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack (199 € / 399 € / 1,199 € per year; tiers by number of users: personal 1–10, SME 11–200, enterprise more than 200).

## Expected data shape

One row per category (and per year, region… when those fields are used), with measures.

| Category (`category`) | Value (`value`) | Total (`total`) |
|---|---|---|
| Store | 420,000 | 1,000,000 |
| Web | 310,000 | 1,000,000 |

- **Category** (`category`, « Catégorie », one column): the parts. Beyond `layout.maxItems` (10) the smallest are grouped in "Others" (`layout.othersLabel`).
- **Value** (`value`, « Valeur », 1 to 6 measures): without Category, each measure is a part (e.g. Done, In progress, To do); with Category and several measures, one waffle per measure. Without any measure, rows are counted. Negative values count as zero (warning icon).
- **Total (100%)** (`total`, « Total (100 %) », one measure): denominator; in `parts` mode the largest total of a waffle is used.
- **Target ★** (`target`, « Objectif ★ », one measure, same unit as Value): target cell circled, missing cells dashed (`target.style` = `ring` | `marker`), "Target: 60%" under the headline (`target.label`).
- **Small multiples ★** (`multiples`, « Petits multiples ★ », one column): one waffle per value (48 at most), each with the parts of Category; selection = category + panel.
- **SVG icon ★** (`icon`, « Icône SVG ★ », one text measure): an SVG (markup, data URI or path `d`) per category.
- **Play axis ★** (`play`, « Axe de lecture ★ », one column): year, date or ordered text; premium (watermark without a key).
- **Tooltips** (`tooltips`, up to 5 measures) and **Dynamic format** (`format`, see below).
- Volume of data: windows of 30,000 rows, more fetched with `fetchMoreData` up to 1,000,000 rows; 100,004 rows render in less than 3 seconds (automated test).

## DAX recipes

```dax
// A rate: formatted as a percentage, it fills that many cells out of 100
Success rate = DIVIDE ( [Passed], [Enrolled] )

// Share of one category against all categories
Web share = DIVIDE ( CALCULATE ( [Revenue], Sales[Channel] = "Web" ), CALCULATE ( [Revenue], ALL ( Sales[Channel] ) ) )

// Three parts of a project (three measures in Value, nothing in Category)
Done = DIVIDE ( CALCULATE ( COUNTROWS ( Tasks ), Tasks[Status] = "Done" ), COUNTROWS ( Tasks ) )

// SVG icon ★ per category (single quotes inside the SVG)
Channel icon = SWITCH ( SELECTEDVALUE ( Sales[Channel] ),
    "Store", "<svg viewBox='0 0 24 24'><path d='M3 10L12 3L21 10V21H15V14H9V21H3Z'/></svg>",
    BLANK () )
```

## Interactions with the report

- Click a cell: cross-filter on its category (and its panel with small multiples); Ctrl for several; click the empty space to clear; click a legend entry. Cross-highlighting from other visuals keeps the highlighted share of each category in full color, the rest dimmed. Context menu everywhere (cells, empty cells, empty space, headline, legend, landing page).
- Hover: the category stays bright in every waffle (`interaction.hover`); Power BI tooltip with category, value, share, "31 of 100" cells, total, target and variance, Others members, Tooltips measures; report-page tooltips are supported.
- Keyboard: Tab, arrows (one stop per category and per waffle), Home / End, Enter selects, Esc clears; play bar: Space, arrows, Home / End. High contrast (filled and outlined cells alternate, empty cells dashed, host colors), ARIA labels, French and English.
- The visual never saves anything with persistProperties; the current frame of the play axis is session state.

## Dynamic formats

- **fx button** on colors and texts of the Format pane.
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `layout.mode`, `cells.shape`, `title.text`) drive any setting and win over the fixed value. Driving a ★ setting by DAX still shows the watermark without a key.

## Format pane: option IDs

- Card order: `license`, `style`, `dataColors`, `layout`, `cells`, `headline`, `target`, `legend`, `play`, `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `layout`, `cells`, `headline`, `categoryLabels`, `target`, `legend`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `dataColors`: `mode` (`category` | `single`), `single`, per category `fill` and `itemShape` (`inherit` or a shape ID, or `svg`).
- `layout`: `mode` (`auto` | `percent` | `parts` | `units` ★), `scale` (`auto` | `share` | `ratio` | `points` | `max`), `rows` (1–50, 10), `columns` (1–50, 10), `order` (`rows` | `rowsBottom` | `columns` | `columnsBottom` | `snake` ★ | `snakeBottom` ★), `unitValue` (0 = automatic round number, at most 20 cells for the largest category), `unitKey`, `gap` (0–60 %, 16), `sort` (`value` | `valueAsc` | `alpha` | `data`), `maxItems` (2–30, 10), `othersLabel`, `perRow` (0–12, 0 = automatic), `panelTitles`, `panelTitleSize` (11).
- `cells`: `shape` (153 shape IDs or `svg`, default `square`), `svg` ★ (text), `radius` (0–50 px, 2), `partial` (`round` | `floor` | `partial` ★), `reveal` (`cascade` | `fade` | `none`), `emptyStyle` (`auto` | `filled` | `outline` | `hidden`), `emptyColor`, `emptyOpacity` (5–100, 100).
- `headline`: `show`, `content` (`pct` | `value` | `pctValue` ★ | `valueTotal` ★), `position` (`auto` | `left` | `top` | `bottom`), `fontSize` (8–96, 26), `color`, `showName`, `nameSize` (11), `units`, `decimals`, `prefix`, `suffix`, `pctDecimals` (−1–3).
- `target` ★: `show`, `style` (`ring` | `marker`), `color`, `label`.
- `legend`: `show`, `content` (`name` | `namePct` | `nameValue` | `namePctValue`), `position` (`top` | `bottom` | `right` | `left`, default `right`), `align`, `showTitle`, `titleText`, `fontSize`, `color`, `interactive`.
- `play` ★ (shared player, card « Lecture ★ » / "Playback ★"): `start` (`last` | `first`), `speed` (100–10,000 ms, 1,000), `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel` (off by default in Waffle Plume), `labelSize`, `labelPosition`.
- `interaction`: `hover`, `dim` (5–80, 25).
- Shape IDs by group: basic `circle`, `square`, `roundedSquare`, `rectangle`, `triangle`, `diamond`, `hexagon`, `star`, `heart`, `ellipse`, `pentagon`, `octagon`, `rightTriangle`, `parallelogram`, `trapezoid`, `ring`, `semicircle`, `arch`, `capsule`, `star6`, `seal`, `cross`; people `person`, `man`, `woman`, `child`, `people`, `bust`; nature `cloud`, `drop`, `sun`, `moon`, `snowflake`, `leaf`, `pine`, `tree`, `flower`, `mountain`, `wave`, `flame`, `umbrella`, `apple`, `fish`, `paw`, `rain`, `sprout`; objects `house`, `building`, `factory`, `castle`, `shop`, `bank`, `hospital`, `book`, `envelope`, `phone`, `laptop`, `monitor`, `gift`, `clock`, `calendar`, `pencil`, `lightbulb`, `cup`, `crown`, `trashCan`; transport `car`, `truck`, `bus`, `bicycle`, `plane`, `boat`, `train`, `rocket`, `helicopter`, `ship`, `fuel`, `scooter`; business `target`, `barChart`, `pieChart`, `trendUp`, `coin`, `banknote`, `wallet`, `creditCard`, `cart`, `briefcase`, `percent`, `podium`, `megaphone`, `gem`, `medal`, `clipboard`, `handshake`; plus arrows and symbols, containers and maps.

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs. Booleans `true` / `false`, numbers suffixed with `D`, strings and enumeration values in single quotes.

```json
{
  "visualType": "plumeWaffleC707BF468E704234BE22DABB0FE758B2",
  "query": {
    "queryState": {
      "category": { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Channel" } }, "queryRef": "Sales.Channel", "nativeQueryRef": "Channel" } ] },
      "value":    { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] }
    }
  },
  "objects": {
    "layout": [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'parts'" } } }, "order": { "expr": { "Literal": { "Value": "'columnsBottom'" } } } } } ],
    "cells":  [ { "properties": { "shape": { "expr": { "Literal": { "Value": "'circle'" } } } } } ]
  }
}
```

The custom visual package must also be embedded in the report (Power BI does this when the visual is imported from the `.pbiviz` file).

## Styles and theme JSON

- `style.preset` takes one of the 20 style IDs shared by every Plume visual: `none`, `minimal`, `blackWhite`, `press`, `vintage`, `earth`, `nordic`, `executive`, `accessible`, `pastel`, `bauhaus`, `climate`, `blueprint`, `unknownPleasures`, `dark`, `neon`, `terminal`, `infographic`, `cockpit`, `hologram`. Category colors set in Data colors win over the style.
- `style.themeJson` (Theme JSON ★): a JSON theme as plain text. Full reference: https://plumevisuals.com/ai/tutorials/en/themes-json.md.

## Common pitfalls

- A full waffle (100%) with an amount and no category: there is no denominator; add the Total field or a Category, or set `layout.scale`.
- The percentage looks wrong: check `layout.scale` (a measure of 43 without % format is read as 43 points only when it is ≤ 100 and alone).
- "Others" appears: more than `layout.maxItems` categories.
- Tiny shapes: wide shapes (car, truck) are fitted in square cells; use fewer rows and columns.
- The SVG is ignored and squares are drawn: invalid SVG (a message explains why in edit mode) or a web address (never loaded).
- Watermark visible: a filled Play axis field, `layout.mode` = `units`, a snake fill order, `headline.content` = `pctValue` or `valueTotal` (Percentage mode), a ★ shape, pasted or measure SVG, `cells.partial` = `partial`, Target field with `target.show`, Small multiples field, a ★ style or a theme JSON, without a valid key.

## Features that do NOT exist (do not suggest them)

Images (PNG, JPEG) as cells, loading an SVG or an icon from a URL, icon fonts, a gradient color by measure per cell, spiral or circular waffles, a native drill-down hierarchy, saving the current frame of the play axis in the report, exporting the chart as an image.

## Data fields (wells)

Internal name = data role name (PBIP `queryState` key). Labels as shown in Power BI (English / French). ★ = premium.

| Internal name | Label (EN) | Label (FR) | Kind | Max fields | Description |
|---|---|---|---|---|---|
| `category` | Category | Catégorie | column | 1 | Parts of the waffle (e.g. Product line). Without it, each measure is a part. |
| `value` | Value | Valeur | measure | 6 | Measure to show (a ratio, a percentage or an amount). Several measures: one part (or one waffle) each. |
| `total` | Total (100%) | Total (100 %) | measure | 1 | Optional: the amount that fills the whole waffle (e.g. headcount). The percentage is value ÷ total. |
| `target` | Target ★ | Objectif ★ | measure | 1 | Premium: the target cell is circled, the missing cells are dashed. |
| `multiples` | Small multiples ★ | Petits multiples ★ | column | 1 | Premium: one waffle per value of this field (e.g. Year, Region), each with the parts of the Category field. |
| `icon` | SVG icon ★ | Icône SVG ★ | measure | 1 | Premium: a text measure that returns an SVG for each category (the shape of its cells). Cleaned, never loaded from the web. |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | Premium: a date, a year or an ordered category; the cells fill or empty one by one from one value to the next (play button). |
| `tooltips` | Tooltips | Infobulles | measure | 5 |  |
| `format` | Dynamic format | Format dynamique | measure | several | Measures named card.setting (e.g. title.fontSize): drive any Format option with DAX |

Data view: categorical, categories = `category` + `multiples` + `play` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `value`, `total`, `target`, `icon`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (142)

Columns: option ID (`object.property`), labels EN / FR as shown in Power BI, control type, PBIP literal type, default value, allowed values, notes.

### Plume Studio License / Licence Plume Studio (`license`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `license.buy` | Get a license | Obtenir une licence | info | text | `plumevisuals.com` |  |  |
| `license.key` | License key | Clé de licence | text | text | (empty) |  | Paste the key received after purchase on plumevisuals.com (starts with PLUM1.). Checked offline. |
| `license.showOwner` | Show license holder (edit mode) | Afficher le titulaire (mode édition) | toggle | bool | `true` | true / false |  |

### Style (`style`, Format pane)

**Style**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.preset` | Style | Style | dropdown | enumeration | `none` | `none` None; `minimal` Minimal; `blackWhite` Black & White; `press` Newspaper ★; `vintage` Vintage (antique plate) ★; `earth` Earth ★; `nordic` Nordic ★; `executive` Executive ★; `accessible` Accessible (high legibility) ★; `pastel` Pastel ★; `bauhaus` Bauhaus (pop) ★; `climate` Climate ★; `blueprint` Blueprint ★; `unknownPleasures` Unknown Pleasures ★; `dark` Graphite (dark) ★; `neon` Neon ★; `terminal` Terminal (Matrix) ★; `infographic` Infographic ★; `cockpit` Cockpit (HUD) ★; `hologram` Hologram ★ | Complete look shared by all Plume visuals: colors, three palettes, fonts, frame, table header, marks and effects. Customize colors below. |
| `style.themeJson` | Theme JSON ★ | Thème JSON ★ | textarea | text | (empty) |  | Paste a JSON theme: see the 'JSON themes' tutorial on plumevisuals.com |
| `style.followTheme` | Follow report theme | Suivre le thème du rapport | toggle | bool | `false` | true / false | Text, background, accent and data colors come from the Power BI report theme. |
| `style.reverse` | Reverse gradients | Inverser les dégradés | toggle | bool | `false` | true / false |  |

**Custom colors / Couleurs personnalisées**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.customColors` | Customize colors | Personnaliser les couleurs | toggle | bool | `false` | true / false | Start from the style and pick your own colors. A color left empty keeps the style's color. |
| `style.colorBackground` | Background | Fond | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorText` | Text | Texte | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorMuted` | Secondary text | Texte secondaire | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorGrid` | Lines and grid | Traits et grille | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorAccent` | Accent | Accent | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorPositive` | Favorable | Favorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorNegative` | Unfavorable | Défavorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series1` | Series 1 | Série 1 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series2` | Series 2 | Série 2 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series3` | Series 3 | Série 3 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series4` | Series 4 | Série 4 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series5` | Series 5 | Série 5 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series6` | Series 6 | Série 6 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series7` | Series 7 | Série 7 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series8` | Series 8 | Série 8 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.palette` | Gradient palette | Palette du dégradé | dropdown | enumeration | `auto` | `auto` Style or theme palette; `crest` Plume (sequential); `crestDiverging` Plume (diverging); `viridis` Viridis ★; `magma` Magma ★; `inferno` Inferno ★; `cividis` Cividis (colorblind-safe) ★; `warmingStripes` Warming stripes ★; `rdYlBu` Red–Yellow–Blue ★; `brBG` Brown–Teal (drought) ★; `spectral` Spectral ★; `blues` Blues ★; `reds` Reds ★; `grays` Grays ★; `press` Press (ink and paper) ★; `nordic` Nordic ★; `earth` Earth (ochre to umber) ★; `pastel` Pastel ★; `okabeIto` Okabe-Ito (colorblind-safe) ★ | Visible when `style.customColors` = `true`. Gradient from the catalog (Viridis, Magma…). The start, middle and end colors below replace it. |
| `style.scaleLow` | Gradient: start | Dégradé : début | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleMid` | Gradient: middle (diverging) | Dégradé : milieu (écarts) | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleHigh` | Gradient: end | Dégradé : fin | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |

**Text / Texte**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.fontFamily` | Font | Police | font | formatting | `Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif` |  | Used by every text of the visual (title, axes, labels, cells). |

**Animations**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.animate` | Animations | Animations | toggle | bool | `true` | true / false | Smooth transitions when data changes. Automatically disabled when the system asks to reduce motion. |

### Layout / Disposition (`layout`, Format pane)

**Waffle / Gaufre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.mode` | Mode | Mode | dropdown | enumeration | `auto` | `auto` Automatic (parts with a category, else percentage); `percent` Percentage: one waffle per category; `parts` Parts of a whole: every category in one waffle; `units` Units: 1 cell = N units (pictograms) ★ | Percentage: 43% = 43 cells out of 100. Parts: each category colors its share of the cells. Units ★: one row of cells per category, each cell is worth N units (isotype style). |
| `layout.scale` | Percentage computed | Pourcentage calculé | dropdown | enumeration | `auto` | `auto` Automatic; `share` Share of the sum of the categories; `ratio` Value is a ratio (0.43 = 43%); `points` Value in points (43 = 43%); `max` The largest value = 100% | Visible when `layout.mode` = `auto` or `percent` or `parts`. Automatic: with the Total field, value ÷ total; a % formatted measure or values between 0 and 1 are ratios; several categories: share of their sum; else the value in points when it does not exceed 100. |
| `layout.rows` | Rows | Lignes | number | integer | `10` | 1 to 50 | Visible when `layout.mode` = `auto` or `percent` or `parts` |
| `layout.columns` | Columns (cells per row) | Colonnes (éléments par ligne) | number | integer | `10` | 1 to 50 |  |
| `layout.order` | Fill order | Ordre de remplissage | dropdown | enumeration | `rows` | `rows` Row by row, from the top; `rowsBottom` Row by row, from the bottom; `columns` Column by column, from the top; `columnsBottom` Column by column, from the bottom; `snake` Snake, from the top ★; `snakeBottom` Snake, from the bottom ★ | Visible when `layout.mode` = `auto` or `percent` or `parts` |
| `layout.unitValue` | Value of one cell (0 = automatic) | Valeur d'un élément (0 = automatique) | number | numeric | `0` | 0 to … | Visible when `layout.mode` = `units`. Units: each cell is worth this number (e.g. 1,000 people). Automatic: a round number giving at most 20 cells to the largest category. |
| `layout.unitKey` | Show « 1 cell = … » | Afficher « 1 élément = … » | toggle | bool | `true` | true / false | Visible when `layout.mode` = `units` |
| `layout.gap` | Space between cells (%) | Espace entre les éléments (%) | number | integer | `16` | 0 to 60 |  |

**Categories and waffles / Catégories et gaufres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.sort` | Category order | Ordre des catégories | dropdown | enumeration | `value` | `value` Largest first; `valueAsc` Smallest first; `alpha` Alphabetical; `data` Data order (Sort by column) |  |
| `layout.maxItems` | Categories at most (the next ones: « Others ») | Catégories au plus (les suivantes : « Autres ») | number | integer | `10` | 2 to 30 |  |
| `layout.othersLabel` | Grouping label | Libellé du regroupement | text | text | (empty) |  |  |
| `layout.perRow` | Waffles per row (0 = automatic) | Gaufres par ligne (0 = automatique) | number | integer | `0` | 0 to 12 | Several waffles (one per category, per measure or per value of the Small multiples field): number of waffles side by side. |
| `layout.panelTitles` | Title of each waffle | Titre de chaque gaufre | toggle | bool | `true` | true / false |  |
| `layout.panelTitleSize` | Waffle title size | Taille des titres des gaufres | number | formatting | `11` | 6 to 24 |  |

### Data colors / Couleurs des données (`dataColors`, Format pane)

Per-item card: Power BI shows it once per series, category, column or KPI (an "Apply settings to" list where relevant). In PBIP `visual.json`, each entry of `objects.dataColors` carries a `selector` (`metadata` = the field's queryRef, or `data` for a category value); an entry without a selector applies to all items.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `dataColors.mode` | Coloring | Coloration | dropdown | enumeration | `category` | `category` One color per category; `single` Single color (shades by category) |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |

### Cells / Éléments (`cells`, Format pane)

**Filled cells / Éléments remplis**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `cells.shape` | Cell shape | Forme des éléments | dropdown | enumeration | `square` | `circle` Basic · Circle; `square` Basic · Square; `roundedSquare` Basic · Rounded square; `rectangle` Basic · Rectangle; `triangle` Basic · Triangle; `diamond` Basic · Diamond; `hexagon` Basic · Hexagon; `star` Basic · Star; `heart` Basic · Heart; `ellipse` Basic · Ellipse ★; `pentagon` Basic · Pentagon ★; `octagon` Basic · Octagon ★; `rightTriangle` Basic · Right triangle ★; `parallelogram` Basic · Parallelogram ★; `trapezoid` Basic · Trapezoid ★; `ring` Basic · Ring ★; `semicircle` Basic · Semicircle ★; `arch` Basic · Arch ★; `capsule` Basic · Pill ★; `star6` Basic · Six-pointed star ★; `seal` Basic · Seal ★; `cross` Basic · Cross ★; `arrow` Arrows and symbols · Arrow; `arrowUp` Arrows and symbols · Arrow up ★; `arrowDown` Arrows and symbols · Arrow down ★; `arrowLeft` Arrows and symbols · Arrow left ★; `doubleArrow` Arrows and symbols · Double arrow ★; `chevron` Arrows and symbols · Chevron ★; `check` Arrows and symbols · Check mark ★; `close` Arrows and symbols · Close (X) ★; `plus` Arrows and symbols · Plus ★; `minus` Arrows and symbols · Minus ★; `warning` Arrows and symbols · Warning ★; `info` Arrows and symbols · Information ★; `playButton` Arrows and symbols · Play button ★; `bubble` Arrows and symbols · Speech bubble; `thought` Arrows and symbols · Thought bubble ★; `flag` Arrows and symbols · Flag ★; `bookmark` Arrows and symbols · Bookmark ★; `tag` Arrows and symbols · Tag ★; `bolt` Arrows and symbols · Lightning bolt ★; `shield` Arrows and symbols · Shield ★; `award` Arrows and symbols · Award ★; `puzzle` Arrows and symbols · Puzzle piece ★; `gear` Arrows and symbols · Gear ★; `lock` Arrows and symbols · Lock ★; `key` Arrows and symbols · Key ★; `bell` Arrows and symbols · Bell ★; `eye` Arrows and symbols · Eye ★; `cloud` Nature and weather · Cloud; `drop` Nature and weather · Drop; `sun` Nature and weather · Sun ★; `moon` Nature and weather · Moon ★; `snowflake` Nature and weather · Snowflake ★; `leaf` Nature and weather · Leaf ★; `pine` Nature and weather · Pine tree ★; `tree` Nature and weather · Tree ★; `flower` Nature and weather · Flower ★; `mountain` Nature and weather · Mountain ★; `wave` Nature and weather · Wave ★; `flame` Nature and weather · Flame ★; `umbrella` Nature and weather · Umbrella ★; `apple` Nature and weather · Apple ★; `fish` Nature and weather · Fish ★; `paw` Nature and weather · Paw print ★; `rain` Nature and weather · Rain ★; `sprout` Nature and weather · Sprout ★; `person` People · Person; `man` People · Man ★; `woman` People · Woman ★; `child` People · Child ★; `people` People · Group of people ★; `bust` People · User bust ★; `house` Objects and buildings · House; `building` Objects and buildings · Office building ★; `factory` Objects and buildings · Factory ★; `castle` Objects and buildings · Castle ★; `shop` Objects and buildings · Shop ★; `bank` Objects and buildings · Bank ★; `hospital` Objects and buildings · Hospital ★; `book` Objects and buildings · Book ★; `envelope` Objects and buildings · Envelope ★; `phone` Objects and buildings · Phone ★; `laptop` Objects and buildings · Laptop ★; `monitor` Objects and buildings · Monitor ★; `gift` Objects and buildings · Gift ★; `clock` Objects and buildings · Clock ★; `calendar` Objects and buildings · Calendar ★; `pencil` Objects and buildings · Pencil ★; `lightbulb` Objects and buildings · Light bulb ★; `cup` Objects and buildings · Trophy ★; `crown` Objects and buildings · Crown ★; `trashCan` Objects and buildings · Trash can ★; `barrel` Containers and gauges · Barrel; `bottle` Containers and gauges · Bottle; `wineGlass` Containers and gauges · Wine glass; `glass` Containers and gauges · Glass; `mug` Containers and gauges · Mug ★; `jar` Containers and gauges · Jar ★; `bucket` Containers and gauges · Bucket ★; `battery` Containers and gauges · Battery; `batteryVertical` Containers and gauges · Vertical battery; `thermometer` Containers and gauges · Thermometer; `testTube` Containers and gauges · Test tube ★; `tank` Containers and gauges · Tank ★; `funnel` Containers and gauges · Funnel ★; `hourglass` Containers and gauges · Hourglass ★; `bag` Containers and gauges · Bag ★; `piggyBank` Containers and gauges · Piggy bank ★; `flask` Containers and gauges · Flask ★; `beaker` Containers and gauges · Beaker ★; `can` Containers and gauges · Can ★; `coffeeCup` Containers and gauges · Coffee cup ★; `vase` Containers and gauges · Vase ★; `milkCarton` Containers and gauges · Milk carton ★; `france` Maps and places · Metropolitan France ★; `africa` Maps and places · Africa ★; `australia` Maps and places · Australia ★; `southAmerica` Maps and places · South America ★; `pin` Maps and places · Map pin ★; `globe` Maps and places · Globe ★; `foldedMap` Maps and places · Folded map ★; `compass` Maps and places · Compass ★; `city` Maps and places · City skyline ★; `target` Business · Target ★; `barChart` Business · Bar chart ★; `pieChart` Business · Pie chart ★; `trendUp` Business · Trend up ★; `coin` Business · Coin ★; `banknote` Business · Banknote ★; `wallet` Business · Wallet ★; `creditCard` Business · Credit card ★; `cart` Business · Shopping cart ★; `briefcase` Business · Briefcase ★; `percent` Business · Percent ★; `podium` Business · Podium ★; `megaphone` Business · Megaphone ★; `gem` Business · Gem ★; `medal` Business · Medal ★; `clipboard` Business · Clipboard ★; `handshake` Business · Handshake ★; `car` Transport · Car ★; `truck` Transport · Truck ★; `bus` Transport · Bus ★; `bicycle` Transport · Bicycle ★; `plane` Transport · Plane ★; `boat` Transport · Sailboat ★; `train` Transport · Train ★; `rocket` Transport · Rocket ★; `helicopter` Transport · Helicopter ★; `ship` Transport · Cargo ship ★; `fuel` Transport · Fuel pump ★; `scooter` Transport · Scooter ★; `svg` Pasted SVG (below) ★ | ★ shapes work with a watermark until a key is entered. A different shape per category: « Data colors » card. |
| `cells.svg` | Pasted SVG ★ | SVG collé ★ | textarea | text | (empty) |  | Visible when `cells.shape` = `svg`. Paste the code of an SVG icon (or a data URI, or a d attribute), then colored by category. The SVG is cleaned: scripts, links and images are removed; no web address is ever loaded. |
| `cells.radius` | Square corner radius (px) | Arrondi des carrés (px) | number | integer | `2` | 0 to 50 | Visible when `cells.shape` = `square` |
| `cells.partial` | Last cell | Dernier élément | dropdown | enumeration | `round` | `round` Rounded to the nearest cell; `floor` Whole cells only; `partial` Partly filled (exact fraction) ★ | Rounded: shares are rounded without changing the total (largest remainder). Partly filled: 43.6% fills 43 cells and 60% of the 44th; a cell can be shared by two categories. |
| `cells.reveal` | Reveal | Apparition | dropdown | enumeration | `cascade` | `cascade` Cell by cell, in fill order; `fade` Fade; `none` None | Only when the data changes; never when animations are reduced (Style › Animations or the system). |

**Empty cells / Éléments vides**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `cells.emptyStyle` | Empty cells | Éléments vides | dropdown | enumeration | `auto` | `auto` Automatic (hidden in Units mode); `filled` Light tint; `outline` Outline only; `hidden` Hidden |  |
| `cells.emptyColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `cells.emptyOpacity` | Opacity (%) | Opacité (%) | number | integer | `100` | 5 to 100 |  |

### Headline value / Valeur en grand (`headline`, Format pane)

The card header toggle is `headline.show`.

**Headline value / Valeur en grand**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `headline.show` | Show | Afficher | toggle | bool | `true` | true / false | Percentage mode: the percentage of each waffle in large type. Parts mode: the share of the first category (Single waffle). Units mode: the value at the end of each row. |
| `headline.content` | Content | Contenu | dropdown | enumeration | `pct` | `pct` Percentage; `value` Value; `pctValue` Percentage and value ★; `valueTotal` Value of total ★ | Percentage mode. « Percentage and value » ★ and « Value of total » ★ (e.g. 43% · 129 or 129 / 300) work with a watermark until a key is entered. |
| `headline.position` | Position | Position | dropdown | enumeration | `auto` | `auto` Automatic (left when there is room); `left` Left of the waffle; `top` Above; `bottom` Below |  |
| `headline.fontSize` | Value size | Taille de la valeur | number | formatting | `26` | 8 to 96 | Shrinks automatically when room is short. |
| `headline.color` | Color (empty = category color) | Couleur (vide = couleur de la catégorie) | color | fill | (empty) | hex color |  |
| `headline.parts` | Single waffle (Parts mode) | Gaufre unique (mode Parts) | dropdown | enumeration | `first` | `first` Percentage of the first category; `none` No headline value | Parts mode (every category in one waffle): the share of the first category (sort order) in large type, with its name, like a percentage waffle. |
| `headline.showName` | Category name | Nom de la catégorie | toggle | bool | `true` | true / false |  |
| `headline.nameSize` | Name size | Taille du nom | number | formatting | `11` | 6 to 30 |  |

**Numbers / Nombres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `headline.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `headline.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `headline.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `headline.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |
| `headline.pctDecimals` | Percentage decimals (-1 = auto) | Décimales des pourcentages (-1 = auto) | number | integer | `-1` | -1 to 3 |  |

### Category labels / Étiquettes des catégories (`categoryLabels`, Format pane)

The card header toggle is `categoryLabels.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `categoryLabels.show` | Show | Afficher | toggle | bool | `true` | true / false | Units mode: the name of each row, on the left. Hidden: rows take the whole width (the legend or the tooltip names the categories). |
| `categoryLabels.fontSize` | Size | Taille | number | formatting | `11` | 6 to 30 |  |
| `categoryLabels.bold` | Bold | Gras | toggle | bool | `false` | true / false |  |
| `categoryLabels.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `categoryLabels.colorByCategory` | In the category color | À la couleur de la catégorie | toggle | bool | `false` | true / false |  |
| `categoryLabels.maxWidth` | Maximum width (% of the visual) | Largeur maximale (% du visuel) | number | integer | `30` | 10 to 60 | Longer names are shortened (…); the full name stays in the tooltip. |

### Legend / Légende (`legend`, Format pane)

The card header toggle is `legend.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `legend.show` | Show | Afficher | toggle | bool | `true` | true / false | Shown when the chart has several series. |
| `legend.content` | Content | Contenu | dropdown | enumeration | `namePct` | `name` Name; `namePct` Name and percentage; `nameValue` Name and value; `namePctValue` Name, percentage and value | Percentage and value of the waffle (single waffle); with several waffles, the name only. |
| `legend.position` | Position | Position | dropdown | enumeration | `right` | `top` Top; `bottom` Bottom; `right` Right; `left` Left |  |
| `legend.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Start; `center` Center; `right` End | Visible when `legend.position` = `top` or `bottom` |
| `legend.showTitle` | Legend title | Titre de la légende | toggle | bool | `false` | true / false |  |
| `legend.titleText` | Title text | Texte du titre | text | text | (empty) |  | Visible when `legend.showTitle` = `true` |
| `legend.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `legend.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `legend.interactive` | Click = select the series | Clic = sélectionner la série | toggle | bool | `true` | true / false |  |

### Target ★ / Objectif ★ (`target`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `target.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `target.show` | Show | Afficher | toggle | bool | `true` | true / false | With the Target field: the target cell is circled and the cells still missing to reach it are dashed. |
| `target.style` | Marker | Repère | dropdown | enumeration | `ring` | `ring` Circled cell and missing cells dashed; `marker` Circled cell only |  |
| `target.color` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `target.label` | « Target: … » under the headline value | « Objectif : … » sous la valeur en grand | toggle | bool | `true` | true / false |  |

### Playback ★ / Lecture ★ (`play`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.start` | Frame shown on opening | Image affichée à l'ouverture | dropdown | enumeration | `last` | `last` The last one (most recent); `first` The first one |  |
| `play.speed` | Duration of a frame (ms) | Durée d'une image (ms) | number | integer | `1000` | 100 to 10000 | At speed ×1; the speed button of the play bar multiplies it (×0.5 to ×4) for the session. |
| `play.loop` | Loop | Lecture en boucle | toggle | bool | `false` | true / false |  |
| `play.autoPlay` | Play automatically on opening | Lecture automatique à l'ouverture | toggle | bool | `false` | true / false | Once, from the first frame. Not when animations are reduced (Style › Animations or the system) nor on a dashboard tile. |
| `play.transition` | Animated transitions | Transitions animées | toggle | bool | `true` | true / false | Values, positions and colors move smoothly from one frame to the next. |
| `play.controls` | Play bar | Barre de lecture | toggle | bool | `true` | true / false |  |
| `play.position` | Bar position | Position de la barre | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top | Visible when `play.controls` = `true` |
| `play.ticks` | Tick marks | Graduations | dropdown | enumeration | `auto` | `auto` Automatic; `all` Every frame; `none` None | Visible when `play.controls` = `true` |
| `play.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.stepButtons` | Start and end buttons | Boutons début et fin | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.speedButton` | Speed button | Bouton de vitesse | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.showLabel` | Current value in large type | Valeur en cours en grand | toggle | bool | `false` | true / false |  |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `44` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `bottomRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |

### Interactions (`interaction`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `interaction.hover` | Highlight on hover | Mettre en avant au survol | toggle | bool | `true` | true / false |  |
| `interaction.dim` | Dimmed items opacity (%) | Opacité des éléments estompés (%) | number | integer | `25` | 5 to 80 |  |

### Tooltips / Infobulles (`tooltip`, Format pane)

The card header toggle is `tooltip.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `tooltip.show` | Show | Afficher | toggle | bool | `true` | true / false | Tooltip on hover (with the fields of the "Tooltips" well and report page tooltips). |

### Title / Titre (`title`, Format pane)

The card header toggle is `title.show`.

**Title / Titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `title.text` | Text | Texte | text | text | (empty) |  | Leave empty for an automatic title built from the fields. |
| `title.fontSize` | Size | Taille | number | formatting | `14` | 7 to 40 |  |
| `title.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `title.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `title.underline` | Underline | Souligné | toggle | bool | `false` | true / false |  |
| `title.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `title.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color |  |
| `title.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |
| `title.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false |  |

**Subtitle / Sous-titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.subtitle` | Subtitle | Sous-titre | text | text | (empty) |  | Several lines allowed: type \n to go to the next line. |
| `title.subFontSize` | Size | Taille | number | formatting | `11` | 7 to 30 | Visible when `title.subtitle` =  |
| `title.subColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `title.subtitle` =  |
| `title.subItalic` | Italic | Italique | toggle | bool | `false` | true / false | Visible when `title.subtitle` =  |

**Divider / Séparateur**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false |  |
| `title.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `title.divider` = `true` |
| `title.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `title.divider` = `true` |
| `title.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `title.divider` = `true` |

**Spacing / Espacement**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.spaceBelow` | Space below the title (px) | Espace sous le titre (px) | number | integer | `4` | 0 to 40 |  |

### Source note / Note de source (`source`, Format pane)

The card header toggle is `source.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `source.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `source.text` | Text | Texte | text | text | (empty) |  |  |
| `source.fontSize` | Size | Taille | number | formatting | `9` | 6 to 20 |  |
| `source.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `source.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `source.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |

### Frame / Cadre (`container`, Format pane)

**Background / Arrière-plan**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.bgShow` | Background | Arrière-plan | toggle | bool | `false` | true / false |  |
| `container.bgColor` | Color | Couleur | color | fill | `#FFFFFF` | hex color | Visible when `container.bgShow` = `true` |
| `container.bgColor2` | Gradient end (optional) | Fin du dégradé (optionnel) | color | fill | (empty) | hex color | Visible when `container.bgShow` = `true` |
| `container.bgTransparency` | Transparency (%) | Transparence (%) | slider | numeric | `0` | 0 to 100 | Visible when `container.bgShow` = `true` |

**Border / Bordure**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `false` | true / false |  |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 |  |

**Shadow / Ombre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false |  |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |

**Spacing / Marges**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `8` | 0 to 40 |  |

### Language and numbers / Langue et nombres (`texts`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English |  |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) |  | Thousands and decimal separators. Empty: same as Power BI. |