# Treemap 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 Treemap 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/treemap (French: https://plumevisuals.com/fr/visuels/treemap)
- Summary: The treemap Power BI was missing: nested groups with their header and total, click to zoom, and labels you can actually read.
- Power BI visual GUID (`visualType`): `plumeTreemap7562F40DD0CD4981BD6A21FCA2485191`
- 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

Treemap Plume (identifier `treemap`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; AppSource submission in preparation) that draws **treemaps**: rectangles split into tiles whose area is proportional to a value, nested by category. It covers everything the built-in treemap does (Category, Details, Values, Tooltips, squarified / binary / alternating tiling, gaps between nodes and groups, category and data labels, colors per category, conditional colors, cross-filtering and highlighting) and fixes its known gaps.

**New in version 1.1.0.0 (30/10/2026):** Free native-parity additions: **category labels** separate from data labels (show, bold, lines, color) and an automatic gradient when the Color field is filled.

- **Nested hierarchy**: 1 to 6 fields in Category (groups) plus Details, all levels shown at once; each group has a **header** (name and total) and optional borders. `layout.depth` = 1 shows one level at a time like the built-in treemap (double-click a tile to drill down).
- **Tiling**: squarified (default, near-square tiles), binary, alternating (columns at the first level, rows at the next), rows, columns; ★ Voronoi (polygonal cells) inside a circle or any of 153 shapes (map of France, heart, hexagon…), areas exact within 1%.
- **Zoom into a group**: click a header (Ctrl + click selects the whole group instead), double-click a tile, breadcrumb and ↑ button to go back, animated transitions; keyboard Alt + Down / Backspace. Zoom is session state, never saved.
- **Readable labels**: name, value, ★ share of the group or of the total, change ▲▼ (with Comparison ★); text grows with the tile (auto size between a minimum and a maximum), wraps on spaces and after hyphens, and a label that does not fit is hidden rather than cut to "C…".
- **Sort**: value descending (default) or ascending, name A → Z / Z → A (natural order), data order (the model's sort-by-column).
- **Play axis ★** (premium since the free / premium rebalancing of 2026-10-22): a year or a date in `play` animates the treemap with the shared Plume player (play / pause, slider, speed, loop, large current value); with `layout.stable` (on) tiles keep their place from frame to frame (rows of the squarified layout computed on the total of all frames).
- Above 4,000 visible tiles, the smallest are merged into their group's color (message); 100,000 rows render in about 2 seconds.

## 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 (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium**.
- Free in Treemap Plume: the whole hierarchy, headers, borders, every tiling except Voronoi, zoom, breadcrumb, sort, labels (name, value), the colorings `category`, `single`, `gradient`, the Color field, cross-filtering and highlighting, tooltips (with the shares of the group and of the total).
- Premium features of Treemap Plume: the `play` role (Play axis ★: watermark as soon as the field holds data, even one frame); `dataColors.mode` = `leaf`, `diverging`, `rules`, `change` (stock map) or `highlight`; `labels.percent` = `parent` or `total` (labels shown); `layout.algorithm` = `voronoi` (any `layout.shape`); `layout.topN`; the `comparison` role (Comparison ★); the `image` role (Image ★); 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 `treemap` 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). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack.

## Expected data shape

One row per combination of categories (Power BI groups the rows), with a measure for the size.

| Region (`category`) | Category (`category`) | Revenue (`values`) | Margin rate (`colorBy`) | Revenue 2024 (`comparison`) |
|---|---|---|---|---|
| London | Furniture | 41,200 | 34% | 38,100 |
| London | Lighting | 18,900 | 52% | 20,400 |

