{
  "id": "v1-yk-8212",
  "long_id": "v1.y2k-futurism.blog.s08.p02.t01.u02",
  "name": "Y2K futurism news sheet, 1999 to 2003",
  "era": {
    "slug": "y2k-futurism",
    "code": "yk",
    "name": "Y2K futurism",
    "years": [
      1999,
      2003
    ],
    "description": "The turn of the millennium, 1999 to 2003: techno blues and silvers, glassy aqua buttons, tiny pixel-sharp type, thin tech lines and rounded capsule shapes on dark or brushed backgrounds."
  },
  "archetype": "blog",
  "mode": "mix",
  "viewport": {
    "width": 1024,
    "fluid": false
  },
  "summary": "The daily technology news sheet of the turn of the millennium, as hardware sites, music channels and software houses ran their front pages: a 780px sheet of gunmetal on a gridded black screen, with a dateline strip, a centred masthead between two small boxes, and a body cut into three equal columns like a newspaper. Bars and buttons are brushed ice-blue capsules and strips, panels have a double hairline, headlines are a bold serif over small sans-serif text, and labels are 9px and 10px capitals. The metal and glass were drawn as images at the time and are rebuilt here with gradients, 1px lines and radii; the look gave way to wide weblog layouts from about 2004.",
  "url": "https://chrono.skin/s/v1-yk-8212",
  "preview_url": "https://chrono.skin/s/v1-yk-8212/specimen.html",
  "files": {
    "STYLE.md": "# Y2K futurism news sheet, 1999 to 2003\n\n## Summary\n\nThe daily technology news sheet of the turn of the millennium, as hardware sites, music channels and software houses ran their front pages: a 780px sheet of gunmetal on a gridded black screen, with a dateline strip, a centred masthead between two small boxes, and a body cut into three equal columns like a newspaper. Bars and buttons are brushed ice-blue capsules and strips, panels have a double hairline, headlines are a bold serif over small sans-serif text, and labels are 9px and 10px capitals. The metal and glass were drawn as images at the time and are rebuilt here with gradients, 1px lines and radii; the look gave way to wide weblog layouts from about 2004.\n\n## Layout\n\n- The page is not fluid. `--size-page` is 780px; `.ds-page__frame` is one sheet of that width centred horizontally (`margin: 0 auto`) with a 1px outline and `--radius-page` corners, and `--fill-page` shows around it. All text sits on the sheet; nothing is written on the page background.\n- Order from the top: `.ds-nav` (dateline strip, the masthead with the brand centred between two `.ds-nav__ear` boxes, then the centred row of desks between two rules), the view, `.ds-footer`. The brand is centred, not at the left, and there is no link column.\n- The body of every view is `.ds-page__grid`: three equal columns (246px at this width) with `--space-5` (10px) gutters and padding. A block takes one column, or spans two (`.ds-page__span2`) or all three (`.ds-page__span3`). On the home view blocks in one row are stretched to the same height.\n- The home view reads in rows: the lead story `.ds-hero` across two columns beside the wire panel; three desks, each a `.ds-block` of `.ds-section` strip and `.ds-list`, one per column; the bench `.ds-table` across two columns beside the one `.ds-panel--inverse`; and `.ds-grid`, four cells across all three columns. Fill each row; do not leave a column empty.\n- Inner pages (every view below the home view) keep the sheet, header and footer and have no hero. `.ds-breadcrumb` sits directly under the row of desks across the full sheet. Below it the grid is `.ds-page__grid--inner` (blocks keep their own height): `.ds-page-header` across all three columns in place of the hero, an optional `.ds-stat` row across all three, then `.ds-page__main` across two columns (notices, `.ds-tabs` over the `.ds-table` or the form under its `.ds-section` strip, buttons, dialog) beside `.ds-page__side` in the third column: the `.ds-sidebar` block first, then small `.ds-panel` modules, so that both end near each other.\n- Spacing scale: `--space-1` 1px is the vertical padding of buttons, inputs, tabs and navigation capsules; `--space-2` 2px is the vertical padding of strips, panel titles and table heads; `--space-3` 4px is the padding of table rows, wire rows and notices and the gap between tabs; `--space-4` 6px is the side padding of cells, lists and panels and the gap between stat cells and grid cells; `--space-5` 10px is the grid gutter, the gap between stacked blocks, the side padding of buttons and the gap between paragraphs; `--space-6` 14px is list indent, the side padding of navigation capsules and the padding of the dialog backdrop. There is no step above 14px.\n- Fixed sizes: `--size-figure` 110px is the drawing in the lead story; `--size-mark` 30px the tile of the brand mark; `--size-ear` 150px a box beside the masthead; `--size-time` 38px the time gutter of the wire; `--size-search` 92px a short input; `--size-label` 100px the label column of a form; `--size-field` 200px a text input; `--size-area` 64px a textarea; `--size-dialog` 300px a dialog; `--size-led` 6px a status lamp.\n- Blocks are separated by the 10px gutter and marked by an outline, a strip or a strong top rule. Rows inside a block touch and are divided by dotted hairlines.\n- Views. The specimen is one example site, a technology news sheet, in five views. `home` is the front page: lead story and wire, three desks of three stories, the bench table with the reader poll, and four special reports. `news` is the archive: page header, a filtered table of headlines with pagination, and the desks and months in the third column. `story` is an article: the prose with a row of further links, and a contents panel, the wire and a talk-back panel in the third column. `desk` is the reader's own page: page header, stats, notices, the tabbed table of tips with status badges and the button row, the remove dialog it opens, and in the third column the desk links, the empty state of kept stories and two panels. `tip` is the form page for sending a tip.\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- `--font-body` and `--font-heading` are Arial, Helvetica. `--font-ui` is Verdana, used for navigation, tabs, buttons, inputs, table heads and all 9px text. `--font-mono` is Courier New for code and for numeric table columns. Several references set their small text in Geneva and drew bar labels in commercial extended faces; Verdana bold uppercase is the stand-in.\n- `--text-base` 11px is body text and links. `--text-small` 9px (Verdana) is meta lines, the utility strip, breadcrumb, footer, table heads, badges, hints and pagination. `--text-ui` 10px bold uppercase (`--ui-transform`, `--weight-ui` 700) is the navigation bar, tabs and buttons. `--text-large` 13px is lead paragraphs. `--text-h3` 11px, `--text-h2` 13px, `--text-h1` 16px, `--text-display` 18px: 18px bold is the largest text and is used for the wordmark and the hero title only.\n- Line heights are `normal`. Headings are bold, not uppercased, not tracked.\n- `--color-page` #000030 is outside the sheet. `--color-canvas` and `--color-surface` #003399 are the sheet and panel bodies. `--color-surface-alt` #1048b8 fills the link column, forms, stat cells, alternate table rows and the breadcrumb strip. `--color-surface-strong` #000030 is darker than the sheet and is used for title strips inside the link column.\n- `--color-bar` #000000 with `--color-bar-text` white, filled by `--fill-bar` (a two-band glass gradient), is the navigation bar, panel and dialog titles, table heads and the current tab. `--color-bar-alt` #1850c8 with white text, filled by `--fill-bar-alt`, is the utility strip, section tabs, inactive tabs, `.ds-panel--alt` titles and the footer strip. `--shadow-text`, a hard 1px offset, is applied to text on these two bars only, not to buttons.\n- `--color-inverse` #c0c0d0 with `--color-inverse-text` #000030 is the silver block: one `.ds-panel--inverse` per page and the closing band of the footer. Links inside it take the inverse text colour.\n- `--color-text` #e0e0e8; `--color-text-muted` #a8a8b8 for dates, counts and captions; `--color-heading` white; `--color-heading-alt` #ffcc00 for h3.\n- `--color-link` white, underlined (`--link-decoration`): links in running text, list titles, table cells. `--color-link-quiet` #d0d0d0 without underline: link column, breadcrumb, grid sub-links, tool links in tables, pagination. Links on bars take the bar text colour without underline. Hover #ffcc00, active #98ff00, visited #a8a8b8.\n- `--color-accent` #ffcc00 with `--color-accent-text` black, filled by `--fill-accent`, is the current navigation capsule, the badge, the hero kicker and the current page number. `--color-accent-alt` #98ff00 is a lamp colour only.\n- `--color-fill-1` to `--color-fill-4` are four blues of the sheet's family (#0840a8, #1048b8, #1850c8, #0038a0) for the hero and grid cells.\n- The primary button is `--color-button` #d0d0d0 with black text under the capsule gloss of `--fill-button`; the secondary is `--color-button-secondary` #1048b8 with white text. Inputs are white with black text and a `--color-input-border` line, with the same capsule radius.\n- Each text colour is used only on its own fill: bar text on the bar, accent text on the accent, button text on the button, inverse text on the inverse block, notice text on the notice. `--color-danger` #cc6633 is text only on `--color-danger-surface` #000000 (error notice, field error chip) and otherwise a rim or lamp colour. `--color-success` #98ff00 and `--color-warning` #ffcc00 are lamp and rim colours and never carry or colour text.\n- One-off values built in `components.css` without a token: `dotted` on the empty-state outline, `radial-gradient()` dot patterns sized by `--size-dot`, and `calc()` of two layout tokens for the form action offset.\n- Visited, hover, active and focus colours cannot be measured on a static capture; they are colours measured elsewhere in the references assigned to those roles.\n\n## Components\n\n- `.ds-page` on `<body>`: page fill and base type. Wrap everything in `.ds-page__frame`. `.ds-page__grid` is the three-column body; `.ds-page__grid--inner` is the same grid for inner views. `.ds-page__span2` and `.ds-page__span3` widen a block. `.ds-page__main` (two columns) and `.ds-page__side` (one) are the stacks of an inner view. `.ds-block` joins a `.ds-section` strip or tab row to the block it heads. `.ds-view` wraps one screen; `.ds-view--home` marks the first.\n- `.ds-nav`: site header. `.ds-nav__dateline` is the dark strip with `.ds-nav__date` and `.ds-nav__utility-links` (`.ds-nav__utility-link`). `.ds-nav__masthead` holds two `.ds-nav__ear` boxes (the left one with a `.ds-nav__ear-value` read-out, the right one a search form with `.ds-nav__search`) around `.ds-nav__brand`, the centred `.ds-brand` over a 9px `.ds-nav__tagline`. `.ds-nav__links` is the centred bar of `.ds-nav__link` entries; `is-current` turns the entry into an accent capsule. One rule per view lights the entry whose `href` names the view that is showing; in a real multi-page site set `is-current` instead.\n- `.ds-brand`: the site's mark and name, centred in the masthead, linking home. `.ds-brand__mark` is a 30px tile dressed like the primary button (`--fill-button`, `--color-button-text`, 1px `--color-border-strong` rim, `--radius-control`, `--shadow-control`) holding the mark as inline SVG; `.ds-brand__name` is the 18px serif wordmark. The name `chronoskin` and its mark are placeholders: replace them with the installing project's own name and logo, keeping the tile.\n- `.ds-breadcrumb`: inner views only. 9px trail on a strip under the row of desks, quiet links, `.ds-breadcrumb__sep` (`>`), ending in bold `.ds-breadcrumb__current`.\n- `.ds-hero`: the lead story, home view only, across two columns. `.ds-hero__body` is the text beside `.ds-hero__figure`, an inline SVG line drawing. The text is `.ds-hero__kicker` (accent capsule), `.ds-hero__title` (18px serif), `.ds-hero__text` (12px), `.ds-hero__meta` (9px byline) and `.ds-hero__actions` with one `.ds-button` and one link. A 2px rule in `--color-border-strong` runs along its top. No photograph.\n- `.ds-section`: the strip that heads a column or block: `.ds-section__title` in 10px capitals and an optional `.ds-section__more` link at the right, both in the strip's text colour. The list, table or form under it touches it.\n- `.ds-page-header`: head of an inner view, across all three columns: `.ds-page-header__kicker` (the section in 9px capitals), `.ds-page-header__title` (17px serif, the view's only h1), one line of `.ds-page-header__text`, and `.ds-page-header__action` at the right with one `.ds-button`; a hairline above and a 2px rule below.\n- `.ds-stat`: the row of three to five figures under the page header. `.ds-stat` is the row; each figure is a `.ds-stat__item` cell under a 2px rule, holding a 17px serif `.ds-stat__value` over a 9px `.ds-stat__label`.\n- `.ds-prose`: article text: h1, h2, h3, p, ul, ol, `code`, strong; `.ds-prose__byline` is the 9px credit and `.ds-prose__lead` the 12px first paragraph.\n- `.ds-link`: underlined link with `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` is the text-coloured, not underlined link for navigation inside content. `.ds-links` lays a row of links out.\n- `.ds-button`: brushed capsule in 10px bold capitals. `.ds-button--secondary` is the grey capsule. `.ds-button--danger` is the secondary capsule with a rim and a lamp in `--color-danger`; the label keeps the secondary text colour. `disabled` or `is-disabled` flattens it to `--color-disabled`; `is-hover` brightens it. Group with `.ds-buttons`.\n- `.ds-form`: outlined block under a `.ds-section` strip, of `.ds-form__row` pairs: bold `.ds-form__label` (optional `.ds-form__hint`) and a control. Controls take `.ds-form__input` (`--small`, `--auto` for selects, `--area` for textareas); `is-invalid` plus a `.ds-form__error` chip marks a bad field. `.ds-form__check` with `.ds-form__checkbox` for checkboxes and radios; `.ds-form__actions` is the button row under the controls.\n- `.ds-table`: outlined data table: brushed `th` in 9px capitals, rows alternating the two surfaces without rules, `.ds-table__num` right-aligned in the monospace. `.ds-table__caption` is the 9px line under it.\n- `.ds-tabs`: a row of `.ds-tabs__tab` capsules on a 2px rule; `is-current` takes the bar fill. Use it directly above the table it filters.\n- `.ds-list`: stories under a `.ds-section` strip, outlined at the sides and foot. Each `.ds-list__item` has a serif `.ds-list__title`, a `.ds-list__text` summary and a 9px `.ds-list__meta` line; rows are divided by dotted hairlines. `.ds-list--wire` is the wire: one line per item with a `.ds-list__time` in the 38px gutter. `.ds-list--compact` is the one-line variant for panels, with an inline count. Both go inside a `.ds-panel` and have no outline of their own.\n- `.ds-panel`: a one-column module: outlined with a second inner hairline, `.ds-panel__title` brushed bar over `.ds-panel__body`. Body helpers: `.ds-panel__text`, `.ds-panel__list` (a numbered list), `.ds-panel__small`, `.ds-panel__option` (poll choice), `.ds-panel__field` (input with button), `.ds-panel__actions`. `.ds-panel--alt` has the dark title; `.ds-panel--inverse` is the pale block with a 14px serif title, at most one per view.\n- `.ds-sidebar`: the block of section links at the top of the third column of an inner view: `.ds-sidebar__title` strips over `.ds-sidebar__list` of `.ds-sidebar__item` rows holding `.ds-link--quiet` links, with an optional `.ds-badge--count` after the link.\n- `.ds-grid`: four `.ds-grid__cell` blocks across the sheet, each under a 2px rule, tinted with `--1`, `--2`, `--3` or the base fill; each has a `.ds-grid__kicker` in 9px capitals, a 14px serif `.ds-grid__title` link and a 9px `.ds-grid__text` line.\n- `.ds-badge`: 9px bold accent capsule (\"NEW\"). `.ds-badge--count` is a bare muted count. Status labels are a plain outlined capsule with a round lamp: `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`, and `.ds-badge--alt` for a neutral \"on\" marker; lamp and rim take the status colour, the word stays in `--color-text`.\n- `.ds-notice`: one-line message in an outlined box, starting with a `.ds-notice__title`. `.ds-notice--error` uses the danger colour for text and rim on the danger surface. Stack several in `.ds-notices`.\n- `.ds-pagination`: centred row of small capsules: `.ds-pagination__link` on quiet links, the current page as accent-filled `.ds-pagination__current`.\n- `.ds-dialog`: a small window in the page flow: 300px, 2px outline, brushed `.ds-dialog__title`, `.ds-dialog__body` with `.ds-dialog__text` and right-aligned `.ds-dialog__actions`. `.ds-dialog__backdrop` is the flat dark area it sits on. No blur, no floating.\n- `.ds-empty`: dotted-outline block with a centred muted `.ds-empty__text` and one button.\n- `.ds-footer`: a 2px rule, then `.ds-footer__bar`, the inverse strip of centred `.ds-footer__link` entries, then `.ds-footer__band`, the dark closing line with the copyright.\n- `.ds-menu` (`.ds-menu__list`, `.ds-menu__link`): a nav item with a drop-down list on hover or focus.\n- `.ds-meter` (`.ds-meter__label`) with `.ds-progress` (`--30`, `--50`, `--70`, `--90`, `.ds-progress__bar`): a segmented loading or signal bar with its label.\n- `.ds-accordion` (`__summary`, `__body`): a `<details>` panel for specifications.\n- `.ds-tooltip` (`__tip`): a small label shown on hover or focus of a word.\n- `.ds-carousel` (`__track`, `__slide`, `__title`, `__text`, `__bar`, `__arrow`): a scroll-snap featured viewer with a counter such as 01/03.\n- `.ds-avatar`: initials in a round badge beside a name.\n\n## Never\n\n- `row-gap <= 2px`: rows of lists and tables touch.\n- `block-gap <= 14px`: neighbouring blocks sit 10px apart.\n- `content-width <= 780px`: text stays inside the fixed sheet.\n- `palette-colours <= 18`: greys, two khakis, one aqua, two blues, white and black, plus three status lamps.\n- `font-size <= 18px`: the wordmark and the hero title are the largest text.\n- `font-size >= 9px`: small text is 9px and nothing is smaller.\n- `font-weight <= 700`: regular and bold only.\n- `font-families <= 3`: Arial, Verdana for small and interface text, a monospace for code and figures.\n- `letter-spacing <= 0px`: no text is tracked.\n- `uppercase-text <= 20%`: only interface labels are uppercased: navigation, tabs, buttons, table heads, badges.\n- `border-radius <= 18px`: 3px on controls, 18px on the largest containers, nothing in between.\n- `border-width <= 2px`: 1px lines, a 2px dialog frame and plate edge.\n- `box-shadow-blur <= 0px`: shadows are hard bevels and hard offsets.\n- `gradient-fills <= 15%`: gradients are for the housing, strips, capsule keys, title bars and buttons.\n- `transition = none`: states change instantly.\n- `animation = none`: nothing moves.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen: a new one-column module copies `.ds-panel` (1px outline, brushed title in `--fill-bar` or `--fill-bar-alt`, body padded `--space-4` and `--space-5`); a new block of stories or a new table starts with a `.ds-section` strip and puts flat content touching it; a new inner view copies one of the specimen's (breadcrumb, `.ds-page-header` across the sheet, two columns of work, one of modules); a new control copies `.ds-button` or `.ds-form__input` with its capsule radius; a new status mark copies the lamp capsule of `.ds-badge--success`. Place every block on the three-column grid: one, two or three columns wide, never a fourth width. Use only the tokens in `tokens.css` and the `--size-*` and `--space-*` tokens in `components.css`, and take the nearest spacing step instead of a new number. Pair every text token with its own fill and with no other, and never use a status colour as a text colour. Keep the serif for headlines and the capitals for labels, keep text between 9px and 12px apart from 14px to 18px headlines, and separate things with an outline, a strip or a rule, never with whitespace, soft shadows or large cards.\n",
    "components.css": "/* Layout tokens (structure part). A news sheet cut into three equal\n   columns under a centred masthead. */\n:root {\n  --size-page: 780px;\n  --size-figure: 110px;\n  --size-mark: 30px;\n  --size-ear: 150px;\n  --size-time: 38px;\n  --size-search: 92px;\n  --size-label: 100px;\n  --size-field: 200px;\n  --size-area: 64px;\n  --size-dialog: 300px;\n  --size-led: 6px;\n  --space-1: 1px;\n  --space-2: 2px;\n  --space-3: 4px;\n  --space-4: 6px;\n  --space-5: 10px;\n  --space-6: 14px;\n}\n\n/* ---------- shell ---------- */\n.ds-page {\n  margin: 0;\n  padding: var(--space-5) var(--space-3) var(--space-6);\n  background: var(--fill-page);\n  background-color: var(--color-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 auto;\n  overflow: hidden;\n  background: var(--color-canvas);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n}\n/* The sheet's grid: three equal columns. A block takes one column, or\n   spans two or all three. Blocks in a row are as tall as each other. */\n.ds-page__grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-5);\n  padding: var(--space-5);\n}\n.ds-page__grid--inner {\n  align-items: start;\n}\n.ds-page__span2 { grid-column: span 2; }\n.ds-page__span3 { grid-column: span 3; }\n.ds-page__main,\n.ds-page__side {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-page__main { grid-column: span 2; }\n.ds-block {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n\n/* ---------- views ---------- */\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/* ---------- 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}\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-3) var(--space-6);\n  margin: 0;\n  padding: var(--space-4) var(--space-5);\n}\n\n/* ---------- brand ---------- */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-5);\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  flex: none;\n  box-sizing: border-box;\n  justify-content: center;\n  align-items: center;\n  width: var(--size-mark);\n  height: var(--size-mark);\n  padding: var(--space-3);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-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}\n\n/* ---------- nav ---------- */\n/* Dateline strip, a centred masthead between two small boxes, then the\n   row of desks between rules. */\n.ds-nav {\n  display: block;\n}\n.ds-nav__dateline {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: var(--space-5);\n  padding: var(--space-2) var(--space-5);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__date {\n  margin: 0;\n}\n.ds-nav__utility-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__utility-link,\n.ds-nav__utility-link:visited {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__utility-link:hover,\n.ds-nav__utility-link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-nav__masthead {\n  display: grid;\n  grid-template-columns: var(--size-ear) minmax(0, 1fr) var(--size-ear);\n  gap: var(--space-5);\n  align-items: center;\n  padding: var(--space-5);\n}\n.ds-nav__brand {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-2);\n  text-align: center;\n}\n.ds-nav__tagline {\n  display: block;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n/* The two small boxes beside the title: the day's count and the search. */\n.ds-nav__ear {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-nav__ear-value {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-mono);\n  font-size: var(--text-base);\n}\n.ds-nav__search {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: var(--space-2) 0 0;\n}\n.ds-nav__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin: 0;\n  padding: var(--space-2) var(--space-5);\n  list-style: none;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-top: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\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__link {\n  display: block;\n  padding: var(--space-1) var(--space-6);\n  color: var(--color-bar-text);\n  border-radius: var(--radius-control);\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.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#news:target) .ds-nav__link[href=\"#news\"],\n.ds-page:has(#story:target) .ds-nav__link[href=\"#story\"],\n.ds-page:has(#desk:target) .ds-nav__link[href=\"#desk\"],\n.ds-page:has(#tip:target) .ds-nav__link[href=\"#tip\"] {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  text-shadow: none;\n}\n\n/* ---------- breadcrumb ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-2) var(--space-5);\n  list-style: none;\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__sep {\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- section head ---------- */\n/* The strip that heads a column: a label in capitals and a link. */\n.ds-section {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: var(--space-5);\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-radius: var(--radius-panel) var(--radius-panel) 0 0;\n  text-shadow: var(--shadow-text);\n}\n.ds-section__title {\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n}\n.ds-section__more,\n.ds-section__more:visited {\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-decoration: var(--link-decoration);\n}\n\n/* ---------- hero: the lead story ---------- */\n.ds-hero {\n  box-sizing: border-box;\n  overflow: hidden;\n  background: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n}\n.ds-hero__body {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-figure);\n  gap: var(--space-5);\n  align-items: start;\n  padding: var(--space-5);\n}\n.ds-hero__kicker {\n  display: inline-block;\n  margin: 0 0 var(--space-3);\n  padding: 0 var(--space-4);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-hero__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__text {\n  margin: var(--space-3) 0;\n  font-size: var(--text-large);\n}\n.ds-hero__meta {\n  margin: 0 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-5);\n}\n.ds-hero__figure {\n  display: block;\n  width: var(--size-figure);\n  height: var(--size-figure);\n  color: var(--color-border-strong);\n}\n\n/* ---------- page header ---------- */\n/* Title between rules, as the head of a newspaper page. */\n.ds-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-5);\n  padding: var(--space-3) 0 var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-page-header__kicker {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-page-header__text {\n  margin: 0;\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- stats ---------- */\n/* Figures as separate cells, each under a strong rule. */\n.ds-stat {\n  display: flex;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat__item {\n  flex: 1 1 0;\n  min-width: 0;\n  margin: 0;\n  padding: var(--space-3) var(--space-5) var(--space-4);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-stat__value {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n\n/* ---------- prose ---------- */\n.ds-prose {\n  padding: var(--space-2) var(--space-3);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-prose h1 { font-size: var(--text-h1); }\n.ds-prose h2 { font-size: var(--text-h2); }\n.ds-prose h3 { font-size: var(--text-h3); color: var(--color-heading-alt); }\n.ds-prose p {\n  margin: 0 0 var(--space-5);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-5);\n  padding: 0 0 0 var(--space-6);\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-base);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n}\n.ds-prose__byline {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- buttons ---------- */\n.ds-button {\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-1) var(--space-5);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  white-space: nowrap;\n  transition: var(--transition);\n  cursor: pointer;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n/* Destructive action: the secondary capsule with a danger rim and a\n   lamp. The label keeps the secondary text colour. */\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: var(--color-danger);\n}\n.ds-button--danger::before {\n  content: \"\";\n  display: inline-block;\n  width: var(--size-led);\n  height: var(--size-led);\n  margin-right: var(--space-3);\n  background: var(--color-danger);\n  border-radius: var(--radius-pill);\n  vertical-align: middle;\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  box-shadow: none;\n  cursor: default;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n  padding: var(--space-4) 0 0;\n}\n\n/* ---------- form ---------- */\n.ds-form {\n  margin: 0;\n  padding: var(--space-4) var(--space-5);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: 0;\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: var(--size-label) minmax(0, 1fr);\n  column-gap: var(--space-5);\n  align-items: start;\n  padding: var(--space-2) 0;\n}\n.ds-form__label {\n  padding-top: var(--space-2);\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  display: block;\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  color: var(--color-text-muted);\n}\n.ds-form__input {\n  box-sizing: border-box;\n  width: var(--size-field);\n  max-width: 100%;\n  margin: 0;\n  padding: var(--space-1) var(--space-4);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-form__input:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input--small {\n  width: var(--size-search);\n}\n.ds-form__input--auto {\n  width: auto;\n}\n.ds-form__input--area {\n  width: 100%;\n  height: var(--size-area);\n  resize: vertical;\n}\n.ds-form__input.is-invalid {\n  border-color: var(--color-danger);\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__error {\n  display: inline-block;\n  margin: var(--space-2) 0 0;\n  padding: 0 var(--space-4);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border: var(--border-width) var(--border-style) var(--color-danger);\n  border-radius: var(--radius-pill);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-1) 0;\n}\n.ds-form__checkbox {\n  margin: 0;\n}\n.ds-form__actions {\n  display: flex;\n  gap: var(--space-4);\n  padding: var(--space-5) 0 var(--space-2) calc(var(--size-label) + var(--space-5));\n}\n\n/* ---------- tabs ---------- */\n/* Capsules on a rule; the current one is filled like the bar. */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0 0 var(--space-3);\n  list-style: none;\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-1) var(--space-5);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  text-decoration: var(--link-decoration-quiet);\n  text-shadow: var(--shadow-text);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-color: var(--color-border-strong);\n}\n\n/* ---------- table ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  border-spacing: 0;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-base);\n}\n.ds-table th {\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-align: left;\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface);\n  color: var(--color-text);\n}\n.ds-table tr:nth-child(even) td {\n  background: var(--color-surface-alt);\n}\n.ds-table th.ds-table__num,\n.ds-table td.ds-table__num {\n  text-align: right;\n}\n.ds-table td.ds-table__num {\n  font-family: var(--font-mono);\n}\n.ds-table__caption {\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- list ---------- */\n/* Stories under a column head, divided by dotted rules. */\n.ds-list {\n  flex: 1 1 auto;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: 0;\n}\n.ds-list__item {\n  padding: var(--space-4) var(--space-4);\n  border-bottom: var(--border-width) dotted var(--color-border);\n}\n.ds-list__item:last-child {\n  border-bottom: 0;\n}\n.ds-list__title {\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}\n.ds-list__text {\n  display: block;\n  margin-top: var(--space-2);\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-2);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n/* The wire: one line per item, the time in a gutter at the left. */\n.ds-list--wire,\n.ds-list--compact {\n  border: 0;\n}\n.ds-list--wire .ds-list__item {\n  display: grid;\n  grid-template-columns: var(--size-time) minmax(0, 1fr);\n  column-gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n}\n.ds-list__time {\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-list--wire .ds-list__title,\n.ds-list--compact .ds-list__title {\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-list--compact .ds-list__item {\n  padding: var(--space-3) var(--space-4);\n}\n.ds-list--compact .ds-list__meta {\n  display: inline;\n}\n\n/* ---------- panel ---------- */\n.ds-panel {\n  box-sizing: border-box;\n  overflow: hidden;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\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  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-panel__body {\n  padding: var(--space-4) var(--space-5) var(--space-5);\n}\n.ds-panel__body > :first-child { margin-top: 0; }\n.ds-panel__body > :last-child { margin-bottom: 0; }\n.ds-panel__text {\n  margin: 0 0 var(--space-4);\n}\n.ds-panel__list {\n  margin: 0;\n  padding: 0 0 0 var(--space-6);\n}\n.ds-panel__small {\n  margin: var(--space-4) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-panel__option {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-1) 0;\n}\n.ds-panel__field {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-panel__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n  padding-top: var(--space-4);\n}\n.ds-panel--alt .ds-panel__title {\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n}\n/* Inverted panel: the one block in the opposite tone. Everything in it,\n   links included, takes the inverse text colour. */\n.ds-panel--inverse {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n}\n.ds-panel--inverse .ds-panel__title {\n  padding-top: var(--space-4);\n  background: transparent;\n  color: var(--color-inverse-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  text-transform: var(--heading-transform);\n  text-shadow: none;\n}\n.ds-panel--inverse .ds-panel__small,\n.ds-panel--inverse .ds-link,\n.ds-panel--inverse .ds-link:visited,\n.ds-panel--inverse .ds-link.is-visited,\n.ds-panel--inverse .ds-link:hover,\n.ds-panel--inverse .ds-link.is-hover {\n  color: var(--color-inverse-text);\n}\n.ds-panel--inverse .ds-link {\n  text-decoration: underline;\n}\n\n/* ---------- sidebar ---------- */\n.ds-sidebar {\n  overflow: hidden;\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: var(--space-2) 0 var(--space-3);\n  list-style: none;\n}\n.ds-sidebar__item {\n  padding: var(--space-2) var(--space-4);\n}\n\n/* ---------- grid ---------- */\n/* Four cells across the sheet, each under a strong rule. */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  padding: var(--space-4) var(--space-5) var(--space-5);\n  background: var(--color-fill-4);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: 0 0 var(--radius-page) var(--radius-page);\n}\n.ds-grid__cell--1 { background: var(--color-fill-1); }\n.ds-grid__cell--2 { background: var(--color-fill-2); }\n.ds-grid__cell--3 { background: var(--color-fill-3); }\n.ds-grid__kicker {\n  display: block;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n.ds-grid__title {\n  margin: var(--space-2) 0;\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  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-grid__title .ds-link,\n.ds-grid__title .ds-link:visited {\n  color: var(--color-heading);\n}\n.ds-grid__text {\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- badge ---------- */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-3);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-pill);\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  text-transform: var(--ui-transform);\n  vertical-align: baseline;\n}\n.ds-badge--count {\n  padding: 0;\n  background: transparent;\n  color: var(--color-text-muted);\n  font-weight: var(--weight-body);\n}\n/* Status labels: a lamp in the status colour on a plain chip. The\n   lamp has a rim in the text colour so that it shows on any chip, and the\n   status colour never carries text. */\n.ds-badge--alt,\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  background: var(--color-surface);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-weight: var(--weight-body);\n}\n.ds-badge--alt::before,\n.ds-badge--success::before,\n.ds-badge--warning::before,\n.ds-badge--danger::before {\n  content: \"\";\n  display: inline-block;\n  width: var(--size-led);\n  height: var(--size-led);\n  margin-right: var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-text);\n  border-radius: var(--radius-pill);\n  vertical-align: middle;\n}\n.ds-badge--alt { border-color: var(--color-accent-alt); }\n.ds-badge--success { border-color: var(--color-success); }\n.ds-badge--warning { border-color: var(--color-warning); }\n.ds-badge--danger { border-color: var(--color-danger); }\n.ds-badge--alt::before { background: var(--color-accent-alt); }\n.ds-badge--success::before { background: var(--color-success); }\n.ds-badge--warning::before { background: var(--color-warning); }\n.ds-badge--danger::before { background: var(--color-danger); }\n\n/* ---------- notice ---------- */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-5);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border-color: var(--color-danger);\n}\n.ds-notice__title {\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}\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n\n/* ---------- pagination ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-4) 0 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-pagination__link,\n.ds-pagination__current {\n  display: block;\n  padding: 0 var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-pagination__current {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-border-strong);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- dialog ---------- */\n/* A small window in the page flow, on a flat backdrop. */\n.ds-dialog__backdrop {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: var(--space-6) var(--space-5);\n  background: var(--color-overlay);\n  border: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog {\n  box-sizing: border-box;\n  width: var(--size-dialog);\n  max-width: 100%;\n  overflow: hidden;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-5);\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  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-dialog__body {\n  padding: var(--space-5);\n}\n.ds-dialog__text {\n  margin: 0 0 var(--space-5);\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-4);\n}\n\n/* ---------- empty ---------- */\n.ds-empty {\n  padding: var(--space-5) var(--space-5);\n  background: var(--color-surface-alt);\n  border: var(--border-width) dotted var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  text-align: center;\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-5);\n  color: var(--color-text-muted);\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  display: block;\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-footer__bar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-2) var(--space-6);\n  margin: 0;\n  padding: var(--space-3) var(--space-5);\n  list-style: none;\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-footer__link,\n.ds-footer__link:visited {\n  color: var(--color-inverse-text);\n  text-decoration: underline;\n}\n.ds-footer__band {\n  margin: 0;\n  padding: var(--space-2) var(--space-5);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-align: center;\n  text-shadow: var(--shadow-text);\n}\n\n/* current item also carries a marker that no token set can remove */\n.ds-nav__link.is-current::before,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"]::before,\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"]::before,\n.ds-page:has(#news:target) .ds-nav__link[href=\"#news\"]::before,\n.ds-page:has(#story:target) .ds-nav__link[href=\"#story\"]::before,\n.ds-page:has(#desk:target) .ds-nav__link[href=\"#desk\"]::before,\n.ds-page:has(#tip:target) .ds-nav__link[href=\"#tip\"]::before {\n  content: \">\";\n  margin-right: var(--space-1);\n}\n\n/* ---------- period components: menu, progress, accordion, tooltip, carousel, avatar ---------- */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 20;\n  display: none;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-panel);\n  text-shadow: none;\n  text-transform: none;\n}\n.ds-menu:hover > .ds-menu__list,\n.ds-menu:focus-within > .ds-menu__list {\n  display: block;\n}\n.ds-menu__link {\n  display: block;\n  padding: var(--space-1) var(--space-3);\n  color: var(--color-link);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-decoration: var(--link-decoration-quiet);\n  white-space: nowrap;\n}\n.ds-menu__link:hover,\n.ds-menu__link:focus-visible {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n}\n.ds-meter {\n  margin: 0 0 var(--space-3);\n}\n.ds-meter__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-1);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-progress {\n  display: block;\n  height: var(--space-3);\n  overflow: hidden;\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n}\n.ds-progress__bar {\n  display: block;\n  height: 100%;\n  background-color: var(--color-accent);\n  background-image: repeating-linear-gradient(90deg, transparent 0, transparent var(--size-seg), var(--color-surface-strong) var(--size-seg), var(--color-surface-strong) var(--size-seg-gap));\n}\n.ds-progress--70 .ds-progress__bar { width: 70%; }\n.ds-accordion {\n  margin: 0 0 var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-tooltip {\n  position: relative;\n  border-bottom: var(--border-width) dotted var(--color-border-strong);\n  cursor: help;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: 100%;\n  left: 0;\n  z-index: 20;\n  display: none;\n  width: max-content;\n  max-width: var(--size-tip);\n  padding: var(--space-1) var(--space-2);\n  background: var(--color-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-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  text-shadow: none;\n  text-transform: none;\n}\n.ds-tooltip:hover > .ds-tooltip__tip,\n.ds-tooltip:focus > .ds-tooltip__tip,\n.ds-tooltip:focus-within > .ds-tooltip__tip {\n  display: block;\n}\n.ds-carousel {\n  margin: 0 0 var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n}\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  margin-right: var(--space-2);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-shadow: none;\n  vertical-align: middle;\n}\n\n:root {\n  --size-tip: 220px;\n  --size-menu: 150px;\n  --size-avatar: 24px;\n  --size-seg: 6px;\n  --size-seg-gap: 8px;\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>Y2K futurism news sheet, 1999 to 2003: 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__dateline\">\n      <p class=\"ds-nav__date\">Thursday 31 May 2001 | issue 214 | updated 14:20</p>\n      <ul class=\"ds-nav__utility-links\">\n        <li><a class=\"ds-nav__utility-link\" href=\"#desk\">Signed in as rowan</a></li>\n        <li><a class=\"ds-nav__utility-link\" href=\"#desk\">My desk</a></li>\n        <li><a class=\"ds-nav__utility-link\" href=\"#tip\">Send a tip</a></li>\n      </ul>\n    </div>\n    <div class=\"ds-nav__masthead\">\n      <p class=\"ds-nav__ear\">Today on the wire <span class=\"ds-nav__ear-value\">14 stories, 3 reviews</span></p>\n      <div class=\"ds-nav__brand\">\n        <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n          <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M3.34 17A10 4 -30 1 1 20.66 7A10 4 -30 1 1 3.34 17z\"/><circle cx=\"12\" cy=\"12\" r=\"3.6\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"20.3\" cy=\"7.2\" r=\"1.7\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n          <span class=\"ds-brand__name\">chronoskin</span>\n        </a>\n        <span class=\"ds-nav__tagline\">hardware, software and the wire, every weekday</span>\n      </div>\n      <form class=\"ds-nav__ear\" action=\"#news\">\n        <label for=\"q\">Search the archive</label>\n        <div class=\"ds-nav__search\">\n          <input class=\"ds-form__input ds-form__input--small\" id=\"q\" type=\"text\">\n          <button class=\"ds-button\" type=\"button\">Go</button>\n        </div>\n      </form>\n    </div>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Front page</a></li>\n      <li class=\"ds-menu\"><a class=\"ds-nav__link\" href=\"#news\">Archive</a><ul class=\"ds-menu__list\"><li><a class=\"ds-menu__link\" href=\"#news\">This week</a></li><li><a class=\"ds-menu__link\" href=\"#story\">Lead stories</a></li><li><a class=\"ds-menu__link\" href=\"#desk\">By desk</a></li></ul></li>\n      <li><a class=\"ds-nav__link\" href=\"#story\">Lead story</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#desk\">My desk</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#tip\">Send a tip</a></li>\n    </ul>\n  </header>\n\n  <!-- Front page: lead story and wire, three desks, bench table, reports. -->\n  <section class=\"ds-view ds-view--home\" id=\"home\">\n    <div class=\"ds-page__grid\">\n\n      <section class=\"ds-hero ds-page__span2\" data-component=\"hero\">\n        <div class=\"ds-hero__body\">\n          <div>\n            <span class=\"ds-hero__kicker\">Lead story</span>\n            <h1 class=\"ds-hero__title\">One gigahertz in a shirt pocket: the first handhelds that do not wait</h1>\n            <p class=\"ds-hero__text\">Three makers showed pocket machines this week that start in a second and run a day on two cells. We had all three on the bench.</p>\n            <p class=\"ds-hero__meta\">By the hardware desk | 31 May, 09:40 | 86 comments</p>\n            <div class=\"ds-hero__actions\">\n              <a class=\"ds-button\" href=\"#story\">Read the story</a>\n              <a class=\"ds-link\" href=\"#news\">More from hardware</a>\n            </div>\n          </div>\n          <svg class=\"ds-hero__figure\" viewBox=\"0 0 110 110\" aria-hidden=\"true\">\n            <rect x=\"25\" y=\"25\" width=\"60\" height=\"60\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <rect x=\"37\" y=\"37\" width=\"36\" height=\"36\" fill=\"none\" stroke=\"currentColor\"/>\n            <rect x=\"47\" y=\"47\" width=\"16\" height=\"16\" fill=\"currentColor\"/>\n            <path d=\"M33 25V8M44 25V8M55 25V8M66 25V8M77 25V8M33 85v17M44 85v17M55 85v17M66 85v17M77 85v17M25 33H8M25 44H8M25 55H8M25 66H8M25 77H8M85 33h17M85 44h17M85 55h17M85 66h17M85 77h17\" fill=\"none\" stroke=\"currentColor\"/>\n            <circle cx=\"31\" cy=\"31\" r=\"2\" fill=\"currentColor\"/>\n          </svg>\n        </div>\n      </section>\n\n      <section class=\"ds-panel\" data-component=\"panel\">\n        <h2 class=\"ds-panel__title\">The wire</h2>\n        <ul class=\"ds-list ds-list--wire\">\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">14:20</span><a class=\"ds-link ds-list__title\" href=\"#story\">Chip maker cuts prices for the third time this year</a></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">13:05</span><a class=\"ds-link ds-list__title\" href=\"#story\">Browser beta adds tabs along the top</a></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">11:48</span><a class=\"ds-link ds-list__title\" href=\"#story\">Cable firm doubles upload speed in two cities</a></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">09:12</span><a class=\"ds-link ds-list__title\" href=\"#story\">Flat panels fall under the price of tubes</a></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">08:40</span><a class=\"ds-link ds-list__title\" href=\"#story\">Worm slows mail servers across the campus net</a></li>\n        </ul>\n      </section>\n\n      <div class=\"ds-block\">\n        <div class=\"ds-section\">\n          <h2 class=\"ds-section__title\">Hardware</h2>\n          <a class=\"ds-section__more\" href=\"#news\">more</a>\n        </div>\n        <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">Graphics cards: six boards, one winner</a> <span class=\"ds-badge\">New</span>\n              <span class=\"ds-list__text\">The mid-price board beats last year's flagship in every test but one.</span>\n              <span class=\"ds-list__meta\">Review | 30 May | 54 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">A quiet case for a loud processor</a>\n              <span class=\"ds-list__text\">Copper, two slow fans and a duct made from card.</span>\n              <span class=\"ds-list__meta\">Workbench | 29 May | 19 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">Why your second monitor flickers</a>\n              <span class=\"ds-list__text\">It is the cable, and the fix costs less than lunch.</span>\n              <span class=\"ds-list__meta\">How to | 28 May | 41 comments</span>\n            </li>\n        </ul>\n      </div>\n\n      <div class=\"ds-block\">\n        <div class=\"ds-section\">\n          <h2 class=\"ds-section__title\">Software</h2>\n          <a class=\"ds-section__more\" href=\"#news\">more</a>\n        </div>\n        <ul class=\"ds-list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">The player that fits on a floppy</a>\n              <span class=\"ds-list__text\">Version 2.6 reads every common format in 1.4 megabytes.</span>\n              <span class=\"ds-list__meta\">Review | 31 May | 33 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">Ten utilities we install first</a>\n              <span class=\"ds-list__text\">From a better file finder to a clock that sets itself.</span>\n              <span class=\"ds-list__meta\">Round-up | 29 May | 72 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">Skins are not a feature</a>\n              <span class=\"ds-list__text\">A column on software that changes its coat and nothing else.</span>\n              <span class=\"ds-list__meta\">Opinion | 27 May | 118 comments</span>\n            </li>\n        </ul>\n      </div>\n\n      <div class=\"ds-block\">\n        <div class=\"ds-section\">\n          <h2 class=\"ds-section__title\">Networks</h2>\n          <a class=\"ds-section__more\" href=\"#news\">more</a>\n        </div>\n        <ul class=\"ds-list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">Wireless at home for under a hundred</a>\n              <span class=\"ds-list__text\">Two cards and an access point, set up in an evening.</span>\n              <span class=\"ds-list__meta\">How to | 30 May | 27 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">The last mile is still copper</a>\n              <span class=\"ds-list__text\">What the cable and telephone firms promise for next year.</span>\n              <span class=\"ds-list__meta\">Report | 28 May | 16 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#story\">Sharing one line between four machines</a>\n              <span class=\"ds-list__text\">A retired desktop makes a patient router.</span>\n              <span class=\"ds-list__meta\">Workbench | 25 May | 38 comments</span>\n            </li>\n        </ul>\n      </div>\n\n      <div class=\"ds-block ds-page__span2\">\n        <div class=\"ds-section\">\n          <h2 class=\"ds-section__title\">On the bench this week</h2>\n          <a class=\"ds-section__more\" href=\"#news\">all results</a>\n        </div>\n        <table class=\"ds-table\">\n          <thead>\n            <tr><th>Board</th><th>Chip</th><th class=\"ds-table__num\">Frames per second</th><th class=\"ds-table__num\">Price</th><th class=\"ds-table__num\">Score</th></tr>\n          </thead>\n          <tbody>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Vector 64 pro</a></td><td>V3</td><td class=\"ds-table__num\">118.4</td><td class=\"ds-table__num\">329</td><td class=\"ds-table__num\">9.1</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Halo 32 dual</a></td><td>H2</td><td class=\"ds-table__num\">104.9</td><td class=\"ds-table__num\">249</td><td class=\"ds-table__num\">8.8</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Prism twin</a></td><td>P400</td><td class=\"ds-table__num\">97.2</td><td class=\"ds-table__num\">199</td><td class=\"ds-table__num\">8.4</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Vector 32</a></td><td>V2</td><td class=\"ds-table__num\">81.0</td><td class=\"ds-table__num\">149</td><td class=\"ds-table__num\">7.9</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Ember value</a></td><td>E1</td><td class=\"ds-table__num\">62.7</td><td class=\"ds-table__num\">99</td><td class=\"ds-table__num\">6.5</td></tr>\n          </tbody>\n        </table>\n      </div>\n\n      <section class=\"ds-panel ds-panel--inverse\">\n        <h2 class=\"ds-panel__title\">Reader poll</h2>\n        <div class=\"ds-panel__body\">\n<div class=\"ds-meter\"><p class=\"ds-meter__label\"><span>Wire load</span><span>72%</span></p><div class=\"ds-progress ds-progress--70\" role=\"progressbar\" aria-label=\"Wire load\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"72\"><span class=\"ds-progress__bar\"></span></div></div>\n<p class=\"ds-meter__label\"><span class=\"ds-tooltip\" tabindex=\"0\">Embargo<span class=\"ds-tooltip__tip\" role=\"tooltip\">Held until 06:00 local time</span></span></p>\n\n          <p class=\"ds-panel__text\">What do you upgrade first?</p>\n          <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> Memory</label>\n          <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> Graphics card</label>\n          <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> The line out of the house</label>\n          <div class=\"ds-panel__actions\">\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Vote</button>\n            <a class=\"ds-link\" href=\"#news\">Results</a>\n          </div>\n        </div>\n      </section>\n\n      <div class=\"ds-grid ds-page__span3\" data-component=\"grid\">\n        <div class=\"ds-grid__cell ds-grid__cell--1\">\n          <span class=\"ds-grid__kicker\">Special report</span>\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#story\">The year of the pocket machine</a></h3>\n          <p class=\"ds-grid__text\">Six parts, <a class=\"ds-link ds-link--quiet\" href=\"#news\">part four today</a></p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <span class=\"ds-grid__kicker\">Buyer's guide</span>\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#story\">A whole system for 900</a></h3>\n          <p class=\"ds-grid__text\">Updated monthly, <a class=\"ds-link ds-link--quiet\" href=\"#news\">past builds</a></p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--3\">\n          <span class=\"ds-grid__kicker\">Column</span>\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#story\">Notes from the server room</a></h3>\n          <p class=\"ds-grid__text\">Every Friday, <a class=\"ds-link ds-link--quiet\" href=\"#news\">all columns</a></p>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <span class=\"ds-grid__kicker\">Readers</span>\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#tip\">Seen something? Tell the desk</a></h3>\n          <p class=\"ds-grid__text\">Tips are read daily, <a class=\"ds-link ds-link--quiet\" href=\"#desk\">your tips</a></p>\n        </div>\n      </div>\n\n    </div>\n  </section>\n\n  <!-- Archive: every story, as a table. -->\n  <section class=\"ds-view\" id=\"news\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#news\">Archive</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">May 2001</li>\n    </ol>\n    <div class=\"ds-page__grid ds-page__grid--inner\">\n      <div class=\"ds-page-header ds-page__span3\">\n        <div>\n          <span class=\"ds-page-header__kicker\">Archive</span>\n          <h1 class=\"ds-page-header__title\">Every story since issue 1</h1>\n          <p class=\"ds-page-header__text\">2,140 stories, reviews and columns, newest first.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button\" href=\"#tip\">Send a tip</a>\n        </div>\n      </div>\n\n      <div class=\"ds-page__main\">\n        <ul class=\"ds-tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#news\">All desks</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Hardware</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Software</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Networks</a></li>\n        </ul>\n        <table class=\"ds-table\">\n          <thead>\n            <tr><th>Headline</th><th>Desk</th><th>Date</th><th class=\"ds-table__num\">Comments</th></tr>\n          </thead>\n          <tbody>\n            <tr><td><a class=\"ds-link\" href=\"#story\">One gigahertz in a shirt pocket</a> <span class=\"ds-badge\">New</span></td><td>Hardware</td><td>31 May</td><td class=\"ds-table__num\">86</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">The player that fits on a floppy</a></td><td>Software</td><td>31 May</td><td class=\"ds-table__num\">33</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Graphics cards: six boards, one winner</a></td><td>Hardware</td><td>30 May</td><td class=\"ds-table__num\">54</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Wireless at home for under a hundred</a></td><td>Networks</td><td>30 May</td><td class=\"ds-table__num\">27</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Ten utilities we install first</a></td><td>Software</td><td>29 May</td><td class=\"ds-table__num\">72</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">A quiet case for a loud processor</a></td><td>Hardware</td><td>29 May</td><td class=\"ds-table__num\">19</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">The last mile is still copper</a></td><td>Networks</td><td>28 May</td><td class=\"ds-table__num\">16</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Why your second monitor flickers</a></td><td>Hardware</td><td>28 May</td><td class=\"ds-table__num\">41</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Skins are not a feature</a></td><td>Software</td><td>27 May</td><td class=\"ds-table__num\">118</td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#story\">Sharing one line between four machines</a></td><td>Networks</td><td>25 May</td><td class=\"ds-table__num\">38</td></tr>\n          </tbody>\n        </table>\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#news\">&lt;&lt; Newer</a></li>\n          <li><span class=\"ds-pagination__current\">1</span></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#news\">2</a></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#news\">3</a></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#news\">4</a></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#news\">Older &gt;&gt;</a></li>\n        </ul>\n      </div>\n\n      <div class=\"ds-page__side\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Desks</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">Hardware</a> <span class=\"ds-badge ds-badge--count\">(812)</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">Software</a> <span class=\"ds-badge ds-badge--count\">(694)</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">Networks</a> <span class=\"ds-badge ds-badge--count\">(377)</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">Columns</a> <span class=\"ds-badge ds-badge--count\">(257)</span></li>\n          </ul>\n          <h2 class=\"ds-sidebar__title\">By month</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">May 2001</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">April 2001</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">March 2001</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#news\">All 26 months</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Most read this week</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Skins are not a feature</a> <span class=\"ds-list__meta\">(118)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">One gigahertz in a shirt pocket</a> <span class=\"ds-list__meta\">(86)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Ten utilities we install first</a> <span class=\"ds-list__meta\">(72)</span></li>\n          </ul>\n        </section>\n      </div>\n    </div>\n  </section>\n\n  <!-- Lead story: an article page. -->\n  <section class=\"ds-view\" id=\"story\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#news\">Hardware</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">One gigahertz in a shirt pocket</li>\n    </ol>\n    <div class=\"ds-page__grid ds-page__grid--inner\">\n      <div class=\"ds-page__main\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>One gigahertz in a shirt pocket: the first handhelds that do not wait</h1>\n          <p class=\"ds-prose__byline\">By the hardware desk | 31 May 2001, 09:40 | 86 comments</p>\n          <p class=\"ds-prose__lead\">Three makers showed pocket machines this week that start in a second and run a day on two cells. We had all three on the bench.</p>\n          <h2>What changed</h2>\n          <p>Until this spring a handheld was a patient thing. The new chips draw a <strong>tenth of the power</strong> at rest, so the makers can spend the rest on speed.</p>\n          <ul>\n            <li>Start-up in under one second</li>\n            <li>A full day on two ordinary cells</li>\n            <li>A screen you can read in daylight</li>\n          </ul>\n          <h2>On the bench</h2>\n          <p>We ran the same address book, the same map and the same long document on all three. The differences are small and the prices are not.</p>\n          <h3>Running the test yourself</h3>\n          <p>The bench script is in the archive. Copy it to the machine and start it with <code>bench --all --quiet</code>; it writes one line per test.</p>\n        </article>\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Read next</h2>\n            <a class=\"ds-section__more\" href=\"#news\">archive</a>\n          </div>\n          <p class=\"ds-links\" data-component=\"links\">\n            <a class=\"ds-link\" href=\"#story\">Six boards, one winner</a>\n            <a class=\"ds-link is-visited\" href=\"#story\">A quiet case</a>\n            <a class=\"ds-link is-hover\" href=\"#story\">Wireless at home</a>\n            <a class=\"ds-link is-active\" href=\"#tip\">Send a tip</a>\n            <a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a>\n          </p>\n        </div>\n      </div>\n\n      <div class=\"ds-page__side\">\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">In this story</h2>\n          <div class=\"ds-panel__body\">\n            <ol class=\"ds-panel__list\">\n              <li>What changed</li>\n              <li>On the bench</li>\n              <li>Running the test yourself</li>\n            </ol>\n            <p class=\"ds-panel__small\">Part four of the special report on pocket machines.</p>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">From the wire</h2>\n          <ul class=\"ds-list ds-list--wire\">\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">14:20</span><a class=\"ds-link ds-list__title\" href=\"#story\">Chip maker cuts prices for the third time</a></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">09:12</span><a class=\"ds-link ds-list__title\" href=\"#story\">Flat panels fall under the price of tubes</a></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__time\">08:40</span><a class=\"ds-link ds-list__title\" href=\"#story\">Worm slows mail servers across the campus net</a></li>\n          </ul>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Talk back</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">86 readers have had their say.</p>\n            <a class=\"ds-button ds-button--secondary\" href=\"#desk\">Join in</a>\n          </div>\n        </section>\n      </div>\n    </div>\n  </section>\n\n  <!-- My desk: the reader's own page. -->\n  <section class=\"ds-view\" id=\"desk\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#desk\">Readers</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">My desk</li>\n    </ol>\n    <div class=\"ds-page__grid ds-page__grid--inner\">\n      <div class=\"ds-page-header ds-page__span3\" data-component=\"page-header\">\n        <div>\n          <span class=\"ds-page-header__kicker\">Readers</span>\n          <h1 class=\"ds-page-header__title\">My desk</h1>\n          <p class=\"ds-page-header__text\">Tips you sent in, what became of them, and the stories you kept.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button\" href=\"#tip\">Send a tip</a>\n        </div>\n      </div>\n\n      <ul class=\"ds-stat ds-page__span3\" data-component=\"stats\">\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">12</span><span class=\"ds-stat__label\">Tips sent</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">5</span><span class=\"ds-stat__label\">Became stories</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">214</span><span class=\"ds-stat__label\">Comments posted</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">26</span><span class=\"ds-stat__label\">Issues read</span></li>\n      </ul>\n\n      <div class=\"ds-page__main\">\n        <div class=\"ds-notices\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">Note:</span> The comment boards are read-only on Sunday between 02:00 and 04:00.</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Error:</span> The picture sent with your last tip could not be read. Send it again as a smaller file.</p>\n        </div>\n\n        <div class=\"ds-block\">\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#desk\">My tips</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#desk\">Comments</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#desk\">Settings</a></li>\n          </ul>\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr><th>Tip</th><th>Desk</th><th class=\"ds-table__num\">Sent</th><th>Status</th><th>&nbsp;</th></tr>\n            </thead>\n            <tbody>\n              <tr><td><a class=\"ds-link\" href=\"#story\">Price cut on the Vector boards</a></td><td>Hardware</td><td class=\"ds-table__num\">29.05</td><td><span class=\"ds-badge ds-badge--success\" data-component=\"badge\">Published</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#story\">Read</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#desk\">Cable trial in the north end</a></td><td>Networks</td><td class=\"ds-table__num\">28.05</td><td><span class=\"ds-badge ds-badge--warning\">In review</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#tip\">Edit</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#desk\">Browser beta screenshots</a></td><td>Software</td><td class=\"ds-table__num\">27.05</td><td><span class=\"ds-badge ds-badge--danger\">Rejected</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#desk\">Remove</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#story\">Quiet fan from a parts bin</a></td><td>Hardware</td><td class=\"ds-table__num\">21.05</td><td><span class=\"ds-badge ds-badge--success\">Published</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#story\">Read</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#desk\">Free mail service closing</a></td><td>Networks</td><td class=\"ds-table__num\">17.05</td><td><span class=\"ds-badge ds-badge--warning\">In review</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#tip\">Edit</a></td></tr>\n            </tbody>\n          </table>\n          <div class=\"ds-buttons\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"button\">Send a tip</button>\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Mark all read</button>\n            <button class=\"ds-button ds-button--danger\" type=\"button\">Remove rejected</button>\n            <button class=\"ds-button is-disabled\" type=\"button\" disabled>Withdraw</button>\n          </div>\n        </div>\n\n        <div class=\"ds-dialog__backdrop\">\n          <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n            <h2 class=\"ds-dialog__title\" id=\"dlg-title\">Remove tip</h2>\n            <div class=\"ds-dialog__body\">\n              <p class=\"ds-dialog__text\">Take \"Browser beta screenshots\" off your desk? The news desk keeps its own copy.</p>\n              <div class=\"ds-dialog__actions\">\n                <a class=\"ds-button ds-button--danger\" href=\"#desk\">Remove</a>\n                <a class=\"ds-button ds-button--secondary\" href=\"#desk\">Keep it</a>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-page__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">My desk</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#desk\">Tips and comments</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#desk\">Mail me the daily issue</a> <span class=\"ds-badge ds-badge--alt\">On</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#desk\">Profile</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Sign out</a></li>\n          </ul>\n        </aside>\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Kept stories</h2>\n          </div>\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <p class=\"ds-empty__text\">You have not kept a story yet.</p>\n            <a class=\"ds-button ds-button--secondary\" href=\"#news\">Browse the archive</a>\n          </div>\n        </div>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Your last comments</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Skins are not a feature</a> <span class=\"ds-list__meta\">(3 replies)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Six boards, one winner</a> <span class=\"ds-list__meta\">(1 reply)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">The last mile is still copper</a></li>\n          </ul>\n        </section>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Desk rules</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">Tips stay on your desk for 90 days. Rejected tips can be sent again once.</p>\n            <p class=\"ds-panel__small\"><a class=\"ds-link\" href=\"#tip\">How tips are handled</a></p>\n          </div>\n        </section>\n      </div>\n    </div>\n  </section>\n\n  <!-- Send a tip: the form page. -->\n  <section class=\"ds-view\" id=\"tip\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#desk\">Readers</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">Send a tip</li>\n    </ol>\n    <div class=\"ds-page__grid ds-page__grid--inner\">\n      <div class=\"ds-page-header ds-page__span3\">\n        <div>\n          <span class=\"ds-page-header__kicker\">Readers</span>\n          <h1 class=\"ds-page-header__title\">Send a tip</h1>\n          <p class=\"ds-page-header__text\">Seen a price cut, a leak or a launch? The news desk reads every tip.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#desk\">Back to my desk</a>\n        </div>\n      </div>\n\n      <div class=\"ds-page__main\">\n        <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Error:</span> One field needs another look before the tip can be sent.</p>\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Your tip</h2>\n            <a class=\"ds-section__more\" href=\"#story\">how tips are handled</a>\n          </div>\n          <form class=\"ds-form\" data-component=\"form\" action=\"#tip\">\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-head\">Headline</label>\n              <div><input class=\"ds-form__input\" id=\"f-head\" type=\"text\" value=\"Cable trial in the north end\"></div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-url\">Source <span class=\"ds-form__hint\">A web address</span></label>\n              <div>\n                <input class=\"ds-form__input is-invalid\" id=\"f-url\" type=\"text\" value=\"www.example\">\n                <span class=\"ds-form__error\">Enter a complete address.</span>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-desk\">Desk</label>\n              <div>\n                <select class=\"ds-form__input ds-form__input--auto\" id=\"f-desk\">\n                  <option>Networks</option>\n                  <option>Hardware</option>\n                  <option>Software</option>\n                </select>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-seen\">Seen on <span class=\"ds-form__hint\">Day and month</span></label>\n              <div><input class=\"ds-form__input ds-form__input--small\" id=\"f-seen\" type=\"text\" value=\"28.05\"></div>\n            </div>\n            <div class=\"ds-form__row\">\n              <span class=\"ds-form__label\">Options</span>\n              <div>\n                <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Credit me by name</label>\n                <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\"> Mail me if it runs</label>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-note\">What you saw <span class=\"ds-form__hint\">A few lines</span></label>\n              <div><textarea class=\"ds-form__input ds-form__input--area\" id=\"f-note\"></textarea></div>\n            </div>\n            <div class=\"ds-form__actions\">\n              <button class=\"ds-button\" type=\"button\">Send tip</button>\n              <a class=\"ds-button ds-button--secondary\" href=\"#desk\">Cancel</a>\n            </div>\n          </form>\n        </div>\n      </div>\n\n      <div class=\"ds-page__side\">\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Before you send</h2>\n          <div class=\"ds-panel__body\">\n            <ol class=\"ds-panel__list\">\n              <li>Say where you saw it.</li>\n              <li>One tip per form.</li>\n              <li>No press releases.</li>\n            </ol>\n            <p class=\"ds-panel__small\">The desk answers within two days.</p>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Tips that ran this week</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Price cut on the Vector boards</a></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Quiet fan from a parts bin</a></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#story\">Upload speed doubled in two cities</a></li>\n          </ul>\n        </section>\n      </div>\n    </div>\n  </section>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <ul class=\"ds-footer__bar\">\n      <li><a class=\"ds-footer__link\" href=\"#home\">About chronoskin</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#news\">Archive</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#tip\">Send a tip</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#home\">Advertise</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#home\">Contact the desk</a></li>\n    </ul>\n    <p class=\"ds-footer__band\">Copyright 2001 chronoskin. Published every weekday. All rights reserved.</p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.y2k-futurism.blog.s08.p02.t01.u02\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"y2k-futurism\",\n    \"years\": [\n      1999,\n      2003\n    ]\n  },\n  \"archetype\": \"blog\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1024,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-yk-8212\",\n  \"short\": \"v1-yk-8212\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #000000;\n  --color-canvas: #cccc99;\n  --color-surface: #cccc99;\n  --color-surface-alt: #c0c090;\n  --color-surface-strong: #999999;\n  --color-bar: #666666;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #999999;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #000000;\n  --color-inverse-text: #ffffff;\n  --color-text: #000000;\n  --color-text-muted: #484848;\n  --color-heading: #000000;\n  --color-heading-alt: #000099;\n  --color-link: #000099;\n  --color-link-quiet: #000000;\n  --color-link-visited: #505050;\n  --color-link-hover: #000000;\n  --color-link-active: #282828;\n  --color-border: #999999;\n  --color-border-strong: #666666;\n  --color-border-muted: #a0a0a0;\n  --color-accent: #99cccc;\n  --color-accent-text: #000000;\n  --color-accent-alt: #3366cc;\n  --color-fill-1: #c8c898;\n  --color-fill-2: #c0c090;\n  --color-fill-3: #99cccc;\n  --color-fill-4: #a0a0a0;\n  --color-button: #3366cc;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #999999;\n  --color-button-secondary-text: #000000;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #666666;\n  --color-disabled: #a0a0a0;\n  --color-disabled-text: #585858;\n  --color-danger: #800000;\n  --color-danger-surface: #c8c898;\n  --color-success: #709000;\n  --color-warning: #ffcc00;\n  --color-notice: #99cccc;\n  --color-notice-text: #000000;\n  --color-focus: #000099;\n  --color-shadow: #282828;\n  --color-overlay: #505050;\n}\n\n/* @part type */\n:root {\n  --font-body: Arial, Helvetica, sans-serif;\n  --font-heading: Arial, Helvetica, sans-serif;\n  --font-ui: Verdana, Geneva, Arial, sans-serif;\n  --font-mono: \"Courier New\", Courier, monospace;\n  --text-base: 11px;\n  --text-small: 9px;\n  --text-ui: 10px;\n  --text-large: 13px;\n  --text-display: 18px;\n  --text-h1: 16px;\n  --text-h2: 13px;\n  --text-h3: 11px;\n  --line-body: normal;\n  --line-heading: normal;\n  --line-display: normal;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 700;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: uppercase;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 3px;\n  --radius-panel: 0;\n  --radius-pill: 3px;\n  --radius-page: 18px;\n  --shadow-panel: 1px 1px 0 color-mix(in srgb, var(--color-shadow) 70%, transparent);\n  --shadow-control: inset 1px 1px 0 color-mix(in srgb, white 45%, transparent), inset -1px -1px 0 color-mix(in srgb, black 35%, transparent);\n  --shadow-control-hover: inset 1px 1px 0 color-mix(in srgb, white 60%, transparent), inset -1px -1px 0 color-mix(in srgb, black 35%, transparent);\n  --shadow-control-pressed: inset 1px 1px 0 color-mix(in srgb, black 35%, transparent), inset -1px -1px 0 color-mix(in srgb, white 45%, transparent);\n  --shadow-dialog: 2px 2px 0 color-mix(in srgb, var(--color-shadow) 70%, transparent);\n  --shadow-text: 1px 1px 0 color-mix(in srgb, var(--color-shadow) 45%, transparent);\n  --fill-page: var(--color-page);\n  --fill-bar: linear-gradient(to bottom, color-mix(in srgb, var(--color-bar) 70%, white) 0, var(--color-bar) 30%, var(--color-bar) 65%, color-mix(in srgb, var(--color-bar) 68%, black) 100%);\n  --fill-bar-alt: linear-gradient(to bottom, color-mix(in srgb, var(--color-bar-alt) 75%, white) 0, var(--color-bar-alt) 35%, var(--color-bar-alt) 70%, color-mix(in srgb, var(--color-bar-alt) 80%, black) 100%);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: linear-gradient(to bottom, color-mix(in srgb, var(--color-button) 78%, white) 0, color-mix(in srgb, var(--color-button) 85%, black) 100%);\n  --fill-button-hover: linear-gradient(to bottom, color-mix(in srgb, var(--color-button) 68%, white) 0, var(--color-button) 100%);\n  --fill-button-secondary: linear-gradient(to bottom, color-mix(in srgb, var(--color-button-secondary) 78%, white) 0, color-mix(in srgb, var(--color-button-secondary) 88%, black) 100%);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
