Editorial Design System

Component library

A navigable reference for the semantic components used on long-form editorial pages. Each entry has a short description, a live example, and a copyable shell you can paste into a new article.

This page is the working library for composition: jump to a component, preview it, copy the shell, and fill in real content. Multi-block components use HTML wrappers with markdown="1" so headings, lists, and paragraphs stay inside the component. Visual treatment lives in CSS (_includes/editorial.css).

How to use these shells

  1. Create editorial/your-slug.md with layout: editorial and permalink: /editorial/your-slug.
  2. Paste shells from this page. Keep markdown="1" on multi-block wrappers.
  3. Prefer semantic class names (what the content is) over presentation names.
  4. Kramdown {: .class} alone only styles the next single block — use a wrapping <div class="…" markdown="1"> when a component holds more than one block.

Tier 1 — Core editorial components

Identity, evidence, and the primary reading path of an article.

Editorial header

.editorial-header · .eyebrow · optional .dek

Article identity block: eyebrow label, title, and optional deck. Place once at the top of the page.

Live example

Example series

Example article title

A short deck that orients the reader before the lead.

Copy shell

<div class="editorial-header" markdown="1">

<span class="eyebrow">Series or section label</span>

# Article title

Optional deck (plain paragraph or class="dek").

</div>

Metadata

.metadata

Compact byline bar for publish date, category, reading time, or other facts. Use strong labels and short values.

Live example

Copy shell

<div class="metadata" markdown="1">

**Published:** Month D, YYYY  
**Category:** Topic  
**Reading time:** N minutes

</div>

Lead

.lead

Opening statement that establishes the article’s narrative or explanatory direction. Slightly larger type; first letter is emphasized.

Live example

This lead introduces the central idea and sets the tone for everything that follows. Keep it to one or two tight paragraphs.

Copy shell

<div class="lead" markdown="1">

Opening paragraph that states the thesis or stakes.

</div>

Section header

.section-header

Major section break with an h2. Use for primary structure inside the article.

Live example

Copy shell

<div class="section-header" markdown="1">

## Section title

</div>

Subsection header

.subsection-header

Secondary heading (h3) within a section when you need hierarchy without a full section rule.

Live example

Copy shell

<div class="subsection-header" markdown="1">

### Subsection title

</div>

Figure

.figure

Image with caption and optional credit. Prefer meaningful alt text; caption can use bold figure label + italic credit line.

Live example

Placeholder editorial image

Figure 1. A representative editorial image.

Image: Placeholder for the design-system library.

Copy shell

<div class="figure" markdown="1">

![Describe the image](/path/or/url)

**Figure N.** Caption that explains what the reader should notice.

*Image: Credit or source.*

</div>

Quote

.quote

Pull quote or attributed statement. Use a Markdown blockquote plus a plain attribution line.

Live example

A strong editorial design system should make the content easier to understand without becoming the content itself.

— Editorial Design Principle

Copy shell

<div class="quote" markdown="1">

> Quoted text that deserves emphasis.

— Attribution

</div>

Stat grid

.stat-grid · .stat · .stat-value · .stat-label

Row of key numbers. Each cell is a .stat with a large value and a short label. Best for three to five figures.

Live example

32 Components

3 Tiers

1 Shared system

Copy shell

<div class="stat-grid" markdown="1">

<div class="stat">
<span class="stat-value">42</span>
<span class="stat-label">Label</span>
</div>

<div class="stat">
<span class="stat-value">18%</span>
<span class="stat-label">Label</span>
</div>

</div>

Data table

.data-table

Styled Markdown table for structured comparisons or reference data. Keep headers short; right-align numeric columns when useful.

Live example

Component Purpose Tier
Editorial Header Establish article identity 1
Figure Present visual evidence 1
Stat Grid Present important numbers 1

Copy shell

<div class="data-table" markdown="1">

| Column A | Column B | Column C |
|---|---|---:|
| Row | Detail | 1 |
| Row | Detail | 2 |

</div>

Timeline

.timeline · .timeline-item · .timeline-date

Chronology of milestones. Each item has a date label, heading, and short body.

Live example

1944

Harvard Mark I

An example milestone in the history of computing.

1964

IBM System/360

A major architectural milestone in enterprise computing.

2026

Editorial Design System

A reusable component vocabulary for long-form content.

Copy shell

<div class="timeline" markdown="1">

<div class="timeline-item" markdown="1">