- **Category (groups)** (`category`, « Catégorie (groupes) », 1 to 6 columns, required unless Details is filled): the levels, from the largest group to the smallest, in the order of the well. Blank values form a "(Blank)" tile.
- **Details** (`details`, « Détails », 1 column): one more level, like the built-in treemap.
- **Values** (`values`, « Valeurs », 1 measure): the area. Without it, rows are counted. Negative or blank values count as 0 (message in edit mode).
- **Color (measure)** (`colorBy`, « Couleur (mesure) »): read by the `gradient`, `diverging` ★ and `rules` ★ colorings; for a group shown as one tile, the size-weighted average.
- **Comparison ★** (`comparison`, « Comparaison ★ »): previous value; change = (value − comparison) / |comparison|, shown as "▲ +12%" in labels and tooltips, colors with `change`.
- **Image ★** (`image`, « Image ★ », text measure or column): `data:image/...;base64,...`, raw base64 or SVG text; web addresses are never loaded.
- **Small multiples ★** (`multiples`, « Petits multiples ★ », 1 column): one treemap per value; `smallMultiples.sameScale` makes each panel's area proportional to its total.
- **Play axis ★** (`play`, « Axe de lecture ★ », 1 column): numbers and dates ascending, texts in data order; integer years without a format are written "2024".
- **Tooltips** (`tooltips`) and **Dynamic format** (`format`, see below).
- Volume of data: windows of 30,000 rows, more fetched with `fetchMoreData` up to 100,000 rows.

## DAX recipes

```dax
Revenue = SUM ( Sales[Amount] )
Margin rate = DIVIDE ( SUM ( Sales[Margin] ), [Revenue] )          // Color (measure), gradient (free)
Revenue 2024 = CALCULATE ( [Revenue], Sales[Year] = "2024" )        // Comparison ★, stock map
Variance to target % = DIVIDE ( [Revenue] - [Target], [Target] )    // Color (measure), diverging ★ around 0
// Image ★ longer than 32,766 characters: join chunks stored one per row
Logo = CONCATENATEX ( Images, Images[Chunk], "", Images[Chunk index], ASC )
```

## Interactions with the report

- Click a tile: cross-filter on its whole path (and its small multiple, not the play-axis value); Ctrl for several; click the hatched "Others" tile = all merged categories. Ctrl + click a header selects the whole group. Click an empty area clears.
- Cross-highlighting from other visuals: the highlighted part of each tile is drawn at full color from the bottom, the rest faded.
- Hover: Power BI tooltip (full path, value, share of the group and of the total, Color, Comparison and change, Tooltips measures); report page tooltips are supported. Hovering a legend category dims the other groups.
- Context menu everywhere (tile, header, empty area, landing page).
- Keyboard: Tab to the treemap, arrows from tile to tile, Enter selects, Esc clears, Alt + Down zooms into the focused tile's group, Backspace or Alt + Up zooms out; the play bar has its own keys (Space, arrows, Home, End). High contrast, ARIA labels, French and English.

## Dynamic formats

- **fx button** (Power BI conditional formatting) on colors and texts of the Format pane, and on each category color (`dataColors`, one color per category).
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `title.text`, `dataColors.mode`, `layout.depth`) drive any setting and win over the fixed value. Driving a ★ setting by DAX still shows the watermark without a key.

```dax
// renamed title.text
Treemap title = "Revenue by region · " & FORMAT ( CALCULATE ( [Revenue], ALLSELECTED () ), "€#,0" )
```

## Format pane: option IDs

