---
name: presentation-themes
description: Engine substrate — theme registry for create_presentation. Not injected into agent prompts. Tuning happens in config/themes.yaml.
title: Presentation Themes
category: _meta
status: active
author: system
metadata:
  priority: 0
---
## Purpose

This skill is the engine substrate for visual themes applied by the
`create_presentation` tool. It is **not** a behavioral skill — the
agent never reads this body directly. The `_exec_create_presentation`
engine function reads `config/themes.yaml` at render time via
`SkillLoader.get_skill_config("presentation-themes", "themes")`.

## How it works

When a user-facing skill (e.g. `presentation-minimalist`) tells the
agent to call `create_presentation(theme="minimalist", ...)`, the
engine:

1. Resolves the named theme from `config/themes.yaml`.
2. Falls back to the legacy untheme rendering path when theme is
   missing, empty, `"default"`, or not found in the registry — zero
   regression for callers that don't pass a theme.
3. Applies canvas, colors, fonts, sizes, and layout flags
   deterministically via python-pptx.

## Adding a new theme

Edit `config/themes.yaml`. Each theme declares:

- `label`, `description` — human-readable metadata
- `canvas.width_inches`, `canvas.height_inches` — slide dimensions
- `colors.*` — hex strings without the `#` prefix (python-pptx convention)
- `fonts.title`, `fonts.body` — font family names (pick fonts that ship
  with Office on Windows AND macOS; `Calibri`, `Calibri Light`,
  `Georgia`, `Arial` are safe)
- `sizes.*` — point sizes for each element
- `layout.*` — boolean flags the engine reads (`header_band`,
  `accent_rule_under_title`, `footer`, etc.)

No code change required — the engine reads YAML on every render.

## Rules

- Themes must declare every size the engine expects. Partial themes
  fall through to the legacy path rather than render broken output.
- Font names must render on both Windows and macOS with Office
  installed. Never ship a theme that depends on a font the user
  must install separately.
- Hex colors are 6 chars, no `#` prefix, uppercase.