# Word Cloud 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 Word Cloud 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/word-cloud (French: https://plumevisuals.com/fr/visuels/word-cloud)
- Summary: A readable word cloud that is always the same: topics, customer reviews or open answers, in the shape and font of your choice.
- Power BI visual GUID (`visualType`): `plumeWordCloudEF71B057859746CE8A28DD8261953560`
- 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

Word Cloud Plume (identifier `word-cloud`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; not yet on AppSource) that draws **word clouds**. Power BI Desktop has no native word cloud; Microsoft's free Word Cloud visual has English stop words only, no shapes and no font choice.

**New in version 1.1.0.0 (30/10/2026):** Format pane reorganized (`compare` → `comparison`); free "Keep special characters (#, @, emojis)" and a maximum-size weight to keep sizes under filters (`wordFont.weightMax`).

- **Words or long texts**: one column (`words` role). Short labels are kept whole; long texts (comments, survey answers) are **split into words automatically** (`words.split` = `auto`: when at least 20% of the values have 4 words or more, or 3 words on average), or always (`on`) / never (`off`).
- **Text cleaning built in**: French and English stop words (`words.stopWords` = `auto` | `fr` | `en` | `none`), French elisions removed (l', d', qu'… → `words.elision`), numbers ignored, minimum length (3 letters), case and accents merged (the most frequent form is shown; with split text a lowercase form wins over a sentence-initial capital), optional plural merging ★ (`words.mergePlurals`), excluded words from the pane (`words.customStop`) or from a text measure (`exclude` role, e.g. `CONCATENATEX`).
- **Size** = the `weight` measure, otherwise the number of occurrences (`words.countMode` = `occurrences` | `rows` ★: once per row). Empty, zero or negative sizes remove the word. Top N (`words.maxWords`, 150) and minimum weight.
- **Layout**: words placed largest first along an Archimedean or rectangular spiral from the center of the shape, collision test on a bitmap of the shape (like d3-cloud, written for Plume), adjustable spacing, **deterministic** (same data → same cloud; `layout.seed` gives another arrangement). A word that does not fit is retried in the other orientation, then smaller down to the minimum size; words that still do not fit are **counted** ("n word(s) not placed" note in edit mode, with the list in its tooltip), never dropped silently. 500 words are laid out in under a second in the test harness.
- **Shapes**: an oval (default) and a rectangle that fill the visual, plus the 153 shapes of the Plume shape library (22 free: circle, square, rounded square, rectangle, triangle, diamond, hexagon, star, heart, cloud, drop, bubble, arrow, person, house, barrel, bottle, glass, wine glass, thermometer, battery, vertical battery), a custom SVG ★ pasted in the pane or returned by the `shapeSvg` measure (sanitized: no script, no image, no web link; only its geometry is used); keep proportions or stretch; optional silhouette ★.
- **Orientation**: all horizontal, horizontal and vertical (share of rotated words, reading direction), all vertical, diagonals ±45°, N even steps from one angle to another, free angles between two limits. A word always keeps the same orientation.
- **Fonts**: the style font or one of 55 fonts installed with Windows or Microsoft Office (no web font), with fallback stacks; weight (regular, semibold, bold, bold for the largest words), italic; minimum / maximum size; size scale linear, square root (default), logarithmic ★ or by rank ★; "Fill the shape" adapts the largest size.
- **Colors**: style palette (in size order or fixed per word), single color, ★ gradient by size, one color per word (categories), colors given as text by the `colorBy` field; ★ gradient by a numeric `colorBy` measure (the weighted average of the rows using the word, e.g. review sentiment; sequential or diverging around 0); ★ change versus the `compare` measure.
- ★ **Phrases**: two-word, words + two-word, or three-word phrases (`words.ngrams`); a stop word never starts or ends a phrase and phrases never cross punctuation.
- ★ **Comparison**: with a `compare` measure (same measure for an earlier period), words get ▲ (rising), ▼ (falling), ✦ (new) written small after the word, favorable / unfavorable / gray colors, "a decrease is favorable", negligible change threshold, a clickable legend and the change in % in the tooltip.
- ★ **Repeated words** (`layout.repeat`): smaller copies fill the room left in the shape (texture), decorative only.
- ★ **Play axis** (`play` role, premium since the rebalancing of 22/10/2026): one cloud per value (month, year) with the shared Plume play bar; common words keep a reference position and glide to their new place, the others fade in or out.

## Free vs premium (★)

- Every feature works without a key and nothing is ever blocked. Free features never show a watermark, and a freshly inserted visual uses only free settings.
- 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 Word Cloud Plume: splitting, stop words, elisions, case, exclusions, top N; the oval, the rectangle and the 22 free shapes; every orientation; every font; sizes (linear or square-root scale), spacing, spiral, layout variant, intro animation; palette, single color, per-word colors, text colors from `colorBy`; selection, tooltips, keyboard.
- Premium features of Word Cloud Plume: `words.ngrams` other than `1` (when the text is split); `dataColors.mode` = `field` with a numeric Color field (also chosen automatically when the mode is left on `palette`); the `compare` role (`dataColors.mode` = `change`); `shape.shape` other than `oval`, `rect` and the 22 free shapes; `shape.shape` = `custom` with an SVG, or the `shapeSvg` role; `layout.repeat`; since the rebalancing of 22/10/2026: the `play` role (as soon as it holds data), `dataColors.mode` = `weight`, `wordFont.sizeScale` = `log` or `rank`, `words.mergePlurals`, `words.countMode` = `rows` (when the text is split), `shape.silhouette`.
- 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 `word-cloud` 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

Either one row per word with a measure, or one row per text.

| Words or text (`words`) | Size (`weight`) | Color (`colorBy`) | Comparison (`compare`) |
|---|---|---|---|
| delivery | 980 | | 784 |
| customer service | 790 | | 963 |
| "Fast delivery, careful packaging" | 1 | 0.82 | |

- **Words or text** (`words`, « Mots ou texte », one column, required): words, labels or long texts. Numbers and dates are written with the column format.
- **Size** (`weight`, « Taille », one measure): the size; with split text, each word receives the row value for each occurrence. Power BI groups identical texts into one row: use a count measure (`COUNTROWS`) so that identical comments count.
- **Color** (`colorBy`, « Couleur », one measure): a color as text (`#RRGGBB`, `red`) applied as is, or a number for a gradient ★.
- **Comparison ★** (`compare`, « Comparaison »), **Excluded words** (`exclude`, « Mots exclus », text measure), **Shape (SVG) ★** (`shapeSvg`, « Forme (SVG) »), **Play axis ★** (`play`, « Axe de lecture ★ », one column, premium), **Tooltips** (`tooltips`), **Dynamic format** (`format`).
- Volume of data: windows of 30,000 rows, more fetched with `fetchMoreData` up to 100,000 rows; 100,004 comments are split and drawn in a few seconds (2 to 4 s measured in the test harness).

## DAX recipes

```dax
// Size: count the reviews behind each text (identical texts are grouped by Power BI)
Number of reviews = COUNTROWS ( Reviews )
// Color ★: average sentiment (−1 to 1) of the reviews that use the word
Average sentiment = AVERAGE ( Reviews[Sentiment] )
// Comparison ★: the same measure one year earlier
Mentions last year = CALCULATE ( [Number of mentions], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
// Excluded words: from a table
Excluded word list = CONCATENATEX ( 'Excluded words', 'Excluded words'[Word], ";" )
```

## Interactions with the report

- Click a word: cross-filter on every row that contains it (up to 5,000 rows per word); Ctrl for several; click the background to clear; a click on a legend group of the comparison selects its words. Context menu everywhere (word, background, landing page).
- Hover: the hovered word stands out (`interaction.hover`); Power BI tooltip with the word, size, occurrences, comparison and change, color value, Tooltips measures; report-page tooltips are supported. No cross-highlighting from other visuals (the visual is filtered instead).
- Keyboard: Tab to the cloud, arrows from the largest word to the smallest, Enter selects, Esc clears; the cloud is labeled with its five largest words for screen readers. High contrast, French and English.

## Dynamic formats

- **fx button** (Power BI conditional formatting) on colors and texts of the Format pane (e.g. `title.text`, `shape.svg`).
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `wordFont.maxSize`, `layout.orientation`, `shape.shape`) 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`, `words`, `wordFont`, `shape`, `layout`, `comparison` (with the Comparison field), `legend` (with a gradient or the comparison), `play` (« Lecture ★ », with the Play axis field), `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `layout`, `dataColors`, `words`, `wordFont`, `shape`, `legend`, `comparison`, `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` (`palette` | `single` | `weight` ★ | `field` ★ | `change` ★), `single`, `gradient` (`sequential` | `diverging`), `byRank` (true), `fill` per word (category selector).
- `words`: `split` (`auto` | `on` | `off`), `ngrams` (`1` | `2` ★ | `12` ★ | `3` ★), `countMode` (`occurrences` | `rows` ★), `minLength` (1–20, 3), `removeNumbers` (true), `elision` (true), `mergePlurals` ★ (false), `textCase` (`auto` | `lower` | `upper` | `title`), `stopWords` (`auto` | `fr` | `en` | `none`), `customStop` (text), `maxWords` (1–1000, 150), `minWeight` (0).
- `wordFont`: `font` (`auto` or a font name such as `Segoe UI`, `Calibri`, `Georgia`, `Bahnschrift SemiCondensed`, `Segoe Print`, `Impact`), `fontWeight` (`normal` | `semibold` | `bold` | `bySize`), `italic`, `minSize` (6–80, 11), `maxSize` (8–300, 64), `sizeScale` (`linear` | `sqrt` | `log` ★ | `rank` ★).
- `shape`: `shape` (`oval` | `rect` | `custom` ★ | a library shape ID such as `heart`, `cloud`, `star`, `france` ★, `tree` ★), `svg` (text), `fit` (`contain` | `stretch`), `silhouette` ★, `silhouetteColor`, `silhouetteOpacity` (5–100, 40), `margin` (0–80, 4).
- `layout`: `orientation` (`horizontal` | `hv` | `vertical` | `diagonal` | `range` | `random`), `rotatedShare` (0–100, 25), `verticalDir` (`up` | `down`), `angleFrom` (−90–90, −60), `angleTo` (60), `steps` (2–19, 5), `spacing` (0–30 px, 2), `fit` (`auto` | `shrink` | `none`), `spiral` (`archimedean` | `rectangular`), `seed` (1–999, 1), `repeat` ★, `repeatOpacity` (10–100, 55), `repeatMax` (50–3000, 900), `intro` (`grow` | `fade` | `none`).
- `comparison`: `arrows` (true), `lowerIsBetter`, `neutral` (0–100 %, 5), `risingColor`, `fallingColor`, `newWords` (true).
- `legend`: `show`, `position` (`bottom`), `align` (`center`), `showTitle`, `titleText`, `fontSize` (9), `color`, `interactive`.
- `play`: `start` (`last` | `first`), `speed` (100–10000 ms, 1000), `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel`, `labelSize` (44), `labelPosition`.
- `interaction`: `hover`, `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": "plumeWordCloudEF71B057859746CE8A28DD8261953560",
  "query": {
    "queryState": {
      "words":  { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Reviews" } }, "Property": "Comment" } }, "queryRef": "Reviews.Comment", "nativeQueryRef": "Comment" } ] },
      "weight": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Reviews" } }, "Property": "Number of reviews" } }, "queryRef": "Reviews.Number of reviews", "nativeQueryRef": "Number of reviews" } ] }
    }
  },
  "objects": {
    "shape":    [ { "properties": { "shape": { "expr": { "Literal": { "Value": "'heart'" } } }, "silhouette": { "expr": { "Literal": { "Value": "true" } } } } } ],
    "layout":   [ { "properties": { "orientation": { "expr": { "Literal": { "Value": "'horizontal'" } } }, "spacing": { "expr": { "Literal": { "Value": "1D" } } } } } ],
    "wordFont": [ { "properties": { "font": { "expr": { "Literal": { "Value": "'Georgia'" } } } } } ]
  }
}
```

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 style gives the palette and the font ("Style font"); `minimal`, `unknownPleasures`, `terminal` and `blueprint` lay words out horizontally when the orientation is left by default.
- `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

- Every word has the same size: no Size measure and each word appears once.
- A whole comment shows as one word: texts are short; set `words.split` = `on`.
- Identical comments count once: Power BI groups identical values; put `COUNTROWS` in Size.
- "n word(s) not placed": the shape is too small; enlarge the visual, lower `wordFont.minSize`, `layout.spacing` or `words.maxWords`, or use a wider shape / `shape.fit` = `stretch`.
- Words in an unexpected font on a Mac or in a browser: the chosen Windows or Office font is missing there; the fallback stack is used.
- Pale words with a diverging gradient: tints too light are darkened automatically; choose `sequential` for stronger colors.
- "SVG shape: …" message: the pasted SVG is unreadable or has no filled shape; the oval is used meanwhile.
- Watermark visible: phrases, a ★ shape or custom SVG, a numeric Color field, the Comparison field, repeated words, a ★ style or a theme JSON, without a valid key.
- The visual makes no network request: data, SVG and license key stay in the report.

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

Images loaded from a web address as a shape (only pasted or measure SVG), web fonts, automatic sentiment analysis or language detection (sentiment comes from a measure), lemmatization beyond simple plurals, lasso selection, cross-highlighting (the cloud is filtered instead), editing words by hand in the visual, exporting the cloud 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 |
|---|---|---|---|---|---|
| `words` | Words or text | Mots ou texte | column | 1 | A column of words or labels, or long texts (comments, answers) that the visual splits into words |
| `weight` | Size | Taille | measure | 1 | A measure that sizes the words; without it, the number of occurrences |
| `colorBy` | Color | Couleur | measure | 1 | A color (#RRGGBB, red…) per word, or a number for a gradient ★ |
| `compare` | Comparison ★ | Comparaison ★ | measure | 1 | The same measure for an earlier period: words on the rise or falling, new words ★ |
| `exclude` | Excluded words | Mots exclus | measure | 1 | A text measure listing words to remove, separated by ; , or new lines (e.g. CONCATENATEX) |
| `shapeSvg` | Shape (SVG) ★ | Forme (SVG) ★ | measure | 1 | A measure that returns an SVG: the words fill this shape (cleaned, no web link) |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | A date, a year or an ordered category: one cloud per value, common words glide to their new place |
| `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 = `words` + `play` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `weight`, `colorBy`, `compare`, `exclude`, `shapeSvg`, `tooltips`, `format`.
Capabilities: supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (145)

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)

