A post with tags
The card is an editorial entry, not a box: one hairline above it and nothing else.
Reference
Contrast ratios are measured against the page colour of the scheme they belong to, light first. Nothing here should ever need a value outside the scales.
The page is cream, never white. Pure white next to #FDF9F3 reads as a rendering bug, so the surface token resolves to cream in the light scheme and to ink in the dark one. Body text is ink on cream at 12.9:1, which clears AAA with room to spare, and the column is capped at 720px so a line lands between 68 and 72 characters at the desktop body size.
Editorial layout, generous whitespace, one column of readable text. No cards-in-cards, no gradients, no shadow deeper than a hairline.
Body links use the darkened signal blue at 5.4:1, never the raw brand blue, which measures 4.1:1 and fails. They are underlined as well as coloured, because colour alone is not an affordance. Raw orange is a fill, never text on cream.
The home hero lays the page colour over the mascot artwork at--scrim-opacity — 72% in the light scheme, 86% in the dark one. Measured against composited output across viewport widths, body text stays above 6.5:1 in both schemes.
--surfacePage--surface-sunkenCode, pills, button states--textBody text--text-mutedMeta, captions--linkBody links--accent-fillPrimary button fill--borderRules, hairlines--focusFocus ring--ruleQuote ruleVertical space comes from one scale: 4, 8, 12, 16, 24, 32, 48, 64, 96. Paragraphs are separated by 24px, a heading opens with 64px above it, and the footer sits 96px below the last block. Nothing is nudged by an odd pixel.
A default link, and the same link after you hover it. Tab through this paragraph to see the focus ring: 2px solid --focusat 2px offset, which clears the 3:1 non-text floor on both the page and the sunken surface.
astro design-systems 4 postsaccessibility TypeScriptMarkdown
The card is an editorial entry, not a box: one hairline above it and nothing else.
The tag row is omitted rather than rendering an empty list.
In progress
Status, title, one-line pitch, stack badges. Only the title is interactive.
Shipped
A longer pitch, here to show that the badges still land on the same baseline as the card beside it.
Archived
Archived is the third and last status value.
Inline code such as --space-24 sits on a sunken surface at 11.6:1. A block runs to the gutter edges below the breakpoint rather than squeezing an already narrow column, and scrolls horizontally when it has to.
Body copy at the current breakpoint's size, 1.65 line height, capped at the 720px column so the measure stays readable.
--token in it.A quote, marked by a 3px rule in the signal blue.
--space-24: 1.5rem;