{
  "id": "v1-br-1b11-dc",
  "long_id": "v1.brutalism.blog.s01.p11.t01.u01.dc",
  "name": "Web brutalism, 2017",
  "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
  },
  "density": "compact",
  "summary": "A page that looks undesigned on purpose, as published between 2014 and 2019 by people reacting against polished, template-built sites: the browser's own serif at the browser's own sizes, black on white, blue underlined links that turn purple once visited, and hard black rules where other styles would use cards. Nothing is rounded, tinted or animated, and the only relief is the browser's own 1px bevel on a push button; structure comes from the order of the HTML, from 1px and 2px lines, from ruled tables and bulleted lists, and from one oversized bold headline. It was the common look of personal logs, link lists, manifestos and small tools whose authors wanted the page to load instantly and to say so.",
  "url": "https://chrono.skin/s/v1-br-1b11-dc",
  "preview_url": "https://chrono.skin/s/v1-br-1b11-dc/specimen.html",
  "files": {
    "STYLE.md": "# Web brutalism, 2017\n\n## Summary\n\nA page that looks undesigned on purpose, as published between 2014 and 2019 by people reacting against polished, template-built sites: the browser's own serif at the browser's own sizes, black on white, blue underlined links that turn purple once visited, and hard black rules where other styles would use cards. Nothing is rounded, tinted or animated, and the only relief is the browser's own 1px bevel on a push button; structure comes from the order of the HTML, from 1px and 2px lines, from ruled tables and bulleted lists, and from one oversized bold headline. It was the common look of personal logs, link lists, manifestos and small tools whose authors wanted the page to load instantly and to say so.\n\n## Layout\n\n- The page is fluid: `.ds-page__frame` is `--size-page` (100%) wide and starts `--space-3` (8px, the browser's body margin) from the window edge on every side. It is never centred in a narrow column and never given a maximum width; text lines run as long as the window allows.\n- Order from the top: `.ds-nav` (the brand, a ruled square mark and the site name, with a one-line tagline beside it, then one line of links cut by `|`, then a 2px rule across the page), `.ds-page__columns`, `.ds-footer`.\n- `.ds-page__columns` holds `.ds-page__main`, which takes all remaining width, and `.ds-sidebar` at `--size-sidebar` (300px) on the right behind a 1px vertical rule. The sidebar is always on the right. A page that needs no sidebar leaves it out and the main column fills the window.\n- The main column is one stack in source order. Blocks are `.ds-page__section`, `--space-5` (24px) apart, with a bold `.ds-page__label` line above when the block needs a name. Blocks are separated by that gap or by a rule (`.ds-page__rule`, or the component's own border), never by cards, tints or large whitespace.\n- Inner pages (an archive, a single entry, a table of readings, an about page) keep the same header, the same line of links, the same two columns and the same footer. The `.ds-breadcrumb` sits directly under the 2px rule of the navigation, above the columns. The hero is not used: the main column opens with `.ds-page-header` (32px title, one line of description, one button at the right, a 2px rule below). Under it, in this order when present: the `.ds-stats` line, `.ds-tabs` with the table or list in `.ds-tabs__body`, `.ds-pagination`, then a `.ds-page__rule` and the form. Tabs are a line of text links under the page header, never part of the navigation. The sidebar carries lists that belong to that page, enough of them that the two columns end near each other.\n- Views. The specimen is one small site with five views, one showing at a time; the header, the line of links and the footer are written once around them. `log` is the home page: hero, the newest entry in full, earlier entries as a list, the sections grid. `archive` is a year of entries: figures, tabs over the table, pagination, and the empty state of a section with nothing in it. `entry` is one entry with its comments, the notice that a comment is held, the confirmation for deleting a comment, and the comment form with its error. `readings` is a month of daily figures in a grouped table. `about` is running text, the one boxed note and the list of other logs. A view is `<section class=\"ds-view\" id=\"...\">`; links between views are plain `href=\"#id\"`.\n- Below 800px the columns stack: the sidebar goes under the main column behind a 1px rule, the hero headline drops to `--text-h1`, figures go two to a line, the grid becomes two columns and form labels sit above their fields.\n- Spacing scale: `--space-1` 2px is the vertical padding of the link bar, buttons and inputs; `--space-2` 4px is the padding of table cells, panel titles and tags and the gap under a title; `--space-3` 8px is the page margin, the padding of panels, notices, grid cells and list rows and the gap between buttons; `--space-4` 16px is the gap between paragraphs, under headings and between the columns; `--space-5` 24px is the gap between blocks and the indent of sidebar lists; `--space-6` 40px is the indent of lists and quotations in running text.\n- Fixed sizes: `--size-label` 140px is the label column of a form, `--size-field` 320px a text input (a textarea is twice that), `--size-num` 120px a numeric table column, `--size-dialog` 420px a dialog.\n- On a phone (560px and below) there is no menu button: `.ds-nav__bar` stays a wrapping line of its links, but each `.ds-nav__item` after the first stretches (`flex: 1 1 auto`) and its `|` separator takes the free space, so the links spread across the full width. 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- Black on white with the browser's own blue: `--color-page`, `--color-canvas` and `--color-surface` are #ffffff; `--color-text`, `--color-heading`, `--color-heading-alt` and every border are #000000; `--color-text-muted` is #444444.\n- `--color-link`, `--color-link-quiet`, `--color-link-visited` and `--color-focus` are #0000ee, the default link colour: on a text-only front page nearly everything is a blue underlined link and visited links are not told apart. `--color-link-hover` and `--color-link-active` are #cc0000.\n- `--color-bar` #000000 with white `--color-bar-text` is the black line of navigation, table heads and dialog titles. `--color-bar-alt` (footer) is white with black text. `--color-inverse` #0000ee with white text is the current navigation item.\n- The only tints are the faint blues that a blue link leaves around itself: `--color-surface-alt` #f8f8ff, `--color-surface-strong`, `--color-notice` and `--color-disabled` #f0f0ff, `--color-fill-4` and `--color-overlay` #d8d8ff, `--color-border-muted` #b8b8f8. `--color-fill-1` to `--color-fill-3` repeat white and the two faintest.\n- `--color-accent` #cc0000 with white text is the count badge, the one red on the page; `--color-accent-alt` is the same red, as a mark.\n- Buttons are white with a black edge: the primary has black text, the secondary blue text. Inputs are white with a black edge.\n- Status: `--color-danger` #cc0000 is measured; `--color-success` #006400 and `--color-warning` #8a4b00 are derived, dark enough to read on white.\n\nSpacing is compact: every `--space-*` token of the layout was multiplied by 0.8. Where the Layout section names a spacing in pixels, the tokens are right.\n\n## Components\n\n- `.ds-page` on `<body>`: page colour, 8px margin and base type. Everything goes in `.ds-page__frame`; the columns in `.ds-page__columns` with `.ds-page__main` first. `.ds-page__section` is a block of the main column (`--last` drops its bottom gap), `.ds-page__label` its bold caption, `.ds-page__rule` a 2px rule across the column.\n- `.ds-nav`: site header closed by a 2px rule. `.ds-nav__head` holds the `.ds-brand` and `.ds-nav__tagline`, centred on one line. `.ds-nav__bar` is a list of `.ds-nav__item`, each holding one `.ds-nav__link`; the `|` between items is drawn by the stylesheet. 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-brand`: the site's mark and name, a link to the home page, first thing in the header. `.ds-brand__mark` is a plain ruled square as tall as the name (1.2 times `--text-h1`), dressed like the push button: `--fill-button`, the same edge in `--color-input-border` and the same bevel, 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 32px bold underlined text in `--color-heading`. The name `chronoskin` and the mark are placeholders for the installing project's own name and logo.\n- `.ds-breadcrumb`: a line of `.ds-breadcrumb__link` items with `.ds-breadcrumb__sep` (`>`) between them, ending in a bold `.ds-breadcrumb__current`.\n- `.ds-hero`: the introduction of the home page: `.ds-hero__title` (48px bold, line height 1), one `.ds-hero__lead` line at 18px and `.ds-hero__actions` with one button and one text link, closed by a 2px rule. No box, no fill, 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` (32px) and one `.ds-page-header__text` line; `.ds-page-header__action` at the right holds one button. A 2px rule closes it.\n- `.ds-stat`: one figure: a bold 24px `.ds-stat__value` followed on the same line by its `.ds-stat__label` in body text. Three to five sit in a `.ds-stats` row between two 1px rules, divided by 1px vertical rules. It is a line of a ruled table, not a set of cards.\n- `.ds-post`: one entry: `.ds-post__date` in monospace above, a `.ds-prose` body, `.ds-post__meta` below with quiet links separated by `|`.\n- `.ds-prose`: running text: h1, h2, h3, paragraphs, disc-bulleted and numbered lists indented 40px, `code` in 13px monospace with no background, `blockquote` indented 40px on both sides with no rule.\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`: the default push button, a `<button>`, or an `<a>` when it only leads to another page: grey, square, bevelled, 13px Arial. `.ds-button--secondary` is the same on the secondary fill. `.ds-button--danger` is the destructive action: bold `--color-danger` text on `--color-danger-surface` with a danger-coloured edge. `disabled` or `is-disabled` greys it and its edge; `is-active` darkens the edge to `--color-border-strong`. Group with `.ds-buttons`.\n- `.ds-form`: a form with no box: `.ds-form__title`, rows (`.ds-form__row`) of a `.ds-form__label` and a `.ds-form__field`. Controls take `.ds-form__input` (`--wide` 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. An error notice for the whole form is a `.ds-notice ds-notice--error ds-form__notice` under the title.\n- `.ds-table`: a data table with every cell ruled 1px, full width, bold `th` on the bar fill, `.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`: list of entries between 1px rules. Each `.ds-list__item` has a bold 18px `.ds-list__title` link, an optional `.ds-list__excerpt` and a `.ds-list__meta` line.\n- `.ds-panel`: a 1px ruled box with a bold `.ds-panel__title` strip and a `.ds-panel__body`. Use it rarely; most content is not boxed.\n- `.ds-grid`: four columns of `.ds-grid__cell` that share their 1px rules like table cells (`--2`, `--3`, `--4` select the other fills), each with `.ds-grid__title` and `.ds-grid__text`. There is no gap between cells.\n- `.ds-tabs`: a line of `.ds-tabs__item`, each holding a `.ds-tabs__tab` link, cut by `|` and standing on a 1px rule. The current one is a `<span class=\"ds-tabs__tab is-current\">`: bold text that the stylesheet puts in square brackets. Content goes in `.ds-tabs__body`.\n- `.ds-badge`: a count: bold 13px on the accent fill, square. `.ds-badge--alt` is a bold word with an asterisk 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, which the stylesheet puts in square brackets. No fill, no pill, no icon.\n- `.ds-sidebar`: right column behind a 1px rule. Each `.ds-sidebar__block` has a `.ds-sidebar__title` and a disc-bulleted `.ds-sidebar__list` of `.ds-sidebar__link` items with optional `.ds-sidebar__count`; `.ds-sidebar__text` is a paragraph; `.ds-sidebar__search` is an input with a button.\n- `.ds-notice`: a sentence in a 2px box, starting with a bold `.ds-notice__title`. `.ds-notice--error` uses the danger colour for text and box. Stack several in `.ds-notices`.\n- `.ds-pagination`: a line of `.ds-pagination__link` items: previous, numbers, next. The current page is a `<span>` with `is-current`: bold, in square brackets. `is-disabled` is muted and not underlined.\n- `.ds-dialog`: a 2px ruled box, `--size-dialog` wide, with a bold `.ds-dialog__title` on the bar fill, `.ds-dialog__body`, `.ds-dialog__text` and left-aligned `.ds-dialog__actions`. It sits in the page flow on `.ds-dialog__backdrop`, a flat block of `--color-overlay` that is only as wide as the dialog plus 24px on every side, never a band across the column. No shadow, no dimming, no centring.\n- `.ds-empty`: a 1px ruled box with a plain `.ds-empty__text` sentence and one secondary button, left-aligned.\n- `.ds-footer`: 13px line under a 2px rule: one `.ds-footer__row` with a sentence left and `.ds-footer__links` of `.ds-footer__link` items right.\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- `.ds-avatar`: a ruled square with two monospace initials on the strong surface, set before a person's name in a list of comments. No pictures.\n\n## Never\n\n- `block-gap <= 40px`: blocks sit a line or a rule apart.\n- `content-width >= 90%`: text fills the window; 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, button and input is square.\n- `box-shadow-blur <= 0px`: the only shadow is the hard 1px bevel of a control; nothing is soft and nothing floats.\n- `text-shadow = none`: text is flat.\n- `gradient-fills <= 0%`: every fill is one flat colour.\n- `border-width <= 2px`: rules are 1px, emphasised rules 2px.\n- `transition = none`: states change instantly.\n- `animation = none`: nothing moves.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen: a boxed block copies `.ds-panel` (1px `--color-border` rule, `--space-3` padding), a row type copies `.ds-list__item` (1px rule below, `--space-3` padding), a line of choices copies `.ds-tabs` (text links cut by `|`, the current one bold in brackets), a status copies the bracketed `.ds-badge--success`. 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: plain text before a label, a rule before a box, a native control before a custom one, and no radius, shadow, gradient, icon or transition at all.\n",
    "components.css": "/* Layout tokens (structure part). Read from the references: the browser's 8px\n   body margin, 2px bar padding, a 16px paragraph gap, 24px between blocks and\n   the browser's 40px list indent. The page fills the window. */\n:root {\n  --size-page: 100%;\n  --size-sidebar: 300px;\n  --size-label: 140px;\n  --size-field: 320px;\n  --size-dialog: 420px;\n  --size-num: 120px;\n  --space-1: 2px;\n  --space-2: 3px;\n  --space-3: 6px;\n  --space-4: 13px;\n  --space-5: 19px;\n  --space-6: 32px;\n}\n\n/* ---------- shell ---------- */\n.ds-page {\n  margin: 0;\n  padding: var(--space-3);\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/* The sheet: as wide as the window, no frame of its own. */\n.ds-page__frame {\n  box-sizing: border-box;\n  width: var(--size-page);\n  margin: 0;\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__columns {\n  display: flex;\n  align-items: flex-start;\n  padding: var(--space-4) var(--space-3) var(--space-5);\n}\n.ds-page__main {\n  flex: 1;\n  min-width: 0;\n  padding-right: var(--space-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/* Plain bold caption above a block. */\n.ds-page__label {\n  margin: 0 0 var(--space-3);\n  font-weight: var(--weight-bold);\n  color: var(--color-heading);\n}\n/* A full-width rule, the hr of the style. */\n.ds-page__rule {\n  height: 0;\n  margin: var(--space-5) 0;\n  border-style: var(--border-style);\n  border-color: var(--color-border-strong);\n  border-width: var(--border-width-strong) 0 0;\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-5);\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: calc(var(--text-h1) * 1.2);\n  height: calc(var(--text-h1) * 1.2);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\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-display);\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 brand, then one line of links cut by pipes ---------- */\n.ds-nav {\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__head {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-4);\n  padding: var(--space-3);\n}\n.ds-nav__tagline {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-nav__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin: 0;\n  padding: var(--space-1) var(--space-3);\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-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__item + .ds-nav__item::before {\n  content: \"|\";\n  margin: 0 var(--space-3);\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; an entry belongs to the log. */\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#log\"],\n.ds-page:has(#log:target) .ds-nav__link[href=\"#log\"],\n.ds-page:has(#entry:target) .ds-nav__link[href=\"#log\"],\n.ds-page:has(#archive:target) .ds-nav__link[href=\"#archive\"],\n.ds-page:has(#readings:target) .ds-nav__link[href=\"#readings\"],\n.ds-page:has(#about:target) .ds-nav__link[href=\"#about\"] {\n  padding: 0 var(--space-2);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n\n/* ---------- breadcrumb ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-3) var(--space-3) 0;\n  list-style: none;\n}\n.ds-breadcrumb__link {\n  color: var(--color-link);\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 oversized headline set tight, a line, a button ---------- */\n.ds-hero {\n  margin: 0 0 var(--space-5);\n  padding: 0 0 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-3);\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-hero__lead {\n  margin: 0 0 var(--space-4);\n  font-size: var(--text-large);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: var(--space-4);\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  margin: 0 0 var(--space-4);\n  padding: 0 0 var(--space-3);\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-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-page-header__text {\n  margin: 0;\n  color: var(--color-text);\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- stats: a ruled line of figures ---------- */\n.ds-stats {\n  display: flex;\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: var(--border-width) 0;\n}\n.ds-stat {\n  flex: 1;\n  min-width: 0;\n  padding: var(--space-3) var(--space-4);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat:first-child {\n  padding-left: 0;\n  border-left: 0;\n}\n.ds-stat__value {\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  color: var(--color-heading);\n}\n.ds-stat__label {\n  color: var(--color-text);\n}\n\n/* ---------- post and prose ---------- */\n.ds-post {\n  margin: 0 0 var(--space-5);\n}\n.ds-post__date {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-post__meta {\n  margin: var(--space-4) 0 0;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-4);\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  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n  padding: 0 0 0 var(--space-6);\n}\n.ds-prose ul {\n  list-style: disc;\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 var(--space-6) var(--space-4);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- buttons: the browser's own push button, squared ---------- */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-button {\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-1) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\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-body);\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}\n.ds-button:active,\n.ds-button.is-active {\n  border-color: var(--color-border-strong);\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  font-weight: var(--weight-bold);\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  cursor: default;\n}\n\n/* ---------- form: label left, default control right, no box ---------- */\n.ds-form {\n  margin: 0;\n}\n.ds-form__title {\n  margin: 0 0 var(--space-4);\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  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  width: var(--size-label);\n  padding-top: var(--space-1);\n}\n.ds-form__field {\n  flex: 1;\n  min-width: 0;\n}\n.ds-form__input {\n  box-sizing: border-box;\n  width: var(--size-field);\n  max-width: 100%;\n  margin: 0;\n  padding: var(--space-1) 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  line-height: var(--line-body);\n  transition: var(--transition);\n}\n.ds-form__input--wide {\n  width: calc(var(--size-field) * 2);\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-2) 0 0;\n  font-weight: var(--weight-bold);\n  color: var(--color-danger);\n}\n/* A notice inside a form sits above the first row. */\n.ds-notice.ds-form__notice {\n  margin: 0 0 var(--space-4);\n}\n.ds-form__hint {\n  margin: var(--space-2) 0 0;\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-3);\n}\n.ds-form__checkbox {\n  margin: 0;\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: var(--space-4) 0 0;\n  padding-left: var(--size-label);\n}\n\n/* ---------- table: every cell ruled, like border=\"1\" ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  border-radius: var(--radius-panel);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\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: rows under a rule ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__item {\n  padding: var(--space-3) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__title {\n  color: var(--color-link);\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  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-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- panel: a ruled box ---------- */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-body);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__body {\n  padding: var(--space-3);\n}\n\n/* ---------- grid: cells that share their rules ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: var(--border-width) 0 0 var(--border-width);\n}\n.ds-grid__cell {\n  min-width: 0;\n  padding: var(--space-3);\n  background: var(--color-fill-1);\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: 0 var(--border-width) var(--border-width) 0;\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-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  color: var(--color-heading);\n}\n.ds-grid__text {\n  margin: 0;\n}\n\n/* ---------- tabs: a line of links cut by pipes, the current one in brackets ---------- */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\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}\n.ds-tabs__item + .ds-tabs__item::before {\n  content: \"|\";\n  margin: 0 var(--space-3);\n  color: var(--color-text-muted);\n}\n.ds-tabs__tab {\n  color: var(--color-link);\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  color: var(--color-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-tabs__tab.is-current::before {\n  content: \"[\";\n}\n.ds-tabs__tab.is-current::after {\n  content: \"]\";\n}\n.ds-tabs__body {\n  padding: var(--space-4) 0 0;\n}\n\n/* ---------- badge: a marked count, a boxed tag, a bracketed status word ---------- */\n.ds-badge {\n  padding: 0 var(--space-2);\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  font-family: inherit;\n  font-size: inherit;\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-2);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\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.ds-badge--success::before,\n.ds-badge--warning::before,\n.ds-badge--danger::before {\n  content: \"[\";\n}\n.ds-badge--success::after,\n.ds-badge--warning::after,\n.ds-badge--danger::after {\n  content: \"]\";\n}\n\n/* ---------- sidebar: a ruled column of bulleted link lists ---------- */\n.ds-sidebar {\n  flex: none;\n  box-sizing: border-box;\n  width: var(--size-sidebar);\n  padding: 0 0 0 var(--space-4);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\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-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-body);\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 0 0 var(--space-5);\n  list-style: disc;\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}\n.ds-sidebar__search {\n  display: flex;\n  gap: var(--space-2);\n}\n\n/* ---------- notice: a hard box around a sentence ---------- */\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n}\n.ds-notice__title {\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: words and numbers, the current one in brackets ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  color: var(--color-link);\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  color: var(--color-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-pagination__link.is-current::before {\n  content: \"[\";\n}\n.ds-pagination__link.is-current::after {\n  content: \"]\";\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-text-muted);\n  text-decoration: none;\n}\n\n/* ---------- dialog: a hard-ruled box in the page flow ---------- */\n.ds-dialog__backdrop {\n  box-sizing: border-box;\n  width: fit-content;\n  max-width: 100%;\n  padding: var(--space-5);\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  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-body);\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-4);\n}\n.ds-dialog__actions {\n  display: flex;\n  gap: var(--space-3);\n}\n\n/* ---------- empty: a sentence and a button in a ruled box ---------- */\n.ds-empty {\n  padding: var(--space-4) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-3);\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  padding: var(--space-3);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-size: var(--text-small);\n}\n.ds-footer__row {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\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: one column, in source order ---------- */\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.ds-avatar {\n  display: inline-block;\n  box-sizing: content-box;\n  width: calc(var(--text-base) * 2);\n  height: calc(var(--text-base) * 2);\n  margin-right: var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: calc(var(--text-base) * 2);\n  text-align: center;\n  text-transform: uppercase;\n  vertical-align: middle;\n}\n\n@media (max-width: 800px) {\n  .ds-page__columns {\n    flex-direction: column;\n    align-items: stretch;\n  }\n  .ds-page__main {\n    padding-right: 0;\n  }\n  .ds-sidebar {\n    width: auto;\n    margin-top: var(--space-5);\n    padding: var(--space-4) 0 0;\n    border-left: 0;\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  .ds-stats {\n    flex-wrap: wrap;\n  }\n  .ds-stat {\n    flex: none;\n    box-sizing: border-box;\n    width: 50%;\n    padding-left: 0;\n    border-left: 0;\n  }\n  .ds-grid {\n    grid-template-columns: repeat(2, 1fr);\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__input--wide {\n    width: 100%;\n  }\n  .ds-form__actions {\n    padding-left: 0;\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-1) var(--space-2);\n  }\n  .ds-table th.ds-table__num,\n  .ds-table td.ds-table__num {\n    width: auto;\n  }\n  .ds-prose blockquote {\n    margin-left: var(--space-4);\n    margin-right: 0;\n  }\n}\n\n/* ---------- phones: the table scrolls in its own box; the line of links spans the bar ---------- */\n@media (max-width: 800px) {\n  .ds-tabs__body {\n    overflow-x: auto;\n  }\n}\n@media (max-width: 560px) {\n  .ds-nav__item + .ds-nav__item {\n    display: flex;\n    flex: 1 1 auto;\n    align-items: baseline;\n  }\n  .ds-nav__item + .ds-nav__item::before {\n    margin: 0 auto;\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 weather log. Web brutalism, 2014 to 2019: 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<div class=\"ds-page__frame\">\n\n  <header class=\"ds-nav\" data-component=\"nav\">\n    <div class=\"ds-nav__head\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#log\"><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\">weather, tides and a home-made rain gauge. updated when it rains.</p>\n    </div>\n    <ul class=\"ds-nav__bar\">\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#log\">log</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#archive\">archive</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#readings\">readings</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#about\">about</a></li>\n    </ul>\n  </header>\n\n  <!-- View 1, the home page: the log itself. Newest entry in full, earlier ones as a list. -->\n  <section class=\"ds-view ds-view--home\" id=\"log\">\n    <div class=\"ds-page__columns\">\n      <main class=\"ds-page__main\">\n\n        <section class=\"ds-hero\" data-component=\"hero\">\n          <h1 class=\"ds-hero__title\">This is a log of the weather on one marsh.</h1>\n          <p class=\"ds-hero__lead\">One person, four instruments, no pictures. The newest entry is at the top and every reading ever taken is in a table you can download.</p>\n          <div class=\"ds-hero__actions\">\n            <a class=\"ds-button\" href=\"#readings\">Get the readings</a>\n            <a class=\"ds-link\" href=\"#archive\">or read the archive</a>\n          </div>\n        </section>\n\n        <article class=\"ds-post\" data-component=\"typography\">\n          <p class=\"ds-post__date\">2017-03-14 21:42</p>\n          <div class=\"ds-prose\">\n            <h1>The rain gauge finally agrees with the bucket</h1>\n            <p>After three weeks of drift the tipping gauge now reads within two percent of the plain bucket beside it. The fault was a spider, not the electronics, which is the kind of answer <a class=\"ds-link\" href=\"#about\">the calibration notes</a> never prepare you for.</p>\n            <p>Total for the month so far is <strong>61.4 mm</strong>, most of it in two nights. The marsh path was under water on the ninth.</p>\n            <h2>What changed</h2>\n            <p>Nothing clever. The funnel has a mesh over it and the reed switch was moved a little closer to the magnet.</p>\n            <ul>\n              <li>Mesh over the funnel, 2 mm holes.</li>\n              <li>Switch moved 1 mm closer to the magnet.</li>\n              <li>Bucket emptied and compared every morning for a week.</li>\n            </ul>\n            <h3>Reading the log file</h3>\n            <p>Each tip is one line with a timestamp. Run <code>tips --since 2017-03-01</code> to count them, then multiply by 0.2 to get millimetres.</p>\n          </div>\n          <p class=\"ds-post__meta\">filed under <a class=\"ds-link ds-link--quiet\" href=\"#archive\">instruments</a> | <a class=\"ds-link ds-link--quiet\" href=\"#entry\">12 comments</a> | <a class=\"ds-link ds-link--quiet\" href=\"#entry\">permalink</a></p>\n        </article>\n\n        <section class=\"ds-page__section\" data-component=\"list\">\n          <p class=\"ds-page__label\">Earlier entries</p>\n          <ul class=\"ds-list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#entry\">A wind vane made from a baking tray</a> <span class=\"ds-badge ds-badge--alt\">new</span>\n              <p class=\"ds-list__excerpt\">It points the right way about as often as the forecast does, and it cost nothing.</p>\n              <p class=\"ds-list__meta\">2017-03-09 | instruments | 4 comments</p>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#entry\">Spring tide over the sea wall</a>\n              <p class=\"ds-list__excerpt\">Highest water since the log began. The gauge post survived; the notebook did not.</p>\n              <p class=\"ds-list__meta\">2017-03-05 | tides | 21 comments</p>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title is-visited\" href=\"#entry\">February in numbers</a>\n              <p class=\"ds-list__excerpt\">Nineteen dry days, one gale, and a thermometer that froze to its bracket.</p>\n              <p class=\"ds-list__meta\">2017-03-01 | summaries | 3 comments</p>\n            </li>\n          </ul>\n        </section>\n\n        <section class=\"ds-page__section ds-page__section--last\" data-component=\"grid\">\n          <p class=\"ds-page__label\">Sections</p>\n          <div class=\"ds-grid\">\n            <div class=\"ds-grid__cell\">\n              <h3 class=\"ds-grid__title\">Instruments</h3>\n              <p class=\"ds-grid__text\">Gauges, vanes and repairs. 84 entries. <a class=\"ds-link\" href=\"#archive\">Browse</a></p>\n            </div>\n            <div class=\"ds-grid__cell ds-grid__cell--2\">\n              <h3 class=\"ds-grid__title\">Tides</h3>\n              <p class=\"ds-grid__text\">High water, low water, floods. 51 entries. <a class=\"ds-link\" href=\"#archive\">Browse</a></p>\n            </div>\n            <div class=\"ds-grid__cell ds-grid__cell--3\">\n              <h3 class=\"ds-grid__title\">Summaries</h3>\n              <p class=\"ds-grid__text\">One entry for every month. 37 entries. <a class=\"ds-link\" href=\"#archive\">Browse</a></p>\n            </div>\n            <div class=\"ds-grid__cell ds-grid__cell--4\">\n              <h3 class=\"ds-grid__title\">Asides</h3>\n              <p class=\"ds-grid__text\">One line each, no comments. 412 entries. <a class=\"ds-link\" href=\"#archive\">Browse</a></p>\n            </div>\n          </div>\n        </section>\n\n      </main>\n\n      <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Search</h2>\n          <form class=\"ds-sidebar__search\" action=\"#\">\n            <input class=\"ds-form__input\" type=\"text\" value=\"rain gauge\" aria-label=\"Search the log\">\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\">Sections</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Instruments</a> <span class=\"ds-sidebar__count\">(84)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Tides</a> <span class=\"ds-sidebar__count\">(51)</span></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#archive\">Summaries</a> <span class=\"ds-sidebar__count\">(37)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Asides</a> <span class=\"ds-sidebar__count\">(412)</span></li>\n            <li><a class=\"ds-sidebar__link is-hover\" href=\"#about\">How this is made</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Recently</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">A wind vane made from a baking tray</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">Spring tide over the sea wall</a></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">February in numbers</a></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">Fog, four days of it</a></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">The barometer is wrong again</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">This month</h2>\n          <div class=\"ds-progress\" data-component=\"progress\">\n            <p class=\"ds-progress__label\"><span>Rain against a usual March</span> <span>75%</span></p>\n            <div class=\"ds-progress__track\"><div class=\"ds-progress__bar ds-progress__bar--75\"></div></div>\n          </div>\n          <ul class=\"ds-sidebar__list\">\n            <li>Rain: 61.4 mm</li>\n            <li>Strongest gust: 71 km/h</li>\n            <li>Highest tide: 5.92 m</li>\n            <li><a class=\"ds-sidebar__link\" href=\"#readings\">All readings</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Elsewhere</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#about\">Alder Point tide tables</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#about\">Brackwater bird counts</a></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#about\">Cold Frame Diary</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#about\">Dunlin Road allotments</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#about\">Eleven Knots</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">By year</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2017</a> <span class=\"ds-sidebar__count\">(57)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2016</a> <span class=\"ds-sidebar__count\">(203)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2015</a> <span class=\"ds-sidebar__count\">(188)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2014</a> <span class=\"ds-sidebar__count\">(136)</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">How this is made</h2>\n          <p class=\"ds-sidebar__text\">Typed into a text file and copied to a server. No tracking, no fonts to download, nothing that moves. <a class=\"ds-sidebar__link\" href=\"#about\">More</a></p>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <!-- View 2, an inner page: the archive of one year. Breadcrumb, page header, figures, tabs over a table. -->\n  <section class=\"ds-view\" id=\"archive\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#log\">log</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li><a class=\"ds-breadcrumb__link\" href=\"#archive\">archive</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">2017</li>\n    </ol>\n    <div class=\"ds-page__columns\">\n      <div class=\"ds-page__main\">\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\">Archive for 2017</h1>\n            <p class=\"ds-page-header__text\">Every entry written this year, newest month first.</p>\n          </div>\n          <div class=\"ds-page-header__action\"><button class=\"ds-button\" type=\"button\">Download as text</button></div>\n        </div>\n\n        <ul class=\"ds-stats\" data-component=\"stats\">\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">57</span> <span class=\"ds-stat__label\">entries</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">483</span> <span class=\"ds-stat__label\">comments</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">212.6</span> <span class=\"ds-stat__label\">mm of rain</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">31,400</span> <span class=\"ds-stat__label\">words</span></li>\n        </ul>\n\n        <section class=\"ds-page__section\" 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 date</span></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#archive\">by section</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#archive\">most discussed</a></li>\n          </ul>\n          <div class=\"ds-tabs__body\">\n            <table class=\"ds-table\" data-component=\"table\">\n              <thead>\n                <tr><th>Month</th><th>Longest entry</th><th>Discussion</th><th class=\"ds-table__num\">Comments</th></tr>\n              </thead>\n              <tbody>\n                <tr><td>March 2017</td><td><a class=\"ds-link\" href=\"#entry\">The rain gauge finally agrees with the bucket</a></td><td><span class=\"ds-badge ds-badge--success\">open</span></td><td class=\"ds-table__num\">43</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>February 2017</td><td><a class=\"ds-link is-visited\" href=\"#entry\">The barometer is wrong again</a></td><td><span class=\"ds-badge ds-badge--success\">open</span></td><td class=\"ds-table__num\">118</td></tr>\n                <tr><td>January 2017</td><td><a class=\"ds-link is-visited\" href=\"#entry\">Fog, four days of it</a></td><td><span class=\"ds-badge ds-badge--warning\">closing</span></td><td class=\"ds-table__num\">96</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>December 2016</td><td><a class=\"ds-link\" href=\"#entry\">A year of high water</a></td><td><span class=\"ds-badge ds-badge--danger\">closed</span></td><td class=\"ds-table__num\">72</td></tr>\n                <tr><td>November 2016</td><td><a class=\"ds-link\" href=\"#entry\">The gauge post goes in</a></td><td><span class=\"ds-badge ds-badge--danger\">closed</span></td><td class=\"ds-table__num\">154</td></tr>\n              </tbody>\n            </table>\n          </div>\n        </section>\n\n        <section class=\"ds-page__section\" data-component=\"pagination\">\n          <ul class=\"ds-pagination\">\n            <li><a class=\"ds-pagination__link\" href=\"#archive\">&lt; previous</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\">next &gt;</a></li>\n          </ul>\n        </section>\n\n        <section class=\"ds-page__section ds-page__section--last\">\n          <p class=\"ds-page__label\">Filed under snow</p>\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <p class=\"ds-empty__text\">Nothing is filed under &ldquo;snow&rdquo; yet. It has not snowed.</p>\n            <a class=\"ds-button ds-button--secondary\" href=\"#log\">Back to the log</a>\n          </div>\n        </section>\n\n      </div>\n\n      <aside class=\"ds-sidebar\">\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">By year</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2017</a> <span class=\"ds-sidebar__count\">(57)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2016</a> <span class=\"ds-sidebar__count\">(203)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2015</a> <span class=\"ds-sidebar__count\">(188)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">2014</a> <span class=\"ds-sidebar__count\">(136)</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">By section</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Instruments</a> <span class=\"ds-sidebar__count\">(84)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Tides</a> <span class=\"ds-sidebar__count\">(51)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Summaries</a> <span class=\"ds-sidebar__count\">(37)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Asides</a> <span class=\"ds-sidebar__count\">(412)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Snow</a> <span class=\"ds-sidebar__count\">(0)</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Most discussed</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">The gauge post goes in</a> <span class=\"ds-sidebar__count\">(154)</span></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">The barometer is wrong again</a> <span class=\"ds-sidebar__count\">(118)</span></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">Fog, four days of it</a> <span class=\"ds-sidebar__count\">(96)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">A year of high water</a> <span class=\"ds-sidebar__count\">(72)</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">About this page</h2>\n          <p class=\"ds-sidebar__text\">Comments close thirty days after an entry is posted. Closed entries stay readable.</p>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <!-- View 3: one entry with its comments, the confirmation it can open, and the comment form. -->\n  <section class=\"ds-view\" id=\"entry\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#log\">log</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li><a class=\"ds-breadcrumb__link\" href=\"#archive\">instruments</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">A wind vane made from a baking tray</li>\n    </ol>\n    <div class=\"ds-page__columns\">\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-page-header\">\n          <div class=\"ds-page-header__main\">\n            <h1 class=\"ds-page-header__title\">A wind vane made from a baking tray</h1>\n            <p class=\"ds-page-header__text\">2017-03-09 18:10, filed under instruments. Comments are <span class=\"ds-badge ds-badge--success\">open</span> until 2017-04-08.</p>\n          </div>\n          <div class=\"ds-page-header__action\"><a class=\"ds-button\" href=\"#archive\">All entries</a></div>\n        </div>\n\n        <article class=\"ds-post\">\n          <div class=\"ds-prose\">\n            <p>The shop vane lasted one winter. This one is a baking tray cut along the diagonal, a bicycle spoke and the bearing out of a dead hard disk, and it has now pointed the right way for eleven days running.</p>\n            <p>It turns in less wind than the old one did. That is the bearing, not the tray: the tray is only there because it was flat and already ruined.</p>\n            <blockquote>If it looks home-made, that is because it is. The wind does not mind.</blockquote>\n            <p>Readings from it go into <a class=\"ds-link\" href=\"#readings\">the same table as everything else</a>, eight compass points and no more, because that is as well as anyone can read a tray from a kitchen window.</p>\n          </div>\n        </article>\n\n        <section class=\"ds-page__section\" data-component=\"notice\">\n          <p class=\"ds-page__label\">4 comments</p>\n          <div class=\"ds-notices\">\n            <p class=\"ds-notice\"><span class=\"ds-notice__title\">Received.</span> Your comment is held until someone has read it. That can take a day.</p>\n          </div>\n          <ul class=\"ds-list\">\n            <li class=\"ds-list__item\">\n              <span class=\"ds-avatar\" data-component=\"avatar\">jp</span><a class=\"ds-list__title\" href=\"#entry\">Jonas Pell</a>\n              <p class=\"ds-list__excerpt\">What stops it spinning right round in a gust? Mine did, and then it unscrewed itself.</p>\n              <p class=\"ds-list__meta\">2017-03-09 22:05 | <a class=\"ds-link ds-link--quiet\" href=\"#entry\">reply</a> | <a class=\"ds-link ds-link--quiet\" href=\"#entry\">delete</a></p>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-avatar\">iv</span><a class=\"ds-list__title is-visited\" href=\"#about\">Ines Varga</a>\n              <p class=\"ds-list__excerpt\">Nothing stops it. The spoke is bent over at the top, so it can spin as long as it likes.</p>\n              <p class=\"ds-list__meta\">2017-03-10 07:31 | <a class=\"ds-link ds-link--quiet\" href=\"#entry\">reply</a></p>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-avatar\">ma</span><a class=\"ds-list__title\" href=\"#entry\">Marit Aas</a>\n              <p class=\"ds-list__excerpt\">A tray is steel. Give it a year by the sea and you will be writing this entry again.</p>\n              <p class=\"ds-list__meta\">2017-03-11 12:48 | <a class=\"ds-link ds-link--quiet\" href=\"#entry\">reply</a></p>\n            </li>\n          </ul>\n        </section>\n\n        <section class=\"ds-page__section\" data-component=\"dialog\">\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\">Delete your comment?</h3>\n              <div class=\"ds-dialog__body\">\n                <p class=\"ds-dialog__text\">The comment you posted at 22:05 will be removed from this entry. This cannot be undone.</p>\n                <div class=\"ds-dialog__actions\">\n                  <button class=\"ds-button ds-button--danger\" type=\"button\">Delete</button>\n                  <a class=\"ds-button ds-button--secondary\" href=\"#entry\">Cancel</a>\n                </div>\n              </div>\n            </div>\n          </div>\n        </section>\n\n        <div class=\"ds-page__rule\"></div>\n\n        <section class=\"ds-page__section ds-page__section--last\" data-component=\"form\">\n          <form class=\"ds-form\" action=\"#\">\n            <h3 class=\"ds-form__title\">Leave a comment</h3>\n            <p class=\"ds-notice ds-notice--error ds-form__notice\"><span class=\"ds-notice__title\">Not posted.</span> One field below needs another look. Nothing has been sent.</p>\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=\"Jonas Pell\"></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=\"jonas 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>This entry</option>\n                  <option>An earlier comment</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\">Comment</label>\n              <div class=\"ds-form__field\">\n                <textarea class=\"ds-form__input ds-form__input--wide\" id=\"f-text\" rows=\"5\">I have put a split pin through mine. It has stayed on so far.</textarea>\n                <p class=\"ds-form__hint\">Plain text. Line breaks are kept; addresses become links.</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> Remember my name</label>\n            </div>\n            <div class=\"ds-form__actions\" data-component=\"buttons\">\n              <button class=\"ds-button\" type=\"button\">Post comment</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>Attach a file</button>\n            </div>\n          </form>\n        </section>\n\n      </div>\n\n      <aside class=\"ds-sidebar\">\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">This entry</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li>412 words</li>\n            <li>4 comments, 1 held</li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">Permalink</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">As plain text</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Before and after</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#log\">The rain gauge finally agrees with the bucket</a></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">Spring tide over the sea wall</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Also in instruments</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">The gauge post goes in</a></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">The barometer is wrong again</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">A thermometer screen from a bird box</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">All 84 entries</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Latest comments</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">Marit Aas</a> on the wind vane: a tray is steel.</li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">Halvard Moe</a> on the spring tide: the wall was built for 5.5 m.</li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">Jonas Pell</a> on the wind vane: what stops it spinning?</li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#entry\">Tove Lindqvist</a> on February in numbers: nineteen dry days is a record.</li>\n            <li><a class=\"ds-sidebar__link\" href=\"#entry\">Dov Peretz</a> on the rain gauge: check the funnel for spiders.</li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Sections</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Instruments</a> <span class=\"ds-sidebar__count\">(84)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Tides</a> <span class=\"ds-sidebar__count\">(51)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Summaries</a> <span class=\"ds-sidebar__count\">(37)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Asides</a> <span class=\"ds-sidebar__count\">(412)</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Comment rules</h2>\n          <p class=\"ds-sidebar__text\">Held until read. Closed after thirty days. You can delete your own for an hour after posting.</p>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <!-- View 4: the readings. A month of daily figures in one table. -->\n  <section class=\"ds-view\" id=\"readings\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#log\">log</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li><a class=\"ds-breadcrumb__link\" href=\"#readings\">readings</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">March 2017</li>\n    </ol>\n    <div class=\"ds-page__columns\">\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-page-header\">\n          <div class=\"ds-page-header__main\">\n            <h1 class=\"ds-page-header__title\">Readings, March 2017</h1>\n            <p class=\"ds-page-header__text\">One line a day, taken at 09:00. Nothing is smoothed or corrected.</p>\n          </div>\n          <div class=\"ds-page-header__action\"><button class=\"ds-button\" type=\"button\">Download as text</button></div>\n        </div>\n\n        <ul class=\"ds-stats\">\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">61.4</span> <span class=\"ds-stat__label\">mm of rain</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">71</span> <span class=\"ds-stat__label\">km/h, strongest gust</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">5.92</span> <span class=\"ds-stat__label\">m, highest tide</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">-2.1</span> <span class=\"ds-stat__label\">&deg;C, coldest night</span></li>\n        </ul>\n\n        <section class=\"ds-page__section\">\n          <ul class=\"ds-tabs\">\n            <li class=\"ds-tabs__item\"><span class=\"ds-tabs__tab is-current\" aria-current=\"true\">all four</span></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#readings\">rain</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#readings\">wind</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#readings\">tide</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#readings\">temperature</a></li>\n          </ul>\n          <div class=\"ds-tabs__body\">\n            <table class=\"ds-table\">\n              <thead>\n                <tr><th>Day</th><th>Wind</th><th>State</th><th class=\"ds-table__num\">Rain, mm</th><th class=\"ds-table__num\">High tide, m</th><th class=\"ds-table__num\">Night low, &deg;C</th></tr>\n              </thead>\n              <tbody>\n                <tr class=\"ds-table__group\"><td colspan=\"6\">Week 11</td></tr>\n                <tr><td>Tue 14</td><td>SW, fresh</td><td><span class=\"ds-badge ds-badge--success\">read</span></td><td class=\"ds-table__num\">4.2</td><td class=\"ds-table__num\">5.31</td><td class=\"ds-table__num\">6.4</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>Mon 13</td><td>W, strong</td><td><span class=\"ds-badge ds-badge--success\">read</span></td><td class=\"ds-table__num\">18.6</td><td class=\"ds-table__num\">5.48</td><td class=\"ds-table__num\">7.0</td></tr>\n                <tr class=\"ds-table__group\"><td colspan=\"6\">Week 10</td></tr>\n                <tr><td>Sun 12</td><td>W, gale</td><td><span class=\"ds-badge ds-badge--warning\">estimated</span></td><td class=\"ds-table__num\">21.0</td><td class=\"ds-table__num\">5.92</td><td class=\"ds-table__num\">5.2</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>Sat 11</td><td>NW, light</td><td><span class=\"ds-badge ds-badge--success\">read</span></td><td class=\"ds-table__num\">0.0</td><td class=\"ds-table__num\">5.60</td><td class=\"ds-table__num\">1.8</td></tr>\n                <tr><td>Fri 10</td><td>N, light</td><td><span class=\"ds-badge ds-badge--success\">read</span></td><td class=\"ds-table__num\">0.0</td><td class=\"ds-table__num\">5.44</td><td class=\"ds-table__num\">-2.1</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>Thu 9</td><td>not read</td><td><span class=\"ds-badge ds-badge--danger\">missing</span></td><td class=\"ds-table__num\">7.8</td><td class=\"ds-table__num\">5.71</td><td class=\"ds-table__num\">0.3</td></tr>\n                <tr><td>Wed 8</td><td>S, moderate</td><td><span class=\"ds-badge ds-badge--success\">read</span></td><td class=\"ds-table__num\">2.4</td><td class=\"ds-table__num\">5.39</td><td class=\"ds-table__num\">4.9</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>Tue 7</td><td>SE, light</td><td><span class=\"ds-badge ds-badge--success\">read</span></td><td class=\"ds-table__num\">0.2</td><td class=\"ds-table__num\">5.12</td><td class=\"ds-table__num\">3.3</td></tr>\n              </tbody>\n            </table>\n          </div>\n        </section>\n\n        <section class=\"ds-page__section ds-page__section--last\">\n          <ul class=\"ds-pagination\">\n            <li><a class=\"ds-pagination__link\" href=\"#readings\">&lt; February</a></li>\n            <li><span class=\"ds-pagination__link is-current\" aria-current=\"page\">March</span></li>\n            <li><span class=\"ds-pagination__link is-disabled\">April &gt;</span></li>\n          </ul>\n        </section>\n\n      </div>\n\n      <aside class=\"ds-sidebar\">\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Months</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#readings\">March 2017</a> <span class=\"ds-sidebar__count\">(14 days)</span></li>\n            <li><a class=\"ds-sidebar__link is-visited\" href=\"#readings\">February 2017</a> <span class=\"ds-sidebar__count\">(28)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#readings\">January 2017</a> <span class=\"ds-sidebar__count\">(31)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Earlier years</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">The instruments</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li>Tipping rain gauge <span class=\"ds-badge ds-badge--success\">working</span></li>\n            <li>Baking tray vane <span class=\"ds-badge ds-badge--success\">working</span></li>\n            <li>Tide post <span class=\"ds-badge ds-badge--warning\">leaning</span></li>\n            <li>Barometer <span class=\"ds-badge ds-badge--danger\">wrong</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Take the numbers</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#readings\">This month as text</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#readings\">Every reading since 2014</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#about\">What you may do with them</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Reading the table</h2>\n          <p class=\"ds-sidebar__text\">An estimated day was worked out from the bucket. A missing one was a day away; the rain is the two-day total.</p>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <!-- View 5: about. Running text, one boxed note, the list of other logs. -->\n  <section class=\"ds-view\" id=\"about\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-breadcrumb__link\" href=\"#log\">log</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">about</li>\n    </ol>\n    <div class=\"ds-page__columns\">\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-page-header\">\n          <div class=\"ds-page-header__main\">\n            <h1 class=\"ds-page-header__title\">About this log</h1>\n            <p class=\"ds-page-header__text\">Who keeps it, how it is made and what you may do with it.</p>\n          </div>\n          <div class=\"ds-page-header__action\"><button class=\"ds-button\" type=\"button\">Write to me</button></div>\n        </div>\n\n        <section class=\"ds-page__section\" data-component=\"panel\">\n          <div class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Who writes this</h3>\n            <div class=\"ds-panel__body ds-prose\">\n              <p data-component=\"badge\">Ines Varga keeps the instruments on a marsh she can see from her kitchen and answers mail slowly. <span class=\"ds-badge\">12</span> entries this month, filed under <span class=\"ds-badge ds-badge--tag\">instruments</span> <span class=\"ds-badge ds-badge--tag\">tides</span>. Comments on an entry are <span class=\"ds-badge ds-badge--success\">open</span> for thirty days, <span class=\"ds-badge ds-badge--warning\">closing</span> in the last week and <span class=\"ds-badge ds-badge--danger\">closed</span> after that.</p>\n            </div>\n          </div>\n        </section>\n\n        <article class=\"ds-page__section ds-prose\">\n          <h2>How it is made</h2>\n          <p>Every entry is a text file. A script of forty lines turns the files into pages and copies them to a server that costs less than the batteries in the rain gauge. There is no database, so there is nothing to back up except the files, and they are in <a class=\"ds-link\" href=\"#archive\">the archive</a> for anyone to take.</p>\n          <ol>\n            <li>Write the entry in a text editor.</li>\n            <li>Run <code>make log</code>.</li>\n            <li>Read it once on the real page, then leave it alone.</li>\n          </ol>\n          <h2>What you may do with it</h2>\n          <p>Copy what you like. The <a class=\"ds-link\" href=\"#readings\">readings</a> are facts and belong to nobody; the entries are mine, and you may quote them at any length if you say where they came from.</p>\n        </article>\n        <section class=\"ds-page__section\">\n          <p class=\"ds-page__label\">What it does not do</p>\n          <div class=\"ds-accordion\" data-component=\"accordion\">\n            <details class=\"ds-accordion__item\" open>\n              <summary class=\"ds-accordion__title\">Does it count me?</summary>\n              <p class=\"ds-accordion__body\">No. It does not count you, follow you or remember you.</p>\n            </details>\n            <details class=\"ds-accordion__item\">\n              <summary class=\"ds-accordion__title\">What is kept when I comment?</summary>\n              <p class=\"ds-accordion__body\">Your name beside the comment, and only if you tick the box. The address is read once and thrown away.</p>\n            </details>\n            <details class=\"ds-accordion__item\">\n              <summary class=\"ds-accordion__title\">May I have the readings as a file?</summary>\n              <p class=\"ds-accordion__body\">Yes. Every month is a plain text file, and so is every year since 2014.</p>\n            </details>\n          </div>\n        </section>\n\n        <section class=\"ds-page__section ds-page__section--last\" data-component=\"links\">\n          <p class=\"ds-page__label\">Elsewhere</p>\n          <ul class=\"ds-links\">\n            <li><a class=\"ds-link\" href=\"#about\">Alder Point tide tables</a></li>\n            <li><a class=\"ds-link is-visited\" href=\"#about\">Brackwater bird counts</a></li>\n            <li><a class=\"ds-link is-hover\" href=\"#about\">Cold Frame Diary</a></li>\n            <li><a class=\"ds-link is-active\" href=\"#about\">Dunlin Road allotments</a></li>\n            <li><a class=\"ds-link ds-link--quiet\" href=\"#about\">Eleven Knots</a></li>\n            <li><a class=\"ds-link ds-link--strong\" href=\"#about\">Send me another</a></li>\n          </ul>\n        </section>\n\n      </div>\n\n      <aside class=\"ds-sidebar\">\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">In numbers</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li>584 entries since 2014</li>\n            <li>1,170 days of readings</li>\n            <li>4 instruments, 1 of them bought</li>\n            <li>0 pictures</li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Ways in</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#log\">The newest entry</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">The archive by year</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#readings\">This month's readings</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Sections</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Instruments</a> <span class=\"ds-sidebar__count\">(84)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Tides</a> <span class=\"ds-sidebar__count\">(51)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Summaries</a> <span class=\"ds-sidebar__count\">(37)</span></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#archive\">Asides</a> <span class=\"ds-sidebar__count\">(412)</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Mail</h2>\n          <p class=\"ds-sidebar__text\">Corrections are welcome and are added to the entry with your name. Answers take about a week.</p>\n        </div>\n        <div class=\"ds-sidebar__block\">\n          <h2 class=\"ds-sidebar__title\">Colophon</h2>\n          <p class=\"ds-sidebar__text\">Set in whatever serif your browser has. One page of markup and one stylesheet, 9 kB together.</p>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <div class=\"ds-footer__row\">\n      <span>chronoskin is written by Ines Varga, 2014 to 2017. Copy what you like.</span>\n      <ul class=\"ds-footer__links\">\n        <li><a class=\"ds-footer__link\" href=\"#log\">log</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#archive\">archive</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#readings\">readings</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#about\">about</a></li>\n      </ul>\n    </div>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.brutalism.blog.s01.p11.t01.u01.dc\",\n  \"library\": \"2026.10.09-1036\",\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-1b11-dc\",\n  \"short\": \"v1-br-1b11-dc\",\n  \"density\": \"compact\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f8ff;\n  --color-surface-strong: #f0f0ff;\n  --color-bar: #000000;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #ffffff;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #0000ee;\n  --color-inverse-text: #ffffff;\n  --color-text: #000000;\n  --color-text-muted: #444444;\n  --color-heading: #000000;\n  --color-heading-alt: #000000;\n  --color-link: #0000ee;\n  --color-link-quiet: #0000ee;\n  --color-link-visited: #0000ee;\n  --color-link-hover: #cc0000;\n  --color-link-active: #cc0000;\n  --color-border: #000000;\n  --color-border-strong: #000000;\n  --color-border-muted: #b8b8f8;\n  --color-accent: #cc0000;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #cc0000;\n  --color-fill-1: #ffffff;\n  --color-fill-2: #f8f8ff;\n  --color-fill-3: #f0f0ff;\n  --color-fill-4: #d8d8ff;\n  --color-button: #ffffff;\n  --color-button-text: #000000;\n  --color-button-hover-text: #0000ee;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #0000ee;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #000000;\n  --color-disabled: #f0f0ff;\n  --color-disabled-text: #444444;\n  --color-danger: #cc0000;\n  --color-danger-surface: #ffffff;\n  --color-success: #006400;\n  --color-warning: #8a4b00;\n  --color-notice: #f0f0ff;\n  --color-notice-text: #000000;\n  --color-focus: #0000ee;\n  --color-shadow: #000000;\n  --color-overlay: #d8d8ff;\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: 1px;\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: none;\n  --shadow-control: inset 1px 1px 0 color-mix(in srgb, var(--color-button) 25%, white), inset -1px -1px 0 color-mix(in srgb, var(--color-button) 60%, black);\n  --shadow-control-hover: inset 1px 1px 0 color-mix(in srgb, var(--color-button) 25%, white), inset -1px -1px 0 color-mix(in srgb, var(--color-button) 60%, black), inset 0 0 0 2px color-mix(in srgb, var(--color-button) 25%, white);\n  --shadow-control-pressed: inset 1px 1px 0 color-mix(in srgb, var(--color-button) 60%, black), inset -1px -1px 0 color-mix(in srgb, var(--color-button) 25%, white);\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) 92%, black);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
