# Shape Gauge 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 Shape Gauge 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/shape-gauge (French: https://plumevisuals.com/fr/visuels/shape-gauge)
- Summary: A drop, a barrel or your logo fills up with color to show a percentage: value and target, one shape per category, your logo.
- Power BI visual GUID (`visualType`): `plumeShapeGaugeF50F8ABFCB9F44309B5AF1FB9BD1EA96`
- 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

Shape Gauge Plume (identifier `shape-gauge`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; AppSource submission in preparation) that turns **any shape into a gauge**: a drop, a barrel, a bottle or a logo fills up with color to show a percentage (e.g. a barrel 50% full of burgundy for 50%). Power BI has no native shape gauge (the native gauge is an arc); Microsoft's old Liquid Fill Gauge (circle only) is no longer in the store.

**New in version 1.1.0.0 (30/10/2026):** Free native-parity addition: **minimum and maximum labels** at the ends of the scale.

- **Percentage** = (value − minimum) / (maximum − minimum). Minimum: `minimum` role, else `scale.min`, else 0. Maximum: `maximum` role, else the `target` role ("Target (100 %)"), else `scale.max`, else automatic: 1 when values are fractions (% format or all between 0 and 1), else the largest value.
- **153 shapes** from the shared Plume library (22 free), including **22 containers** (barrel, bottle, wine glass, glass, mug, jar, bucket, battery, vertical battery, thermometer, test tube, tank, funnel, hourglass, bag, piggy bank, flask, beaker, can, coffee cup, vase, milk carton) that fill **only their inside**; hoops, graduations and sleeves are drawn over the liquid. Own SVG ★ pasted in the pane or returned by a text measure (sanitized).
- **Fill directions**: bottom → top, top → bottom, left → right, right → left, "from the shape" (battery: left → right), circular ★ (start angle, clockwise or not), radial ★. `fill.measure` = `area` ★ makes the filled **area** exactly the percentage.
- Wavy surface, animated fill on opening (900 ms, not on resize), visible overflow above 100% (dome) or cap, two-tone label placed at the widest point of the filled area, target mark with an arrow, tick marks ★, one shape per category in an automatic grid, and the shared **play axis** ★: the shape fills up frame after frame with animated transitions.

## Free vs premium (★)

- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium**.
- Free in Shape Gauge Plume: the 22 free shapes (`circle`, `square`, `roundedSquare`, `rectangle`, `triangle`, `diamond`, `hexagon`, `star`, `heart`, `cloud`, `drop` (default), `bubble`, `arrow`, `person`, `house`, `barrel`, `bottle`, `glass`, `wineGlass`, `thermometer`, `battery`, `batteryVertical`); vertical and horizontal fills (height of the level); single color (also driven by DAX), one color per category; empty part color and opacity, container color, outline; wavy surface; every label option; target, overflow; one shape per category; sort, columns, limit.
- Premium features of Shape Gauge Plume: the 131 other shapes (among them 15 of the 22 containers: mug, jar, bucket, test tube, tank, funnel, hourglass, bag, piggy bank, flask, beaker, can, coffee cup, vase, milk carton); `shape.source` = `svg` and the `shapeSvg` role; `shape.svgPaint` = `original`; `fill.direction` = `circular` or `radial`; `dataColors.mode` = `gradient` or `scale`; `shape.emptyPattern` = `hatch`, `dots` or `grid`; `fill.waveMotion` (only when animations are not reduced); `fill.bubbles` (only for bottom-to-top fills); `layout.mode` = `pictograms`; the `comparison` role with `scale.compareShow`; the `layers` role; since the rebalancing of 22/10/2026: the `play` role (play axis, as soon as it holds data), `dataColors.mode` = `thresholds`, `fill.measure` = `area`, `scale.ticks` (vertical and horizontal fills). A ★ option with no effect shows no watermark (an unreadable SVG falls back to the free drop).
- Without a valid key, a premium feature in use shows, in edit mode, a "Premium preview" note in the footer; in reading view, **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») is repeated lightly across the whole visual, without catching the mouse. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the **first card** of the Format pane. Premium options and list values have " ★" appended to their label.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `shape-gauge` or the whole catalog. In edit mode, a wrong key shows "Invalid license key", "License expired (date)" or "This key does not cover this visual".
- Licenses last one year (one-time payment, no automatic renewal, key accepted for 30 more days, reminders 30 and 7 days before the end). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack (199 € / 399 € / 1,199 € per year; tiers by number of users: personal 1–10, SME 11–200, enterprise more than 200).

## Expected data shape

One row per category (and per play-axis value), with measures.

| Category (`category`) | Play axis (`play`) | Value (`value`) | Target (`target`) |
|---|---|---|---|
| West | 2024 | 410,000 | 600,000 |
| West | 2025 | 520,000 | 600,000 |

