Layout tree (as in design/layout.json)
{
"pattern": "content.editorial-magazine-longform",
"kind": "content",
"grid": {
"label": "3-8",
"body": "3-8",
"margin": "10-12",
"pullQuote": "2-9"
},
"slots": [
"sectionLabel",
"statement",
"image",
"body",
"quote",
"body2"
],
"notes": "The pull quote is wider than the measure on the left only — it breaks the column, not the page.",
"tree": {
"el": "grid",
"gap": 4,
"rowGap": 4,
"align": "start",
"children": [
{
"el": "text",
"span": "3-8",
"color": "accent",
"slot": "sectionLabel",
"role": "eyebrow",
"transform": "uppercase",
"tracking": "wide",
"font": "body"
},
{
"el": "text",
"span": "3-8",
"slot": "statement",
"role": "lead",
"step": 2,
"maxCh": 62
},
{
"el": "box",
"span": "10-12",
"rowSpan": "2-3",
"gap": 2,
"children": [
{
"el": "media",
"slot": "image",
"aspect": "4/5",
"treatment": "photo",
"caption": true
}
]
},
{
"el": "text",
"span": "3-8",
"slot": "body",
"role": "body",
"maxCh": 62
},
{
"el": "box",
"span": "2-9",
"gap": 2,
"children": [
{
"el": "divider",
"color": "accent",
"weight": 2
},
{
"el": "text",
"slot": "quote",
"role": "quote",
"step": 4,
"weight": 400,
"italic": true,
"leading": "tight"
}
]
},
{
"el": "text",
"span": "3-8",
"slot": "body2",
"role": "body",
"maxCh": 62
}
]
}
}Component example: reference/content.editorial-magazine-longform.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>content.editorial-magazine-longform — Editorial Magazine</title>
<link rel="stylesheet" href="base.css">
<style>
.story { padding: 120px 0; row-gap: 32px; align-items: start; }
.story > .kicker, .story > p { grid-column: 3 / 9; max-width: 62ch; }
.lead { font-size: var(--step-1); line-height: 1.45; }
aside { grid-column: 10 / 13; grid-row: 2 / 4; } aside .photo { aspect-ratio: 4 / 5; }
blockquote { grid-column: 2 / 10; border-top: 2px solid var(--accent); padding-top: 16px; font: italic 400 var(--step-4)/1.05 var(--display); color: var(--heading); }
@media (max-width: 640px) { blockquote { font-size: var(--step-2); } }
</style>
</head>
<body>
<article class="wrap">
<div class="story grid">
<p class="kicker accent">Chapter one</p>
<p class="lead dropcap">Hassan Benali was nine when he first went out with his father's crew. The boat was blue then, as it is now; it is the same boat, re-planked twice, and it still leaves the harbour at four.</p>
<aside><div class="photo" role="img" aria-label="Hassan mending nets"></div><p class="caption">Hassan Benali mends nets on the quay. He has fished from this harbour for 51 years.</p></aside>
<p>The catch has changed. Sardines used to arrive in shoals so dense the water turned silver; now the boats go further for less, and the fuel costs more each spring. Nobody here talks about the end of the fleet. They talk about the weather, the price at auction, the new port being built to the south.</p>
<blockquote>"The sea does not care what we built. It only cares whether we came back."</blockquote>
<p>At the auction hall the fish are sold by the crate, by voice, in under a minute. The buyers are the same families who have bought here for generations, and the prices are written in chalk.</p>
</div>
</article>
</body>
</html>