# Deck spec — slide-by-slide

All slides are 16:9 widescreen at PowerPoint's standard `13.333" × 7.5"` (12192000 × 6858000 EMU). The example PDF was rendered at 1456 × 819 px. Coordinates below are EMU; convert from inches with `Inches(x)` (python-pptx).

## Color palette

```python
INK    = RGBColor(0x1A, 0x1A, 0x1A)   # backgrounds, body text on light
ORANGE = RGBColor(0xD9, 0x54, 0x0F)   # accent, italic words, badges, left-rule
CREAM  = RGBColor(0xF5, 0xF1, 0xEA)   # warm off-white panels (rare)
WHITE  = RGBColor(0xFF, 0xFF, 0xFF)   # light backgrounds
GREY_M = RGBColor(0x9E, 0x9E, 0x9E)   # secondary labels, datelines
GREY_L = RGBColor(0xE5, 0xE0, 0xD8)   # photo tile backgrounds (the cream-grey behind images)
```

## Type system

| Use                                 | Family                | Style          | Size  |
|-------------------------------------|-----------------------|----------------|-------|
| Cover title                         | Playfair Display      | Regular + Italic accent | 96 pt |
| Cover subtitle (italic serif)       | Playfair Display      | Italic         | 22 pt |
| Section headline (matrix, closing)  | Playfair Display      | Regular + Italic accent | 56 pt |
| Property page address               | Playfair Display      | Regular + Italic floor  | 48 pt |
| Description body                    | Inter                 | Regular        | 11 pt |
| Stat-box numeric                    | JetBrains Mono        | Regular        | 14 pt |
| Stat-box label                      | JetBrains Mono        | Regular        | 8 pt  |
| Photo tile caption badge            | Inter                 | Semi-Bold      | 8 pt  |
| Header / footer chrome              | Inter                 | Regular        | 8 pt  |
| Matrix table header                 | JetBrains Mono        | Regular        | 8 pt  |
| Matrix table body                   | Playfair Display      | Regular        | 11 pt |
| Notes column body                   | Inter                 | Regular        | 9 pt  |
| Orange badge in matrix              | Inter                 | Semi-Bold      | 7.5 pt |

If the system doesn't have these fonts, fall back to: serif → Georgia, sans → Arial, mono → Consolas. Document the substitution to the user so they can swap fonts on their machine.

## Slide 1 — Cover (dark)

Background: `INK` fill across the entire slide. Optional ghosted photo at 8% opacity behind the title (the example has a faint office interior).

Top-left chrome: small Veracity logo card (white square, 0.5" × 0.5"), positioned at `(0.55", 0.45")`.

Top-right chrome: two right-aligned lines.
- Line 1: `SPACE REPORT` in 8 pt small-caps Inter, with `SPACE` in `ORANGE`. Right edge at `12.95"`, top at `0.55"`.
- Line 2: `CONFIDENTIAL · APRIL 2026` in 8 pt small-caps Inter, color `GREY_M`. Right edge at `12.95"`, top at `0.85"`.

Title block, left-aligned, starting at `x=0.85"`:
- Thin orange rule, 1.4" wide × 1 pt tall, at `y=2.0"`. Color `ORANGE`.
- Title text at `y=2.3"`. The title splits on the italic word: `"South of Market"` becomes three runs — `"South "` (regular), `"of"` (italic, color `ORANGE`), `" Market"` (regular). All in `WHITE`.
- Subtitle at `y=4.7"` (after the title), italic Playfair, 22 pt, color `#C8C0B0` (a softened cream).

Bottom block at `y=6.4"`:
- A thin horizontal rule across the slide at `y=6.3"`, 1 pt, color `#3A3A3A`.
- Left column at `x=0.85"`: small-caps `PREPARED FOR` (8 pt, `GREY_M`); below it, client name in 18 pt Playfair white.
- Right column right-edge at `12.5"`: small-caps `PREPARED BY` (8 pt, `GREY_M`); below it, `Veracity Commercial Partners` in 18 pt Playfair white.

## Slide 2 — Matrix (light)

Background: `WHITE`.

Header strip (top of slide, runs full width with a thin rule beneath):
- Veracity logo card top-left, same as cover but on white.
- Centered: title + sub-title. Title `Alembic Office Options` (or `<Client> Office Options`) in 14 pt Playfair, ink. Below it, a small-caps `MATRIX · THE SHORT LIST` in 8 pt mono, color `ORANGE`.
- Top-right: `SUMMARY` in 8 pt mono, `GREY_M`.
- Thin horizontal rule below the strip at `y=0.95"`, color `#D8D2C5`.

Headline block at `y=1.2"`:
- Small-caps eyebrow `TENANT REPRESENTATION` at 9 pt mono, color `ORANGE`, `x=0.85"`.
- Headline `Eleven spaces, eight buildings` in 56 pt Playfair, ink, at `y=1.5"`. Italic accent on the second-noun word ("eight" italic? the example italicizes nothing here — leave as plain unless `matrix_headline_italic_word` is set in the manifest).
- Stat row, right-aligned, top edge at `y=1.4"`. Three columns from left: number in big serif (e.g. `8` at 60 pt Playfair, color `ORANGE`), small-caps label below (`BUILDINGS`, 8 pt mono, `GREY_M`). Then `11 / SPACES`, then `9,362–35,578 / SQ FT RANGE`.