- **Category (one shape each)** (`category`, « Catégorie (une forme chacune) », one column): one shape per value; click = cross-filter. At most `layout.maxItems` shapes (60, up to 200); a note says so in edit mode.
- **Play axis ★** (`play`, « Axe de lecture ★ », one column, premium): date, year or ordered category; one frame per value. Clicking a shape selects the category only.
- **Value** (`value`, « Valeur », one measure): required unless Stacked layers are used.
- **Target (100 %)** (`target`, « Objectif (100 %) »): the value of a full shape; with `maximum` (or `scale.max`), drawn as a target mark instead.
- **Minimum** (`minimum`), **Maximum** (`maximum`): the empty and full values.
- **Comparison (previous period) ★** (`comparison`): ghost level and the change in points (▲ +8 pts).
- **Stacked layers ★** (`layers`, up to 8 measures): stacked in the shape, one color each, with a legend; their sum is the level.
- **SVG shape (measure) ★** (`shapeSvg`, text measure): SVG markup, data URI or a bare path `d`; one shape per category.
- **Tooltips** (`tooltips`) and **Dynamic format** (`format`, see below).
- Volume of data: windows of 30,000 rows, more fetched with `fetchMoreData` up to 100,000 rows; 100,004 categories render the first 60 shapes in a few seconds.

## DAX recipes

```dax
// Value and target: the shape is full when Revenue = Target
Revenue = SUM ( Sales[Amount] )
Target = SUM ( Sales[Target amount] )

// A ratio can go straight into Value (0.62 = 62%, no target needed)
Achievement = DIVIDE ( [Revenue], [Target] )

// Comparison ★
Prior-year revenue = CALCULATE ( [Revenue], SAMEPERIODLASTYEAR ( Dates[Date] ) )

// SVG shape per product ★ (text measure in the "SVG shape (measure)" well)
Product shape = SWITCH ( SELECTEDVALUE ( Products[Name] ), "Bike", "<svg viewBox='0 0 24 24'><path d='M2 20h20L12 2z'/></svg>", BLANK () )
```

## Interactions with the report

- Click a shape: cross-filter on its category; Ctrl for several; click the empty area to clear. Cross-highlighting from other visuals fills the highlighted part and keeps the full value as a light ghost level. Context menu everywhere (shapes, empty area, title, landing page).
- Hover: Power BI tooltip (category, frame, value, percentage, layers, full and empty values, target, comparison and change, threshold, Tooltips measures); report-page tooltips are supported.
- Play axis: play / pause, slider, speed ×0.5 to ×4, loop, start / end buttons, current frame in large type; keyboard in the play bar: Space, ← →, Page Up / Down, Home / End. Frame, play state and speed are per session (never saved).
- Keyboard on the shapes: Tab, arrows, Home / End, Enter selects, Esc clears; each shape is announced ("West: 62% (520,000)"). High contrast (host colors, no gradient, haloed label), "Reduce motion" respected (no fill animation, no moving wave), French and English.

## Dynamic formats

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

```dax
// renamed dataColors.single
Result color = IF ( DIVIDE ( [Revenue], [Target] ) >= 0.8, "#2E7D4F", "#C0392B" )
// renamed title.text
Dynamic title = "Target achieved at " & FORMAT ( DIVIDE ( [Revenue], [Target] ), "0%" )
```

## Format pane: option IDs