- Card order: `license`, `style`, `dataColors`, `layout`, `groups`, `labels`, `zoom`, `legend`, `images`, `smallMultiples`, `play`, `tooltip`, `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `layout`, `groups`, `labels`, `categoryLabels`, `zoom`, `legend`, `images`, `smallMultiples`, `play`, `tooltip`, `interaction`, `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` | `leaf` ★ | `single` | `gradient` | `diverging` ★ | `rules` ★ | `change` ★ | `highlight` ★), `single`, `fill`, `shade` (on), `gradMin`, `gradMax`, `divMid` (`0`), `rule1`, `rule2`, `ruleLow` (#C0392B), `ruleMid` (#B8BCC6), `ruleHigh` (#2E7D4F), `changeRange` (0.1–1000, 3), `lowerBetter`, `highlightNames`, `highlightColor`, `othersColor`.
- `layout`: `algorithm` (`squarify` | `binary` | `sliceDice` | `slice` | `dice` | `voronoi` ★), `shape` (153 shape IDs, default `circle`), `sort` (`valueDesc` | `valueAsc` | `nameAsc` | `nameDesc` | `data`), `stable` (on), `depth` (0–7, 0), `nodeGap` (0–12, 1), `groupGap` (0–24, 3), `tileRadius` (0–16, 0), `topN` ★, `topNCount` (1–500, 10), `othersLabel`.
- `groups`: `headers` (on), `headerSize` (7–24, 10), `headerBold` (on), `headerValue` (on), `headerFill` (`auto` | `neutral` | `none`), `headerColor`, `borders`, `borderWidth` (0.5–6, 1), `borderColor`, `tileBorder`.
- `labels`: `show` (on), `categoryLabels.show` (on), `showValue` (on), `percent` (`none` | `parent` ★ | `total` ★), `change` (on), `position` (`topLeft` | `center`), `autoSize` (on), `fontSize` (6–40, 10), `maxSize` (8–80, 26), `categoryLabels.wrap` (1–6, 2), `minTile` (0–200, 24), `color`, `categoryLabels.bold` (on), `units` (`auto` | `none` | `k` | `m` | `b`), `decimals` (-1–6, -1), `prefix`, `suffix`.
- `zoom`: `headerClick` (on), `doubleClick` (on), `breadcrumb` (on), `rootLabel`.
- `legend`: `show` (on), `position` (`top` | `bottom` | `right` | `left`), `align` (`left` | `center` | `right`), `showTitle`, `titleText`, `fontSize` (6–24, 9), `color`, `interactive` (on).
- `images`: `fit` (`contain` | `cover`), `size` (10–100, 55), `opacity` (5–100, 100), `round`.
- `smallMultiples`: `columns` (0–12, 0), `sameScale` (on), `titleSize` (7–24, 11), `gap` (0–40, 12).
- `play` (card « Lecture ★ » / "Playback ★", shown with the Play axis ★ field): `start` (`last` | `first`), `speed` (100–10000, 1000), `loop`, `autoPlay`, `transition` (on), `controls` (on), `position` (`bottom` | `top`), `ticks` (`auto` | `all` | `none`), `tickLabels` (on), `stepButtons` (on), `speedButton` (on), `showLabel` (on), `labelSize` (12–160, 44), `labelPosition` (`bottomRight` | `topRight` | `topLeft` | `bottomLeft` | `center`).
- `tooltip`: `show` (on), `path` (on), `shareParent` (on), `shareTotal` (on).
- `interaction`: `hover` (on), `dim` (5–80, 25).

## 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": "plumeTreemap7562F40DD0CD4981BD6A21FCA2485191",
  "query": {
    "queryState": {
      "category": { "projections": [
        { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Region" } }, "queryRef": "Sales.Region", "nativeQueryRef": "Region" },
        { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Category" } }, "queryRef": "Sales.Category", "nativeQueryRef": "Category" } ] },
      "values": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] }
    }
  },
  "objects": {
    "labels":     [ { "properties": { "position": { "expr": { "Literal": { "Value": "'center'" } } } } } ],
    "dataColors": [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'category'" } } } } } ],
    "layout":     [ { "properties": { "depth": { "expr": { "Literal": { "Value": "0D" } } } } } ]
  }
}
```

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`. The category colors come from the style's categorical palette (or Series 1 to 8 of the custom colors); gradients from its sequential and diverging palettes; the style's `fill` token (gradient, glass, hatch…) is applied to the tiles.
- `style.themeJson` (Theme JSON ★): a JSON theme as plain text (format v2 with optional `extends` and groups `colors`, `palettes`, `typography`, `shape`, `table`, `marks`, `effects`). Full reference: https://plumevisuals.com/ai/tutorials/en/themes-json.md.

## Common pitfalls

- The landing page stays: no field in Category (groups) or Details.
- Levels inverted: the fields are in the wrong order in Category (groups).
- All tiles the same size: Values is empty (rows counted).
- "… negative value(s) ignored": negative values have no area; use the `diverging` ★ coloring with a variance measure, or Waterfall Plume.
- A tile has no label: it is too small (`labels.minTile`, auto size); zoom into its group.
- Voronoi falls back to squarified: more than 1,200 cells shown; use Top N ★ or fewer levels (`layout.depth`).
- Watermark visible: Voronoi, the `change` or `highlight` coloring, Top N, a Comparison, Image or Small multiples field, a ★ style or a theme JSON, without a valid key.
- The visual makes no network request: data, images and license key stay in the report.

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

Power BI's own drill-down buttons (the visual drills inside itself: zoom, breadcrumb, `layout.depth`), circle packing, a sparkline inside each tile, annotations, drag-and-drop to reorder tiles, images loaded from a URL, exporting the treemap as an image, negative areas.

## 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 (groups) | Catégorie (groupes) | column | 6 | 1 to 6 fields, from the largest groups to the smallest (e.g. Region, Country, City). |
| `details` | Details | Détails | column | 1 | Splits each tile into smaller tiles of the same color (like the Power BI treemap). |
| `values` | Values | Valeurs | measure | 1 | Measure that sizes the tiles (without it, rows are counted). Negative values are ignored. |
| `colorBy` | Color (measure) | Couleur (mesure) | measure | 1 | Measure that colors the tiles (gradient, diverging ★ or thresholds ★: Data colors card): margin rate, satisfaction… |
| `comparison` | Comparison ★ | Comparaison ★ | measure | 1 | Previous value (e.g. last year, yesterday's close): change ▲▼ in labels and tooltips, stock map coloring. |
| `image` | Image ★ | Image ★ | measure | 1 | Text measure or column with a base64 image (data:image/png;base64,…): logo or photo in each tile. Web addresses are never loaded. |
| `multiples` | Small multiples ★ | Petits multiples ★ | column | 1 | One treemap per value of this field, side by side. |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | Premium: a date, a year or an ordered category: the treemap moves from one value to the next (play button), stable layout. |
| `tooltips` | Tooltips | Infobulles | measure | several |  |
| `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` + `details` + `multiples` + `play` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `values`, `colorBy`, `comparison`, `image`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (166)

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)

**Tiling / Algorithme**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.algorithm` | Tiling method | Méthode de pavage | dropdown | enumeration | `squarify` | `squarify` Squarified; `binary` Binary; `sliceDice` Alternating (columns, rows); `slice` Rows; `dice` Columns; `voronoi` Voronoi (cells) ★ | Squarified: near-square tiles (most readable). Voronoi ★: polygonal cells inside a shape (circle, map of France…). |
| `layout.shape` | Voronoi shape | Forme du Voronoï | dropdown | enumeration | `circle` | `circle` Circle; `square` Square; `roundedSquare` Rounded square; `rectangle` Rectangle; `triangle` Triangle; `diamond` Diamond; `hexagon` Hexagon; `star` Star; `heart` Heart; `ellipse` Ellipse ★; `pentagon` Pentagon ★; `octagon` Octagon ★; `rightTriangle` Right triangle ★; `parallelogram` Parallelogram ★; `trapezoid` Trapezoid ★; `ring` Ring ★; `semicircle` Semicircle ★; `arch` Arch ★; `capsule` Pill ★; `star6` Six-pointed star ★; `seal` Seal ★; `cross` Cross ★; `arrow` Arrow; `arrowUp` Arrow up ★; `arrowDown` Arrow down ★; `arrowLeft` Arrow left ★; `doubleArrow` Double arrow ★; `chevron` Chevron ★; `check` Check mark ★; `close` Close (X) ★; `plus` Plus ★; `minus` Minus ★; `warning` Warning ★; `info` Information ★; `playButton` Play button ★; `bubble` Speech bubble; `thought` Thought bubble ★; `flag` Flag ★; `bookmark` Bookmark ★; `tag` Tag ★; `bolt` Lightning bolt ★; `shield` Shield ★; `award` Award ★; `puzzle` Puzzle piece ★; `gear` Gear ★; `lock` Lock ★; `key` Key ★; `bell` Bell ★; `eye` Eye ★; `cloud` Cloud; `drop` Drop; `sun` Sun ★; `moon` Moon ★; `snowflake` Snowflake ★; `leaf` Leaf ★; `pine` Pine tree ★; `tree` Tree ★; `flower` Flower ★; `mountain` Mountain ★; `wave` Wave ★; `flame` Flame ★; `umbrella` Umbrella ★; `apple` Apple ★; `fish` Fish ★; `paw` Paw print ★; `rain` Rain ★; `sprout` Sprout ★; `person` Person; `man` Man ★; `woman` Woman ★; `child` Child ★; `people` Group of people ★; `bust` User bust ★; `house` House; `building` Office building ★; `factory` Factory ★; `castle` Castle ★; `shop` Shop ★; `bank` Bank ★; `hospital` Hospital ★; `book` Book ★; `envelope` Envelope ★; `phone` Phone ★; `laptop` Laptop ★; `monitor` Monitor ★; `gift` Gift ★; `clock` Clock ★; `calendar` Calendar ★; `pencil` Pencil ★; `lightbulb` Light bulb ★; `cup` Trophy ★; `crown` Crown ★; `trashCan` Trash can ★; `barrel` Barrel; `bottle` Bottle; `wineGlass` Wine glass; `glass` Glass; `mug` Mug ★; `jar` Jar ★; `bucket` Bucket ★; `battery` Battery; `batteryVertical` Vertical battery; `thermometer` Thermometer; `testTube` Test tube ★; `tank` Tank ★; `funnel` Funnel ★; `hourglass` Hourglass ★; `bag` Bag ★; `piggyBank` Piggy bank ★; `flask` Flask ★; `beaker` Beaker ★; `can` Can ★; `coffeeCup` Coffee cup ★; `vase` Vase ★; `milkCarton` Milk carton ★; `france` Metropolitan France ★; `africa` Africa ★; `australia` Australia ★; `southAmerica` South America ★; `pin` Map pin ★; `globe` Globe ★; `foldedMap` Folded map ★; `compass` Compass ★; `city` City skyline ★; `target` Target ★; `barChart` Bar chart ★; `pieChart` Pie chart ★; `trendUp` Trend up ★; `coin` Coin ★; `banknote` Banknote ★; `wallet` Wallet ★; `creditCard` Credit card ★; `cart` Shopping cart ★; `briefcase` Briefcase ★; `percent` Percent ★; `podium` Podium ★; `megaphone` Megaphone ★; `gem` Gem ★; `medal` Medal ★; `clipboard` Clipboard ★; `handshake` Handshake ★; `car` Car ★; `truck` Truck ★; `bus` Bus ★; `bicycle` Bicycle ★; `plane` Plane ★; `boat` Sailboat ★; `train` Train ★; `rocket` Rocket ★; `helicopter` Helicopter ★; `ship` Cargo ship ★; `fuel` Fuel pump ★; `scooter` Scooter ★ | Visible when `layout.algorithm` = `voronoi`. Outline the cells share (shapes without ★: circle, square, hexagon, heart…). |
| `layout.sort` | Tile order | Ordre des tuiles | dropdown | enumeration | `valueDesc` | `valueDesc` Value, descending; `valueAsc` Value, ascending; `nameAsc` Name (A → Z); `nameDesc` Name (Z → A); `data` Data order (Power BI sort) | The first tile is at the top left. "Data order" follows the model's sort-by-column (months, priorities…). |
| `layout.stable` | Stable layout while playing | Disposition stable pendant la lecture | toggle | bool | `true` | true / false | Play axis: tiles grow, shrink and slide, never jumping from one place to another. |
| `layout.depth` | Levels shown at once (0 = all) | Niveaux affichés à la fois (0 = tous) | number | integer | `0` | 0 to 7 | 1 = like the Power BI treemap: one level, double-click to drill down. 0 = the whole nested hierarchy. |

