{
  "id": "v1-tm-4183",
  "long_id": "v1.terminal.docs.s04.p01.t08.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-4183",
  "preview_url": "https://chrono.skin/s/v1-tm-4183/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 (\"Iosevka\", \"Victor Mono\", \"Roboto Mono\", Monaco, Menlo, monospace). Weights are `--weight-body` 400 and 700 for headings, names, prices and controls (`--weight-ui`); the hero title is large and light (`--weight-display` 400).\n- Sizes: `--text-base` 14px with `--line-body` 1.55 is all running text, `--text-ui` 13px the nav, buttons, inputs, tabs and pagination, `--text-small` 13px meta lines, gutter hints, badges and the footer, `--text-large` 16px the hero's lead and the brand name. `--text-display` 34px is the hero title only, `--text-h1` 22px a page title and a figure, `--text-h2` 16px second headings, `--text-h3` 14px row names, frame titles and grid titles.\n- Headings and controls are capitals: `--heading-transform` and `--ui-transform` are uppercase, headings are tracked by `--heading-tracking` 0.08em and the hero title by `--display-tracking` 0.04em. Running text is never tracked.\n- A magenta phosphor: `--color-page` #000000 is the window, `--color-canvas` #0a0010 the sheet, `--color-surface` #12001c the inside of frames and table rows, `--color-surface-alt` #1a0028 alternate rows and code, `--color-surface-strong` #2c0042 the gutter of a marked row, sum rows, inline code and avatar cells. `--color-text` #e667cf is running text, `--color-text-muted` #b455a6 hints, codes and counts, `--color-heading` #ffb8f8 headings, names, figures and sums, `--color-heading-alt` #5ff5ff row numbers, frame titles, typed pictures and tags.\n- Links: `--color-link` #7df9ff, `--color-link-quiet` #e667cf for breadcrumb, tabs, sidebar and pager links, `--color-link-visited` #b48cff, `--color-link-hover` #ffffff, `--color-link-active` #fff75f. `--link-decoration` is underline for links in text and titles and `--link-decoration-hover` none: a hovered link drops its line and turns white; `--link-decoration-quiet` is none.\n- Bars: `--color-bar` #ff2bd1 with `--color-bar-text` #000000 is the head row of a table and the footer strip. `--color-bar-alt` #2c0042 with `--color-bar-alt-text` #ffa6f6 is the nav. `--color-inverse` #ffa6f6 with `--color-inverse-text` #000000 is inverse video: the current tab, page number and sidebar link, the selected table row, the hovered menu item, the half of a switch that holds.\n- Lines: `--color-border` #8a2379 at `--border-width` 1px `--border-style` dotted draws every frame, the rules between rows and the upright rules of the nav and the gutter; `--color-border-strong` #ff2bd1 at `--border-width-strong` 2px closes the head row and edges a notice, the carousel and a dialog; `--color-border-muted` #45123f parts rows inside a frame and draws the leaders of a receipt.\n- Accents: `--color-accent` #5ff5ff with `--color-accent-text` #000000 is the count badge and the mark of the row the reader is on; `--color-accent-alt` #fff75f is the fold marks of the accordion and the prompt sign. `--color-fill-1` to `--color-fill-4` (#12001c, #1f0030, #001c26, #2a0020) are the four grid cells and two of the avatar cells. Status words are text in brackets: `--color-success` #5fff9a, `--color-warning` #fff75f, `--color-danger` #ff7043; progress bars use the same three.\n- Controls: the primary button is `--color-button` #ff2bd1 with `--color-button-text` #000000; the secondary button is `--color-button-secondary` #1a0028 with `--color-button-secondary-text` #ffb8f8 and a frame in `--color-border`; fields are `--color-input` #000000 with `--color-input-text` #ffb8f8 and a line in `--color-input-border` #8a2379; disabled is `--color-disabled` #1a0028 with `--color-disabled-text` #742c6a. The notice is `--color-notice` #1a0028 with `--color-notice-text` #ffb8f8, the error notice `--color-danger-surface` #260a00 with `--color-danger`. `--color-overlay` #1a0028 is the block a dialog stands on; `--color-focus` #5ff5ff is the focus outline; `--color-shadow` #8a2379 is the magenta of every shadow.\n- Surface: `--shadow-text` is a hard ghost, the letters once more 2px to the right in 60% of the accent colour, with no blur; it is used on the hero title, page titles, figures and the brand name only. Frames and controls have no shadow at rest (`--shadow-panel`, `--shadow-control` none); a hovered button gets a 3px bar inside its lower edge and a pressed one inside its upper edge; `--shadow-dialog` is a hard block 6px to the left and 6px down, on the carousel and a dialog. `--fill-button-hover` darkens the button (75% of it over black). All four radii are 0, `--backdrop-blur` is 0px, `--focus-ring` is 3px double var(--color-focus), `--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`. `--color-button-secondary-text` and `--color-input-text` must read on their own fills and on the canvas and surfaces, because a surface set may leave those controls unfilled. The current cell of the nav is a hole in the bar: `--color-canvas` with `--color-heading`. Nothing but a link in the bar's own text colour, a badge or a key label stands on a bar or an inverse block.\n- One-off sizes written with `calc()` or `ch`: a frame title is lifted by half of `--text-h3` times `--line-body` so that the frame's top line runs through it; the brand tile is one text line square; a typed picture is set at `--line-heading` so that its strokes meet; an avatar is at least `4ch` wide; a pulled-down menu is at least `28ch` and a tooltip at most `34ch` wide; the field of the restock line is at least `24ch`; horizontal paddings and gaps are whole character cells.\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 <= 34px`: the largest text is the hero title; everything else is within a few pixels of the body size.\n- `font-size >= 13px`: small text is the meta size; nothing is set smaller.\n- `letter-spacing <= 3px`: only headings are tracked, and by less than a tenth of their size.\n- `line-height <= 1.6`: lines sit 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.t08.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-4183\",\n  \"short\": \"v1-tm-4183\"\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: \"Iosevka\", \"Victor Mono\", \"Roboto Mono\", Monaco, Menlo, monospace;\n  --font-heading: \"Iosevka\", \"Victor Mono\", \"Roboto Mono\", Monaco, Menlo, monospace;\n  --font-ui: \"Iosevka\", \"Victor Mono\", \"Roboto Mono\", Monaco, Menlo, monospace;\n  --font-mono: \"Iosevka\", \"Victor Mono\", \"Roboto Mono\", Monaco, Menlo, monospace;\n  --text-base: 14px;\n  --text-small: 13px;\n  --text-ui: 13px;\n  --text-large: 16px;\n  --text-display: 34px;\n  --text-h1: 22px;\n  --text-h2: 16px;\n  --text-h3: 14px;\n  --line-body: 1.55;\n  --line-heading: 1.25;\n  --line-display: 1.15;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 400;\n  --weight-ui: 700;\n  --heading-transform: uppercase;\n  --heading-tracking: 0.08em;\n  --display-tracking: 0.04em;\n  --figure-shift: 0em;\n  --ui-transform: uppercase;\n  --link-decoration: underline;\n  --link-decoration-hover: none;\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"
  }
}
