# Text

Text elements hold the body copy, headings, and captions for a slide. Click **Text** in the top toolbar to insert; the cursor lands ready for typing.

## Text runs

A text element isn't a flat string — it's a list of **runs**. Each run carries its own formatting (font weight, color, italic, underline). This is how you mix bold and regular text in the same line, or color a single word inside a paragraph:

```text
Welcome to ▌Acme Furniture▐ — built for small spaces.
       └ regular run ┘ └ bold run ┘ └ regular run ┘
```

To format part of a text element, **select that text on canvas** and use the inspector's typography controls. The selection becomes its own run. To revert formatting on a run, select it and clear the relevant control (e.g., toggle bold off).

## Inspector

The Text element inspector groups properties into four panels:

### Typography

<!-- omitted: ParamsTable -->

### Color

A single color picker. Hex, RGB, or pick from the deck's theme tokens (the seven color swatches at the top — `bg`, `text`, `accent`, `accent2`, `surface`, `border`, `muted`).

### Alignment

<!-- omitted: ParamsTable -->

### Spacing

<!-- omitted: ParamsTable -->

## "Multiple runs" warning

If you select a text element whose runs have *mixed* formatting (e.g., some bold, some not), the inspector shows a "Multiple runs" warning at the top of the typography panel. Changing a property in this state applies it **uniformly** to every run — this is how you "normalize" mixed formatting to a single style.

To avoid that, select a specific run on canvas before adjusting. The inspector then targets only that run.

## Schema reference

```json title="text-element.json"
{
  "type": "text",
  "position": { "x": 80, "y": 52, "w": 1276, "h": 100 },
  "runs": [
    { "text": "Welcome to ", "fontSize": 56 },
    { "text": "Acme Furniture", "fontSize": 56, "fontWeight": 700 },
    { "text": " — built for small spaces.", "fontSize": 56 }
  ],
  "align": "left",
  "vAlign": "top",
  "lineHeight": 1.2,
  "letterSpacing": -0.5
}
```

<!-- omitted: ParamsTable -->

`TextRun`:

<!-- omitted: ParamsTable -->