**Spacing and corners / Espacements et angles**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.nodeGap` | Space between tiles (px) | Espace entre les tuiles (px) | number | integer | `1` | 0 to 12 |  |
| `layout.groupGap` | Space between groups (px) | Espace entre les groupes (px) | number | integer | `3` | 0 to 24 |  |
| `layout.tileRadius` | Tile corner radius | Arrondi des tuiles | number | integer | `0` | 0 to 16 |  |

**Top N and "Others" / Top N et « Autres »**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.topN` | Top N + "Others" ★ | Top N + « Autres » ★ | toggle | bool | `false` | true / false | In each group, the N largest tiles; the rest is merged into a hatched "Others" tile. |
| `layout.topNCount` | Tiles kept per group | Nombre de tuiles gardées par groupe | number | integer | `10` | 1 to 500 | Visible when `layout.topN` = `true` |
| `layout.othersLabel` | "Others" label | Libellé de « Autres » | text | text | (empty) |  | Visible when `layout.topN` = `true` |

### 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 (top level); `leaf` One color per tile (last level) ★; `single` Single color; `gradient` Gradient by a measure; `diverging` Diverging around a midpoint ★; `rules` Thresholds (3 colors) ★; `change` Stock map: change (Comparison field) ★; `highlight` Highlight ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.shade` | Shade tiles within a group | Nuancer les tuiles d'un groupe | toggle | bool | `true` | true / false | Smaller tiles of a group are slightly lighter, so neighboring tiles of the same color stand apart. |
| `dataColors.gradMin` | Start value (empty = minimum) | Valeur du début (vide = minimum) | text | text | (empty) |  |  |
| `dataColors.gradMax` | End value (empty = maximum) | Valeur de la fin (vide = maximum) | text | text | (empty) |  |  |
| `dataColors.divMid` | Midpoint value | Valeur du milieu | text | text | `0` |  |  |
| `dataColors.rule1` | Low threshold | Seuil bas | text | text | (empty) |  |  |
| `dataColors.rule2` | High threshold | Seuil haut | text | text | (empty) |  |  |
| `dataColors.ruleLow` | Below the low threshold | Sous le seuil bas | color | fill | `#C0392B` | hex color |  |
| `dataColors.ruleMid` | Between thresholds | Entre les seuils | color | fill | `#B8BCC6` | hex color |  |
| `dataColors.ruleHigh` | Above the high threshold | Au-dessus du seuil haut | color | fill | `#2E7D4F` | hex color |  |
| `dataColors.changeSource` | Change read from | Variation lue dans | dropdown | enumeration | `auto` | `auto` Automatic (Comparison field, else Color field); `comparison` Values compared with the Comparison field; `measure` Color field (change already computed) | Color field: a change measure (e.g. Change % = 0.034 or 3.4%) colors the tiles, whatever measure sizes them (market cap, sales…). |
| `dataColors.changeAuto` | Automatic change range | Plage de variation automatique | toggle | bool | `true` | true / false | The strongest color matches a round change (±1, 2, 3, 5, 10%…) reached by 90% of the tiles shown. Off: the value below. |
| `dataColors.changeRange` | Change for the strongest color (%) | Variation de la couleur la plus vive (%) | number | numeric | `3` | 0.1 to 1000 | Like stock market maps: at ±3% the tile takes the strongest favorable or unfavorable color; at 0%, gray. |
| `dataColors.lowerBetter` | A decrease is favorable | Une baisse est favorable | toggle | bool | `false` | true / false |  |
| `dataColors.highlightNames` | Highlighted categories | Catégories mises en avant | text | text | (empty) |  | Comma-separated names, at any level. Other tiles are grayed out. |
| `dataColors.highlightColor` | Highlight color (empty = accent) | Couleur mise en avant (vide = accent) | color | fill | (empty) | hex color |  |
| `dataColors.othersColor` | Other tiles color (empty = gray) | Couleur des autres tuiles (vide = gris) | color | fill | (empty) | hex color |  |

