markdown fix
All checks were successful
Deploy / build-deploy (push) Successful in 2m23s

This commit is contained in:
Jorijn van der Graaf 2026-08-18 11:12:24 +02:00
commit 4666c1995f
14 changed files with 876 additions and 346 deletions

View file

@ -511,8 +511,9 @@ treatment it replaces, which read as the wrong category for the work.
/* The measure goes on the prose, not on the container, so media can use the
full column: a post page is reading material and full-viewport line
lengths get skimmed rather than read, but a screenshot of a feature
support table is unreadable at text width. */
.post-body > :not(.post-media) { max-width: var(--measure); }
support table is unreadable at text width. A real table is exempt for
exactly the same reason a screenshot of one is. */
.post-body > :not(.post-media, .post-body__table) { max-width: var(--measure); }
/* .post-media carries its own top margin for the cards, where it follows an
excerpt; inside this grid the gap already provides it. */
.post-body > .post-media { margin-top: 0; }
@ -533,7 +534,20 @@ treatment it replaces, which read as the wrong category for the work.
.post-body a { overflow-wrap: anywhere; }
/* Struck prose is the author retracting a line for effect. Muted as well as
struck, because a line through body-coloured text on a dark surface reads
as a rendering fault rather than as a deliberate aside. */
.post-body s { color: var(--text-muted); }
/* The reset drops list markers globally, and everywhere else on the site
that is right — the nav, the card grids and the chain list are lists for
semantics, not for bullets. A post body is the one place that wants them
back: these are the author's numbered mini-guides, and without a marker an
ordered list is indistinguishable from an unordered one and the `start=`
the parser goes out of its way to emit is invisible. */
.post-body__list { padding-left: var(--s1); display: grid; gap: var(--s-2); }
ul.post-body__list { list-style: disc outside; }
ol.post-body__list { list-style: decimal outside; }
.post-body__list li { padding-left: var(--s-3); }
.post-body__quote {
@ -567,6 +581,49 @@ treatment it replaces, which read as the wrong category for the work.
border-radius: var(--radius-sm);
}
/* Pipe tables from a post body. Bordered rather than boxed like the code
block: a table already has structure, and a frame around a grid of lines
reads as two competing ones. */
.post-body__table {
/* The wrapper is what scrolls. A <table> refuses to be narrower than its
content, so without a scroll container around it a nine-column price
comparison scrolls the whole PAGE sideways — see the code block. */
overflow-x: auto;
}
.post-body__table table {
border-collapse: collapse;
font-size: var(--step--1);
/* No width:100% on purpose — the table is sized to its content. Stretched
to the column, a two-column table puts a hand-span of nothing between a
label and its value. */
}
.post-body__table :is(th, td) {
/* Left in both, overriding the browser's centred <th>. The delimiter row is
the only thing that moves a column, and it says so with a class. */
text-align: left;
padding: var(--s-2) var(--s-1);
border-bottom: 1px solid var(--border);
/* Cells wrap rather than forcing a scroll for every table, but not below
the width of a short word: nine columns on a phone would otherwise
shred into one character per line. Past that the container scrolls,
which is what it is for. */
min-width: 6ch;
}
.post-body__table th {
background: var(--surface-1);
border-bottom: 1px solid var(--border-strong);
/* Vertical-align matters here and nowhere else: a wrapped two-line heading
next to a one-line one should share a baseline at the bottom, where the
data starts. */
vertical-align: bottom;
}
.post-body__table tbody tr:last-child :is(th, td) { border-bottom: 0; }
/* Scoped under the wrapper for specificity, not for scoping: `:is(th, td)`
contributes a type selector, so the bare class would LOSE to the
text-align:left above and an aligned column would silently not be one. */
.post-body__table .post-body__cell--center { text-align: center; }
.post-body__table .post-body__cell--right { text-align: right; }
/* An image inside a sentence still gets its own line — these are
screenshots being pointed at, not icons sitting in the text. The <picture>
is what sits in the paragraph now (the reset already makes it a block);