New. Codifies the figure/figcaption pattern for Verdigris web surfaces. Adapted from categories/whitepapers/body.md (.vd-figure) for screen + the SOV R8 ResourceCard pattern (image + title + body).
Figure & Caption Spacing
The figure is the canonical Verdigris composition for a visual with a caption. It covers three concrete cases on the web:
- Canvas viz with caption. WaveformTrace, HarmonicSpectrum, ResolutionComparison, etc., framed by
<CanvasFrame>with<figcaption>below. - Static image with caption. Hero photography, diagram screenshots, OEM-partner architecture diagrams.
- ResourceCard chip. Image + title + body — the compact figure pattern used in card grids.
This guide unifies the three under one spacing spec so the figure register reads consistently across the site.
The pattern
┌──────────────────────────────┐
│ │
│ <visual> │ ← image / canvas / SVG
│ │
└──────────────────────────────┘
Fig. 3 — Three-phase load currents at 8 kHz ← title line (caption-strong)
during a 60-second segment from the T-Mobile ← body (body-small)
Albuquerque deployment (EVD-003).
All Verdigris web figures use this above-vs-below geometry: the visual sits above, the caption below. Tables are the only exception — table captions sit above the table (per categories/whitepapers/body.md, “tables read top-down so the caption belongs at the top”).
Vertical rhythm spec
| Element | Property | Value | Source |
|---|---|---|---|
| Figure outer wrapper | padding-block |
2rem (32px, spacing.8) |
tokens/spacing/base.json |
| Visual → caption gap | margin-block-start on <figcaption> |
0.75rem (12px, spacing.3) |
Tight — caption belongs to the visual |
| Caption title (first line) | size / weight | caption-strong (0.875rem / 14px) / 700 Lato |
tokens/typography/scale.json |
| Caption title → body gap | margin-block-end on title |
0.25rem (4px, spacing.1) |
Tight — body is continuation of title |
| Caption body | size / weight / line-height | body-small (0.875rem / 14px) / 400 Inter / 1.5 |
tokens/typography/scale.json |
| Caption color | color | var(--vd-muted-fg) |
Lower contrast than body prose; figures are commentary, not the primary read |
| Caption max-width | max-width |
60ch |
Captions are read narrow — wide captions read as paragraphs that escaped their figure |
Caption title content rules
- Figure number + em-dash + title clause.
Fig. 3 — Three-phase load currents at 8 kHz. The em-dash here is editorial (figure-number register, not headline) and is the long-standing convention in scientific publishing. - No terminal period on the title line. The title is a label, not a sentence.
- Body sentence ends with period (full sentence) and includes the canonical atom ID for traceability:
... from the T-Mobile Albuquerque deployment (EVD-003).The atom ID belongs in the caption body, not as a visible UI element. Seecategories/composition/atom-id-exposure.md. - Exception for two-clause antithesis captions. When the caption body has the shape
[X does A]. [Verdigris does B](or any two-clause comparison that mirrors an H1 antithesis), drop the terminal period — same rule ascategories/typography/h1-punctuation.md. A period mid-caption parses the clauses; a terminal period adds weight that the comparison doesn’t need. Rule 3 (body ends with period) applies to single-sentence captions and to atom-ID-bearing fact sentences; this rule 4 carve-out applies when the caption is itself an antithesis statement. Example:Eaton Brightlayer uses device-cadence SNMP polling. Verdigris captures 240,000 samples in that window— no trailing period.
ResourceCard chip variant
The ResourceCard pattern (image + title + body) is the compact figure: it uses the same vertical rhythm but at a smaller register and inside a card frame.
| Element | Property | Value |
|---|---|---|
| Image aspect ratio | aspect-ratio |
3 / 2 (consistent across all chips in a grid) |
| Image → title gap | margin-block-start on title |
1rem (16px, spacing.4) |
| Title size / weight | size | body-medium (1.125rem / 18px) / 600 Lato |
| Title → body gap | margin-block-end on title |
0.5rem (8px, spacing.2) |
| Body size | size | body-small (0.875rem / 14px) / 400 Inter / 1.5 |
| Card padding | padding |
1.25rem (20px, spacing.5) |
| Card gap (grid) | gap |
1.5rem (24px, spacing.6) — desktop; 1rem mobile |
Why these differ from the figcaption spec
The ResourceCard is a navigable object (clickable, hoverable) — the title needs to read as a link, not a caption. Hence 18px / 600 weight, vs 14px / 700 weight for the figcaption. The card body is description (one or two sentences before a “Read more →” chip), not a single-clause caption.
Compliant — Canvas viz with caption
<figure className="vd-figure">
<CanvasFrame>
<WaveformTrace ... />
</CanvasFrame>
<figcaption>
<span className="vd-figure-num">Fig. 3</span>
<span className="vd-figure-em-dash"> — </span>
<span className="vd-figure-title">Three-phase load currents at 8 kHz</span>
<p className="vd-figure-body">
A 60-second segment from the T-Mobile Albuquerque deployment (EVD-003). Verdigris flagged a degrading rectifier 21 days before its first equipment alarm.
</p>
</figcaption>
</figure>
Non-compliant
{/* Caption merged into body prose; lost the figure register */}
<>
<WaveformTrace ... />
<p>The above chart shows three-phase load currents at 8 kHz...</p>
</>
{/* Caption above the figure (only tables do this) */}
<figure>
<figcaption>Three-phase load currents</figcaption>
<WaveformTrace ... />
</figure>
{/* Caption full body-prose width (76ch+) reading as paragraph escape */}
<figcaption style=>...</figcaption>
{/* Body atom ID exposed as visible UI element */}
<figcaption>
Three-phase load currents <span className="atom-id">EVD-003</span>
</figcaption>
Where this applies
| Surface | Scope |
|---|---|
/integrations/* body figures |
Required |
/industries/* body figures |
Required |
/platform/* body figures |
Required |
/resources/blog/* body figures |
Required |
/case-studies/* body figures |
Required |
| ResourceCard grids (any surface) | Required for the ResourceCard variant |
Sources
categories/whitepapers/body.md(existing) —.vd-figurepattern. Established the figure-number-eyebrow + below-the-figure caption layout for whitepapers. This rule generalizes to web.- Edward Tufte, The Visual Display of Quantitative Information (1983, 2nd ed. 2001). Chapter 6, on integrated text-and-graphic figures. Tufte’s principle: the caption is part of the figure, not separate commentary; vertical proximity (small gap) signals that integration.
- Bringhurst, The Elements of Typographic Style, Chapter 2 “Rhythm & Proportion.” The 12px (visual→caption) gap is
0.75rem, a 4-grid multiple; the 4px (title→body) gap is0.25rem, also a 4-grid multiple. Cited via 24ways “Compose to a vertical rhythm”. tokens/typography/scale.json—caption-strongandbody-smalltokens were already defined; this rule specifies their composition.
See also
categories/whitepapers/body.md— print figure patterncategories/composition/atom-id-exposure.md— atom IDs belong in figure body, not visible UIrules/visual-rules.yml>composition.figure_caption— machine-enforceable rule