### Groups (headers and borders) / Groupes (en-têtes et bordures) (`groups`, Format pane)

**Headers / En-têtes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `groups.headers` | Group headers | En-têtes des groupes | toggle | bool | `true` | true / false |  |
| `groups.headerSize` | Text size | Taille du texte | number | formatting | `10` | 7 to 24 |  |
| `groups.headerBold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `groups.headerValue` | Group total | Total du groupe | toggle | bool | `true` | true / false |  |
| `groups.headerFill` | Header background | Fond de l'en-tête | dropdown | enumeration | `auto` | `auto` Group color; `neutral` Neutral; `none` None |  |
| `groups.headerColor` | Text color (empty = automatic) | Couleur du texte (vide = automatique) | color | fill | (empty) | hex color |  |

**Borders / Bordures**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `groups.borders` | Border around groups | Bordure autour des groupes | toggle | bool | `false` | true / false |  |
| `groups.borderWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 | Visible when `groups.borders` = `true` |
| `groups.borderColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `groups.borders` = `true` |
| `groups.tileBorder` | Gap color between tiles (empty = background) | Couleur des espaces entre tuiles (vide = fond) | color | fill | (empty) | hex color |  |

### Data labels / Étiquettes de données (`labels`, Format pane)

The card header toggle is `labels.show`.

**Content / Contenu**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.show` | Show | Afficher | toggle | bool | `true` | true / false | Values in the tiles. Names are set in « Category labels ». |
| `labels.showValue` | Value | Valeur | toggle | bool | `true` | true / false |  |
| `labels.percent` | Percentage | Pourcentage | dropdown | enumeration | `none` | `none` None; `parent` Share of the group ★; `total` Share of the total ★ |  |
| `labels.change` | Change ▲▼ (Comparison field) | Variation ▲▼ (champ Comparaison) | toggle | bool | `true` | true / false |  |
| `labels.position` | Position | Position | dropdown | enumeration | `topLeft` | `topLeft` Top left; `center` Center |  |

