{
  "id": "v1-br-13b2-dc",
  "long_id": "v1.brutalism.blog.s01.p03.t11.u02.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-13b2-dc",
  "preview_url": "https://chrono.skin/s/v1-br-13b2-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- The system's own sans: `--font-body`, `--font-heading` and `--font-ui` are -apple-system, system-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif; `--font-mono` is Consolas, Monaco, monospace.\n- `--text-base` and `--text-ui` 16px with `--line-body` 1.4; `--text-small` 14px; `--text-large` 18px. Headings are bold: `--text-display` 36px, `--text-h1` 24px, `--text-h2` 21px, `--text-h3` 16px. Navigation and buttons are regular weight (`--weight-ui` 400).\n- Every link is underlined at rest and on hover; nothing is uppercased or tracked.\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- `letter-spacing <= 0px`: no text is tracked.\n- `font-size <= 36px`: the hero headline is 36px.\n- `font-size >= 14px`: small text is 14px.\n- `font-families <= 2`: the system sans and a monospace.\n- `line-height >= 1.3`: text is set at 1.4.\n- `line-height <= 1.5`: and no looser.\n- `uppercase-text <= 0%`: nothing is uppercased.\n- `underlined-links >= 90%`: every link is underlined at rest.\n- `border-radius <= 0px`: every box and control is square.\n- `box-shadow = none`: nothing casts a shadow.\n- `text-shadow = none`: text is flat.\n- `gradient-fills <= 0%`: every fill is one flat colour.\n- `transition = none`: states change instantly.\n- `animation = none`: nothing moves.\n- `border-width <= 1px`: every line is a hairline.\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.p03.t11.u02.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-13b2-dc\",\n  \"short\": \"v1-br-13b2-dc\",\n  \"density\": \"compact\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #0c0c0c;\n  --color-canvas: #0c0c0c;\n  --color-surface: #0c0c0c;\n  --color-surface-alt: #181818;\n  --color-surface-strong: #202020;\n  --color-bar: #ac130d;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #202020;\n  --color-bar-alt-text: #a0a0a0;\n  --color-inverse: #dedede;\n  --color-inverse-text: #0c0c0c;\n  --color-text: #dedede;\n  --color-text-muted: #a0a0a0;\n  --color-heading: #dedede;\n  --color-heading-alt: #c4c4c4;\n  --color-link: #8ab1ff;\n  --color-link-quiet: #a0a0a0;\n  --color-link-visited: #5070b1;\n  --color-link-hover: #ffffff;\n  --color-link-active: #ffffff;\n  --color-border: #585858;\n  --color-border-strong: #a0a0a0;\n  --color-border-muted: #303030;\n  --color-accent: #ac130d;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #d4b106;\n  --color-fill-1: #3b320d;\n  --color-fill-2: #3b1719;\n  --color-fill-3: #15293d;\n  --color-fill-4: #202020;\n  --color-button: #303030;\n  --color-button-text: #dedede;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #181818;\n  --color-button-secondary-text: #c4c4c4;\n  --color-input: #181818;\n  --color-input-text: #dedede;\n  --color-input-border: #707070;\n  --color-disabled: #202020;\n  --color-disabled-text: #707070;\n  --color-danger: #f0706a;\n  --color-danger-surface: #3b1719;\n  --color-success: #8fc07a;\n  --color-warning: #d4b106;\n  --color-notice: #15293d;\n  --color-notice-text: #dedede;\n  --color-focus: #8ab1ff;\n  --color-shadow: #000000;\n  --color-overlay: #181818;\n}\n\n/* @part type */\n:root {\n  --font-body: -apple-system, system-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  --font-heading: -apple-system, system-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  --font-ui: -apple-system, system-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  --font-mono: Consolas, Monaco, monospace;\n  --text-base: 16px;\n  --text-small: 14px;\n  --text-ui: 16px;\n  --text-large: 18px;\n  --text-display: 36px;\n  --text-h1: 24px;\n  --text-h2: 21px;\n  --text-h3: 16px;\n  --line-body: 1.4;\n  --line-heading: 1.3;\n  --line-display: 1.2;\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: 1px;\n  --border-style: dotted;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: none;\n  --shadow-control-pressed: none;\n  --shadow-dialog: none;\n  --shadow-text: none;\n  --fill-page: var(--color-surface-alt);\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: transparent;\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: transparent;\n  --fill-input: var(--color-input);\n  --focus-ring: 1px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