**Orientation**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.orientation` | Word orientation | Orientation des mots | dropdown | enumeration | `hv` | `horizontal` All horizontal; `hv` Horizontal and vertical; `vertical` All vertical; `diagonal` Horizontal and diagonals (±45°); `range` From one angle to another (even steps); `random` Free angles between two limits |  |
| `layout.rotatedShare` | Share of rotated words (%) | Part des mots tournés (%) | number | integer | `25` | 0 to 100 | Visible when `layout.orientation` = `hv` or `diagonal` |
| `layout.verticalDir` | Direction of vertical words | Sens des mots verticaux | dropdown | enumeration | `up` | `up` Bottom to top; `down` Top to bottom | Visible when `layout.orientation` = `hv` or `vertical` |
| `layout.angleFrom` | Start angle (°) | Angle de départ (°) | number | integer | `-60` | -90 to 90 | Visible when `layout.orientation` = `range` or `random` |
| `layout.angleTo` | End angle (°) | Angle d'arrivée (°) | number | integer | `60` | -90 to 90 | Visible when `layout.orientation` = `range` or `random` |
| `layout.steps` | Number of orientations | Nombre d'orientations | number | integer | `5` | 2 to 19 | Visible when `layout.orientation` = `range` |

**Placement**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.spacing` | Spacing between words (px) | Espacement entre les mots (px) | number | integer | `2` | 0 to 30 |  |
| `layout.fit` | Size fitting | Ajustement des tailles | dropdown | enumeration | `auto` | `auto` Fill the shape (shrink or enlarge); `shrink` Shrink only when needed; `none` Fixed sizes | Fill the shape: the words grow until they fill the shape (never below the minimum size); when the shape is small for every word, the least frequent ones are left out rather than shrinking everything. |
| `layout.spiral` | Placement spiral | Spirale de placement | dropdown | enumeration | `archimedean` | `archimedean` Round (cloud); `rectangular` Rectangular (block) |  |
| `layout.seed` | Layout variant | Variante de disposition | number | integer | `1` | 1 to 999 | The layout is always the same for the same data; change this number to try another arrangement. |