**Text / Texte**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.autoSize` | Auto size | Taille automatique | toggle | bool | `true` | true / false | Text grows with the tile (from the minimum to the maximum size) and never overflows. |
| `labels.fontSize` | Size (minimum) | Taille (minimale) | number | formatting | `10` | 6 to 40 |  |
| `labels.maxSize` | Maximum size | Taille maximale | number | formatting | `26` | 8 to 80 | Visible when `labels.autoSize` = `true` |
| `labels.minTile` | Hide in tiles narrower than (px) | Masquer dans les tuiles plus étroites que (px) | number | integer | `24` | 0 to 200 |  |
| `labels.color` | Color (empty = automatic) | Couleur (vide = automatique) | color | fill | (empty) | hex color | Automatic: white or dark depending on the tile color. |

**Numbers / Nombres**

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

### 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 |  |
| `categoryLabels.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `categoryLabels.wrap` | Lines for long names | Lignes pour les noms longs | number | integer | `2` | 1 to 6 |  |
| `categoryLabels.color` | Color (empty = same as data labels) | Couleur (vide = comme les étiquettes de données) | color | fill | (empty) | hex color |  |

### 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.position` | Position | Position | dropdown | enumeration | `top` | `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 |  |

### Zoom (`zoom`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `zoom.headerClick` | Click a header: zoom into the group | Clic sur un en-tête : zoomer dans le groupe | toggle | bool | `true` | true / false | Ctrl + click on the header: select the whole group (cross-filter). |
| `zoom.doubleClick` | Double-click a tile: drill down one level | Double-clic sur une tuile : descendre d'un niveau | toggle | bool | `true` | true / false |  |
| `zoom.breadcrumb` | Breadcrumb | Fil d'Ariane | toggle | bool | `true` | true / false |  |
| `zoom.rootLabel` | Top level label | Libellé du niveau supérieur | text | text | (empty) |  |  |