<span class="timeline-date">YYYY</span>

### Milestone title

One or two sentences of context.

</div>

</div>

Info callout

.info-callout

Informational aside for methodology, warnings, disclaimers, or source context that should stand out from body prose.

Live example

Note

This is an informational callout. Use it for methodology, context, source notes, warnings, or editorial disclaimers.

Copy shell

<div class="info-callout" markdown="1">

**Note**

Callout body. Keep it short and specific.

</div>

Tier 2 — Composition components

Layout and grouping patterns for arranging related content.

Content container

.content-container

Readable measure for ordinary prose when you need an explicit wrapper (for example inside a mixed layout). On the default article grid, bare paragraphs already sit on the measure.

Live example

This content container demonstrates the normal readable measure used by the editorial system. Use it when a group of paragraphs should share an explicit shell.

Copy shell

<div class="content-container" markdown="1">

Body paragraphs that should share a readable measure.

</div>

Content grid

.content-grid

Responsive multi-column arrangement of related blocks. Children are plain wrappers; headings and prose go inside each child.

Live example

Column one

Related points side by side on wide viewports.

Column two

Collapses to a single column on small screens.

Copy shell

<div class="content-grid" markdown="1">

<div markdown="1">

### Column title

Column body.

</div>

<div markdown="1">

### Column title

Column body.

</div>

</div>

Two column

.two-column

Fixed two-up layout for paired arguments, options, or lists (for example bull case vs bear case).

Live example

Bull case

  • Clear component vocabulary
  • Consistent typography
  • Reusable layouts

Bear case

  • More CSS to maintain
  • Complex components need custom markup
  • Real articles may expose new patterns

Copy shell

<div class="two-column" markdown="1">

<div markdown="1">

### Left title

- Point one
- Point two

</div>

<div markdown="1">

### Right title

- Point one
- Point two

</div>

</div>

Comparison

.comparison

Before/after or A/B framing. Same grid shell as two-column, tuned for contrast pairs.

Live example

Before

A page-specific collection of styles and markup.

After

A shared semantic component system.

Copy shell

<div class="comparison" markdown="1">

<div markdown="1">

### Before

Describe the prior state.

</div>

<div markdown="1">

### After

Describe the improved state.

</div>

</div>

Editorial list

.editorial-list

Emphasized bullet list for principles, criteria, or checklist-style points. Prefer bold lead-ins on each item.

Live example

  • Semantic: classes describe what content is.
  • Reusable: components can appear across article types.
  • Responsive: layout is controlled by the design system.
  • Extensible: add patterns only when real content needs them.

Copy shell

<div class="editorial-list" markdown="1">

- **Label:** explanation.
- **Label:** explanation.

</div>

Full bleed

.full-bleed

Escapes the normal measure so a child (usually a figure) can use more horizontal space. Nest a figure or other wide media inside.

Live example

Full-width placeholder

Figure 2. A full-bleed figure can escape the normal reading measure.

Copy shell

<div class="full-bleed" markdown="1">

<div class="figure" markdown="1">

![Describe the image](/path/or/url)

**Figure N.** Caption.

</div>

</div>

Tier 3 — Specialized editorial components

Recurring patterns for history, product, analysis, and reference writing.

Fact box

.fact-box

At-a-glance facts for an event, product, or entity (date, location, outcome, specs).

Live example

The Battle of Lepanto

Date: 7 October 1571
Location: Gulf of Patras
Participants: Holy League · Ottoman Empire
Outcome: Holy League victory

Copy shell

<div class="fact-box" markdown="1">

**Title**

**Label:** value  
**Label:** value  
**Label:** value

</div>

Takeaways

.takeaways

Summary box of key points. Heading plus bullets; keep each bullet one idea.

Live example

Key takeaways

  • Components should describe content rather than visual appearance.
  • Layout should stay responsive without changing article markup.
  • Add specialized components only when patterns recur.

Copy shell

<div class="takeaways" markdown="1">

### Key takeaways

- Point one
- Point two
- Point three

</div>

Definition

.definition

Single term and definition for inline glossary moments without a full glossary list.

Live example

Mainframe

A high-performance computer designed to process large volumes of data and support many concurrent users and applications.

Copy shell

<div class="definition" markdown="1">

**Term**

Definition in one or two sentences.

</div>

Glossary

.glossary

Multiple term/definition pairs for a section or article. Bold the term on its own line, definition below.