**Fill ★ / Remplissage ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.repeat` | Fill the shape with repeated words ★ | Remplir la forme avec des répétitions ★ | toggle | bool | `false` | true / false | Once every word is placed, smaller copies fill the remaining space so that the shape reads clearly (texture). |
| `layout.repeatOpacity` | Repeated words opacity (%) | Opacité des répétitions (%) | number | integer | `55` | 10 to 100 |  |
| `layout.repeatMax` | Maximum number of repetitions | Nombre maximal de répétitions | number | integer | `900` | 50 to 3000 |  |

**Animation**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.intro` | Words appear | Apparition des mots | dropdown | enumeration | `grow` | `grow` From the center; `fade` Fade; `none` None | When the data changes. Never when animations are reduced (Style › Animations or the system). |

### 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 | `palette` | `palette` Palette (one color per word); `single` Single color; `weight` Gradient by size ★; `field` Gradient by the “Color” field ★; `change` Change (“Comparison” field) ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.gradient` | Gradient | Dégradé | dropdown | enumeration | `sequential` | `sequential` Sequential (style palette); `diverging` Diverging (around the middle) |  |
| `dataColors.byRank` | Colors in size order | Couleurs dans l'ordre des tailles | toggle | bool | `true` | true / false | Palette: the largest word takes the first color, the next one the second… Off: each word keeps its color whatever its size. |

