{
  "id": "v1-br-421b",
  "long_id": "v1.brutalism.blog.s04.p02.t01.u11",
  "name": "Web brutalism, poster",
  "era": {
    "slug": "brutalism",
    "code": "br",
    "name": "Web brutalism",
    "years": [
      2014,
      2019
    ],
    "description": "The reaction to polish, 2014 to 2019: raw default-looking pages, system and monospace type, hard black rules, harsh or absent colour, and layouts that show their structure instead of hiding it."
  },
  "archetype": "blog",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "The poster page of web brutalism, as published between 2014 and 2019 by pamphleteers, studios and writers of guidelines who wanted a page to be one statement and then the evidence: a single headline in bold system sans set as large as the window will take, and everything else hanging under it in four narrow columns of plain serif text. The paper is a warm off-white, the ink black, links are underlined and stay underlined, one black band carries the navigation and one red block marks where you are. Nothing is rounded, shadowed, graded or animated and there are no pictures; the only ornament is size and a thin double rule.",
  "url": "https://chrono.skin/s/v1-br-421b",
  "preview_url": "https://chrono.skin/s/v1-br-421b/specimen.html",
  "files": {
    "STYLE.md": "# Web brutalism, poster\n\n## Summary\n\nThe poster page of web brutalism, as published between 2014 and 2019 by pamphleteers, studios and writers of guidelines who wanted a page to be one statement and then the evidence: a single headline in bold system sans set as large as the window will take, and everything else hanging under it in four narrow columns of plain serif text. The paper is a warm off-white, the ink black, links are underlined and stay underlined, one black band carries the navigation and one red block marks where you are. Nothing is rounded, shadowed, graded or animated and there are no pictures; the only ornament is size and a thin double rule.\n\n## Layout\n\n- The page fills the window: `.ds-page` has no margin and `.ds-page__frame` is `--size-page` (100%) wide with no maximum. Every part is padded `--space-4` (24px) from the window edge and nothing is centred.\n- Order from the top: `.ds-nav`, then the hero or the page header, then one or more `.ds-page__cols`, then `.ds-footer` across the window. The header and the footer are written once; the views change between them.\n- `.ds-nav` is two lines. `.ds-nav__top` is an open line on the canvas with the `.ds-brand` at the left and a small `.ds-nav__tagline` at the right. Under it `.ds-nav__list` is a band of `--fill-bar` in which the navigation words, at `--text-large`, are spread from the left edge of the window to the right with equal space between them. There is no sidebar navigation and no second row.\n- `.ds-hero` holds the headline alone on its lines, then `.ds-hero__foot`, a row in the four-column grid: the lead across two columns, the actions in the third, a small note in the fourth. A heavy rule closes the hero.\n- `.ds-page__cols` is the body: four equal columns, `--space-4` (24px) apart, rows `--space-5` (48px) apart, with no rules between columns and no fills behind them. A block takes one column (`.ds-page__col`), two (`--2`) or all four (`--4`). Each block opens with a `.ds-page__label`: a heavy rule with a small bold line hanging from it. Blocks stacked in one column are `.ds-page__section`, 48px apart.\n- On the home page the first row is: the `.ds-sidebar` in column one, the numbered `.ds-list` across columns two and three, short blocks (notices, a panel) in column four. The `.ds-grid` follows across all four columns, one block to a column.\n- Inner pages (one essay, the letters, the method, the archive) keep the name line and the band. The hero is replaced by the `.ds-breadcrumb` and `.ds-page-header`, whose title is `--text-display` (not multiplied), with one line of description and one button at the right over a heavy rule. Under it, on a page of figures, `.ds-stats` sets four large figures, one to a column, and a `.ds-page__cols` carries `.ds-tabs`, the `.ds-table` and `.ds-pagination` across all four columns. Every other inner page is one `.ds-page__cols--foot`: the main thing (running text, the form) in the left two columns and short captioned blocks, a panel or `.ds-sidebar` lists in the right two, filled so that the columns end near each other.\n- Views. The specimen is one small site with five views, one showing at a time. `issue` is the home page: the headline, then the sidebar, the numbered list of essays, a boxed note with this week's letters, and the four standing subjects. `essay` is one essay across two columns with the letters on it and further reading beside it. `letters` is the form under the two messages it can answer with, beside the letters printed this month and the confirmation for withdrawing one. `method` is running text, the house rules in a box, the marks and the writers. `archive` is a year: four figures, tabs over the table, pagination, and the empty state of a subject with no essays. A view is `<section class=\"ds-view\" id=\"...\">`; links between views are plain `href=\"#id\"`.\n- Spacing scale: `--space-1` 4px is the padding of badges and the gap under a control; `--space-2` 8px is the padding of buttons, inputs, table cells and the band (vertical) and the gap between buttons; `--space-3` 16px is the padding of panels, notices, grid blocks and dialogs, the gap between paragraphs and the padding of list rows; `--space-4` 24px is the page margin and the gap between columns; `--space-5` 48px is the gap between blocks and the padding above and below the hero; `--space-6` 96px is the space at the foot of the last columns of a page.\n- Fixed sizes: `--size-rank` 72px is the numeral column of the list, `--size-label` 150px the label column of a form, `--size-field` 360px a text input, `--size-num` 120px a numeric table column, `--size-dialog` 440px a dialog, `--size-block` 176px the least height of a grid block.\n- Below 900px the four columns become two and the headline is half its size. From there down a column marked `.ds-page__col--lead` (the list of the home page) comes before the sidebar that precedes it in the source. Below 600px there is one column: the band's words run from the left and wrap, headlines and page titles are 48px, the page header puts its button under the text, form labels sit above their fields and table cells marked `.ds-table__extra` are left out.\n- On a phone (600px and below) there is no menu button: `.ds-nav__list` becomes a grid of six columns, the first three `.ds-nav__item` spanning two columns each and the last two spanning three, so five links stand in two rows of three and two, the text of each centred. The tagline is left-aligned and the current page stays an inverted block.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- `--font-body` and `--font-heading` are \"Times New Roman\", Times, serif: the browser's default. `--font-ui` is Arial, Helvetica, sans-serif at `--text-ui` 13px, the look of an unstyled form control; it is used for buttons, inputs, the count badge and the line of navigation links. `--font-mono` is \"Courier New\", Courier, monospace, for code and entry dates. All are system fonts; nothing was substituted.\n- `--text-base` 16px with `--line-body` 1.2 is all running text. `--text-small` 13px is meta lines, hints, the tagline, code and the footer. `--text-large` 18px is the hero's lead line and list titles.\n- Headings are the browser's: `--text-h1` 32px, `--text-h2` 24px, `--text-h3` 19px, all bold, `--line-heading` 1.1, never uppercased, never tracked. `--text-display` 48px bold at `--line-display` 1 is the hero headline and the largest text on a page; the name in the brand is 32px.\n- `--color-text` and `--color-heading` are #000000 on `--color-page` #ffffff. `--color-text-muted` #767676 is dates, counts and meta lines. `--color-heading-alt` #000080 (navy) is sidebar titles.\n- `--color-link` #0000ee, `--color-link-visited` #800080, `--color-link-hover` #000080, `--color-link-active` #ff0000: the browser's link colours. Every link is underlined at rest: `--link-decoration`, `--link-decoration-quiet` and `--link-decoration-hover` are all `underline`. `--color-link-quiet` equals the link colour.\n- `--color-bar` is #ffffff with #000000 text: the link bar, table heads and dialog titles are plain bold text on the page, told apart only by rules. `--color-bar-alt` (footer) is the same. Text on a bar is always `--color-bar-text`, on the footer `--color-bar-alt-text`.\n- `--color-inverse` #000000 with `--color-inverse-text` #ffffff is the one inverted block: the current item of the navigation.\n- `--color-border` and `--color-border-strong` are #000000. `--border-width` 1px is table cells, panels, grid cells, list rows and the sidebar rule; `--border-width-strong` 2px is the rule under the navigation, hero and page header, the top of the footer, and the outline of notices and dialogs. `--color-border-muted` #808080 is unused by the specimen and kept for faint dividers.\n- Surfaces: `--color-surface` #ffffff for table cells and panels, `--color-surface-alt` #f7f7f7 for alternate table rows, `--color-surface-strong` #efefef for panel titles and group rows. `--color-fill-1` to `--color-fill-4` repeat these three; grid cells are told apart by their rules, not their fills. Text on any surface or fill is `--color-text`.\n- `--color-accent` #000080 with `--color-accent-text` #ffffff is the count badge. `--color-accent-alt` #ff0000 is only the asterisk in front of a \"new\" marker, never text.\n- Status colours are the sixteen-colour set the links come from: `--color-success` #008000, `--color-warning` #808000, `--color-danger` #ff0000. They colour bold bracketed words and error text; `--color-danger` with `--color-danger-surface` is also the error notice and the destructive button. Green and olive were not measured in a reference; they are the nearest members of the same set.\n- Controls are the browser's, squared: buttons are `--color-button` #efefef with black 13px Arial and a `--border-width` edge in `--color-input-border` #767676 drawn in `--border-style`; inputs are white with the same edge. `--shadow-control` is a 1px bevel, two inset lines mixed from the button colour (lighter at the top and left, darker at the bottom and right) with no blur; `--shadow-control-pressed` turns it over and `--fill-button-hover` darkens the button a little. Another surface set may replace the bevel with nothing, an offset or a heavy underside; the layout only asks for the tokens. A pressed button takes `--color-border-strong`; a disabled one `--color-border-muted`.\n- Each text token is used only on its own fill: `--color-bar-text` on `--fill-bar`, `--color-bar-alt-text` on `--fill-bar-alt`, `--color-inverse-text` on `--fill-inverse`, `--color-accent-text` on `--fill-accent`, `--color-button-text` on `--fill-button`, `--color-notice-text` on `--color-notice`, `--color-danger` on `--color-danger-surface` or the page. Keep to this so that other palettes work with the same structure.\n- Hover, active and focus were not measurable on static captures; they use the browser's defaults. Focus is a 1px dotted outline. All radii are 0; panels and dialogs have no shadow; every fill is its plain palette colour.\n\n- One weight for everything: `--border-width` and `--border-width-strong` are both 2px solid, so cells, boxes, controls and the rules under the header are the same black line.\n- Boxes are framed twice: `--shadow-panel` draws a second 2px line in `--color-border` 3px outside a panel, and `--shadow-dialog` a 4px band of `--color-border-strong` around a dialog, both without blur. Controls are flat; a hovered button gets a 2px line along its foot and a pressed one a 2px inner frame.\n- The page is inverted: `--fill-page` is `--color-inverse`, so whatever of the window lies outside the sheet is a solid block of the inverse colour. Every other fill is its plain palette colour.\n- All radii are 0; `--focus-ring` is a 2px solid outline; `--transition` none.\n\n## Components\n\n- `.ds-page` on `<body>`: page colour and base type, no margin. Each page is a `.ds-page__frame`. `.ds-page__cols` is the four-column body (`--foot` adds 96px below the last one); `.ds-page__col` is a block of one column, `--2` of two, `--4` of four; `.ds-page__section` stacks blocks in one column (`--last` drops the gap); `.ds-page__label` is the 2px rule and small bold caption that opens a block.\n- `.ds-brand`: the site's mark and name, a link to the home page, at the left of the name line. `.ds-brand__mark` is a plain ruled square as tall as the name (`--text-h1`), dressed like the button: `--fill-button`, a `--border-width-strong` edge in `--color-border-strong`, the mark drawn in `--color-button-text` with square line caps; no radius and no shadow beyond what the tokens give. `.ds-brand__name` is 36px bold sans in `--color-heading`, on the canvas. The name `chronoskin` and the mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the header. `.ds-nav__top` holds the brand and a `.ds-nav__tagline`; `.ds-nav__list` is the band, one `.ds-nav__item` per word, each a `.ds-nav__link`, spread across the window. The current page is an inverted block: the stylesheet marks the link whose `href` names the view that is showing (one selector per view, and the home link when the address names none); on a page of its own, give the link `is-current`.\n- `.ds-breadcrumb`: a 14px sans line of `.ds-breadcrumb__link` items with `.ds-breadcrumb__sep` (`/`) between them, ending in a bold `.ds-breadcrumb__current`, directly above the page header.\n- `.ds-hero`: the home page's statement. `.ds-hero__title` is the headline at three times the display size: keep it to a few short words. `.ds-hero__foot` holds `.ds-hero__lead` (21px, two columns), `.ds-hero__actions` (one button over one text link) and `.ds-hero__note` (small grey text). No fill, no picture, no centring.\n- `.ds-page-header`: the head of an inner page, instead of the hero: `.ds-page-header__main` with `.ds-page-header__title` (64px) and one `.ds-page-header__text` line; `.ds-page-header__action` at the right holds one button. A heavy rule closes it.\n- `.ds-stat`: one figure: a 96px bold `.ds-stat__value` under a heavy rule with a small grey `.ds-stat__label` below. `.ds-stats` sets exactly four, one to a column; keep the values to a few digits.\n- `.ds-prose`: running text, at most 66 characters wide: h1, h2, h3 in bold sans, serif paragraphs, square-bulleted and numbered lists, `code` in 14px monospace with no background, `blockquote` behind a heavy rule. `.ds-prose__meta` is the grey sans line under a title.\n- `.ds-link`: text link with `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` is for meta and tool links; `.ds-link--strong` is bold. `.ds-links` lays links out in a wrapping row.\n- `.ds-button`: a `<button>`, or an `<a>` when it only leads to another page: a rectangle with a heavy (double) edge in `--color-border-strong`, bold 16px sans. `.ds-button--secondary` is the same on the secondary fill. `.ds-button--danger` is the destructive action: `--color-danger` text and edge on `--color-danger-surface`. `disabled` or `is-disabled` greys it; `is-hover` underlines the label. Group with `.ds-buttons`.\n- `.ds-form`: a form with no box: `.ds-form__title`, rows (`.ds-form__row`) of a small bold `.ds-form__label` and a `.ds-form__field`. Controls take `.ds-form__input` (`--wide` fills the field, for textareas; `--auto` for selects); `is-invalid` plus a bold `.ds-form__error` marks a validation error; `.ds-form__hint` is help text; `.ds-form__check` with a native `.ds-form__checkbox`; `.ds-form__actions` lines the buttons up with the fields.\n- `.ds-table`: a data table in 16px sans: bold `th` on the bar fill, rows on 1px rules, no upright rules and no outer border, `.ds-table__row--alt` for alternate rows, `.ds-table__num` for right-aligned numeric columns, `.ds-table__group` for a group row.\n- `.ds-list`: the numbered contents list, an `<ol>`. Each `.ds-list__item` has a 36px bold `.ds-list__rank` numeral and a `.ds-list__body`: a 27px bold `.ds-list__title` link, a serif `.ds-list__excerpt` sentence and a grey sans `.ds-list__meta` line. Rows are divided by 1px rules.\n- `.ds-panel`: a box with a heavy rule all round, a 21px bold `.ds-panel__title` as its first line and a `.ds-panel__body`. Use it once on a page, for the thing you want answered.\n- `.ds-grid`: four flat blocks, one to a column, 24px apart, each at least `--size-block` tall with a 1px edge (`--2`, `--3`, `--4` select the other fills): a `.ds-grid__title`, a `.ds-grid__text` sentence and a `.ds-grid__meta` line held at the bottom of the block.\n- `.ds-tabs`: a line of `.ds-tabs__item`, each a bold 21px `.ds-tabs__tab` link in the quiet link colour, on a 1px rule. The current one is a `<span class=\"ds-tabs__tab is-current\">`: an inverted block. Content goes in `.ds-tabs__body`.\n- `.ds-badge`: a count: bold 14px sans on the accent fill, square. `.ds-badge--alt` is a bold word with an asterisk in `--color-accent-alt` before it (\"new\"); `.ds-badge--tag` is a word in a 1px box. Status labels are `.ds-badge--success`, `.ds-badge--warning` and `.ds-badge--danger`: a bold lowercase word in the status colour standing on a 2px rule of the same colour. No fill, no pill, no icon.\n- `.ds-sidebar`: one column of the body, in 16px sans. Each `.ds-sidebar__block` opens with a `.ds-sidebar__title` under a heavy rule and holds a `.ds-sidebar__list` of `.ds-sidebar__row` lines: a `.ds-sidebar__link` at the left and an optional grey `.ds-sidebar__count` at the right. `.ds-sidebar__text` is a small grey paragraph; `.ds-sidebar__search` is an input with a button.\n- `.ds-notice`: a sentence in a flat block of `--color-notice` with a 1px edge, starting with a bold sans `.ds-notice__title`. `.ds-notice--error` uses the danger colour for text and edge on `--color-danger-surface`. Stack several in `.ds-notices`.\n- `.ds-pagination`: a line of bold 21px `.ds-pagination__link` items under the table: later, numbers, earlier. The current page is a `<span>` with `is-current`: an inverted block. `is-disabled` is grey and not underlined.\n- `.ds-dialog`: a box with a heavy rule, `--size-dialog` wide, with a bold 21px `.ds-dialog__title` on the bar fill, `.ds-dialog__body`, `.ds-dialog__text` and left-aligned `.ds-dialog__actions`. It sits on `.ds-dialog__backdrop`, a flat block of `--color-overlay` only 24px wider than the dialog on each side. No soft shadow, no dimming of the page.\n- `.ds-empty`: a 36px bold `.ds-empty__title` statement, a grey `.ds-empty__text` sentence and one secondary button, left-aligned, with no box.\n- `.ds-footer`: a band of `--fill-bar-alt` in the four-column grid: `.ds-footer__name` (the site name at 64px, two columns), a `.ds-footer__text` paragraph and a stacked `.ds-footer__links` list of `.ds-footer__link` items, in 14px sans.\n- `.ds-accordion`: questions and answers between rules. Each `<details class=\"ds-accordion__item\">` has a `<summary class=\"ds-accordion__title\">` that keeps the browser's own triangle and a `.ds-accordion__body`. Use it for a short list of questions, never for navigation.\n- `.ds-progress`: a `.ds-progress__label` line (what is counted at the left, the figure at the right) over a ruled `.ds-progress__track` whose `.ds-progress__bar` is filled with the accent to a quarter, or `--50`, `--75`, `--100`. Use it for one count against a known whole.\n\n## Never\n\n- `content-width >= 90%`: the page fills the window; there is no centred column.\n- `font-size <= 48px`: the largest text measured is a 48px headline.\n- `font-size >= 13px`: small text is the browser's 13px; nothing is set smaller.\n- `font-families <= 3`: the default serif, Arial in controls and a monospace.\n- `letter-spacing <= 0px`: no text is tracked.\n- `uppercase-text <= 0%`: nothing is uppercased by the stylesheet.\n- `underlined-links >= 95%`: links are underlined at rest, everywhere.\n- `line-height <= 1.3`: text is set at the browser's normal line height.\n- `border-radius <= 0px`: every box and control is square.\n- `box-shadow-blur <= 0px`: shadows only draw second frames; nothing is soft.\n- `text-shadow = none`: text is flat.\n- `gradient-fills <= 0%`: every fill is one flat colour.\n- `transition = none`: states change instantly.\n- `animation = none`: nothing moves.\n- `border-width <= 2px`: every rule is 2px.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen: a new block takes one, two or four of the columns and opens with a `.ds-page__label`; a set of things copies `.ds-list` (a large numeral, a bold sans title, a serif sentence, a grey sans meta line) or, for four equal things, `.ds-grid`; a line of choices copies `.ds-tabs` (bold words, the current one inverted); a status copies `.ds-badge--success`. Size is the only emphasis: make the one thing that matters larger, in bold sans, and leave the rest at text size in serif. Use only the tokens in `tokens.css` and the `--size-*` and `--space-*` tokens in `components.css`, and pair each text token with its own fill as listed above. When in doubt do less: a rule before a box, a word before an icon, and no radius, shadow, gradient or transition at all.\n",
    "components.css": "/* Layout tokens (structure part). Read from the references: a headline set\n   several times the size of anything else, running text in a narrow measure,\n   and wide open space between parts: 16 and 24px inside a block, 48px between\n   blocks, 96px at the foot of a page. Four equal columns carry everything. */\n:root {\n  --size-page: 100%;\n  --size-rank: 72px;\n  --size-label: 150px;\n  --size-field: 360px;\n  --size-dialog: 440px;\n  --size-num: 120px;\n  --size-block: 176px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 16px;\n  --space-4: 24px;\n  --space-5: 48px;\n  --space-6: 96px;\n}\n\n/* ---------- shell: the whole window, four columns, nothing boxed ---------- */\n.ds-page {\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page__frame {\n  box-sizing: border-box;\n  width: var(--size-page);\n  background: var(--color-canvas);\n  border-radius: var(--radius-page);\n}\n/* ---------- views: one screen of the example site shows at a time ---------- */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n.ds-page__cols {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5) var(--space-4);\n  align-items: start;\n  padding: var(--space-5) var(--space-4);\n}\n.ds-page__cols--foot {\n  padding-bottom: var(--space-6);\n}\n.ds-page__col {\n  min-width: 0;\n}\n.ds-page__col--2 {\n  grid-column: span 2;\n}\n.ds-page__col--4 {\n  grid-column: span 4;\n}\n.ds-page__section {\n  margin: 0 0 var(--space-5);\n}\n.ds-page__section--last {\n  margin-bottom: 0;\n}\n/* The head of a block: a heavy rule with a small bold line hanging from it. */\n.ds-page__label {\n  margin: 0 0 var(--space-3);\n  padding: var(--space-2) 0 0;\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n\n/* ---------- links ---------- */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited,\n.ds-link--quiet.is-visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link--strong {\n  font-weight: var(--weight-bold);\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* ---------- brand: the mark on a plain ruled square, then the name ---------- */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  flex: none;\n  display: block;\n  box-sizing: content-box;\n  width: var(--text-h1);\n  height: var(--text-h1);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-brand:hover .ds-brand__name,\n.ds-brand.is-hover .ds-brand__name {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-brand:focus-visible,\n.ds-brand.is-focus {\n  outline: var(--focus-ring);\n}\n\n/* ---------- nav: the name on an open line, then a band of words spread across the window ---------- */\n.ds-nav {\n  margin: 0;\n}\n.ds-nav__top {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-items: center;\n  gap: var(--space-2) var(--space-4);\n  padding: var(--space-3) var(--space-4);\n}\n.ds-nav__tagline {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  text-align: right;\n}\n.ds-nav__list {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-items: baseline;\n  gap: var(--space-1) var(--space-4);\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  list-style: none;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__item {\n  margin: 0;\n}\n.ds-nav__link {\n  color: var(--color-bar-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n}\n/* The page you are on: an inverted block. One selector per view, and the home\n   link when the address names no view. */\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#issue\"],\n.ds-page:has(#issue:target) .ds-nav__link[href=\"#issue\"],\n.ds-page:has(#essay:target) .ds-nav__link[href=\"#essay\"],\n.ds-page:has(#letters:target) .ds-nav__link[href=\"#letters\"],\n.ds-page:has(#method:target) .ds-nav__link[href=\"#method\"],\n.ds-page:has(#archive:target) .ds-nav__link[href=\"#archive\"] {\n  padding: 0 var(--space-2);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  text-decoration: none;\n}\n\n/* ---------- breadcrumb ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: var(--space-4) var(--space-4) 0;\n  list-style: none;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-breadcrumb__sep {\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__current {\n  font-weight: var(--weight-bold);\n  color: var(--color-text);\n}\n\n/* ---------- hero: one headline as large as the window allows, the rest hangs off it ---------- */\n.ds-hero {\n  padding: var(--space-5) var(--space-4);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-5);\n  font-family: var(--font-heading);\n  font-size: calc(var(--text-display) * 3);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n  overflow-wrap: break-word;\n}\n.ds-hero__foot {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-hero__lead {\n  grid-column: span 2;\n  margin: 0;\n  font-size: var(--text-large);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-3);\n}\n.ds-hero__note {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- page header ---------- */\n.ds-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4) var(--space-4);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-page-header__main {\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-page-header__text {\n  margin: 0;\n  font-size: var(--text-large);\n  color: var(--color-text);\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- stats: four large figures, one to a column ---------- */\n.ds-stats {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n  margin: 0;\n  padding: var(--space-5) var(--space-4) 0;\n  list-style: none;\n}\n.ds-stat {\n  min-width: 0;\n  padding: var(--space-2) 0 0;\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-stat__value {\n  display: block;\n  font-family: var(--font-heading);\n  font-size: calc(var(--text-display) * 1.5);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  color: var(--color-heading);\n}\n.ds-stat__label {\n  display: block;\n  margin: var(--space-2) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- prose ---------- */\n.ds-prose {\n  max-width: 66ch;\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin-top: var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin-top: var(--space-4);\n  font-size: var(--text-h3);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-3);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-3);\n  padding: 0 0 0 var(--space-4);\n}\n.ds-prose ul {\n  list-style: square;\n}\n.ds-prose code {\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-prose blockquote {\n  margin: 0 0 var(--space-3);\n  padding: 0 0 0 var(--space-3);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n.ds-prose__meta {\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- buttons: a heavy-ruled rectangle ---------- */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-button {\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  transition: var(--transition);\n  cursor: pointer;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  border-color: var(--color-border);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n/* Destructive: the error message's colours on a button. */\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  border-color: var(--color-border-muted);\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  text-decoration: none;\n  cursor: default;\n}\n\n/* ---------- form: bold label left, control right ---------- */\n.ds-form {\n  margin: 0;\n}\n.ds-form__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-form__row {\n  display: flex;\n  align-items: flex-start;\n  margin: 0 0 var(--space-3);\n}\n.ds-form__label {\n  flex: none;\n  box-sizing: border-box;\n  width: var(--size-label);\n  padding: var(--space-2) var(--space-3) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  color: var(--color-text);\n}\n.ds-form__field {\n  flex: 1;\n  min-width: 0;\n}\n.ds-form__input {\n  display: block;\n  box-sizing: border-box;\n  width: var(--size-field);\n  max-width: 100%;\n  margin: 0;\n  padding: var(--space-2);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-input);\n  box-shadow: var(--shadow-control);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  transition: var(--transition);\n}\n.ds-form__input--wide {\n  width: 100%;\n}\n.ds-form__input--auto {\n  width: auto;\n}\n.ds-form__input:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input:disabled,\n.ds-form__input.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__input.is-invalid {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  color: var(--color-danger);\n}\n.ds-form__hint {\n  margin: var(--space-1) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n}\n.ds-form__checkbox {\n  margin: 0;\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: var(--space-4) 0 0;\n  padding-left: var(--size-label);\n}\n\n/* ---------- table: a filled head, rows on thin rules, no upright rules ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  border-radius: var(--radius-panel);\n  font-family: var(--font-heading);\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-3);\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: 0 0 var(--border-width);\n  text-align: left;\n  vertical-align: top;\n}\n.ds-table th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-weight: var(--weight-bold);\n  text-shadow: var(--shadow-text);\n}\n.ds-table td {\n  background: var(--color-surface);\n}\n.ds-table tr.is-alt td,\n.ds-table__row--alt td {\n  background: var(--color-surface-alt);\n}\n.ds-table th.ds-table__num,\n.ds-table td.ds-table__num {\n  width: var(--size-num);\n  text-align: right;\n}\n.ds-table__group td {\n  background: var(--color-surface-strong);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- list: large numerals, a title, a sentence ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: grid;\n  grid-template-columns: var(--size-rank) minmax(0, 1fr);\n  align-items: baseline;\n  padding: var(--space-3) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__item:first-child {\n  padding-top: 0;\n  border-top: 0;\n}\n.ds-list__rank {\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  color: var(--color-heading);\n}\n.ds-list__body {\n  min-width: 0;\n}\n.ds-list__title {\n  color: var(--color-link);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:visited,\n.ds-list__title.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-list__excerpt {\n  margin: var(--space-2) 0 0;\n}\n.ds-list__meta {\n  margin: var(--space-2) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- panel: a heavy-ruled box ---------- */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-3) 0;\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__body {\n  padding: var(--space-2) var(--space-3) var(--space-3);\n}\n\n/* ---------- grid: four flat blocks, one to a column ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  box-sizing: border-box;\n  min-width: 0;\n  min-height: var(--size-block);\n  padding: var(--space-3);\n  background: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n}\n.ds-grid__cell--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-grid__text {\n  margin: 0;\n}\n.ds-grid__meta {\n  margin: auto 0 0;\n  padding: var(--space-3) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- tabs: large words on a rule, the current one inverted ---------- */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: var(--space-1) var(--space-4);\n  margin: 0;\n  padding: 0 0 var(--space-2);\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n}\n.ds-tabs__item {\n  margin: 0;\n}\n.ds-tabs__tab {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-tabs__tab.is-current {\n  padding: 0 var(--space-2);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  text-decoration: none;\n}\n.ds-tabs__body {\n  padding: var(--space-3) 0 0;\n}\n\n/* ---------- badge: a count, a tag, a status word on a heavy coloured rule ---------- */\n.ds-badge {\n  white-space: nowrap;\n  padding: 0 var(--space-1);\n  border-radius: var(--radius-pill);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-badge--alt,\n.ds-badge--tag,\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  padding: 0;\n  background: transparent;\n  color: var(--color-text);\n}\n.ds-badge--alt::before {\n  content: \"*\";\n  margin-right: var(--space-1);\n  color: var(--color-accent-alt);\n}\n.ds-badge--tag {\n  padding: 0 var(--space-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-weight: var(--weight-body);\n}\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  border-style: var(--border-style);\n  border-color: currentColor;\n  border-width: 0 0 var(--border-width-strong);\n}\n.ds-badge--success {\n  color: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-danger);\n}\n\n/* ---------- sidebar: one of the four columns, lists under heavy rules ---------- */\n.ds-sidebar {\n  min-width: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-ui);\n}\n.ds-sidebar__block {\n  margin: 0 0 var(--space-5);\n}\n.ds-sidebar__block:last-child {\n  margin-bottom: 0;\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-3);\n  padding: var(--space-2) 0 0;\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading-alt);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__row {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-1) 0;\n}\n.ds-sidebar__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-sidebar__link:visited,\n.ds-sidebar__link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-sidebar__count {\n  color: var(--color-text-muted);\n}\n.ds-sidebar__text {\n  margin: 0;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-sidebar__search {\n  display: flex;\n  gap: var(--space-1);\n}\n.ds-sidebar__search .ds-form__input {\n  flex: 1;\n  min-width: 0;\n  width: auto;\n}\n\n/* ---------- notice: a flat block with a thin edge ---------- */\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n}\n.ds-notice__title {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-notice--error {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n\n/* ---------- pagination: large numerals ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: var(--space-1) var(--space-3);\n  margin: 0;\n  padding: var(--space-4) 0 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n}\n.ds-pagination__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-pagination__link:focus-visible,\n.ds-pagination__link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-pagination__link.is-current {\n  padding: 0 var(--space-2);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  text-decoration: none;\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-text-muted);\n  text-decoration: none;\n}\n\n/* ---------- dialog: a heavy-ruled box on a flat block no wider than it needs ---------- */\n.ds-dialog__backdrop {\n  box-sizing: border-box;\n  width: fit-content;\n  max-width: 100%;\n  padding: var(--space-4);\n  background: var(--color-overlay);\n}\n.ds-dialog {\n  box-sizing: border-box;\n  width: var(--size-dialog);\n  max-width: 100%;\n  background: var(--fill-panel);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-dialog__body {\n  padding: var(--space-3);\n}\n.ds-dialog__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-dialog__actions {\n  display: flex;\n  gap: var(--space-2);\n}\n\n/* ---------- empty: a large plain statement ---------- */\n.ds-empty {\n  padding: 0;\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-3);\n  color: var(--color-text-muted);\n}\n\n/* ---------- footer: a band, the name set large, two narrow columns ---------- */\n.ds-footer {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n  align-items: start;\n  padding: var(--space-5) var(--space-4);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n}\n.ds-footer__name {\n  grid-column: span 2;\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-footer__text {\n  margin: 0;\n}\n.ds-footer__links {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* ---------- narrow windows: two columns, then one ---------- */\n/* ---------- components of the period ---------- */\n.ds-accordion {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__title {\n  padding: var(--space-2) 0;\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n  cursor: pointer;\n}\n.ds-accordion__title:focus-visible,\n.ds-accordion__title.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: 86ch;\n  margin: 0;\n  padding: 0 0 var(--space-3) var(--space-4);\n}\n.ds-progress {\n  margin: 0 0 var(--space-4);\n}\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-progress__track {\n  height: var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--color-input);\n}\n.ds-progress__bar {\n  width: 25%;\n  height: 100%;\n  background: var(--fill-accent);\n}\n.ds-progress__bar--75 {\n  width: 75%;\n}\n\n@media (max-width: 900px) {\n  .ds-page__cols,\n  .ds-hero__foot,\n  .ds-stats,\n  .ds-grid,\n  .ds-footer {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-page__col--4 {\n    grid-column: span 2;\n  }\n  /* The main block of a row comes before the sidebar once the columns fold. */\n  .ds-page__col--lead {\n    order: -1;\n  }\n  .ds-hero__title {\n    font-size: calc(var(--text-display) * 1.5);\n  }\n  .ds-stat__value {\n    font-size: var(--text-display);\n  }\n}\n@media (max-width: 600px) {\n  .ds-page__cols,\n  .ds-hero__foot,\n  .ds-footer {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-page__col--2,\n  .ds-page__col--4,\n  .ds-hero__lead,\n  .ds-footer__name {\n    grid-column: auto;\n  }\n  .ds-page__cols--foot {\n    padding-bottom: var(--space-5);\n  }\n  .ds-nav__tagline {\n    text-align: left;\n  }\n  /* Five links on a phone: a grid, so every view wraps the same way; the columns are set below. */\n  .ds-nav__list {\n    display: grid;\n    font-size: var(--text-base);\n  }\n  .ds-hero__title,\n  .ds-page-header__title,\n  .ds-footer__name {\n    font-size: calc(var(--text-display) * 0.75);\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  .ds-form__row {\n    flex-direction: column;\n    align-items: stretch;\n  }\n  .ds-form__label {\n    width: auto;\n    padding: 0 0 var(--space-1);\n  }\n  .ds-form__actions {\n    padding-left: 0;\n  }\n  .ds-table__extra {\n    display: none;\n  }\n  .ds-table th.ds-table__num,\n  .ds-table td.ds-table__num {\n    width: auto;\n  }\n  .ds-dialog__backdrop {\n    padding: var(--space-3);\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-2) var(--space-1);\n  }\n}\n\n/* ---------- phones: five links in two even rows, three over two, each centred in its cell ---------- */\n@media (max-width: 600px) {\n  .ds-nav__list {\n    grid-template-columns: repeat(6, minmax(0, 1fr));\n    justify-content: stretch;\n    justify-items: center;\n  }\n  .ds-nav__item {\n    grid-column: span 2;\n  }\n  .ds-nav__item:nth-child(n + 4) {\n    grid-column: span 3;\n  }\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: a pamphlet about plain pages. Web brutalism, poster: specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<!-- One frame: the name line and the band are written once, the views change under them. -->\n<div class=\"ds-page__frame\">\n\n  <header class=\"ds-nav\" data-component=\"nav\">\n    <div class=\"ds-nav__top\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#issue\"><span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.8\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" aria-hidden=\"true\"><rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\"/><line x1=\"3.5\" y1=\"20.5\" x2=\"20.5\" y2=\"3.5\"/></svg></span><span class=\"ds-brand__name\">chronoskin</span></a>\n      <p class=\"ds-nav__tagline\">A pamphlet about plain pages. Issue 31, March 2017.</p>\n    </div>\n    <ul class=\"ds-nav__list\">\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#issue\">Issue 31</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#essay\">Essays</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#letters\">Letters</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#method\">Method</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#archive\">Archive</a></li>\n    </ul>\n  </header>\n\n  <main>\n\n    <!-- View 1, the home page: the cover of the current issue. One headline, then four columns. -->\n    <section class=\"ds-view ds-view--home\" id=\"issue\">\n\n    <section class=\"ds-hero\" data-component=\"hero\">\n      <h1 class=\"ds-hero__title\">Say it in text.</h1>\n      <div class=\"ds-hero__foot\">\n        <p class=\"ds-hero__lead\">Five essays this month on pages that are nothing but their words: why they load at once, why they last, and why almost nobody is paid to make them.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button\" href=\"#essay\">Read the first essay</a>\n          <a class=\"ds-link\" href=\"#archive\">or go through the back issues</a>\n        </div>\n        <p class=\"ds-hero__note\">Printed nowhere. Written by six people who have never met. Out on the first Tuesday of the month since 2014.</p>\n      </div>\n    </section>\n\n    <div class=\"ds-page__cols\">\n      <aside class=\"ds-page__col ds-sidebar\" data-component=\"sidebar\">\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Find an essay</h2>\n          <form class=\"ds-sidebar__search\" action=\"#\">\n            <input class=\"ds-form__input\" type=\"text\" value=\"tables\" aria-label=\"Search the essays\">\n            <button class=\"ds-button\" type=\"button\">Go</button>\n          </form>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Subjects</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Speed</a> <span class=\"ds-sidebar__count\">41</span></li>\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Type</a> <span class=\"ds-sidebar__count\">36</span></li>\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link is-visited\" href=\"#essay\">Links</a> <span class=\"ds-sidebar__count\">29</span></li>\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link is-hover\" href=\"#essay\">Forms</a> <span class=\"ds-sidebar__count\">18</span></li>\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Money</a> <span class=\"ds-sidebar__count\">12</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Back issues</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">30. The default serif</a> <span class=\"ds-sidebar__count\">Feb</span></li>\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">29. No pictures</a> <span class=\"ds-sidebar__count\">Jan</span></li>\n            <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">28. Blue and purple</a> <span class=\"ds-sidebar__count\">Dec</span></li>\n          </ul>\n        </div>\n      </aside>\n\n      <section class=\"ds-page__col ds-page__col--2 ds-page__col--lead\" data-component=\"list\">\n        <p class=\"ds-page__label\">In this issue</p>\n        <ol class=\"ds-list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__rank\">01</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#essay\">A page is a letter, not a room</a> <span class=\"ds-badge ds-badge--alt\">new</span>\n              <p class=\"ds-list__excerpt\">You do not furnish a letter. You write it, and the reader decides where to sit.</p>\n              <p class=\"ds-list__meta\">Ines Varga, 1,900 words, 14 replies</p>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__rank\">02</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#essay\">Forty kilobytes is plenty</a>\n              <p class=\"ds-list__excerpt\">We weighed two hundred front pages. The heaviest was a recipe for toast.</p>\n              <p class=\"ds-list__meta\">Jonas Pell, 2,400 words, 31 replies</p>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__rank\">03</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title is-visited\" href=\"#essay\">The underline is the interface</a>\n              <p class=\"ds-list__excerpt\">A link that looks like a link needs no instructions and no hover state.</p>\n              <p class=\"ds-list__meta\">Tove Lindqvist, 1,200 words, 9 replies</p>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__rank\">04</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#essay\">Who pays for a page with nothing on it</a>\n              <p class=\"ds-list__excerpt\">Mostly nobody, which is both the trouble and the point.</p>\n              <p class=\"ds-list__meta\">Halvard Moe, 3,100 words, 52 replies</p>\n            </div>\n          </li>\n        </ol>\n      </section>\n\n      <div class=\"ds-page__col\">\n        <section class=\"ds-page__section\" data-component=\"panel\">\n          <div class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Write for us</h3>\n            <div class=\"ds-panel__body\">One idea, under three thousand words, in a plain text file. We answer every one. <a class=\"ds-link\" href=\"#method\">How it works</a>\n              <div class=\"ds-progress\" data-component=\"progress\">\n                <p class=\"ds-progress__label\"><span>Issue 32, in proof</span> <span>3 of 4</span></p>\n                <div class=\"ds-progress__track\"><div class=\"ds-progress__bar ds-progress__bar--75\"></div></div>\n              </div>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-page__section ds-page__section--last\">\n          <p class=\"ds-page__label\">Letters this week</p>\n          <div class=\"ds-prose\">\n            <p>&ldquo;I still use a spacer image and I am not sorry.&rdquo; Marit Aas, on issue 26.</p>\n            <p>&ldquo;Forty kilobytes is a luxury. Try four.&rdquo; Dov Peretz, on this issue.</p>\n            <p><a class=\"ds-link\" href=\"#letters\">Read them all or send one</a></p>\n          </div>\n        </section>\n      </div>\n\n      <section class=\"ds-page__col ds-page__col--4\" data-component=\"grid\">\n        <p class=\"ds-page__label\">Four standing subjects</p>\n        <div class=\"ds-grid\">\n          <div class=\"ds-grid__cell\">\n            <h3 class=\"ds-grid__title\">Speed</h3>\n            <p class=\"ds-grid__text\">What a page weighs and what the weight buys.</p>\n            <p class=\"ds-grid__meta\">41 essays</p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--2\">\n            <h3 class=\"ds-grid__title\">Type</h3>\n            <p class=\"ds-grid__text\">The fonts already on the machine, and nothing else.</p>\n            <p class=\"ds-grid__meta\">36 essays</p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--3\">\n            <h3 class=\"ds-grid__title\">Links</h3>\n            <p class=\"ds-grid__text\">Blue, underlined, and going where they say.</p>\n            <p class=\"ds-grid__meta\">29 essays</p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--4\">\n            <h3 class=\"ds-grid__title\">Forms</h3>\n            <p class=\"ds-grid__text\">A label, a box, a button that says what it does.</p>\n            <p class=\"ds-grid__meta\">18 essays</p>\n          </div>\n        </div>\n      </section>\n    </div>\n\n    </section>\n\n    <!-- View 2, an inner page: one essay. Breadcrumb, a large title, the text across two columns. -->\n    <section class=\"ds-view\" id=\"essay\">\n\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#issue\">Issues</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">/</li>\n      <li><a class=\"ds-breadcrumb__link\" href=\"#archive\">Issue 26</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">/</li>\n      <li class=\"ds-breadcrumb__current\">Tables were fine</li>\n    </ol>\n\n    <div class=\"ds-page-header\" data-component=\"page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Tables were fine</h1>\n        <p class=\"ds-page-header__text\">Jonas Pell, issue 26, October 2016. 2,400 words and 31 letters.</p>\n      </div>\n      <div class=\"ds-page-header__action\"><a class=\"ds-button\" href=\"#letters\">Send a letter</a></div>\n    </div>\n\n    <div class=\"ds-page__cols ds-page__cols--foot\">\n      <article class=\"ds-page__col ds-page__col--2\" data-component=\"typography\">\n        <p class=\"ds-page__label\">The essay</p>\n        <div class=\"ds-prose\">\n          <h1>Nobody misses the spacer image</h1>\n          <p class=\"ds-prose__meta\">First printed 2016-10-04, corrected once.</p>\n          <p>But the grid of numbers that a table gives you for nothing is still the clearest thing a browser can draw, and <a class=\"ds-link\" href=\"#archive\">the first essay in this issue</a> counts how often we rebuild it badly.</p>\n          <h2>What a table already does</h2>\n          <ul>\n            <li>Lines its columns up without being asked.</li>\n            <li>Reads aloud in the right order.</li>\n            <li>Prints.</li>\n          </ul>\n          <h3>Try it</h3>\n          <p>Open any page of figures and run <code>view-source</code> on it. If the numbers are not in a <strong>table</strong>, ask what was gained.</p>\n        </div>\n      </article>\n      <div class=\"ds-page__col\">\n        <p class=\"ds-page__label\">Letters on this essay</p>\n        <div class=\"ds-prose\">\n          <p>&ldquo;I still use a spacer image and I am not sorry.&rdquo;<br>Marit Aas</p>\n          <p>&ldquo;A table prints. That alone should have settled it.&rdquo;<br>Halvard Moe</p>\n          <p>&ldquo;You have never had to read one aloud on a phone.&rdquo;<br>Tove Lindqvist</p>\n          <p><a class=\"ds-link\" href=\"#letters\">All 31 letters</a></p>\n        </div>\n      </div>\n      <aside class=\"ds-page__col ds-sidebar\">\n          <div class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Also in issue 26</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">What a column is for</a> <span class=\"ds-sidebar__count\">01</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link is-visited\" href=\"#essay\">Tables were fine</a> <span class=\"ds-sidebar__count\">02</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">The cell that would not wrap</a> <span class=\"ds-sidebar__count\">03</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">A calendar is a table</a> <span class=\"ds-sidebar__count\">04</span></li>\n            </ul>\n          </div>\n        <div class=\"ds-sidebar__block\" data-component=\"links\">\n          <h2 class=\"ds-sidebar__title\">Read next</h2>\n          <ul class=\"ds-links\">\n            <li><a class=\"ds-link\" href=\"#essay\">The underline is the interface</a></li>\n            <li><a class=\"ds-link is-visited\" href=\"#essay\">Forty kilobytes is plenty</a></li>\n            <li><a class=\"ds-link is-hover\" href=\"#archive\">Every essay on type</a></li>\n            <li><a class=\"ds-link is-active\" href=\"#archive\">Issue 26 as one text file</a></li>\n            <li><a class=\"ds-link ds-link--quiet\" href=\"#method\">How we choose essays</a></li>\n            <li><a class=\"ds-link ds-link--strong\" href=\"#issue\">Back to issue 31</a></li>\n          </ul>\n        </div>\n      </aside>\n    </div>\n\n    </section>\n\n    <!-- View 3: letters. The form and its messages at the left, printed letters and a confirmation at the right. -->\n    <section class=\"ds-view\" id=\"letters\">\n\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#issue\">Issues</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">/</li>\n      <li class=\"ds-breadcrumb__current\">Letters</li>\n    </ol>\n\n    <div class=\"ds-page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Letters</h1>\n        <p class=\"ds-page-header__text\">Printed as they arrive, spelling included. One letter an issue from each reader.</p>\n      </div>\n      <div class=\"ds-page-header__action\"><a class=\"ds-button ds-button--secondary\" href=\"#method\">Read the method</a></div>\n    </div>\n\n    <div class=\"ds-page__cols ds-page__cols--foot\">\n      <div class=\"ds-page__col ds-page__col--2\">\n        <section class=\"ds-page__section\" data-component=\"notice\">\n          <p class=\"ds-page__label\">Send a letter</p>\n          <div class=\"ds-notices\">\n            <p class=\"ds-notice\"><span class=\"ds-notice__title\">Received.</span> Your letter on issue 31 will be read before the next issue.</p>\n            <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Not sent.</span> The letter below has no address we can answer.</p>\n          </div>\n        </section>\n        <section class=\"ds-page__section ds-page__section--last\" data-component=\"form\">\n        <form class=\"ds-form\" action=\"#\">\n                  <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"f-name\">Name</label>\n            <div class=\"ds-form__field\"><input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"Marit Aas\"></div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"f-mail\">E-mail</label>\n            <div class=\"ds-form__field\">\n              <input class=\"ds-form__input is-invalid\" id=\"f-mail\" type=\"text\" value=\"marit at example\">\n              <p class=\"ds-form__error\">That is not an e-mail address.</p>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"f-about\">About</label>\n            <div class=\"ds-form__field\">\n              <select class=\"ds-form__input ds-form__input--auto\" id=\"f-about\">\n                <option>Issue 26</option>\n                <option>An earlier letter</option>\n                <option>Something else</option>\n              </select>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"f-text\">Letter</label>\n            <div class=\"ds-form__field\">\n              <textarea class=\"ds-form__input ds-form__input--wide\" id=\"f-text\" rows=\"5\">I still use a spacer image and I am not sorry.</textarea>\n              <p class=\"ds-form__hint\">Plain text. We print letters as they arrive, spelling included.</p>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <span class=\"ds-form__label\"></span>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Print my name with the letter</label>\n          </div>\n          <div class=\"ds-form__actions\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"button\">Send</button>\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Preview</button>\n            <button class=\"ds-button ds-button--danger\" type=\"button\">Discard</button>\n            <button class=\"ds-button is-disabled\" type=\"button\" disabled>Closed</button>\n          </div>\n        </form>\n        </section>\n      </div>\n      <div class=\"ds-page__col ds-page__col--2\">\n        <section class=\"ds-page__section\">\n          <p class=\"ds-page__label\">Printed this month</p>\n          <ol class=\"ds-list\">\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__rank\">01</span>\n              <div class=\"ds-list__body\">\n                <a class=\"ds-list__title\" href=\"#essay\">On &ldquo;Tables were fine&rdquo;</a>\n                <p class=\"ds-list__excerpt\">I still use a spacer image and I am not sorry.</p>\n                <p class=\"ds-list__meta\">Marit Aas, 9 words</p>\n              </div>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__rank\">02</span>\n              <div class=\"ds-list__body\">\n                <a class=\"ds-list__title is-visited\" href=\"#essay\">On &ldquo;Forty kilobytes is plenty&rdquo;</a>\n                <p class=\"ds-list__excerpt\">Forty is a luxury. Try four, and see what you keep.</p>\n                <p class=\"ds-list__meta\">Dov Peretz, 11 words</p>\n              </div>\n            </li>\n          </ol>\n        </section>\n        <section class=\"ds-page__section ds-page__section--last\" data-component=\"dialog\">\n          <p class=\"ds-page__label\">Your letter on issue 31</p>\n          <div class=\"ds-dialog__backdrop\">\n            <div class=\"ds-dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n              <h3 class=\"ds-dialog__title\" id=\"dlg-title\">Withdraw your letter?</h3>\n              <div class=\"ds-dialog__body\">\n                <p class=\"ds-dialog__text\">The letter you sent on issue 31 will not be printed. This cannot be undone.</p>\n                <div class=\"ds-dialog__actions\">\n                  <button class=\"ds-button ds-button--danger\" type=\"button\">Withdraw</button>\n                  <a class=\"ds-button ds-button--secondary\" href=\"#letters\">Keep it</a>\n                </div>\n              </div>\n            </div>\n          </div>\n        </section>\n      </div>\n    </div>\n\n    </section>\n\n    <!-- View 4: the method. Running text, the house rules in a box, the marks and the people. -->\n    <section class=\"ds-view\" id=\"method\">\n\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#issue\">Issues</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">/</li>\n      <li class=\"ds-breadcrumb__current\">Method</li>\n    </ol>\n\n    <div class=\"ds-page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Method</h1>\n        <p class=\"ds-page-header__text\">How a page with nothing on it gets written, read and printed once a month.</p>\n      </div>\n      <div class=\"ds-page-header__action\"><a class=\"ds-button\" href=\"#letters\">Write to us</a></div>\n    </div>\n\n    <div class=\"ds-page__cols ds-page__cols--foot\">\n      <article class=\"ds-page__col ds-page__col--2\">\n        <p class=\"ds-page__label\">How an issue is made</p>\n        <div class=\"ds-prose\">\n          <p>Six people who have never met send each other text files. On the last Friday of the month the files that everyone has read become an issue, and the rest wait.</p>\n          <h2>The order of work</h2>\n          <ol>\n            <li>An idea, in one sentence, to all six.</li>\n            <li>A draft under three thousand words.</li>\n            <li>Two readers, neither of them the writer.</li>\n            <li>Proof, then print, then leave it alone.</li>\n          </ol>\n          <h3>What print means here</h3>\n          <p>An essay is printed when its address will never change. After that only a <strong>correction</strong> is allowed, dated, at the foot.</p>\n        </div>\n      </article>\n      <div class=\"ds-page__col\">\n        <section class=\"ds-page__section\">\n          <div class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">House rules</h3>\n            <div class=\"ds-panel__body\">Text only. No picture unless the essay is about that picture. Every link goes where it says. Nothing moves.\n              <div class=\"ds-accordion\" data-component=\"accordion\">\n                <details class=\"ds-accordion__item\" open>\n                  <summary class=\"ds-accordion__title\">May an essay carry code?</summary>\n                  <p class=\"ds-accordion__body\">Yes, as text, in the fixed face. Never as a picture of code.</p>\n                </details>\n                <details class=\"ds-accordion__item\">\n                  <summary class=\"ds-accordion__title\">Who decides what is printed?</summary>\n                  <p class=\"ds-accordion__body\">All six. One refusal sends a draft back to its writer with the reason.</p>\n                </details>\n                <details class=\"ds-accordion__item\">\n                  <summary class=\"ds-accordion__title\">Can a printed essay change?</summary>\n                  <p class=\"ds-accordion__body\">Only by a dated correction at its foot.</p>\n                </details>\n              </div>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-page__section ds-page__section--last\">\n          <p class=\"ds-page__label\">Marks</p>\n          <p class=\"ds-list__meta\" data-component=\"badge\">Letters waiting <span class=\"ds-badge\">12</span>, a subject <span class=\"ds-badge ds-badge--tag\">type</span>, an essay out this week <span class=\"ds-badge ds-badge--alt\">new</span>, and the state of a draft: <span class=\"ds-badge ds-badge--success\">printed</span> <span class=\"ds-badge ds-badge--warning\">in proof</span> <span class=\"ds-badge ds-badge--danger\">spiked</span></p>\n        </section>\n      </div>\n      <aside class=\"ds-page__col ds-sidebar\">\n          <div class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">The six</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Ines Varga</a> <span class=\"ds-sidebar__count\">41</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Jonas Pell</a> <span class=\"ds-sidebar__count\">38</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Tove Lindqvist</a> <span class=\"ds-sidebar__count\">33</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Halvard Moe</a> <span class=\"ds-sidebar__count\">29</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Marit Aas</a> <span class=\"ds-sidebar__count\">22</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#essay\">Dov Peretz</a> <span class=\"ds-sidebar__count\">17</span></li>\n            </ul>\n          </div>\n          <div class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">In proof now</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#issue\">Against the modal</a> <span class=\"ds-sidebar__count\">April</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#issue\">A form is a letter back</a> <span class=\"ds-sidebar__count\">April</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#issue\">The page that printed itself</a> <span class=\"ds-sidebar__count\">May</span></li>\n            </ul>\n          </div>\n      </aside>\n    </div>\n\n    </section>\n\n    <!-- View 5: the archive. Four figures, tabs over the table, and what a subject with nothing in it shows. -->\n    <section class=\"ds-view\" id=\"archive\">\n\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#issue\">Issues</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">/</li>\n      <li><a class=\"ds-breadcrumb__link\" href=\"#archive\">Archive</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">/</li>\n      <li class=\"ds-breadcrumb__current\">2016</li>\n    </ol>\n\n    <div class=\"ds-page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Archive, 2016</h1>\n        <p class=\"ds-page-header__text\">Twelve issues, every essay still at its first address.</p>\n      </div>\n      <div class=\"ds-page-header__action\"><button class=\"ds-button\" type=\"button\">Download the year</button></div>\n    </div>\n\n    <ul class=\"ds-stats\" data-component=\"stats\">\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">12</span> <span class=\"ds-stat__label\">issues</span></li>\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">58</span> <span class=\"ds-stat__label\">essays</span></li>\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">611</span> <span class=\"ds-stat__label\">letters printed</span></li>\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">0</span> <span class=\"ds-stat__label\">pictures</span></li>\n    </ul>\n\n    <div class=\"ds-page__cols\">\n      <section class=\"ds-page__col ds-page__col--4\" data-component=\"tabs\">\n        <ul class=\"ds-tabs\">\n          <li class=\"ds-tabs__item\"><span class=\"ds-tabs__tab is-current\" aria-current=\"true\">By issue</span></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#archive\">By writer</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-hover\" href=\"#archive\">By subject</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#archive\">Most letters</a></li>\n        </ul>\n        <div class=\"ds-tabs__body\">\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr><th>Issue</th><th>Title</th><th class=\"ds-table__extra\">Out</th><th>Letters</th><th class=\"ds-table__num ds-table__extra\">Essays</th><th class=\"ds-table__num\">Words</th></tr>\n            </thead>\n            <tbody>\n              <tr><td>28</td><td><a class=\"ds-link\" href=\"#essay\">Blue and purple</a></td><td class=\"ds-table__extra\">2016-12-06</td><td><span class=\"ds-badge ds-badge--success\">open</span></td><td class=\"ds-table__num ds-table__extra\">5</td><td class=\"ds-table__num\">9,800</td></tr>\n              <tr class=\"ds-table__row--alt\"><td>27</td><td><a class=\"ds-link\" href=\"#essay\">The view source issue</a></td><td class=\"ds-table__extra\">2016-11-01</td><td><span class=\"ds-badge ds-badge--success\">open</span></td><td class=\"ds-table__num ds-table__extra\">6</td><td class=\"ds-table__num\">12,400</td></tr>\n              <tr><td>26</td><td><a class=\"ds-link\" href=\"#essay\">Tables were fine</a></td><td class=\"ds-table__extra\">2016-10-04</td><td><span class=\"ds-badge ds-badge--warning\">closing</span></td><td class=\"ds-table__num ds-table__extra\">4</td><td class=\"ds-table__num\">8,100</td></tr>\n              <tr class=\"ds-table__row--alt\"><td>25</td><td><a class=\"ds-link\" href=\"#essay\">Against the hamburger</a></td><td class=\"ds-table__extra\">2016-09-06</td><td><span class=\"ds-badge ds-badge--danger\">closed</span></td><td class=\"ds-table__num ds-table__extra\">5</td><td class=\"ds-table__num\">10,300</td></tr>\n              <tr><td>24</td><td><a class=\"ds-link\" href=\"#essay\">Read it on a train</a></td><td class=\"ds-table__extra\">2016-08-02</td><td><span class=\"ds-badge ds-badge--danger\">closed</span></td><td class=\"ds-table__num ds-table__extra\">5</td><td class=\"ds-table__num\">9,200</td></tr>\n            </tbody>\n          </table>\n          <ul class=\"ds-pagination\" data-component=\"pagination\">\n            <li><a class=\"ds-pagination__link\" href=\"#archive\">Later</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#archive\">1</a></li>\n            <li><span class=\"ds-pagination__link is-current\" aria-current=\"page\">2</span></li>\n            <li><a class=\"ds-pagination__link\" href=\"#archive\">3</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#archive\">4</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#archive\">Earlier</a></li>\n          </ul>\n        </div>\n      </section>\n    </div>\n\n    <div class=\"ds-page__cols ds-page__cols--foot\">\n      <section class=\"ds-page__col ds-page__col--2\">\n        <p class=\"ds-page__label\">Subject: carousels</p>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <h3 class=\"ds-empty__title\">No essays on &ldquo;carousels&rdquo;.</h3>\n          <p class=\"ds-empty__text\">Nobody has wanted to write one.</p>\n          <a class=\"ds-button ds-button--secondary\" href=\"#issue\">Back to the issue</a>\n        </div>\n      </section>\n      <aside class=\"ds-page__col ds-sidebar\">\n          <div class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Other years</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">2017</a> <span class=\"ds-sidebar__count\">3 issues</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">2015</a> <span class=\"ds-sidebar__count\">12 issues</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">2014</a> <span class=\"ds-sidebar__count\">4 issues</span></li>\n            </ul>\n          </div>\n      </aside>\n      <aside class=\"ds-page__col ds-sidebar\">\n          <div class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Subjects</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">Speed</a> <span class=\"ds-sidebar__count\">41</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">Type</a> <span class=\"ds-sidebar__count\">36</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link is-visited\" href=\"#archive\">Links</a> <span class=\"ds-sidebar__count\">29</span></li>\n              <li class=\"ds-sidebar__row\"><a class=\"ds-sidebar__link\" href=\"#archive\">Forms</a> <span class=\"ds-sidebar__count\">18</span></li>\n            </ul>\n          </div>\n      </aside>\n    </div>\n\n    </section>\n\n  </main>\n</div>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <span class=\"ds-footer__name\">chronoskin</span>\n  <p class=\"ds-footer__text\">Written since 2014 by six people and their readers. No tracking, no fonts to fetch, nothing that moves. Copy what you like.</p>\n  <ul class=\"ds-footer__links\">\n    <li><a class=\"ds-footer__link\" href=\"#issue\">This issue</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#archive\">Every issue</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#letters\">Write to us</a></li>\n  </ul>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.brutalism.blog.s04.p02.t01.u11\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"brutalism\",\n    \"years\": [\n      2014,\n      2019\n    ]\n  },\n  \"archetype\": \"blog\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-br-421b\",\n  \"short\": \"v1-br-421b\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f7f7f7;\n  --color-surface-strong: #efefef;\n  --color-bar: #ddeeff;\n  --color-bar-text: #333333;\n  --color-bar-alt: #ffffff;\n  --color-bar-alt-text: #555555;\n  --color-inverse: #1111aa;\n  --color-inverse-text: #ffffff;\n  --color-text: #444444;\n  --color-text-muted: #808080;\n  --color-heading: #333333;\n  --color-heading-alt: #ff0000;\n  --color-link: #1111aa;\n  --color-link-quiet: #1111aa;\n  --color-link-visited: #800080;\n  --color-link-hover: #ff0000;\n  --color-link-active: #ff0000;\n  --color-border: #aaaaaa;\n  --color-border-strong: #8899cc;\n  --color-border-muted: #dddddd;\n  --color-accent: #ddffaa;\n  --color-accent-text: #333333;\n  --color-accent-alt: #ff0000;\n  --color-fill-1: #ddeeff;\n  --color-fill-2: #ddffaa;\n  --color-fill-3: #ffffaa;\n  --color-fill-4: #f7f7f7;\n  --color-button: #ddffaa;\n  --color-button-text: #333333;\n  --color-button-hover-text: #000000;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #444444;\n  --color-input: #ffffff;\n  --color-input-text: #333333;\n  --color-input-border: #808080;\n  --color-disabled: #efefef;\n  --color-disabled-text: #808080;\n  --color-danger: #cc0000;\n  --color-danger-surface: #ffffff;\n  --color-success: #2a7a00;\n  --color-warning: #9a5b00;\n  --color-notice: #ffffaa;\n  --color-notice-text: #333333;\n  --color-focus: #1111aa;\n  --color-shadow: #aaaaaa;\n  --color-overlay: #efefef;\n}\n\n/* @part type */\n:root {\n  --font-body: \"Times New Roman\", Times, serif;\n  --font-heading: \"Times New Roman\", Times, serif;\n  --font-ui: Arial, Helvetica, sans-serif;\n  --font-mono: \"Courier New\", Courier, monospace;\n  --text-base: 16px;\n  --text-small: 13px;\n  --text-ui: 13px;\n  --text-large: 18px;\n  --text-display: 48px;\n  --text-h1: 32px;\n  --text-h2: 24px;\n  --text-h3: 19px;\n  --line-body: 1.2;\n  --line-heading: 1.1;\n  --line-display: 1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: underline;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: 0 0 0 3px var(--color-canvas), 0 0 0 5px var(--color-border);\n  --shadow-control: none;\n  --shadow-control-hover: inset 0 -2px 0 var(--color-button-hover-text);\n  --shadow-control-pressed: inset 0 0 0 2px var(--color-border-strong);\n  --shadow-dialog: 0 0 0 4px var(--color-border-strong);\n  --shadow-text: none;\n  --fill-page: var(--color-inverse);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