Live example

CDP
Customer Data Platform.

CMS
Content Management System.

DAM
Digital Asset Management.

Copy shell

<div class="glossary" markdown="1">

**TERM**  
Definition.

**TERM**  
Definition.

</div>

Pros / cons

.pros-cons

Two-column advantages vs limitations. Same structure as two-column; use when the frame is specifically tradeoffs.

Live example

Advantages

  • Simple authoring
  • Consistent presentation
  • Reusable patterns

Limitations

  • Complex data may need structured includes
  • New patterns may require new components

Copy shell

<div class="pros-cons" markdown="1">

<div markdown="1">

### Advantages

- Item

</div>

<div markdown="1">

### Limitations

- Item

</div>

</div>

Recommendation

.recommendation

Prescriptive close or guidance block. One clear heading and a short directive paragraph or list.

Live example

Recommendation

Start with the core components and let the system evolve from real articles rather than anticipating every layout.

Copy shell

<div class="recommendation" markdown="1">

### Recommendation

What the reader should do next, in one short paragraph.

</div>

Scorecard

.scorecard

Criteria table with ratings and notes. Useful for reviews, evaluations, and design critiques.

Live example

Criterion Rating Notes
Authoring simplicity 9/10 Mostly ordinary Markdown
Reusability 9/10 Semantic vocabulary
Responsiveness 9/10 CSS-driven
Complexity 3/10 Low initial overhead

Copy shell

<div class="scorecard" markdown="1">

| Criterion | Rating | Notes |
|---|---:|---|
| Criterion | N/10 | Short note |

</div>

Forecast

.forecast

Near / medium / long-term outlook sections. Heading plus labeled time horizons.

Live example

What happens next

Near term
Implement the core components and migrate one representative article.

Medium term
Compare against existing pages and refine spacing and type.

Long term
Add components only when recurring patterns justify them.

Copy shell

<div class="forecast" markdown="1">

### What happens next

**Near term**  
…

**Medium term**  
…

**Long term**  
…

</div>

Event card

.event-card · .event-date

Dated event summary: date label, title, and concise description.

Live example

7 October 1571

Battle of Lepanto

A dedicated event card can present a date, event title, and concise description.

Copy shell

<div class="event-card" markdown="1">

<span class="event-date">Day Month Year</span>

### Event title

One or two sentences.

</div>

Entity card

.entity-card

Person, organization, or product card with role, period, and known-for lines.

Live example

Don John of Austria

Role: Commander of the Holy League
Period: 1547–1578
Known for: Commanding the Christian fleet at Lepanto.

Copy shell

<div class="entity-card" markdown="1">

### Name

**Role:** …  
**Period:** …  
**Known for:** …

</div>

Source list

.source-list

Numbered bibliography or reference list for the end of an article.

Live example

Sources

  1. Primary historical accounts
  2. Wikimedia Commons
  3. Manufacturer specifications
  4. Independent testing

Copy shell

<div class="source-list" markdown="1">

### Sources

1. Source one
2. Source two

</div>

Source note

.source-note

Inline footnote-style credit for a specific claim, chart, or figure.

Live example

Source: Example source note for a specific claim or figure.

Copy shell

<div class="source-note" markdown="1">

**Source:** Citation or link for the claim above.

</div>

Figure pair

.figure-pair

Two images with captions for then/now, before/after, or side-by-side comparison.

Live example

Then

Then
The original configuration.

Now

Now
The modern configuration.

Copy shell

<div class="figure-pair" markdown="1">

<div markdown="1">

![Left](/path/left)

**Left label**  
Caption.

</div>

<div markdown="1">

![Right](/path/right)

**Right label**  
Caption.

</div>

</div>

Aside

.aside

Supporting context that should not interrupt the main narrative. Compact card; can sit beside other compact components on wide screens.

Live example

Why it matters

An aside holds useful supporting context without derailing the primary story.

Copy shell

<div class="aside" markdown="1">

**Label**

Supporting context in a short paragraph.

</div>

Editorial break

.editorial-break

Visual pause between major parts of an article. Empty element — no children required.

Live example

Copy shell

<div class="editorial-break"></div>

Multi-block rule

Kramdown’s {: .class} alone only styles the next single block. When a component holds headings, lists, or several paragraphs, wrap them:

<div class="takeaways" markdown="1">

### Key takeaways

- List items stay inside the component

</div>