{
  "id": "v1-br-7bab",
  "long_id": "v1.brutalism.portal.s07.p11.t10.u11",
  "name": "Web brutalism, board",
  "era": {
    "slug": "brutalism",
    "code": "br",
    "name": "Web brutalism",
    "years": [
      2014,
      2019
    ],
    "description": "The reaction to polish, 2014 to 2019: raw default-looking pages, system and monospace type, hard black rules, harsh or absent colour, and layouts that show their structure instead of hiding it."
  },
  "archetype": "portal",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "The notice board of web brutalism, as run between 2014 and 2019 by towns, campuses and communities that wanted every small advertisement on one page and nothing else: a search line, a black bar of sections, and the whole directory as ruled boxes of plain links with a count beside each. This one is printed like a flyer, in black Arial and Arial Black on pure yellow with blue links, one blue band for the headline and red for what is new. Nothing is rounded, graded, blurred or animated and the front page has no pictures; structure is 2px black outlines, 8px black slabs and the order of the lists.",
  "url": "https://chrono.skin/s/v1-br-7bab",
  "preview_url": "https://chrono.skin/s/v1-br-7bab/specimen.html",
  "files": {
    "STYLE.md": "# Web brutalism, board\n\n## Summary\n\nThe notice board of web brutalism, as run between 2014 and 2019 by towns, campuses and communities that wanted every small advertisement on one page and nothing else: a search line, a black bar of sections, and the whole directory as ruled boxes of plain links with a count beside each. This one is printed like a flyer, in black Arial and Arial Black on pure yellow with blue links, one blue band for the headline and red for what is new. Nothing is rounded, graded, blurred or animated and the front page has no pictures; structure is 2px black outlines, 8px black slabs and the order of the lists.\n\n## Layout\n\n- The page fills the window: `.ds-page` keeps the browser's `--space-3` (8px) margin and `.ds-page__frame` is `--size-page` (100%) wide with no maximum and pads its sides by the same 8px, so a palette whose canvas differs from its page shows a sheet with a margin inside it. Nothing is centred.\n- Order from the top: `.ds-nav`, the view, `.ds-footer`. The header and footer are written once; the views change between them.\n- `.ds-nav` is two lines closed by a slab of `--border-width-strong`. `.ds-nav__head` is one line on the canvas: the `.ds-brand` at the left, the search form (`.ds-nav__search`, an input no wider than `--size-search` 380px and a secondary button) beside it, and `.ds-nav__tools` (the primary \"post\" button and the account `.ds-menu`) at the right. `.ds-nav__bar` under it is a line of `--fill-bar` with the sections as words, one `.ds-menu` that drops the remaining sections, and the help link pushed to the right with `.ds-nav__item--right`. There is no navigation at the side.\n- The home page is one stack inside `.ds-page__body`: `.ds-hero` as an inverted band across the page, `.ds-stats` as a strip of four ruled cells touching it, then `.ds-page__section` blocks `--space-5` (20px) apart, each under a `.ds-page__label` (a heading on a rule, with an optional small `.ds-page__more` link at its right end). The first block is `.ds-board`: every section of the site as a `.ds-panel` of links, flowing down five text columns (`column-count`), `--space-4` (12px) apart. Then the `.ds-grid` of four pinned notices and the `.ds-list` of the newest. The home page has no sidebar.\n- Inner pages (one section's list, one notice, the form, the help page) keep the header and footer. `.ds-page__body` opens with the `.ds-breadcrumb` in small type and `.ds-page-header` (30px title, one grey line, one button at the right, a slab below); the hero and the figures are not used. Below it `.ds-page__columns` is two columns `--space-5` apart: on a list page the `.ds-sidebar` of filters at `--size-filter` (230px) on the left and `.ds-page__main` beside it, carrying `.ds-tabs`, the `.ds-table` in `.ds-tabs__body` and `.ds-pagination`; on every other inner page (`.ds-page__columns--aside`) `.ds-page__main` first and `.ds-page__aside` at `--size-aside` (320px) on the right, carrying the short boxes that belong to the page (who pinned it, the messages, a dialog, the rules), enough of them that the columns end near each other.\n- Views. The specimen is one small site with five views, one showing at a time. `board` is the home page: headline, figures, the directory, four pinned notices, the newest four. `listings` is one section: filters, tabs over the table of notices, pagination, the empty state of a saved search. `notice` is one notice: its pictures, text and facts, with the person who pinned it, the two messages and the question before reporting it beside them. `post` is the form: how far along, the form with its error and its four buttons, a preview and the rules beside it. `help` is running text and the questions that open and close, with the marks, the link colours and the keeper beside them. A view is `<section class=\"ds-view\" id=\"...\">` holding one `.ds-page__body`; links between views are plain `href=\"#id\"`.\n- Spacing scale: `--space-1` 2px is the padding of tabs, page numbers and menu links (vertical) and the gap under a list title; `--space-2` 4px is the padding of buttons, inputs, table cells and bar links (vertical), of badges, and the gap between tabs; `--space-3` 8px is the page margin, the padding of panels, form cells and list rows and the gap between buttons; `--space-4` 12px is the gap between the directory's columns, the padding of grid cells, buttons and bar links (horizontal) and the gap between paragraphs; `--space-5` 20px is the gap between blocks and between columns and the padding of the hero; `--space-6` 32px is the space at the foot of a page.\n- Fixed sizes: `--size-label` 150px is the label cell of a form, `--size-field` 360px a text input, `--size-num` 90px a numeric table column, `--size-dialog` 420px a dialog, `--size-slide` 200px the height of a carousel slide, `--size-menu` 190px a dropped menu or a tooltip.\n- Below 1100px the directory is three columns; below 800px it is two, the search line goes under the name, every pair of columns stacks in source order, figures go two to a line, the grid is two columns, form labels sit above their fields, the headline drops to `--text-h1` and table cells marked `.ds-table__extra` are left out. Nothing scrolls sideways except a carousel inside its own box.\n- On a phone (800px and below) `.ds-nav__search` goes to its own full-width row under the brand and `.ds-nav__item--right` loses its push to the right; the `more sections` drop-down (`.ds-menu--right`) opens from the left edge of its button. At 560px and below `.ds-nav__bar` becomes a grid of six columns: the first three items span two columns each, the drop-down and the right-hand link span three each, and the drop-down's `.ds-menu__list` is never wider than the screen minus `--space-4` at each side. There is no menu button, and the current section stays an inverted block.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- One small sans: `--font-body`, `--font-heading` and `--font-ui` are Helvetica, Verdana, Arial, \"Liberation Sans\", sans-serif; `--font-mono` is Monaco, \"Liberation Mono\", monospace.\n- `--text-base` 13px with `--line-body` 1.3; `--text-small` 11px; `--text-ui` 12px, so navigation and controls are a size under the text; `--text-large` 14px. Headings are bold: `--text-display` 27px, `--text-h1` 20px, `--text-h2` 16px, `--text-h3` 13px.\n- No link is underlined at rest (`--link-decoration` and `--link-decoration-quiet` are none): links are known by their blue. They underline on hover. Nothing is uppercased or tracked.\n\n- Black on white with the browser's own blue: `--color-page`, `--color-canvas` and `--color-surface` are #ffffff; `--color-text`, `--color-heading`, `--color-heading-alt` and every border are #000000; `--color-text-muted` is #444444.\n- `--color-link`, `--color-link-quiet`, `--color-link-visited` and `--color-focus` are #0000ee, the default link colour: on a text-only front page nearly everything is a blue underlined link and visited links are not told apart. `--color-link-hover` and `--color-link-active` are #cc0000.\n- `--color-bar` #000000 with white `--color-bar-text` is the black line of navigation, table heads and dialog titles. `--color-bar-alt` (footer) is white with black text. `--color-inverse` #0000ee with white text is the current navigation item.\n- The only tints are the faint blues that a blue link leaves around itself: `--color-surface-alt` #f8f8ff, `--color-surface-strong`, `--color-notice` and `--color-disabled` #f0f0ff, `--color-fill-4` and `--color-overlay` #d8d8ff, `--color-border-muted` #b8b8f8. `--color-fill-1` to `--color-fill-3` repeat white and the two faintest.\n- `--color-accent` #cc0000 with white text is the count badge, the one red on the page; `--color-accent-alt` is the same red, as a mark.\n- Buttons are white with a black edge: the primary has black text, the secondary blue text. Inputs are white with a black edge.\n- Status: `--color-danger` #cc0000 is measured; `--color-success` #006400 and `--color-warning` #8a4b00 are derived, dark enough to read on white.\n\n- One weight for everything: `--border-width` and `--border-width-strong` are both 2px solid, so cells, boxes, controls and the rules under the header are the same black line.\n- Boxes are framed twice: `--shadow-panel` draws a second 2px line in `--color-border` 3px outside a panel, and `--shadow-dialog` a 4px band of `--color-border-strong` around a dialog, both without blur. Controls are flat; a hovered button gets a 2px line along its foot and a pressed one a 2px inner frame.\n- The page is inverted: `--fill-page` is `--color-inverse`, so whatever of the window lies outside the sheet is a solid block of the inverse colour. Every other fill is its plain palette colour.\n- All radii are 0; `--focus-ring` is a 2px solid outline; `--transition` none.\n\n## Components\n\n- `.ds-page` on `<body>`: page colour, 8px margin, base type. Everything goes in `.ds-page__frame`; a view's content in `.ds-page__body`. `.ds-page__section` is a block (`--last` drops its gap), `.ds-page__label` its caption with an optional `.ds-page__more` link, `.ds-page__columns` the two columns of an inner page (`--aside` puts the narrow one on the right), `.ds-page__main` and `.ds-page__aside` their halves.\n- `.ds-nav`: the header. `.ds-nav__head` holds the brand, `.ds-nav__search` and `.ds-nav__tools`; `.ds-nav__bar` is a list of `.ds-nav__item` each holding a `.ds-nav__link` or a `.ds-menu`. The current section is an inverted block: the stylesheet marks the link whose `href` names the showing view (one selector per view, the home link when none is named); on a page of its own give the link `is-current`.\n- `.ds-brand`: the mark and name, a link to the home page. `.ds-brand__mark` is a square tile dressed like the primary button (`--fill-button`, `--color-button-text`, the control edge, radius and shadow) with the mark drawn in square caps; `.ds-brand__name` is 30px heading type. The name `chronoskin` and the mark are placeholders for the installing project's own.\n- `.ds-menu`: a `<details>` whose `<summary class=\"ds-menu__button\">` keeps the browser's own triangle and drops `.ds-menu__list`, a ruled box of `.ds-menu__link` items on `--color-surface`. In the bar it takes the bar's text colour; `.ds-menu--plain` is one on the canvas, `.ds-menu--right` opens toward the left.\n- `.ds-breadcrumb`: a small line of `.ds-breadcrumb__link` items with `.ds-breadcrumb__sep` (`/`) between them, ending in a bold `.ds-breadcrumb__current`.\n- `.ds-hero`: the home page's inverted band: `.ds-hero__main` with `.ds-hero__title` (56px) and `.ds-hero__lead`, and `.ds-hero__actions` with one large primary button at the right. No links and no secondary button on the band.\n- `.ds-page-header`: the head of an inner page: `.ds-page-header__main` with `.ds-page-header__title` and one `.ds-page-header__text` line; `.ds-page-header__action` holds one button. A slab closes it.\n- `.ds-stat`: one figure, a 30px `.ds-stat__value` over a small `.ds-stat__label`, in a ruled cell on the alternate surface. Three to five sit in a `.ds-stats` strip.\n- `.ds-board`: the directory: panels flowing down five columns. Inside a panel, `.ds-board__list` is one link per line (`.ds-board__item`) with a `.ds-board__count` at the right; the same list serves any short list of links with a mark.\n- `.ds-panel`: a 2px ruled box with a `.ds-panel__title` strip on the strong surface and a `.ds-panel__body`; `.ds-panel__text` is a paragraph in it.\n- `.ds-prose`: running text: h1, h2, h3 in heading type, paragraphs and square-bulleted lists no wider than 86ch, `code` in small monospace on the strong surface.\n- `.ds-link`: text link with `is-visited`, `is-hover`, `is-active`, `is-focus`; `.ds-link--quiet` for links inside a message. `.ds-links` lays links out in a wrapping row.\n- `.ds-button`: a flat block with a 2px edge, a `<button>` or an `<a>`. `.ds-button--large` for the hero; `.ds-button--secondary` on the secondary fill; `.ds-button--danger` is `--color-danger` on `--color-danger-surface` with a danger edge; `disabled` or `is-disabled` greys it. `is-hover` and `is-active` show the states. Group with `.ds-buttons`.\n- `.ds-form`: a ruled table: `.ds-form__rows` holds `.ds-form__row` lines, each a `.ds-form__label` cell on the strong surface and a `.ds-form__field` cell. Controls take `.ds-form__input` (`--wide`, `--auto` for selects, `--short` for a number); `is-invalid` plus a bold `.ds-form__error` marks an error; `.ds-form__hint` is help text; `.ds-form__check` with a native `.ds-form__checkbox`; `.ds-form__actions` under the table. An error for the whole form is a `.ds-notice ds-notice--error ds-form__notice` above the rows.\n- `.ds-table`: every cell ruled 2px, head on the bar fill, `.ds-table__row--alt` for alternate rows, `.ds-table__num` for the right-aligned bold price column, `.ds-table__id` for a notice number, `.ds-table__group` for a group row, `.ds-table__extra` on cells a narrow window may drop.\n- `.ds-list`: ruled rows. Each `.ds-list__item` is an optional `.ds-avatar`, `.ds-list__main` (a bold `.ds-list__title` link, `.ds-list__excerpt`, `.ds-list__meta`) and a `.ds-list__price` at the right.\n- `.ds-grid`: four `.ds-grid__cell` blocks sharing their rules (`--2`, `--3`, `--4` select the other fills), each with a `.ds-grid__kicker`, a `.ds-grid__title` and `.ds-grid__text`.\n- `.ds-tabs`: a row of boxed `.ds-tabs__tab` links; the current one is a `<span class=\"ds-tabs__tab is-current\">` on the inverse fill. Content goes in `.ds-tabs__body`.\n- `.ds-badge`: a small bold word on the accent fill. `.ds-badge--tag` is a word in a box; `.ds-badge--success`, `.ds-badge--warning` and `.ds-badge--danger` are a word and its box in the status colour.\n- `.ds-sidebar`: the filter column of a list page. Each `.ds-sidebar__block` has a `.ds-sidebar__title` on a rule and a `.ds-sidebar__list` of `.ds-sidebar__item` lines: a `.ds-sidebar__link` (the chosen one `is-current`, bold behind a `>`) and a `.ds-sidebar__count`. `.ds-sidebar__text` is a line holding a switch; `.ds-sidebar__row` an input with a button.\n- `.ds-notice`: a 2px box with an 8px slab down its left side, starting with a bold `.ds-notice__title`. `.ds-notice--error` uses the danger colours. Stack several in `.ds-notices`.\n- `.ds-pagination`: boxed `.ds-pagination__link` items: newer, numbers, older. The current page is a `<span>` with `is-current` on the bar fill; `is-disabled` is muted.\n- `.ds-dialog`: a ruled box `--size-dialog` wide with a `.ds-dialog__title` on the bar fill, `.ds-dialog__body`, `.ds-dialog__text` and `.ds-dialog__actions`, standing on its hard shadow in the page flow on `.ds-dialog__backdrop`, a flat block of `--color-overlay`.\n- `.ds-empty`: a ruled box on the alternate surface with a `.ds-empty__title`, a `.ds-empty__text` sentence and one secondary button, centred.\n- `.ds-accordion`: `<details class=\"ds-accordion__item\">` elements between rules; `<summary class=\"ds-accordion__title\">` keeps the browser's triangle, `.ds-accordion__body` is the answer.\n- `.ds-tooltip`: a boxed `?` (give it `tabindex=\"0\"`) holding `.ds-tooltip__text`, an inverted hard-edged box shown under it on hover or focus, or with `is-open`.\n- `.ds-carousel`: a ruled box with a `.ds-carousel__track` of `.ds-carousel__slide` blocks (`--2`, `--3` for other fills), one showing and the next reached by dragging (scroll-snap), each with a monospace `.ds-carousel__caption`; `.ds-carousel__bar` under it has the count and `.ds-carousel__dots` of square `.ds-carousel__dot` marks, the current one `is-current`.\n- `.ds-switch`: a `<label>` holding a hidden `.ds-switch__input` checkbox, a `.ds-switch__track` (a two-cell box: empty when off, the right cell filled when on) and the text.\n- `.ds-progress`: a `.ds-progress__label` line over a `.ds-progress__track` whose `.ds-progress__bar` is filled with the accent to a quarter, or `--50`, `--75`, `--100`.\n- `.ds-avatar`: a ruled square with two monospace letters on the strong surface. `.ds-person` sets one beside a `.ds-person__name` and a `.ds-person__meta` line.\n- `.ds-footer`: a small strip on the secondary bar fill under a slab: `.ds-footer__row` with a sentence left and `.ds-footer__links` of `.ds-footer__link` items right.\n\n## Never\n\n- `block-gap <= 32px`: blocks sit 20px apart.\n- `content-width >= 90%`: the page fills the window.\n- `letter-spacing <= 0px`: no text is tracked.\n- `font-size <= 27px`: the hero headline is 27px.\n- `font-size >= 11px`: small text is 11px.\n- `font-families <= 2`: one sans and a monospace.\n- `line-height <= 1.4`: text is set at 1.3.\n- `uppercase-text <= 0%`: nothing is uppercased.\n- `underlined-links <= 10%`: links are blue, not underlined; only a hovered link is.\n- `border-radius <= 0px`: every box and control is square.\n- `box-shadow-blur <= 0px`: shadows only draw second frames; nothing is soft.\n- `text-shadow = none`: text is flat.\n- `gradient-fills <= 0%`: every fill is one flat colour.\n- `transition = none`: states change instantly.\n- `animation = none`: nothing moves.\n- `border-width <= 2px`: every rule is 2px.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen: a new block of a page is a `.ds-page__section` under a `.ds-page__label`; a set of links with counts is a `.ds-panel` holding a `.ds-board__list`; anything with a number and a price is a row of `.ds-table` or `.ds-list`; a set of choices copies `.ds-tabs` (boxes, the chosen one inverted); a status copies the boxed `.ds-badge--success`; a message copies `.ds-notice`. Use only the tokens in `tokens.css` and the `--size-*` and `--space-*` tokens in `components.css`, and pair each text token with its own fill as listed above. When in doubt do less: a list of links before a card, a rule before a box, a native control before a custom one, and no radius, blur, gradient, picture, icon or transition at all.\n",
    "components.css": "/* Layout tokens (structure part). Read from the references: the browser's 8px\n   body margin, 2px and 4px inside controls and cells, 12px between the boxes\n   of a directory, 20px between blocks. The page fills the window. */\n:root {\n  --size-page: 100%;\n  --size-filter: 230px;\n  --size-aside: 320px;\n  --size-search: 380px;\n  --size-label: 150px;\n  --size-field: 360px;\n  --size-num: 90px;\n  --size-dialog: 420px;\n  --size-slide: 200px;\n  --size-menu: 190px;\n  --space-1: 2px;\n  --space-2: 4px;\n  --space-3: 8px;\n  --space-4: 12px;\n  --space-5: 20px;\n  --space-6: 32px;\n}\n\n/* ---------- shell ---------- */\n.ds-page {\n  margin: 0;\n  padding: var(--space-3);\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page__frame {\n  box-sizing: border-box;\n  width: var(--size-page);\n  margin: 0;\n  padding: 0 var(--space-3);\n  background: var(--color-canvas);\n  border-radius: var(--radius-page);\n}\n/* ---------- views: one screen of the example site shows at a time ---------- */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n.ds-page__body {\n  padding: var(--space-4) 0 var(--space-6);\n}\n/* A block of a page under its caption. */\n.ds-page__section {\n  margin: 0 0 var(--space-5);\n}\n.ds-page__section--last {\n  margin-bottom: 0;\n}\n/* The caption: a heavy line of heading type that stands on a strong rule. */\n.ds-page__label {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-2) var(--space-4);\n  margin: 0 0 var(--space-4);\n  padding: 0 0 var(--space-2);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page__more {\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n  text-transform: none;\n}\n/* Inner pages: a narrow column and a wide one, either way round. */\n.ds-page__columns {\n  display: grid;\n  grid-template-columns: var(--size-filter) minmax(0, 1fr);\n  gap: var(--space-5);\n  align-items: start;\n}\n.ds-page__columns--aside {\n  grid-template-columns: minmax(0, 1fr) var(--size-aside);\n}\n.ds-page__main {\n  min-width: 0;\n}\n.ds-page__aside {\n  min-width: 0;\n}\n\n/* ---------- links ---------- */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited,\n.ds-link--quiet.is-visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n}\n\n/* ---------- brand: the mark on a button-dressed square, then the name ---------- */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  flex: none;\n  display: block;\n  box-sizing: border-box;\n  width: calc(var(--text-h1) * 1.3);\n  height: calc(var(--text-h1) * 1.3);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-brand:hover .ds-brand__name,\n.ds-brand.is-hover .ds-brand__name {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-brand:focus-visible,\n.ds-brand.is-focus {\n  outline: var(--focus-ring);\n}\n\n/* ---------- nav: name, search and tools on one line, then the bar of sections ---------- */\n.ds-nav {\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__head {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3) var(--space-5);\n  padding: var(--space-2) 0 var(--space-4);\n}\n.ds-nav__search {\n  flex: 1;\n  display: flex;\n  gap: var(--space-2);\n  min-width: 0;\n  margin: 0;\n}\n.ds-nav__search .ds-form__input {\n  flex: 1;\n  width: auto;\n  min-width: 0;\n  max-width: var(--size-search);\n}\n.ds-nav__tools {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3) var(--space-4);\n}\n.ds-nav__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__item {\n  display: flex;\n}\n.ds-nav__item--right {\n  margin-left: auto;\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-bar-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n}\n/* The section you are in: an inverted block in the bar. One selector per view,\n   and the home link when the address names none; a notice belongs to its list. */\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#board\"],\n.ds-page:has(#board:target) .ds-nav__link[href=\"#board\"],\n.ds-page:has(#listings:target) .ds-nav__link[href=\"#listings\"],\n.ds-page:has(#notice:target) .ds-nav__link[href=\"#listings\"],\n.ds-page:has(#post:target) .ds-nav__link[href=\"#post\"],\n.ds-page:has(#help:target) .ds-nav__link[href=\"#help\"] {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  text-decoration: none;\n}\n\n/* ---------- menu: a details element that drops a ruled list ---------- */\n.ds-menu {\n  position: relative;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n}\n.ds-menu__button {\n  padding: var(--space-2) var(--space-4);\n  color: inherit;\n  cursor: pointer;\n}\n.ds-menu__button:focus-visible,\n.ds-menu__button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-menu--plain .ds-menu__button {\n  padding: var(--space-2) 0;\n  color: var(--color-link-quiet);\n}\n.ds-menu__list {\n  position: absolute;\n  z-index: 2;\n  top: 100%;\n  left: 0;\n  box-sizing: border-box;\n  width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  background: var(--color-surface);\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  font-family: var(--font-body);\n  font-weight: var(--weight-body);\n  text-transform: none;\n}\n.ds-menu--right .ds-menu__list {\n  left: auto;\n  right: 0;\n}\n.ds-menu__link {\n  display: block;\n  padding: var(--space-1) var(--space-3);\n  color: var(--color-link);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* ---------- breadcrumb: a path cut by slashes ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-3);\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-breadcrumb__sep {\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__current {\n  font-weight: var(--weight-bold);\n  color: var(--color-text);\n}\n\n/* ---------- hero: an inverted band with the headline and one button ---------- */\n.ds-hero {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4) var(--space-6);\n  margin: 0;\n  padding: var(--space-5) var(--space-4);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-page);\n}\n.ds-hero__main {\n  flex: 1;\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-inverse-text);\n}\n.ds-hero__lead {\n  max-width: 80ch;\n  margin: 0;\n  font-size: var(--text-large);\n}\n.ds-hero__actions {\n  flex: none;\n}\n\n/* ---------- page header ---------- */\n.ds-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-5);\n  padding: 0 0 var(--space-3);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-page-header__main {\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-page-header__text {\n  margin: 0;\n  color: var(--color-text-muted);\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- stats: a strip of ruled cells, figure over label ---------- */\n.ds-stats {\n  display: flex;\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: var(--border-width) 0 0 var(--border-width);\n}\n.ds-stat {\n  flex: 1;\n  min-width: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: 0 var(--border-width) var(--border-width) 0;\n}\n.ds-stat__value {\n  display: block;\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  color: var(--color-heading);\n}\n.ds-stat__label {\n  display: block;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- board: the directory, boxes flowing down five columns ---------- */\n.ds-board {\n  column-count: 5;\n  column-gap: var(--space-4);\n  padding-top: var(--space-3);\n}\n.ds-board .ds-panel {\n  break-inside: avoid;\n  margin: 0 0 var(--space-5);\n}\n.ds-board__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-board__item {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-board__count {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- panel: a ruled box under a filled title ---------- */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__body {\n  padding: var(--space-3);\n}\n.ds-panel__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__text:last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- post and prose ---------- */\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n}\n.ds-prose p {\n  max-width: 86ch;\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  max-width: 86ch;\n  margin: 0 0 var(--space-4);\n  padding: 0 0 0 var(--space-5);\n}\n.ds-prose ul {\n  list-style: square;\n}\n.ds-prose code {\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  background: var(--color-surface-strong);\n  padding: 0 var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- buttons: a flat block of the button colour with a hard edge ---------- */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-button {\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  transition: var(--transition);\n  cursor: pointer;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\n}\n.ds-button:active,\n.ds-button.is-active {\n  border-color: var(--color-border-strong);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-button--large {\n  padding: var(--space-3) var(--space-5);\n  font-size: var(--text-large);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  border-color: var(--color-border-muted);\n  background: var(--color-disabled);\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  cursor: default;\n}\n\n/* ---------- form: a ruled table of label cells and field cells ---------- */\n.ds-form {\n  margin: 0;\n}\n.ds-form__rows {\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: var(--border-width) var(--border-width) 0;\n}\n.ds-form__row {\n  display: flex;\n  align-items: stretch;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-form__label {\n  flex: none;\n  box-sizing: border-box;\n  width: var(--size-label);\n  padding: var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-form__field {\n  flex: 1;\n  min-width: 0;\n  padding: var(--space-3);\n}\n.ds-form__input {\n  box-sizing: border-box;\n  width: var(--size-field);\n  max-width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-input);\n  box-shadow: var(--shadow-control);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n  transition: var(--transition);\n}\n.ds-form__input--wide {\n  width: 100%;\n}\n.ds-form__input--auto {\n  width: auto;\n}\n.ds-form__input--short {\n  width: var(--size-num);\n}\n.ds-form__input:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input:disabled,\n.ds-form__input.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__input.is-invalid {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-2) 0 0;\n  font-weight: var(--weight-bold);\n  color: var(--color-danger);\n}\n.ds-notice.ds-form__notice {\n  margin: 0 0 var(--space-4);\n}\n.ds-form__hint {\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-form__checkbox {\n  margin: 0;\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: var(--space-4) 0 0;\n}\n\n/* ---------- table: every cell ruled, the head on the bar ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  border-radius: var(--radius-panel);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  text-align: left;\n  vertical-align: top;\n}\n.ds-table th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-table td {\n  background: var(--color-surface);\n}\n.ds-table tr.is-alt td,\n.ds-table__row--alt td {\n  background: var(--color-surface-alt);\n}\n.ds-table th.ds-table__num,\n.ds-table td.ds-table__num {\n  width: var(--size-num);\n  text-align: right;\n  white-space: nowrap;\n}\n.ds-table td.ds-table__num {\n  font-weight: var(--weight-bold);\n}\n.ds-table__id {\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n  white-space: nowrap;\n}\n.ds-table__group td {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- list: ruled rows of picture, notice and price ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__item {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-4);\n  padding: var(--space-3) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__main {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  color: var(--color-link);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:visited,\n.ds-list__title.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-list__excerpt {\n  margin: var(--space-1) 0 0;\n}\n.ds-list__meta {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-list__price {\n  flex: none;\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\n/* ---------- grid: four blocks of the fill colours that share their rules ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: var(--border-width) 0 0 var(--border-width);\n}\n.ds-grid__cell {\n  min-width: 0;\n  padding: var(--space-4);\n  background: var(--color-fill-1);\n  color: var(--color-text);\n  border-style: var(--border-style);\n  border-color: var(--color-border);\n  border-width: 0 var(--border-width) var(--border-width) 0;\n  border-radius: var(--radius-page);\n}\n.ds-grid__cell--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__kicker {\n  margin: 0 0 var(--space-3);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-grid__title {\n  margin: 0 0 var(--space-2);\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-grid__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-grid__text:last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- tabs: boxes in a row, the current one inverted ---------- */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-1) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  color: var(--color-link-quiet);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  text-decoration: none;\n}\n.ds-tabs__body {\n  padding: var(--space-3) 0 0;\n}\n\n/* ---------- badge: a block of the accent, or a boxed status word ---------- */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-2);\n  border-radius: var(--radius-pill);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n}\n.ds-badge--tag,\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  background: transparent;\n  border: var(--border-width) var(--border-style) currentColor;\n  color: var(--color-text);\n}\n.ds-badge--success {\n  color: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-danger);\n}\n\n/* ---------- sidebar: the filter column of a list ---------- */\n.ds-sidebar {\n  min-width: 0;\n}\n.ds-sidebar__block {\n  margin: 0 0 var(--space-5);\n}\n.ds-sidebar__block:last-child {\n  margin-bottom: 0;\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-2);\n  padding: 0 0 var(--space-1);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading-alt);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-1) 0;\n}\n.ds-sidebar__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-sidebar__link.is-current {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n}\n.ds-sidebar__link.is-current::before {\n  content: \"> \";\n}\n.ds-sidebar__count {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-sidebar__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-sidebar__row {\n  display: flex;\n  gap: var(--space-2);\n  margin: var(--space-3) 0 0;\n}\n.ds-sidebar__row .ds-form__input {\n  flex: 1;\n  width: auto;\n  min-width: 0;\n}\n\n/* ---------- notice: a box with a slab down its left side ---------- */\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  border-style: var(--border-style);\n  border-color: var(--color-border-strong);\n  border-width: var(--border-width) var(--border-width) var(--border-width) var(--border-width-strong);\n  border-radius: var(--radius-panel);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-notice--error {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n\n/* ---------- pagination: numbered boxes ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: var(--space-4) 0 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__link {\n  display: block;\n  padding: var(--space-1) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-pagination__link:focus-visible,\n.ds-pagination__link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-pagination__link.is-disabled {\n  border-color: var(--color-border-muted);\n  color: var(--color-text-muted);\n  text-decoration: none;\n}\n\n/* ---------- dialog: a heavy box in the page flow, title on the bar ---------- */\n.ds-dialog__backdrop {\n  box-sizing: border-box;\n  padding: var(--space-5);\n  background: var(--color-overlay);\n}\n.ds-dialog {\n  box-sizing: border-box;\n  width: var(--size-dialog);\n  max-width: 100%;\n  margin: 0 auto;\n  background: var(--color-surface);\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}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-body);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-dialog__body {\n  padding: var(--space-4) var(--space-3);\n}\n.ds-dialog__text {\n  margin: 0 0 var(--space-4);\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n}\n\n/* ---------- empty: a ruled box with a sentence and a button ---------- */\n.ds-empty {\n  padding: var(--space-5) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--color-surface-alt);\n  text-align: center;\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-2);\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-empty__text {\n  margin: 0 0 var(--space-4);\n}\n\n/* ---------- accordion: details elements stacked between rules ---------- */\n.ds-accordion {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__title {\n  padding: var(--space-3) 0;\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n  cursor: pointer;\n}\n.ds-accordion__title:focus-visible,\n.ds-accordion__title.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: 86ch;\n  margin: 0;\n  padding: 0 0 var(--space-4) var(--space-5);\n}\n\n/* ---------- tooltip: a hard inverted box beside its trigger ---------- */\n.ds-tooltip {\n  position: relative;\n  display: inline-block;\n  padding: 0 var(--space-2);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  color: var(--color-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__text {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  top: 100%;\n  left: 0;\n  box-sizing: border-box;\n  width: var(--size-menu);\n  margin: var(--space-2) 0 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  font-family: var(--font-body);\n  text-align: left;\n}\n.ds-tooltip:hover .ds-tooltip__text,\n.ds-tooltip:focus .ds-tooltip__text,\n.ds-tooltip.is-open .ds-tooltip__text {\n  display: block;\n}\n\n/* ---------- carousel: one ruled slide showing, a counter and two arrows under it ---------- */\n.ds-carousel {\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-carousel__track {\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n}\n.ds-carousel__slide {\n  flex: none;\n  box-sizing: border-box;\n  width: 100%;\n  height: var(--size-slide);\n  display: flex;\n  align-items: flex-end;\n  padding: var(--space-3);\n  background: var(--color-fill-3);\n  color: var(--color-text);\n  scroll-snap-align: start;\n}\n.ds-carousel__slide--2 {\n  background: var(--color-fill-4);\n}\n.ds-carousel__slide--3 {\n  background: var(--color-fill-2);\n}\n.ds-carousel__caption {\n  margin: 0;\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-carousel__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-3);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n}\n.ds-carousel__dots {\n  display: flex;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-carousel__dot {\n  display: block;\n  box-sizing: border-box;\n  width: var(--space-4);\n  height: var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-carousel__dot.is-current {\n  background: var(--color-text);\n}\n\n/* ---------- switch: a checkbox drawn as a two-cell box ---------- */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  margin: 0;\n}\n.ds-switch__track {\n  flex: none;\n  box-sizing: content-box;\n  display: block;\n  width: calc(var(--text-base) * 2);\n  height: var(--text-base);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--color-input);\n}\n.ds-switch__track::after {\n  content: \"\";\n  display: block;\n  box-sizing: border-box;\n  width: 50%;\n  height: 100%;\n  border-right: var(--border-width) var(--border-style) var(--color-input-border);\n}\n.ds-switch__input:checked + .ds-switch__track::after {\n  margin-left: 50%;\n  border-right: 0;\n  background: var(--color-input-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track {\n  outline: var(--focus-ring);\n}\n\n/* ---------- progress: a blunt bar and its caption ---------- */\n.ds-progress {\n  margin: 0 0 var(--space-5);\n}\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-progress__track {\n  height: var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--color-input);\n}\n.ds-progress__bar {\n  width: 25%;\n  height: 100%;\n  background: var(--fill-accent);\n}\n.ds-progress__bar--50 {\n  width: 50%;\n}\n\n/* ---------- avatar: a ruled square with two letters ---------- */\n.ds-avatar {\n  flex: none;\n  display: inline-block;\n  box-sizing: content-box;\n  width: calc(var(--text-base) * 2.5);\n  height: calc(var(--text-base) * 2.5);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: calc(var(--text-base) * 2.5);\n  text-align: center;\n  text-transform: uppercase;\n}\n.ds-person {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-3);\n}\n.ds-person__name {\n  display: block;\n  font-weight: var(--weight-bold);\n}\n.ds-person__meta {\n  display: block;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  padding: var(--space-3) var(--space-4);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-size: var(--text-small);\n}\n.ds-footer__row {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* ---------- narrower windows ---------- */\n@media (max-width: 1100px) {\n  .ds-board {\n    column-count: 3;\n  }\n}\n@media (max-width: 800px) {\n  .ds-board {\n    column-count: 2;\n    column-gap: var(--space-3);\n  }\n  .ds-page__columns,\n  .ds-page__columns--aside {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-nav__search {\n    order: 3;\n    flex: none;\n    width: 100%;\n  }\n  .ds-nav__search .ds-form__input {\n    max-width: none;\n  }\n  .ds-nav__item--right {\n    margin-left: 0;\n  }\n  .ds-nav__link,\n  .ds-menu__button {\n    padding: var(--space-2) var(--space-3);\n  }\n  .ds-menu--right .ds-menu__list {\n    left: 0;\n    right: auto;\n  }\n  .ds-hero {\n    flex-direction: column;\n    align-items: flex-start;\n    padding: var(--space-4) var(--space-3);\n  }\n  .ds-hero__main {\n    flex: none;\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n    letter-spacing: 0;\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  .ds-stats {\n    flex-wrap: wrap;\n  }\n  .ds-stat {\n    flex: none;\n    box-sizing: border-box;\n    width: 50%;\n  }\n  .ds-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n  .ds-form__row {\n    flex-direction: column;\n  }\n  .ds-form__label {\n    width: auto;\n    padding: var(--space-2) var(--space-3);\n    border-right: 0;\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n    gap: var(--space-3);\n  }\n  .ds-list__price {\n    font-size: var(--text-large);\n  }\n  .ds-dialog__backdrop {\n    padding: var(--space-4);\n  }\n  .ds-table__extra {\n    display: none;\n  }\n  .ds-table th.ds-table__num,\n  .ds-table td.ds-table__num {\n    width: auto;\n  }\n}\n\n/* ---------- phones: the bar is two even rows, three cells over two ---------- */\n@media (max-width: 560px) {\n  .ds-nav__bar {\n    display: grid;\n    grid-template-columns: repeat(6, minmax(0, 1fr));\n  }\n  .ds-nav__item {\n    grid-column: span 2;\n  }\n  .ds-nav__item:nth-child(n + 4) {\n    grid-column: span 3;\n  }\n  .ds-nav__link {\n    flex: 1;\n    overflow-wrap: anywhere;\n  }\n  .ds-menu__list {\n    max-width: calc(100vw - 2 * var(--space-4));\n  }\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: the town notice board. Web brutalism, 2014 to 2019: specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n<div class=\"ds-page__frame\">\n\n  <header class=\"ds-nav\" data-component=\"nav\">\n    <div class=\"ds-nav__head\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#board\"><span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.8\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" aria-hidden=\"true\"><rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\"/><line x1=\"3.5\" y1=\"20.5\" x2=\"20.5\" y2=\"3.5\"/></svg></span><span class=\"ds-brand__name\">chronoskin</span></a>\n      <form class=\"ds-nav__search\" action=\"#listings\">\n        <input class=\"ds-form__input\" type=\"search\" aria-label=\"Search every notice\" placeholder=\"search 4408 notices\">\n        <button class=\"ds-button ds-button--secondary\" type=\"submit\">Search</button>\n      </form>\n      <div class=\"ds-nav__tools\">\n        <a class=\"ds-button\" href=\"#post\">Post a notice</a>\n        <details class=\"ds-menu ds-menu--plain ds-menu--right\">\n          <summary class=\"ds-menu__button\">my notices (3)</summary>\n          <ul class=\"ds-menu__list\">\n            <li><a class=\"ds-menu__link\" href=\"#notice\">Touring bicycle</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">Wanted: a ladder</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">Free: seedlings</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#help\">Sign out</a></li>\n          </ul>\n        </details>\n      </div>\n    </div>\n    <ul class=\"ds-nav__bar\">\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#board\">the board</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#listings\">for sale</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#post\">post</a></li>\n      <li class=\"ds-nav__item\">\n        <details class=\"ds-menu\" data-component=\"menu\">\n          <summary class=\"ds-menu__button\">more sections</summary>\n          <ul class=\"ds-menu__list\">\n            <li><a class=\"ds-menu__link\" href=\"#listings\">housing</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">work</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">services</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">lost and found</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">free</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#listings\">events</a></li>\n          </ul>\n        </details>\n      </li>\n      <li class=\"ds-nav__item ds-nav__item--right\"><a class=\"ds-nav__link\" href=\"#help\">help and rules</a></li>\n    </ul>\n  </header>\n\n  <!-- View 1, the home page: what the board is, its figures, every section as a box of links, four pinned notices, the newest. -->\n  <section class=\"ds-view ds-view--home\" id=\"board\">\n    <div class=\"ds-page__body\">\n      <section class=\"ds-hero\" data-component=\"hero\">\n        <div class=\"ds-hero__main\">\n          <h1 class=\"ds-hero__title\">Everything the town has to sell, lend, find or give away.</h1>\n          <p class=\"ds-hero__lead\">One page of plain notices, pinned up by the people who live here. No pictures on this page, no account needed to read, and a notice comes down by itself after thirty days.</p>\n        </div>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button ds-button--large\" href=\"#post\">Pin up a notice, free</a>\n        </div>\n      </section>\n      <ul class=\"ds-stats\" data-component=\"stats\">\n        <li class=\"ds-stat\"><span class=\"ds-stat__value\">4408</span> <span class=\"ds-stat__label\">notices up today</span></li>\n        <li class=\"ds-stat\"><span class=\"ds-stat__value\">61</span> <span class=\"ds-stat__label\">pinned since midnight</span></li>\n        <li class=\"ds-stat\"><span class=\"ds-stat__value\">30</span> <span class=\"ds-stat__label\">days before one comes down</span></li>\n        <li class=\"ds-stat\"><span class=\"ds-stat__value\">0.00</span> <span class=\"ds-stat__label\">to post, to read, to reply</span></li>\n      </ul>\n\n      <section class=\"ds-page__section\">\n        <h2 class=\"ds-page__label\">The board <a class=\"ds-link ds-page__more\" href=\"#help\">how the sections work</a></h2>\n        <div class=\"ds-board\">\n          <section class=\"ds-panel\" data-component=\"panel\">\n            <h3 class=\"ds-panel__title\">For sale</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">bicycles</a> <span class=\"ds-board__count\">214</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">books and records</a> <span class=\"ds-board__count\">188</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">boats</a> <span class=\"ds-board__count\">23</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">cameras</a> <span class=\"ds-board__count\">41</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">clothes</a> <span class=\"ds-board__count\">302</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">computers</a> <span class=\"ds-board__count\">97</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">furniture</a> <span class=\"ds-board__count\">260</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">garden</a> <span class=\"ds-board__count\">118</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">instruments</a> <span class=\"ds-board__count\">64</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">kitchen</a> <span class=\"ds-board__count\">143</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">tools</a> <span class=\"ds-board__count\">171</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">toys</a> <span class=\"ds-board__count\">89</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">everything else</a> <span class=\"ds-board__count\">407</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Housing</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">rooms to let</a> <span class=\"ds-board__count\">76</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">flats to let</a> <span class=\"ds-board__count\">112</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">houses to let</a> <span class=\"ds-board__count\">38</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">wanted to rent</a> <span class=\"ds-board__count\">54</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">garages and sheds</a> <span class=\"ds-board__count\">29</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">holiday swaps</a> <span class=\"ds-board__count\">12</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">workshops and studios</a> <span class=\"ds-board__count\">17</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Wanted</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">wanted to buy</a> <span class=\"ds-board__count\">93</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">wanted to borrow</a> <span class=\"ds-board__count\">21</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">lifts and shared journeys</a> <span class=\"ds-board__count\">34</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">help wanted</a> <span class=\"ds-board__count\">58</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Work</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">building and trades</a> <span class=\"ds-board__count\">61</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">care</a> <span class=\"ds-board__count\">44</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">cleaning</a> <span class=\"ds-board__count\">39</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">driving</a> <span class=\"ds-board__count\">27</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">kitchens and bars</a> <span class=\"ds-board__count\">83</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">offices</a> <span class=\"ds-board__count\">36</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">shops</a> <span class=\"ds-board__count\">52</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">teaching</a> <span class=\"ds-board__count\">31</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">odd jobs</a> <span class=\"ds-board__count\">120</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Lost and found</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">lost</a> <span class=\"ds-board__count\">46</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">found</a> <span class=\"ds-board__count\">51</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">cats and dogs</a> <span class=\"ds-board__count\">19</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Services</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">repairs</a> <span class=\"ds-board__count\">134</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">removals</a> <span class=\"ds-board__count\">42</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">lessons</a> <span class=\"ds-board__count\">77</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">gardening</a> <span class=\"ds-board__count\">65</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">sewing and mending</a> <span class=\"ds-board__count\">28</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">computers and phones</a> <span class=\"ds-board__count\">59</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">printing</a> <span class=\"ds-board__count\">14</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Free</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">free to collect</a> <span class=\"ds-board__count\">163</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">swaps</a> <span class=\"ds-board__count\">48</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">skips and leftovers</a> <span class=\"ds-board__count\">22</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">seedlings and cuttings</a> <span class=\"ds-board__count\">37</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Community</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">clubs and societies</a> <span class=\"ds-board__count\">88</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">volunteers</a> <span class=\"ds-board__count\">57</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">allotments</a> <span class=\"ds-board__count\">26</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">childcare circles</a> <span class=\"ds-board__count\">18</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">choirs and bands</a> <span class=\"ds-board__count\">33</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">sport</a> <span class=\"ds-board__count\">71</span></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <h3 class=\"ds-panel__title\">Events</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-board__list\">\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">this week</a> <span class=\"ds-board__count\">42</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">markets and fairs</a> <span class=\"ds-board__count\">16</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">classes</a> <span class=\"ds-board__count\">63</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">talks</a> <span class=\"ds-board__count\">24</span></li>\n                <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">jumble sales</a> <span class=\"ds-board__count\">11</span></li>\n              </ul>\n            </div>\n          </section>\n        </div>\n      </section>\n\n      <section class=\"ds-page__section\" data-component=\"grid\">\n        <h2 class=\"ds-page__label\">Pinned at the top this week <a class=\"ds-link ds-page__more\" href=\"#help\">how a notice gets pinned</a></h2>\n        <div class=\"ds-grid\">\n          <div class=\"ds-grid__cell\">\n            <p class=\"ds-grid__kicker\">for sale / boats <span class=\"ds-badge\">new</span></p>\n            <h3 class=\"ds-grid__title\">Rowing boat, 12 foot, with oars</h3>\n            <p class=\"ds-grid__text\">Clinker built, dry all winter, on a road trailer. See it at the Old Quay any evening.</p>\n            <p class=\"ds-grid__text\"><a class=\"ds-link\" href=\"#notice\">Read the notice</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--2\">\n            <p class=\"ds-grid__kicker\">housing / rooms to let</p>\n            <h3 class=\"ds-grid__title\">Room over the bakery, from 1 May</h3>\n            <p class=\"ds-grid__text\">Warm in the mornings. Shared kitchen, own door to the yard, bills in the rent.</p>\n            <p class=\"ds-grid__text\"><a class=\"ds-link\" href=\"#notice\">Read the notice</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--3\">\n            <p class=\"ds-grid__kicker\">events / markets and fairs</p>\n            <h3 class=\"ds-grid__title\">Spring jumble, the school hall, Saturday</h3>\n            <p class=\"ds-grid__text\">Tables are free. Bring what you no longer want and take what you do. Doors at ten.</p>\n            <p class=\"ds-grid__text\"><a class=\"ds-link\" href=\"#notice\">Read the notice</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--4\">\n            <p class=\"ds-grid__kicker\">lost and found / found</p>\n            <h3 class=\"ds-grid__title\">Grey cat, white bib, very loud</h3>\n            <p class=\"ds-grid__text\">Has lived in the allotment shed since Monday. Eats well. Whose is she?</p>\n            <p class=\"ds-grid__text\"><a class=\"ds-link\" href=\"#notice\">Read the notice</a></p>\n          </div>\n        </div>\n      </section>\n\n      <section class=\"ds-page__section ds-page__section--last\" data-component=\"list\">\n        <h2 class=\"ds-page__label\">Pinned in the last hour <a class=\"ds-link ds-page__more\" href=\"#listings\">all of today</a></h2>\n        <ul class=\"ds-list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar\" data-component=\"avatar\">mk</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title\" href=\"#notice\">Touring bicycle, steel frame, 56cm</a>\n              <p class=\"ds-list__excerpt\">New chain and tyres last spring, racks front and back, a few honest scratches.</p>\n              <p class=\"ds-list__meta\">for sale / bicycles, Old Quay, 09:14, by m. kovar</p>\n            </div>\n            <span class=\"ds-list__price\">180.00</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar\">ts</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title\" href=\"#notice\">Wanted: someone to cut a hedge before the birds nest</a>\n              <p class=\"ds-list__excerpt\">Forty metres of hawthorn, head height. I have the ladder and will make the tea.</p>\n              <p class=\"ds-list__meta\">wanted / help wanted, North Field, 09:02, by t. sorel</p>\n            </div>\n            <span class=\"ds-list__price\">ask</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar\">ab</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title is-visited\" href=\"#notice\">Forty tomato seedlings, four kinds, free to collect</a>\n              <p class=\"ds-list__excerpt\">Sown too many again. In pots by the gate; take what you can plant.</p>\n              <p class=\"ds-list__meta\">free / seedlings and cuttings, Mill Lane, 08:47, by a. brandt</p>\n            </div>\n            <span class=\"ds-list__price\">free</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar\">rd</span>\n            <div class=\"ds-list__main\">\n              <a class=\"ds-list__title\" href=\"#notice\">Upright piano, in tune, you carry it</a>\n              <p class=\"ds-list__excerpt\">Ground floor, two steps to the street. Stool and a box of music go with it.</p>\n              <p class=\"ds-list__meta\">for sale / instruments, Hill Road, 08:31, by r. dane</p>\n            </div>\n            <span class=\"ds-list__price\">95.00</span>\n          </li>\n        </ul>\n      </section>\n    </div>\n  </section>\n\n  <!-- View 2, one section of the board: the filter column, tabs over the table of notices, pagination, the empty state of a search. -->\n  <section class=\"ds-view\" id=\"listings\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n        <li><a class=\"ds-breadcrumb__link\" href=\"#board\">the board</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li><a class=\"ds-breadcrumb__link\" href=\"#listings\">for sale</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li class=\"ds-breadcrumb__current\">bicycles</li>\n      </ol>\n      <header class=\"ds-page-header\" data-component=\"page-header\">\n        <div class=\"ds-page-header__main\">\n          <h1 class=\"ds-page-header__title\">For sale: bicycles</h1>\n          <p class=\"ds-page-header__text\">214 notices, the newest first. A price with nothing after it is what the seller asks.</p>\n        </div>\n        <div class=\"ds-page-header__action\"><a class=\"ds-button\" href=\"#post\">Post in bicycles</a></div>\n      </header>\n      <div class=\"ds-page__columns\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">In for sale</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link is-current\" href=\"#listings\">bicycles</a> <span class=\"ds-sidebar__count\">214</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">books and records</a> <span class=\"ds-sidebar__count\">188</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">boats</a> <span class=\"ds-sidebar__count\">23</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">furniture</a> <span class=\"ds-sidebar__count\">260</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">tools</a> <span class=\"ds-sidebar__count\">171</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#board\">all thirteen</a> <span class=\"ds-sidebar__count\">2117</span></li>\n            </ul>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Where</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link is-current\" href=\"#listings\">the whole town</a> <span class=\"ds-sidebar__count\">214</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">Old Quay</a> <span class=\"ds-sidebar__count\">58</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">Hill Road</a> <span class=\"ds-sidebar__count\">47</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">Station</a> <span class=\"ds-sidebar__count\">61</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">Mill Lane</a> <span class=\"ds-sidebar__count\">22</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#listings\">North Field</a> <span class=\"ds-sidebar__count\">26</span></li>\n            </ul>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Show only</h2>\n            <p class=\"ds-sidebar__text\"><label class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>notices with a price</span></label></p>\n            <p class=\"ds-sidebar__text\"><label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span>pinned this week</span></label></p>\n            <div class=\"ds-sidebar__row\">\n              <input class=\"ds-form__input\" type=\"text\" aria-label=\"Highest price\" placeholder=\"up to, e.g. 100\">\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Apply</button>\n            </div>\n          </section>\n        </aside>\n        <main class=\"ds-page__main\">\n          <section class=\"ds-page__section\" data-component=\"tabs\">\n            <ul class=\"ds-tabs\">\n              <li><span class=\"ds-tabs__tab is-current\">all 214</span></li>\n              <li><a class=\"ds-tabs__tab\" href=\"#listings\">offered 187</a></li>\n              <li><a class=\"ds-tabs__tab\" href=\"#listings\">wanted 21</a></li>\n              <li><a class=\"ds-tabs__tab\" href=\"#listings\">swaps 6</a></li>\n            </ul>\n            <div class=\"ds-tabs__body\">\n              <table class=\"ds-table\" data-component=\"table\">\n                <thead>\n                  <tr><th>No.</th><th>Notice</th><th class=\"ds-table__extra\">Where</th><th class=\"ds-table__extra\">Pinned</th><th class=\"ds-table__num\">Price</th></tr>\n                </thead>\n                <tbody>\n                  <tr><td class=\"ds-table__id\">48213</td><td><a class=\"ds-link\" href=\"#notice\">Touring bicycle, steel frame, 56cm</a> <span class=\"ds-badge\">new</span></td><td class=\"ds-table__extra\">Old Quay</td><td class=\"ds-table__extra\">today 09:14</td><td class=\"ds-table__num\">180.00</td></tr>\n                  <tr class=\"ds-table__row--alt\"><td class=\"ds-table__id\">48207</td><td><a class=\"ds-link\" href=\"#notice\">Child's bicycle, 20 inch wheels, two owners</a></td><td class=\"ds-table__extra\">Hill Road</td><td class=\"ds-table__extra\">today 08:02</td><td class=\"ds-table__num\">35.00</td></tr>\n                  <tr><td class=\"ds-table__id\">48195</td><td><a class=\"ds-link\" href=\"#notice\">Folding bicycle, three gears, needs a tyre</a> <span class=\"ds-badge ds-badge--warning\">reserved</span></td><td class=\"ds-table__extra\">Station</td><td class=\"ds-table__extra\">yesterday</td><td class=\"ds-table__num\">60.00</td></tr>\n                  <tr class=\"ds-table__row--alt\"><td class=\"ds-table__id\">48188</td><td><a class=\"ds-link\" href=\"#notice\">Pair of panniers, canvas, waterproofed</a></td><td class=\"ds-table__extra\">Old Quay</td><td class=\"ds-table__extra\">yesterday</td><td class=\"ds-table__num\">25.00</td></tr>\n                  <tr><td class=\"ds-table__id\">48170</td><td><a class=\"ds-link\" href=\"#notice\">Tandem, 1980s, runs well</a> <span class=\"ds-badge ds-badge--danger\">sold</span></td><td class=\"ds-table__extra\">Mill Lane</td><td class=\"ds-table__extra\">2 days ago</td><td class=\"ds-table__num\">240.00</td></tr>\n                  <tr class=\"ds-table__row--alt\"><td class=\"ds-table__id\">48164</td><td><a class=\"ds-link\" href=\"#notice\">Racing bicycle, 54cm, with spare wheels</a> <span class=\"ds-badge ds-badge--success\">price dropped</span></td><td class=\"ds-table__extra\">North Field</td><td class=\"ds-table__extra\">2 days ago</td><td class=\"ds-table__num\">310.00</td></tr>\n                  <tr><td class=\"ds-table__id\">48151</td><td><a class=\"ds-link\" href=\"#notice\">Box of inner tubes and brake blocks</a></td><td class=\"ds-table__extra\">Station</td><td class=\"ds-table__extra\">3 days ago</td><td class=\"ds-table__num\">8.00</td></tr>\n                  <tr class=\"ds-table__row--alt\"><td class=\"ds-table__id\">48139</td><td><a class=\"ds-link\" href=\"#notice\">Cargo trailer for a bicycle, home made</a> <span class=\"ds-badge ds-badge--danger\">withdrawn</span></td><td class=\"ds-table__extra\">Hill Road</td><td class=\"ds-table__extra\">4 days ago</td><td class=\"ds-table__num\">45.00</td></tr>\n                </tbody>\n              </table>\n              <ul class=\"ds-pagination\" data-component=\"pagination\">\n                <li><span class=\"ds-pagination__link is-disabled\">newer</span></li>\n                <li><span class=\"ds-pagination__link is-current\">1</span></li>\n                <li><a class=\"ds-pagination__link\" href=\"#listings\">2</a></li>\n                <li><a class=\"ds-pagination__link\" href=\"#listings\">3</a></li>\n                <li><a class=\"ds-pagination__link\" href=\"#listings\">27</a></li>\n                <li><a class=\"ds-pagination__link\" href=\"#listings\">older</a></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-page__section ds-page__section--last\">\n            <h2 class=\"ds-page__label\">Your saved search: \"unicycle\"</h2>\n            <div class=\"ds-empty\" data-component=\"empty\">\n              <h3 class=\"ds-empty__title\">Nothing pinned under that word.</h3>\n              <p class=\"ds-empty__text\">Nobody in town is selling a unicycle today. Pin up a wanted notice and the board will ask for you.</p>\n              <a class=\"ds-button ds-button--secondary\" href=\"#post\">Post a wanted notice</a>\n            </div>\n          </section>\n        </main>\n      </div>\n    </div>\n  </section>\n\n  <!-- View 3, one notice: its pictures, its text and facts, and beside them who pinned it, the messages and the question before reporting it. -->\n  <section class=\"ds-view\" id=\"notice\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\">\n        <li><a class=\"ds-breadcrumb__link\" href=\"#board\">the board</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li><a class=\"ds-breadcrumb__link\" href=\"#listings\">bicycles</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li class=\"ds-breadcrumb__current\">no. 48213</li>\n      </ol>\n      <header class=\"ds-page-header\">\n        <div class=\"ds-page-header__main\">\n          <h1 class=\"ds-page-header__title\">Touring bicycle, steel frame, 56cm: 180.00</h1>\n          <p class=\"ds-page-header__text\">No. 48213, for sale / bicycles, Old Quay. Pinned today at 09:14, comes down on 13 April.</p>\n        </div>\n        <div class=\"ds-page-header__action\"><a class=\"ds-button\" href=\"#post\">Reply to the seller</a></div>\n      </header>\n      <div class=\"ds-page__columns ds-page__columns--aside\">\n        <main class=\"ds-page__main\">\n          <section class=\"ds-page__section\">\n            <div class=\"ds-carousel\" data-component=\"carousel\">\n              <div class=\"ds-carousel__track\">\n                <div class=\"ds-carousel__slide\"><p class=\"ds-carousel__caption\">[picture 1 of 3: the whole bicycle, drive side]</p></div>\n                <div class=\"ds-carousel__slide ds-carousel__slide--2\"><p class=\"ds-carousel__caption\">[picture 2 of 3: the rear rack and mudguard]</p></div>\n                <div class=\"ds-carousel__slide ds-carousel__slide--3\"><p class=\"ds-carousel__caption\">[picture 3 of 3: the scratch on the top tube]</p></div>\n              </div>\n              <div class=\"ds-carousel__bar\">\n                <span>1 of 3. Drag sideways for the next.</span>\n                <ul class=\"ds-carousel__dots\">\n                  <li><span class=\"ds-carousel__dot is-current\"></span></li>\n                  <li><span class=\"ds-carousel__dot\"></span></li>\n                  <li><span class=\"ds-carousel__dot\"></span></li>\n                </ul>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section ds-prose\">\n            <h2>What it is</h2>\n            <p>A steel touring bicycle I have ridden to work for six years and across two countries once. It has a new chain and tyres from last spring, racks front and back, and mudguards that do not rattle. The frame number is stamped under the bottom bracket; quote <code>no. 48213</code> when you write.</p>\n            <h3>What goes with it</h3>\n            <ul>\n              <li>Two canvas panniers, one with a mended strap.</li>\n              <li>A pump, a lock with both keys, a spare tube.</li>\n              <li>The original bell, which sticks in the rain.</li>\n            </ul>\n            <p>Come and ride it round the quay before you decide. Cash or a transfer on the day; I will not post it.</p>\n          </section>\n          <section class=\"ds-page__section ds-page__section--last\">\n            <h2 class=\"ds-page__label\">The facts</h2>\n            <table class=\"ds-table\">\n              <tbody>\n                <tr><td>Frame</td><td>steel, lugged, 56cm</td><td class=\"ds-table__num\">1</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>Gears</td><td>three by eight, friction levers</td><td class=\"ds-table__num\">24</td></tr>\n                <tr><td>Wheels</td><td>700c, 36 spokes each</td><td class=\"ds-table__num\">2</td></tr>\n                <tr class=\"ds-table__row--alt\"><td>Weight</td><td>with racks, without bags, in kg</td><td class=\"ds-table__num\">14.5</td></tr>\n              </tbody>\n            </table>\n          </section>\n        </main>\n        <aside class=\"ds-page__aside\">\n          <section class=\"ds-page__section\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">Pinned by</h2>\n              <div class=\"ds-panel__body\">\n                <p class=\"ds-person\"><span class=\"ds-avatar\">mk</span><span><span class=\"ds-person__name\">m. kovar</span><span class=\"ds-person__meta\">on the board since 2015, 31 notices</span></span></p>\n                <p class=\"ds-panel__text\">Replies within a day, as a rule. <span class=\"ds-badge ds-badge--success\">address checked</span></p>\n                <p class=\"ds-panel__text\"><a class=\"ds-link\" href=\"#listings\">Other notices by m. kovar (3)</a></p>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section\">\n            <div class=\"ds-notices\" data-component=\"notice\">\n              <p class=\"ds-notice\"><span class=\"ds-notice__title\">Seen 46 times.</span> Two people have written to the seller since this morning.</p>\n              <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Never pay before you have seen it.</span> The board does not hold money and cannot get it back.</p>\n            </div>\n          </section>\n          <section class=\"ds-page__section ds-page__section--last\">\n            <h2 class=\"ds-page__label\">Something wrong with it?</h2>\n            <div class=\"ds-dialog__backdrop\">\n              <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n                <h3 class=\"ds-dialog__title\" id=\"dlg-title\">Report notice no. 48213?</h3>\n                <div class=\"ds-dialog__body\">\n                  <p class=\"ds-dialog__text\">It comes off the board at once and a person looks at it within a day. The seller is told why, not by whom.</p>\n                  <div class=\"ds-dialog__actions\">\n                    <button class=\"ds-button ds-button--danger\" type=\"button\">Report and take down</button>\n                    <a class=\"ds-button ds-button--secondary\" href=\"#notice\">Leave it up</a>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </section>\n        </aside>\n      </div>\n    </div>\n  </section>\n\n  <!-- View 4, pinning up a notice: how far along, the form as a ruled table with its error, and the rules beside it. -->\n  <section class=\"ds-view\" id=\"post\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\">\n        <li><a class=\"ds-breadcrumb__link\" href=\"#board\">the board</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li><a class=\"ds-breadcrumb__link\" href=\"#post\">post</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li class=\"ds-breadcrumb__current\">write the notice</li>\n      </ol>\n      <header class=\"ds-page-header\">\n        <div class=\"ds-page-header__main\">\n          <h1 class=\"ds-page-header__title\">Pin up a notice</h1>\n          <p class=\"ds-page-header__text\">Four steps: where it goes, what it says, a look at it, up on the board. Nothing is shown until the last.</p>\n        </div>\n        <div class=\"ds-page-header__action\"><a class=\"ds-button ds-button--secondary\" href=\"#help\">Read the rules first</a></div>\n      </header>\n      <div class=\"ds-page__columns ds-page__columns--aside\">\n        <main class=\"ds-page__main\">\n          <div class=\"ds-progress\" data-component=\"progress\">\n            <p class=\"ds-progress__label\"><span>Step 2 of 4: what it says</span> <span>50%</span></p>\n            <div class=\"ds-progress__track\"><div class=\"ds-progress__bar ds-progress__bar--50\"></div></div>\n          </div>\n          <form class=\"ds-form\" data-component=\"form\" action=\"#post\">\n            <p class=\"ds-notice ds-notice--error ds-form__notice\"><span class=\"ds-notice__title\">Not pinned yet.</span> One line below needs putting right.</p>\n            <div class=\"ds-form__rows\">\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"p-title\">Headline</label>\n                <div class=\"ds-form__field\">\n                  <input class=\"ds-form__input ds-form__input--wide\" id=\"p-title\" type=\"text\" value=\"Touring bicycle, steel frame, 56cm\">\n                  <p class=\"ds-form__hint\">What it is, in the words a neighbour would search for.</p>\n                </div>\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"p-section\">Section</label>\n                <div class=\"ds-form__field\">\n                  <select class=\"ds-form__input ds-form__input--auto\" id=\"p-section\">\n                    <option>for sale / bicycles</option>\n                    <option>for sale / everything else</option>\n                    <option>wanted / wanted to buy</option>\n                    <option>free / free to collect</option>\n                  </select>\n                </div>\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"p-price\">Price <span class=\"ds-tooltip\" data-component=\"tooltip\" tabindex=\"0\">?<span class=\"ds-tooltip__text\" role=\"tooltip\">Leave it empty for \"ask\", or write 0 for free. No currency sign.</span></span></label>\n                <div class=\"ds-form__field\">\n                  <input class=\"ds-form__input ds-form__input--short is-invalid\" id=\"p-price\" type=\"text\" value=\"180 ono\" aria-invalid=\"true\" aria-describedby=\"p-price-err\">\n                  <p class=\"ds-form__error\" id=\"p-price-err\">A price is a number and nothing else. Put \"or near offer\" in the text.</p>\n                </div>\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"p-text\">The notice</label>\n                <div class=\"ds-form__field\">\n                  <textarea class=\"ds-form__input ds-form__input--wide\" id=\"p-text\" rows=\"5\">New chain and tyres last spring, racks front and back, a few honest scratches. Come and ride it round the quay before you decide.</textarea>\n                </div>\n              </div>\n              <div class=\"ds-form__row\">\n                <span class=\"ds-form__label\">Replies</span>\n                <div class=\"ds-form__field\">\n                  <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>send replies to my address, which is never shown</span></label>\n                  <p class=\"ds-form__hint\">Off means people can only come and knock.</p>\n                </div>\n              </div>\n              <div class=\"ds-form__row\">\n                <span class=\"ds-form__label\">Promise</span>\n                <div class=\"ds-form__field\">\n                  <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>It is mine to sell and it is in this town.</span></label>\n                </div>\n              </div>\n            </div>\n            <div class=\"ds-form__actions ds-buttons\" data-component=\"buttons\">\n              <button class=\"ds-button\" type=\"submit\">Look at it before pinning</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Keep as a draft</button>\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Throw it away</button>\n              <button class=\"ds-button\" type=\"button\" disabled>Pin it up</button>\n            </div>\n          </form>\n        </main>\n        <aside class=\"ds-page__aside\">\n          <section class=\"ds-page__section\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">As it will hang on the board</h2>\n              <div class=\"ds-panel__body\">\n                <p class=\"ds-person\"><span class=\"ds-avatar\">mk</span><span><span class=\"ds-person__name\">Touring bicycle, steel frame, 56cm</span><span class=\"ds-person__meta\">for sale / bicycles, Old Quay, by m. kovar</span></span></p>\n                <p class=\"ds-panel__text\">The price is left off until it is a number. <span class=\"ds-badge\">new</span> shows for the first day.</p>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">The four steps</h2>\n              <div class=\"ds-panel__body\">\n                <ul class=\"ds-board__list\">\n                  <li class=\"ds-board__item\"><span>1. Where it goes</span> <span class=\"ds-badge ds-badge--success\">done</span></li>\n                  <li class=\"ds-board__item\"><span>2. What it says</span> <span class=\"ds-badge ds-badge--warning\">one line to fix</span></li>\n                  <li class=\"ds-board__item\"><span>3. A look at it</span> <span class=\"ds-board__count\">next</span></li>\n                  <li class=\"ds-board__item\"><span>4. Up on the board</span> <span class=\"ds-board__count\">last</span></li>\n                </ul>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">Before you pin</h2>\n              <div class=\"ds-panel__body\">\n                <p class=\"ds-panel__text\">One thing to a notice, one notice to a thing. A notice stays up thirty days and you may pin it again once.</p>\n                <p class=\"ds-panel__text\">No animals for sale, nothing that needs a licence, no notices for somebody else's business.</p>\n                <p class=\"ds-panel__text\"><a class=\"ds-link\" href=\"#help\">All eleven rules</a></p>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section ds-page__section--last\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">Your notices</h2>\n              <div class=\"ds-panel__body\">\n                <ul class=\"ds-board__list\">\n                  <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">Wanted: a ladder</a> <span class=\"ds-badge ds-badge--success\">up</span></li>\n                  <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">Free: seedlings</a> <span class=\"ds-badge ds-badge--warning\">2 days left</span></li>\n                  <li class=\"ds-board__item\"><a class=\"ds-link\" href=\"#listings\">Garden roller</a> <span class=\"ds-badge ds-badge--danger\">came down</span></li>\n                </ul>\n              </div>\n            </div>\n          </section>\n        </aside>\n      </div>\n    </div>\n  </section>\n\n  <!-- View 5, help and rules: running text, the marks and link colours explained, questions that open and close. -->\n  <section class=\"ds-view\" id=\"help\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\">\n        <li><a class=\"ds-breadcrumb__link\" href=\"#board\">the board</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li><a class=\"ds-breadcrumb__link\" href=\"#help\">help</a></li>\n        <li class=\"ds-breadcrumb__sep\">/</li>\n        <li class=\"ds-breadcrumb__current\">rules</li>\n      </ol>\n      <header class=\"ds-page-header\">\n        <div class=\"ds-page-header__main\">\n          <h1 class=\"ds-page-header__title\">Help and rules</h1>\n          <p class=\"ds-page-header__text\">How the board works, what may go on it, and what the marks beside a notice mean.</p>\n        </div>\n        <div class=\"ds-page-header__action\"><a class=\"ds-button\" href=\"#post\">Post a notice</a></div>\n      </header>\n      <div class=\"ds-page__columns ds-page__columns--aside\">\n        <main class=\"ds-page__main\">\n          <section class=\"ds-page__section ds-prose\" data-component=\"typography\">\n            <h1>The board is a wall with pins in it</h1>\n            <p>Anyone may read it. Anyone with an address in town may pin a notice to it. The board keeps no pictures on its front page, sells nothing itself and shows no advertising other than the notices, which are all advertising.</p>\n            <h2>What may go up</h2>\n            <p>Things you own, rooms you may let, work you can offer or need done, what you have lost and what you have found. Write the headline the way you would say it over a fence.</p>\n            <h3>What may not</h3>\n            <ul>\n              <li>Animals for sale, and anything that needs a licence to sell.</li>\n              <li>The same notice in two sections.</li>\n              <li>A price with words in it. The price box takes <code>180</code> and not <code>180 ono</code>.</li>\n            </ul>\n            <p>A notice that breaks a rule comes down and its owner is told which one.</p>\n          </section>\n          <section class=\"ds-page__section ds-page__section--last\">\n            <h2 class=\"ds-page__label\">Asked most weeks</h2>\n            <div class=\"ds-accordion\" data-component=\"accordion\">\n              <details class=\"ds-accordion__item\" open>\n                <summary class=\"ds-accordion__title\">Why did my notice come down?</summary>\n                <p class=\"ds-accordion__body\">Thirty days passed, or somebody reported it. You were sent a line saying which. A notice that timed out can be pinned up once more from \"my notices\".</p>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__title\">Can I change the price after pinning?</summary>\n                <p class=\"ds-accordion__body\">Yes, downwards, as often as you like. The notice is marked \"price dropped\" for two days.</p>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__title\">Who sees my address?</summary>\n                <p class=\"ds-accordion__body\">Nobody. Replies are passed on by the board until you answer one yourself.</p>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__title\">How does a notice get pinned at the top?</summary>\n                <p class=\"ds-accordion__body\">Four are picked by hand each Monday. It cannot be bought.</p>\n              </details>\n            </div>\n          </section>\n        </main>\n        <aside class=\"ds-page__aside\">\n          <section class=\"ds-page__section\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">The marks</h2>\n              <div class=\"ds-panel__body\" data-component=\"badge\">\n                <p class=\"ds-panel__text\"><span class=\"ds-badge\">new</span> pinned in the last day.</p>\n                <p class=\"ds-panel__text\"><span class=\"ds-badge ds-badge--tag\">wanted</span> somebody is looking, not selling.</p>\n                <p class=\"ds-panel__text\"><span class=\"ds-badge ds-badge--success\">price dropped</span> or address checked.</p>\n                <p class=\"ds-panel__text\"><span class=\"ds-badge ds-badge--warning\">reserved</span> promised but not yet gone.</p>\n                <p class=\"ds-panel__text\"><span class=\"ds-badge ds-badge--danger\">sold</span> gone, or taken down.</p>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section\" data-component=\"links\">\n            <h2 class=\"ds-page__label\">The colours of a link</h2>\n            <ul class=\"ds-links\">\n              <li><a class=\"ds-link\" href=\"#listings\">a notice you have not read</a></li>\n              <li><a class=\"ds-link is-visited\" href=\"#notice\">one you have</a></li>\n              <li><a class=\"ds-link is-hover\" href=\"#listings\">under the pointer</a></li>\n              <li><a class=\"ds-link is-active\" href=\"#listings\">while you press</a></li>\n            </ul>\n          </section>\n          <section class=\"ds-page__section\">\n            <div class=\"ds-panel\">\n              <h2 class=\"ds-panel__title\">Who keeps the board</h2>\n              <div class=\"ds-panel__body\">\n                <p class=\"ds-person\"><span class=\"ds-avatar\">jo</span><span><span class=\"ds-person__name\">j. oduya, keeper</span><span class=\"ds-person__meta\">reads every report, Monday to Saturday</span></span></p>\n                <p class=\"ds-panel__text\">The board is paid for by the town library and run from a desk beside the newspapers. It has no owner to sell it and no plans to grow.</p>\n              </div>\n            </div>\n          </section>\n          <section class=\"ds-page__section ds-page__section--last\">\n            <div class=\"ds-notices\">\n              <p class=\"ds-notice\"><span class=\"ds-notice__title\">Still stuck?</span> Leave a note for the keeper of the board under <a class=\"ds-link ds-link--quiet\" href=\"#post\">services / everything else</a>.</p>\n            </div>\n          </section>\n        </aside>\n      </div>\n    </div>\n  </section>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <div class=\"ds-footer__row\">\n      <span>chronoskin, the town notice board. Kept by hand since 2014. No pictures on the front page, no tracking, nothing for sale but what is pinned up.</span>\n      <ul class=\"ds-footer__links\">\n        <li><a class=\"ds-footer__link\" href=\"#board\">the board</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#post\">post a notice</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#help\">help and rules</a></li>\n      </ul>\n    </div>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.brutalism.portal.s07.p11.t10.u11\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"brutalism\",\n    \"years\": [\n      2014,\n      2019\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-br-7bab\",\n  \"short\": \"v1-br-7bab\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f8ff;\n  --color-surface-strong: #f0f0ff;\n  --color-bar: #000000;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #ffffff;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #0000ee;\n  --color-inverse-text: #ffffff;\n  --color-text: #000000;\n  --color-text-muted: #444444;\n  --color-heading: #000000;\n  --color-heading-alt: #000000;\n  --color-link: #0000ee;\n  --color-link-quiet: #0000ee;\n  --color-link-visited: #0000ee;\n  --color-link-hover: #cc0000;\n  --color-link-active: #cc0000;\n  --color-border: #000000;\n  --color-border-strong: #000000;\n  --color-border-muted: #b8b8f8;\n  --color-accent: #cc0000;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #cc0000;\n  --color-fill-1: #ffffff;\n  --color-fill-2: #f8f8ff;\n  --color-fill-3: #f0f0ff;\n  --color-fill-4: #d8d8ff;\n  --color-button: #ffffff;\n  --color-button-text: #000000;\n  --color-button-hover-text: #0000ee;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #0000ee;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #000000;\n  --color-disabled: #f0f0ff;\n  --color-disabled-text: #444444;\n  --color-danger: #cc0000;\n  --color-danger-surface: #ffffff;\n  --color-success: #006400;\n  --color-warning: #8a4b00;\n  --color-notice: #f0f0ff;\n  --color-notice-text: #000000;\n  --color-focus: #0000ee;\n  --color-shadow: #000000;\n  --color-overlay: #d8d8ff;\n}\n\n/* @part type */\n:root {\n  --font-body: Helvetica, Verdana, Arial, \"Liberation Sans\", sans-serif;\n  --font-heading: Helvetica, Verdana, Arial, \"Liberation Sans\", sans-serif;\n  --font-ui: Helvetica, Verdana, Arial, \"Liberation Sans\", sans-serif;\n  --font-mono: Monaco, \"Liberation Mono\", monospace;\n  --text-base: 13px;\n  --text-small: 11px;\n  --text-ui: 12px;\n  --text-large: 14px;\n  --text-display: 27px;\n  --text-h1: 20px;\n  --text-h2: 16px;\n  --text-h3: 13px;\n  --line-body: 1.3;\n  --line-heading: 1.2;\n  --line-display: 1.2;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: 0 0 0 3px var(--color-canvas), 0 0 0 5px var(--color-border);\n  --shadow-control: none;\n  --shadow-control-hover: inset 0 -2px 0 var(--color-button-hover-text);\n  --shadow-control-pressed: inset 0 0 0 2px var(--color-border-strong);\n  --shadow-dialog: 0 0 0 4px var(--color-border-strong);\n  --shadow-text: none;\n  --fill-page: var(--color-inverse);\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: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
