# Stream 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 Stream 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/stream-graph (French: https://plumevisuals.com/fr/visuels/stream-graph)
- Summary: How the make-up of a total changes over time: flowing streams, named where they are thickest.
- Power BI visual GUID (`visualType`): `plumeStreamGraphBD58E5BDB1F84D8B9E68756C1DFFB2D4`
- 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

Stream Plume (identifier `stream-graph`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; not yet on AppSource) that draws **streamgraphs**: stacked areas flowing around a central axis, to show how the make-up of a total changes over time. Power BI Desktop has no native streamgraph (only stacked areas on zero); Microsoft's free Stream Graph visual has per-point labels and fixed tooltips.

**New in version 1.1.0.0 (30/10/2026):** Format pane reorganized (new **Gridlines** card, `events` → `annotations`, `reference` → `refPeriod`); free reference lines (Analytics pane), annotations like Line Plume (anchored on a stream), playback on the shared player (`play.speed` per frame, autoplay); `play.duration` is no longer read.

- **Four layouts** (`streams.offset`): `wiggle` (flowing streams, Byron and Wattenberg's weighted-wiggle baseline, then straightened so the chart does not drift), `silhouette` (symmetric around a straight line), `expand` (each date = 100%), `zero` (classic stacked areas with a Y axis).
- **Stream order** (`streams.order`, bottom to top): `insideOut` (largest in the middle, default), `total`, `peak` ★ (by peak date), `name`, `data`, `custom` (`streams.customOrder` = names separated by `;`; others follow); `streams.reverse`.
- **Smooth edges that never cross** (`streams.curve` = `smooth`, a clamped B-spline like d3.curveBasis), `linear` or `step` ★.
- **Stream names written inside the streams**, where they are thickest, sized by thickness (`streamLabels.autoSize`, `fontSize` min 10, `maxSize` 15), never overlapping; a stream too thin keeps no label. Content: name, name and value, name and total, name and share, name and change vs. the reference period ★.
- **Size scale**: flowing and centered streams have no zero, so a vertical "↕ 200 k€" marker replaces the Y axis (`yAxis.scaleBar`); `zero` and `expand` show a real Y axis.
- Hover a stream: the others fade; tooltip with value, share, rank, change vs. previous point, total at the date, Tooltips measures (or every stream at the date with `tooltip.tipAll`). Click = select the stream (Ctrl for several), legend click too, cross-highlighting drawn as the highlighted part of each stream.
- **Small multiples** (`multiples` role): one panel per value, shared scale (same thickness for the same value) free, independent scale ★.
- **Time**: a left-to-right reveal when shown and when the data changes (`streams.reveal`), edges glide when only values change; "Reduce motion" respected. ★ playback cursor (`play.controls`, premium since the 22/10/2026 rebalancing; the reveal on loading stays free), with a ★ live ranking; ★ navigator.

## 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 and `style.themeJson` ("Theme JSON ★") are **premium**.
- Free in Stream Plume: the four layouts, the orders `insideOut`, `total`, `name`, `data`, `custom`, smooth and straight edges, solid and **hatch** fills, opacity and separator, labels (name, value, total), size scale, Y axis, legend, small multiples with a shared scale, reveal animation, tooltips, selection, highlighting, keyboard.
- Premium features of Stream Plume:
  - `dataColors.mode` = `gradient` (style gradient by size) or `highlight` (`highlightWhat` = `risers` | `fallers` | `top` | `names`, `highlightN`, `highlightNames`, `highlightColor`, `othersColor`);
  - `streams.fill` = `gradient` (gradient toward the present); `streams.topN` (Top N + "Others": `n`, `othersLabel`, `othersColor`);
  - `edgeValues.show` (start and end values, `side`, `content` = `value` | `share` | `valueChange` | `nameValue`);
  - `streamLabels.content` = `nameChange`;
  - `refPeriod.show` (Analytics pane: `from`, `to`, `label`, `shade`, `color`, `opacity`, `tooltip`);
  - `events` (Analytics pane: `list`) and the `events` role (text measure);
  - `navigator.show` (`height`, `from`, `to`); `play.ranking` (ranking at the cursor date, `rankCount`; counts only when `play.controls` is on);
  - `smallMultiples.scale` = `independent`;
  - since the 22/10/2026 rebalancing: `play.controls` (playback cursor, card « Lecture ★ » / « Playback ★ », at least two axis positions); `streams.order` = `peak` (at least two streams); `streams.curve` = `step` (at least two positions); `streamLabels.content` = `nameShare` (labels shown).
- The watermark is decided on ★ features **really applied**: a highlight that finds no stream, a Top N that groups nothing, a reference period outside the axis or an empty event list show no watermark.
- 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.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `stream-graph` or the whole catalog. Licenses last one year (one-time payment). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack.

## Expected data shape

One row per date and per category, with a measure for the amount.

| Time axis (`axis`) | Streams (`series`) | Values (`values`) |
|---|---|---|
| 2025-01-01 | Web | 61,000 |
| 2025-01-01 | Stores | 42,000 |
| 2025-02-01 | Web | 66,000 |

- **Time axis** (`axis`, « Axe de temps », one column, required): a date **column** (not the automatic date hierarchy) gives a continuous time axis; an integer column between 1000 and 3000 is read as years; text gives a category axis in data order (`xAxis.type` = `categorical` forces it).
- **Streams (legend)** (`series`, « Flux (légende) », one column): one stream per value, with exactly one measure in Values. Without it, each measure in Values is a stream.
- **Values** (`values`, « Valeurs »): the thickness. Negative values count as zero (warning in edit mode); missing values count as zero.
- **Small multiples** (`multiples`), **Events (text) ★** (`events`, text measure: a marker wherever it is not empty), **Tooltips** (`tooltips`), **Dynamic format** (`format`).
- Data view: categorical mapping with Small multiples, Time axis and Streams as **categories** (one row per point), so the 30,000-row window applies to every point; more rows are fetched with `fetchMoreData` up to 100,000. Beyond one point per 1.5 pixels, neighboring dates are averaged into groups (tooltip "start – end"). 100,004 rows render in under 4 s.

## DAX recipes

```dax
Revenue = SUM ( Sales[Amount] )
// Events (text) ★: a marker on September 2023
Event = IF ( MAX ( Sales[Month] ) = DATE ( 2023, 9, 1 ), "Marketplaces launch" )
// Dynamic format, renamed title.text: a title computed on the whole selection
Sales title = "Revenue by channel: " & FORMAT ( CALCULATE ( [Revenue], ALLSELECTED () ), "$#,0" )
```

## List syntax

- `streams.customOrder`: `Stores; Web` (bottom to top, case and accents ignored).
- `dataColors.highlightNames`: `Web; Export`.
- `annotations.list` ★: one line per event, `x | text | #RRGGBB` (color optional), `x1..x2 | text` for a shaded period; x = date (`2020-03-17`, `2020-03`, `2020`, `17/03/2020`), number or category as displayed; `#` or `//` lines are comments.
- `refPeriod.from` / `refPeriod.to`, `navigator.from` / `navigator.to`: same formats; an empty `refPeriod.to` = the same period (`2019` = the 12 months of 2019).

## Interactions with the report

- Click a stream: cross-filter on that stream value (identity of the Streams value alone); Ctrl for several; click "Others" = all grouped streams; click an empty area clears. Legend click selects, legend hover brings the stream forward.
- Context menu everywhere (on a stream: the point = small multiple + date + stream; elsewhere: the visual).
- Keyboard: Tab to the chart, ← → dates, ↑ ↓ streams, Enter selects, Esc clears (and stops playback). ARIA labels and screen reader announcements in French and English.
- Navigator ★: drag the window or its handles, wheel zoom on the chart, double-click to reset; the window is per session (not saved). Playback ★: ▶ / Pause button at the top right, Esc stops; steps instead of a smooth glide when motion is reduced.
- The visual never calls `persistProperties`.

## Format pane: option IDs

- Card order: `license`, `style`, `dataColors`, `streams`, `streamLabels`, `edgeValues`, `xAxis`, `yAxis`, `legend`, `smallMultiples`, `navigator`, `play`, `interaction`, then `title`, `source`, `container`, `texts`; Analytics pane: `reference`, `annotations`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `streams`, `streamLabels`, `edgeValues`, `xAxis`, `yAxis`, `gridlines`, `legend`, `annotations`, `navigator`, `smallMultiples`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`; Analytics pane: `refPeriod`, `reference`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `streams`: `offset` (`wiggle` | `silhouette` | `expand` | `zero`), `order` (`insideOut` | `total` | `peak` ★ | `name` | `data` | `custom`), `customOrder`, `reverse`, `curve` (`smooth` | `linear` | `step` ★), `fill` (`solid` | `gradient` ★ | `hatch`), `opacity` (10–100, 92), `outline`, `outlineWidth` (0.8), `reveal`, `topN` ★, `n` (8), `othersLabel`, `othersColor`.
- `streamLabels`: `show`, `content` (`name` | `nameValue` | `nameTotal` | `nameShare` ★ | `nameChange` ★), `placement` (`thickest` | `end` | `start`), `autoSize`, `fontSize` (10), `maxSize` (15), `color`, `bold`, `halo`, `hideLegend`, `units`, `decimals`, `prefix`, `suffix`.
- `edgeValues` ★: `show`, `side` (`both` | `end` | `start`), `content`, `fontSize` (9), `colorBy` (`series` | `text`), `units`, `decimals`, `prefix`, `suffix`.
- `xAxis`: `show`, `fontSize`, `color`, `labelMode`, `maxSize`, `line`, `type` (`auto` | `continuous` | `categorical`), `dateFormat`, `showTitle`, `titleText`, `gridlines.vShow` (on), `gridlines.vStyle`.
- `yAxis`: `show`, `scaleBar`, `position`, `fontSize`, `color`, `units`, `decimals`, `prefix`, `suffix`, `line`, `min`, `max`, `ticks`, `showTitle`, `titleText`, `gridlines.hShow`, `gridlines.hStyle`, `gridlines.hColor`, `gridlines.zeroLine`.
- `smallMultiples`: `columns` (0 = auto), `gap` (14), `scale` (`shared` | `independent` ★), `border`, `titleShow`, `titleSize`, `titleColor`, `titleTotal`.
- `navigator` ★: `show`, `height` (38), `from`, `to`. `play` (shared player): `controls` ★, `speed` (duration of one frame in ms; replaces the former `duration` of a whole run, which is no longer read), `loop`, `autoPlay`, `start`, `ranking` ★ (off), `rankCount` (5).
- `interaction`: `hover`, `dim` (25), `crosshair`, `tooltip.tipAll`. `reference` ★ and `events` ★: see above.

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs.

```json
{
  "visualType": "plumeStreamGraphBD58E5BDB1F84D8B9E68756C1DFFB2D4",
  "query": {
    "queryState": {
      "axis":   { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Month" } }, "queryRef": "Sales.Month", "nativeQueryRef": "Month" } ] },
      "series": { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Channel" } }, "queryRef": "Sales.Channel", "nativeQueryRef": "Channel" } ] },
      "values": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] }
    }
  },
  "objects": {
    "streams":      [ { "properties": { "offset": { "expr": { "Literal": { "Value": "'silhouette'" } } } } } ],
    "streamLabels": [ { "properties": { "content": { "expr": { "Literal": { "Value": "'nameTotal'" } } }, "hideLegend": { "expr": { "Literal": { "Value": "true" } } } } } ]
  }
}
```

## Styles and theme JSON

- `style.preset` takes one of the 20 style IDs shared by every Plume visual. `minimal` hides the vertical grid and the legend (names stay in the streams); `blackWhite` uses hatching; a style with `fill` = `hatch` or `outlined` changes the fill when it was left at its default.
- `style.themeJson` (Theme JSON ★): see https://plumevisuals.com/ai/tutorials/en/themes-json.md.

## Common pitfalls

- One wide stream, or one stream per year: the date hierarchy is used instead of the date column.
- No Y axis: expected for `wiggle` and `silhouette` (no zero); read the size scale or use `zero` / `expand`.
- A stream has no label: it is too thin everywhere; lower `streamLabels.fontSize`.
- "Negative values counted as zero": a stream cannot be negative; use Waterfall Plume or Bar Plume for changes.
- Watermark visible: a ★ feature really applied (see above), a ★ style or a theme JSON, without a valid key.
- The visual makes no network request: data and license key stay in the report.

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

Negative streams or diverging streams, a saved navigator window or playback position, streams scrolled vertically in small multiples, image textures, exporting the chart as an image, a separate Play axis field (the time axis itself is played: `play.controls`), speed buttons on a play bar.

## 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 |
|---|---|---|---|---|---|
| `axis` | Time axis | Axe de temps | column | 4 | Date, year, number or ordered category (months, quarters…) along which the streams flow. |
| `series` | Streams (legend) | Flux (légende) | column | 1 | One stream per value of this field. Without it, each measure in Values is a stream. |
| `values` | Values | Valeurs | measure | several |  |
| `multiples` | Small multiples | Petits multiples | column | 1 |  |
| `events` | Annotations (text) ★ | Annotations (texte) ★ | measure | 1 | Optional text measure: a vertical marker with its text wherever it is not empty. |
| `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 = `multiples` + `axis` + `series` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `values`, `events`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (249)

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

### 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 | `auto` | `auto` Palette (one color per stream); `gradient` Style gradient (largest to smallest) ★; `highlight` Highlight streams ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.highlightWhat` | Highlighted streams | Flux mis en avant | dropdown | enumeration | `risers` | `risers` Biggest risers; `fallers` Biggest fallers; `top` Largest; `names` Named streams | Risers and fallers: from the first to the last point shown (or since the reference period when it is shown). |
| `dataColors.highlightN` | Number of streams | Nombre de flux | number | integer | `2` | 1 to 20 |  |
| `dataColors.highlightNames` | Stream names (separated by ;) | Noms des flux (séparés par ;) | text | text | (empty) |  |  |
| `dataColors.highlightColor` | Highlight color (empty = stream color) | Couleur mise en avant (vide = celle du flux) | color | fill | (empty) | hex color |  |
| `dataColors.othersColor` | Other streams color (empty = style gray) | Couleur des autres flux (vide = gris du style) | color | fill | (empty) | hex color |  |

### Streams / Flux (`streams`, Format pane)

**Layout / Disposition**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streams.offset` | Layout | Disposition | dropdown | enumeration | `wiggle` | `wiggle` Flowing streams (streamgraph); `silhouette` Centered on the axis; `expand` 100% (shares of the total); `zero` Stacked areas (from zero) | Flowing streams: the baseline follows the streams to minimize slopes (Byron and Wattenberg streamgraph). Centered: symmetric around a line. 100%: each date adds up to 100%. Stacked areas: from zero, with a Y axis. |
| `streams.order` | Stream order | Ordre des flux | dropdown | enumeration | `insideOut` | `insideOut` Largest in the middle; `total` By total (largest at the bottom); `peak` By peak date ★; `name` By name (A → Z, bottom to top); `data` Data order; `custom` Custom order |  |
| `streams.customOrder` | Bottom-to-top order (names separated by ;) | Ordre de bas en haut (noms séparés par ;) | text | text | (empty) |  | Visible when `streams.order` = `custom`. Streams not listed follow, in "Largest in the middle" order. |
| `streams.reverse` | Reverse the order | Inverser l'ordre | toggle | bool | `false` | true / false |  |
| `streams.curve` | Edge shape | Forme des bords | dropdown | enumeration | `smooth` | `smooth` Smooth; `linear` Straight; `step` Step ★ |  |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streams.fill` | Fill | Remplissage | dropdown | enumeration | `solid` | `solid` Solid; `gradient` Gradient toward the present ★; `hatch` Hatching (print, color blindness) |  |
| `streams.opacity` | Opacity (%) | Opacité (%) | number | integer | `92` | 10 to 100 |  |
| `streams.outline` | Separator between streams | Liseré entre les flux | toggle | bool | `true` | true / false |  |
| `streams.outlineWidth` | Separator width | Épaisseur du liseré | number | numeric | `0.8` | 0.2 to 4 | Visible when `streams.outline` = `true` |
| `streams.reveal` | Left-to-right reveal | Révélation de gauche à droite | toggle | bool | `true` | true / false | Streams draw along time when shown and when the data changes (never when the system asks to reduce motion). |

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

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streams.topN` | Show | Afficher | toggle | bool | `false` | true / false | Keeps the N largest streams (total over the period) and groups the rest into an "Others" stream. |
| `streams.n` | N | N | number | integer | `8` | 1 to 50 |  |
| `streams.othersLabel` | "Others" label | Libellé « Autres » | text | text | (empty) |  |  |
| `streams.othersColor` | "Others" color (empty = gray) | Couleur de « Autres » (vide = gris) | color | fill | (empty) | hex color |  |

### Stream labels / Étiquettes des flux (`streamLabels`, Format pane)

The card header toggle is `streamLabels.show`.

**Labels / Étiquettes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streamLabels.show` | Show | Afficher | toggle | bool | `true` | true / false | Writes each stream's name inside the stream, where it is thickest, without overlap; a stream that is too thin stays unlabeled (its name is in the legend and the tooltip). |
| `streamLabels.content` | Content | Contenu | dropdown | enumeration | `name` | `name` Name; `nameValue` Name and value at that point; `nameTotal` Name and total; `nameShare` Name and share of the total ★; `nameChange` Name and change vs. the reference period ★ |  |
| `streamLabels.placement` | Position | Position | dropdown | enumeration | `thickest` | `thickest` Where the stream is thickest; `end` Near the end; `start` Near the start |  |
| `streamLabels.autoSize` | Size follows stream thickness | Taille selon l'épaisseur du flux | toggle | bool | `true` | true / false |  |
| `streamLabels.fontSize` | Size (minimum when automatic) | Taille (minimale si automatique) | number | formatting | `10` | 6 to 24 |  |
| `streamLabels.maxSize` | Maximum size | Taille maximale | number | formatting | `15` | 6 to 40 | Visible when `streamLabels.autoSize` = `true` |
| `streamLabels.color` | Color (empty = automatic) | Couleur (vide = automatique) | color | fill | (empty) | hex color | Automatic: white or dark depending on the stream color. |
| `streamLabels.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `streamLabels.halo` | Text halo | Halo autour du texte | toggle | bool | `false` | true / false |  |
| `streamLabels.hideLegend` | Hide the legend | Masquer la légende | toggle | bool | `false` | true / false | Streams are named in the chart: the legend can go. |

**Numbers / Nombres**

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

### Edge values ★ / Valeurs aux bords ★ (`edgeValues`, Format pane)

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

The card header toggle is `edgeValues.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `edgeValues.show` | Show | Afficher | toggle | bool | `false` | true / false | Value of each stream at the first and last point, facing the stream, on both sides of the chart (without overlap). |
| `edgeValues.side` | Sides | Côtés | dropdown | enumeration | `both` | `both` Start and end; `end` End; `start` Start |  |
| `edgeValues.content` | Content | Contenu | dropdown | enumeration | `valueChange` | `value` Value; `share` Share of the total at that date; `valueChange` Value, and change at the end; `nameValue` Name and value |  |
| `edgeValues.fontSize` | Text size | Taille du texte | number | formatting | `9` | 6 to 20 |  |
| `edgeValues.colorBy` | Color | Couleur | dropdown | enumeration | `series` | `series` Stream color; `text` Text |  |
| `edgeValues.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `edgeValues.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `edgeValues.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `edgeValues.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |

### Time axis / Axe de temps (`xAxis`, Format pane)

The card header toggle is `xAxis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `xAxis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `xAxis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `xAxis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `xAxis.labelMode` | Long labels | Étiquettes longues | dropdown | enumeration | `auto` | `auto` Automatic; `wrap` Two lines; `rotate45` Tilted (45°); `rotate90` Vertical; `truncate` Truncated (…) |  |
| `xAxis.maxSize` | Maximum room (% of the visual) | Place maximale (% du visuel) | number | integer | `30` | 10 to 60 |  |
| `xAxis.line` | Axis line | Trait de l'axe | toggle | bool | `true` | true / false |  |
| `xAxis.type` | Axis type | Type d'axe | dropdown | enumeration | `auto` | `auto` Automatic; `continuous` Continuous; `categorical` Categorical | Continuous: dates and numbers are spaced by their real gap. |
| `xAxis.dateFormat` | Date format | Format des dates | text | text | (empty) |  |  |

**Axis title / Titre de l'axe**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `xAxis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `xAxis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `xAxis.showTitle` = `true` |

### Y axis / Axe Y (`yAxis`, Format pane)

The card header toggle is `yAxis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `yAxis.scaleBar` | Size scale (flowing and centered streams) | Échelle de grandeur (flux ondulants et centrés) | toggle | bool | `true` | true / false | Flowing and centered streams have no zero: instead of the axis, a vertical marker shows the thickness of a round value (e.g. ↕ 100k). |
| `yAxis.position` | Position | Position | dropdown | enumeration | `left` | `left` Left; `right` Right |  |
| `yAxis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `yAxis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `yAxis.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `yAxis.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `yAxis.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `yAxis.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |
| `yAxis.line` | Axis line | Trait de l'axe | toggle | bool | `false` | true / false |  |

**Range / Échelle**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.min` | Minimum | Minimum | text | text | (empty) |  | Stacked areas only (flowing, centered and 100% streams have their own scale). |
| `yAxis.max` | Maximum | Maximum | text | text | (empty) |  |  |
| `yAxis.ticks` | Number of ticks (approx.) | Nombre de graduations (environ) | number | integer | `5` | 2 to 20 |  |

**Axis title / Titre de l'axe**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `yAxis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `yAxis.showTitle` = `true` |

### Gridlines / Quadrillage (`gridlines`, Format pane)

**Horizontal**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.hShow` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `gridlines.hColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `gridlines.hWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `gridlines.hStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `gridlines.zeroLine` | Zero line | Ligne du zéro | toggle | bool | `true` | true / false |  |

**Vertical**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.vShow` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `gridlines.vColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `gridlines.vWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `gridlines.vStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |

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

### Annotations ★ (`annotations`, Format pane)

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

The card header toggle is `annotations.show`.

**Content / Contenu**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `annotations.list` | Annotations (one per line) | Annotations (une par ligne) | textarea | text | (empty) |  | "x \| text": vertical marker on the date; "x \| stream \| text": attached to the stream's layer; "x1..x2 \| text": shaded period. x = date (2024-03-15, 2024-03, 2024), number or category as displayed. Optional color #RRGGBB last ("… \| #C0392B"). "\n" starts a new line. The measure in the "Annotations (text)" field adds its own. |
| `annotations.content` | Displayed content | Contenu affiché | dropdown | enumeration | `text` | `text` Text; `textX` Text and date; `textValue` Text and value (stream) |  |
| `annotations.editOnChart` | Edit on the chart (edit mode) | Modifier sur le graphique (mode édition) | toggle | bool | `true` | true / false | In edit mode, annotations can be dragged, edited with a double-click and removed with × (single panel). |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.style` | Style | Style | dropdown | enumeration | `plain` | `bubble` Bubble; `filled` Filled label; `plain` Text only |  |
| `annotations.color` | Color (empty = secondary text or stream) | Couleur (vide = texte secondaire ou flux) | color | fill | (empty) | hex color |  |
| `annotations.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `annotations.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `annotations.maxWidth` | Maximum width (px) | Largeur maximale (px) | number | integer | `160` | 60 to 400 |  |

**Marker and connector / Repère et trait**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.anchor` | Vertical marker text | Texte des repères verticaux | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom; `none` None (line only) |  |
| `annotations.lineStyle` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `annotations.width` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `annotations.bandOpacity` | Periods opacity (%) | Opacité des périodes (%) | number | integer | `10` | 2 to 60 |  |
| `annotations.marker` | Marker on the stream | Repère sur le flux | toggle | bool | `true` | true / false |  |
| `annotations.connector` | Connector | Trait vers le flux | dropdown | enumeration | `line` | `line` Line; `none` None |  |
| `annotations.position` | Default position | Position par défaut | dropdown | enumeration | `auto` | `auto` Automatic (no overlap); `above` Above; `below` Below; `right` Right; `left` Left |  |
| `annotations.distance` | Distance from the point (px) | Distance au point (px) | number | integer | `18` | 6 to 160 |  |

### Navigator ★ / Navigateur ★ (`navigator`, Format pane)

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

The card header toggle is `navigator.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `navigator.show` | Show | Afficher | toggle | bool | `false` | true / false | Mini chart under the streams: drag the window or its edges to zoom into a period, double-click to see everything again. The mouse wheel also zooms the chart. |
| `navigator.height` | Height (px) | Hauteur (px) | number | integer | `38` | 20 to 120 |  |
| `navigator.from` | Window start when opened | Début de la fenêtre à l'ouverture | text | text | (empty) |  | Date, year, number or category (e.g. 2024-01). Empty: from the start. |
| `navigator.to` | Window end when opened | Fin de la fenêtre à l'ouverture | text | text | (empty) |  |  |

### Small multiples / Petits multiples (`smallMultiples`, Format pane)

**Grid / Grille**

| 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.gap` | Spacing (px) | Espacement (px) | number | integer | `14` | 0 to 60 |  |
| `smallMultiples.scale` | Stream scale | Échelle des flux | dropdown | enumeration | `shared` | `shared` Shared by all panels; `independent` Independent per panel ★ | Shared: the same value has the same thickness in every panel. |
| `smallMultiples.border` | Panel border | Cadre des panneaux | toggle | bool | `false` | true / false |  |

**Titles / Titres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `smallMultiples.titleShow` | Title of each panel | Titre de chaque panneau | toggle | bool | `true` | true / false |  |
| `smallMultiples.titleSize` | Text size | Taille du texte | number | formatting | `10` | 6 to 24 | Visible when `smallMultiples.titleShow` = `true` |
| `smallMultiples.titleColor` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | Visible when `smallMultiples.titleShow` = `true` |
| `smallMultiples.titleTotal` | Total in the title | Total dans le titre | toggle | bool | `false` | true / false | Visible when `smallMultiples.titleShow` = `true` |

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

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

**Playback / Lecture**

| 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 | `400` | 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 bar / Barre de lecture**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.controls` | Play bar | Barre de lecture | toggle | bool | `false` | true / false | ▶ button, graduated slider, start / end and speed: a cursor travels through time and veils what comes next. The left-to-right reveal on loading (Streams card) stays free. |
| `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` |

**Large value / Valeur en grand**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.showLabel` | Current value in large type | Valeur en cours en grand | toggle | bool | `false` | true / false |  |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `44` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `bottomRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |

**More settings / Autres réglages**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.ranking` | Ranking at the cursor date ★ | Classement à la date du curseur ★ | toggle | bool | `false` | true / false | Box with the top streams (value and share) at the cursor date, updated during playback. |
| `play.rankCount` | Streams in the ranking | Flux dans le classement | number | integer | `5` | 1 to 20 | Visible when `play.ranking` = `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 |  |
| `interaction.crosshair` | Vertical guide on hover | Repère vertical au survol | toggle | bool | `true` | true / false |  |

### Reference period ★ / Période de référence ★ (`refPeriod`, Analytics pane)

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

The card header toggle is `refPeriod.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `refPeriod.show` | Show | Afficher | toggle | bool | `false` | true / false | Shades a period (e.g. 2019 or 2020-01..2020-06) and compares each stream to its average over that period: change in the tooltip, in the labels and for highlighted streams. |
| `refPeriod.from` | Start (date, year, number or category) | Début (date, année, nombre ou catégorie) | text | text | (empty) |  |  |
| `refPeriod.to` | End (empty = same period) | Fin (vide = même période) | text | text | (empty) |  |  |
| `refPeriod.label` | Label | Libellé | text | text | (empty) |  |  |
| `refPeriod.shade` | Shade the period | Ombrer la période | toggle | bool | `true` | true / false |  |
| `refPeriod.color` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `refPeriod.opacity` | Opacity (%) | Opacité (%) | number | integer | `10` | 2 to 60 |  |
| `refPeriod.tooltip` | Change in the tooltip | Écart dans l'infobulle | toggle | bool | `true` | true / false |  |

### Reference lines / Lignes de référence (`reference`, Analytics pane)

**Line 1 / Ligne 1**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.show1` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.kind1` | Value | Valeur | dropdown | enumeration | `average` | `constant` Constant; `average` Average; `median` Median; `min` Minimum; `max` Maximum; `percentile` Percentile |  |
| `reference.value1` | Constant value | Valeur constante | number | numeric | `0` |  | Visible when `reference.kind1` = `constant` |
| `reference.pct1` | Percentile | Centile | number | integer | `90` | 1 to 99 | Visible when `reference.kind1` = `percentile` |
| `reference.label1` | Label | Libellé | text | text | (empty) |  |  |
| `reference.showValue1` | Show the value | Afficher la valeur | toggle | bool | `true` | true / false |  |
| `reference.color1` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.style1` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.width1` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.labelPos1` | Label position | Position du libellé | dropdown | enumeration | `end` | `end` End; `start` Start; `none` None |  |

**Line 2 / Ligne 2**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.show2` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.kind2` | Value | Valeur | dropdown | enumeration | `constant` | `constant` Constant; `average` Average; `median` Median; `min` Minimum; `max` Maximum; `percentile` Percentile |  |
| `reference.value2` | Constant value | Valeur constante | number | numeric | `0` |  | Visible when `reference.kind2` = `constant` |
| `reference.pct2` | Percentile | Centile | number | integer | `90` | 1 to 99 | Visible when `reference.kind2` = `percentile` |
| `reference.label2` | Label | Libellé | text | text | (empty) |  |  |
| `reference.showValue2` | Show the value | Afficher la valeur | toggle | bool | `true` | true / false |  |
| `reference.color2` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.style2` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.width2` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.labelPos2` | Label position | Position du libellé | dropdown | enumeration | `end` | `end` End; `start` Start; `none` None |  |

**Line 3 / Ligne 3**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.show3` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.kind3` | Value | Valeur | dropdown | enumeration | `median` | `constant` Constant; `average` Average; `median` Median; `min` Minimum; `max` Maximum; `percentile` Percentile |  |
| `reference.value3` | Constant value | Valeur constante | number | numeric | `0` |  | Visible when `reference.kind3` = `constant` |
| `reference.pct3` | Percentile | Centile | number | integer | `90` | 1 to 99 | Visible when `reference.kind3` = `percentile` |
| `reference.label3` | Label | Libellé | text | text | (empty) |  |  |
| `reference.showValue3` | Show the value | Afficher la valeur | toggle | bool | `true` | true / false |  |
| `reference.color3` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.style3` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.width3` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.labelPos3` | Label position | Position du libellé | dropdown | enumeration | `end` | `end` End; `start` Start; `none` None |  |

**Reference band / Bande de référence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.band` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.bandFrom` | From | De | number | numeric | `0` |  |  |
| `reference.bandTo` | To | À | number | numeric | `0` |  |  |
| `reference.bandLabel` | Label | Libellé | text | text | (empty) |  |  |
| `reference.bandColor` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.bandOpacity` | Opacity (%) | Opacité (%) | number | integer | `12` | 2 to 60 |  |

### 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.tipAll` | Every stream at that date | Tous les flux de la date | toggle | bool | `false` | true / false | Otherwise the tooltip details the hovered stream: value, share, rank, change. |

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

- `annotState`: `annotState.offsets` (text), internal state saved by the visual in edit mode (column widths, positions of dragged annotations); leave it alone.
- `events`: `events.show` (bool), `events.list` (text), `events.color` (fill), `events.fontSize` (formatting), `events.labelPos` (enumeration), `events.style` (enumeration), `events.width` (numeric), `events.bandOpacity` (integer).
