# 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. |