### Words / Mots (`words`, Format pane)

**Text splitting / Découpage du texte**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `words.split` | Split text into words | Découper le texte en mots | dropdown | enumeration | `auto` | `auto` Automatic (long texts); `on` Yes; `off` No (one value = one word or phrase) | Automatic: values of several words (comments, titles) are split into words; short labels are kept whole. |
| `words.ngrams` | Phrases | Expressions | dropdown | enumeration | `1` | `1` Single words; `2` Two-word phrases ★; `12` Words and two-word phrases ★; `3` Three-word phrases ★ | Phrases (“customer service”, “delivery time”) are counted like words; stop words never start or end a phrase. |
| `words.countMode` | Count | Compter | dropdown | enumeration | `occurrences` | `occurrences` Every occurrence; `rows` Once per row (answer, comment) ★ | Once per row: a word repeated in the same comment counts once (share of answers that use it). |
| `words.minLength` | Minimum length (letters) | Longueur minimale (lettres) | number | integer | `3` | 1 to 20 |  |
| `words.removeNumbers` | Ignore numbers | Ignorer les nombres | toggle | bool | `true` | true / false |  |
| `words.specialChars` | Keep special characters (#, @, emojis) | Garder les caractères spéciaux (#, @, émojis) | toggle | bool | `false` | true / false | Hashtags (#sale), mentions (@store), amounts ($20, 20€) and emojis are kept as words. |
| `words.elision` | Remove French elisions (l', d', qu'…) | Retirer les élisions (l', d', qu'…) | toggle | bool | `true` | true / false |  |
| `words.mergePlurals` | Merge singular and plural ★ | Regrouper singulier et pluriel ★ | toggle | bool | `false` | true / false | “order” and “orders” become one word (the most frequent form is shown). |

**Case / Casse**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `words.textCase` | Word case | Casse des mots | dropdown | enumeration | `auto` | `auto` Most frequent form; `lower` lowercase; `upper` UPPERCASE; `title` Capitalized | Words are always grouped regardless of case (“Delivery” and “delivery” are one word). |

**Stop words / Mots vides**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `words.stopWords` | Built-in stop words | Mots vides intégrés | dropdown | enumeration | `auto` | `auto` French and English; `fr` French; `en` English; `none` None | Common words without meaning of their own (the, and, le, de, pour…) are removed when the text is split. |
| `words.customStop` | Other words to exclude | Autres mots à exclure | textarea | text | (empty) |  | Case and accents ignored. The “Excluded words” field does the same with a text measure. |

**Number of words / Nombre de mots**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `words.maxWords` | Maximum number of words (top N) | Nombre maximal de mots (N premiers) | number | integer | `150` | 1 to 1000 |  |
| `words.minWeight` | Minimum weight (0 = all) | Poids minimal (0 = tous) | number | numeric | `0` | 0 to … | Words whose weight (or number of occurrences) is below this value are not shown. |

### Word text / Texte des mots (`wordFont`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `wordFont.font` | Font | Police | dropdown | enumeration | `auto` | `auto` Style font; `Segoe UI` Segoe UI; `Segoe UI Light` Segoe UI Light; `Segoe UI Semilight` Segoe UI Semilight; `Segoe UI Semibold` Segoe UI Semibold; `Segoe UI Black` Segoe UI Black; `Arial` Arial; `Arial Narrow` Arial Narrow · Office; `Aptos` Aptos · Office; `Bahnschrift` Bahnschrift; `Bahnschrift SemiCondensed` Bahnschrift SemiCondensed; `Bahnschrift Condensed` Bahnschrift Condensed; `Calibri` Calibri; `Calibri Light` Calibri Light; `Candara` Candara; `Century Gothic` Century Gothic · Office; `Corbel` Corbel; `Ebrima` Ebrima; `Franklin Gothic Medium` Franklin Gothic Medium; `Gadugi` Gadugi; `Gill Sans MT` Gill Sans MT · Office; `Leelawadee UI` Leelawadee UI; `Lucida Sans Unicode` Lucida Sans Unicode; `Microsoft Sans Serif` Microsoft Sans Serif; `Nirmala UI` Nirmala UI; `Tahoma` Tahoma; `Trebuchet MS` Trebuchet MS; `Tw Cen MT` Tw Cen MT · Office; `Verdana` Verdana; `Book Antiqua` Book Antiqua (serif) · Office; `Bookman Old Style` Bookman Old Style (serif) · Office; `Cambria` Cambria (serif); `Constantia` Constantia (serif); `Garamond` Garamond (serif) · Office; `Georgia` Georgia (serif); `Palatino Linotype` Palatino Linotype (serif); `Rockwell` Rockwell (serif) · Office; `Sitka Text` Sitka Text (serif); `Sitka Heading` Sitka Heading (serif); `Sylfaen` Sylfaen (serif); `Times New Roman` Times New Roman (serif); `Cascadia Code` Cascadia Code (monospace); `Cascadia Mono` Cascadia Mono (monospace); `Consolas` Consolas (monospace); `Courier New` Courier New (monospace); `Lucida Console` Lucida Console (monospace); `Comic Sans MS` Comic Sans MS (handwriting); `Gabriola` Gabriola (handwriting); `Ink Free` Ink Free (handwriting); `MV Boli` MV Boli (handwriting); `Segoe Print` Segoe Print (handwriting); `Segoe Script` Segoe Script (handwriting); `Bradley Hand ITC` Bradley Hand ITC (handwriting) · Office; `Lucida Handwriting` Lucida Handwriting (handwriting) · Office; `Arial Black` Arial Black (display); `Impact` Impact (display) | Fonts installed with Windows or Microsoft Office (no web font); a similar font is used when one is missing. |
| `wordFont.fontWeight` | Weight | Graisse | dropdown | enumeration | `semibold` | `normal` Regular; `semibold` Semibold; `bold` Bold; `bySize` Bold for the largest words |  |
| `wordFont.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `wordFont.minSize` | Minimum size (px) | Taille minimale (px) | number | formatting | `11` | 6 to 80 |  |
| `wordFont.maxSize` | Maximum size (px) | Taille maximale (px) | number | formatting | `64` | 8 to 300 |  |
| `wordFont.sizeScale` | Size by weight | Taille selon le poids | dropdown | enumeration | `sqrt` | `linear` Linear; `sqrt` Square root (balanced); `log` Logarithmic (compressed) ★; `rank` By rank ★ | Weight = the “Size” measure, or the number of occurrences without it. |
| `wordFont.weightMax` | Weight at the maximum size (empty = automatic) | Poids de la taille maximale (vide = automatique) | text | text | (empty) |  | Keeps the sizes when another visual filters the cloud: a measure named wordFont.weightMax in “Dynamic format”, e.g. CALCULATE ( MAXX ( VALUES ( Topics[Topic] ), [Mentions] ), ALL ( Topics ) ) (ALL or REMOVEFILTERS ignores the filter; ALLSELECTED follows it), with Layout › Size fitting › Fixed sizes. |

### Shape / Forme (`shape`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `shape.shape` | Shape | Forme | dropdown | enumeration | `oval` | `oval` Oval (fills the visual); `rect` Rectangle (fills the visual); `custom` Custom SVG ★; `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 ★ | The words fill this shape. ★ shapes and the custom SVG show the premium watermark without a license. |
| `shape.svg` | Shape SVG | SVG de la forme | textarea | text | (empty) |  | Visible when `shape.shape` = `custom`. Paste an SVG (or a path “d”); it is cleaned (no script, no web link). The “Shape (SVG)” field does the same with a measure. |
| `shape.fit` | Proportions | Proportions | dropdown | enumeration | `contain` | `contain` Keep proportions; `stretch` Stretch to fill the visual | Visible when `shape.shape` = `custom` or `circle` or `square` or `roundedSquare` or `rectangle` or `triangle` or `diamond` or `hexagon` or `star` or `heart` or `ellipse` or `pentagon` or `octagon` or `rightTriangle` or `parallelogram` or `trapezoid` or `ring` or `semicircle` or `arch` or `capsule` or `star6` or `seal` or `cross` or `arrow` or `arrowUp` or `arrowDown` or `arrowLeft` or `doubleArrow` or `chevron` or `check` or `close` or `plus` or `minus` or `warning` or `info` or `playButton` or `bubble` or `thought` or `flag` or `bookmark` or `tag` or `bolt` or `shield` or `award` or `puzzle` or `gear` or `lock` or `key` or `bell` or `eye` or `cloud` or `drop` or `sun` or `moon` or `snowflake` or `leaf` or `pine` or `tree` or `flower` or `mountain` or `wave` or `flame` or `umbrella` or `apple` or `fish` or `paw` or `rain` or `sprout` or `person` or `man` or `woman` or `child` or `people` or `bust` or `house` or `building` or `factory` or `castle` or `shop` or `bank` or `hospital` or `book` or `envelope` or `phone` or `laptop` or `monitor` or `gift` or `clock` or `calendar` or `pencil` or `lightbulb` or `cup` or `crown` or `trashCan` or `barrel` or `bottle` or `wineGlass` or `glass` or `mug` or `jar` or `bucket` or `battery` or `batteryVertical` or `thermometer` or `testTube` or `tank` or `funnel` or `hourglass` or `bag` or `piggyBank` or `flask` or `beaker` or `can` or `coffeeCup` or `vase` or `milkCarton` or `france` or `africa` or `australia` or `southAmerica` or `pin` or `globe` or `foldedMap` or `compass` or `city` or `target` or `barChart` or `pieChart` or `trendUp` or `coin` or `banknote` or `wallet` or `creditCard` or `cart` or `briefcase` or `percent` or `podium` or `megaphone` or `gem` or `medal` or `clipboard` or `handshake` or `car` or `truck` or `bus` or `bicycle` or `plane` or `boat` or `train` or `rocket` or `helicopter` or `ship` or `fuel` or `scooter`. Keep proportions: a heart stays a heart (it fills the height of a wide visual). Stretch: the shape covers the whole visual. |
| `shape.silhouette` | Silhouette in the background ★ | Silhouette en fond ★ | toggle | bool | `false` | true / false |  |
| `shape.silhouetteColor` | Silhouette color (empty = grid) | Couleur de la silhouette (vide = grille) | color | fill | (empty) | hex color | Visible when `shape.silhouette` = `true` |
| `shape.silhouetteOpacity` | Silhouette opacity (%) | Opacité de la silhouette (%) | number | integer | `40` | 5 to 100 | Visible when `shape.silhouette` = `true` |
| `shape.margin` | Margin around the shape (px) | Marge autour de la forme (px) | number | integer | `4` | 0 to 80 |  |

### 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 | `bottom` | `top` Top; `bottom` Bottom; `right` Right; `left` Left |  |
| `legend.align` | Alignment | Alignement | dropdown | enumeration | `center` | `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 |  |

### Comparison ★ / Comparaison ★ (`comparison`, 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 |
|---|---|---|---|---|---|---|---|
| `comparison.arrows` | ▲▼ arrows in the cloud | Flèches ▲▼ dans le nuage | toggle | bool | `true` | true / false | The direction is also written in the tooltip: the meaning never relies on color alone. |
| `comparison.lowerIsBetter` | A decrease is favorable | Une baisse est favorable | toggle | bool | `false` | true / false |  |
| `comparison.neutral` | Negligible change (± %) | Variation négligeable (± %) | number | integer | `5` | 0 to 100 |  |
| `comparison.risingColor` | Favorable color (empty = style) | Couleur favorable (vide = style) | color | fill | (empty) | hex color |  |
| `comparison.fallingColor` | Unfavorable color (empty = style) | Couleur défavorable (vide = style) | color | fill | (empty) | hex color |  |
| `comparison.newWords` | Mark new words (✦) | Marquer les nouveaux mots (✦) | 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 | `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). |

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

### Other objects (not in the Format pane cards above)

- `compare`: `compare.arrows` (bool), `compare.lowerIsBetter` (bool), `compare.neutral` (integer), `compare.risingColor` (fill), `compare.fallingColor` (fill), `compare.newWords` (bool).
