{
  "id": "v1-br-4454",
  "long_id": "v1.brutalism.blog.s04.p04.t05.u04",
  "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
  },
  "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-4454",
  "preview_url": "https://chrono.skin/s/v1-br-4454/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\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`, `--font-ui` and `--font-mono` are one monospace stack (Menlo, Consolas, \"DejaVu Sans Mono\", \"Liberation Mono\"): all text, controls and code. `--font-heading` is Arial, Verdana, Helvetica, bold, used for the hero sentence, page titles, part names, table heads, panel and sidebar titles. All are system fonts; the references named only the generic families.\n- `--text-base` 14px with `--line-body` 1.35 is running text. `--text-small` 12px is the head line, breadcrumb, meta lines, hints, code blocks, badges and the footer. `--text-ui` 13px is navigation, buttons, inputs, tabs and pagination. `--text-large` 16px is the hero's lead.\n- Headings: `--text-display` 30px is the hero sentence (22px on a phone), `--text-h1` 22px a page title, `--text-h2` 17px the brand name, figures, grid titles and second-level headings in text, `--text-h3` 14px part names, panel, sidebar and dialog titles. Nothing is uppercased or tracked.\n- A black page: `--color-page`, `--color-canvas` and `--color-surface` are #000000; `--color-surface-alt` #101010 is alternate table rows and code blocks, `--color-surface-strong` #181818 panel titles, group rows and inline code. `--color-text` #bdbdbd is running text, `--color-text-muted` #808080 dates, numbers of parts and meta lines, `--color-heading` #ffffff headings and figures, `--color-heading-alt` #56c8ff sidebar titles.\n- `--color-link` and `--color-link-quiet` are #56c8ff, `--color-link-visited` #9e9eff, `--color-link-hover` and `--color-link-active` #ffffff. Links in running text are underlined (`--link-decoration`); navigation, contents, breadcrumb, tabs and pagination use `--link-decoration-quiet` (none) and take the underline on hover.\n- `--color-bar` #1177aa with `--color-bar-text` #ffffff is the navigation bar, table heads and dialog titles. `--color-bar-alt` #101010 with `--color-bar-alt-text` #bdbdbd is the head line and the footer; the brand name is set in `--color-bar-alt-text` because it stands on that bar. `--color-inverse` #56c8ff with `--color-inverse-text` #000000 is the current navigation link, tab and page number.\n- `--color-border` #555555 at `--border-width` 1px is every ordinary rule: between parts, under table rows, around panels, code blocks, grid cells and tabs. `--color-border-strong` #1177aa at `--border-width-strong` 5px is the rule under the header and the page header, the top of a grid cell and the left edge of a notice. `--color-border-muted` #303030 is the leader of a figure, the rules inside the list and the box of the empty state.\n- `--color-fill-1` to `--color-fill-4` repeat the three surfaces; chapters are told apart by their heavy top rule and number, not by colour. Text on any surface or fill is `--color-text`.\n- `--color-accent` #1177aa with white text is the count badge; `--color-accent-alt` #9e9eff is the edge of a \"new\" mark. Status colours are light enough to read on black: `--color-success` #60d060, `--color-warning` #e0b040, `--color-danger` #ff6060; these three and `--color-text-muted` were chosen for the black page, not measured.\n- Buttons are `--color-button` #1177aa with white text and a 1px edge in `--color-input-border`; the secondary button is drawn on the page itself (`--fill-button-secondary` transparent) in `--color-button-secondary-text`. Inputs are `--color-input` #101010 with white text.\n- Surface: all radii are 0 and every fill is flat. Boxes and controls stand on a hard underside in `--color-shadow` #555555 with no blur: `--shadow-panel` 3px, `--shadow-control` 2px (4px hovered, turned inside when pressed), `--shadow-dialog` 5px. `--fill-button-hover` darkens the button (80% of it over black). `--focus-ring` is a 2px solid outline; `--transition` none; `--backdrop-blur` 0px.\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 canvas, and `--color-text`, headings and links on the canvas, surfaces and fills only. Nothing but the bars stands on `--fill-page`. Keep to this so that other palettes work with the same structure.\n- One-off sizes written with `calc()`: the brand mark is 1.3 times `--text-h2`; joined tabs overlap by one `--border-width`.\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\n## Never\n\n- `content-width >= 90%`: the page fills the window; there is no centred column.\n- `font-size <= 30px`: the largest text is the 30px sentence that opens the home page.\n- `font-size >= 12px`: small text is 12px; nothing is set smaller.\n- `font-families <= 2`: one monospace for everything and one bold sans for headings.\n- `letter-spacing <= 0px`: no text is tracked.\n- `uppercase-text <= 0%`: nothing is uppercased by the stylesheet.\n- `line-height <= 1.4`: text is set tight, as a terminal sets it.\n- `border-radius <= 0px`: every box and control is square.\n- `box-shadow-blur <= 0px`: the only shadow is the hard keyline inside a hovered or pressed button; nothing is soft and nothing floats.\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 <= 3px`: rules are 1px, heavy rules a 3px double line.\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@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  .ds-nav__list {\n    justify-content: flex-start;\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",
    "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=\"square\" aria-hidden=\"true\"><path d=\"M12 3a9 9 0 1 1-9 9\"/><path d=\"M12 17a5 5 0 1 1 5-5\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/></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></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.</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.p04.t05.u04\",\n  \"library\": \"2026.10.07-2111\",\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  },\n  \"source\": \"https://chrono.skin/s/v1-br-4454\",\n  \"short\": \"v1-br-4454\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #fffceb;\n  --color-canvas: #fffceb;\n  --color-surface: #fffceb;\n  --color-surface-alt: #ffffff;\n  --color-surface-strong: #eeeeee;\n  --color-bar: #111111;\n  --color-bar-text: #dddddd;\n  --color-bar-alt: #222222;\n  --color-bar-alt-text: #dddddd;\n  --color-inverse: #ff3333;\n  --color-inverse-text: #000000;\n  --color-text: #111111;\n  --color-text-muted: #444444;\n  --color-heading: #000000;\n  --color-heading-alt: #111111;\n  --color-link: #00449e;\n  --color-link-quiet: #111111;\n  --color-link-visited: #444444;\n  --color-link-hover: #000000;\n  --color-link-active: #ff3333;\n  --color-border: #111111;\n  --color-border-strong: #000000;\n  --color-border-muted: #cccccc;\n  --color-accent: #ff3333;\n  --color-accent-text: #000000;\n  --color-accent-alt: #ff3333;\n  --color-fill-1: #cdecff;\n  --color-fill-2: #ffffff;\n  --color-fill-3: #eeeeee;\n  --color-fill-4: #dddddd;\n  --color-button: #111111;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #cdecff;\n  --color-button-secondary: #eeeeee;\n  --color-button-secondary-text: #111111;\n  --color-input: #ffffff;\n  --color-input-text: #111111;\n  --color-input-border: #111111;\n  --color-disabled: #eeeeee;\n  --color-disabled-text: #444444;\n  --color-danger: #b00000;\n  --color-danger-surface: #ffffff;\n  --color-success: #1a6b1a;\n  --color-warning: #7a4e00;\n  --color-notice: #cdecff;\n  --color-notice-text: #111111;\n  --color-focus: #00449e;\n  --color-shadow: #000000;\n  --color-overlay: #eeeeee;\n}\n\n/* @part type */\n:root {\n  --font-body: Menlo, Consolas, \"DejaVu Sans Mono\", \"Liberation Mono\", monospace;\n  --font-heading: Arial, Verdana, Helvetica, sans-serif;\n  --font-ui: Menlo, Consolas, \"DejaVu Sans Mono\", \"Liberation Mono\", monospace;\n  --font-mono: Menlo, Consolas, \"DejaVu Sans Mono\", \"Liberation Mono\", monospace;\n  --text-base: 14px;\n  --text-small: 12px;\n  --text-ui: 13px;\n  --text-large: 16px;\n  --text-display: 30px;\n  --text-h1: 22px;\n  --text-h2: 17px;\n  --text-h3: 14px;\n  --line-body: 1.35;\n  --line-heading: 1.15;\n  --line-display: 1.05;\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  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 3px;\n  --border-style: double;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: inset 0 0 0 2px var(--color-button), inset 0 0 0 3px var(--color-button-hover-text);\n  --shadow-control-pressed: inset 0 0 0 3px var(--color-button-hover-text);\n  --shadow-dialog: none;\n  --shadow-text: none;\n  --fill-page: var(--color-page);\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: color-mix(in srgb, var(--color-button) 85%, white);\n  --fill-button-secondary: transparent;\n  --fill-input: transparent;\n  --focus-ring: 3px double var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