Table at `y=2.6"`, full width minus 0.85" margins on each side:
- Column headers in 8 pt mono, `GREY_M`, with a thin black rule below them at the top of the table.
- Columns and widths (in inches): Property 1.6, Floor 1.0, Sq Ft 0.9, $/SF/MO 0.9, $ / Month 1.1, Notes (rest).
- Rows: 0.55" tall each. Body text in Playfair 11 pt for property/floor/sqft/rate/monthly; Notes in Inter 9 pt.
- Hairline dividers between rows, `#E5E0D8`.
- Notes badge: at the end of the notes prose, append a small uppercase tag with an orange border and `ORANGE` text, e.g. `SUBLEASE`. See `badge-rules.md`.

Footer strip (very small): `<client> · <region> office options` left, `VERACITY · TENANT REPRESENTATION` right, both 7 pt mono, `GREY_M`, at `y=7.15"`.

## Slides 3..N — Property pages (light)

One per property in `manifest.json`.

Header strip (same chrome on every property page):
- Veracity logo card top-left, `(0.55", 0.45")`.
- Centered: address + floor (italic). Address in 14 pt Playfair ink (`139 Townsend`); floor in 14 pt Playfair italic, `ORANGE` (`· 1st, 2nd & Mezzanine`). Render as a single line with a thin centered dot separator.
- Below the centered title, a single line: `subhead_tags` joined with ` · `, 8 pt mono, `ORANGE`. Example: `SOUTH OF MARKET · SUBLEASE THRU APR 2027`.
- Top-right: page counter `01 / 11` in 8 pt mono, `GREY_M`.
- Thin rule below the strip at `y=0.95"`, `#D8D2C5`.

Big address block at `y=1.15"`, `x=0.85"`:
- `139 Townsend` in 48 pt Playfair, ink, regular.
- ` 1st, 2nd & Mezzanine` in 36 pt Playfair italic, ink, on the same baseline (or wrapped if needed).

Stat box, top-right of the address row, three small panels:
- Each panel `(1.4", 0.85")` wide × `(0.7")` tall, cream-grey background `#F2EEE5`, hairline border on top and bottom only.
- Panel 1 `SQ FT` (8 pt mono `GREY_M` top-left), value below in 14 pt mono ink (`19,790 sq ft`).
- Panel 2 `$ / SF / MO`, value below.
- Panel 3 `MONTHLY`, value below.
- Three panels are gapped by 0.05" between them.

Description block at `y=2.4"`:
- A 2 pt vertical rule on the left, color `ORANGE`, height ≈ 0.55".
- Description text 0.15" right of the rule, Inter 11 pt, ink, line-height ~1.35.

Photo grid at `y=3.2"`:
- 2×2 grid (default) when the floor plan is square-ish, or 1×3 + floor plan when there are 3 photos and a wide floor plan.
- Each tile: a `#E5E0D8` background panel slightly larger than the contained image (the panel extends ~0.7" left of the image to create the painted-edge effect from the example). Panels are `(6.0", 1.65")` tall, side-by-side with a 0.1" gutter between columns and rows.
- Tile caption: a dark `#2A2A2A` rectangle in the top-left of each tile, `(0.65"–1.4", 0.18")` (auto-width to text), text in 7 pt Inter Semi-Bold, all-caps, `WHITE`. Inset 0.04" from the tile's top-left corner.
- Floor plan tile: leave background `#FFFFFF` instead of the cream-grey panel; the floor plan image sits with no inset.
- **Aspect-ratio rule (mandatory).** Floor plans must be inserted via `add_picture_letterbox()` in `build_deck.py`, never via `slide.shapes.add_picture(..., width=W, height=H)`. The latter stretches the picture to fill the box and silently distorts every plan whose native aspect doesn't match the tile. Letterbox the plan inside the tile with white margins; never deform the image. See the SKILL.md "Aspect-ratio rule" section for the full rationale. Interior photos may use crop-to-cover semantics (existing behavior); floor plans may not.

Footer strip (every property page):
- Left: `<footer_left>` (e.g. `ALEMBIC · SAN FRANCISCO OFFICE OPTIONS`), 7 pt mono `GREY_M`.
- Right: `VERACITY · PROPERTY 0X OF YY`, same style.
- Both at `y=7.15"`.

## Slide N+1 — Closing (dark)

Background `INK`.

Top-left orange rule (same 1.4" × 1 pt as the cover) at `(0.85", 1.6")`.

Headline `Let's walk the short list.` at `y=1.9"`, 72 pt Playfair white, with `short list` italic in `ORANGE`. The italic word(s) are configurable via `closing.headline_italic_word`.

Recommendation paragraph below at `y=4.0"`, 16 pt Playfair italic, color `#C8C0B0`, max width 6.5".

Bottom block (same divider rule as cover at `y=6.3"`):
- Left column at `x=0.85"`:
  - `YOUR TENANT REP TEAM` in 7 pt mono `ORANGE`.
  - `Veracity Commercial Partners` in 22 pt Playfair white.
  - Address lines in 11 pt mono `GREY_M`: `220 Montgomery Street, Suite 430` / `San Francisco, CA 94104`.
  - URL i