{
  "id": "v1-nb-32b2",
  "long_id": "v1.neubrutalism.landing.s03.p02.t11.u02",
  "name": "Neubrutalism landing page, catalogue layout (2021 to 2026)",
  "era": {
    "slug": "neubrutalism",
    "code": "nb",
    "name": "Neubrutalism",
    "years": [
      2021,
      2026
    ],
    "description": "Loud and flat, 2021 to 2026: thick black outlines, hard offset shadows with no blur, saturated colour blocks and bold type."
  },
  "archetype": "landing",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "A dense catalogue page in the loud strand of neubrutalism: thick black outlines, hard offset shadows, flat saturated fills and heavy grotesque type, arranged as a fixed rail of categories beside a grid of demo cards. It was common from about 2021 to 2026 on the home pages of component kits, template shelves and small developer tools, where the page sells the product by showing its parts. The page fills the viewport, text is left-aligned throughout, and every card has a coloured title strip over a stage that holds the thing itself.",
  "url": "https://chrono.skin/s/v1-nb-32b2",
  "preview_url": "https://chrono.skin/s/v1-nb-32b2/specimen.html",
  "files": {
    "STYLE.md": "# Neubrutalism landing page, catalogue layout (2021 to 2026)\n\n## Summary\n\nA dense catalogue page in the loud strand of neubrutalism: thick black outlines, hard offset shadows, flat saturated fills and heavy grotesque type, arranged as a fixed rail of categories beside a grid of demo cards. It was common from about 2021 to 2026 on the home pages of component kits, template shelves and small developer tools, where the page sells the product by showing its parts. The page fills the viewport, text is left-aligned throughout, and every card has a coloured title strip over a stage that holds the thing itself.\n\n## Layout\n\n- The page is fluid: `--size-page` is 100%. Under one full-width navigation bar the page is a `.ds-shell` of two columns: a `--size-rail` (264px) rail on the left, white, with a rule on its right and running the full height of the page, and the main column (`.ds-main`) filling the rest with `--space-gutter` (32px) at its sides. Designed at a 1440px viewport, where the main column is 1112px of content.\n- Navigation is a single `--size-nav` (64px) bar closed by a `--border-width-strong` rule: a square brand mark and the brand at the left, the links next to it (the current one an outlined accent block), and at the right a `--size-search` (240px) search field and two small buttons. There is no announcement line.\n- Order of the home page inside the main column: a left-aligned intro (`.ds-hero`: tag, display title of at most 20ch, lead capped at `--size-measure` 640px, one large button beside a monospace command chip), a row of four stat tiles, then sections. A section (`.ds-section`) is a 36px title with a muted note at its right, an optional row of filter chips (`.ds-tabs`), and its content. Main-column blocks are `--space-6` (32px) apart; inside a section things are `--space-5` (24px) apart.\n- The catalogue is `.ds-grid`: three equal columns with a `--space-5` gap. A card may span two columns (`.ds-grid__cell--wide`) or all three (`.ds-grid__cell--full`). The stage of a card is at least `--size-demo` (176px) tall and centres what it shows.\n- The rail holds `.ds-sidebar` blocks `--space-6` apart, each a 14px heading over a tight list of links, 4px apart, with counts at the right.\n- Inner pages keep the navigation bar, the rail and the footer and drop the intro and the stat tiles. The rail shows the links of the current category. The main column starts with the `.ds-breadcrumb`, then a `.ds-page-header` (48px title and one line of description on the left, actions on the right, bottom-aligned, closed by a rule), then the `.ds-tabs` chips for the views of the page, then one full-width demo card whose stage holds the working component (a form sits in a `.ds-grid__form` box of `--size-form` 400px), then sections with the reference material, the table first. Cards on an inner page sit in the same three-column `.ds-grid` as the catalogue, so a preview and a related card can share a row; apart from that it is one column, with no side column besides the rail.\n- The footer is one inverted bar across the whole page: brand, a line of links, legal text.\n- Spacing scale: `--space-1` 4px (gap between rail links and navigation links, link padding, underline offset), `--space-2` 8px (badge padding, title strip padding, table and list row padding, gaps between pagination squares), `--space-3` 12px (gap between filter chips, stat tile padding, link side padding), `--space-4` 16px (side padding of strips, rows and tiles, gap between buttons and between hero elements, rail side padding), `--space-5` 24px (grid gap, stage padding, gap inside a section, navigation gap, footer padding), `--space-6` 32px (gap between main-column blocks and between rail blocks, rail top padding, sheet padding), `--space-7` 48px (main column top padding), `--space-8` 64px (main column bottom padding). `--space-gutter` 32px is the side padding of the navigation, the main column and the footer.\n- Movement tokens: `--space-nudge` 2px (hover offset, focus outline offset) and `--space-press` 4px (pressed offset). Hover and press move a control straight down, never sideways, and the red shadow of an invalid field falls straight down, so the movement is right whichever way the surface set throws its shadows (lower right, lower left or straight down).\n- Fixed sizes: `--size-control` 40px (buttons, inputs), `--size-control-large` 48px (the intro button and command chip), `--size-control-small` 32px (navigation buttons, filter chips, pagination squares), `--size-check` 20px, `--size-logo` 32px, `--size-dialog` 440px.\n- Below 900px the rail moves above the main column and its links wrap in rows, the grid and the stat tiles drop to two columns, the search field is hidden and the navigation links wrap onto a second row. Below 600px the rail's links are one strip that scrolls sideways and fades at the right, the main column's side padding is `--space-4`, the grid is one column, only the first block of the rail and the primary navigation button remain, counts in the rail are hidden, the intro title steps down to `--text-h2`, notices and list rows stack, the prose on a sheet runs in one column, and table columns marked `.ds-table__extra` are hidden. On a phone (600px and below) the links `.ds-nav__links` are not shown; the \"Menu\" button `.ds-nav__fold` beside the brand opens a full-width list of every view as `.ds-menu__link--view` rows, the current one filled with the accent and barred on the left; the rail keeps its first block only, and `.ds-nav__actions` becomes a full-width row of equal buttons without the secondary one.\n- Views: the specimen is one example site with four views, switched by plain `#name` links; each view is its own `.ds-shell` with a rail that fits it. `home` is the catalogue front page: intro, stat tiles, filter chips and the grid of block cards (a sketch of the block on a coloured stage, a line on what it is for and its size), closed by the latest changes in a wide card beside a handbook teaser. `block` is one block's page: breadcrumb, page header with the block's actions, the tab chips, the preview card with the form beside the card that shows its confirmation dialog, and the parts table with the key of status labels under it. `handbook` is an article: page header, the prose on a sheet, the related pages as text links, and the buttons to the pages before and after. `releases` is the change log: page header, notices, the release list in a card beside the empty \"coming next\" card, and pagination. The navigation marks the current view through `:has()` rules in `components.css`, one per view; `is-current` on a link does the same by hand.\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- Two voices: a monospace for everything that is read or pressed (`--font-body`, `--font-ui`, `--font-mono`: Fragment Mono, then DM Mono, JetBrains Mono and the system monospace) and a high-contrast serif for headings (`--font-heading`: Playfair Display, then Bodoni Moda, Didot and Georgia).\n- Headings are uppercase serif capitals: `--heading-transform: uppercase`, weight 700 (`--weight-heading`, `--weight-display`), `--line-heading` 1.1 and `--line-display` 1, no tracking.\n- Buttons, navigation and tabs are uppercase monospace: `--ui-transform: uppercase`, weight 500 (`--weight-ui`), 700 (`--weight-bold`) on buttons, labels and badges.\n- Text is small and airy: `--text-base` 14px at `--line-body` 1.625, `--text-small` 12px (badges come out at about 10px), `--text-ui` 14px, `--text-large` 18px for leads and large buttons.\n- `--text-display` 60px for the hero title; `--text-h1` 48px, `--text-h2` 36px, `--text-h3` 20px.\n- Links in running text are underlined; navigation, titles and breadcrumbs are not.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the page fill with its grid, the base font and colour. Its children are the navigation, one `.ds-shell` per page and the footer.\n- `.ds-brand`: the site's mark and name, the first thing in the header and a link to the home page. `.ds-brand__mark` is a `--size-logo` (32px) tile dressed like the primary button: `--fill-button` with the mark drawn in `--color-button-text`, a `--border-width` `--color-border` outline, `--radius-control` corners and the `--shadow-control` hard shadow, so every palette and surface set reskins it. The mark is inline SVG with square line caps and a 2.8 stroke. `.ds-brand__name` is the name in the heading font at `--text-large`, weight `--weight-heading`, with the heading tracking and transform, in `--color-bar-text`. One per page. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the navigation bar: the `.ds-brand` at the left, `.ds-nav__links` of `.ds-nav__link` (the current one has `is-current`; a `.ds-badge` may sit inside a link) and `.ds-nav__actions` with a search field (`.ds-form__control` plus `.ds-nav__search`) and small buttons.\n- `.ds-shell`: the two-column frame: `.ds-rail` (a `<div>` holding the `.ds-sidebar` blocks) and `.ds-main` (the page). `.ds-section` groups a title and its content in the main column; `.ds-section__head` puts `.ds-section__title` and a muted `.ds-section__note` on one line. `.ds-stack` stacks blocks `--space-4` apart (two notices, for example). The specimen uses `.ds-main` on a `<div>` inside one `<main>` that holds the views.\n- `.ds-sidebar`: one block of the rail: `.ds-sidebar__title` over a `.ds-sidebar__list` of `.ds-sidebar__link`, each of which may end with a `.ds-sidebar__count`. The current link (`is-current`) is an outlined accent block with bold text; `is-hover` is an outlined `--color-surface-alt` block; `is-focus` adds an outline.\n- `.ds-hero`: the left-aligned intro at the top of the home page's main column, one per page: an optional `.ds-badge`, `.ds-hero__title` with one phrase in `.ds-hero__mark` (outlined `--color-accent-alt` highlight), `.ds-hero__lead`, and `.ds-hero__actions` with one large button and an optional `.ds-hero__code` chip (a white outlined box with one line of monospace text). The marked phrase is an inline block with `--space-1` above and below, so its outline never touches the neighbouring lines whatever the display line height of the type set; keep it short enough to fit one line.\n- `.ds-stat`: the row of summary figures: four separate `.ds-stat__tile`, white, outlined and shadowed, each a 36px `.ds-stat__value` over a 14px `.ds-stat__label`. `.ds-stat` is the row; the single figure is `.ds-stat__tile`.\n- `.ds-grid`: the catalogue. Each `.ds-grid__cell` is an outlined, shadowed card: a `.ds-grid__bar` title strip on `--color-surface-strong` (holding `.ds-grid__title` and a plain count badge) over a rule, then the `.ds-grid__demo` stage. The stage is page-coloured by default; `.ds-grid__cell--1` to `--4` fill it with a `--color-fill-*`, `.ds-grid__demo--surface` makes it white, `.ds-grid__demo--overlay` is the dialog backdrop. `.ds-grid__demo--stretch` lets the content take the full width, `.ds-grid__demo--flush` removes the padding for a list. `.ds-grid__text` is a centred sentence on a stage, for a card that describes a block instead of showing it. Put only things with their own surface on a filled stage (buttons, badges, panels, boxes); bare text and links go on a white or page-coloured stage. A catalogue card shows a `.ds-grid__sketch` on its stage (a white outlined tile of at most `--size-sketch` 168px holding an inline SVG wireframe in `currentColor`) and ends with a `.ds-grid__body` caption over a rule: a `.ds-grid__text` line on what the block is for and a monospace `.ds-grid__meta` line with its size. `.ds-grid__form` is the white outlined box a form is shown in. A single `.ds-grid__cell` may stand outside a grid as the preview card of an inner page.\n- `.ds-sheet`: a white outlined, shadowed page with `--space-6` padding for long text. A `.ds-prose` inside it drops its 68ch cap and runs in two columns with a `--space-7` gap under a full-width h1, so the sheet is filled across the main column.\n- `.ds-prose`: long text inside a sheet: h1, h2, h3, p, ul, ol, strong, inline code (outlined, `--color-surface-alt`) and links are styled. At most 68ch wide.\n- `.ds-link`: any link in content: underlined. `.ds-link--quiet` removes the underline for titles and breadcrumbs. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-links` lays several out in a row.\n- `.ds-button`: the primary button, 40px tall, outlined, on a hard shadow. `.ds-button--secondary` is the white one. `.ds-button--danger` is the destructive action: flat `--color-danger` with `--color-text`; use it once per view, as the confirming button of a dialog or beside a secondary button. `.ds-button--large` (48px) for the intro, `.ds-button--small` (32px) for the navigation and inside cards. `is-hover` sinks it 2px toward its shadow, `is-active` 4px, `is-disabled` is flat grey, `is-focus` adds an outline. `.ds-buttons` is a row of them.\n- `.ds-badge`: 12px bold uppercase label in an outlined box, accent by default. `.ds-badge--alt` (`--color-accent-alt`, \"new\"), `.ds-badge--strong` (`--color-surface-strong`), `.ds-badge--plain` (white; counts in title strips and chips). Status labels: `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`, all with `--color-text` and the same outline. `.ds-badges` is a row of them. The alt and strong variants carry `--color-text`, like every other filled block; only the default badge uses `--color-accent-text`.\n- `.ds-form`: stacked fields: `.ds-form__field` with a bold 14px `.ds-form__label` above a `.ds-form__control` (input, select; `.ds-form__control--area` for a textarea), then `.ds-form__hint` or `.ds-form__error`. `is-focus` adds the hard shadow and an outline, `is-invalid` turns the border and shadow to `--color-danger`, `is-disabled` greys it. `.ds-form__check` wraps a `.ds-form__checkbox` and its text.\n- `.ds-table`: one outlined, shadowed box the full width of the main column. The head row is the primary bar with bold 14px text; rows are 8px padded, divided by rules and alternate white and page colour; `is-current` on a row fills it `--color-surface-alt`. A status column holds one badge per row. `.ds-table__num` right-aligns numbers, `.ds-table__code` sets a cell in monospace. A cell with `.ds-table__extra` is dropped below 600px.\n- `.ds-list`: ruled rows that fill a `.ds-grid__demo--flush` stage edge to edge; the card is its outline. Each `.ds-list__item` has a bold `.ds-list__title`, a `.ds-list__text` line and a muted `.ds-list__meta` on the right.\n- `.ds-panel`: an outlined box shown inside a card stage: a white `.ds-panel__title` strip over a rule and a `.ds-panel__body`. No shadow; the card around it carries one.\n- `.ds-tabs`: a row of separate outlined chips (`.ds-tabs__tab`), white on a small hard shadow; the current one (`is-current`) is filled with the accent and bold, `is-hover` moves into its shadow. On the home page it filters the catalogue; on an inner page it switches the views of the page and sits directly under the page header.\n- `.ds-notice`: one message in an outlined, shadowed box on `--color-notice` with a bold `.ds-notice__title` and `.ds-notice__text`. `.ds-notice--error` is on `--color-danger-surface`.\n- `.ds-pagination`: a centred row of 32px outlined squares (`.ds-pagination__link`); the current page (`is-current`) is on the accent, `is-disabled` is grey and flat, `is-hover` moves into its shadow.\n- `.ds-breadcrumb`: 14px trail of `.ds-breadcrumb__item` separated by a muted slash; the last has `is-current` and is bold. It is the first line of an inner page's main column.\n- `.ds-page-header`: the head of an inner page, used instead of `.ds-hero`: a block with `.ds-page-header__title` (48px) and one `.ds-page-header__lead` line on the left, `.ds-page-header__actions` (one primary button, at most one secondary) on the right, closed by a rule. It has no fill of its own. One per page.\n- `.ds-dialog`: a 440px outlined box on `--shadow-dialog`, with a `.ds-dialog__bar` on `--color-surface-strong` (holding `.ds-dialog__title` and a square `.ds-dialog__close`), `.ds-dialog__body`, and a page-coloured `.ds-dialog__actions` strip over a rule with the buttons right-aligned. It sits on a `.ds-grid__demo--overlay` stage.\n- `.ds-empty`: outlined, shadowed box on `--color-surface-alt`, centred: `.ds-empty__title`, `.ds-empty__text` and one button.\n- `.ds-footer`: one inverted bar: `.ds-footer__brand`, a `.ds-footer__list` of `.ds-footer__link` in a line, and `.ds-footer__legal` at the right.\n- `.ds-menu`: a chunky drop-down, a `<details>` whose `<summary>` is the `.ds-menu__trigger` (a small secondary button that ends in a plus sign). `.ds-menu__list` is an outlined, shadowed box of `.ds-menu__item` rows divided by rules, each a `.ds-menu__link`. Use it for a short list of pages under one button.\n- `.ds-nav__fold`: the `.ds-menu` that stands in for the bar's links at 600px and below: a \"Menu\" button beside the brand that lists every view as a `.ds-menu__link--view` (the current one filled with the accent and barred on the left) and the actions the phone bar has no room for. It is hidden on wider screens, where the links show.\n- `.ds-progress`: how far something is: a `.ds-progress__label` line (what, and the figures) over a thick outlined `.ds-progress__track` holding a `.ds-progress__bar` (50% wide; `--25` and `--70` set other widths).\n- `.ds-switch`: an on and off control: a `<label>` holding a hidden `.ds-switch__input` checkbox, the `.ds-switch__track` and the text. On, the track is filled with the accent and takes a small hard shadow. `.ds-switch-row` puts a `.ds-tooltip` at the end of its line. Use it for a setting that applies at once.\n- `.ds-tooltip`: a hint like a sticker. `.ds-tooltip__trigger` is a small round button with a question mark; `.ds-tooltip__tip` is an inverted, outlined box that shows above it on hover or focus (`is-open` on the wrapper shows it by hand). One or two lines of text.\n- `.ds-accordion`: questions that open and close, one outlined, shadowed box of `<details class=\"ds-accordion__item\">` divided by rules. `.ds-accordion__head` is the `<summary>` with a square plus sign; open, it becomes a `--color-surface-strong` strip with a minus sign over `.ds-accordion__body`. Use it for frequently asked questions.\n- `.ds-follow`: on a block that comes after another in a column that has no gap of its own; it adds the space above.\n\n## Never\n\n- `row-gap <= 24px`: table and list rows touch, rail links are 4px apart; the widest step between rows is the 24px gap of the card grid.\n- `block-gap <= 32px`: blocks of the main column are 32px apart, cards and the parts of a section 24px; the page is dense.\n- `content-width >= 90%`: rail and main column together fill the viewport; never a narrow centred column.\n- `palette-colours <= 14`: black, white, pink, two yellows, teal, periwinkle, two reds and the greys.\n- `font-size <= 60px`: the hero title is the largest text.\n- `font-size >= 10px`: badge and footer labels, at about 10px, are the smallest text.\n- `font-weight >= 400`: no light weights.\n- `font-weight <= 700`: emphasis stops at 700.\n- `font-families <= 2`: one monospace and one serif.\n- `line-height <= 1.63`: body text is set at 1.625.\n- `letter-spacing = 0px`: neither uppercase headings nor labels are tracked.\n- `border-width <= 2px`: rules are 1px hairlines, 2px only under the navigation; heavy outlines belong to other variants.\n- `border-radius <= 4px`: controls have 4px corners and every larger box is square; badges are pills, which are shapes.\n- `box-shadow-blur <= 0px`: the few shadows are hard offset blocks.\n- `text-shadow = none`: no text shadow.\n- `gradient-fills <= 0%`: every fill is flat, including the page.\n- `animation = none`: nothing moves on its own; the tag strip stands still.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Something new to show on the home page becomes a catalogue card: a `.ds-grid__cell` with a `.ds-grid__bar` title strip, a `.ds-grid__demo` stage and, for a block, a sketch and a `.ds-grid__body` caption, one or two columns wide; do not place a component directly on the page grid. A new kind of page keeps the rail and stacks its parts in the main column `--space-6` apart, starting with the breadcrumb and page header; a new navigation group is another `.ds-sidebar` block in the rail. Anything that stands on the page gets the outline, the `--radius-panel` corner and the `--shadow-panel` hard shadow; anything shown inside a card stage gets the outline only, so shadows never stack. Anything clickable that is a box moves `--space-nudge` into its shadow on hover and `--space-press` when pressed. Colour a stage with one flat `--color-fill-*` only when its content has its own surface; text sits on white, the page colour or `--color-surface-strong` strips, never tinted or faded. For a size the vocabulary lacks, use `calc()` over an existing token, as the 12px badge text does.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 100%;\n  --size-rail: 264px;\n  --size-measure: 640px;\n  --size-nav: 64px;\n  --size-logo: 32px;\n  --size-search: 240px;\n  --size-control: 40px;\n  --size-control-large: 48px;\n  --size-control-small: 32px;\n  --size-check: 20px;\n  --size-menu: 240px;\n  --size-tip: 220px;\n  --size-switch: 44px;\n  --size-bar: 16px;\n  --size-demo: 176px;\n  --size-sketch: 168px;\n  --size-form: 400px;\n  --size-dialog: 440px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 24px;\n  --space-6: 32px;\n  --space-7: 48px;\n  --space-8: 64px;\n  --space-gutter: 32px;\n  --space-nudge: 2px;\n  --space-press: 4px;\n}\n\n/* shell */\n.ds-page {\n  margin: 0;\n  width: var(--size-page);\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* typography */\n.ds-prose {\n  max-width: 68ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  margin: 0 0 var(--space-5);\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin: var(--space-6) 0 var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-3);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-5);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-prose a {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n\n/* links: black on everything; hover is a flat highlight behind the text */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-decoration-thickness: var(--border-width);\n  text-underline-offset: var(--space-1);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\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  text-decoration-thickness: var(--border-width);\n  background: var(--color-surface-strong);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n  background: var(--fill-accent);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* buttons: flat fill, black outline, hard shadow; the button moves into its shadow */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  white-space: nowrap;\n  cursor: pointer;\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n\n/* a block that moves down onto its shadow carries a strip above itself, so a pointer at its top edge stays on it */\n.ds-button {\n  position: relative;\n}\n.ds-button::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 100%;\n  height: calc(2 * var(--space-press));\n}\n.ds-button--secondary {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-size: var(--text-large);\n}\n.ds-button--small {\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-4);\n  font-size: var(--text-small);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  color: var(--color-button-hover-text);\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  transform: translateY(var(--space-nudge));\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: translateY(var(--space-press));\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n  transform: none;\n  cursor: not-allowed;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* badge: small bold uppercase label in an outlined box */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  padding: 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-bold);\n  line-height: 1.5;\n  text-transform: uppercase;\n  white-space: nowrap;\n  vertical-align: middle;\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-badge--alt {\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n}\n.ds-badge--strong {\n  color: var(--color-text);\n  background: var(--color-surface-strong);\n}\n.ds-badge--plain {\n  color: var(--color-text);\n  background: var(--color-surface);\n}\n.ds-badge--success {\n  color: var(--color-text);\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-text);\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form */\n.ds-form {\n  display: grid;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-form__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-form__control {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\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  color: var(--color-input-text);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  transition: var(--transition);\n}\n.ds-form__control--area {\n  min-height: calc(var(--size-control) * 2);\n  resize: vertical;\n}\n.ds-form__control:focus,\n.ds-form__control.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n  box-shadow: var(--shadow-control);\n}\n.ds-form__control:disabled,\n.ds-form__control.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n}\n.ds-form__control.is-invalid {\n  border-color: var(--color-danger);\n  box-shadow: 0 var(--space-press) 0 0 var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  color: var(--color-danger);\n}\n.ds-form__hint {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-size: var(--text-base);\n  font-weight: var(--weight-ui);\n}\n.ds-form__checkbox {\n  appearance: none;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background: var(--color-text);\n  box-shadow: inset 0 0 0 var(--space-nudge) var(--color-surface-strong);\n}\n.ds-form__checkbox:focus-visible,\n.ds-form__checkbox.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\n/* notice */\n.ds-notice {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-notice-text);\n  background: var(--color-notice);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-notice__title {\n  flex: none;\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  margin: 0;\n}\n.ds-notice--error {\n  color: var(--color-text);\n  background: var(--color-danger-surface);\n}\n\n/* dialog: an outlined box with a title strip, on a flat dark backdrop */\n.ds-dialog {\n  max-width: var(--size-dialog);\n  margin: 0 auto;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-dialog__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\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  color: var(--color-heading-alt);\n}\n.ds-dialog__close {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--space-6);\n  height: var(--space-6);\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  cursor: pointer;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-dialog__body {\n  padding: var(--space-5) var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  padding: var(--space-4);\n  background: var(--color-canvas);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* empty state */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-7) var(--space-5);\n  text-align: center;\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-empty__title {\n  margin: 0;\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  color: var(--color-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n}\n\n/* views: one screen 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/* nav: one compact bar across the top, brand mark, links, a search field and small buttons */\n.ds-nav {\n  display: flex;\n  align-items: center;\n  gap: var(--space-5);\n  min-height: var(--size-nav);\n  padding: 0 var(--space-gutter);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  text-decoration: none;\n  gap: var(--space-3);\n}\n.ds-brand__mark {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-logo);\n  height: var(--size-logo);\n  padding: var(--space-nudge);\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\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-heading);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-bar-text);\n}\n.ds-nav__links {\n  display: flex;\n  flex: 1;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: 0 var(--space-3);\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: var(--link-decoration-quiet);\n  color: var(--color-bar-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n  text-underline-offset: var(--space-1);\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(#block:target) .ds-nav__link[href=\"#block\"],\n.ds-page:has(#handbook:target) .ds-nav__link[href=\"#handbook\"],\n.ds-page:has(#releases:target) .ds-nav__link[href=\"#releases\"] {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-border);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-nav__actions {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n}\n.ds-nav__search {\n  width: var(--size-search);\n}\n\n/* shell: a fixed rail on the left, the page on the right */\n.ds-shell {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-rail {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-6);\n  min-width: 0;\n  padding: var(--space-6) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-main {\n  display: grid;\n  gap: var(--space-6);\n  align-content: start;\n  min-width: 0;\n  padding: var(--space-7) var(--space-gutter) var(--space-8);\n}\n.ds-section {\n  display: grid;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-stack {\n  display: grid;\n  gap: var(--space-4);\n  min-width: 0;\n}\n.ds-section__head {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n.ds-section__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-section__note {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* sidebar: a block of the rail, a small heading over a tight list of links with counts */\n.ds-sidebar {\n  min-width: 0;\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-2);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  color: var(--color-heading-alt);\n}\n.ds-sidebar__list {\n  display: grid;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-1) var(--space-3);\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-decoration: var(--link-decoration-quiet);\n  color: var(--color-link-quiet);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  background: var(--color-surface-alt);\n  border-color: var(--color-border);\n}\n.ds-sidebar__link.is-current {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border-color: var(--color-border);\n}\n.ds-sidebar__link:focus-visible,\n.ds-sidebar__link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-sidebar__count {\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  font-variant-numeric: tabular-nums;\n}\n\n/* hero: a left-aligned page intro at the top of the main column */\n.ds-hero {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-4);\n}\n.ds-hero__title {\n  max-width: 20ch;\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-hero__mark {\n  display: inline-block;\n  max-width: 100%;\n  margin: var(--space-1) 0;\n  padding: 0 var(--space-2);\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-hero__lead {\n  max-width: var(--size-measure);\n  margin: 0;\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n}\n.ds-hero__code {\n  display: inline-flex;\n  align-items: center;\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-4);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n\n/* page header: title and description on the left, actions on the right, closed by a rule */\n.ds-page-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-5);\n  padding-bottom: var(--space-5);\n  color: var(--color-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-page-header__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-page-header__lead {\n  max-width: var(--size-measure);\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* stats: a row of separate outlined tiles */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n  margin: 0;\n}\n.ds-stat__tile {\n  display: flex;\n  flex-direction: column-reverse;\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-stat__value {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading);\n}\n.ds-stat__label {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n\n/* grid: catalogue cards, a title strip over a stage with a sketch of the block, then a caption */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-grid__cell--wide {\n  grid-column: span 2;\n}\n.ds-grid__cell--full {\n  grid-column: 1 / -1;\n}\n.ds-grid__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-grid__title {\n  margin: 0;\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  color: var(--color-heading-alt);\n}\n.ds-grid__demo {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-4);\n  min-height: var(--size-demo);\n  padding: var(--space-5);\n  background: var(--color-canvas);\n}\n.ds-grid__demo--stretch {\n  align-items: stretch;\n}\n.ds-grid__demo--flush {\n  padding: 0;\n  justify-content: flex-start;\n  align-items: stretch;\n}\n.ds-grid__demo--surface {\n  background: var(--color-surface);\n}\n.ds-grid__demo--overlay {\n  background: var(--color-overlay);\n}\n.ds-grid__cell--1 .ds-grid__demo {\n  background: var(--color-fill-1);\n}\n.ds-grid__cell--2 .ds-grid__demo {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 .ds-grid__demo {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 .ds-grid__demo {\n  background: var(--color-fill-4);\n}\n.ds-grid__text {\n  max-width: 48ch;\n  margin: 0;\n  text-align: center;\n}\n.ds-grid__sketch {\n  display: block;\n  width: 100%;\n  max-width: var(--size-sketch);\n  padding: var(--space-3);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-grid__sketch svg {\n  display: block;\n  width: 100%;\n}\n.ds-grid__body {\n  display: grid;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-4) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-grid__body .ds-grid__text {\n  max-width: none;\n  text-align: left;\n}\n.ds-grid__meta {\n  margin: 0;\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-grid__form {\n  width: 100%;\n  max-width: var(--size-form);\n  padding: var(--space-5);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n\n/* sheet: a plain outlined page for long text */\n.ds-sheet {\n  padding: var(--space-6);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-sheet .ds-prose {\n  max-width: none;\n  column-count: 2;\n  column-gap: var(--space-7);\n}\n.ds-sheet .ds-prose h1 {\n  column-span: all;\n}\n.ds-sheet .ds-prose h2,\n.ds-sheet .ds-prose h3 {\n  break-after: avoid;\n}\n.ds-sheet .ds-prose h2:first-of-type {\n  margin-top: 0;\n}\n.ds-sheet .ds-prose p,\n.ds-sheet .ds-prose li {\n  break-inside: avoid;\n}\n\n/* table: one outlined, shadowed box; tight rows divided by rules */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 0;\n  font-size: var(--text-base);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-4);\n  text-align: left;\n  vertical-align: middle;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table th {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n.ds-table tbody tr:nth-child(even) td {\n  background: var(--color-canvas);\n}\n.ds-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.ds-table tbody tr.is-current td {\n  background: var(--color-surface-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table .ds-table__code {\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n\n/* list: ruled rows that fill their card edge to edge */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--color-surface);\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) var(--space-4);\n}\n.ds-list__item + .ds-list__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n.ds-list__meta {\n  flex: none;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* panel: outlined box with a title strip */\n.ds-panel {\n  width: 100%;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  overflow: hidden;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__body {\n  padding: var(--space-3) var(--space-4) var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-2);\n}\n\n/* tabs: a row of separate outlined chips; the current one is filled */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-tabs__tab {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  transition: var(--transition);\n}\n\n/* a block that moves down onto its shadow carries a strip above itself, so a pointer at its top edge stays on it */\n.ds-tabs__tab {\n  position: relative;\n}\n.ds-tabs__tab::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 100%;\n  height: calc(2 * var(--space-press));\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n  transform: translateY(var(--space-nudge));\n}\n.ds-tabs__tab.is-current {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\n/* pagination: small outlined squares */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control-small);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-pagination__link.is-current {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__item.is-current {\n  font-weight: var(--weight-bold);\n}\n\n/* footer: one inverted bar, brand left, links in a line, legal text right */\n.ds-footer {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3) var(--space-6);\n  padding: var(--space-5) var(--space-gutter);\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n}\n.ds-footer__brand {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n}\n.ds-footer__list {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.45;\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n  text-underline-offset: var(--space-1);\n}\n.ds-footer__legal {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n\n/* menu: a chunky drop-down, a details element whose summary is the trigger */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__trigger {\n  list-style: none;\n  cursor: pointer;\n}\n.ds-menu__trigger::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__trigger::after {\n  content: \"+\";\n  margin-left: var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-menu[open] .ds-menu__trigger::after {\n  content: \"-\";\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 3;\n  width: var(--size-menu);\n  max-width: 80vw;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-menu__item + .ds-menu__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-menu__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  color: var(--color-text);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  background: var(--color-surface-alt);\n}\n\n/* follow: a block that comes after another in a plain column */\n.ds-follow {\n  margin-top: var(--space-5);\n}\n/* progress: a thick outlined track with a filled bar */\n.ds-progress {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n.ds-progress__track {\n  display: block;\n  height: var(--size-bar);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  overflow: hidden;\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n/* switch: an on and off control drawn over a checkbox */\n.ds-switch-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-switch {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  opacity: 0;\n}\n.ds-switch__track {\n  position: relative;\n  display: block;\n  flex: none;\n  width: var(--size-switch);\n  height: calc(var(--size-check) + 2 * var(--border-width));\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: var(--size-check);\n  height: var(--size-check);\n  background: var(--color-text);\n  border-radius: var(--radius-pill);\n  transform: scale(0.64);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch__track.is-on {\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-switch__input:checked + .ds-switch__track::before,\n.ds-switch__track.is-on::before {\n  left: calc(100% - var(--size-check));\n  background: var(--color-accent-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch__track.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n/* tooltip: a sticker of a hint over its trigger, on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n.ds-tooltip__trigger {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  cursor: help;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  box-sizing: content-box;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  right: 0;\n  z-index: 2;\n  width: var(--size-tip);\n  max-width: 70vw;\n  padding: var(--space-2) var(--space-3);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.35;\n  text-align: left;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n  box-shadow: var(--shadow-control-hover);\n  visibility: hidden;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus-within .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  visibility: visible;\n}\n/* accordion: questions that open and close, one outlined box, a big plus sign */\n.ds-accordion {\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-accordion__item + .ds-accordion__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  list-style: none;\n  cursor: pointer;\n  color: var(--color-heading-alt);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  display: block;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  color: var(--color-button-secondary-text);\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 2.5) calc(var(--space-1) / 2) no-repeat,\n    linear-gradient(currentColor, currentColor) center / calc(var(--space-1) / 2) calc(var(--space-1) * 2.5) no-repeat,\n    var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-sizing: content-box;\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-press));\n}\n.ds-accordion__item[open] .ds-accordion__head {\n  color: var(--color-heading-alt);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item[open] .ds-accordion__head::after {\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 2.5) calc(var(--space-1) / 2) no-repeat,\n    var(--fill-button-secondary);\n}\n.ds-accordion__body {\n  padding: var(--space-4);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* nav fold: on a phone the bar's links fold into a menu behind one button */\n.ds-nav__fold {\n  display: none;\n}\n.ds-menu__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-menu__link--view[href=\"#home\"],\n.ds-page:has(#home:target) .ds-menu__link--view[href=\"#home\"],\n.ds-page:has(#block:target) .ds-menu__link--view[href=\"#block\"],\n.ds-page:has(#handbook:target) .ds-menu__link--view[href=\"#handbook\"],\n.ds-page:has(#releases:target) .ds-menu__link--view[href=\"#releases\"] {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border-left: var(--space-2) var(--border-style) var(--color-border);\n}\n\n@media (max-width: 900px) {\n  .ds-shell {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-rail {\n    flex-direction: row;\n    flex-wrap: wrap;\n    gap: var(--space-4) var(--space-6);\n    padding: var(--space-4);\n    border-right: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-sidebar__list {\n    display: flex;\n    flex-wrap: wrap;\n  }\n  .ds-grid,\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-grid__cell--wide {\n    grid-column: 1 / -1;\n  }\n  .ds-nav {\n    flex-wrap: wrap;\n    justify-content: space-between;\n    gap: var(--space-2) var(--space-4);\n    padding: var(--space-3) var(--space-4);\n  }\n  .ds-nav__links {\n    order: 3;\n    flex: 0 0 100%;\n    flex-wrap: wrap;\n  }\n  .ds-nav__search {\n    display: none;\n  }\n}\n\n@media (max-width: 600px) {\n  .ds-nav__link {\n    padding: 0 var(--space-2);\n    font-size: var(--text-small);\n  }\n  .ds-nav__link .ds-badge,\n  .ds-nav__actions .ds-button--secondary,\n  .ds-sidebar + .ds-sidebar,\n  .ds-sidebar__count,\n  .ds-table .ds-table__extra {\n    display: none;\n  }\n  .ds-nav__actions {\n    gap: var(--space-3);\n  }\n  .ds-main {\n    padding: var(--space-6) var(--space-4) var(--space-7);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h2);\n  }\n  .ds-page-header__title {\n    font-size: var(--text-h2);\n  }\n  .ds-section__title,\n  .ds-prose h1 {\n    font-size: calc(var(--text-h2) * 0.8);\n  }\n  .ds-prose h2 {\n    font-size: var(--text-h3);\n  }\n  .ds-hero__actions .ds-button,\n  .ds-hero__code {\n    width: 100%;\n  }\n  .ds-hero__code {\n    overflow: hidden;\n  }\n  .ds-page-header__actions .ds-button {\n    flex: 1 1 auto;\n  }\n  .ds-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-stat {\n    gap: var(--space-4);\n  }\n  .ds-grid__demo,\n  .ds-sheet {\n    padding: var(--space-4);\n  }\n  .ds-grid__demo--flush {\n    padding: 0;\n  }\n  .ds-sheet .ds-prose {\n    column-count: 1;\n  }\n  .ds-sheet .ds-prose h2:first-of-type {\n    margin-top: var(--space-5);\n  }\n  .ds-grid__form {\n    padding: var(--space-4);\n  }\n  .ds-tabs {\n    flex-wrap: wrap;\n  }\n  .ds-table th,\n  .ds-table td {\n    padding-left: var(--space-3);\n    padding-right: var(--space-3);\n  }\n  .ds-notice,\n  .ds-list__item {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-1);\n  }\n  .ds-dialog__actions {\n    flex-wrap: wrap;\n  }\n  .ds-footer {\n    padding: var(--space-5) var(--space-4);\n  }\n}\n@media (max-width: 600px) {\n  .ds-nav {\n    position: relative;\n  }\n  .ds-nav .ds-nav__links {\n    display: none;\n  }\n  .ds-nav__fold {\n    display: block;\n    position: static;\n    margin-left: auto;\n  }\n  .ds-nav__fold .ds-menu__list {\n    top: 100%;\n    left: var(--space-3);\n    right: var(--space-3);\n    width: auto;\n    max-width: none;\n  }\n  .ds-nav__actions {\n    order: 3;\n    flex: 0 0 100%;\n  }\n  .ds-nav__actions .ds-button {\n    flex: 1;\n  }\n}\n\n/* ---------- phones: the blocks list is one strip that scrolls sideways from edge to edge, fading at the right ---------- */\n@media (max-width: 600px) {\n  .ds-sidebar {\n    min-width: 0;\n    max-width: 100%;\n    flex: 1 0 100%;\n  }\n  .ds-sidebar__list {\n    display: flex;\n    flex-wrap: nowrap;\n    margin: 0 calc(var(--space-4) * -1);\n    padding: var(--space-2) var(--space-7) var(--space-2) var(--space-4);\n    overflow-x: auto;\n    scrollbar-width: none;\n    -webkit-mask-image: linear-gradient(to right, var(--color-text) calc(100% - var(--space-7)), transparent);\n    mask-image: linear-gradient(to right, var(--color-text) calc(100% - var(--space-7)), transparent);\n  }\n  .ds-sidebar__list > li {\n    flex: none;\n  }\n  .ds-sidebar__link {\n    white-space: nowrap;\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: neubrutalism landing specimen, catalogue layout</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n    <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linejoin=\"miter\" aria-hidden=\"true\"><polygon points=\"16.9,6.85 20,6.5 21.5,20 8,21.5 7.6,17.65 18,16.5\" fill=\"currentColor\" stroke=\"none\"/><polygon points=\"3,4.5 16.5,3 18,16.5 4.5,18\"/><circle cx=\"10.5\" cy=\"10.7\" r=\"2.5\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n    <span class=\"ds-brand__name\">chronoskin</span>\n  </a>\n<details class=\"ds-menu ds-nav__fold\" data-component=\"menu\">\n<summary class=\"ds-button ds-button--secondary ds-button--small ds-menu__trigger\">Menu</summary>\n<ul class=\"ds-menu__list\">\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#home\">Blocks</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#block\">Customer form</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#handbook\">Handbook</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#releases\">Releases</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#releases\">Sign in</a></li>\n</ul>\n</details>\n  <ul class=\"ds-nav__links\" aria-label=\"Main\">\n    <li><a class=\"ds-nav__link\" href=\"#home\">Blocks</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#block\">Customer form</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#handbook\">Handbook</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#releases\">Releases <span class=\"ds-badge ds-badge--alt\">New</span></a></li>\n  </ul>\n  <div class=\"ds-nav__actions\">\n    <input class=\"ds-form__control ds-nav__search\" type=\"search\" placeholder=\"Find a block\" aria-label=\"Find a block\">\n    <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#releases\">Sign in</a>\n    <a class=\"ds-button ds-button--small\" href=\"#block\">Get the kit</a>\n  </div>\n</header>\n\n<main>\n<section class=\"ds-view ds-view--home\" id=\"home\">\n<div class=\"ds-shell\">\n  <div class=\"ds-rail\">\n    <nav class=\"ds-sidebar\" data-component=\"sidebar\" aria-label=\"Blocks\">\n      <h2 class=\"ds-sidebar__title\">Blocks</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link is-current\" href=\"#home\" aria-current=\"page\">All blocks <span class=\"ds-sidebar__count\">84</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Actions <span class=\"ds-sidebar__count\">12</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Labels <span class=\"ds-sidebar__count\">9</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Messages <span class=\"ds-sidebar__count\">7</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#block\">Records <span class=\"ds-sidebar__count\">16</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#block\">Forms <span class=\"ds-sidebar__count\">14</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Overlays <span class=\"ds-sidebar__count\">6</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Wayfinding <span class=\"ds-sidebar__count\">11</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Blank slates <span class=\"ds-sidebar__count\">9</span></a></li>\n      </ul>\n    </nav>\n    <nav class=\"ds-sidebar\" aria-label=\"Handbook\">\n      <h2 class=\"ds-sidebar__title\">Handbook</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Start here</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Copying a block</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Changing colours</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Keyboard rules</a></li>\n      </ul>\n    </nav>\n  </div>\n\n  <div class=\"ds-main\">\n    <section class=\"ds-hero\" data-component=\"hero\">\n      <span class=\"ds-badge\">Release 6, eighty-four blocks</span>\n      <h1 class=\"ds-hero__title\">Back-office screens, <span class=\"ds-hero__mark\">one block</span> at a time.</h1>\n      <p class=\"ds-hero__lead\">chronoskin is a shelf of plain, copyable interface blocks for the tools nobody outside your company will ever see.</p>\n      <div class=\"ds-hero__actions\">\n        <a class=\"ds-button ds-button--large\" href=\"#block\">Get the kit &rarr;</a>\n        <span class=\"ds-hero__code\">chronoskin add orders-table</span>\n      </div>\n    </section>\n\n    <dl class=\"ds-stat\" data-component=\"stats\">\n      <div class=\"ds-stat__tile\">\n        <dt class=\"ds-stat__label\">Blocks on the shelf</dt>\n        <dd class=\"ds-stat__value\">84</dd>\n      </div>\n      <div class=\"ds-stat__tile\">\n        <dt class=\"ds-stat__label\">Whole screens</dt>\n        <dd class=\"ds-stat__value\">17</dd>\n      </div>\n      <div class=\"ds-stat__tile\">\n        <dt class=\"ds-stat__label\">Scripts to install</dt>\n        <dd class=\"ds-stat__value\">0</dd>\n      </div>\n      <div class=\"ds-stat__tile\">\n        <dt class=\"ds-stat__label\">Teams using it</dt>\n        <dd class=\"ds-stat__value\">2,960</dd>\n      </div>\n    </dl>\n\n    <section class=\"ds-section\">\n      <div class=\"ds-section__head\">\n        <h2 class=\"ds-section__title\">All blocks</h2>\n        <p class=\"ds-section__note\">Showing 6 of 84, newest first</p>\n      </div>\n      <ul class=\"ds-tabs\" aria-label=\"Filter\">\n        <li><a class=\"ds-tabs__tab is-current\" href=\"#home\" aria-current=\"true\">Everything</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#home\">Free</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#releases\">Changed this month</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#home\">Keyboard-first</a></li>\n      </ul>\n      <ul class=\"ds-grid\" data-component=\"grid\">\n        <li class=\"ds-grid__cell ds-grid__cell--1\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#block\">Orders table</a></h3><span class=\"ds-badge ds-badge--success\">Stable</span></div>\n          <div class=\"ds-grid__demo\"><span class=\"ds-grid__sketch\"><svg viewBox=\"0 0 120 72\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"112\" height=\"64\"/><path d=\"M4 20h112M4 36h112M4 52h112M78 4v64\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <p class=\"ds-grid__text\">Sortable rows with a status column, a numeric column and a pager underneath.</p>\n            <p class=\"ds-grid__meta\">5 parts, 3.9 kB</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--2\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#block\">Customer form</a></h3><span class=\"ds-badge ds-badge--warning\">Changed</span></div>\n          <div class=\"ds-grid__demo\"><span class=\"ds-grid__sketch\"><svg viewBox=\"0 0 120 72\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"112\" height=\"14\"/><rect x=\"4\" y=\"26\" width=\"112\" height=\"14\"/><rect x=\"4\" y=\"52\" width=\"44\" height=\"16\" fill=\"currentColor\"/><path d=\"M58 60h30\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <p class=\"ds-grid__text\">One column of fields for adding or editing a record, with a calm error line.</p>\n            <p class=\"ds-grid__meta\">5 parts, 3.4 kB</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--3\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#block\">Status labels</a></h3><span class=\"ds-badge ds-badge--success\">Stable</span></div>\n          <div class=\"ds-grid__demo\"><span class=\"ds-grid__sketch\"><svg viewBox=\"0 0 120 72\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><rect x=\"4\" y=\"8\" width=\"50\" height=\"18\"/><rect x=\"64\" y=\"8\" width=\"52\" height=\"18\" fill=\"currentColor\"/><rect x=\"4\" y=\"44\" width=\"68\" height=\"18\"/><rect x=\"82\" y=\"44\" width=\"34\" height=\"18\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <p class=\"ds-grid__text\">Approved, waiting and rejected, in the three sizes a table and a header need.</p>\n            <p class=\"ds-grid__meta\">9 labels, 1.1 kB</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--4\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#block\">Action bar</a></h3><span class=\"ds-badge ds-badge--alt\">New</span></div>\n          <div class=\"ds-grid__demo\"><span class=\"ds-grid__sketch\"><svg viewBox=\"0 0 120 72\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><rect x=\"4\" y=\"24\" width=\"50\" height=\"24\" fill=\"currentColor\"/><rect x=\"64\" y=\"24\" width=\"52\" height=\"24\"/><path d=\"M4 62h112\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <p class=\"ds-grid__text\">A primary action, a way out and a destructive one, kept apart on purpose.</p>\n            <p class=\"ds-grid__meta\">12 buttons, 2.2 kB</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#releases\">Inline messages</a></h3><span class=\"ds-badge ds-badge--success\">Stable</span></div>\n          <div class=\"ds-grid__demo\"><span class=\"ds-grid__sketch\"><svg viewBox=\"0 0 120 72\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><rect x=\"4\" y=\"10\" width=\"112\" height=\"22\"/><circle cx=\"18\" cy=\"21\" r=\"5\" fill=\"currentColor\"/><path d=\"M32 21h70\"/><rect x=\"4\" y=\"42\" width=\"112\" height=\"22\"/><path d=\"M13 48l10 10M23 48l-10 10M32 53h56\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <p class=\"ds-grid__text\">A running import and a stopped one: what happened, then what to do next.</p>\n            <p class=\"ds-grid__meta\">7 messages, 1.6 kB</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--1\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#releases\">Blank slates</a></h3><span class=\"ds-badge ds-badge--strong\">Draft</span></div>\n          <div class=\"ds-grid__demo\"><span class=\"ds-grid__sketch\"><svg viewBox=\"0 0 120 72\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"112\" height=\"64\" stroke-dasharray=\"8 6\"/><path d=\"M60 22v28M46 36h28\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <p class=\"ds-grid__text\">What a queue, a search and an inbox say when there is nothing in them.</p>\n            <p class=\"ds-grid__meta\">9 slates, 1.8 kB</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--wide\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\">Fresh on the shelf</h3><a class=\"ds-link\" href=\"#releases\">All releases</a></div>\n          <div class=\"ds-grid__demo ds-grid__demo--flush ds-grid__demo--surface\">\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item\">\n                <div>\n                  <h4 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#releases\">Detail sheet</a></h4>\n                  <p class=\"ds-list__text\">One record on one page, with its history down the side.</p>\n                </div>\n                <span class=\"ds-list__meta\">12 days ago</span>\n              </li>\n              <li class=\"ds-list__item\">\n                <div>\n                  <h4 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#block\">Customer form</a></h4>\n                  <p class=\"ds-list__text\">The error line now sits under the field, not beside it.</p>\n                </div>\n                <span class=\"ds-list__meta\">12 days ago</span>\n              </li>\n              <li class=\"ds-list__item\">\n                <div>\n                  <h4 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#releases\">Orders table</a></h4>\n                  <p class=\"ds-list__text\">A wider amount column and a pager that fits a phone.</p>\n                </div>\n                <span class=\"ds-list__meta\">Last month</span>\n              </li>\n            </ul>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--2\">\n          <div class=\"ds-grid__bar\"><h3 class=\"ds-grid__title\">New to the shelf?</h3><span class=\"ds-badge ds-badge--plain\">4 pages</span></div>\n          <div class=\"ds-grid__demo ds-grid__demo--stretch\">\n            <section class=\"ds-panel\" data-component=\"panel\">\n              <h4 class=\"ds-panel__title\">Start with the handbook</h4>\n              <div class=\"ds-panel__body\">\n                <p>Pick a block, press copy, paste it where the screen needs it. The second page shows how.</p>\n                <a class=\"ds-link\" href=\"#handbook\">Copying a block</a>\n              </div>\n            </section>\n<div class=\"ds-accordion ds-follow\" data-component=\"accordion\">\n<details class=\"ds-accordion__item\" open><summary class=\"ds-accordion__head\">Is it free?</summary><div class=\"ds-accordion__body\"><p>The shelf is free. Whole screens need the kit.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">Do I install anything?</summary><div class=\"ds-accordion__body\"><p>No. A block is one file you copy.</p></div></details>\n</div>\n          </div>\n        </li>\n      </ul>\n    </section>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"block\">\n<div class=\"ds-shell\">\n  <div class=\"ds-rail\">\n    <nav class=\"ds-sidebar\" aria-label=\"Records\">\n      <h2 class=\"ds-sidebar__title\">Records</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Orders table <span class=\"ds-sidebar__count\">5</span></a></li>\n        <li><a class=\"ds-sidebar__link is-current\" href=\"#block\" aria-current=\"page\">Customer form <span class=\"ds-sidebar__count\">4</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Activity list <span class=\"ds-sidebar__count\">3</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Detail sheet <span class=\"ds-sidebar__count\">4</span></a></li>\n      </ul>\n    </nav>\n    <nav class=\"ds-sidebar\" aria-label=\"Handbook\">\n      <h2 class=\"ds-sidebar__title\">Handbook</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Start here</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Copying a block</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Changing colours</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Keyboard rules</a></li>\n      </ul>\n    </nav>\n  </div>\n\n  <div class=\"ds-main\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\" aria-label=\"Breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Blocks</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Records</a></li>\n      <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Customer form</li>\n    </ol>\n    <section class=\"ds-page-header\" data-component=\"page-header\">\n      <div>\n        <h1 class=\"ds-page-header__title\">Customer form</h1>\n        <p class=\"ds-page-header__lead\">One column of fields for adding or editing a customer record.</p>\n      </div>\n      <div class=\"ds-page-header__actions\" data-component=\"buttons\">\n        <button class=\"ds-button\" type=\"button\">Copy block</button>\n        <button class=\"ds-button ds-button--secondary\" type=\"button\">Open full screen</button>\n        <button class=\"ds-button ds-button--danger\" type=\"button\">Remove</button>\n        <button class=\"ds-button\" type=\"button\" disabled>Design file</button>\n      </div>\n    </section>\n    <ul class=\"ds-tabs\" data-component=\"tabs\" role=\"tablist\">\n      <li><a class=\"ds-tabs__tab is-current\" href=\"#block\" role=\"tab\" aria-selected=\"true\">Preview</a></li>\n      <li><a class=\"ds-tabs__tab\" href=\"#block\" role=\"tab\">Markup</a></li>\n      <li><a class=\"ds-tabs__tab\" href=\"#block\" role=\"tab\">Parts <span class=\"ds-badge ds-badge--plain\">5</span></a></li>\n      <li><a class=\"ds-tabs__tab\" href=\"#handbook\" role=\"tab\">Notes</a></li>\n    </ul>\n    <div class=\"ds-grid\">\n      <div class=\"ds-grid__cell\">\n        <div class=\"ds-grid__bar\"><h2 class=\"ds-grid__title\">Preview</h2><span class=\"ds-badge ds-badge--success\">Stable</span></div>\n        <div class=\"ds-grid__demo\">\n          <div class=\"ds-grid__form\">\n            <form class=\"ds-form\" data-component=\"form\">\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-name\">Customer name</label>\n                <input class=\"ds-form__control\" id=\"f-name\" type=\"text\" value=\"Orchard Lane Bakery\">\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-num\">Customer number</label>\n                <input class=\"ds-form__control is-invalid\" id=\"f-num\" type=\"text\" value=\"C-20\" aria-invalid=\"true\" aria-describedby=\"f-num-err\">\n                <p class=\"ds-form__error\" id=\"f-num-err\">Six digits follow the letter.</p>\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-tier\">Price tier</label>\n                <select class=\"ds-form__control\" id=\"f-tier\">\n                  <option>Standard</option>\n                  <option>Trade</option>\n                  <option>Wholesale</option>\n                </select>\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-note\">Note for the team</label>\n                <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-note\">Deliveries before seven, side entrance.</textarea>\n                <p class=\"ds-form__hint\">Shown at the top of every order.</p>\n              </div>\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Send invoices by email</label>\n<div class=\"ds-switch-row\"><label class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>Show the block in dense spacing</span></label><span class=\"ds-tooltip\" data-component=\"tooltip\"><button class=\"ds-tooltip__trigger\" type=\"button\" aria-describedby=\"tip-1\">?</button><span class=\"ds-tooltip__tip\" id=\"tip-1\" role=\"tooltip\">Dense spacing suits tables of more than twenty rows.</span></span></div>\n              <div class=\"ds-buttons\">\n                <button class=\"ds-button\" type=\"button\">Save customer</button>\n                <a class=\"ds-button ds-button--secondary\" href=\"#home\">Cancel</a>\n              </div>\n            </form>\n          </div>\n        </div>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--wide\">\n        <div class=\"ds-grid__bar\"><h2 class=\"ds-grid__title\">Removing it</h2><span class=\"ds-badge ds-badge--plain\">Confirm</span></div>\n        <div class=\"ds-grid__demo ds-grid__demo--overlay\">\n            <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n              <div class=\"ds-dialog__bar\">\n                <h4 class=\"ds-dialog__title\" id=\"dlg-title\">Remove this block?</h4>\n                <a class=\"ds-dialog__close\" href=\"#home\" aria-label=\"Close\">&times;</a>\n              </div>\n              <div class=\"ds-dialog__body\">\n                <p>Customer form leaves your kit and its five parts go with it. Screens that already use it keep their copy.</p>\n              </div>\n              <div class=\"ds-dialog__actions\">\n                <a class=\"ds-button ds-button--secondary\" href=\"#block\">Go back</a>\n                <button class=\"ds-button ds-button--danger\" type=\"button\">Remove block</button>\n              </div>\n            </div>\n        </div>\n      </div>\n    </div>\n    <section class=\"ds-section\">\n      <div class=\"ds-section__head\">\n        <h2 class=\"ds-section__title\">Parts</h2>\n        <p class=\"ds-section__note\">5 parts, 3.4 kB together</p>\n      </div>\n      <table class=\"ds-table\" data-component=\"table\">\n        <thead>\n          <tr><th>Part</th><th class=\"ds-table__extra\">Class</th><th>Status</th><th class=\"ds-table__extra\">Since</th><th class=\"ds-table__num\">Bytes</th></tr>\n        </thead>\n        <tbody>\n          <tr><td>Text field</td><td class=\"ds-table__code ds-table__extra\">field-text</td><td><span class=\"ds-badge ds-badge--success\">Stable</span></td><td class=\"ds-table__extra\">Release 1</td><td class=\"ds-table__num\">620</td></tr>\n          <tr><td>Choice field</td><td class=\"ds-table__code ds-table__extra\">field-choice</td><td><span class=\"ds-badge ds-badge--success\">Stable</span></td><td class=\"ds-table__extra\">Release 1</td><td class=\"ds-table__num\">710</td></tr>\n          <tr class=\"is-current\"><td>Error line</td><td class=\"ds-table__code ds-table__extra\">field-error</td><td><span class=\"ds-badge ds-badge--warning\">Changed</span></td><td class=\"ds-table__extra\">Release 6</td><td class=\"ds-table__num\">280</td></tr>\n          <tr><td>Long text</td><td class=\"ds-table__code ds-table__extra\">field-area</td><td><span class=\"ds-badge ds-badge--success\">Stable</span></td><td class=\"ds-table__extra\">Release 2</td><td class=\"ds-table__num\">540</td></tr>\n          <tr><td>Inline help bubble</td><td class=\"ds-table__code ds-table__extra\">field-bubble</td><td><span class=\"ds-badge ds-badge--danger\">Retired</span></td><td class=\"ds-table__extra\">Release 3</td><td class=\"ds-table__num\">1,250</td></tr>\n        </tbody>\n      </table>\n      <div class=\"ds-badges\" data-component=\"badge\">\n        <span class=\"ds-badge\">In review</span>\n        <span class=\"ds-badge ds-badge--alt\">New</span>\n        <span class=\"ds-badge ds-badge--strong\">Draft</span>\n        <span class=\"ds-badge ds-badge--plain\">5 parts</span>\n        <span class=\"ds-badge ds-badge--success\">Stable</span>\n        <span class=\"ds-badge ds-badge--warning\">Changed</span>\n        <span class=\"ds-badge ds-badge--danger\">Retired</span>\n      </div>\n    </section>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"handbook\">\n<div class=\"ds-shell\">\n  <div class=\"ds-rail\">\n    <nav class=\"ds-sidebar\" aria-label=\"Handbook\">\n      <h2 class=\"ds-sidebar__title\">Handbook</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Start here</a></li>\n        <li><a class=\"ds-sidebar__link is-current\" href=\"#handbook\" aria-current=\"page\">Copying a block</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Changing colours</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Keyboard rules</a></li>\n      </ul>\n    </nav>\n    <nav class=\"ds-sidebar\" aria-label=\"Blocks\">\n      <h2 class=\"ds-sidebar__title\">Blocks</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">All blocks <span class=\"ds-sidebar__count\">84</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Actions <span class=\"ds-sidebar__count\">12</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Labels <span class=\"ds-sidebar__count\">9</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Messages <span class=\"ds-sidebar__count\">7</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#block\">Records <span class=\"ds-sidebar__count\">16</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#block\">Forms <span class=\"ds-sidebar__count\">14</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Overlays <span class=\"ds-sidebar__count\">6</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Wayfinding <span class=\"ds-sidebar__count\">11</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Blank slates <span class=\"ds-sidebar__count\">9</span></a></li>\n      </ul>\n    </nav>\n  </div>\n\n  <div class=\"ds-main\">\n    <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Blocks</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#handbook\">Handbook</a></li>\n      <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Copying a block</li>\n    </ol>\n    <section class=\"ds-page-header\">\n      <div>\n        <h1 class=\"ds-page-header__title\">Handbook</h1>\n        <p class=\"ds-page-header__lead\">Four short pages. Read the second one and you can start.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#block\">Try it on a block</a>\n      </div>\n    </section>\n    <div class=\"ds-sheet\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Copying a block</h1>\n          <p>A block is one file of markup and the classes it needs. Nothing is installed, so nothing can go out of date behind your back.</p>\n          <h2>Three steps</h2>\n          <p>Pick a block, press copy, paste it where the screen needs it. Set <code>data-density</code> on the wrapper if the table should be tighter.</p>\n          <ul>\n            <li>Keep the class names as they are</li>\n            <li>Change the words, not the spacing</li>\n            <li>Put one primary action on a screen</li>\n          </ul>\n          <h3>When a block does not fit</h3>\n          <p>Take the nearest one and remove parts. <strong>Removing is always safe</strong>; adding a new kind of box rarely is.</p>\n        </article>\n<div class=\"ds-progress ds-follow\" data-component=\"progress\"><p class=\"ds-progress__label\"><span>Handbook</span><span>Page 2 of 4</span></p><span class=\"ds-progress__track\"><span class=\"ds-progress__bar\"></span></span></div>\n    </div>\n    <section class=\"ds-section\">\n      <div class=\"ds-section__head\">\n        <h2 class=\"ds-section__title\">Related pages</h2>\n        <p class=\"ds-section__note\">Two minutes each</p>\n      </div>\n      <ul class=\"ds-links\" data-component=\"links\">\n        <li><a class=\"ds-link\" href=\"#handbook\">Changing colours</a></li>\n        <li><a class=\"ds-link is-visited\" href=\"#handbook\">Start here</a></li>\n        <li><a class=\"ds-link is-hover\" href=\"#block\">The customer form</a></li>\n        <li><a class=\"ds-link is-active\" href=\"#releases\">What changed in release 6</a></li>\n      </ul>\n    </section>\n    <div class=\"ds-buttons\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#handbook\">&larr; Start here</a>\n      <a class=\"ds-button ds-button--secondary\" href=\"#handbook\">Changing colours &rarr;</a>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"releases\">\n<div class=\"ds-shell\">\n  <div class=\"ds-rail\">\n    <nav class=\"ds-sidebar\" aria-label=\"Blocks\">\n      <h2 class=\"ds-sidebar__title\">Blocks</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">All blocks <span class=\"ds-sidebar__count\">84</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Actions <span class=\"ds-sidebar__count\">12</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Labels <span class=\"ds-sidebar__count\">9</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Messages <span class=\"ds-sidebar__count\">7</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#block\">Records <span class=\"ds-sidebar__count\">16</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#block\">Forms <span class=\"ds-sidebar__count\">14</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Overlays <span class=\"ds-sidebar__count\">6</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Wayfinding <span class=\"ds-sidebar__count\">11</span></a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#home\">Blank slates <span class=\"ds-sidebar__count\">9</span></a></li>\n      </ul>\n    </nav>\n    <nav class=\"ds-sidebar\" aria-label=\"Handbook\">\n      <h2 class=\"ds-sidebar__title\">Handbook</h2>\n      <ul class=\"ds-sidebar__list\">\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Start here</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Copying a block</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Changing colours</a></li>\n        <li><a class=\"ds-sidebar__link\" href=\"#handbook\">Keyboard rules</a></li>\n      </ul>\n    </nav>\n  </div>\n\n  <div class=\"ds-main\">\n    <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Blocks</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#releases\">Releases</a></li>\n      <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Release 6</li>\n    </ol>\n    <section class=\"ds-page-header\">\n      <div>\n        <h1 class=\"ds-page-header__title\">Releases</h1>\n        <p class=\"ds-page-header__lead\">What changed on the shelf, newest first.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#handbook\">How to update</a>\n        <a class=\"ds-button\" href=\"#home\">Get release 6</a>\n      </div>\n    </section>\n    <div class=\"ds-stack\" data-component=\"notice\">\n      <div class=\"ds-notice\" role=\"status\">\n        <strong class=\"ds-notice__title\">Release 6 is out</strong>\n        <p class=\"ds-notice__text\">Nine new blocks and a calmer error line. Copy them again to update.</p>\n      </div>\n      <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n        <strong class=\"ds-notice__title\">Release 5 withdrawn</strong>\n        <p class=\"ds-notice__text\">Its date field lost the keyboard focus. Use release 6 instead.</p>\n      </div>\n    </div>\n    <div class=\"ds-grid\">\n      <div class=\"ds-grid__cell ds-grid__cell--wide\">\n        <div class=\"ds-grid__bar\"><h2 class=\"ds-grid__title\">This year</h2><span class=\"ds-badge ds-badge--plain\">Page 2 of 9</span></div>\n        <div class=\"ds-grid__demo ds-grid__demo--flush ds-grid__demo--surface\">\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <div>\n                <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Release 6: nine new blocks</a></h3>\n                <p class=\"ds-list__text\">Detail sheet, blank slates and a wider orders table.</p>\n              </div>\n              <span class=\"ds-list__meta\">12 days ago</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <div>\n                <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#block\">Customer form: calmer error line</a></h3>\n                <p class=\"ds-list__text\">The message sits under the field, not beside it.</p>\n              </div>\n              <span class=\"ds-list__meta\">12 days ago</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <div>\n                <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#handbook\">Handbook: keyboard rules</a></h3>\n                <p class=\"ds-list__text\">One page on focus order and escape.</p>\n              </div>\n              <span class=\"ds-list__meta\">Last month</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <div>\n                <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Release 4: status labels</a></h3>\n                <p class=\"ds-list__text\">Approved, waiting and rejected, in every size.</p>\n              </div>\n              <span class=\"ds-list__meta\">In spring</span>\n            </li>\n          </ul>\n        </div>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--3\">\n        <div class=\"ds-grid__bar\"><h2 class=\"ds-grid__title\">Coming next</h2><span class=\"ds-badge ds-badge--plain\">0</span></div>\n        <div class=\"ds-grid__demo ds-grid__demo--stretch\">\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <h3 class=\"ds-empty__title\">Nothing scheduled</h3>\n            <p class=\"ds-empty__text\">Release 7 has no date yet. Ask for a block and it goes on the list.</p>\n            <a class=\"ds-button ds-button--small\" href=\"#home\">Ask for a block</a>\n          </div>\n        </div>\n      </div>\n    </div>\n    <ul class=\"ds-pagination\" data-component=\"pagination\" aria-label=\"Pages\">\n      <li><a class=\"ds-pagination__link\" href=\"#releases\" aria-label=\"Previous\">&larr;</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#releases\">1</a></li>\n      <li><a class=\"ds-pagination__link is-current\" href=\"#releases\" aria-current=\"page\">2</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#releases\">3</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#releases\">9</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#releases\" aria-label=\"Next\">&rarr;</a></li>\n    </ul>\n  </div>\n</div>\n</section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <p class=\"ds-footer__brand\">chronoskin</p>\n  <ul class=\"ds-footer__list\">\n    <li><a class=\"ds-footer__link\" href=\"#home\">Blocks</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#block\">Customer form</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#handbook\">Handbook</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#releases\">Releases</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#handbook\">Licence</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#home\">Contact</a></li>\n  </ul>\n  <p class=\"ds-footer__legal\">Specimen page. All names and figures are placeholders.</p>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.neubrutalism.landing.s03.p02.t11.u02\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"neubrutalism\",\n    \"years\": [\n      2021,\n      2026\n    ]\n  },\n  \"archetype\": \"landing\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-nb-32b2\",\n  \"short\": \"v1-nb-32b2\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #ffc900;\n  --color-surface-strong: #ff90e8;\n  --color-bar: #ffffff;\n  --color-bar-text: #000000;\n  --color-bar-alt: #000000;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #000000;\n  --color-inverse-text: #ffffff;\n  --color-text: #000000;\n  --color-text-muted: #666666;\n  --color-heading: #000000;\n  --color-heading-alt: #000000;\n  --color-link: #000000;\n  --color-link-quiet: #000000;\n  --color-link-visited: #000000;\n  --color-link-hover: #000000;\n  --color-link-active: #000000;\n  --color-border: #000000;\n  --color-border-strong: #000000;\n  --color-border-muted: #b3b3b3;\n  --color-accent: #ff90e8;\n  --color-accent-text: #000000;\n  --color-accent-alt: #f1f333;\n  --color-fill-1: #ff90e8;\n  --color-fill-2: #ffc900;\n  --color-fill-3: #23a094;\n  --color-fill-4: #90a8ed;\n  --color-button: #000000;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #000000;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #000000;\n  --color-disabled: #aeaeae;\n  --color-disabled-text: #303030;\n  --color-danger: #dc341e;\n  --color-danger-surface: #e2442f;\n  --color-success: #23a094;\n  --color-warning: #ffc900;\n  --color-notice: #90a8ed;\n  --color-notice-text: #000000;\n  --color-focus: #000000;\n  --color-shadow: #000000;\n  --color-overlay: rgb(0 0 0 / 0.75);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Fragment Mono\", \"DM Mono\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  --font-heading: \"Playfair Display\", \"Bodoni Moda\", Didot, \"Bodoni MT\", Georgia, \"Times New Roman\", serif;\n  --font-ui: \"Fragment Mono\", \"DM Mono\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  --font-mono: \"Fragment Mono\", \"DM Mono\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  --text-base: 14px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 18px;\n  --text-display: 60px;\n  --text-h1: 48px;\n  --text-h2: 36px;\n  --text-h3: 20px;\n  --line-body: 1.625;\n  --line-heading: 1.1;\n  --line-display: 1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 500;\n  --heading-transform: uppercase;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: uppercase;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 4px;\n  --radius-panel: 0;\n  --radius-pill: 9999px;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 2px 2px 0 0 var(--color-shadow);\n  --shadow-control-pressed: none;\n  --shadow-dialog: 4px 4px 0 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: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: transform 0.14s ease-out, box-shadow 0.14s ease-out;\n  --backdrop-blur: 0px;\n}\n"
  }
}