- Card order: `license`, `style`, `dataColors`, `shape`, `fill`, `labels`, `scale`, `layout`, `legend` (with 2+ layers), `play` (« Lecture ★ », with a play axis), `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `layout`, `dataColors`, `shape`, `fill`, `labels`, `scale`, `legend`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `dataColors`: `mode` (`single` | `category` | `thresholds` ★ | `gradient` ★ | `scale` ★), `single`, `fill` (per category or per layer), `color2`, `color3`, `t1` (50), `t2` (80), `cLow`, `cMid` (#B26B00), `cHigh`, `lowerBetter`.
- `shape`: `source` (`library` | `svg` ★), `shape` (153 IDs, default `drop`; containers `barrel`, `bottle`, `wineGlass`, `glass`, `mug`, `jar`, `bucket`, `battery`, `batteryVertical`, `thermometer`, `testTube`, `tank`, `funnel`, `hourglass`, `bag`, `piggyBank`, `flask`, `beaker`, `can`, `coffeeCup`, `vase`, `milkCarton`), `svg` (text), `svgPaint` (`fill` | `original` ★), `fillArea` (`inner` | `whole`), `fit` (`contain` | `stretch`), `emptyColor`, `emptyOpacity` (0–100, 100), `emptyPattern` (`none` | `hatch` ★ | `dots` ★ | `grid` ★), `bodyColor`, `outline` (on), `outlineColor`, `outlineWidth` (0.5–8, 1.5).
- `fill`: `direction` (`auto` | `up` | `down` | `right` | `left` | `circular` ★ | `radial` ★), `startAngle` (−360–360, 0 = 12 o'clock), `clockwise` (on), `measure` (`level` | `area` ★), `overflow` (`show` | `cap`), `wave` (on), `waveHeight` (1–12, 3), `waveMotion` ★, `waveSpeed` (1–20 s, 4), `bubbles` ★, `grow` (on), `duration` (100–5000 ms, 900).
- `labels`: `show`, `content` (`percent` | `value` | `percentValue` | `valuePercent` | `valueTarget`), `position` (`center` | `level` | `below` | `above`), `autoSize` (on), `fontSize` (24), `color`, `bold` (on), `pctDecimals` (0–4, 0), `delta` (on), `units`, `decimals`, `prefix`, `suffix`, `catShow` (on), `catPosition` (`below` | `above`), `catSize` (12), `catColor`.
- `scale`: `min`, `max` (text), `ticks` ★ (off), `tickStep` (5–50 %, 25), `targetShow` (on), `targetValue` (text), `targetLabel`, `targetColor`, `targetStyle` (`solid` | `dashed` | `dotted`), `compareShow` ★ (on), `compareColor`.
- `layout`: `mode` (`multiples` | `pictograms` ★), `units` (2–50, 10), `unitsPerRow` (0 = auto), `columns` (0 = auto), `gap` (0–80 px, 16), `sort` (`data` | `desc` | `asc` | `name`), `maxItems` (1–200, 60).
- `play` (shared player, ★ as a whole): `start` (`last` | `first`), `speed` (100–10000 ms, 1000), `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel`, `labelSize` (36), `labelPosition` (`topRight`). `interaction`: `hover`, `dim` (5–80, 25).

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs. Booleans `true` / `false`, numbers suffixed with `D`, strings and enumeration values in single quotes; colors as `{ "solid": { "color": … } }`.

```json
{
  "visualType": "plumeShapeGaugeF50F8ABFCB9F44309B5AF1FB9BD1EA96",
  "query": {
    "queryState": {
      "category": { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Region" } }, "queryRef": "Sales.Region", "nativeQueryRef": "Region" } ] },
      "value":    { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] },
      "target":   { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Target" } }, "queryRef": "Sales.Target", "nativeQueryRef": "Target" } ] }
    }
  },
  "objects": {
    "shape":      [ { "properties": { "shape": { "expr": { "Literal": { "Value": "'barrel'" } } } } } ],
    "dataColors": [ { "properties": { "single": { "solid": { "color": { "expr": { "Literal": { "Value": "'#7B1E2B'" } } } } } } } ],
    "license":    [ { "properties": { "key": { "expr": { "Literal": { "Value": "'PLUM1.…'" } } } } } ]
  }
}
```

The custom visual package must also be embedded in the report (Power BI does this when the visual is imported from the `.pbiviz` file).

## Styles and theme JSON

- `style.preset` takes one of the 20 style IDs shared by every Plume visual: `none`, `minimal`, `blackWhite`, `press`, `vintage`, `earth`, `nordic`, `executive`, `accessible`, `pastel`, `bauhaus`, `climate`, `blueprint`, `unknownPleasures`, `dark`, `neon`, `terminal`, `infographic`, `cockpit`, `hologram`. The style's first series color is the default fill; thresholds use the style's favorable / unfavorable colors; `minimal`, `unknownPleasures` and `blueprint` turn the wave off.
- `style.themeJson` (Theme JSON ★): a JSON theme as plain text (format v2 with optional `extends` and groups `colors`, `palettes`, `typography`, `shape`, `table`, `marks`, `effects`). Full reference: https://plumevisuals.com/ai/tutorials/en/themes-json.md.

## Common pitfalls

- The shape is always full: a single value with no target or maximum (the largest value is 100%); add the Target or `scale.max`.
- "—" instead of a percentage: the Value measure is blank for that category or frame.
- Empty shape with a negative label: the value is below the minimum.
- A dome above the shape: the value is above 100% (`fill.overflow` = `cap` to remove it).
- The play-axis year shows as "2,024": the column format has a thousands separator.
- Only 60 shapes: `layout.maxItems`.
- Watermark visible: a ★ shape, SVG, circular or radial fill, gradient or palette color, pattern, moving wave, bubbles, pictograms, comparison, layers, a ★ style or a theme JSON, without a valid key.
- An SVG is ignored ("Library shape used instead" in edit mode): unreadable or empty SVG; scripts, images, links and web addresses are always removed.
- The visual makes no network request: data, SVG and license key stay in the report.

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

Filling a PNG or JPEG image (only shapes and SVG paths), loading an SVG from a web address, several values per shape other than stacked layers, liquid physics (tilt, sloshing), 3D shapes, a native gauge arc with a needle (use a circular fill instead), exporting the shape as an image.

## Data fields (wells)

Internal name = data role name (PBIP `queryState` key). Labels as shown in Power BI (English / French). ★ = premium.

| Internal name | Label (EN) | Label (FR) | Kind | Max fields | Description |
|---|---|---|---|---|---|
| `category` | Category (one shape each) | Catégorie (une forme chacune) | column | 1 | One shape per value of the field (region, product, team…). |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | A date, a year or an ordered category: the visual moves from one value to the next (play button) |
| `value` | Value | Valeur | measure | 1 | The value that fills the shape. |
| `target` | Target (100 %) | Objectif (100 %) | measure | 1 | Value of a full shape: percentage = value / target. With Maximum as well, the target is drawn as a mark. |
| `minimum` | Minimum | Minimum | measure | 1 | Value of an empty shape (0 by default). |
| `maximum` | Maximum | Maximum | measure | 1 | Value of a full shape (otherwise the target, else automatic). |
| `comparison` | Comparison (previous period) ★ | Comparaison (période précédente) ★ | measure | 1 | Drawn as a ghost level with the change in points (previous year, budget…). |
| `layers` | Stacked layers ★ | Couches empilées ★ | measure | 8 | Several measures stacked in the shape, one color each (their sum fills the shape). |
| `shapeSvg` | SVG shape (measure) ★ | Forme SVG (mesure) ★ | measure | 1 | Text measure returning SVG markup (or a path d): one shape per category, sanitized, never loaded from the web. |
| `tooltips` | Tooltips | Infobulles | measure | several |  |
| `format` | Dynamic format | Format dynamique | measure | several | Measures named card.setting (e.g. title.fontSize): drive any Format option with DAX |

Data view: categorical, categories = `category` + `play` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `value`, `target`, `minimum`, `maximum`, `comparison`, `layers`, `shapeSvg`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (165)

Columns: option ID (`object.property`), labels EN / FR as shown in Power BI, control type, PBIP literal type, default value, allowed values, notes.

### Plume Studio License / Licence Plume Studio (`license`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `license.buy` | Get a license | Obtenir une licence | info | text | `plumevisuals.com` |  |  |
| `license.key` | License key | Clé de licence | text | text | (empty) |  | Paste the key received after purchase on plumevisuals.com (starts with PLUM1.). Checked offline. |
| `license.showOwner` | Show license holder (edit mode) | Afficher le titulaire (mode édition) | toggle | bool | `true` | true / false |  |

### Style (`style`, Format pane)

**Style**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.preset` | Style | Style | dropdown | enumeration | `none` | `none` None; `minimal` Minimal; `blackWhite` Black & White; `press` Newspaper ★; `vintage` Vintage (antique plate) ★; `earth` Earth ★; `nordic` Nordic ★; `executive` Executive ★; `accessible` Accessible (high legibility) ★; `pastel` Pastel ★; `bauhaus` Bauhaus (pop) ★; `climate` Climate ★; `blueprint` Blueprint ★; `unknownPleasures` Unknown Pleasures ★; `dark` Graphite (dark) ★; `neon` Neon ★; `terminal` Terminal (Matrix) ★; `infographic` Infographic ★; `cockpit` Cockpit (HUD) ★; `hologram` Hologram ★ | Complete look shared by all Plume visuals: colors, three palettes, fonts, frame, table header, marks and effects. Customize colors below. |
| `style.themeJson` | Theme JSON ★ | Thème JSON ★ | textarea | text | (empty) |  | Paste a JSON theme: see the 'JSON themes' tutorial on plumevisuals.com |
| `style.followTheme` | Follow report theme | Suivre le thème du rapport | toggle | bool | `false` | true / false | Text, background, accent and data colors come from the Power BI report theme. |
| `style.reverse` | Reverse gradients | Inverser les dégradés | toggle | bool | `false` | true / false |  |

**Custom colors / Couleurs personnalisées**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.customColors` | Customize colors | Personnaliser les couleurs | toggle | bool | `false` | true / false | Start from the style and pick your own colors. A color left empty keeps the style's color. |
| `style.colorBackground` | Background | Fond | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorText` | Text | Texte | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorMuted` | Secondary text | Texte secondaire | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorGrid` | Lines and grid | Traits et grille | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorAccent` | Accent | Accent | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorPositive` | Favorable | Favorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorNegative` | Unfavorable | Défavorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series1` | Series 1 | Série 1 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series2` | Series 2 | Série 2 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series3` | Series 3 | Série 3 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series4` | Series 4 | Série 4 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series5` | Series 5 | Série 5 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series6` | Series 6 | Série 6 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series7` | Series 7 | Série 7 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series8` | Series 8 | Série 8 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.palette` | Gradient palette | Palette du dégradé | dropdown | enumeration | `auto` | `auto` Style or theme palette; `crest` Plume (sequential); `crestDiverging` Plume (diverging); `viridis` Viridis ★; `magma` Magma ★; `inferno` Inferno ★; `cividis` Cividis (colorblind-safe) ★; `warmingStripes` Warming stripes ★; `rdYlBu` Red–Yellow–Blue ★; `brBG` Brown–Teal (drought) ★; `spectral` Spectral ★; `blues` Blues ★; `reds` Reds ★; `grays` Grays ★; `press` Press (ink and paper) ★; `nordic` Nordic ★; `earth` Earth (ochre to umber) ★; `pastel` Pastel ★; `okabeIto` Okabe-Ito (colorblind-safe) ★ | Visible when `style.customColors` = `true`. Gradient from the catalog (Viridis, Magma…). The start, middle and end colors below replace it. |
| `style.scaleLow` | Gradient: start | Dégradé : début | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleMid` | Gradient: middle (diverging) | Dégradé : milieu (écarts) | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleHigh` | Gradient: end | Dégradé : fin | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |

**Text / Texte**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.fontFamily` | Font | Police | font | formatting | `Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif` |  | Used by every text of the visual (title, axes, labels, cells). |

**Animations**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.animate` | Animations | Animations | toggle | bool | `true` | true / false | Smooth transitions when data changes. Automatically disabled when the system asks to reduce motion. |

### Layout / Disposition (`layout`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.mode` | Presentation | Présentation | dropdown | enumeration | `multiples` | `multiples` One shape per category; `pictograms` Pictograms (n shapes = 100%) ★ |  |
| `layout.units` | Number of pictograms | Nombre de pictogrammes | number | integer | `10` | 2 to 50 | Visible when `layout.mode` = `pictograms` |
| `layout.unitsPerRow` | Pictograms per row (0 = auto) | Pictogrammes par ligne (0 = auto) | number | integer | `0` | 0 to 50 | Visible when `layout.mode` = `pictograms` |
| `layout.columns` | Columns (0 = auto) | Colonnes (0 = auto) | number | integer | `0` | 0 to 30 |  |
| `layout.gap` | Gap between shapes (px) | Espace entre les formes (px) | number | integer | `16` | 0 to 80 |  |
| `layout.sort` | Order | Ordre | dropdown | enumeration | `data` | `data` Data order; `desc` Percentage descending; `asc` Percentage ascending; `name` Alphabetical |  |
| `layout.maxItems` | Shapes at most | Formes au plus | number | integer | `60` | 1 to 200 | 60 by default, 200 at most. Beyond, a note under the shapes says how many are shown. |

### 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 | `single` | `single` Single color; `category` One color per category; `thresholds` By thresholds (unfavorable, middle, favorable) ★; `gradient` Gradient along the fill ★; `scale` Color by percentage (palette) ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.color2` | Gradient end (empty = accent) | Fin du dégradé (vide = accent) | color | fill | (empty) | hex color |  |
| `dataColors.color3` | Gradient middle (optional) | Milieu du dégradé (optionnel) | color | fill | (empty) | hex color |  |
| `dataColors.t1` | Threshold 1 (%) | Seuil 1 (%) | number | numeric | `50` | -1000 to 1000 |  |
| `dataColors.t2` | Threshold 2 (%) | Seuil 2 (%) | number | numeric | `80` | -1000 to 1000 |  |
| `dataColors.cLow` | Below threshold 1 | Sous le seuil 1 | color | fill | `#C0392B` | hex color |  |
| `dataColors.cMid` | Between thresholds | Entre les seuils | color | fill | `#B26B00` | hex color |  |
| `dataColors.cHigh` | Above threshold 2 | Au-dessus du seuil 2 | color | fill | `#2E7D4F` | hex color |  |
| `dataColors.lowerBetter` | Lower is better (swaps the colors) | Plus bas = mieux (inverse les couleurs) | toggle | bool | `false` | true / false |  |

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

**Shape / Forme**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `shape.source` | Source | Source | dropdown | enumeration | `library` | `library` Plume library (153 shapes); `svg` Pasted SVG ★ | The "SVG shape (measure)" field wins when it is filled (one shape per category). |
| `shape.shape` | Shape | Forme | dropdown | enumeration | `drop` | `barrel` Containers and gauges · Barrel; `bottle` Containers and gauges · Bottle; `wineGlass` Containers and gauges · Wine glass; `glass` Containers and gauges · Glass; `mug` Containers and gauges · Mug ★; `jar` Containers and gauges · Jar ★; `bucket` Containers and gauges · Bucket ★; `battery` Containers and gauges · Battery; `batteryVertical` Containers and gauges · Vertical battery; `thermometer` Containers and gauges · Thermometer; `testTube` Containers and gauges · Test tube ★; `tank` Containers and gauges · Tank ★; `funnel` Containers and gauges · Funnel ★; `hourglass` Containers and gauges · Hourglass ★; `bag` Containers and gauges · Bag ★; `piggyBank` Containers and gauges · Piggy bank ★; `flask` Containers and gauges · Flask ★; `beaker` Containers and gauges · Beaker ★; `can` Containers and gauges · Can ★; `coffeeCup` Containers and gauges · Coffee cup ★; `vase` Containers and gauges · Vase ★; `milkCarton` Containers and gauges · Milk carton ★; `circle` Basic · Circle; `square` Basic · Square; `roundedSquare` Basic · Rounded square; `rectangle` Basic · Rectangle; `triangle` Basic · Triangle; `diamond` Basic · Diamond; `hexagon` Basic · Hexagon; `star` Basic · Star; `heart` Basic · Heart; `ellipse` Basic · Ellipse ★; `pentagon` Basic · Pentagon ★; `octagon` Basic · Octagon ★; `rightTriangle` Basic · Right triangle ★; `parallelogram` Basic · Parallelogram ★; `trapezoid` Basic · Trapezoid ★; `ring` Basic · Ring ★; `semicircle` Basic · Semicircle ★; `arch` Basic · Arch ★; `capsule` Basic · Pill ★; `star6` Basic · Six-pointed star ★; `seal` Basic · Seal ★; `cross` Basic · Cross ★; `arrow` Arrows and symbols · Arrow; `arrowUp` Arrows and symbols · Arrow up ★; `arrowDown` Arrows and symbols · Arrow down ★; `arrowLeft` Arrows and symbols · Arrow left ★; `doubleArrow` Arrows and symbols · Double arrow ★; `chevron` Arrows and symbols · Chevron ★; `check` Arrows and symbols · Check mark ★; `close` Arrows and symbols · Close (X) ★; `plus` Arrows and symbols · Plus ★; `minus` Arrows and symbols · Minus ★; `warning` Arrows and symbols · Warning ★; `info` Arrows and symbols · Information ★; `playButton` Arrows and symbols · Play button ★; `bubble` Arrows and symbols · Speech bubble; `thought` Arrows and symbols · Thought bubble ★; `flag` Arrows and symbols · Flag ★; `bookmark` Arrows and symbols · Bookmark ★; `tag` Arrows and symbols · Tag ★; `bolt` Arrows and symbols · Lightning bolt ★; `shield` Arrows and symbols · Shield ★; `award` Arrows and symbols · Award ★; `puzzle` Arrows and symbols · Puzzle piece ★; `gear` Arrows and symbols · Gear ★; `lock` Arrows and symbols · Lock ★; `key` Arrows and symbols · Key ★; `bell` Arrows and symbols · Bell ★; `eye` Arrows and symbols · Eye ★; `cloud` Nature and weather · Cloud; `drop` Nature and weather · Drop; `sun` Nature and weather · Sun ★; `moon` Nature and weather · Moon ★; `snowflake` Nature and weather · Snowflake ★; `leaf` Nature and weather · Leaf ★; `pine` Nature and weather · Pine tree ★; `tree` Nature and weather · Tree ★; `flower` Nature and weather · Flower ★; `mountain` Nature and weather · Mountain ★; `wave` Nature and weather · Wave ★; `flame` Nature and weather · Flame ★; `umbrella` Nature and weather · Umbrella ★; `apple` Nature and weather · Apple ★; `fish` Nature and weather · Fish ★; `paw` Nature and weather · Paw print ★; `rain` Nature and weather · Rain ★; `sprout` Nature and weather · Sprout ★; `person` People · Person; `man` People · Man ★; `woman` People · Woman ★; `child` People · Child ★; `people` People · Group of people ★; `bust` People · User bust ★; `house` Objects and buildings · House; `building` Objects and buildings · Office building ★; `factory` Objects and buildings · Factory ★; `castle` Objects and buildings · Castle ★; `shop` Objects and buildings · Shop ★; `bank` Objects and buildings · Bank ★; `hospital` Objects and buildings · Hospital ★; `book` Objects and buildings · Book ★; `envelope` Objects and buildings · Envelope ★; `phone` Objects and buildings · Phone ★; `laptop` Objects and buildings · Laptop ★; `monitor` Objects and buildings · Monitor ★; `gift` Objects and buildings · Gift ★; `clock` Objects and buildings · Clock ★; `calendar` Objects and buildings · Calendar ★; `pencil` Objects and buildings · Pencil ★; `lightbulb` Objects and buildings · Light bulb ★; `cup` Objects and buildings · Trophy ★; `crown` Objects and buildings · Crown ★; `trashCan` Objects and buildings · Trash can ★; `france` Maps and places · Metropolitan France ★; `africa` Maps and places · Africa ★; `australia` Maps and places · Australia ★; `southAmerica` Maps and places · South America ★; `pin` Maps and places · Map pin ★; `globe` Maps and places · Globe ★; `foldedMap` Maps and places · Folded map ★; `compass` Maps and places · Compass ★; `city` Maps and places · City skyline ★; `target` Business · Target ★; `barChart` Business · Bar chart ★; `pieChart` Business · Pie chart ★; `trendUp` Business · Trend up ★; `coin` Business · Coin ★; `banknote` Business · Banknote ★; `wallet` Business · Wallet ★; `creditCard` Business · Credit card ★; `cart` Business · Shopping cart ★; `briefcase` Business · Briefcase ★; `percent` Business · Percent ★; `podium` Business · Podium ★; `megaphone` Business · Megaphone ★; `gem` Business · Gem ★; `medal` Business · Medal ★; `clipboard` Business · Clipboard ★; `handshake` Business · Handshake ★; `car` Transport · Car ★; `truck` Transport · Truck ★; `bus` Transport · Bus ★; `bicycle` Transport · Bicycle ★; `plane` Transport · Plane ★; `boat` Transport · Sailboat ★; `train` Transport · Train ★; `rocket` Transport · Rocket ★; `helicopter` Transport · Helicopter ★; `ship` Transport · Cargo ship ★; `fuel` Transport · Fuel pump ★; `scooter` Transport · Scooter ★ | Visible when `shape.source` = `library`. Containers (barrel, wine glass, thermometer…) only fill their inside. |
| `shape.svg` | SVG code | Code SVG | textarea | text | (empty) |  | Visible when `shape.source` = `svg`. <svg> markup, data URI or a bare d attribute. Sanitized (no script, no image, no web address). |
| `shape.svgPaint` | SVG colors | Couleurs du SVG | dropdown | enumeration | `fill` | `fill` Fill color; `original` Original colors (logo) ★ | Original colors: the filled part keeps the logo colors, the empty part is grayed out. |
| `shape.fillArea` | Filled area | Zone remplie | dropdown | enumeration | `inner` | `inner` Inside of the container; `whole` Whole shape |  |
| `shape.fit` | Fit | Cadrage | dropdown | enumeration | `contain` | `contain` Keep proportions; `stretch` Stretched |  |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `shape.emptyColor` | Empty part (empty = tint of the fill) | Partie vide (vide = teinte du remplissage) | color | fill | (empty) | hex color |  |
| `shape.emptyOpacity` | Empty part opacity (%) | Opacité de la partie vide (%) | number | integer | `100` | 0 to 100 |  |
| `shape.emptyPattern` | Empty part pattern | Motif de la partie vide | dropdown | enumeration | `none` | `none` None; `hatch` Hatching ★; `dots` Dots ★; `grid` Grid ★ |  |
| `shape.bodyColor` | Container (empty = style gray) | Récipient (vide = gris du style) | color | fill | (empty) | hex color |  |
| `shape.outline` | Outline | Contour | toggle | bool | `true` | true / false |  |
| `shape.outlineColor` | Outline color (empty = fill) | Couleur du contour (vide = remplissage) | color | fill | (empty) | hex color | Visible when `shape.outline` = `true` |
| `shape.outlineWidth` | Outline width | Épaisseur du contour | number | numeric | `1.5` | 0.5 to 8 | Visible when `shape.outline` = `true` |

### Fill / Remplissage (`fill`, Format pane)

**Direction / Sens**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `fill.direction` | Fill direction | Sens du remplissage | dropdown | enumeration | `auto` | `auto` From the shape (bottom → top; battery: left → right); `up` Vertical, bottom → top; `down` Vertical, top → bottom; `right` Horizontal, left → right; `left` Horizontal, right → left; `circular` Circular (start angle) ★; `radial` Radial (from the center) ★ |  |
| `fill.startAngle` | Start angle (°, 0 = 12 o'clock) | Angle de départ (°, 0 = midi) | number | integer | `0` | -360 to 360 | Visible when `fill.direction` = `circular` |
| `fill.clockwise` | Clockwise | Sens des aiguilles d'une montre | toggle | bool | `true` | true / false | Visible when `fill.direction` = `circular` |
| `fill.measure` | The percentage sets | Le pourcentage donne | dropdown | enumeration | `level` | `level` The level height; `area` The filled area (exact) ★ | Exact area: 25% really fills a quarter of the shape's surface (round bottom of a drop, neck of a bottle…). |
| `fill.overflow` | Above 100% | Au-delà de 100 % | dropdown | enumeration | `show` | `show` Visible overflow; `cap` Capped at 100% |  |

**Surface and animation / Surface et animation**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `fill.wave` | Wavy surface | Surface en vague | toggle | bool | `true` | true / false |  |
| `fill.waveHeight` | Wave height | Hauteur de la vague | number | integer | `3` | 1 to 12 | Visible when `fill.wave` = `true` |
| `fill.waveMotion` | Moving wave ★ | Vague animée ★ | toggle | bool | `false` | true / false | Visible when `fill.wave` = `true`. Never when animations are reduced (Style › Animations or the system). |
| `fill.waveSpeed` | Wave period (s) | Durée d'une vague (s) | number | integer | `4` | 1 to 20 | Visible when `fill.wave` = `true` |
| `fill.bubbles` | Bubbles ★ | Bulles ★ | toggle | bool | `false` | true / false |  |
| `fill.grow` | Animated fill on opening | Remplissage animé à l'ouverture | toggle | bool | `true` | true / false | When data changes (not on resize). Turned off by Style › Animations. |
| `fill.duration` | Fill duration (ms) | Durée du remplissage (ms) | number | integer | `900` | 100 to 5000 | Visible when `fill.grow` = `true` |

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

The card header toggle is `labels.show`.

**Label / Étiquette**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `labels.content` | Content | Contenu | dropdown | enumeration | `percent` | `percent` Percentage; `value` Value; `percentValue` Percentage and value; `valuePercent` Value and percentage; `valueTarget` Value / target |  |
| `labels.position` | Position | Position | dropdown | enumeration | `center` | `center` Center of the shape; `level` At the fill level; `below` Below the shape; `above` Above the shape |  |
| `labels.autoSize` | Automatic size | Taille automatique | toggle | bool | `true` | true / false |  |
| `labels.fontSize` | Text size | Taille du texte | number | formatting | `24` | 6 to 120 | Visible when `labels.autoSize` = `false` |
| `labels.color` | Color (empty = automatic) | Couleur (vide = automatique) | color | fill | (empty) | hex color | Automatic: style text, light over the filled part (two colors). |
| `labels.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `labels.pctDecimals` | Percentage decimals | Décimales du pourcentage | number | integer | `0` | 0 to 4 |  |
| `labels.delta` | Change vs comparison (▲▼ points) | Écart à la comparaison (▲▼ points) | 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) |  |  |

**Category names / Nom des catégories**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.catShow` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `labels.catPosition` | Position | Position | dropdown | enumeration | `below` | `below` Below the shape; `above` Above the shape | Visible when `labels.catShow` = `true` |
| `labels.catSize` | Text size | Taille du texte | number | formatting | `12` | 6 to 40 | Visible when `labels.catShow` = `true` |
| `labels.catColor` | Color (empty = secondary) | Couleur (vide = secondaire) | color | fill | (empty) | hex color | Visible when `labels.catShow` = `true` |

### Scale and target / Échelle et objectif (`scale`, Format pane)

**Range / Échelle**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `scale.min` | Minimum (empty shape) | Minimum (forme vide) | text | text | (empty) |  | The Minimum field wins. |
| `scale.max` | Maximum (full shape) | Maximum (forme pleine) | text | text | (empty) |  | The Maximum field, then the Target field win. Automatic: 1 when values are percentages (0 to 1), else the largest value. |
| `scale.ticks` | Tick marks ★ | Graduations ★ | toggle | bool | `false` | true / false | Along vertical and horizontal directions (not circular, radial or pictograms). |
| `scale.tickStep` | Tick step (%) | Pas des graduations (%) | number | integer | `25` | 5 to 50 | Visible when `scale.ticks` = `true` |
| `scale.minMax` | Minimum and maximum labels | Étiquettes du minimum et du maximum | toggle | bool | `false` | true / false | Values of the empty and the full shape, at the ends of the scale (like the data labels of the native gauge). No effect with tick marks. |

**Target / Objectif**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `scale.targetShow` | Target mark | Trait d'objectif | toggle | bool | `true` | true / false | With the Target field and a maximum (field or value), or a fixed value below. |
| `scale.targetValue` | Fixed target (value) | Objectif fixe (valeur) | text | text | (empty) |  | Visible when `scale.targetShow` = `true` |
| `scale.targetLabel` | Label | Libellé | text | text | (empty) |  | Visible when `scale.targetShow` = `true` |
| `scale.targetColor` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | Visible when `scale.targetShow` = `true` |
| `scale.targetStyle` | Line style | Style du trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `scale.targetShow` = `true` |

**Comparison / Comparaison**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `scale.compareShow` | Ghost level of the comparison ★ | Niveau fantôme de la comparaison ★ | toggle | bool | `true` | true / false | With the Comparison field (previous period, budget…). |
| `scale.compareColor` | Color (empty = secondary) | Couleur (vide = secondaire) | color | fill | (empty) | hex color | Visible when `scale.compareShow` = `true` |

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

### 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 | `1000` | 100 to 10000 | At speed ×1; the speed button of the play bar multiplies it (×0.5 to ×4) for the session. |
| `play.loop` | Loop | Lecture en boucle | toggle | bool | `false` | true / false |  |
| `play.autoPlay` | Play automatically on opening | Lecture automatique à l'ouverture | toggle | bool | `false` | true / false | Once, from the first frame. Not when animations are reduced (Style › Animations or the system) nor on a dashboard tile. |
| `play.transition` | Animated transitions | Transitions animées | toggle | bool | `true` | true / false | Values, positions and colors move smoothly from one frame to the next. |

**Play 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 | `true` | true / false |  |
| `play.position` | Bar position | Position de la barre | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top | Visible when `play.controls` = `true` |
| `play.ticks` | Tick marks | Graduations | dropdown | enumeration | `auto` | `auto` Automatic; `all` Every frame; `none` None | Visible when `play.controls` = `true` |
| `play.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.stepButtons` | Start and end buttons | Boutons début et fin | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.speedButton` | Speed button | Bouton de vitesse | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |

**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 | `true` | true / false |  |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `36` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `topRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |

### Interactions (`interaction`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `interaction.hover` | Highlight on hover | Mettre en avant au survol | toggle | bool | `true` | true / false |  |
| `interaction.dim` | Dimmed items opacity (%) | Opacité des éléments estompés (%) | number | integer | `25` | 5 to 80 |  |

### Tooltips / Infobulles (`tooltip`, Format pane)

The card header toggle is `tooltip.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `tooltip.show` | Show | Afficher | toggle | bool | `true` | true / false | Tooltip on hover (with the fields of the "Tooltips" well and report page tooltips). |

### Title / Titre (`title`, Format pane)

The card header toggle is `title.show`.

**Title / Titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `title.text` | Text | Texte | text | text | (empty) |  | Leave empty for an automatic title built from the fields. |
| `title.fontSize` | Size | Taille | number | formatting | `14` | 7 to 40 |  |
| `title.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `title.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `title.underline` | Underline | Souligné | toggle | bool | `false` | true / false |  |
| `title.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `title.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color |  |
| `title.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |
| `title.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false |  |

**Subtitle / Sous-titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.subtitle` | Subtitle | Sous-titre | text | text | (empty) |  | Several lines allowed: type \n to go to the next line. |
| `title.subFontSize` | Size | Taille | number | formatting | `11` | 7 to 30 | Visible when `title.subtitle` =  |
| `title.subColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `title.subtitle` =  |
| `title.subItalic` | Italic | Italique | toggle | bool | `false` | true / false | Visible when `title.subtitle` =  |

**Divider / Séparateur**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false |  |
| `title.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `title.divider` = `true` |
| `title.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `title.divider` = `true` |
| `title.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `title.divider` = `true` |

**Spacing / Espacement**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.spaceBelow` | Space below the title (px) | Espace sous le titre (px) | number | integer | `4` | 0 to 40 |  |

### Source note / Note de source (`source`, Format pane)

The card header toggle is `source.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `source.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `source.text` | Text | Texte | text | text | (empty) |  |  |
| `source.fontSize` | Size | Taille | number | formatting | `9` | 6 to 20 |  |
| `source.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `source.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `source.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |

### Frame / Cadre (`container`, Format pane)

**Background / Arrière-plan**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.bgShow` | Background | Arrière-plan | toggle | bool | `false` | true / false |  |
| `container.bgColor` | Color | Couleur | color | fill | `#FFFFFF` | hex color | Visible when `container.bgShow` = `true` |
| `container.bgColor2` | Gradient end (optional) | Fin du dégradé (optionnel) | color | fill | (empty) | hex color | Visible when `container.bgShow` = `true` |
| `container.bgTransparency` | Transparency (%) | Transparence (%) | slider | numeric | `0` | 0 to 100 | Visible when `container.bgShow` = `true` |

**Border / Bordure**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `false` | true / false |  |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 |  |

**Shadow / Ombre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false |  |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |

**Spacing / Marges**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `8` | 0 to 40 |  |

### Language and numbers / Langue et nombres (`texts`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English |  |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) |  | Thousands and decimal separators. Empty: same as Power BI. |
