{
  "id": "v1-yk-1111",
  "long_id": "v1.y2k-futurism.portal.s01.p01.t01.u01",
  "name": "Y2K futurism portal, 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": "portal",
  "mode": "pure",
  "viewport": {
    "width": 1024,
    "fluid": false
  },
  "summary": "The \"techno\" start page that software, music and hardware sites ran around the turn of the millennium: a fixed 740px sheet of deep blue centred on a navy screen, cut into a link column, a main column and a rail of small modules. Bars are black glass, buttons are silver capsules, section headings are small round-shouldered tabs standing on hairlines, and everything is set in 9px to 13px Arial and Verdana with one 18px headline. The shapes were drawn as images at the time and are rebuilt here with gradients, 1px borders and radii; the look gave way to wider, lighter glossy layouts from about 2004.",
  "url": "https://chrono.skin/s/v1-yk-1111",
  "preview_url": "https://chrono.skin/s/v1-yk-1111/specimen.html",
  "files": {
    "STYLE.md": "# Y2K futurism portal, 1999 to 2003\n\n## Summary\n\nThe \"techno\" start page that software, music and hardware sites ran around the turn of the millennium: a fixed 740px sheet of deep blue centred on a navy screen, cut into a link column, a main column and a rail of small modules. Bars are black glass, buttons are silver capsules, section headings are small round-shouldered tabs standing on hairlines, and everything is set in 9px to 13px Arial and Verdana with one 18px headline. The shapes were drawn as images at the time and are rebuilt here with gradients, 1px borders and radii; the look gave way to wider, lighter glossy layouts from about 2004.\n\n## Layout\n\n- The page is not fluid. `--size-page` is 740px; `.ds-page__frame` is a sheet of that width centred horizontally in the viewport (`margin: 0 auto`) with a 1px outline and `--radius-page` corners, and `--fill-page` shows on both sides and below. Do not pin it to the left edge and do not stretch it. All text sits on the sheet; nothing is written directly on the page background.\n- `.ds-page` pads the viewport by `--space-5` (10px) above and `--space-3` (4px) at the sides. Order from the top: `.ds-nav` (utility strip with search, masthead with wordmark and status read-out, glass link bar), then `.ds-page__columns`, then `.ds-footer`. The home page has no breadcrumb.\n- `.ds-page__columns` is three columns padded `--space-4` from the sheet edge: `--size-sidebar` 144px (`.ds-sidebar`), a fluid main column (`.ds-page__main`, 400px at this width) and `--size-rail` 164px (`.ds-page__rail`, a stack of `.ds-panel`). Column gutters and the gap between stacked blocks are both `--space-4` (6px). Columns start at the top and do not stretch to equal height; fill the link column and the rail so that all three end close together, and give a long article a page of its own; `.ds-page__wide` is a full-width row below the columns for a block that has to run the width of the sheet.\n- Inner pages (every page below the home page) keep the same sheet, header and footer but have no hero and no rail. `.ds-breadcrumb` sits directly under the link bar, as the first thing of the page, across the full sheet. Below it `.ds-page__columns--inner` has two columns: the 144px `.ds-sidebar`, now holding the links of the current section, and a 570px main column. The main column opens with `.ds-page-header` in place of the hero, then an optional `.ds-stat` row, then the working blocks stacked `--space-4` apart: `.ds-tabs` touching the `.ds-table` or list they switch, and each form or further block under its own `.ds-section` tab. The link column of an inner page is a `.ds-page__side` stack: the `.ds-sidebar` first, then one to four small `.ds-panel` modules that belong to the page, so that it ends near the main column.\n- Spacing scale: `--space-1` 1px is the vertical padding of buttons, inputs and navigation capsules; `--space-2` 2px is the vertical padding of bars, title strips, tabs and table cells; `--space-3` 4px is the padding of list rows and notices and the gap between grid cells and stat cells; `--space-4` 6px is the side padding of cells and panels, the column gutter and the gap between blocks; `--space-5` 10px is the side padding of bars, buttons and tabs, the gap between paragraphs and the padding of the hero and dialog; `--space-6` 14px is list indent only. There is no step above 14px.\n- Fixed sizes: `--size-figure` 96px is the hero ring graphic; `--size-mark` 26px the tile of the brand mark; `--size-search` 104px a search or e-mail input in a bar or rail; `--size-field` 180px a form text input; `--size-label` 96px the label column of a form; `--size-area` 56px the height of a textarea; `--size-dialog` 300px a dialog; `--size-led` 5px a status lamp; `--size-dot` 6px the pitch of the dot-matrix runs.\n- Blocks are separated by a 6px gutter and marked by a 1px outline, a title bar or a tab on a hairline. Rows inside a block touch.\n- Views. The specimen is one example site, a download portal, in five views. `home` is the front page: link column, hero, latest list, top downloads table, channel grid and the rail. `downloads` is the list page: the top 50 as a tabbed table with pagination. `feature` is an article page: the prose with a row of further links, and no page header because the article carries its own title. `mylist` is the member's download list: page header, stats, notices, tabbed table with status badges, the button row, the remove dialog it opens and the empty state of the files sent in. `submit` is the form page for sending a file in.\n\n## Typography and colour roles\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__columns` holds `.ds-sidebar`, `.ds-page__main` and `.ds-page__rail`; `.ds-page__columns--inner` is the two-column inner page. `.ds-block` groups a section tab or tab row with the block it heads so they touch. `.ds-page__side` is the stack in the link column of an inner page (sidebar, then small panels). `.ds-page__wide` is a full-width row under the columns. `.ds-view` wraps one screen of the specimen; `.ds-view--home` marks the first.\n- `.ds-nav`: site header. `.ds-nav__utility` is the blue strip with `.ds-nav__utility-links` (`.ds-nav__utility-link`) and the `.ds-nav__search` form (`.ds-nav__search-label`, a small input, a button). `.ds-nav__masthead` holds `.ds-nav__brand` (the `.ds-brand` over a 9px `.ds-nav__tagline`) and `.ds-nav__status`, a framed 9px read-out. `.ds-nav__links` is the glass bar of `.ds-nav__link` entries; `is-current` turns the entry into an accent capsule. The three `.ds-view` rules show one view at a time, and one rule per view lights the navigation entry whose `href` names the view that is showing (the home entry when none is named); in a real multi-page site set `is-current` on the entry instead.\n- `.ds-brand`: the site's mark and name, at the left of the masthead, linking home. `.ds-brand__mark` is a 26px glass capsule tile dressed like the primary button (`--fill-button` gloss, `--color-button-text` for the drawing, 1px `--color-border-strong` rim, `--radius-control`, `--shadow-control`) holding the mark as inline SVG; `.ds-brand__name` is the 18px wordmark in `--color-heading`, with the heading font, weight, tracking and transform tokens. 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 pages only. 9px trail on a strip under the link bar, quiet links, `.ds-breadcrumb__sep` (`>`), ending in bold `.ds-breadcrumb__current`.\n- `.ds-sidebar`: the left link column, outlined. Repeats `.ds-sidebar__title` (dark strip, bold 11px) over a `.ds-sidebar__list` of `.ds-sidebar__item` rows holding `.ds-link--quiet` links; mark a promoted entry with a `.ds-badge` after the link.\n- `.ds-section`: the heading of a block in the main column: `.ds-section__title`, a small tab with rounded shoulders, standing on a hairline, with an optional `.ds-section__more` link at the right end of the line (written with a trailing `>>`).\n- `.ds-hero`: the lead module of the home page, one per page. `.ds-hero__body` is two columns: text and `.ds-hero__figure`, an inline SVG ring graphic. The text is `.ds-hero__kicker` (accent capsule, 9px), `.ds-hero__title` (18px), `.ds-hero__text` (13px) and `.ds-hero__actions` with one `.ds-button` and one link. `.ds-hero__dots` closes it with a dot-matrix run. No photograph, no full-width banner.\n- `.ds-page-header`: head of an inner page, first thing in the main column, once per page. `.ds-page-header__title` (16px bold, the page's only h1) over one line of `.ds-page-header__text`, with `.ds-page-header__action` at the right holding one `.ds-button`; a hairline closes it.\n- `.ds-stat`: the row of three to five summary figures under the page header. `.ds-stat` is the row; each figure is a `.ds-stat__item`, an outlined cell holding a 16px bold `.ds-stat__value` over a 9px uppercase `.ds-stat__label`. No icons, no trend arrows; do not enlarge the figure.\n- `.ds-prose`: article text: h1, h2, h3, p, ul, ol, `code`, strong; `.ds-prose--columns` sets it in two columns where it runs the width of the sheet; `.ds-prose__lead` for the 13px first paragraph and `.ds-prose__byline` for the 9px credit.\n- `.ds-link`: underlined link with `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` is the pale, not underlined link for navigation inside content. `.ds-links` lays a row of links out.\n- `.ds-button`: glass capsule, 10px bold uppercase, for the main action. `.ds-button--secondary` is the blue capsule. `.ds-button--danger` is the secondary capsule with a rim and a lamp in `--color-danger`, for remove and delete; the label keeps the secondary text colour. `disabled` or `is-disabled` flattens it to `--color-disabled`; `is-hover` brightens the gloss. Group with `.ds-buttons`.\n- `.ds-form`: outlined block of `.ds-form__row` pairs: bold `.ds-form__label` (optional `.ds-form__hint`) and a control. Controls take `.ds-form__input` (`--small` 104px, `--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 aligned under the controls.\n- `.ds-table`: outlined data table: glass `th` in 9px uppercase, rows alternating the two surfaces without rules, `.ds-table__num` right-aligned in the monospace for figures. `.ds-table__caption` is the 9px line under it.\n- `.ds-tabs`: row of `.ds-tabs__tab` links with rounded shoulders on a 2px rule in the bar colour; `is-current` takes the bar fill and is 2px taller. Use it directly above the list or table it switches.\n- `.ds-list`: item list. Each `.ds-list__item` has a bold underlined `.ds-list__title`, a `.ds-list__text` summary and a 9px `.ds-list__meta` line; rows touch and are divided by a faint hairline. `.ds-list--compact` is the one-line variant for rail panels. Add `.ds-list--noted` to it when the note after the title is longer than a count (a file size, a date): the note then takes its own line under the title.\n- `.ds-panel`: rail module: outlined, `.ds-panel__title` glass bar over `.ds-panel__body`. Body helpers: `.ds-panel__text`, `.ds-panel__list`, `.ds-panel__small`, `.ds-panel__option` (poll choice), `.ds-panel__field` (input with button), `.ds-panel__actions`. `.ds-panel--alt` has the blue title; `.ds-panel--inverse` is the silver block with a 13px title, at most one per page.\n- `.ds-grid`: two-column directory of `.ds-grid__cell` modules 4px apart, tinted with `--1`, `--2`, `--3` or the base fill; each has a 13px `.ds-grid__title` link, which keeps `--color-heading` because a cell fill may be close to the link colour, and a 9px `.ds-grid__text` line of quiet sub-links.\n- `.ds-badge`: 9px bold uppercase accent capsule (\"NEW\"). `.ds-badge--count` is a bare muted count. Status labels are a plain outlined chip with a lamp: `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`, and `.ds-badge--alt` for a neutral \"live\" marker; the lamp and rim take the status colour, the word stays in `--color-text`. One word each, in a table's status column or after a title. The lamp has a 1px ring in `--color-text`, so it shows on a chip of any colour.\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 outlined boxes: `.ds-pagination__link` on quiet links (`<< Previous`, numbers, `Next >>`), the current page as accent-filled `.ds-pagination__current`.\n- `.ds-dialog`: a small window in the page flow: 300px, 2px outline, glass `.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 soft shadow, no floating.\n- `.ds-empty`: dotted-outline block with a centred muted `.ds-empty__text` and one button.\n- `.ds-footer`: `.ds-footer__bar`, a centred strip of `.ds-footer__link` entries, then `.ds-footer__band`, the inverse band with the copyright line and `.ds-footer__band-link` links.\n\n## Never\n\n- `row-gap <= 2px`: rows of lists and tables touch.\n- `block-gap <= 14px`: neighbouring blocks sit 6px apart.\n- `content-width <= 740px`: text stays inside the fixed sheet.\n- `palette-colours <= 18`: navy, four blues, black, silver, white, one yellow, plus lime and orange 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 <= 10px`: tabs and panels are 6px, the sheet, hero and grid cells 10px; capsules are shapes.\n- `border-width <= 2px`: hairlines everywhere, 2px on the dialog frame and the tab rule.\n- `box-shadow = none`: nothing casts a box shadow; depth is gloss and outline.\n- `gradient-fills <= 16%`: gradients are for bars, title strips, tabs, buttons and accent capsules; surfaces and cells are flat.\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 rail module copies `.ds-panel` (1px outline, glass title in `--fill-bar` or `--fill-bar-alt`, body padded `--space-4`); a new main-column block starts with a `.ds-section` tab on its hairline and puts flat content under it; a new inner page copies one of the specimen's inner views (breadcrumb, `.ds-page-header`, blocks); a new control copies `.ds-button` or `.ds-form__input` with its capsule radius; a new status mark copies the lamp chip of `.ds-badge--success`. 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 text between 9px and 13px apart from 16px page titles and one 18px headline, keep modules small and 6px apart, and separate things with an outline, a bar or a hairline, never with whitespace, soft shadows or large cards.\n",
    "components.css": "/* Layout tokens (structure part). Taken from the references' block widths,\n   gutters and cell paddings. */\n:root {\n  --size-page: 740px;\n  --size-sidebar: 144px;\n  --size-rail: 164px;\n  --size-figure: 96px;\n  --size-mark: 26px;\n  --size-search: 104px;\n  --size-label: 96px;\n  --size-field: 180px;\n  --size-area: 56px;\n  --size-dialog: 300px;\n  --size-led: 5px;\n  --size-dot: 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);\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/* The fixed sheet, centred in the window. Everything that carries text sits\n   on it; the page colour only shows around it. */\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.ds-page__columns {\n  display: grid;\n  grid-template-columns: var(--size-sidebar) minmax(0, 1fr) var(--size-rail);\n  gap: var(--space-4);\n  align-items: start;\n  padding: var(--space-4);\n}\n.ds-page__main,\n.ds-page__side,\n.ds-page__rail {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  min-width: 0;\n}\n/* Inner page: the link column stays, the rail goes. The link column is a\n   stack (.ds-page__side) of the section's links and small modules. */\n.ds-page__columns--inner {\n  grid-template-columns: var(--size-sidebar) minmax(0, 1fr);\n}\n.ds-block {\n  display: block;\n}\n/* A full-width row under the columns, for the home page's feature. */\n.ds-page__wide {\n  padding: 0 var(--space-4) var(--space-4);\n}\n\n/* ---------- views ---------- */\n/* The specimen is one example site; one view shows at a time. */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* ---------- 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-5);\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n}\n\n/* ---------- brand ---------- */\n/* The site's mark and name. The mark sits on a small tile dressed like\n   the primary button, so every palette and surface reskins it. */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-4);\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-2);\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.ds-nav {\n  display: block;\n}\n.ds-nav__utility {\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__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  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__search {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n.ds-nav__search-label {\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-nav__masthead {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-5);\n  padding: var(--space-5) var(--space-5) var(--space-4);\n}\n.ds-nav__brand {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-2);\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/* Small status read-out at the right of the masthead: a framed line of\n   label and value pairs. */\n.ds-nav__status {\n  display: flex;\n  gap: var(--space-5);\n  margin: 0;\n  padding: var(--space-1) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-nav__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-1);\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  list-style: none;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-1) var(--space-5);\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/* The current section is a lit capsule set into the bar. */\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(#downloads:target) .ds-nav__link[href=\"#downloads\"],\n.ds-page:has(#feature:target) .ds-nav__link[href=\"#feature\"],\n.ds-page:has(#mylist:target) .ds-nav__link[href=\"#mylist\"],\n.ds-page:has(#submit:target) .ds-nav__link[href=\"#submit\"] {\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/* ---------- 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-heading);\n  font-size: var(--text-h3);\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-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-1) var(--space-4);\n}\n\n/* ---------- section head ---------- */\n/* A small tab that sits on a thin line: the heading of a block. */\n.ds-section {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-5);\n  margin: 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n}\n.ds-section__title {\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  border-radius: var(--radius-panel) var(--radius-panel) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n  text-shadow: var(--shadow-text);\n}\n.ds-section__more {\n  padding: 0 var(--space-2) var(--space-1);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- hero ---------- */\n/* A tinted module with a ring graphic, the lead title and one capsule\n   button; a dot-matrix run closes it. */\n.ds-hero {\n  overflow: hidden;\n  background: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\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: center;\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-2) 0 var(--space-4);\n  font-size: var(--text-large);\n}\n.ds-hero__actions {\n  display: flex;\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.ds-hero__dots {\n  height: var(--size-dot);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  background-image: radial-gradient(circle, var(--color-border-strong) 34%, transparent 40%);\n  background-size: var(--size-dot) var(--size-dot);\n}\n\n/* ---------- page header ---------- */\n.ds-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  gap: var(--space-5);\n  padding: var(--space-2) 0 var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\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  color: var(--color-text);\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- stats ---------- */\n/* A row of read-out cells: figure over a small label. */\n.ds-stat {\n  display: flex;\n  gap: var(--space-3);\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-2) var(--space-4) var(--space-3);\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-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-4) var(--space-2);\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/* The article set in two columns, where it runs the width of the sheet. */\n.ds-prose--columns {\n  column-count: 2;\n  column-gap: var(--space-6);\n}\n.ds-prose--columns p,\n.ds-prose--columns ul,\n.ds-prose--columns ol {\n  break-inside: avoid;\n}\n.ds-prose--columns h1,\n.ds-prose--columns h2,\n.ds-prose--columns h3 {\n  break-after: avoid;\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/* The glass capsule that was drawn as an image. */\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-coloured rim and\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-3) var(--space-4);\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-4);\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-family: var(--font-ui);\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  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  font-size: var(--text-small);\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/* Error text always sits on its own chip of the error surface. */\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-family: var(--font-ui);\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-4) 0 var(--space-2) calc(var(--size-label) + var(--space-4));\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-2) 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/* ---------- tabs ---------- */\n/* Round-shouldered tabs standing on a rule in the bar colour. */\n.ds-tabs {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0 var(--space-4);\n  list-style: none;\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-bar);\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-2) var(--space-5);\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-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  padding-top: var(--space-3);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n}\n\n/* ---------- list ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__title {\n  font-weight: var(--weight-bold);\n}\n.ds-list__text {\n  display: block;\n}\n.ds-list__meta {\n  display: block;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n/* One line per item, for rails. */\n.ds-list--compact .ds-list__item {\n  padding: var(--space-2) var(--space-4);\n}\n.ds-list--compact .ds-list__item:last-child {\n  border-bottom: 0;\n}\n.ds-list--compact .ds-list__title {\n  font-weight: var(--weight-body);\n}\n.ds-list--compact .ds-list__meta {\n  display: inline;\n}\n/* A compact list whose note is longer than a count: the note takes its own\n   line under the title instead of breaking in the middle. */\n.ds-list--noted .ds-list__meta {\n  display: block;\n}\n\n/* ---------- panel ---------- */\n.ds-panel {\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-heading);\n  font-size: var(--text-h3);\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  text-shadow: var(--shadow-text);\n}\n.ds-panel__body {\n  padding: var(--space-4);\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;\n  list-style: none;\n}\n.ds-panel__small {\n  margin: var(--space-3) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\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  background: transparent;\n  color: var(--color-inverse-text);\n  font-size: var(--text-h2);\n  text-shadow: none;\n}\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__actions {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  padding-top: var(--space-4);\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\n/* ---------- grid ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: var(--space-3);\n}\n.ds-grid__cell {\n  padding: var(--space-3) var(--space-4) var(--space-4);\n  background: var(--color-fill-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 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__title {\n  margin: 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/* Titles keep the heading colour: a cell fill may be close to the link\n   colour. */\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 lamp has\n   a ring in the text colour so that it shows on any chip, and the status\n   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-2);\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\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-3);\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: title bar, message, capsules. */\n.ds-dialog__backdrop {\n  display: flex;\n  justify-content: center;\n  padding: 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-4);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\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-4);\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-4);\n  color: var(--color-text-muted);\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  display: block;\n}\n.ds-footer__bar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-5);\n  margin: 0;\n  padding: var(--space-2) var(--space-5);\n  list-style: none;\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-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n/* The closing band in the inverse tone, holding the copyright line. */\n.ds-footer__band {\n  margin: 0;\n  padding: var(--space-3) var(--space-5);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-align: center;\n}\n.ds-footer__band-link,\n.ds-footer__band-link:visited {\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration);\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 portal, 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__utility\">\n      <ul class=\"ds-nav__utility-links\">\n        <li><a class=\"ds-nav__utility-link\" href=\"#mylist\">Signed in as rowan</a></li>\n        <li><a class=\"ds-nav__utility-link\" href=\"#mylist\">My download list</a></li>\n        <li><a class=\"ds-nav__utility-link\" href=\"#submit\">Submit a file</a></li>\n        <li><a class=\"ds-nav__utility-link\" href=\"#feature\">Help</a></li>\n      </ul>\n      <form class=\"ds-nav__search\" action=\"#\">\n        <label class=\"ds-nav__search-label\" for=\"q\">Search</label>\n        <input class=\"ds-form__input ds-form__input--small\" id=\"q\" type=\"text\">\n        <button class=\"ds-button\" type=\"button\">Go</button>\n      </form>\n    </div>\n    <div class=\"ds-nav__masthead\">\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=\"2.4\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 3a9 9 0 1 1-9 9\"/><path d=\"M12 17a5 5 0 1 1 5-5\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n          <span class=\"ds-brand__name\">chronoskin</span>\n        </a>\n        <span class=\"ds-nav__tagline\">downloads, sound and hardware for the wired home</span>\n      </div>\n      <p class=\"ds-nav__status\"><span>12,408 members online</span><span>build 2.6</span></p>\n    </div>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Home</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#downloads\">Downloads</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#feature\">Features</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#mylist\">My list</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#submit\">Submit a file</a></li>\n    </ul>\n  </header>\n\n  <section class=\"ds-view ds-view--home\" id=\"home\">\n    <div class=\"ds-page__columns\">\n\n      <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n        <h2 class=\"ds-sidebar__title\">Departments</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Players &amp; plug-ins</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Visualisers</a> <span class=\"ds-badge\">New</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Desktop themes</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Screen savers</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Drivers</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Handheld software</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Web tools</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">All departments &gt;&gt;</a></li>\n        </ul>\n        <h2 class=\"ds-sidebar__title\">Inside chronoskin</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Top 50 downloads</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Member pages</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Live radio</a> <span class=\"ds-badge ds-badge--alt\">On air</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Feature archive</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Newsletter</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Bulletin boards</a></li>\n        </ul>\n        <h2 class=\"ds-sidebar__title\">Support</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Getting started</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Connection test</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Contact the crew</a></li>\n        </ul>\n        <h2 class=\"ds-sidebar__title\">Tools</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Speed test</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">File finder</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Format guide</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Skin builder</a> <span class=\"ds-badge\">Beta</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Desktop ticker</a></li>\n        </ul>\n        <h2 class=\"ds-sidebar__title\">Mirror sites</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">North America</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Europe</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Asia Pacific</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Text only</a></li>\n        </ul>\n        <h2 class=\"ds-sidebar__title\">Members</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">My download list</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#submit\">Submit a file</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">House rules</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Sign in</a></li>\n        </ul>\n      </aside>\n\n      <main class=\"ds-page__main\">\n\n        <section class=\"ds-hero\" data-component=\"hero\">\n          <div class=\"ds-hero__body\">\n            <div>\n              <span class=\"ds-hero__kicker\">Version 2.6 is out</span>\n              <h1 class=\"ds-hero__title\">Your whole collection, one small window.</h1>\n              <p class=\"ds-hero__text\">The chronoskin player now reads every common format, wears any skin and fits on a floppy.</p>\n              <div class=\"ds-hero__actions\">\n                <a class=\"ds-button\" href=\"#downloads\">Download now</a>\n                <a class=\"ds-link\" href=\"#feature\">What is new &gt;&gt;</a>\n              </div>\n            </div>\n            <svg class=\"ds-hero__figure\" viewBox=\"0 0 96 96\" aria-hidden=\"true\">\n              <circle cx=\"48\" cy=\"48\" r=\"44\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/>\n              <circle cx=\"48\" cy=\"48\" r=\"32\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"/>\n              <circle cx=\"48\" cy=\"48\" r=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/>\n              <circle cx=\"48\" cy=\"48\" r=\"6\" fill=\"currentColor\"/>\n              <path d=\"M0 48h26M70 48h26M48 0v26M48 70v26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/>\n              <rect x=\"76\" y=\"14\" width=\"6\" height=\"6\" fill=\"currentColor\"/>\n            </svg>\n          </div>\n          <div class=\"ds-hero__dots\"></div>\n        </section>\n\n        <div class=\"ds-block\">\n          <ul class=\"ds-tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#downloads\">Latest</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#downloads\">Most wanted</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#downloads\">Staff picks</a></li>\n          </ul>\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#downloads\">Pulse visualiser pack 3</a> <span class=\"ds-badge\">New</span>\n              <span class=\"ds-list__text\">Twelve new scopes and tunnels that follow the beat, tuned for slower graphics cards.</span>\n              <span class=\"ds-list__meta\">1.2 MB | posted 31 May by the sound desk | 86 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#downloads\">Chromeshell desktop theme</a>\n              <span class=\"ds-list__text\">Brushed panels, blue lamps and a matching set of 40 icons.</span>\n              <span class=\"ds-list__meta\">640 KB | posted 30 May by the skins desk | 41 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#downloads\">Modem tune-up utility 1.4</a>\n              <span class=\"ds-list__text\">Finds the settings that keep a 56k line steady during long transfers.</span>\n              <span class=\"ds-list__meta\">310 KB | posted 29 May by the hardware desk | 19 comments</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#feature\">Feature: building a jukebox from an old desktop</a>\n              <span class=\"ds-list__text\">A retired machine, a sound card and one free evening put every disc behind one remote.</span>\n              <span class=\"ds-list__meta\">posted 31 May by the hardware desk | 54 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\">Top downloads</h2>\n            <a class=\"ds-link ds-section__more\" href=\"#downloads\">full chart &gt;&gt;</a>\n          </div>\n          <table class=\"ds-table\">\n            <thead>\n              <tr><th>Title</th><th class=\"ds-table__num\">Size</th><th class=\"ds-table__num\">This week</th></tr>\n            </thead>\n            <tbody>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">chronoskin player 2.6</a></td><td class=\"ds-table__num\">1.4 MB</td><td class=\"ds-table__num\">48,210</td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Pulse visualiser pack 3</a></td><td class=\"ds-table__num\">1.2 MB</td><td class=\"ds-table__num\">19,774</td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Chromeshell theme</a></td><td class=\"ds-table__num\">640 KB</td><td class=\"ds-table__num\">12,035</td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Tracker studio lite</a></td><td class=\"ds-table__num\">2.8 MB</td><td class=\"ds-table__num\">9,460</td></tr>\n            </tbody>\n          </table>\n        </div>\n\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Channels</h2>\n            <a class=\"ds-link ds-section__more\" href=\"#downloads\">all channels &gt;&gt;</a>\n          </div>\n        </div>\n        <div class=\"ds-grid\" data-component=\"grid\">\n          <div class=\"ds-grid__cell ds-grid__cell--1\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#downloads\">Sound</a></h3>\n            <p class=\"ds-grid__text\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Players</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Encoders</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Radio</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--2\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#downloads\">Desktop</a></h3>\n            <p class=\"ds-grid__text\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Themes</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Icons</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Savers</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--3\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#downloads\">Handhelds</a></h3>\n            <p class=\"ds-grid__text\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Organisers</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Phones</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Sync</a></p>\n          </div>\n          <div class=\"ds-grid__cell\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#downloads\">Web tools</a></h3>\n            <p class=\"ds-grid__text\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Editors</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Transfer</a>, <a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Chat</a></p>\n          </div>\n        </div>\n\n      </main>\n\n      <div class=\"ds-page__rail\">\n\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h2 class=\"ds-panel__title\">Member login</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">Sign in to keep a download list and post on the boards.</p>\n            <a class=\"ds-button\" href=\"#mylist\">Sign in</a>\n            <p class=\"ds-panel__small\">Not a member? <a class=\"ds-link\" href=\"#mylist\">Join free</a></p>\n          </div>\n        </section>\n\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Now on live radio</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Low orbit ambient</a> <span class=\"ds-list__meta\">(463)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Breakbeat bunker</a> <span class=\"ds-list__meta\">(377)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Late lounge</a> <span class=\"ds-list__meta\">(282)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Tracker classics</a> <span class=\"ds-list__meta\">(194)</span></li>\n          </ul>\n        </section>\n\n        <section class=\"ds-panel ds-panel--inverse\">\n          <h2 class=\"ds-panel__title\">Quick poll</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">How do you connect at home?</p>\n            <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> 56k modem</label>\n            <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> Cable</label>\n            <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> DSL</label>\n            <div class=\"ds-panel__actions\">\n              <button class=\"ds-button\" type=\"button\">Vote</button>\n              <a class=\"ds-link\" href=\"#downloads\">Results</a>\n            </div>\n          </div>\n        </section>\n\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Newsletter</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">New releases every Friday.</p>\n            <div class=\"ds-panel__field\">\n              <input class=\"ds-form__input ds-form__input--small\" type=\"text\" aria-label=\"E-mail address\">\n              <button class=\"ds-button\" type=\"button\">Go</button>\n            </div>\n            <p class=\"ds-panel__small\">We never pass addresses on.</p>\n          </div>\n        </section>\n\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">On the boards</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Best encoder for 56k?</a> <span class=\"ds-list__meta\">(86)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Skin requests</a> <span class=\"ds-list__meta\">(41)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Show us your desktop</a> <span class=\"ds-list__meta\">(19)</span></li>\n          </ul>\n        </section>\n\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Top rated</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Chromeshell theme</a> <span class=\"ds-list__meta\">(4.8)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Pocket sync 3</a> <span class=\"ds-list__meta\">(4.7)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Starfield saver</a> <span class=\"ds-list__meta\">(4.5)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Transfer agent 1.1</a> <span class=\"ds-list__meta\">(4.4)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Night drive skin</a> <span class=\"ds-list__meta\">(4.2)</span></li>\n          </ul>\n        </section>\n\n      </div>\n    </div>\n  </section>\n\n  <!-- Top 50: the list page of the downloads section. -->\n  <section class=\"ds-view\" id=\"downloads\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Downloads</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">Top 50</li>\n    </ol>\n    <div class=\"ds-page__columns ds-page__columns--inner\">\n\n      <div class=\"ds-page__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Downloads</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Top 50</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">My download list</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#submit\">Submit a file</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Feature archive</a></li>\n          </ul>\n          <h2 class=\"ds-sidebar__title\">Departments</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Players &amp; plug-ins</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Visualisers</a> <span class=\"ds-badge\">New</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Desktop themes</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Screen savers</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Drivers</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Handheld software</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Web tools</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Your list</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">3 files queued, 14 listed.</p>\n            <a class=\"ds-button\" href=\"#mylist\">Open list</a>\n          </div>\n        </section>\n      </div>\n\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">Top 50 downloads</h1>\n            <p class=\"ds-page-header__text\">The files members fetched most, counted every night at midnight.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#submit\">Submit a file</a>\n          </div>\n        </div>\n\n        <div class=\"ds-block\">\n          <ul class=\"ds-tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#downloads\">This week</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#downloads\">This month</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#downloads\">All time</a></li>\n          </ul>\n          <table class=\"ds-table\">\n            <thead>\n              <tr><th class=\"ds-table__num\">No.</th><th>Title</th><th>Department</th><th class=\"ds-table__num\">Size</th><th class=\"ds-table__num\">This week</th><th>&nbsp;</th></tr>\n            </thead>\n            <tbody>\n              <tr><td class=\"ds-table__num\">11</td><td><a class=\"ds-link\" href=\"#mylist\">chronoskin player 2.6</a> <span class=\"ds-badge\">New</span></td><td>Players</td><td class=\"ds-table__num\">1.4 MB</td><td class=\"ds-table__num\">48,210</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">12</td><td><a class=\"ds-link\" href=\"#mylist\">Pulse visualiser pack 3</a></td><td>Visualisers</td><td class=\"ds-table__num\">1.2 MB</td><td class=\"ds-table__num\">19,774</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">13</td><td><a class=\"ds-link\" href=\"#mylist\">Chromeshell theme</a></td><td>Desktop themes</td><td class=\"ds-table__num\">640 KB</td><td class=\"ds-table__num\">12,035</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">14</td><td><a class=\"ds-link\" href=\"#mylist\">Tracker studio lite</a></td><td>Web tools</td><td class=\"ds-table__num\">2.8 MB</td><td class=\"ds-table__num\">9,460</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">15</td><td><a class=\"ds-link\" href=\"#mylist\">Modem tune-up utility 1.4</a></td><td>Drivers</td><td class=\"ds-table__num\">310 KB</td><td class=\"ds-table__num\">8,902</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">16</td><td><a class=\"ds-link\" href=\"#mylist\">Starfield screen saver</a></td><td>Screen savers</td><td class=\"ds-table__num\">220 KB</td><td class=\"ds-table__num\">7,118</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">17</td><td><a class=\"ds-link\" href=\"#mylist\">Pocket sync 3</a></td><td>Handheld software</td><td class=\"ds-table__num\">880 KB</td><td class=\"ds-table__num\">6,340</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">18</td><td><a class=\"ds-link\" href=\"#mylist\">Night drive skin</a></td><td>Desktop themes</td><td class=\"ds-table__num\">310 KB</td><td class=\"ds-table__num\">5,871</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">19</td><td><a class=\"ds-link\" href=\"#mylist\">Transfer agent 1.1</a></td><td>Web tools</td><td class=\"ds-table__num\">540 KB</td><td class=\"ds-table__num\">5,206</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></td></tr>\n              <tr><td class=\"ds-table__num\">20</td><td><a class=\"ds-link\" href=\"#mylist\">Scope tunnel plug-in</a></td><td>Visualisers</td><td class=\"ds-table__num\">96 KB</td><td class=\"ds-table__num\">4,655</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Add to list</a></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=\"#downloads\">&lt;&lt; Previous</a></li>\n            <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#downloads\">1</a></li>\n            <li><span class=\"ds-pagination__current\">2</span></li>\n            <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#downloads\">3</a></li>\n            <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#downloads\">4</a></li>\n            <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#downloads\">5</a></li>\n            <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#downloads\">Next &gt;&gt;</a></li>\n          </ul>\n        </div>\n\n      </div>\n    </div>\n  </section>\n\n  <!-- Feature: an article page. -->\n  <section class=\"ds-view\" id=\"feature\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Features</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">Building a jukebox</li>\n    </ol>\n    <div class=\"ds-page__columns ds-page__columns--inner\">\n\n      <div class=\"ds-page__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Feature archive</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Building a jukebox</a> <span class=\"ds-badge\">New</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Ten skins for small screens</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Getting more from 56k</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Encoders compared</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Your first home network</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Getting started</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Used in this feature</h2>\n          <ul class=\"ds-list ds-list--compact ds-list--noted\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">chronoskin player 2.6</a> <span class=\"ds-list__meta\">1.4 MB</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Modem tune-up 1.4</a> <span class=\"ds-list__meta\">310 KB</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Transfer agent 1.1</a> <span class=\"ds-list__meta\">540 KB</span></li>\n          </ul>\n        </section>\n      </div>\n\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Feature</h2>\n            <a class=\"ds-link ds-section__more\" href=\"#home\">back to the front page &gt;&gt;</a>\n          </div>\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>Building a jukebox from an old desktop</h1>\n            <p class=\"ds-prose__byline\">By the hardware desk, 31 May</p>\n            <p class=\"ds-prose__lead\">A retired machine, a sound card and one free evening are enough to put every disc you own behind a single remote.</p>\n            <h2>What you need</h2>\n            <p>Any processor from the last four years will do. Spend the money on <strong>disk space</strong> instead: a full shelf of discs needs about twenty gigabytes.</p>\n            <ul>\n              <li>A desktop with a spare drive bay</li>\n              <li>A sound card with line out</li>\n              <li>A network card or a long cable</li>\n            </ul>\n            <h2>Setting it up</h2>\n            <p>Copy the discs one shelf at a time and let the player name the tracks. Keep the machine out of sight: it only needs power, the network and a cable to the amplifier.</p>\n            <h3>Checking the output</h3>\n            <p>Start the player from a prompt with <code>chronoskin --test-tone</code>. A steady tone on both speakers means the card is set up.</p>\n          </article>\n        </div>\n\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Read next</h2>\n          </div>\n          <p class=\"ds-links\" data-component=\"links\">\n            <a class=\"ds-link\" href=\"#feature\">Encoders compared</a>\n            <a class=\"ds-link is-visited\" href=\"#feature\">Getting more from 56k</a>\n            <a class=\"ds-link is-hover\" href=\"#feature\">Your first home network</a>\n            <a class=\"ds-link is-active\" href=\"#downloads\">Fetch the player</a>\n            <a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a>\n          </p>\n        </div>\n\n      </div>\n    </div>\n  </section>\n\n  <!-- My download list: the member's own page. -->\n  <section class=\"ds-view\" id=\"mylist\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Downloads</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">My download list</li>\n    </ol>\n    <div class=\"ds-page__columns ds-page__columns--inner\">\n\n      <div class=\"ds-page__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Downloads</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Top 50</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">My download list</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#submit\">Submit a file</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Feature archive</a></li>\n          </ul>\n          <h2 class=\"ds-sidebar__title\">My chronoskin</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Profile</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Board posts</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        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Now fetching</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">Starfield screen saver, 41% of 220 KB at 4.1 KB/s.</p>\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Pause</button>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Mirror in use</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#mylist\">Europe</a> <span class=\"ds-list__meta\">(in use)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#mylist\">North America</a></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#mylist\">Asia Pacific</a></li>\n          </ul>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Disk space</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">38.2 MB fetched this month. Finished files stay listed for 30 days.</p>\n            <p class=\"ds-panel__small\"><a class=\"ds-link\" href=\"#feature\">How the queue works</a></p>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">On the boards</h2>\n          <ul class=\"ds-list ds-list--compact\">\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#home\">Broken mirrors</a> <span class=\"ds-list__meta\">(27)</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#home\">Best encoder for 56k?</a> <span class=\"ds-list__meta\">(86)</span></li>\n          </ul>\n        </section>\n      </div>\n\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-page-header\" data-component=\"page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">My download list</h1>\n            <p class=\"ds-page-header__text\">Files you have queued, fetched or lost along the way.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#downloads\">Add a file</a>\n          </div>\n        </div>\n\n        <ul class=\"ds-stat\" data-component=\"stats\">\n          <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">14</span><span class=\"ds-stat__label\">Files listed</span></li>\n          <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">38.2 MB</span><span class=\"ds-stat__label\">Fetched this month</span></li>\n          <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">3</span><span class=\"ds-stat__label\">In the queue</span></li>\n          <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">4.1 KB/s</span><span class=\"ds-stat__label\">Average speed</span></li>\n        </ul>\n\n        <div class=\"ds-notices\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">Note:</span> The file servers restart 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 mirror did not answer for Tracker studio lite. Pick another one and try again.</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=\"#mylist\">All files</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#mylist\">Queue</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#mylist\">Finished</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#mylist\">Settings</a></li>\n          </ul>\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr><th>File</th><th>Department</th><th class=\"ds-table__num\">Size</th><th>Status</th><th>&nbsp;</th></tr>\n            </thead>\n            <tbody>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">chronoskin player 2.6</a></td><td>Players</td><td class=\"ds-table__num\">1,412 KB</td><td><span class=\"ds-badge ds-badge--success\" data-component=\"badge\">Finished</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Fetch again</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Pulse visualiser pack 3</a></td><td>Visualisers</td><td class=\"ds-table__num\">1,208 KB</td><td><span class=\"ds-badge ds-badge--warning\">Queued</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Start</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Chromeshell theme</a></td><td>Desktop themes</td><td class=\"ds-table__num\">640 KB</td><td><span class=\"ds-badge ds-badge--success\">Finished</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Fetch again</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Tracker studio lite</a></td><td>Web tools</td><td class=\"ds-table__num\">2,790 KB</td><td><span class=\"ds-badge ds-badge--danger\">Broken</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Remove</a></td></tr>\n              <tr><td><a class=\"ds-link\" href=\"#downloads\">Modem tune-up 1.4</a></td><td>Drivers</td><td class=\"ds-table__num\">310 KB</td><td><span class=\"ds-badge ds-badge--success\">Finished</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">Fetch again</a></td></tr>\n            </tbody>\n          </table>\n          <div class=\"ds-buttons\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"button\">Fetch queue</button>\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Pause all</button>\n            <button class=\"ds-button ds-button--danger\" type=\"button\">Clear list</button>\n            <button class=\"ds-button is-disabled\" type=\"button\" disabled>Resume</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 from list</h2>\n            <div class=\"ds-dialog__body\">\n              <p class=\"ds-dialog__text\">Take Tracker studio lite off your download list? The file itself stays on your disk.</p>\n              <div class=\"ds-dialog__actions\">\n                <a class=\"ds-button ds-button--danger\" href=\"#mylist\">Remove</a>\n                <a class=\"ds-button ds-button--secondary\" href=\"#mylist\">Keep it</a>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Sent in by you</h2>\n            <a class=\"ds-link ds-section__more\" href=\"#submit\">submit a file &gt;&gt;</a>\n          </div>\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <p class=\"ds-empty__text\">You have not sent in a file yet.</p>\n            <a class=\"ds-button\" href=\"#submit\">Submit a file</a>\n          </div>\n        </div>\n\n      </div>\n    </div>\n  </section>\n\n  <!-- Submit a file: the form page. -->\n  <section class=\"ds-view\" id=\"submit\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Downloads</a></li>\n      <li class=\"ds-breadcrumb__sep\">&gt;</li>\n      <li class=\"ds-breadcrumb__current\">Submit a file</li>\n    </ol>\n    <div class=\"ds-page__columns ds-page__columns--inner\">\n\n      <div class=\"ds-page__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Downloads</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#downloads\">Top 50</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mylist\">My download list</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#submit\">Submit a file</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Feature archive</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">House rules</h2>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-panel__list\">\n              <li>Your own work only.</li>\n              <li>Zip files, 3 MB at most.</li>\n              <li>A read-me in plain text.</li>\n              <li>No installers that change system files.</li>\n            </ul>\n            <p class=\"ds-panel__small\">The desk checks every file. Allow two days.</p>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--alt\">\n          <h2 class=\"ds-panel__title\">Listed 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=\"#downloads\">Night drive skin</a></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Scope tunnel plug-in</a></li>\n            <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#downloads\">Transfer agent 1.1</a></li>\n          </ul>\n        </section>\n      </div>\n\n      <div class=\"ds-page__main\">\n\n        <div class=\"ds-page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">Submit a file</h1>\n            <p class=\"ds-page-header__text\">Send your skin, plug-in or utility to the desk for listing.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#mylist\">Back to my list</a>\n          </div>\n        </div>\n\n        <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Error:</span> One field needs another look before the file can be sent.</p>\n\n        <div class=\"ds-block\">\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">File details</h2>\n            <a class=\"ds-link ds-section__more\" href=\"#feature\">how listing works &gt;&gt;</a>\n          </div>\n          <form class=\"ds-form\" data-component=\"form\" action=\"#submit\">\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-name\">Title</label>\n              <div><input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"Night drive skin\"></div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-mail\">Your e-mail</label>\n              <div>\n                <input class=\"ds-form__input is-invalid\" id=\"f-mail\" type=\"text\" value=\"rowan@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-dept\">Department</label>\n              <div>\n                <select class=\"ds-form__input ds-form__input--auto\" id=\"f-dept\">\n                  <option>Desktop themes</option>\n                  <option>Visualisers</option>\n                </select>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-ver\">Version <span class=\"ds-form__hint\">As in the read-me</span></label>\n              <div><input class=\"ds-form__input ds-form__input--small\" id=\"f-ver\" type=\"text\" value=\"1.0\"></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> Show my name with the file</label>\n                <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\"> Mail me when it is listed</label>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-note\">Notes <span class=\"ds-form__hint\">Optional</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 file</button>\n              <a class=\"ds-button ds-button--secondary\" href=\"#mylist\">Cancel</a>\n            </div>\n          </form>\n        </div>\n\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=\"#home\">Advertise</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#home\">Jobs</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#home\">Contact</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#home\">Site map</a></li>\n    </ul>\n    <p class=\"ds-footer__band\">Copyright 2001 chronoskin networks. All rights reserved. <a class=\"ds-footer__band-link\" href=\"#home\">Terms of use</a> | <a class=\"ds-footer__band-link\" href=\"#home\">Privacy</a></p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.y2k-futurism.portal.s01.p01.t01.u01\",\n  \"library\": \"2026.10.07-2111\",\n  \"era\": {\n    \"slug\": \"y2k-futurism\",\n    \"years\": [\n      1999,\n      2003\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"pure\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1024,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-yk-1111\",\n  \"short\": \"v1-yk-1111\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #000030;\n  --color-canvas: #003399;\n  --color-surface: #003399;\n  --color-surface-alt: #1048b8;\n  --color-surface-strong: #000030;\n  --color-bar: #000000;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #1850c8;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #c0c0d0;\n  --color-inverse-text: #000030;\n  --color-text: #e0e0e8;\n  --color-text-muted: #a8a8b8;\n  --color-heading: #ffffff;\n  --color-heading-alt: #ffcc00;\n  --color-link: #ffffff;\n  --color-link-quiet: #d0d0d0;\n  --color-link-visited: #a8a8b8;\n  --color-link-hover: #ffcc00;\n  --color-link-active: #98ff00;\n  --color-border: #1850c8;\n  --color-border-strong: #808098;\n  --color-border-muted: #0840a8;\n  --color-accent: #ffcc00;\n  --color-accent-text: #000000;\n  --color-accent-alt: #98ff00;\n  --color-fill-1: #0840a8;\n  --color-fill-2: #1048b8;\n  --color-fill-3: #1850c8;\n  --color-fill-4: #0038a0;\n  --color-button: #d0d0d0;\n  --color-button-text: #000000;\n  --color-button-hover-text: #000030;\n  --color-button-secondary: #1048b8;\n  --color-button-secondary-text: #ffffff;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #808098;\n  --color-disabled: #404068;\n  --color-disabled-text: #a8a8b8;\n  --color-danger: #cc6633;\n  --color-danger-surface: #000000;\n  --color-success: #98ff00;\n  --color-warning: #ffcc00;\n  --color-notice: #000030;\n  --color-notice-text: #e0e0e8;\n  --color-focus: #ffcc00;\n  --color-shadow: #000000;\n  --color-overlay: #000030;\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  --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: 9px;\n  --radius-panel: 6px;\n  --radius-pill: 7px;\n  --radius-page: 10px;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: none;\n  --shadow-control-pressed: none;\n  --shadow-dialog: none;\n  --shadow-text: 1px 1px 0 color-mix(in srgb, var(--color-shadow) 45%, transparent);\n  --fill-page: linear-gradient(to bottom, color-mix(in srgb, var(--color-page) 82%, white) 0, var(--color-page) 220px);\n  --fill-bar: linear-gradient(to bottom, color-mix(in srgb, var(--color-bar) 62%, white) 0, color-mix(in srgb, var(--color-bar) 86%, white) 48%, var(--color-bar) 52%, color-mix(in srgb, var(--color-bar) 88%, black) 100%);\n  --fill-bar-alt: linear-gradient(to bottom, color-mix(in srgb, var(--color-bar-alt) 78%, white) 0, var(--color-bar-alt) 55%, color-mix(in srgb, var(--color-bar-alt) 86%, black) 100%);\n  --fill-inverse: linear-gradient(to bottom, color-mix(in srgb, var(--color-inverse) 55%, white) 0, var(--color-inverse) 50%, color-mix(in srgb, var(--color-inverse) 86%, black) 100%);\n  --fill-accent: linear-gradient(to bottom, color-mix(in srgb, var(--color-accent) 55%, white) 0, var(--color-accent) 60%);\n  --fill-panel: var(--color-surface);\n  --fill-button: linear-gradient(to bottom, color-mix(in srgb, var(--color-button) 50%, white) 0, color-mix(in srgb, var(--color-button) 84%, white) 46%, var(--color-button) 52%, color-mix(in srgb, var(--color-button) 80%, white) 100%);\n  --fill-button-hover: linear-gradient(to bottom, color-mix(in srgb, var(--color-button) 35%, white) 0, color-mix(in srgb, var(--color-button) 70%, white) 46%, color-mix(in srgb, var(--color-button) 88%, white) 52%, color-mix(in srgb, var(--color-button) 65%, white) 100%);\n  --fill-button-secondary: linear-gradient(to bottom, color-mix(in srgb, var(--color-button-secondary) 68%, white) 0, var(--color-button-secondary) 52%, color-mix(in srgb, var(--color-button-secondary) 86%, white) 100%);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
