{
  "id": "v1-tm-4153",
  "long_id": "v1.terminal.docs.s04.p01.t05.u03",
  "name": "Terminal, a manual on white paper",
  "era": {
    "slug": "terminal",
    "code": "tm",
    "name": "Terminal",
    "years": [
      2015,
      2026
    ],
    "description": "The text-terminal look of 2015 to 2026: a monospace face for everything, bright text on a dark screen, boxes and rules drawn with borders like character frames, prompts and cursors, status lines and key hints instead of buttons with chrome."
  },
  "archetype": "docs",
  "mode": "mix",
  "viewport": {
    "width": 1280,
    "fluid": false,
    "responsive": true
  },
  "summary": "This is the documentation site of a command-line program as its authors built it between 2015 and 2026: the manual pages, shown in a browser the way a pager shows them. One monospace face sets everything in one size, ink stands on white paper, every box is drawn with a heavy black line and throws a hard block shadow, and the navigation is a tree of pages in a rail, drawn with line characters. It was the look of project manuals, plain-text handbooks and the monospace sites of people who write their pages by hand.",
  "url": "https://chrono.skin/s/v1-tm-4153",
  "preview_url": "https://chrono.skin/s/v1-tm-4153/specimen.html",
  "files": {
    "STYLE.md": "# Terminal, a manual on white paper\n\n## Summary\n\nThis is the documentation site of a command-line program as its authors built it between 2015 and 2026: the manual pages, shown in a browser the way a pager shows them. One monospace face sets everything in one size, ink stands on white paper, every box is drawn with a heavy black line and throws a hard block shadow, and the navigation is a tree of pages in a rail, drawn with line characters. It was the look of project manuals, plain-text handbooks and the monospace sites of people who write their pages by hand.\n\n## Layout\n\n- The page is designed for a 1280px window and does not stretch: `.ds-book` is a centred sheet of at most `--size-page` (1240px) on `--color-canvas`, between two upright lines in `--color-border`, at least as tall as the window. It is two columns: the rail `.ds-nav`, `--size-side` (250px) wide on `--color-surface-alt` with a line at its right, and `.ds-body`, which holds `.ds-main` (the views, padded `--space-3` and `4ch`) and, at its foot, the `.ds-footer`.\n- There is no bar across the top. `.ds-nav` is the rail: the `.ds-brand`, a muted `.ds-nav__tag` line, then `.ds-nav__root` (a directory name in `--color-heading-alt`) over a `.ds-nav__list` whose items are drawn as a tree with line characters; `.ds-nav__link` items lead to the views and the current one is inverse video. A second root and list (`.ds-nav__root--sub`, `.ds-nav__list--sub`) hold `.ds-nav__sub` links with a muted `.ds-nav__count`; `.ds-nav__keys` is a list of `.ds-key` hints under a faint rule.\n- The home view stacks, top to bottom: `.ds-hero`, which opens with `.ds-hero__head`, the running head of a manual page (name, title, name) over a rule of `--border-width-strong`, then `.ds-hero__cols` (5 to 4): the title, lead and two buttons at the left, and `.ds-box`, a frame titled `synopsis` holding a `<pre>`, at the right; then `.ds-section` blocks `--space-4` (30px) apart: the `.ds-stats` row, the `.ds-grid` of the four sections, and `.ds-cols` (5 to 2) with the framed table of pages beside a `.ds-stack` of two panels.\n- Inner pages have no hero. They open with the `.ds-breadcrumb` as a path, then `.ds-page-header`; the work follows in `.ds-cols`: `--rail` puts a `--size-rail` (230px) column at the right of the text (the page's own contents, or panels beside search results), `--form` is 3 to 2 (a form beside a dialog and a panel). `.ds-col` is a column that may shrink, `.ds-stack` piles frames `--space-3` apart. Tabs sit directly above what they switch.\n- Views. The specimen is one small site with four views, one showing at a time; rail and footer are written once around them. `home` is the index of the manual. `page` is one manual page: two notices, the text set as a manual page, see-also links and pagination, with the page's contents, its status badges and its other versions in the right rail. `search` is a typed query, tabs by section, the list of results, the empty state of a section without results, and two panels. `feedback` is the form for reporting an error with its four buttons, the confirmation dialog and a panel. A view is `<section class=\"ds-view\" id=\"...\">`; links between views are plain `href=\"#id\"`.\n- Spacing scale, in parts of one 20px text line: `--space-1` 4px is the vertical padding of buttons, inputs, table cells and tabs; `--space-2` 10px the padding above the text in a frame, the gap between a rule and what follows and between list rows; `--space-3` 20px the gap between paragraphs, between frames in a stack, under a page header and around the text of the rail; `--space-4` 30px the gap between sections; `--space-5` 50px is kept for a break larger than a section. Horizontal steps are character cells written in `ch`.\n- Fixed sizes: `--size-label` 140px the label column of a form, `--size-field` 460px a text input, `--size-date` 120px the first column of the list, `--size-dialog` 420px a dialog.\n- Below 1100px there is one column: the rail becomes a block above the page with only the brand and the first tree, the hero's synopsis goes under its text, columns stack, the stats row and the grid become two by two, form labels sit above their fields, the indent of a manual page halves, and table cells marked `.ds-table__extra` are left out. The page never scrolls sideways. The rail's sub-trees (`.ds-nav__list--sub`, `.ds-nav__root--sub`) and key hints (`.ds-nav__keys`) are left out; below 600px the `.ds-nav__tag` moves to the right of the first line and `.ds-nav__root` and `.ds-nav__list` each take a full-width line. A `.ds-tooltip__tip` opens under its line across the width of the window.\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- One face for everything: `--font-body`, `--font-heading`, `--font-ui` and `--font-mono` are the same monospace stack (\"Source Code Pro\", \"DejaVu Sans Mono\", \"Andale Mono\", \"Lucida Console\", monospace). Weights are `--weight-body` 400 and 700 for bold and headings; `--weight-display` and `--weight-ui` are 400. Nothing is tracked.\n- Small and dense: `--text-base` 13px with `--line-body` 1.35 is all running text, `--text-ui` 13px the window list, buttons, inputs, tabs and the status line, `--text-small` 12px meta lines, hints, badges, the log and code blocks, `--text-large` 15px the hero's lead. `--text-display` 24px is the hero title and the figures, `--text-h1` 18px a page title; `--text-h2` and `--text-h3` are 13px, told from text by weight and colour. `--heading-transform` is lowercase, `--ui-transform` none.\n- The sixteen colours of a terminal on black: grey text, white for what matters, and blue, cyan, yellow, green, amber and red each with one job.\n- The screen: `--color-page` #000000 is the window, `--color-canvas` #0b0b0b the screen and (as `--fill-panel`) the inside of tiles, `--color-surface` #121212 table rows, `--color-surface-alt` #1c1c1c alternate rows and code blocks, `--color-surface-strong` #303030 tile title lines and inline code. `--color-text` #bbbbbb is running text, `--color-text-muted` #8a8a8a times, counts and hints, `--color-heading` #ffffff headings and figures, `--color-heading-alt` #ffff00 tile titles, figure labels and tags.\n- Links: `--color-link` #87afff, `--color-link-quiet` #bbbbbb for breadcrumb, tabs and sidebar links, `--color-link-visited` #af87ff, `--color-link-hover` #ffffff, `--color-link-active` #ffff00. Links are not underlined (`--link-decoration` and `--link-decoration-quiet` none) until hovered (`--link-decoration-hover` underline).\n- Bars: `--color-bar` #87afff with `--color-bar-text` #000000 is the head row of a table and the session label of the status line. `--color-bar-alt` #303030 with `--color-bar-alt-text` #d0d0d0 is the window list and the status line. `--color-inverse` #bbbbbb with `--color-inverse-text` #000000 is inverse video: the current window, tab, page number and sidebar link, the row under the cursor.\n- Lines: `--color-border` #585858 at `--border-width` 1px solid draws every tile; `--border-width-strong` is also 1px, in `--color-border-strong` #bbbbbb, under a page header and around a notice and a dialog; `--color-border-muted` #303030 parts list rows and a tile's foot.\n- Accents: `--color-accent` #ffff00 with `--color-accent-text` #000000 is the count badge; `--color-accent-alt` #00d7d7 the names of meters and the prompt sign. `--color-fill-1` to `--color-fill-4` (#0f1b2d, #0f2414, #2b2410, #24122a: blue, green, yellow and magenta, darkened) tint the tiles of the grid by group. Status words and meters: `--color-success` #5fd700, `--color-warning` #ffaf00, `--color-danger` #ff5555.\n- Controls: the primary button is `--color-button` #00d7d7 with `--color-button-text` #000000; the secondary button is `--color-button-secondary` #303030 with #ffffff text; fields are `--color-input` #000000 with `--color-input-text` #ffffff and a line in `--color-input-border` #585858; disabled is `--color-disabled` #1c1c1c with `--color-disabled-text` #585858. The notice is `--color-notice` #0f1b2d with `--color-notice-text` #afd7ff, the error notice `--color-danger-surface` #2a0a0a with `--color-danger`. `--color-overlay` #1c1c1c is the block a dialog stands on; `--color-focus` #ffff00 the focus outline, `--focus-ring` 1px dashed.\n- Surface: flat and thin. `--fill-panel` is `--color-canvas`, so a tile is only its lines. `--shadow-panel` is a one-pixel edge in `--color-shadow` #3a3a3a at the right and foot of a deck; `--shadow-dialog` a hard 4px block; a hovered button gets a 2px underline in the focus colour (`--shadow-control-hover`), a pressed one an inset line; `--fill-button-hover` darkens the button. `--shadow-control` and `--shadow-text` are none, all four radii are 0, `--backdrop-blur` is 0px and `--transition` is none.\n- The era's rule for which text stands on which fill (every layout of the era keeps it, so any palette works with any layout): `--color-text`, `--color-text-muted`, the two heading colours, every link colour and the three status colours stand on `--fill-page`, `--color-canvas`, the three surfaces, `--fill-panel` and the four fills, and on nothing else. `--color-bar-text` only on `--fill-bar`; `--color-bar-alt-text` only on `--fill-bar-alt`; `--color-inverse-text` only on `--fill-inverse`; `--color-accent-text` only on `--fill-accent`; `--color-button-text` and `--color-button-hover-text` only on `--fill-button` and its hover; `--color-notice-text` only on `--color-notice`; `--color-danger` also on `--color-danger-surface`; `--color-disabled-text` on `--color-disabled`. Two tokens must read in two places, because a surface set may leave a control unfilled: `--color-button-secondary-text` on `--fill-button-secondary` and on the canvas and surfaces, `--color-input-text` on `--fill-input` and on the canvas and surfaces. Whatever is current or selected is inverse video (`--fill-inverse` with `--color-inverse-text`); where the navigation stands on `--fill-bar`, its current item is a hole in the bar: `--color-canvas` with `--color-heading`.\n- One-off sizes written with `calc()` or `ch`: tiles overlap by `--border-width` through negative margins written with `calc()`; a dialog's title is lifted by half of `--text-h3` times `--line-body` so that its top line runs through it; the brand tile is one text line square; horizontal paddings are whole character cells; the checkbox is `2ch` square.\n\n## Components\n\n- `.ds-page` on `<body>`: page fill and base type, no margin. `.ds-book` is the sheet of two columns, `.ds-body` its right column, `.ds-main` the padded area the views sit in; `.ds-cols` (`--rail`, `--form`) are column pairs, `.ds-col` a column that may shrink, `.ds-stack` a pile of frames, `.ds-section` a block of the page.\n- `.ds-nav`: the rail at the left, described under Layout. The stylesheet marks the `.ds-nav__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-hero`: the opening of the home view: `.ds-hero__head`, three spans set apart as a manual page's running head; `.ds-hero__cols` with `.ds-hero__text` (`.ds-hero__title` at `--text-display`, `.ds-hero__lead`, a `.ds-buttons` row) and `.ds-box`, a frame with `.ds-box__title` cut into its top line holding `.ds-box__screen`, a `<pre>` at `--text-small` whose parts are marked `.ds-box__in` (bold), `.ds-box__arg` (a flag, in `--color-accent-alt`) and `.ds-box__dim`.\n- `.ds-footer`: the last line of a manual page on `--fill-bar-alt`: three `.ds-footer__text` items set apart (version, date and links, page name); `.ds-footer__link` is underlined.\n- `.ds-brand`: the site's mark and name, a link to the home view, first thing in the header. `.ds-brand__mark` is a tile one text line square, dressed like the primary button (`--fill-button`, `--color-button-text`, the button's frame, `--radius-control`, `--shadow-control`); `.ds-brand__name` is bold at `--text-large`. The name `chronoskin` and the mark are placeholders for the installing project's own name and logo.\n- `.ds-breadcrumb`: a path: `.ds-breadcrumb__link` items with `.ds-breadcrumb__sep` (`/`) between them, ending in a bold `.ds-breadcrumb__current`.\n- `.ds-page-header`: the head of an inner page: `.ds-page-header__main` with `.ds-page-header__title` (`--text-h1`) and one muted `.ds-page-header__text` line; `.ds-page-header__action` at the right holds one button. A rule of `--border-width-strong` in `--color-border-strong` closes it.\n- `.ds-prose`: running text, at most 78 characters wide: h1, h2, h3 (the third in `--color-heading-alt`), paragraphs, lists whose bullet is a typed dash, `code` on `--color-surface-strong`, `strong` in the heading colour. Anything typed literally goes in `.ds-code`, a `<pre>` at `--text-small` on `--color-surface-alt` in a frame; it scrolls sideways inside itself. `.ds-prose--man` sets a manual page: second headings stand at the margin, their text and the third headings are set in by `4ch`, the paragraph under a third heading by `8ch`.\n- `.ds-link`: text link with `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` for meta and tool links, `.ds-link--bracket` for a link written as a word in brackets (`[reply]`). `.ds-links` sets several in a wrapping line.\n- `.ds-button`: a `<button>`, or an `<a>` when it only leads to another view. It is a word in capitals on a box two cells wider than the word at each side. The primary one is a block of `--fill-button` with `--color-button-text`; `.ds-button--secondary` is `--fill-button-secondary` in a frame of `--color-border`; `.ds-button--danger` is the destructive action in `--color-danger` on `--color-danger-surface`; `disabled` or `is-disabled` is greyed. `is-hover`, `is-active` and `is-focus` show the states. Group with `.ds-buttons`.\n- `.ds-form`: rows (`.ds-form__row`) of a `.ds-form__label` ending in a colon, in a `--size-label` column, and a `.ds-form__field`. Controls take `.ds-form__input` (`--wide` for the full width, `--auto` for selects). `is-invalid` plus a bold `.ds-form__error` marks a validation error, `.ds-form__hint` is help text, `.ds-form__check` holds a `.ds-form__checkbox` (one empty cell, a filled block when set), and `.ds-form__actions` lines the buttons up with the fields.\n- `.ds-table`: aligned columns under a head row on `--fill-bar`. `.ds-table__num` right-aligns a numeric column, `.ds-table__code` is a bold first column, `.ds-table__date` a muted one, `tr.is-alt` an alternate row, `.ds-table__group` a group row, `tr.is-selected` a row in inverse video, `.ds-table__title` the link in a row, `.ds-table__extra` cells a phone leaves out. `.ds-table--framed` gives every cell its four lines.\n- `.ds-list`: dated entries. Each `.ds-list__item` is a muted `.ds-list__date` in a `--size-date` column and a `.ds-list__main` with a bold `.ds-list__title` link, a `.ds-list__excerpt` and a small `.ds-list__meta` line; faint rules part the items. In search results the date column holds the section, `.ds-list__hit` marks the word that was searched for on `--fill-accent`, and `.ds-list__where` names the heading in `--color-heading-alt`.\n- `.ds-panel`: a frame with its `.ds-panel__title` cut into the top line, a `.ds-panel__body` of `.ds-panel__text` paragraphs and `--shadow-panel`. The title row draws the top line itself, so the frame works on any fill and with any border style; a panel always has a title.\n- `.ds-stat`: one figure: a `.ds-stat__value` at `--text-h1` over a small muted `.ds-stat__label`, behind an upright rule of `--border-width-strong`. `.ds-stats` is the row of four, with no frame.\n- `.ds-grid`: four `.ds-grid__cell` boxes (four across, two by two on a phone), each a frame on `--color-fill-1` (`--2`, `--3`, `--4` select the other fills) with `--shadow-panel`: a `.ds-grid__num` (the section number, at the right in `--color-heading-alt`), a `.ds-grid__title`, a `.ds-grid__text` and a `.ds-grid__more` line holding a link.\n- `.ds-tabs`: a row of words on a rule; each `.ds-tabs__tab` is a link, the current one a `<span class=\"ds-tabs__tab is-current\">` in inverse video. Content goes in `.ds-tabs__body`.\n- `.ds-badge`: a count: bold `--text-small` on `--fill-accent` with `--color-accent-text`. `.ds-badge--tag` is a word after a `#` in `--color-heading-alt`. Status labels are `.ds-badge--success`, `.ds-badge--warning` and `.ds-badge--danger`: a word in brackets in the status colour, with no fill and no frame. `.ds-badges` sets several in a line.\n- `.ds-sidebar`: the right rail of a manual page. Each `.ds-sidebar__block` is a frame with a `.ds-sidebar__title` cut into its top line and a `.ds-sidebar__list` of `.ds-sidebar__link` items (`is-current` in inverse video) with optional `.ds-sidebar__count`; a block may hold `.ds-badges` and a small muted `.ds-sidebar__text`.\n- `.ds-notice`: a sentence in a frame of `--color-border-strong` with a left edge of `--border-width-strong`, starting with a bold `.ds-notice__title`. `.ds-notice--error` uses `--color-danger` on `--color-danger-surface`. 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` in inverse video; `is-disabled` is muted. `.ds-pagination__note` is a muted count at the right end (`page 1 of 14`).\n- `.ds-dialog`: a frame in `--color-border-strong`, `--size-dialog` wide, with its `.ds-dialog__title` cut into the top line and `--shadow-dialog`. It sits in the page flow on `.ds-dialog__backdrop`, a flat block of `--color-overlay`; it has a `.ds-dialog__body`, `.ds-dialog__text` and `.ds-dialog__actions`. No dimming of the page, no blur.\n- `.ds-empty`: a faint frame in `--color-border-muted` with a centred muted `.ds-empty__text` sentence and one secondary button.\n- Text-mode pieces: `.ds-prompt` is a typed command line (`.ds-prompt__sign` the `$`, `.ds-prompt__path` the directory); `.ds-cursor` is the block cursor, a `<span>` holding one no-break space; `.ds-key` is a key hint whose `.ds-key__cap` is set in brackets (`[q] quit`); `.ds-meter` is a bar typed in characters, the filled part in `.ds-meter__on` (`--warning` for the amber one); `.ds-section__title` is a heading followed by a rule to the right edge; `.ds-note` is a small muted line under a block.\n- `.ds-progress`: a quantity on one line: a muted `.ds-progress__label`, a `.ds-progress__bar` typed in cells between brackets (`#` in `.ds-progress__on` for the filled part, `.` for the rest; `--warning` and `--danger` recolour it) and a bold `.ds-progress__value`.\n- `.ds-tooltip`: a word with a dotted underline that can take the focus; its `.ds-tooltip__tip` is a small boxed hint on `--color-surface-strong` shown above it on hover or focus only. Use it for a term or a figure that needs one sentence.\n- `.ds-accordion`: a folding list for answers and asides. Each `.ds-accordion__item` is a `<details>`; its `.ds-accordion__title` is the `<summary>`, marked `[+]` when closed and `[-]` when open; `.ds-accordion__body` is indented four cells.\n- `.ds-switch`: an on/off setting, a `<label>` holding `.ds-switch__label`, a hidden `.ds-switch__input` checkbox and `.ds-switch__track`, which draws the pair `on` `off`; the half that holds is inverse video. Use it for a setting that takes effect at once; a `.ds-form__check` stays for what is sent with a form.\n\n## Never\n\n- `font-families <= 1`: one monospace face sets everything, headings and buttons included.\n- `font-size <= 24px`: the largest text is a figure; everything else is within a few pixels of the body size.\n- `font-size >= 12px`: small text is the meta size; nothing is set smaller.\n- `letter-spacing <= 0px`: the grid of the typeface is never stretched.\n- `line-height <= 1.5`: lines sit as close as a terminal sets them.\n- `border-radius <= 0px`: a character cell has no round corner; every box, button and field is square.\n- `box-shadow-blur <= 0px`: nothing is soft and nothing floats; where a set has a shadow at all it is a hard offset block.\n- `gradient-fills <= 0%`: every fill is one flat colour.\n- `border-width <= 4px`: lines are one weight, with one heavier rule.\n- `transition = none`: states change at once, as a screen redraws.\n- `text-shadow = none`: text is flat.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen. A boxed thing copies `.ds-panel`: a frame of `--border-width` in `--color-border` with its title cut into the top line, `--shadow-panel`, and `--space-2` and `2ch` of padding. A new kind of page is a new view with a breadcrumb and a page header, and a new link in the tree of the rail. A row type copies a `.ds-table` row or a `.ds-list__item`. A set of choices copies `.ds-tabs`, and whatever is current or selected is inverse video (`--fill-inverse` with `--color-inverse-text`). A status is a word in brackets in its status colour; a quantity is a `.ds-meter` of typed characters; an action is a word dressed as `.ds-button`, with its key given as a `.ds-key`. Use only the tokens of `tokens.css` and the `--size-*` and `--space-*` tokens of `components.css`, write horizontal steps in `ch`, and pair each text token with its own fill as listed above. When in doubt do less: text before a box, a rule before a fill, a typed character before an icon, and never a radius, a soft shadow, a gradient, a picture or a second typeface.\n",
    "components.css": "/* Layout tokens (structure part). A manual: a rail for the tree of pages, a\n   page of text beside it. Vertical steps are parts of one 20px text line;\n   horizontal steps are written in ch. */\n:root {\n  --size-page: 1240px;\n  --size-side: 250px;\n  --size-rail: 230px;\n  --size-label: 140px;\n  --size-field: 460px;\n  --size-dialog: 420px;\n  --size-date: 120px;\n  --space-1: 4px;\n  --space-2: 10px;\n  --space-3: 20px;\n  --space-4: 30px;\n  --space-5: 50px;\n}\n\n/* ---------- shell: one face, one size, a screen of text ---------- */\n.ds-page {\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n/* Selection is inverse video. */\n.ds-page ::selection {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\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/* ---------- frames: a box of 1-cell lines with its title cut into the top edge.\n   The top edge is drawn by the title row (a short rule, the title, a long rule),\n   so it works on any fill and with any border style. ---------- */\n.ds-panel,\n.ds-dialog,\n.ds-sidebar__block,\n.ds-box {\n  position: relative;\n  display: flow-root;\n  box-sizing: border-box;\n  min-width: 0;\n  margin: calc(var(--text-h3) * var(--line-body) * 0.5) 0 0;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: 0;\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title,\n.ds-dialog__title,\n.ds-sidebar__title,\n.ds-box__title {\n  display: flex;\n  align-items: center;\n  gap: 1ch;\n  margin: calc(var(--text-h3) * var(--line-body) * -0.5) calc(var(--border-width) * -1) 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-body);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__title::before,\n.ds-dialog__title::before,\n.ds-sidebar__title::before,\n.ds-box__title::before {\n  content: \"\";\n  flex: none;\n  width: 1ch;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__title::after,\n.ds-dialog__title::after,\n.ds-sidebar__title::after,\n.ds-box__title::after {\n  content: \"\";\n  flex: 1;\n  min-width: 1ch;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__body {\n  padding: var(--space-2) 2ch var(--space-3);\n}\n.ds-panel__text {\n  margin: 0 0 var(--space-2);\n}\n.ds-panel__text:last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- a section rule: the name, then a line to the right edge ---------- */\n.ds-section {\n  margin: 0 0 var(--space-4);\n}\n.ds-section__title {\n  display: flex;\n  align-items: center;\n  gap: 1ch;\n  margin: var(--space-3) 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-section__title:first-child {\n  margin-top: 0;\n}\n.ds-section__title::after {\n  content: \"\";\n  flex: 1;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-note:last-child {\n  margin-bottom: 0;\n}\n.ds-note {\n  margin: var(--space-2) 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- prompt, cursor, key hints, meters ---------- */\n.ds-prompt {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n  font-weight: var(--weight-bold);\n  overflow-wrap: anywhere;\n}\n.ds-prompt__sign {\n  color: var(--color-accent-alt);\n}\n.ds-prompt__path {\n  color: var(--color-heading-alt);\n}\n/* The block cursor: one cell of inverse video. It holds a no-break space. */\n.ds-cursor {\n  background: currentColor;\n}\n@media (prefers-reduced-motion: no-preference) {\n  .ds-cursor {\n    animation: ds-blink 1.2s steps(1) infinite;\n  }\n}\n@keyframes ds-blink {\n  0% { opacity: 1; }\n  50% { opacity: 0; }\n  100% { opacity: 0; }\n}\n.ds-key {\n  white-space: nowrap;\n}\n.ds-key__cap {\n  font-weight: var(--weight-bold);\n}\n.ds-key__cap::before {\n  content: \"[\";\n}\n.ds-key__cap::after {\n  content: \"]\";\n}\n/* A progress bar typed in block characters. */\n.ds-meter {\n  color: var(--color-border);\n  white-space: nowrap;\n}\n.ds-meter__on {\n  color: var(--color-success);\n}\n.ds-code {\n  box-sizing: border-box;\n  max-width: 100%;\n  margin: 0 0 var(--space-3);\n  padding: var(--space-2) 2ch;\n  overflow-x: auto;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n  white-space: pre;\n}\n.ds-code:last-child {\n  margin-bottom: 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/* A link marked by brackets instead of an underline: [copy]. */\n.ds-link--bracket,\n.ds-link--bracket:visited {\n  color: var(--color-link);\n  text-decoration: none;\n  white-space: nowrap;\n}\n.ds-link--bracket::before {\n  content: \"[\";\n}\n.ds-link--bracket::after {\n  content: \"]\";\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-1) 3ch;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* ---------- brand: the mark on a one-line tile dressed like the primary button ---------- */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: 1ch;\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  flex: none;\n  display: block;\n  box-sizing: border-box;\n  width: calc(var(--text-base) * var(--line-body));\n  height: calc(var(--text-base) * var(--line-body));\n  border: var(--border-width) var(--border-style) var(--color-button);\n  border-radius: var(--radius-control);\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  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--display-tracking);\n  text-shadow: var(--shadow-text);\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/* ---------- breadcrumb: a path ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0 1ch;\n  margin: 0 0 var(--space-2);\n  padding: 0;\n  list-style: none;\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-breadcrumb__sep {\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- page header: title, one line, an action at the right, a heavy rule ---------- */\n.ds-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-2) 2ch;\n  margin: 0 0 var(--space-3);\n  padding: 0 0 var(--space-2);\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;\n  color: var(--color-heading);\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  text-shadow: var(--shadow-text);\n}\n.ds-page-header__text {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- stats ---------- */\n.ds-stats {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat {\n  min-width: 0;\n}\n.ds-stat__value {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-display);\n}\n.ds-stat__label {\n  color: var(--color-text-muted);\n}\n\n/* ---------- prose ---------- */\n.ds-prose {\n  max-width: 78ch;\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\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}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin-top: var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin-top: var(--space-3);\n  font-size: var(--text-h3);\n  color: var(--color-heading-alt);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-3);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-3);\n  padding: 0 0 0 3ch;\n}\n.ds-prose ul {\n  list-style-type: \"- \";\n  padding-left: 2ch;\n}\n.ds-prose code {\n  padding: 0 0.5ch;\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n}\n.ds-prose strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :first-child {\n  margin-top: 0;\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- buttons: a word on a block, the primary one filled ---------- */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) 2ch;\n}\n.ds-button {\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-1) 1ch;\n  border: var(--border-width) var(--border-style) var(--color-button);\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  white-space: nowrap;\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  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  border-color: var(--color-border);\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  border-color: var(--color-border-strong);\n}\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  border-color: var(--color-border-muted);\n  background: var(--color-disabled);\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  cursor: default;\n}\n\n/* ---------- form ---------- */\n.ds-form {\n  margin: 0;\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: var(--size-label) minmax(0, 1fr);\n  gap: 0 2ch;\n  align-items: start;\n  margin: 0 0 var(--space-2);\n}\n.ds-form__label {\n  padding: var(--space-1) 0;\n  color: var(--color-heading);\n}\n.ds-form__field {\n  min-width: 0;\n}\n.ds-form__input {\n  box-sizing: border-box;\n  width: 100%;\n  max-width: var(--size-field);\n  margin: 0;\n  padding: var(--space-1) 1ch;\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--auto {\n  width: auto;\n}\n.ds-form__input:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input:disabled,\n.ds-form__input.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__input.is-invalid {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  color: var(--color-danger);\n  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: 1ch;\n  padding: var(--space-1) 0;\n}\n/* A checkbox is one cell: an empty box, or a filled block when set. */\n.ds-form__checkbox {\n  appearance: none;\n  flex: none;\n  box-sizing: border-box;\n  width: 2ch;\n  height: 2ch;\n  margin: 0;\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-input);\n}\n.ds-form__checkbox:checked {\n  border-style: solid;\n  background: var(--color-input-text);\n}\n.ds-form__checkbox:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) 2ch;\n  margin: var(--space-3) 0 0;\n  padding-left: calc(var(--size-label) + 2ch);\n}\n\n/* ---------- table: aligned columns under a head line in the bar colours ---------- */\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-1) 1ch;\n  border-style: var(--border-style);\n  border-color: var(--color-border-muted);\n  border-width: 0 0 var(--border-width);\n  text-align: left;\n  vertical-align: top;\n}\n.ds-table th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-color: var(--color-border);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-bold);\n  text-transform: var(--heading-transform);\n  white-space: nowrap;\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  text-align: right;\n  white-space: nowrap;\n}\n.ds-table td.ds-table__code {\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n  font-weight: var(--weight-bold);\n  white-space: nowrap;\n}\n.ds-table td.ds-table__date {\n  color: var(--color-text-muted);\n  white-space: nowrap;\n}\n.ds-table__group td {\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-bold);\n}\n/* The row under the cursor: inverse video. */\n.ds-table tr.is-selected td {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n}\n.ds-table tr.is-selected .ds-table__title {\n  color: var(--color-inverse-text);\n}\n.ds-table tr.is-unread td {\n  font-weight: var(--weight-bold);\n}\n.ds-table__title {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-table__title:visited,\n.ds-table__title.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-table__title:hover,\n.ds-table__title.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* ---------- list ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: grid;\n  grid-template-columns: var(--size-date) minmax(0, 1fr);\n  gap: 0 2ch;\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:first-child {\n  padding-top: 0;\n}\n.ds-list__item:last-child {\n  padding-bottom: 0;\n  border-bottom: 0;\n}\n.ds-list__date {\n  color: var(--color-text-muted);\n  white-space: nowrap;\n}\n.ds-list__main {\n  min-width: 0;\n}\n.ds-list__title {\n  color: var(--color-link);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\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: 0;\n}\n.ds-list__meta {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- grid: four framed cells on the block fills ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-2) 2ch;\n}\n.ds-grid__cell {\n  min-width: 0;\n  padding: var(--space-2) 2ch var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  background: var(--color-fill-1);\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-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-grid__text {\n  margin: 0;\n}\n\n/* ---------- tabs: words on a rule, the current one in inverse video ---------- */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0 1ch;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-1) 1ch;\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-tabs__body {\n  padding: var(--space-2) 0 var(--space-3);\n}\n\n/* ---------- badge: a count on the accent fill; a tag; a status word in brackets ---------- */\n.ds-prose + .ds-links {\n  margin-top: var(--space-3);\n}\n.ds-badges {\n  margin: 0 0 var(--space-2);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-1) 2ch;\n}\n.ds-badge {\n  display: inline-block;\n  padding: 0 1ch;\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  line-height: var(--line-body);\n  white-space: nowrap;\n}\n.ds-badge--tag,\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  padding: 0;\n  background: transparent;\n  font-weight: var(--weight-body);\n}\n.ds-badge--tag {\n  color: var(--color-heading-alt);\n}\n.ds-badge--tag::before {\n  content: \"#\";\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.ds-badge--success {\n  color: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-danger);\n}\n\n/* ---------- sidebar: framed blocks of links ---------- */\n.ds-sidebar {\n  display: grid;\n  gap: var(--space-2);\n  align-content: start;\n  min-width: 0;\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: var(--space-1) 1ch var(--space-2);\n  list-style: none;\n}\n.ds-sidebar__list li {\n  display: flex;\n  justify-content: space-between;\n  gap: 1ch;\n}\n.ds-sidebar__link {\n  flex: 1;\n  min-width: 0;\n  padding: 0 1ch;\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\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__link.is-current {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-sidebar__count {\n  flex: none;\n  padding: 0 1ch 0 0;\n  color: var(--color-text-muted);\n}\n.ds-sidebar__text {\n  margin: 0;\n  padding: var(--space-1) 2ch var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- notice: a box with a heavy left edge ---------- */\n.ds-notices {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-3);\n}\n.ds-notice {\n  margin: 0;\n  padding: var(--space-2) 2ch;\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-left-width: var(--border-width-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  text-transform: var(--heading-transform);\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 ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-1) 1ch;\n  margin: var(--space-3) 0 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__link {\n  display: block;\n  padding: 0 1ch;\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  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-text-muted);\n  text-decoration: none;\n}\n\n/* ---------- dialog: a framed box on a block of the overlay colour, in the page flow ---------- */\n.ds-dialog__backdrop {\n  box-sizing: border-box;\n  padding: var(--space-3) 2ch;\n  border-radius: var(--radius-panel);\n  background: var(--color-overlay);\n}\n.ds-dialog {\n  max-width: var(--size-dialog);\n  margin-left: auto;\n  margin-right: auto;\n  border-color: var(--color-border-strong);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__title::before,\n.ds-dialog__title::after {\n  border-color: var(--color-border-strong);\n}\n.ds-dialog__body {\n  padding: var(--space-2) 2ch var(--space-3);\n}\n.ds-dialog__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) 2ch;\n}\n\n/* ---------- empty ---------- */\n.ds-empty {\n  padding: var(--space-3) 2ch;\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-panel);\n  text-align: center;\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n  color: var(--color-text-muted);\n}\n.ds-note code,\n.ds-notice code,\n.ds-panel__text code {\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n}\n.ds-notice code {\n  color: inherit;\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- layout 4: a manual: the tree of pages in a rail at the left, one page beside it ---------- */\n.ds-book {\n  display: grid;\n  grid-template-columns: var(--size-side) minmax(0, 1fr);\n  box-sizing: border-box;\n  max-width: var(--size-page);\n  min-height: 100vh;\n  margin: 0 auto;\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: 0 var(--border-width);\n  border-radius: var(--radius-page);\n  background: var(--color-canvas);\n}\n.ds-body {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n.ds-main {\n  flex: 1;\n  min-width: 0;\n  padding: var(--space-3) 4ch var(--space-4);\n}\n.ds-cols {\n  display: grid;\n  grid-template-columns: minmax(0, 5fr) minmax(0, 2fr);\n  gap: var(--space-3) 4ch;\n  align-items: start;\n}\n.ds-cols--rail {\n  grid-template-columns: minmax(0, 1fr) var(--size-rail);\n}\n.ds-cols--form {\n  grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);\n}\n.ds-stack {\n  display: grid;\n  gap: var(--space-3);\n  min-width: 0;\n}\n.ds-col {\n  min-width: 0;\n}\n\n/* nav: the rail. The name, then the pages of the site as a tree drawn in line characters. */\n.ds-nav {\n  box-sizing: border-box;\n  min-width: 0;\n  padding: var(--space-3) 2ch;\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n  background: var(--color-surface-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__tag {\n  margin: var(--space-1) 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-nav__root {\n  margin: 0;\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-nav__list {\n  margin: 0 0 var(--space-3);\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__list li {\n  display: flex;\n  white-space: nowrap;\n}\n.ds-nav__list li::before {\n  content: \"\\251C\\2500\\00A0\";\n  flex: none;\n  color: var(--color-text-muted);\n}\n.ds-nav__list li:last-child::before {\n  content: \"\\2514\\2500\\00A0\";\n}\n.ds-nav__link,\n.ds-nav__sub {\n  min-width: 0;\n  padding: 0 1ch;\n  overflow: hidden;\n  color: var(--color-link-quiet);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-overflow: ellipsis;\n  text-transform: var(--ui-transform);\n}\n.ds-nav__sub {\n  flex: 1;\n  font-weight: var(--weight-body);\n  text-transform: none;\n}\n.ds-nav__count {\n  flex: none;\n  color: var(--color-text-muted);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover,\n.ds-nav__sub:hover,\n.ds-nav__sub.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus,\n.ds-nav__sub:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#page:target) .ds-nav__link[href=\"#page\"],\n.ds-page:has(#search:target) .ds-nav__link[href=\"#search\"],\n.ds-page:has(#feedback:target) .ds-nav__link[href=\"#feedback\"] {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  text-decoration: none;\n}\n.ds-nav__keys {\n  margin: 0;\n  padding: var(--space-2) 0 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  list-style: none;\n}\n\n/* hero: the head of a manual page: the running head, the name, what it is, and the synopsis in a box */\n.ds-hero {\n  margin: 0 0 var(--space-4);\n}\n.ds-hero__head {\n  display: flex;\n  justify-content: space-between;\n  gap: 0 2ch;\n  margin: 0 0 var(--space-3);\n  padding: 0 0 var(--space-1);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  white-space: nowrap;\n}\n.ds-hero__cols {\n  display: grid;\n  grid-template-columns: minmax(0, 5fr) minmax(0, 4fr);\n  gap: var(--space-3) 4ch;\n  align-items: start;\n}\n.ds-hero__text {\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\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  text-shadow: var(--shadow-text);\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-3);\n  font-size: var(--text-large);\n}\n.ds-box__screen {\n  margin: 0;\n  padding: var(--space-2) 2ch var(--space-3);\n  overflow-x: auto;\n  color: var(--color-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n  white-space: pre;\n}\n.ds-box__in {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-box__dim {\n  color: var(--color-text-muted);\n}\n.ds-box__arg {\n  color: var(--color-accent-alt);\n}\n\n/* stats: four figures in a row, each behind an upright rule */\n.ds-stats {\n  gap: 0 2ch;\n}\n.ds-stat {\n  padding: 0 0 0 2ch;\n  border-left: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-stat__value {\n  display: block;\n  font-size: var(--text-h1);\n  line-height: var(--line-heading);\n  text-shadow: var(--shadow-text);\n}\n.ds-stat__label {\n  display: block;\n  font-size: var(--text-small);\n}\n\n/* grid: the sections of the manual, each with its number */\n.ds-grid__cell {\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__num {\n  float: right;\n  margin: 0 0 0 1ch;\n  color: var(--color-heading-alt);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n}\n.ds-grid__more {\n  margin: var(--space-2) 0 0;\n}\n\n/* buttons are boxes of capitals, as wide as their word and two cells */\n.ds-button {\n  padding: var(--space-1) 2ch;\n}\n\n/* the table of pages is framed: every cell has its four lines */\n.ds-table--framed th,\n.ds-table--framed td {\n  border-width: var(--border-width);\n  border-color: var(--color-border);\n}\n\n/* a manual page: section names stand at the margin, their text is set in by four cells */\n.ds-prose--man > p,\n.ds-prose--man > ul,\n.ds-prose--man > ol,\n.ds-prose--man > .ds-code,\n.ds-prose--man > h3 {\n  margin-left: 4ch;\n}\n.ds-prose--man > h3 + p {\n  margin-left: 8ch;\n}\n.ds-prose--man > h3 {\n  margin-bottom: 0;\n  text-transform: none;\n}\n.ds-prose--man > h2 {\n  margin-top: var(--space-3);\n}\n.ds-pagination__note {\n  margin-left: auto;\n  color: var(--color-text-muted);\n}\n.ds-sidebar__block .ds-badges {\n  margin: 0;\n  padding: var(--space-1) 2ch var(--space-2);\n}\n.ds-tabs__body {\n  padding-top: var(--space-3);\n}\n.ds-list__where {\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-bold);\n  white-space: nowrap;\n}\n.ds-list__hit {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n}\n\n/* footer: the last line of a manual page: version, date, name */\n.ds-footer {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  gap: var(--space-1) 3ch;\n  padding: var(--space-1) 4ch;\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-size: var(--text-small);\n}\n.ds-footer__text {\n  margin: 0;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: underline;\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: none;\n}\n\n/* ---------- narrow windows: the rail goes on top, one column, nothing scrolls sideways but code ---------- */\n\n/* components of the era, typed in characters */\n.ds-progress {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: 0 1ch;\n  margin: 0 0 var(--space-2);\n}\n.ds-progress:last-child {\n  margin-bottom: 0;\n}\n.ds-progress__label {\n  color: var(--color-text-muted);\n}\n.ds-progress__bar {\n  color: var(--color-border);\n  white-space: nowrap;\n}\n.ds-progress__bar::before {\n  content: \"[\";\n  color: var(--color-text-muted);\n}\n.ds-progress__bar::after {\n  content: \"]\";\n  color: var(--color-text-muted);\n}\n.ds-progress__on {\n  color: var(--color-success);\n}\n.ds-progress__value {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n.ds-tooltip {\n  position: relative;\n  text-decoration: underline dotted;\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__tip {\n  display: none;\n  position: absolute;\n  z-index: 3;\n  bottom: 100%;\n  left: 0;\n  box-sizing: border-box;\n  width: max-content;\n  max-width: 34ch;\n  padding: 0 1ch;\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  background: var(--color-surface-strong);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-text);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n  text-align: left;\n  text-transform: none;\n  white-space: normal;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n\n.ds-accordion {\n  margin: 0;\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-accordion__item:last-child {\n  border-bottom: 0;\n}\n.ds-accordion__title {\n  display: block;\n  padding: var(--space-1) 0;\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n  list-style: none;\n  cursor: pointer;\n}\n.ds-accordion__title::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__title::before {\n  content: \"[+] \";\n  color: var(--color-accent-alt);\n}\n.ds-accordion__item[open] > .ds-accordion__title::before {\n  content: \"[-] \";\n}\n.ds-accordion__title:hover,\n.ds-accordion__title.is-hover {\n  color: var(--color-link-hover);\n}\n.ds-accordion__title:focus-visible,\n.ds-accordion__title.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  margin: 0;\n  padding: 0 0 var(--space-2) 4ch;\n}\n.ds-accordion__body p {\n  margin: 0 0 var(--space-1);\n}\n.ds-accordion__body code {\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n}\n\n.ds-switch {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 2ch;\n  padding: var(--space-1) 0;\n  cursor: pointer;\n}\n.ds-switch__label {\n  min-width: 0;\n}\n.ds-switch__input {\n  position: absolute;\n  appearance: none;\n  margin: 0;\n  opacity: 0;\n}\n.ds-switch__track {\n  flex: none;\n  display: inline-flex;\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  font-size: var(--text-small);\n  white-space: nowrap;\n}\n.ds-switch__track::before {\n  content: \"on\";\n  padding: 0 1ch;\n}\n.ds-switch__track::after {\n  content: \"off\";\n  padding: 0 1ch;\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n}\n.ds-switch__input:checked + .ds-switch__track::before {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n}\n.ds-switch__input:checked + .ds-switch__track::after {\n  background: transparent;\n  color: inherit;\n  font-weight: var(--weight-body);\n}\n.ds-switch__input:focus-visible + .ds-switch__track {\n  outline: var(--focus-ring);\n}\n\n.ds-form__field .ds-switch {\n  justify-content: flex-start;\n}\n\n@media (max-width: 1100px) {\n  .ds-book {\n    grid-template-rows: auto 1fr;\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  .ds-stats,\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-form__row {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-form__label {\n    padding: 0;\n  }\n  .ds-form__actions {\n    padding-left: 0;\n  }\n  .ds-table__extra {\n    display: none;\n  }\n  .ds-dialog__backdrop {\n    padding: var(--space-3) 1ch;\n  }\n  .ds-button {\n    white-space: normal;\n  }\n  .ds-table td.ds-table__code {\n    white-space: normal;\n    overflow-wrap: anywhere;\n  }\n\n  .ds-book {\n    grid-template-columns: minmax(0, 1fr);\n    border-width: 0;\n  }\n  .ds-nav {\n    padding: var(--space-2) 2ch;\n    border-right: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__tag,\n  .ds-nav__list {\n    margin-bottom: var(--space-2);\n  }\n  .ds-nav__list--sub,\n  .ds-nav__root--sub,\n  .ds-nav__keys {\n    display: none;\n  }\n  .ds-main {\n    padding: var(--space-3) 2ch;\n  }\n  .ds-footer {\n    padding: var(--space-1) 2ch;\n  }\n  .ds-hero__head span:nth-child(2) {\n    display: none;\n  }\n  .ds-hero__cols,\n  .ds-cols,\n  .ds-cols--rail,\n  .ds-cols--form {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-hero__cols > *,\n  .ds-cols > *,\n  .ds-prose {\n    min-width: 0;\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-stats {\n    gap: var(--space-2) 2ch;\n  }\n  .ds-list__item {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-prose--man > p,\n  .ds-prose--man > ul,\n  .ds-prose--man > ol,\n  .ds-prose--man > .ds-code,\n  .ds-prose--man > h3 {\n    margin-left: 2ch;\n  }\n  .ds-prose--man > h3 + p {\n    margin-left: 4ch;\n  }\n  .ds-pagination__note {\n    margin-left: 0;\n  }\n}\n\n/* phones: the navigation spans the bar; a hint opens under its line, as wide as its box */\n@media (max-width: 600px) {\n  .ds-nav {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: baseline;\n    gap: 0 2ch;\n  }\n  .ds-nav__tag {\n    margin: 0 0 var(--space-2) auto;\n  }\n  .ds-nav__root,\n  .ds-nav__list {\n    flex: 1 1 100%;\n  }\n  .ds-tooltip {\n    position: static;\n  }\n  .ds-tooltip__tip {\n    bottom: auto;\n    left: 1ch;\n    right: 1ch;\n    width: auto;\n    max-width: none;\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: the manual of a snapshot backup program. Terminal, 2015 to 2026: 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-book\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\"><span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" aria-hidden=\"true\"><polyline points=\"4,6 11,12 4,18\"/><line x1=\"13\" y1=\"19\" x2=\"21\" y2=\"19\"/></svg></span><span class=\"ds-brand__name\">chronoskin</span></a>\n  <p class=\"ds-nav__tag\">the manual, for 3.2</p>\n  <p class=\"ds-nav__root\">manual/</p>\n  <ul class=\"ds-nav__list\">\n    <li><a class=\"ds-nav__link\" href=\"#home\">index</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#page\">chronoskin(1)</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#search\">search</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#feedback\">report an error</a></li>\n  </ul>\n  <p class=\"ds-nav__root ds-nav__root--sub\">sections/</p>\n  <ul class=\"ds-nav__list ds-nav__list--sub\">\n    <li><a class=\"ds-nav__sub\" href=\"#search\">1 commands</a><span class=\"ds-nav__count\">6</span></li>\n    <li><a class=\"ds-nav__sub\" href=\"#search\">5 file formats</a><span class=\"ds-nav__count\">3</span></li>\n    <li><a class=\"ds-nav__sub\" href=\"#search\">7 concepts</a><span class=\"ds-nav__count\">2</span></li>\n    <li><a class=\"ds-nav__sub\" href=\"#search\">8 administration</a><span class=\"ds-nav__count\">3</span></li>\n  </ul>\n  <ul class=\"ds-nav__keys\">\n    <li class=\"ds-key\"><span class=\"ds-key__cap\">/</span> search</li>\n    <li class=\"ds-key\"><span class=\"ds-key__cap\">n</span> next page</li>\n    <li class=\"ds-key\"><span class=\"ds-key__cap\">p</span> previous page</li>\n    <li class=\"ds-key\"><span class=\"ds-key__cap\">q</span> back to the index</li>\n  </ul>\n</header>\n\n<div class=\"ds-body\">\n<main class=\"ds-main\">\n\n<!-- View 1, the index of the manual: what it documents, figures, the four sections, every page. -->\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <section class=\"ds-hero\" data-component=\"hero\">\n    <p class=\"ds-hero__head\"><span>CHRONOSKIN(7)</span><span>chronoskin manual</span><span>CHRONOSKIN(7)</span></p>\n    <div class=\"ds-hero__cols\">\n      <div class=\"ds-hero__text\">\n        <h1 class=\"ds-hero__title\">Snapshots of a directory, kept as plain files.</h1>\n        <p class=\"ds-hero__lead\">chronoskin copies a directory into a dated snapshot, shares unchanged files between snapshots and thins old ones on a schedule you write down. This is its whole manual: fourteen pages, the same text that <code>man</code> shows.</p>\n        <div class=\"ds-buttons\">\n          <a class=\"ds-button\" href=\"#page\">read chronoskin(1)</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#search\">search the manual</a>\n        </div>\n      </div>\n      <div class=\"ds-box\">\n        <p class=\"ds-box__title\">synopsis</p>\n<pre class=\"ds-box__screen\"><span class=\"ds-box__in\">chronoskin take</span> [<span class=\"ds-box__arg\">-n</span>] [<span class=\"ds-box__arg\">-x</span> pattern] source\n<span class=\"ds-box__in\">chronoskin list</span> [<span class=\"ds-box__arg\">--since</span> date]\n<span class=\"ds-box__in\">chronoskin restore</span> snapshot [path]\n<span class=\"ds-box__in\">chronoskin prune</span> [<span class=\"ds-box__arg\">--keep</span> rule]\n\n<span class=\"ds-box__dim\">$</span> man chronoskin<span class=\"ds-cursor\">&nbsp;</span></pre>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-section\">\n    <ul class=\"ds-stats\" data-component=\"stats\">\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">14</span><span class=\"ds-stat__label\">pages in four sections</span></li>\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">212</span><span class=\"ds-stat__label\">options and settings</span></li>\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">96</span><span class=\"ds-stat__label\"><span class=\"ds-tooltip\" tabindex=\"0\">examples you can paste<span class=\"ds-tooltip__tip\" role=\"tooltip\">Each one is run against the program on every release.</span></span></span></li>\n      <li class=\"ds-stat\"><span class=\"ds-stat__value\">3.2.0</span><span class=\"ds-stat__label\">version described here</span></li>\n    </ul>\n  </section>\n\n  <section class=\"ds-section\">\n    <h2 class=\"ds-section__title\">sections</h2>\n    <div class=\"ds-grid\" data-component=\"grid\">\n      <div class=\"ds-grid__cell\">\n        <span class=\"ds-grid__num\">1</span>\n        <h3 class=\"ds-grid__title\">Commands</h3>\n        <p class=\"ds-grid__text\">What you type: take, list, restore, prune, verify, mount.</p>\n        <p class=\"ds-grid__more\"><a class=\"ds-link\" href=\"#page\">6 pages</a></p>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--2\">\n        <span class=\"ds-grid__num\">5</span>\n        <h3 class=\"ds-grid__title\">File formats</h3>\n        <p class=\"ds-grid__text\">The configuration file, the keep rules and the index of a snapshot.</p>\n        <p class=\"ds-grid__more\"><a class=\"ds-link\" href=\"#search\">3 pages</a></p>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--3\">\n        <span class=\"ds-grid__num\">7</span>\n        <h3 class=\"ds-grid__title\">Concepts</h3>\n        <p class=\"ds-grid__text\">How snapshots share files, and what a keep rule decides.</p>\n        <p class=\"ds-grid__more\"><a class=\"ds-link\" href=\"#search\">2 pages</a></p>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--4\">\n        <span class=\"ds-grid__num\">8</span>\n        <h3 class=\"ds-grid__title\">Administration</h3>\n        <p class=\"ds-grid__text\">Timers, remote targets and repairing a damaged store.</p>\n        <p class=\"ds-grid__more\"><a class=\"ds-link\" href=\"#search\">3 pages</a></p>\n      </div>\n    </div>\n  </section>\n\n  <div class=\"ds-cols\">\n    <div class=\"ds-col\">\n      <h2 class=\"ds-section__title\">every page</h2>\n      <table class=\"ds-table ds-table--framed\" data-component=\"table\">\n        <thead>\n          <tr><th>page</th><th class=\"ds-table__extra\">what it describes</th><th class=\"ds-table__extra\">changed</th><th class=\"ds-table__num\">options</th></tr>\n        </thead>\n        <tbody>\n          <tr><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin(1)</a></td><td class=\"ds-table__extra\">The command and what its four verbs have in common.</td><td class=\"ds-table__extra ds-table__date\">2026-09-28</td><td class=\"ds-table__num\">18</td></tr>\n          <tr class=\"is-alt\"><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin-take(1)</a></td><td class=\"ds-table__extra\">Take a snapshot of a directory.</td><td class=\"ds-table__extra ds-table__date\">2026-09-28</td><td class=\"ds-table__num\">31</td></tr>\n          <tr><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin-restore(1)</a></td><td class=\"ds-table__extra\">Copy files back out of a snapshot.</td><td class=\"ds-table__extra ds-table__date\">2026-08-11</td><td class=\"ds-table__num\">22</td></tr>\n          <tr class=\"is-alt\"><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin-prune(8)</a></td><td class=\"ds-table__extra\">Thin old snapshots by the keep rules.</td><td class=\"ds-table__extra ds-table__date\">2026-09-02</td><td class=\"ds-table__num\">14</td></tr>\n          <tr><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin.conf(5)</a></td><td class=\"ds-table__extra\">The configuration file, setting by setting.</td><td class=\"ds-table__extra ds-table__date\">2026-09-28</td><td class=\"ds-table__num\">64</td></tr>\n          <tr class=\"is-alt\"><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin-keep(5)</a></td><td class=\"ds-table__extra\">The grammar of a keep rule.</td><td class=\"ds-table__extra ds-table__date\">2026-06-19</td><td class=\"ds-table__num\">9</td></tr>\n          <tr><td class=\"ds-table__code\"><a class=\"ds-table__title\" href=\"#page\">chronoskin-store(7)</a></td><td class=\"ds-table__extra\">How a store is laid out on disk.</td><td class=\"ds-table__extra ds-table__date\">2026-03-04</td><td class=\"ds-table__num\">0</td></tr>\n        </tbody>\n      </table>\n      <p class=\"ds-note\">Seven of fourteen pages. <a class=\"ds-link\" href=\"#search\">Search</a> finds the rest.</p>\n    </div>\n    <div class=\"ds-stack\">\n      <div class=\"ds-panel\" data-component=\"panel\">\n        <h2 class=\"ds-panel__title\">at the prompt</h2>\n        <div class=\"ds-panel__body\">\n<pre class=\"ds-code\">$ man chronoskin\n$ man 5 chronoskin.conf\n$ apropos snapshot</pre>\n          <p class=\"ds-panel__text\">The pages are installed with the program. This site is built from the same files on every release.</p>\n          <p class=\"ds-progress\"><span class=\"ds-progress__label\">examples tested</span><span class=\"ds-progress__bar\"><span class=\"ds-progress__on\">#########</span>.</span><span class=\"ds-progress__value\">91 of 96</span></p>\n        </div>\n      </div>\n      <div class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">how to read a page</h2>\n        <div class=\"ds-panel__body\">\n          <p class=\"ds-panel__text\">Words in <code>[brackets]</code> are optional. A word after a flag is a value you supply. A number in parentheses is the section the page lives in.</p>\n          <div class=\"ds-accordion\">\n          <details class=\"ds-accordion__item\" open>\n          <summary class=\"ds-accordion__title\">What the numbers mean</summary>\n          <div class=\"ds-accordion__body\">\n          <p>1 is commands, 5 file formats, 7 concepts, 8 administration.</p>\n          </div>\n          </details>\n          <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__title\">What the words in capitals mean</summary>\n          <div class=\"ds-accordion__body\">\n          <p>They are the fixed headings of a page, always in the same order.</p>\n          </div>\n          </details>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- View 2, one page of the manual. -->\n<section class=\"ds-view\" id=\"page\">\n  <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n    <li><a class=\"ds-breadcrumb__link\" href=\"#home\">manual</a></li>\n    <li class=\"ds-breadcrumb__sep\">/</li>\n    <li><a class=\"ds-breadcrumb__link\" href=\"#search\">1 commands</a></li>\n    <li class=\"ds-breadcrumb__sep\">/</li>\n    <li class=\"ds-breadcrumb__current\">chronoskin(1)</li>\n  </ol>\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <div class=\"ds-page-header__main\">\n      <h1 class=\"ds-page-header__title\">chronoskin(1)</h1>\n      <p class=\"ds-page-header__text\">Take, list, restore and thin snapshots of a directory.</p>\n    </div>\n    <div class=\"ds-page-header__action\"><a class=\"ds-button ds-button--secondary\" href=\"#feedback\">report an error</a></div>\n  </header>\n\n  <div class=\"ds-cols ds-cols--rail\">\n    <div class=\"ds-col\">\n      <div class=\"ds-notices\" data-component=\"notice\">\n        <p class=\"ds-notice\"><span class=\"ds-notice__title\">Note:</span> this page describes 3.2. Run <code>chronoskin --version</code> to see which one you have.</p>\n        <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Removed:</span> <code>--force-prune</code> is gone since 3.0. A script that still passes it stops with exit status 2.</p>\n      </div>\n      <article class=\"ds-prose ds-prose--man\" data-component=\"typography\">\n        <h1>chronoskin</h1>\n        <p>Keep dated snapshots of a directory as plain files.</p>\n        <h2>Synopsis</h2>\n<pre class=\"ds-code\">chronoskin [-c file] [-q] verb [options] [arguments]</pre>\n        <h2>Description</h2>\n        <p><strong>chronoskin</strong> copies a source directory into a store. Each run of <code>take</code> makes one snapshot, a directory named by date and time. A file that has not changed since the last snapshot is linked, not copied, so a snapshot costs only what changed.</p>\n        <p>A snapshot is an ordinary directory. You can read it with any program, and <code>restore</code> is only a careful copy.</p>\n        <h2>Options</h2>\n        <h3>-c file, --config file</h3>\n        <p>Read settings from <em>file</em> instead of <code>~/.config/chronoskin.conf</code>.</p>\n        <h3>-n, --dry-run</h3>\n        <p>Print what would be done and change nothing.</p>\n        <h3>-q, --quiet</h3>\n        <p>Print errors only.</p>\n        <h2>Exit status</h2>\n        <ul>\n          <li>0 when the verb finished.</li>\n          <li>1 when some files could not be read; the snapshot is kept and marked partial.</li>\n          <li>2 when the command line or the configuration is wrong.</li>\n        </ul>\n      </article>\n      <h2 class=\"ds-section__title\">see also</h2>\n      <ul class=\"ds-links\" data-component=\"links\">\n        <li><a class=\"ds-link\" href=\"#page\">chronoskin-take(1)</a></li>\n        <li><a class=\"ds-link is-visited\" href=\"#page\">chronoskin.conf(5)</a></li>\n        <li><a class=\"ds-link is-hover\" href=\"#page\">chronoskin-keep(5)</a></li>\n        <li><a class=\"ds-link is-active\" href=\"#page\">chronoskin-prune(8)</a></li>\n      </ul>\n      <ul class=\"ds-pagination\" data-component=\"pagination\">\n        <li><a class=\"ds-pagination__link\" href=\"#home\">&lt; index</a></li>\n        <li><span class=\"ds-pagination__link is-current\">1</span></li>\n        <li><a class=\"ds-pagination__link\" href=\"#page\">2</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#page\">3</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#page\">14</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#page\">chronoskin-take(1) &gt;</a></li>\n        <li class=\"ds-pagination__note\">page 1 of 14</li>\n      </ul>\n    </div>\n    <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n      <div class=\"ds-sidebar__block\">\n        <h2 class=\"ds-sidebar__title\">on this page</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li><a class=\"ds-sidebar__link is-current\" href=\"#page\">name</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">synopsis</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">description</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">options</a><span class=\"ds-sidebar__count\">18</span></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">exit status</a><span class=\"ds-sidebar__count\">3</span></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">see also</a><span class=\"ds-sidebar__count\">4</span></li>\n        </ul>\n      </div>\n      <div class=\"ds-sidebar__block\">\n        <h2 class=\"ds-sidebar__title\">this page</h2>\n        <div class=\"ds-badges\" data-component=\"badge\">\n          <span class=\"ds-badge ds-badge--success\">stable</span>\n          <span class=\"ds-badge ds-badge--warning\">2 deprecated</span>\n          <span class=\"ds-badge ds-badge--danger\">1 removed</span>\n          <span class=\"ds-badge ds-badge--tag\">commands</span>\n          <span class=\"ds-badge\">18</span>\n        </div>\n        <p class=\"ds-sidebar__text\">Changed 2026-09-28 for 3.2. Checked against the program on every release.</p>\n      </div>\n      <div class=\"ds-sidebar__block\">\n        <h2 class=\"ds-sidebar__title\">other versions</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li><a class=\"ds-sidebar__link is-current\" href=\"#page\">3.2</a><span class=\"ds-sidebar__count\">now</span></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">3.1</a><span class=\"ds-sidebar__count\">2025</span></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#page\">2.9</a><span class=\"ds-sidebar__count\">2023</span></li>\n        </ul>\n      </div>\n    </aside>\n  </div>\n</section>\n\n<!-- View 3, search: the result of apropos, by section. -->\n<section class=\"ds-view\" id=\"search\">\n  <header class=\"ds-page-header\">\n    <div class=\"ds-page-header__main\">\n      <h1 class=\"ds-page-header__title\">search</h1>\n      <p class=\"ds-page-header__text\">Five pages mention \"keep\". Pick a section to narrow it.</p>\n    </div>\n    <div class=\"ds-page-header__action\"><a class=\"ds-button ds-button--secondary\" href=\"#home\">every page</a></div>\n  </header>\n  <p class=\"ds-prompt\"><span class=\"ds-prompt__sign\">$</span> apropos keep<span class=\"ds-cursor\">&nbsp;</span></p>\n\n  <div class=\"ds-cols ds-cols--rail\">\n    <div class=\"ds-col\">\n      <ul class=\"ds-tabs\" data-component=\"tabs\">\n        <li><span class=\"ds-tabs__tab is-current\">all 5</span></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#search\">commands 2</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#search\">file formats 2</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#search\">concepts 0</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#search\">administration 1</a></li>\n      </ul>\n      <div class=\"ds-tabs__body\">\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\">section 5</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title\" href=\"#page\">chronoskin-keep(5)</a>\n              <p class=\"ds-list__excerpt\">The grammar of a <span class=\"ds-list__hit\">keep</span> rule: how many snapshots of each age stay in the store.</p>\n              <p class=\"ds-list__meta\">12 matches, first under <span class=\"ds-list__where\">Description</span></p>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\">section 8</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title\" href=\"#page\">chronoskin-prune(8)</a>\n              <p class=\"ds-list__excerpt\">Thin old snapshots. Reads the <span class=\"ds-list__hit\">keep</span> rules and removes what none of them holds on to.</p>\n              <p class=\"ds-list__meta\">7 matches, first under <span class=\"ds-list__where\">Synopsis</span></p>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\">section 5</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title is-visited\" href=\"#page\">chronoskin.conf(5)</a>\n              <p class=\"ds-list__excerpt\">The setting <code>keep</code> takes one rule per line; the default is to <span class=\"ds-list__hit\">keep</span> everything.</p>\n              <p class=\"ds-list__meta\">3 matches, first under <span class=\"ds-list__where\">Settings</span></p>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\">section 1</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title\" href=\"#page\">chronoskin(1)</a>\n              <p class=\"ds-list__excerpt\">Passing <code>--keep</code> on the command line overrides the file for one run.</p>\n              <p class=\"ds-list__meta\">1 match, under <span class=\"ds-list__where\">Options</span></p>\n            </div>\n          </li>\n        </ul>\n      </div>\n      <h2 class=\"ds-section__title\">7 concepts</h2>\n      <div class=\"ds-empty\" data-component=\"empty\">\n        <p class=\"ds-empty__text\">No page in section 7 mentions \"keep\". The concept is explained under \"retention\".</p>\n        <a class=\"ds-button ds-button--secondary\" href=\"#search\">search for retention</a>\n      </div>\n    </div>\n    <div class=\"ds-stack\">\n      <div class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">how search works</h2>\n        <div class=\"ds-panel__body\">\n          <p class=\"ds-panel__text\">It looks through the name line and the text of every page, as <code>apropos</code> and <code>man -K</code> do. Whole words only; no stemming.</p>\n        </div>\n      </div>\n      <div class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">try also</h2>\n        <div class=\"ds-panel__body\">\n          <p class=\"ds-panel__text\"><a class=\"ds-link\" href=\"#search\">retention</a>, <a class=\"ds-link\" href=\"#search\">prune</a>, <a class=\"ds-link\" href=\"#search\">schedule</a>, <a class=\"ds-link\" href=\"#search\">hard link</a></p>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- View 4, report an error in a page: the form, its buttons, the question before discarding. -->\n<section class=\"ds-view\" id=\"feedback\">\n  <ol class=\"ds-breadcrumb\">\n    <li><a class=\"ds-breadcrumb__link\" href=\"#home\">manual</a></li>\n    <li class=\"ds-breadcrumb__sep\">/</li>\n    <li class=\"ds-breadcrumb__current\">report an error</li>\n  </ol>\n  <header class=\"ds-page-header\">\n    <div class=\"ds-page-header__main\">\n      <h1 class=\"ds-page-header__title\">report an error</h1>\n      <p class=\"ds-page-header__text\">A wrong default, a missing option, a sentence nobody can follow.</p>\n    </div>\n    <div class=\"ds-page-header__action\"><a class=\"ds-button ds-button--secondary\" href=\"#page\">back to the page</a></div>\n  </header>\n\n  <div class=\"ds-cols ds-cols--form\">\n    <form class=\"ds-form\" data-component=\"form\" action=\"#feedback\">\n      <div class=\"ds-form__row\">\n        <label class=\"ds-form__label\" for=\"f-page\">page:</label>\n        <div class=\"ds-form__field\">\n          <select class=\"ds-form__input ds-form__input--auto\" id=\"f-page\"><option>chronoskin(1)</option><option>chronoskin-take(1)</option><option>chronoskin.conf(5)</option></select>\n        </div>\n      </div>\n      <div class=\"ds-form__row\">\n        <label class=\"ds-form__label\" for=\"f-where\">heading:</label>\n        <div class=\"ds-form__field\">\n          <input class=\"ds-form__input is-invalid\" id=\"f-where\" type=\"text\" value=\"Optoins\">\n          <p class=\"ds-form__error\">error: chronoskin(1) has no heading \"Optoins\".</p>\n        </div>\n      </div>\n      <div class=\"ds-form__row\">\n        <label class=\"ds-form__label\" for=\"f-what\">what is wrong:</label>\n        <div class=\"ds-form__field\">\n          <textarea class=\"ds-form__input\" id=\"f-what\" rows=\"4\">-q is said to print errors only, but it also prints the summary line.</textarea>\n          <p class=\"ds-form__hint\">Quote the sentence if you can. Plain text.</p>\n        </div>\n      </div>\n      <div class=\"ds-form__row\">\n        <label class=\"ds-form__label\" for=\"f-mail\">your address:</label>\n        <div class=\"ds-form__field\">\n          <input class=\"ds-form__input\" id=\"f-mail\" type=\"text\" value=\"reader@example.org\">\n        </div>\n      </div>\n      <div class=\"ds-form__row\">\n        <span class=\"ds-form__label\">reply:</span>\n        <div class=\"ds-form__field\">\n          <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> write to me when the page is corrected</label>\n          <label class=\"ds-switch\"><span class=\"ds-switch__label\">attach the version of my program</span><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span></label>\n        </div>\n      </div>\n      <div class=\"ds-form__actions\" data-component=\"buttons\">\n        <button class=\"ds-button\" type=\"button\">send report</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\" type=\"button\" disabled>attach output</button>\n      </div>\n    </form>\n    <div class=\"ds-stack\">\n      <div class=\"ds-dialog__backdrop\">\n        <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-1\">\n          <h2 class=\"ds-dialog__title\" id=\"dlg-1\">discard this report?</h2>\n          <div class=\"ds-dialog__body\">\n            <p class=\"ds-dialog__text\">What you wrote about chronoskin(1) is not saved anywhere else.</p>\n            <div class=\"ds-dialog__actions\">\n              <button class=\"ds-button ds-button--danger\" type=\"button\">discard</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">keep writing</button>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">what happens next</h2>\n        <div class=\"ds-panel__body\">\n          <p class=\"ds-panel__text\">A report becomes a ticket against the page. Corrections ship with the next release and appear here the same day.</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n</main>\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <p class=\"ds-footer__text\">chronoskin 3.2.0</p>\n  <p class=\"ds-footer__text\">2026-10-07 | <a class=\"ds-footer__link\" href=\"#home\">index</a> | <a class=\"ds-footer__link\" href=\"#feedback\">report an error</a></p>\n  <p class=\"ds-footer__text\">CHRONOSKIN(7)</p>\n</footer>\n</div>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.terminal.docs.s04.p01.t05.u03\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"terminal\",\n    \"years\": [\n      2015,\n      2026\n    ]\n  },\n  \"archetype\": \"docs\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1280,\n    \"fluid\": false,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-tm-4153\",\n  \"short\": \"v1-tm-4153\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #000000;\n  --color-canvas: #030a05;\n  --color-surface: #061208;\n  --color-surface-alt: #0a1a0d;\n  --color-surface-strong: #0f2614;\n  --color-bar: #38c85a;\n  --color-bar-text: #000000;\n  --color-bar-alt: #0f2614;\n  --color-bar-alt-text: #6fe38a;\n  --color-inverse: #9df5ae;\n  --color-inverse-text: #000000;\n  --color-text: #38c85a;\n  --color-text-muted: #2a8f44;\n  --color-heading: #9df5ae;\n  --color-heading-alt: #d7ff5f;\n  --color-link: #9df5ae;\n  --color-link-quiet: #38c85a;\n  --color-link-visited: #5fa87a;\n  --color-link-hover: #e8f0e8;\n  --color-link-active: #d7ff5f;\n  --color-border: #1f6b33;\n  --color-border-strong: #38c85a;\n  --color-border-muted: #12401f;\n  --color-accent: #d7ff5f;\n  --color-accent-text: #000000;\n  --color-accent-alt: #5fd7af;\n  --color-fill-1: #061208;\n  --color-fill-2: #0a1a0d;\n  --color-fill-3: #0f2614;\n  --color-fill-4: #0a1a0d;\n  --color-button: #38c85a;\n  --color-button-text: #000000;\n  --color-button-hover-text: #000000;\n  --color-button-secondary: #0a1a0d;\n  --color-button-secondary-text: #9df5ae;\n  --color-input: #000000;\n  --color-input-text: #9df5ae;\n  --color-input-border: #1f6b33;\n  --color-disabled: #0a1a0d;\n  --color-disabled-text: #1f6b33;\n  --color-danger: #ff5f5f;\n  --color-danger-surface: #1a0505;\n  --color-success: #5fff00;\n  --color-warning: #ffd75f;\n  --color-notice: #0a1a0d;\n  --color-notice-text: #9df5ae;\n  --color-focus: #d7ff5f;\n  --color-shadow: #000000;\n  --color-overlay: #0a1a0d;\n}\n\n/* @part type */\n:root {\n  --font-body: \"Source Code Pro\", \"DejaVu Sans Mono\", \"Andale Mono\", \"Lucida Console\", monospace;\n  --font-heading: \"Source Code Pro\", \"DejaVu Sans Mono\", \"Andale Mono\", \"Lucida Console\", monospace;\n  --font-ui: \"Source Code Pro\", \"DejaVu Sans Mono\", \"Andale Mono\", \"Lucida Console\", monospace;\n  --font-mono: \"Source Code Pro\", \"DejaVu Sans Mono\", \"Andale Mono\", \"Lucida Console\", monospace;\n  --text-base: 13px;\n  --text-small: 12px;\n  --text-ui: 13px;\n  --text-large: 15px;\n  --text-display: 24px;\n  --text-h1: 18px;\n  --text-h2: 13px;\n  --text-h3: 13px;\n  --line-body: 1.35;\n  --line-heading: 1.2;\n  --line-display: 1.1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: lowercase;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 4px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 0 0 0 2px var(--color-focus);\n  --shadow-control-pressed: inset 0 0 0 2px var(--color-shadow);\n  --shadow-dialog: 8px 8px 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 60%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
