# Line Plume: technical reference for AI assistants

> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.5.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 Line 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/line-chart (French: https://plumevisuals.com/fr/visuels/line-chart)
- Summary: Lines and areas on a real time axis, with trends, forecasts and annotations that follow the data.
- Power BI visual GUID (`visualType`): `plumeLineChart5C1B8E47D2A04E9F9B36C7A2E1D5F084`
- 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

Line Plume (formerly Plume Line) is a Power BI custom visual (base range, version 1.5.0.0, installed from the `.pbiviz` file; AppSource submission in preparation) that draws line and area charts on a real time axis: dates are spaced by their real gap with calendar ticks (years, quarters, months, weeks, days, hours); numbers and categories work too. Straight, smooth (monotone, no overshoot) or step lines, solid or stacked areas, missing values (break, connect, zero), markers, a secondary Y axis (secondary series dashed, also with a Legend since 1.3.0.0) and a vertical hover guide that lists every series of the date in one tooltip. Premium adds **annotations attached to points** (x value + series) that follow the line when data or filters change, end-of-line labels, one highlighted series, gradient areas, and since 1.3.0.0 an Analytics pane with **trends and forecasts** (linear, polynomial, exponential, logarithmic, power, Holt, seasonal Holt-Winters, with an 80 % or 95 % forecast interval, projected periods and equation / R²), a **moving average**, **horizontal lines** (constants, statistics, free list, measures) and **vertical lines** (today, dates, shaded periods, event measure), plus a dashed **future part**, **threshold colors** and a shaded **area between two series** in Format › Lines. Since 1.4.0.0, a **Per-series settings** card sets these options series by series. Everything is computed inside the visual. New data draws from left to right; the same points glide.

**New in version 1.5.0.0 (30/10/2026):** Format pane reorganized (new **Gridlines** card); free native-parity additions: **small multiples** (shared or independent Y axis), **combo chart** (Per-series settings › Type = Columns), 100% stacked areas, **zoom slider**, error bars, date tick spacing, "Round the range", series name from a measure; premium **several highlighted series ★**.

## 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 (`style.customColors` and the colors under it) are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium** (watermark without a key). See "Styles and theme JSON" below.
- Using a premium feature without a valid key shows **"Plume Visuals · Premium preview"** (French: « Plume Visuals · Aperçu premium ») in the footer, with an "Unlock →" link to the pricing page. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`; French: « Licence Plume Studio › Clé de licence »), the **first card** of the Format pane.
- Premium features of Line Plume (the watermark appears only when they actually apply):
  - the **Annotations ★** card: watermark when `annotations.show` is on (default) **and** at least one annotation exists (a valid line in `annotations.list`, or a non-blank value of the Annotations (text) measure);
  - the **End-of-line labels ★** card (`endLabels.show`), except when the free **Minimal** style turns them on by itself and they are left as they are (since 1.3.1.0); turned on by hand, or tuned under Minimal (`endLabels.content`, `fontSize`, `colorBy`, `hideLegend`), they are ★;
  - `dataColors.mode` = `highlight` ("Highlight one series ★");
  - `lines.area` = `gradient` ("Gradient ★");
  - the Analytics pane: **Horizontal lines ★** (`reference.*`, the `reference.list` free list, the role **Horizontal lines (measures)** `refY`), **Vertical lines ★** (`vlines.today`, `vlines.list`, the role **Vertical lines (events)** `events`), **Moving average ★** (`movingAvg.show`), **Trend and forecast ★** (`trend.show`);
  - Format › Lines: **future part dashed ★** (`lines.futureShow`), **threshold colors ★** (`lines.thrShow`), **area between two series ★** (`lines.betweenShow`);
- Accepted keys: only keys starting with `PLUM1.` from the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `line-chart` 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". `license.showOwner` displays "Licensed to <holder>".
- 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 per year: 39 € personal, 99 € SME, 299 € enterprise, or a catalog pack (199 € / 399 € / 1,199 € per year; tiers by number of users, designers and viewers included: personal 1–10, SME 11–200, enterprise more than 200).

## Expected data shape

The visual reads **one row per x value** (and per series when Legend is used), with the measures evaluated for that row.

| X axis (`axis`) | Legend (`series`) | Y axis values (`values`) | Annotations (text) (`annotations`) |
|---|---|---|---|
| 2024-10-01 | Web | 48 210 | New website |
| 2024-11-01 | Web | 61 930 | |
| … | … | … | … |

- **X axis** (`axis`, label "X axis" / « Axe X », grouping, one field): a date column (use the field itself, not the Date Hierarchy), a number column (years as whole numbers) or any category. `xAxis.type` forces `continuous` or `categorical`.
- **Legend (series)** (`series`, « Légende (séries) », optional): one line per value. **With a Legend, Y axis values accepts one measure and Secondary Y axis values one measure** (one dashed line per series on the secondary axis, since 1.3.0.0).
- **Y axis values** (`values`, « Valeurs (axe Y) », measures): one line per measure without Legend.
- **Secondary Y axis values** (`values2`, « Valeurs (axe Y secondaire) », measures, optional): drawn dashed against `y2Axis`.
- **Annotations (text)** (`annotations`, « Annotations (texte) », one text measure, optional ★): one annotation per non-blank value, attached to the first main line of its group. With a Legend the measure is evaluated **per series**, so a measure that ignores the series annotates every line.
- **Horizontal lines (measures) ★** (`refY`, « Lignes horizontales (mesures) ★ », measures, optional): one line per measure, flat if the measure has the same value everywhere (target, What-if parameter), stepped if it changes along the X axis (monthly target); with a Legend, one line per series in its color; value shown in the tooltip.
- **Vertical lines (events) ★** (`events`, « Lignes verticales (événements) ★ », one measure, optional): a text measure (a line where it is not blank, labelled with the text), a date measure (a line at that date) or a 1/0 flag (a line where it is not 0).
- **Tooltips** (`tooltips`) and **Dynamic format** (`format`, see below).
- Volume: 30,000 x values per data window, more fetched automatically up to 100,000; beyond, a warning icon "Only the first n rows are loaded". Up to 60 series.

## Annotations: list syntax (`annotations.list`)

One line per annotation, `x | text` or `x | series | text`; lines starting with `#` or `//` are comments.

```text
# Comment
2023-11 | Web | Black Friday: Web record
2023-12-01 | Store | Christmas in store
2025-03-15 | Mid-March
```

- **x**: a date (`2024-06-01`, `2024-06`, `2024`, `2024-06-01T14:30`, `15/06/2024` with a day-first locale, `06/15/2024` in en-US), a number or a category as displayed. A date or number not in the data snaps to the nearest point inside the axis range; outside it, the annotation is hidden.
- **series**: optional; legend label, case and accents ignored. Empty: the first line that has a value at x.
- **text**: up to 4 wrapped lines. Escape a vertical bar as `\|`, a value starting with `#` or `//` as `\#…` / `\//…`.
- Unplaceable lines (unknown series, unreadable x) are reported at the bottom in edit mode only: "Annotation ignored (series or x not found): …". A filtered-out x is not an error.
- In edit mode (`annotations.editOnChart`), hovering shows an **"Annotate"** button: click a point, type, Enter (Esc cancels); the visual writes the line into the list. Drag to move (offsets saved in the hidden object `annotState.offsets`), double-click to edit, × to delete. Annotations from the measure can be dragged but not edited or deleted. Keyboard: Tab, "Annotate" (Enter), ← → date, ↑ ↓ line, Enter to type.

## Per-series settings (since 1.4.0.0)

Format › **Per-series settings** (`seriesFormat`, French « Réglages par série »), list **"Apply settings to"**: *All series*, then each series (each measure without a Legend; each Legend value with a Legend; with a Legend the secondary-axis measure is one entry). Priority: the series' own value, else *All series*, else the regular card (`inherit` = "Same as the … card").

- Free: `lineStyle` (`inherit`, `solid`, `dashed`, `dotted`), `width` (0 = Lines card), `shape` (`linear`, `smooth`, `step`), `markers`, `labels` (`on` / `off`), `area` (`none`, `solid`), `reference` (series counted in the computed horizontal lines).
- ★: `area` = `gradient`, `future` = `on` with its own `futureDate` (empty = the Lines card date, else today) and `futureStyle`, `threshold` = `on`, `between` = `first` / `second` (the two series of the area between two series, no names to type), `endLabel` = `on`, `trend` = `on` (a trend for this series with the Trend and forecast card settings, even when that card is off), `movingAvg` = `on`. `off` removes the feature from a series.
- One series only: `off` on All series, then `on` on that series. Example: CA solid and Marge brute dashed after July 2025 = Marge brute › Future part dashed: Yes, Starting from: 2025-07.
- In PBIP, per-series values are stored with the series selector (`"selector": { "metadata": "Sales.Revenue" }` for a measure, a data selector for a Legend value), All series without selector.

## Analytics pane (★, since 1.3.0.0)

- **Trend and forecast** (`trend.*`): `trend.kind` = `linear`, `poly` (`trend.degree` 2 to 6), `exp`, `log`, `power` (least squares), `holt` (Holt exponential smoothing, `trend.damped`), `holtWinters` (`trend.season`: 0 = automatic, 12 for months, 4 for quarters, 7 for days, 52 for weeks; needs two full seasons, else Holt). `trend.window` = 0 (all points) or the last N points; `trend.applyTo` = all series, primary axis or named series (`trend.names`, separated by `;`), one trend per series, Legend included. `trend.horizon` = 0 to 500 periods projected after the last point (months, quarters and years follow the calendar; also on a category axis: "+1, +2…" slots, or dates if categories are dates); the X axis is extended. `trend.interval` = `none`, `80`, `95` (Student prediction interval for regressions, approximate error variance at h steps for smoothing), `trend.bandOpacity`. `trend.projStyle`, `trend.endValue`, `trend.equation` (equation and R², x = period number), `trend.legend`. Hovering the projected zone shows the period, each series' forecast and the interval.
- **Moving average** (`movingAvg.*`): `period` 2 to 400 points, `method` = `simple`, `weighted`, `exponential` (α = 2 / (N + 1)), `align` = trailing or centered, `partial` (start with an incomplete window), `applyTo` / `names`, `dimSource` (opacity of the original line, 40 % by default), `legend`. Blank values are skipped. Independent from the trend (both can show).
- **Horizontal lines** (`reference.*`): 3 lines (`kindN` = constant, average, median, min, max, percentile), a band (`band`, `bandFrom`, `bandTo`), and the free list `reference.list`, one per line: `1200 | Target | #2E7D4F`, `260 000 | Record | accent | dotted`, `800..1000 | Target zone`, `y2: 30 % | Margin target` (secondary axis). Colors: `#RRGGBB`, `accent`, `favorable`, `défavorable` / `unfavorable`; styles `solid`, `dashed`, `dotted` (French `plein`, `tirets`, `pointillés`).
- **Vertical lines** (`vlines.*`): `vlines.today` (+ `todayLabel`), and the list `vlines.list`: `2024-03-15 | Launch | #B8462A | solid`, `2024-07..2024-08 | Summer` (shaded period from the start of July to the end of August), `today | Today`, `Q3 2024 | Acquisition` (category as displayed). Dates: `2024-03-15`, `2024-03`, `2024`, `15/03/2024` (`03/15/2024` in en-US). A date outside the axis is ignored; an unreadable line is reported at the bottom in edit mode only ("Horizontal line ignored" / "Vertical line ignored").
- Format › Lines: **future part** (`futureShow`, from `today` or `futureDate`, `futureStyle`): the line after that date is dashed, same series, no extra legend entry; **threshold** (`thrShow`, `thrSource` = fixed `thrValue` or the first horizontal line, `thrAbove` / `thrBelow` colors): the line, its area and markers change color at the exact crossing, the area goes from the line to the threshold; **area between two series** (`betweenShow`, `betweenA`, `betweenB`, `betweenUp`, `betweenDown`, `betweenOpacity`).

## DAX recipes

```dax
Revenue = SUM ( Sales[Amount] )
Margin rate = DIVIDE ( SUM ( Sales[Margin] ), [Revenue] )   // good candidate for the secondary axis

// Annotations (text) from a disconnected table Events[Month], Events[Text]
Event =
VAR m = MAX ( Sales[Month] )
RETURN CONCATENATEX ( FILTER ( Events, Events[Month] = m ), Events[Text], " · " )

// Horizontal lines (measures): a flat target, or a monthly target (stepped line)
Target = 40000
Monthly target = AVERAGEX ( VALUES ( Sales[Month] ), [Revenue] ) * 1.08

// Vertical lines (events): text where something happened, blank elsewhere
Milestone = SWITCH ( MAX ( Sales[Month] ), DATE ( 2024, 9, 1 ), "New website", BLANK () )

// With a Legend: annotate one series only
Event (Web only) = IF ( SELECTEDVALUE ( Sales[Channel] ) = "Web", [Event] )
```

## Interactions with the report

- Hover: vertical guide (`interaction.crosshair`) and one tooltip with every series at that x. Click = nearest point (cross-filters other visuals), Ctrl + click = add, click on the legend selects a whole series, legend hover highlights it.
- Keyboard: ← → move through x values (values are announced), Enter selects the x value, Esc clears.
- Line Plume is cross-filtered by other visuals (it does not render highlighting). Context menu, report-page tooltips, landing page, read-only on dashboards, high contrast (series told apart by solid, dashed and dotted strokes), reduced motion. No network request.

## Dynamic formats

- **fx button** on every color and text of the Format pane (*Field value*, *Rules*, *Gradient*), including `annotations.list` and `annotations.color`.
- **Dynamic format** field (role `format`): a measure renamed for this visual as `card.setting` drives **any** setting (sizes, toggles, lists, fonts, colors, texts); it wins over the fixed value, the style and an fx rule, and is never drawn. Names ignore case, accents and separator.
- Value used for a global setting: common value of all rows, else the total, else the first row; use `CALCULATE ( …, ALLSELECTED () )` for a whole-visual value.
- Examples: `annotations.list` = `CONCATENATEX ( Notes, FORMAT ( Notes[Month], "yyyy-MM" ) & " | " & Notes[Channel] & " | " & Notes[Text], UNICHAR ( 10 ) )` (line breaks are kept; the measure then overrides the typed list, so the "Annotate" button edits are not used); `lines.interpolation` = `"smooth"`; `title.subtitle` from a measure. A ★ setting driven by DAX stays ★.

## Format pane: how to read the tables below

- Each option has an ID `card.option` (object name + property name in capabilities.json).
- Card order: `license`, `style`, `dataColors` (dynamic "Data colors": mode, then one color per series stored with its selector), `lines`, `endLabels` (★), `labels`, `annotations` (★), `xAxis`, `yAxis`, `y2Axis` (shown only with secondary values), `legend`, `interaction`, then `title`, `source`, `container`, `texts`. `reference` (horizontal lines), `vlines` (vertical lines), `movingAvg` and `trend` are in the **Analytics** pane. Format pane in version 1.5.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `lines`, `seriesFormat`, `endLabels`, `labels`, `xAxis`, `yAxis`, `y2Axis`, `gridlines`, `legend`, `annotations`, `zoom`, `smallMultiples`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`; Analytics pane: `reference`, `vlines`, `errorBars`, `movingAvg`, `trend`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `xAxis.dateFormat` is shown only for a time axis, `xAxis.labelMode` only for categories. Labels follow the Power BI Desktop language; `texts.language` can force French or English.

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID, `queryState` keys are data role names, `objects` keys are option IDs. Literals: `true` / `false`, numbers with `D`, strings in single quotes (line breaks as `\n` in JSON), colors in `solid.color`.

```json
{
  "visualType": "plumeLineChart5C1B8E47D2A04E9F9B36C7A2E1D5F084",
  "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": {
    "lines":       [ { "properties": { "interpolation": { "expr": { "Literal": { "Value": "'smooth'" } } },
                                        "width": { "expr": { "Literal": { "Value": "2.5D" } } } } } ],
    "annotations": [ { "properties": { "list": { "expr": { "Literal": { "Value": "'2023-11 | Web | Black Friday: Web record\n2024-05 | Web | Mother''s Day campaign'" } } },
                                        "style": { "expr": { "Literal": { "Value": "'filled'" } } },
                                        "content": { "expr": { "Literal": { "Value": "'textValue'" } } } } } ],
    "xAxis":       [ { "properties": { "dateFormat": { "expr": { "Literal": { "Value": "'MMM yyyy'" } } } } } ],
    "license":     [ { "properties": { "key": { "expr": { "Literal": { "Value": "'PLUM1.…'" } } } } } ]
  }
}
```

A per-line color without Legend: `"dataColors": [ { "properties": { "fill": { "solid": { "color": { "expr": { "Literal": { "Value": "'#b8462a'" } } } } } }, "selector": { "metadata": "Sales.Revenue" } } ]`. Never write `annotState` by hand. The custom visual package must also be embedded in the report.

## 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`.
- `style.themeJson` (Format › Style › Theme JSON ★) takes a JSON theme as plain text. Format v2: an object with an optional `extends` (a style ID above) and optional groups `colors`, `palettes`, `typography`, `shape`, `table`, `marks`, `effects`; the v1 flat format (`style`, `palette`, `accent`, `background`…) is still read. Every field is optional. Colors are `#RRGGBB` (`#RGB` and `#RRGGBBAA` accepted, opacity ignored). Unknown fields and values outside the allowed lists are ignored, out-of-range numbers are clamped. Invalid JSON shows "Invalid theme JSON: ignored" in edit mode and the visual keeps its look.
- Full field list with allowed values, examples and troubleshooting: tutorial https://plumevisuals.com/ai/tutorials/en/themes-json.md (French: https://plumevisuals.com/ai/tutorials/fr/themes-json.md). The same JSON can be pasted in every Plume visual of a page.
- Priority (the last one wins): visual defaults → `style.preset` → `style.themeJson` → `style.palette` (if not "Style or theme palette") → `style.followTheme` → custom colors → options set by hand in the other cards → DAX formats (fx button, "Dynamic format" field) → Windows high contrast.

## Common pitfalls

- Only years on the axis: the Date Hierarchy was dropped; use the date field itself.
- Same annotation repeated on each line: the Annotations (text) measure ignores the series (see DAX recipes).
- Annotation missing: x outside the current axis range, unknown series name, or `annotations.show` off. Check the edit-mode message at the bottom.
- `15/03/2025` read as month/day: dates in the list follow the number locale; ISO `2025-03-15` always works.
- Only one measure accepted in Y axis values: a Legend is set (one measure on each axis at most).
- Settings ignored for one series: the series has its own value in Per-series settings (it wins over the cards).
- No forecast drawn: `trend.horizon` is 0, or Holt-Winters has less than two full seasons (it falls back to Holt), or the series has fewer than 3 points.
- Log scale hides points: values ≤ 0 are ignored on a logarithmic axis.
- Watermark visible: annotations exist, end labels turned on or tuned by hand, highlight, gradient area, horizontal or vertical lines, moving average, trend, future part, threshold, area between series, or a ★ style, palette or theme JSON is used without a valid key. The free Minimal style alone never shows it.

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

Bars or columns combined with lines (use Bar Plume for bars), ARIMA / Prophet or forecasts computed outside the visual, forecasts of the secondary axis driven by another measure, more than one secondary axis, a different trend type per series, small multiples, drill-down inside the visual, play axis / time animation, annotation images or links, free-floating annotations not attached to a point, annotations on the secondary axis series from the measure, zoom slider, export of annotations.

## 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` | X axis | Axe X | column | 1 |  |
| `series` | Legend (series) | Légende (séries) | column | 1 |  |
| `multiples` | Small multiples | Petits multiples | column | 1 |  |
| `values` | Y axis values | Valeurs (axe Y) | measure | several |  |
| `values2` | Secondary Y axis values | Valeurs (axe Y secondaire) | measure | several |  |
| `refY` | Reference lines (measures) ★ | Lignes de référence (mesures) ★ | measure | several | One horizontal line per measure (target, what-if parameter); a measure that varies along the X axis is drawn as steps. |
| `events` | Vertical lines (events) ★ | Lignes verticales (événements) ★ | measure | 1 | Text measure: a vertical line at each x where it is not empty, labeled with its text. Date measure: a vertical line at that date. |
| `annotations` | Annotations (text) ★ | Annotations (texte) ★ | measure | 1 | Optional text measure: each non-empty value is shown as an annotation on the point of the line (x and series). |
| `errorLow` | Lower bound (error bars) | Borne basse (barres d'erreur) | measure | 1 |  |
| `errorHigh` | Upper bound (error bars) | Borne haute (barres d'erreur) | measure | 1 |  |
| `seriesName` | Series name (measure) | Nom de la série (mesure) | measure | 1 | Text measure: renames each series of the legend (or the first series without a legend), e.g. "Sales " & [Year]. |
| `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 = `axis` + `multiples` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `values`, `values2`, `refY`, `events`, `annotations`, `errorLow`, `errorHigh`, `seriesName`, `tooltips`, `format`, grouped into series by `series`.
Capabilities: supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (325)

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 series); `single` Single color; `highlight` Highlight series ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.highlightWhat` | Highlighted series | Séries mises en avant | dropdown | enumeration | `last` | `last` Highest at the end; `first` First ones; `name` Named series |  |
| `dataColors.highlightN` | Number of series | Nombre de séries | number | integer | `1` | 1 to 12 | Highest at the end or first ones: how many series are highlighted. |
| `dataColors.highlightName` | Series names (separated by ;) | Noms des séries (séparés par ;) | text | text | (empty) |  | One or more series: "North; South". Each keeps its palette color (empty highlight color) or takes the highlight color. |
| `dataColors.highlightColor` | Highlight color (empty = accent, or palette if several) | Couleur mise en avant (vide = accent, ou palette si plusieurs) | color | fill | (empty) | hex color |  |
| `dataColors.othersColor` | Other series color (empty = style gray) | Couleur des autres séries (vide = gris du style) | color | fill | (empty) | hex color |  |

### Lines / Courbes (`lines`, Format pane)

**Stroke / Tracé**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `lines.width` | Width | Épaisseur | number | numeric | `2` | 0.5 to 8 |  |
| `lines.interpolation` | Shape | Forme | dropdown | enumeration | `linear` | `linear` Straight; `smooth` Smooth; `step` Step |  |
| `lines.style` | Line style | Style du trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `lines.missing` | Missing values | Valeurs manquantes | dropdown | enumeration | `gap` | `gap` Break the line; `connect` Connect points; `zero` Treat as zero |  |

**Markers / Marqueurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `lines.markers` | Markers | Marqueurs | dropdown | enumeration | `auto` | `auto` Automatic (few points); `none` None; `all` All points; `last` Last point; `ends` First and last; `minmax` Minimum and maximum |  |
| `lines.markerSize` | Size | Taille | number | integer | `6` | 2 to 20 | Visible when `lines.markers` = `auto` or `all` or `last` or `ends` or `minmax` |
| `lines.markerShape` | Shape | Forme | dropdown | enumeration | `circle` | `circle` Circle; `square` Square; `diamond` Diamond; `triangle` Triangle | Visible when `lines.markers` = `auto` or `all` or `last` or `ends` or `minmax` |
| `lines.markerHollow` | Hollow markers | Marqueurs creux | toggle | bool | `false` | true / false | Visible when `lines.markers` = `auto` or `all` or `last` or `ends` or `minmax` |

**Area / Aire**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `lines.area` | Fill under the line | Remplissage sous la courbe | dropdown | enumeration | `none` | `none` None; `solid` Solid; `gradient` Gradient ★ |  |
| `lines.areaOpacity` | Opacity (%) | Opacité (%) | number | integer | `18` | 2 to 90 | Visible when `lines.area` = `solid` or `gradient` |
| `lines.areaSeries` | Filled series | Séries remplies | dropdown | enumeration | `primary` | `primary` Primary Y axis; `all` All (secondary axis included); `named` Named series | Visible when `lines.area` = `solid` or `gradient` |
| `lines.areaNames` | Series names (separated by ;) | Noms des séries (séparés par ;) | text | text | (empty) |  | Visible when `lines.area` = `solid` or `gradient` |
| `lines.areaColor` | Color (empty = series color) | Couleur (vide = celle de la série) | color | fill | (empty) | hex color | Visible when `lines.area` = `solid` or `gradient` |
| `lines.stacked` | Stacked series | Séries empilées | toggle | bool | `false` | true / false | Each series is drawn on top of the previous one (stacked area). |
| `lines.percent` | 100% stacked | Empilées à 100 % | toggle | bool | `false` | true / false | Visible when `lines.stacked` = `true`. Each series as a share of the total of the date (100% stacked area, like the native visual). |

**Future part dashed ★ / Partie future en pointillés ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `lines.futureShow` | Show | Afficher | toggle | bool | `false` | true / false | The same line turns dashed after a date: actuals then forecast, with no second series and no duplicate legend entry. |
| `lines.futureFrom` | Starting from | À partir de | dropdown | enumeration | `today` | `today` Today; `date` A date or a value |  |
| `lines.futureDate` | Date or value | Date ou valeur | text | text | (empty) |  | Visible when `lines.futureFrom` = `date` |
| `lines.futureStyle` | Line style | Style du trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |

**Color by threshold ★ / Couleur selon un seuil ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `lines.thrShow` | Show | Afficher | toggle | bool | `false` | true / false | The line (and its area) changes color exactly where it crosses the threshold. |
| `lines.thrSource` | Threshold | Seuil | dropdown | enumeration | `value` | `value` Fixed value; `reference` First reference line |  |
| `lines.thrValue` | Value | Valeur | number | numeric | `0` |  | Visible when `lines.thrSource` = `value` |
| `lines.thrAbove` | Color above | Couleur au-dessus | color | fill | `#2E7D4F` | hex color |  |
| `lines.thrBelow` | Color below | Couleur en dessous | color | fill | `#C0392B` | hex color |  |

**Area between two series ★ / Aire entre deux séries ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `lines.betweenShow` | Show | Afficher | toggle | bool | `false` | true / false | Shades the gap between two lines (actual and budget, minimum and maximum…): one color when the first is above, another when it falls below. |
| `lines.betweenA` | First series (empty = 1st) | Première série (vide = la 1re) | text | text | (empty) |  |  |
| `lines.betweenB` | Second series (empty = 2nd) | Seconde série (vide = la 2e) | text | text | (empty) |  |  |
| `lines.betweenUp` | Color when the first is above | Couleur quand la première est au-dessus | color | fill | `#2E7D4F` | hex color |  |
| `lines.betweenDown` | Color when the first is below | Couleur quand la première est en dessous | color | fill | `#C0392B` | hex color |  |
| `lines.betweenOpacity` | Opacity (%) | Opacité (%) | number | integer | `22` | 2 to 90 |  |

### Per-series settings / Réglages par série (`seriesFormat`, 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.seriesFormat` 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 |
|---|---|---|---|---|---|---|---|
| `seriesFormat.name` | Display name (empty = field name) | Nom affiché (vide = nom du champ) | text | text | (empty) |  | Renames the series in the legend, labels and tooltips. The "Series name (measure)" field computes it in DAX. |
| `seriesFormat.kind` | Type | Type | dropdown | enumeration | `inherit` | `inherit` Line; `column` Columns (combo chart) | Columns: the series is drawn as columns under the lines, on its axis (primary or secondary), like the native combo chart. |
| `seriesFormat.lineStyle` | Line style | Style de trait | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `seriesFormat.width` | Width (0 = Lines card) | Épaisseur (0 = carte Courbes) | number | numeric | `0` | 0 to 8 |  |
| `seriesFormat.shape` | Shape | Forme | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `linear` Straight; `smooth` Smooth; `step` Step |  |
| `seriesFormat.markers` | Markers | Marqueurs | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `none` None; `all` All points; `last` Last point; `ends` First and last; `minmax` Minimum and maximum |  |
| `seriesFormat.labels` | Data labels | Étiquettes de données | dropdown | enumeration | `inherit` | `inherit` Same as the Labels card; `on` Shown; `off` Hidden |  |
| `seriesFormat.area` | Fill under the line | Remplissage sous la courbe | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `none` None; `solid` Solid; `gradient` Gradient ★ |  |
| `seriesFormat.future` | Future part dashed | Partie future en pointillés | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `on` Yes ★; `off` No | Yes: the line changes style from the date below (empty = the one of the Lines card, otherwise today). One series solid, the other dashed after July 2025, for instance. |
| `seriesFormat.futureDate` | Starting from (date or value) | À partir de (date ou valeur) | text | text | (empty) |  |  |
| `seriesFormat.futureStyle` | Future part line style | Trait de la partie future | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `dashed` Dashed; `dotted` Dotted; `solid` Solid |  |
| `seriesFormat.threshold` | Color by threshold | Couleur selon le seuil | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `on` Yes ★; `off` No |  |
| `seriesFormat.between` | Area between two series | Aire entre deux séries | dropdown | enumeration | `inherit` | `inherit` Same as the Lines card; `first` First series of the area ★; `second` Second series of the area ★ | Pick the first and second series here instead of typing their names in the Lines card. |
| `seriesFormat.endLabel` | End-of-line label | Étiquette en bout de courbe | dropdown | enumeration | `inherit` | `inherit` Same as the End-of-line labels card; `on` Yes ★; `off` No |  |
| `seriesFormat.trend` | Trend | Tendance | dropdown | enumeration | `inherit` | `inherit` Same as the Analytics pane; `on` Yes ★; `off` No | Yes: a trend for this series, with the settings of the Trend card of the Analytics pane, even when the card is off. For a single series: "No" on All series, then "Yes" on that series. |
| `seriesFormat.movingAvg` | Moving average | Moyenne mobile | dropdown | enumeration | `inherit` | `inherit` Same as the Analytics pane; `on` Yes ★; `off` No |  |
| `seriesFormat.reference` | Counted in computed lines | Comptée dans les lignes calculées | dropdown | enumeration | `inherit` | `inherit` Same as the Analytics pane (primary axis); `on` Yes; `off` No | Computed reference lines of the Analytics pane (average, median, minimum, maximum, percentile): series taken into account. |

### End-of-line labels ★ / Étiquettes en bout de courbe ★ (`endLabels`, 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 `endLabels.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `endLabels.show` | Show | Afficher | toggle | bool | `false` | true / false | Names the series directly at the end of each line, instead of a legend. |
| `endLabels.content` | Content | Contenu | dropdown | enumeration | `nameValue` | `name` Series name; `value` Last value; `nameValue` Name and last value |  |
| `endLabels.fontSize` | Text size | Taille du texte | number | formatting | `10` | 6 to 24 |  |
| `endLabels.colorBy` | Color | Couleur | dropdown | enumeration | `series` | `series` Series color; `text` Text |  |
| `endLabels.hideLegend` | Hide the legend | Masquer la légende | toggle | bool | `true` | true / false |  |

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

The card header toggle is `labels.show`.

**Labels / Étiquettes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `labels.position` | Position | Position | dropdown | enumeration | `auto` | `auto` Automatic; `above` Above; `below` Below |  |
| `labels.which` | Labeled points | Points étiquetés | dropdown | enumeration | `all` | `all` All (no overlap); `last` Last point; `ends` First and last; `minmax` Minimum and maximum |  |
| `labels.fontSize` | Size | Taille | number | formatting | `10` | 6 to 24 |  |
| `labels.color` | Color (empty = automatic) | Couleur (vide = automatique) | color | fill | (empty) | hex color | Automatic: readable color depending on the background (inside bars: white or dark). |
| `labels.bold` | Bold | Gras | toggle | bool | `false` | true / false |  |
| `labels.halo` | Text halo | Halo autour du texte | toggle | bool | `true` | true / false |  |
| `labels.declutter` | Hide overlapping labels | Masquer les étiquettes qui se chevauchent | toggle | bool | `true` | true / false |  |

**Numbers / Nombres**

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

### X axis / Axe X (`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) |  |  |
| `xAxis.tickUnit` | Date ticks | Graduations des dates | dropdown | enumeration | `auto` | `auto` Automatic; `year` Years; `quarter` Quarters; `month` Months; `week` Weeks; `day` Days | Continuous date axis: one tick per chosen unit. Two neighboring ticks never show the same label. |
| `xAxis.tickEvery` | Every N units | Toutes les N unités | number | integer | `1` | 1 to 100 | Visible when `xAxis.tickUnit` = `year` or `quarter` or `month` or `week` or `day` |

**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.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.scale` | Scale | Échelle | dropdown | enumeration | `linear` | `linear` Linear; `log` Logarithmic |  |
| `yAxis.min` | Minimum | Minimum | text | text | (empty) |  |  |
| `yAxis.max` | Maximum | Maximum | text | text | (empty) |  |  |
| `yAxis.zero` | Always include zero | Toujours inclure zéro | toggle | bool | `false` | true / false | Visible when `yAxis.scale` = `linear` |
| `yAxis.ticks` | Number of ticks (approx.) | Nombre de graduations (environ) | number | integer | `5` | 2 to 20 |  |
| `yAxis.invert` | Invert axis | Inverser l'axe | toggle | bool | `false` | true / false |  |
| `yAxis.round` | Round range | Arrondir la plage | toggle | bool | `true` | true / false | Computed bounds rounded to a round tick. Off: the axis stops at the extreme values. |

**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` |

### Secondary Y axis / Axe Y secondaire (`y2Axis`, Format pane)

The card header toggle is `y2Axis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `y2Axis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `y2Axis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `y2Axis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `y2Axis.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `y2Axis.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `y2Axis.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `y2Axis.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |
| `y2Axis.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 |
|---|---|---|---|---|---|---|---|
| `y2Axis.scale` | Scale | Échelle | dropdown | enumeration | `linear` | `linear` Linear; `log` Logarithmic |  |
| `y2Axis.min` | Minimum | Minimum | text | text | (empty) |  |  |
| `y2Axis.max` | Maximum | Maximum | text | text | (empty) |  |  |
| `y2Axis.zero` | Always include zero | Toujours inclure zéro | toggle | bool | `false` | true / false | Visible when `y2Axis.scale` = `linear` |
| `y2Axis.ticks` | Number of ticks (approx.) | Nombre de graduations (environ) | number | integer | `5` | 2 to 20 |  |
| `y2Axis.invert` | Invert axis | Inverser l'axe | toggle | bool | `false` | true / false |  |
| `y2Axis.round` | Round range | Arrondir la plage | toggle | bool | `true` | true / false | Computed bounds rounded to a round tick. Off: the axis stops at the extreme values. |

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

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `y2Axis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `y2Axis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `y2Axis.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 | `false` | 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) |  | One line per annotation: "x \| text" or "x \| series \| text". x: date (2024-06-01, 2024-06, 06/15/2024), number or category as displayed. The annotation stays attached to that point of the line. In edit mode, the chart's "Annotate" button fills this list. |
| `annotations.content` | Displayed content | Contenu affiché | dropdown | enumeration | `text` | `text` Text; `textValue` Text and value; `textXValue` Text, x and value |  |
| `annotations.editOnChart` | "Annotate" button (edit mode) | Bouton « Annoter » (mode édition) | toggle | bool | `true` | true / false | In edit mode, an "Annotate" button appears when hovering the chart: then click a point of the line to annotate it. Annotations can be dragged, edited with a double-click and removed with ×. |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.style` | Style | Style | dropdown | enumeration | `bubble` | `bubble` Bubble; `filled` Filled label; `plain` Text only |  |
| `annotations.color` | Color (empty = series color) | Couleur (vide = celle de la série) | color | fill | (empty) | hex color |  |
| `annotations.fontSize` | Text size | Taille du texte | number | formatting | `10` | 7 to 24 |  |
| `annotations.bold` | Bold | Gras | toggle | bool | `false` | 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.marker` | Marker on the point | Repère sur le point | toggle | bool | `true` | true / false |  |
| `annotations.connector` | Connector | Trait vers le point | dropdown | enumeration | `line` | `line` Line; `none` None |  |
| `annotations.connectorStyle` | Line style | Style du trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `annotations.connector` = `line` |
| `annotations.position` | Default position | Position par défaut | dropdown | enumeration | `auto` | `auto` Automatic (no overlap); `above` Above; `below` Below; `right` Right; `left` Left | Position of annotations that have not been dragged. |
| `annotations.distance` | Distance from the point (px) | Distance au point (px) | number | integer | `26` | 6 to 160 |  |

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

The card header toggle is `zoom.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `zoom.show` | Zoom slider | Curseur de zoom | toggle | bool | `false` | true / false | Two-handle slider below the axis: choose the visible range (drag, keyboard). The position is not saved in the report. |
| `zoom.labels` | Slider labels | Étiquettes du curseur | toggle | bool | `true` | true / false |  |
| `zoom.height` | Height (px) | Hauteur (px) | number | integer | `22` | 14 to 48 |  |

### 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.minHeight` | Minimum panel height (px) | Hauteur minimale d'un panneau (px) | number | integer | `100` | 40 to 600 | Below that, the grid scrolls vertically. |
| `smallMultiples.gap` | Spacing (px) | Espacement (px) | number | integer | `14` | 0 to 60 |  |
| `smallMultiples.scale` | Y axis | Axe Y | dropdown | enumeration | `shared` | `shared` Shared by all panels; `independent` Independent per 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` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `smallMultiples.titleSize` | Size | Taille | number | formatting | `10` | 6 to 24 |  |
| `smallMultiples.titleColor` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `smallMultiples.titleAlign` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Start; `center` Center |  |

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

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

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

**More lines and bands / Autres lignes et zones**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.list` | Lines (one per line) | Lignes (une par ligne) | textarea | text | (empty) |  | "value \| label \| color \| style": as many lines as needed. "a..b \| label \| color" shades a band. Prefix "y2:" for the secondary axis (y2: 0.3 \| Target margin). Color #RRGGBB and style (solid, dashed, dotted) are optional. |

**Lines from measures / Lignes issues des mesures**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.mShape` | Shape | Forme | dropdown | enumeration | `auto` | `auto` Automatic; `flat` Horizontal (last value); `step` Steps along the X axis; `line` Straight, along the X axis | Measures dropped in the "Reference lines (measures)" field. Automatic: horizontal when the measure has the same value everywhere (target, what-if parameter), steps otherwise (monthly target). With a legend, one line per series, in its color. |
| `reference.mColor` | Color (empty = accent or series) | Couleur (vide = accent ou série) | color | fill | (empty) | hex color |  |
| `reference.mStyle` | Line style | Style du trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.mWidth` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.mLabel` | Label | Libellé | dropdown | enumeration | `nameValue` | `nameValue` Name and value; `name` Name; `value` Value; `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 |  |

### Vertical lines ★ / Lignes verticales ★ (`vlines`, Analytics pane)

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

**Today / Aujourd'hui**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `vlines.today` | Show | Afficher | toggle | bool | `false` | true / false | Vertical line at today's date (date axis, or categories that are dates). |
| `vlines.todayLabel` | Label | Libellé | text | text | (empty) |  |  |
| `vlines.todayColor` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |

**Dates and periods / Dates et périodes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `vlines.list` | Lines and periods (one per line) | Lignes et périodes (une par ligne) | textarea | text | (empty) |  | "x \| label \| color \| style": x = date (2024-03-15, 2024-03, 03/15/2024, today), number or category as displayed. "x1..x2 \| label \| color" shades a period. Optional color #RRGGBB, style: solid, dashed or dotted. Measures in the "Vertical lines (events)" field add their own lines. |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `vlines.color` | Color (empty = muted text) | Couleur (vide = texte atténué) | color | fill | (empty) | hex color |  |
| `vlines.style` | Line style | Style du trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `vlines.width` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `vlines.labelPos` | Labels | Libellés | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom; `none` None |  |
| `vlines.labelOrient` | Text direction | Sens du texte | dropdown | enumeration | `horizontal` | `horizontal` Horizontal; `vertical` Along the line | Visible when `vlines.labelPos` = `top` or `bottom` |
| `vlines.fontSize` | Text size | Taille du texte | number | formatting | `9` | 6 to 20 |  |
| `vlines.bandOpacity` | Periods opacity (%) | Opacité des périodes (%) | number | integer | `10` | 2 to 60 |  |

### Error bars / Barres d'erreur (`errorBars`, Analytics pane)

The card header toggle is `errorBars.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `errorBars.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `errorBars.source` | Bounds | Bornes | dropdown | enumeration | `fields` | `fields` Lower / Upper bound fields (values); `relative` Lower / Upper bound fields (± deltas); `percent` Percentage of the value | With a single delta field, it is used on both sides. Primary and secondary axis series. |
| `errorBars.pct` | Percentage (±) | Pourcentage (±) | number | numeric | `10` | 0 to 100 | Visible when `errorBars.source` = `percent` |
| `errorBars.shape` | Shape | Forme | dropdown | enumeration | `bar` | `bar` Whiskers; `band` Shaded band |  |
| `errorBars.color` | Color (empty = series color) | Couleur (vide = celle de la série) | color | fill | (empty) | hex color |  |
| `errorBars.width` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `errorBars.cap` | Cap width (px) | Largeur des taquets (px) | number | integer | `6` | 0 to 40 | Visible when `errorBars.shape` = `bar` |
| `errorBars.opacity` | Band opacity (%) | Opacité de la bande (%) | number | integer | `18` | 2 to 80 | Visible when `errorBars.shape` = `band` |

### Moving average ★ / Moyenne mobile ★ (`movingAvg`, 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 `movingAvg.show`.

**Calculation / Calcul**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `movingAvg.show` | Show | Afficher | toggle | bool | `false` | true / false | Moving average of each series, on top of the line (and of any trend). |
| `movingAvg.period` | Number of points | Nombre de points | number | integer | `3` | 2 to 400 | Window size, in axis points (3 = three months on a monthly axis, 7 = one week on a daily axis). |
| `movingAvg.method` | Average | Moyenne | dropdown | enumeration | `simple` | `simple` Simple; `weighted` Weighted (recent points count more); `exponential` Exponential |  |
| `movingAvg.align` | Window | Fenêtre | dropdown | enumeration | `trailing` | `trailing` Previous points (trailing); `centered` Centered on the point | Visible when `movingAvg.method` = `simple` or `weighted` |
| `movingAvg.partial` | From the first points | Dès les premiers points | toggle | bool | `false` | true / false | Also compute on an incomplete window at the start (otherwise the average starts at the N-th point). |
| `movingAvg.applyTo` | Series | Séries | dropdown | enumeration | `all` | `all` All; `primary` Primary Y axis; `named` Named series |  |
| `movingAvg.names` | Series names (separated by ;) | Noms des séries (séparés par ;) | text | text | (empty) |  | Visible when `movingAvg.applyTo` = `named` |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `movingAvg.color` | Color (empty = series color) | Couleur (vide = celle de la série) | color | fill | (empty) | hex color |  |
| `movingAvg.style` | Line style | Style du trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `movingAvg.width` | Width | Épaisseur | number | numeric | `2.5` | 0.5 to 8 |  |
| `movingAvg.dimSource` | Original line opacity (%) | Opacité de la courbe d'origine (%) | number | integer | `40` | 5 to 100 | 100 = original line unchanged; lower, the moving average stands out. |
| `movingAvg.legend` | In the legend | Dans la légende | toggle | bool | `false` | true / false |  |

### Trend ★ / Tendance ★ (`trend`, 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 `trend.show`.

**Calculation / Calcul**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `trend.show` | Show | Afficher | toggle | bool | `false` | true / false | Trend of each series, optionally extended into the future with a forecast interval. |
| `trend.kind` | Type | Type | dropdown | enumeration | `linear` | `linear` Linear; `poly` Polynomial; `exp` Exponential; `log` Logarithmic ★; `power` Power ★; `holt` Exponential smoothing (Holt); `holtWinters` Seasonal (Holt-Winters) |  |
| `trend.degree` | Order | Degré | number | integer | `2` | 2 to 6 | Visible when `trend.kind` = `poly` |
| `trend.season` | Season in periods (0 = automatic) | Saison en périodes (0 = automatique) | number | integer | `0` | 0 to 400 | Visible when `trend.kind` = `holtWinters`. Automatic: 12 for months, 4 for quarters, 7 for days, 52 for weeks. At least two full seasons are needed. |
| `trend.damped` | Damped trend | Tendance amortie | toggle | bool | `false` | true / false | Visible when `trend.kind` = `holt` or `holtWinters`. The slope flattens along the forecast (conservative forecasts). |
| `trend.window` | Fit on the last N points (0 = all) | Calcul sur les N derniers points (0 = tous) | number | integer | `0` | 0 to 100000 |  |
| `trend.applyTo` | Series | Séries | dropdown | enumeration | `all` | `all` All; `primary` Primary Y axis; `named` Named series |  |
| `trend.names` | Series names (separated by ;) | Noms des séries (séparés par ;) | text | text | (empty) |  | Visible when `trend.applyTo` = `named` |

**Forecast / Projection**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `trend.horizon` | Forecast periods | Périodes projetées | number | integer | `0` | 0 to 500 | Number of axis steps added after the last point (months, quarters, days, categories…). 0 = no forecast. |
| `trend.interval` | Forecast interval | Intervalle de prévision | dropdown | enumeration | `80` | `none` None; `80` 80%; `95` 95% |  |
| `trend.bandOpacity` | Interval opacity (%) | Opacité de l'intervalle (%) | number | integer | `14` | 2 to 60 | Visible when `trend.interval` = `80` or `95` |
| `trend.projStyle` | Forecast line style | Style de la projection | dropdown | enumeration | `dotted` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `trend.endValue` | Value at the end of the forecast | Valeur en fin de projection | toggle | bool | `true` | true / false |  |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `trend.color` | Color (empty = series color) | Couleur (vide = celle de la série) | color | fill | (empty) | hex color |  |
| `trend.style` | Line style | Style du trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `trend.width` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `trend.equation` | Equation and R² | Équation et R² | toggle | bool | `false` | true / false | x = period number (1 = first point of the axis). |
| `trend.legend` | In the legend | Dans la légende | toggle | bool | `false` | true / false |  |

### 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 | Shows every series at the hovered date in one tooltip. |

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

- `annotState`: `annotState.offsets` (text), internal state saved by the visual in edit mode (column widths, positions of dragged annotations); leave it alone.