### Images ★ (`images`, 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 |
|---|---|---|---|---|---|---|---|
| `images.fit` | Fit | Ajustement | dropdown | enumeration | `contain` | `contain` Whole (logo); `cover` Fill the tile (photo) |  |
| `images.size` | Size (% of the tile) | Taille (% de la tuile) | number | integer | `55` | 10 to 100 | Visible when `images.fit` = `contain` |
| `images.opacity` | Opacity (%) | Opacité (%) | number | integer | `100` | 5 to 100 |  |
| `images.round` | Round image | Image ronde | toggle | bool | `false` | true / false | Visible when `images.fit` = `contain` |

### Small multiples ★ / Petits multiples ★ (`smallMultiples`, 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 |
|---|---|---|---|---|---|---|---|
| `smallMultiples.columns` | Columns (0 = automatic) | Colonnes (0 = automatique) | number | integer | `0` | 0 to 12 |  |
| `smallMultiples.sameScale` | Comparable areas across panels | Surfaces comparables entre panneaux | toggle | bool | `true` | true / false | Each panel's area is proportional to its total: a panel half the size weighs half as much. |
| `smallMultiples.titleSize` | Title size | Taille des titres | number | formatting | `11` | 7 to 24 |  |
| `smallMultiples.gap` | Space between panels (px) | Espace entre les panneaux (px) | number | integer | `12` | 0 to 40 |  |

### 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 | `true` | 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). |
| `tooltip.path` | Full path (every level) | Chemin complet (tous les niveaux) | toggle | bool | `true` | true / false |  |
| `tooltip.shareParent` | Share of the group | Part du groupe | toggle | bool | `true` | true / false |  |
| `tooltip.shareTotal` | Share of the total | Part du total | toggle | bool | `true` | true / false |  |

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