{
  "id": "v1-yk-3b23",
  "long_id": "v1.y2k-futurism.portal.s03.p11.t02.u03",
  "name": "Y2K futurism showcase, 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": "mix",
  "viewport": {
    "width": 1024,
    "fluid": false
  },
  "summary": "The product showcase that hardware makers, music channels and software houses put on their front page around the turn of the millennium: one centred 720px column with a row of equal tabs across the top, a single framed stage showing the machine of the season, and a row of four small modules under it. Everything is square, hairlined and scan-lined, set in 10px Verdana with light lowercase Helvetica headings, in dark olive with lime, one blue and one orange. The stage and its line drawings were images at the time and are rebuilt here with inline SVG, 1px borders and dotted rules; the look gave way to wider, lighter glossy layouts from about 2004.",
  "url": "https://chrono.skin/s/v1-yk-3b23",
  "preview_url": "https://chrono.skin/s/v1-yk-3b23/specimen.html",
  "files": {
    "STYLE.md": "# Y2K futurism showcase, 1999 to 2003\n\n## Summary\n\nThe product showcase that hardware makers, music channels and software houses put on their front page around the turn of the millennium: one centred 720px column with a row of equal tabs across the top, a single framed stage showing the machine of the season, and a row of four small modules under it. Everything is square, hairlined and scan-lined, set in 10px Verdana with light lowercase Helvetica headings, in dark olive with lime, one blue and one orange. The stage and its line drawings were images at the time and are rebuilt here with inline SVG, 1px borders and dotted rules; 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 720px; `.ds-page__frame` is one sheet of that width centred horizontally in the viewport (`margin: 0 auto`) with a 1px outline, 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-6` (14px) above and `--space-3` (4px) at the sides. Order from the top: `.ds-nav` (a three-part masthead with tool links left, the centred wordmark and the search right; a row of equal tabs; one centred line of text links), `.ds-page__body`, `.ds-footer`. There are no side columns running the height of the page, on the home page or on inner pages.\n- `.ds-page__body` is a stack of full-width bands `--space-6` (14px) apart, padded `--space-7` (20px) from the sheet edge, so content is 678px wide. The home page bands, in order: `.ds-hero` (the stage), `.ds-ticker` (one line of news), `.ds-grid` (four modules in a row), a `.ds-page__band` of three equal columns (a list, two panels), and a second `.ds-page__band` of three small panels. Columns inside a band are `--space-6` apart and start at the top.\n- The rhythm is one, four, three, two: each band cuts the same width into a different number of equal parts. Much of the page is centred: the wordmark, the tab labels, the stage, the stats, tabs, pagination, buttons and the footer.\n- Inner pages (every page below the home page) keep the sheet, the tab row with its line of text links and the footer, and have no stage, no ticker and no module row. `.ds-page__body` opens with `.ds-page-header`, which holds the `.ds-breadcrumb` above the title and replaces the hero. Then come full-width bands: an optional `.ds-stat` row, `.ds-tabs` centred above the full-width `.ds-table` with its `.ds-pagination`, and a `.ds-page__band--split` with the form on the left two thirds and a `.ds-page__stack` on the right third that holds the `.ds-sidebar` index of the section and any notices. An article page keeps the page header for the section and sets the article in the left two thirds of a split band.\n- Spacing scale: `--space-1` 1px is the vertical padding of buttons, inputs and tab chips; `--space-2` 2px is the gap between navigation tabs and the padding of ticker parts and compact rows; `--space-3` 4px is the padding of table cells, list rows, navigation tabs and notices; `--space-4` 6px is the padding of modules and the gap between buttons; `--space-5` 10px is the side padding of panels, buttons and notices, the gap between grid modules and between stacked panels; `--space-6` 14px is the gap between bands and between columns in a band; `--space-7` 20px is the side margin of the sheet and the gap between the text links under the tabs. There is no step above 20px.\n- Fixed sizes: `--size-stage` 210px is the least height of the stage; `--size-figure` 300px by `--size-figure-height` 130px the line drawing on it; `--size-mark` 26px the tile of the brand mark; `--size-icon` 34px a module icon; `--size-search` 96px a search or e-mail input; `--size-field` 190px and `--size-label` 92px are kept for forms in a narrow column; `--size-area` 56px the height of a textarea; `--size-dialog` 310px a dialog; `--size-led` 5px a status lamp; `--size-dot` 4px the pitch of the dotted rules.\n- Things are separated by dotted rules and hairlines on the open sheet, not by boxes with title bars: section headings are written on the sheet, tables and lists are ruled, and only modules, the form and the stage are outlined.\n- Views. The specimen is one example site, a maker of pocket machines, in five views. `home` is the front page: stage, ticker, four product modules, a band of latest list, top downloads and poll, and a band of three small panels. `software` is the list page: the catalogue as a tabbed table with pagination. `mysoftware` is the owner's page: page header with breadcrumb, stats, notices, tabbed table with status badges and the button row, then the remove dialog it opens beside the empty state of submitted titles. `submit` is the form page, with the section index and a rules panel in the right third. `feature` is an article page: the prose beside a stack of panels, then a row of further links.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Arial throughout, with a heavy cut for headings: `--font-heading` is Arial Black at `--weight-heading` 900, uppercased by `--heading-transform`; `--font-body` and `--font-ui` are Arial. `--font-mono` (Courier) is used for the display window, numeric table columns, the list index and stat figures, as the read-out face of the machine. The references drew their bar labels in a commercial extended face; Arial Black uppercase is the stand-in.\n- `--text-base` 13px for body text, the largest body size of the era; `--text-ui` 11px bold for capsule keys, tab segments, buttons and form labels, not uppercased; `--text-small` 10px for meta lines, read-outs, table heads, the breadcrumb and the footer.\n- `--text-h3` 11px, `--text-h2` 13px, `--text-h1` 16px, `--text-display` 18px: headings are told apart by weight and capitals, not by size. 18px is the wordmark and the hero title only. Line heights are `normal`; nothing is tracked.\n- Every link is underlined, quiet and navigation links included (`--link-decoration` and `--link-decoration-quiet` are both `underline`).\n- Machined grey and khaki on black, with one aqua and one blue. `--color-page` #000000 surrounds the housing; `--color-canvas` and `--color-surface` #cccc99 are the sheet and panel bodies; `--color-surface-alt` #c0c090 fills forms, the page header plate, the stat plate, the rail link block, alternate table rows and the breadcrumb strip; `--color-surface-strong` #999999 with `--color-heading` is table heads and the title strips of the rail link block.\n- `--color-bar` #666666 with `--color-bar-text` white, filled by `--fill-bar`, is the housing, the capsule keys, tab segments and panel and dialog titles. `--color-bar-alt` #999999 with `--color-bar-alt-text` black, filled by `--fill-bar-alt`, is the capsule strip, section strips, the tab track, the transport strip of the hero, `.ds-panel--alt` titles and the footer bar. `--shadow-text` is applied to text on `--fill-bar` only.\n- `--color-inverse` #000000 with `--color-inverse-text` white is the screen tone: the display window, the hero screen, one `.ds-panel--inverse` per page and the closing band. Links inside it take the inverse text colour.\n- `--color-text` and `--color-heading` #000000; `--color-text-muted` #484848; `--color-heading-alt` #000099 for third-level headings.\n- `--color-link` #000099; `--color-link-quiet` #000000 for the rail link block, breadcrumb, tool links in tables and pagination; visited #505050, hover #000000, active #282828. Links on a strip take that strip's text colour.\n- `--color-accent` #99cccc with `--color-accent-text` black is the lit capsule, the selected tab segment, badges, the hero kicker, the lamp of a section strip and the current page number; `--color-accent-alt` #3366cc is a lamp colour only.\n- `--color-fill-1` and `--color-fill-2` are the two khakis, `--color-fill-3` the aqua #99cccc, `--color-fill-4` grey #a0a0a0: the four channel keys of `.ds-grid`, which carry `--color-heading` and `--color-text`. Lines are grey: `--color-border` #999999, `--color-border-strong` #666666, `--color-border-muted` #a0a0a0.\n- `--color-button` #3366cc with white text is the one saturated control; `--color-button-secondary` #999999 with black text. Inputs are white with a #666666 line.\n- Each text colour is used only on its own fill: bar text on the bar, bar-alt text on the strip, accent text on the accent, button text on the button, inverse text on the screen tone, notice text on the notice. `--color-danger` #800000 is text only on `--color-danger-surface` #c8c898 (error notice, field error chip) and otherwise a rim or lamp colour; `--color-success` #709000 and `--color-warning` #ffcc00 are lamp and rim colours, never text. `--color-notice` is the aqua with black text.\n- Bevelled metal. `--fill-bar` and `--fill-bar-alt` are tube gradients: a light edge at the top, the flat colour through the middle, a dark edge at the bottom. `--fill-button` and `--fill-button-secondary` shade from a lighter to a darker mix of their colour. `--shadow-control` is a 1px inset bevel; `--shadow-control-pressed` swaps its two sides. `--shadow-panel` is a hard 1px offset and `--shadow-dialog` a hard 2px offset, without blur.\n- Corners are nearly square: `--radius-control` and `--radius-pill` 3px, `--radius-panel` 0. Only the largest containers are rounded, by `--radius-page` 18px: the housing, the hero and the channel keys. `--border-width` 1px, `--border-width-strong` 2px, solid. `--fill-page`, `--fill-inverse`, `--fill-accent` and `--fill-panel` are flat. `--focus-ring` is 1px dotted; `--transition` none.\n- One-off values built in `components.css` without a token: `dashed` on the empty-state outline, `50%` to make lamps round whatever the pill radius, and `calc()` over layout and border tokens for the form action offset and for joining tab segments and page keys.\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- Black with acid green, one aqua and one blue. `--color-page` #000000 surrounds a near-black sheet: `--color-canvas` and `--color-surface` #181818, `--color-surface-alt` #282828 for forms, the link column and alternate rows. `--color-surface-strong` #000000 is darker than the sheet, for title strips inside the link column.\n- `--color-bar` #98ff00 with black text is the navigation bar, panel and dialog titles, table heads and the current tab; `--color-bar-alt` #484848 with white text is the utility strip, section tabs, inactive tabs and the footer strip. `--color-inverse` #ffffff with black text is the one white panel and the closing band.\n- `--color-text` #e0e0e8; `--color-text-muted` #c0c0c0; `--color-heading` #ffffff; `--color-heading-alt` #98ff00.\n- `--color-link` #98ff00; `--color-link-quiet` #e0e0e8; visited #98d0d0, hover #ffffff, active #a8ff00. `--color-accent` #98d0d0, aqua, with black text is the current navigation item, badges and the current page number; `--color-accent-alt` #a8ff00 is a lamp colour.\n- `--color-fill-1` to `--color-fill-3` are near-blacks and a grey (#282828, #202020, #484848) and `--color-fill-4` is a steel blue #385090. Lines: `--color-border` #686868, `--color-border-strong` #98ff00, `--color-border-muted` #484848.\n- `--color-button` #98ff00 with black text; `--color-button-secondary` #686868 with white text. Inputs are black with green text and a #989898 line, like a terminal field.\n- `--color-danger` #ff0000 is only used as text on `--color-danger-surface` #ffffff and as a rim or lamp; `--color-success` #98ff00 and `--color-warning` #ffc800 are lamp and rim colours, never text. `--color-notice` is the steel blue with white text.\n\n## Components\n\n- `.ds-page` on `<body>`: page fill and base type. Wrap everything in `.ds-page__frame`. `.ds-page__body` stacks the bands of one page. `.ds-page__band` cuts a band into three equal columns; `.ds-page__band--split` into two thirds and one third. `.ds-page__band--even` stretches the columns of a band to one height, for two outlined blocks side by side. `.ds-page__stack` stacks modules in one column of a band. `.ds-view` wraps one screen of the specimen; `.ds-view--home` marks the first.\n- `.ds-nav`: site header. `.ds-nav__masthead` has three parts: `.ds-nav__tools` (quiet links), the centred `.ds-nav__brand` (the `.ds-brand` over `.ds-nav__tagline`) and the `.ds-nav__search` form. `.ds-nav__tabs` is the row of equal `.ds-nav__tab` cells, each a `.ds-nav__link` with a centred label; `is-current` gives one the bar fill. 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. `.ds-nav__sub` is the centred line of quiet text links for the current section.\n- `.ds-brand`: the site's mark and name, centred in the masthead, linking home. `.ds-brand__mark` is a 26px square tile dressed like the primary button (`--fill-button`, `--color-button-text` for the drawing, 1px `--color-border-strong` outline, `--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. 10px trail inside `.ds-page-header`, above the title: quiet links, `.ds-breadcrumb__sep` (`>`), ending in bold `.ds-breadcrumb__current`.\n- `.ds-section`: the heading of a band or column, written on the sheet: `.ds-section__title` (14px), then `.ds-section__line`, a dotted run that fills the remaining width, then an optional `.ds-section__more` link (written with a trailing `>>`).\n- `.ds-hero`: the stage, one per home page, full width. `.ds-hero__stage` centres `.ds-hero__figure` (an inline SVG line drawing of the product with dotted lines to its companions), `.ds-hero__kicker` (accent chip), `.ds-hero__title` (18px) and one line of `.ds-hero__text`. `.ds-hero__actions` is the foot of the stage: one `.ds-button` and one or two links, centred on a hairline. No photograph; no text beside the figure.\n- `.ds-ticker`: one line of news under the stage: `.ds-ticker__label` plate, `.ds-ticker__text` with a quiet link, `.ds-ticker__date` at the right. One per page.\n- `.ds-page-header`: head of an inner page, first thing in `.ds-page__body`, once per page: the breadcrumb, `.ds-page-header__title` (16px, the page's only h1) and one line of `.ds-page-header__text` on the left, `.ds-page-header__action` with one `.ds-button` at the right, closed by a dotted rule.\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`, a bare centred cell divided from the next by a dotted line, with an 18px `.ds-stat__value` in the second heading colour over a 10px muted `.ds-stat__label`. No boxes, no icons, no trend arrows.\n- `.ds-prose`: article text on the open sheet: h1, h2, h3, p, ul, ol, `code`, strong; `.ds-prose__lead` for the 12px first paragraph and `.ds-prose__byline` for the muted credit.\n- `.ds-link`: link with `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` is the text-coloured link for navigation. `.ds-links` lays a centred row of links out.\n- `.ds-button`: flat rectangular key for the main action. `.ds-button--secondary` is the grey key. `.ds-button--danger` is the secondary key 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` lightens it. Group with `.ds-buttons`, centred.\n- `.ds-form`: outlined module. `.ds-form__grid` lays `.ds-form__row` fields out two abreast, each a bold 10px `.ds-form__label` (optional `.ds-form__hint`) standing above its control; `.ds-form__row--wide` spans both columns. Controls take `.ds-form__input` and fill their column (`--small` 96px for bars and panels, `--area` for textareas); `is-invalid` plus a `.ds-form__error` chip under the field marks a bad value. `.ds-form__check` with `.ds-form__checkbox` for checkboxes and radios; `.ds-form__actions` is the centred button row above a dotted rule.\n- `.ds-table`: ruled data table without an outer box, full width of the band: bold 10px `th` over a line in `--color-border-strong`, rows divided by faint hairlines with every other row on `--color-surface-alt`, `.ds-table__num` right-aligned in the monospace for figures. `.ds-table__caption` is the centred muted line under it.\n- `.ds-tabs`: a centred line of `.ds-tabs__item` entries divided by hairlines, each a `.ds-tabs__tab` quiet link; `is-current` is an accent chip. Use it directly above the table or list it switches. It is not the site navigation, which is `.ds-nav__tabs`.\n- `.ds-list`: item list on the open sheet. Each `.ds-list__item` has a bold `.ds-list__title` link, a `.ds-list__text` summary and a muted `.ds-list__meta` line; rows are divided by dotted rules. `.ds-list--compact` is the one-line variant inside panels, title left and figure right.\n- `.ds-panel`: outlined module with the title inside it: `.ds-panel__title` in the second heading colour over a hairline, then `.ds-panel__body`. Body helpers: `.ds-panel__text`, `.ds-panel__small`, `.ds-panel__option` (poll choice), `.ds-panel__field` (input with button), `.ds-panel__actions`. `.ds-panel--inverse` is the blue block, at most one per page. There is no title bar.\n- `.ds-sidebar`: the index block of an inner page, in the right third of a split band: `.ds-sidebar__title` strip over a `.ds-sidebar__list` of `.ds-sidebar__item` rows holding `.ds-link--quiet` links, optionally followed by a badge. It is a block the height of its links, not a column.\n- `.ds-grid`: the row of four modules under the stage, `--space-5` apart. Each `.ds-grid__cell` is tinted with `--1`, `--2`, `--3` or the base fill and holds a centred 14px `.ds-grid__title`, then a `.ds-grid__icon` (inline SVG, 34px) beside a 10px `.ds-grid__text` that ends in a `.ds-grid__more` link on its own line, bold in `--color-heading` because a cell fill may be close to the link colour.\n- `.ds-badge`: 10px bold accent chip (\"new\"). 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 or two words, 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`: short 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 line of `.ds-pagination__link` quiet links (`<< Previous`, numbers, `Next >>`) with the current page as an accent chip, `.ds-pagination__current`. No boxes around the numbers.\n- `.ds-dialog`: a small window in the page flow: 310px, outlined in `--color-border-strong`, striped `.ds-dialog__title` bar with a centred title, `.ds-dialog__body` with centred `.ds-dialog__text` and `.ds-dialog__actions`. `.ds-dialog__backdrop` is the flat dark area it sits on. No blur, no shadow, no floating.\n- `.ds-empty`: dotted-outline block with a centred muted `.ds-empty__text` and one button.\n- `.ds-footer`: centred. `.ds-footer__links` is a row of quiet links under a dotted rule, `.ds-footer__text` the muted copyright line, and `.ds-footer__band` the thin closing band in the inverse tone with `.ds-footer__band-link` links.\n- `.ds-menu` (`.ds-menu__list`, `.ds-menu__link`): a nav item with a drop-down list on hover or focus.\n- `.ds-meter` (`.ds-meter__label`) with `.ds-progress` (`--30`, `--50`, `--70`, `--90`, `.ds-progress__bar`): a segmented loading or signal bar with its label.\n- `.ds-accordion` (`__summary`, `__body`): a `<details>` panel for specifications.\n- `.ds-tooltip`: a word with a dotted underline; its `.ds-tooltip__tip` is a small label on `--color-inverse` shown above it on hover or focus.\n- `.ds-carousel` (`__track`, `__slide`, `__title`, `__text`, `__bar`, `__arrow`): a scroll-snap featured viewer with a counter such as 01/03.\n- `.ds-avatar`: initials in a round badge beside a name.\n\n## Never\n\n- `content-width <= 720px`: text stays inside the fixed sheet.\n- `palette-colours <= 18`: black, greys, white, acid green, aqua, steel blue, plus status lamps.\n- `font-size <= 18px`: the wordmark and hero title are the largest text.\n- `font-size >= 10px`: nothing is set below 10px.\n- `font-weight <= 900`: regular, bold, and the 900 cut for headings.\n- `font-families <= 3`: Arial, Arial Black and a monospace.\n- `letter-spacing <= 0px`: no text is tracked.\n- `uppercase-text <= 20%`: only headings and panel titles are capitals.\n- `underlined-links >= 85%`: every link is underlined.\n- `border-radius <= 0px`: every box is square.\n- `border-width <= 1px`: every line is a hairline.\n- `box-shadow = none`: nothing casts a shadow.\n- `text-shadow = none`: text is flat.\n- `gradient-fills <= 8%`: stripes are for the page, the current tab, the dialog title and the inverse block.\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 module copies `.ds-panel` (1px outline, title inside over a hairline, body padded `--space-5`); a new stretch of content on the open sheet starts with a `.ds-section` heading and its dotted line; a new band is a `.ds-page__band` cut into equal parts, never a column that runs the height of the page; a new inner page copies one of the specimen's inner views (`.ds-page-header` with the breadcrumb, full-width bands, the `.ds-sidebar` block in the right third of a split band); a new control copies `.ds-button` or `.ds-form__input`; 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, never use a status colour as a text colour, and never assume the sheet is dark: another palette may make it white. Keep one stage per home page, keep the bar fill for the current tab and dialog titles only, centre what the specimen centres, and separate things with dotted rules and hairlines, never with soft shadows, title bars on every box or large cards.\n",
    "components.css": "/* Layout tokens (structure part). The showcase page: one centred column,\n   a row of equal tabs, one framed stage and bands of equal modules. */\n:root {\n  --size-page: 720px;\n  --size-stage: 210px;\n  --size-figure: 300px;\n  --size-figure-height: 130px;\n  --size-mark: 26px;\n  --size-icon: 34px;\n  --size-search: 96px;\n  --size-tip: 220px;\n  --size-label: 92px;\n  --size-field: 190px;\n  --size-area: 56px;\n  --size-dialog: 310px;\n  --size-led: 5px;\n  --size-dot: 4px;\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  --space-7: 20px;\n}\n\n/* ---------- shell ---------- */\n.ds-page {\n  margin: 0;\n  padding: var(--space-6) 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 sheet: one fixed column centred in the window. All text sits on 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/* The body of a page: full-width bands stacked with an even gap. */\n.ds-page__body {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-6);\n  padding: var(--space-6) var(--space-7) var(--space-7);\n}\n/* A band cut into equal columns. */\n.ds-page__band {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-page__band--split {\n  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);\n}\n/* Columns of equal height, for two outlined blocks side by side. */\n.ds-page__band--even {\n  align-items: stretch;\n}\n.ds-page__stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\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  justify-content: center;\n  gap: var(--space-6);\n  margin: 0;\n  padding: var(--space-3) 0;\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/* Masthead: tools on the left, the wordmark in the middle, search on the\n   right. */\n.ds-nav__masthead {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n  gap: var(--space-5);\n  align-items: center;\n  padding: var(--space-5) var(--space-7) var(--space-4);\n}\n.ds-nav__tools {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-nav__brand {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-nav__tagline {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-nav__search {\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n/* The tab row: equal cells across the sheet, standing on a line in the bar\n   colour. */\n.ds-nav__tabs {\n  display: flex;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0 var(--space-7);\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-nav__tab {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-3) var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: 0;\n  border-radius: var(--radius-panel) var(--radius-panel) 0 0;\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#software:target) .ds-nav__link[href=\"#software\"],\n.ds-page:has(#mysoftware:target) .ds-nav__link[href=\"#mysoftware\"],\n.ds-page:has(#submit:target) .ds-nav__link[href=\"#submit\"],\n.ds-page:has(#feature:target) .ds-nav__link[href=\"#feature\"] {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-color: var(--color-bar);\n  text-shadow: var(--shadow-text);\n}\n/* The line of text links under the tabs: the current section's pages. */\n.ds-nav__sub {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-7);\n  margin: 0;\n  padding: var(--space-3) var(--space-7);\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\n/* ---------- breadcrumb ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__sep {\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- section head ---------- */\n/* A heading written on the sheet, with a dotted line running from it to\n   the \"more\" link. */\n.ds-section {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-4);\n}\n.ds-section__title {\n  flex: none;\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.ds-section__line {\n  flex: 1 1 auto;\n  height: var(--size-dot);\n  background-image: radial-gradient(circle, var(--color-border-strong) 30%, transparent 36%);\n  background-size: var(--size-dot) var(--size-dot);\n}\n.ds-section__more {\n  flex: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- hero: the stage ---------- */\n.ds-hero {\n  overflow: hidden;\n  background: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  text-align: center;\n}\n.ds-hero__stage {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  box-sizing: border-box;\n  min-height: var(--size-stage);\n  padding: var(--space-6) var(--space-7) var(--space-5);\n}\n.ds-hero__figure {\n  display: block;\n  width: var(--size-figure);\n  max-width: 100%;\n  height: var(--size-figure-height);\n  color: var(--color-border-strong);\n}\n.ds-hero__kicker {\n  display: inline-block;\n  margin: var(--space-4) 0 var(--space-2);\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 0;\n  font-size: var(--text-large);\n}\n/* The foot of the stage: one button and a line of links, on a hairline. */\n.ds-hero__actions {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: var(--space-6);\n  padding: var(--space-4) var(--space-5);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* ---------- ticker ---------- */\n/* One line of news in a capsule: a label plate, the headline, the date. */\n.ds-ticker {\n  display: flex;\n  align-items: stretch;\n  overflow: hidden;\n  margin: 0;\n  background: var(--color-surface-alt);\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}\n.ds-ticker__label {\n  flex: none;\n  padding: var(--space-2) var(--space-5);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-ticker__text {\n  flex: 1 1 auto;\n  padding: var(--space-2) var(--space-5);\n}\n.ds-ticker__date {\n  flex: none;\n  padding: var(--space-2) var(--space-5);\n  color: var(--color-text-muted);\n}\n\n/* ---------- page header ---------- */\n/* An inner page opens with the trail and title on the left, one action on\n   the right, closed by a dotted line. */\n.ds-page-header {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) auto;\n  gap: var(--space-5);\n  align-items: end;\n  padding: 0 0 var(--space-4);\n  border-bottom: var(--border-width) dotted var(--color-border-strong);\n}\n.ds-page-header__title {\n  margin: var(--space-3) 0 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/* Bare centred figures, divided by dotted lines. */\n.ds-stat {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  text-align: center;\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);\n  border-left: var(--border-width) dotted var(--color-border-strong);\n}\n.ds-stat__item:first-child {\n  border-left: 0;\n}\n.ds-stat__value {\n  display: block;\n  color: var(--color-heading-alt);\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}\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}\n\n/* ---------- prose ---------- */\n.ds-prose {\n  padding: 0;\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-prose h1 { font-size: var(--text-h1); }\n.ds-prose h2 { font-size: var(--text-h2); }\n.ds-prose h3 { font-size: var(--text-h3); color: var(--color-heading-alt); }\n.ds-prose p {\n  margin: 0 0 var(--space-5);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-5);\n  padding: 0 0 0 var(--space-6);\n}\n.ds-prose ul {\n  list-style: square;\n}\n.ds-prose code {\n  font-family: var(--font-mono);\n  font-size: var(--text-base);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n}\n.ds-prose__byline {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* ---------- buttons ---------- */\n.ds-button {\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-1) var(--space-5);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  white-space: nowrap;\n  transition: var(--transition);\n  cursor: pointer;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n/* Destructive action: the secondary control with a danger rim and lamp. */\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  justify-content: center;\n  align-items: center;\n  gap: var(--space-4);\n  padding: var(--space-3) 0;\n}\n\n/* ---------- form ---------- */\n/* Labels stand above their controls; the form is an outlined module. */\n.ds-form {\n  margin: 0;\n  padding: var(--space-5) var(--space-6);\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-form__grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-4) var(--space-6);\n}\n.ds-form__row {\n  min-width: 0;\n}\n.ds-form__row--wide {\n  grid-column: 1 / -1;\n}\n.ds-form__label {\n  display: block;\n  margin: 0 0 var(--space-2);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  font-weight: var(--weight-body);\n  color: var(--color-text-muted);\n}\n.ds-form__input {\n  box-sizing: border-box;\n  width: 100%;\n  margin: 0;\n  padding: var(--space-1) var(--space-4);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-form__input:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input--small {\n  width: var(--size-search);\n  font-size: var(--text-small);\n}\n.ds-form__input--area {\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  justify-content: center;\n  gap: var(--space-4);\n  margin: var(--space-5) 0 0;\n  padding: var(--space-4) 0 0;\n  border-top: var(--border-width) dotted var(--color-border-strong);\n}\n\n/* ---------- table ---------- */\n/* Ruled rows without a box: a strong line under the head, hairlines\n   between rows. */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  border-spacing: 0;\n  font-size: var(--text-base);\n}\n.ds-table th {\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-heading);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-align: left;\n  text-transform: var(--ui-transform);\n}\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-table tr:nth-child(odd) 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-3) var(--space-4) 0;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-align: center;\n}\n\n/* ---------- tabs ---------- */\n/* A centred line of text switches divided by hairlines; the current one is\n   a filled chip. */\n.ds-tabs {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  margin: 0 0 var(--space-3);\n  padding: 0;\n  list-style: none;\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__item {\n  padding: 0 var(--space-4);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-tabs__item:first-child {\n  border-left: 0;\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-1) var(--space-4);\n  color: var(--color-link-quiet);\n  border-radius: var(--radius-pill);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  text-decoration: none;\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) 0 var(--space-4);\n  border-bottom: var(--border-width) dotted var(--color-border-strong);\n}\n.ds-list__item:last-child {\n  border-bottom: 0;\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: title left, figure right. */\n.ds-list--compact .ds-list__item {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) 0;\n}\n.ds-list--compact .ds-list__title {\n  font-weight: var(--weight-body);\n}\n.ds-list--compact .ds-list__meta {\n  flex: none;\n}\n\n/* ---------- panel ---------- */\n/* An outlined module: the title is written inside it, over a hairline. */\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 var(--space-5);\n  padding: var(--space-4) 0 var(--space-3);\n  color: var(--color-heading-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-panel__body {\n  padding: var(--space-4) var(--space-5) var(--space-5);\n}\n.ds-panel__body > :first-child { margin-top: 0; }\n.ds-panel__body > :last-child { margin-bottom: 0; }\n.ds-panel__text {\n  margin: 0 0 var(--space-4);\n}\n.ds-panel__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/* Inverted panel: everything in it, links included, takes the inverse text\n   colour. */\n.ds-panel--inverse {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-color: var(--color-border-strong);\n}\n.ds-panel--inverse .ds-panel__title {\n  color: var(--color-inverse-text);\n  border-bottom-color: var(--color-inverse-text);\n}\n.ds-panel--inverse .ds-panel__small {\n  color: var(--color-inverse-text);\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/* ---------- sidebar ---------- */\n/* The index block of an inner page: a heading strip and a column of\n   links, in the last column of a split band. */\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-3) var(--space-5);\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-3) var(--space-5) var(--space-4);\n  list-style: none;\n}\n.ds-sidebar__item {\n  padding: var(--space-2) 0;\n}\n\n/* ---------- grid ---------- */\n/* The row of four modules under the stage. */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n}\n.ds-grid__cell {\n  display: grid;\n  grid-template-columns: var(--size-icon) minmax(0, 1fr);\n  column-gap: var(--space-4);\n  align-content: start;\n  padding: var(--space-4) var(--space-4) var(--space-5);\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  grid-column: 1 / -1;\n  margin: 0 0 var(--space-3);\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  text-align: center;\n}\n.ds-grid__icon {\n  display: block;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  color: var(--color-heading);\n}\n.ds-grid__text {\n  margin: 0;\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n/* The cell's link is bold in the heading colour: a cell fill may be close\n   to the link colour. */\n.ds-grid__more,\n.ds-grid__more:visited {\n  display: block;\n  margin-top: var(--space-2);\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\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/* 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/* A centred line of numbers; the current page is a filled chip. */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  gap: var(--space-4);\n  margin: 0;\n  padding: var(--space-4) 0 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-pagination__link,\n.ds-pagination__current {\n  display: block;\n  padding: 0 var(--space-3);\n}\n.ds-pagination__current {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-pill);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- dialog ---------- */\n/* A small window in the page flow: title bar, message, buttons. */\n.ds-dialog__backdrop {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-6);\n  background: var(--color-overlay);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\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-3) var(--space-5);\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  text-align: center;\n}\n.ds-dialog__body {\n  padding: var(--space-5) var(--space-6);\n  text-align: center;\n}\n.ds-dialog__text {\n  margin: 0 0 var(--space-5);\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-4);\n}\n\n/* ---------- empty ---------- */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: var(--space-6) var(--space-5);\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/* Centred lines on the sheet under a dotted rule, then a thin closing\n   band in the inverse tone. */\n.ds-footer {\n  display: block;\n  text-align: center;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-3) var(--space-6);\n  margin: 0 var(--space-7);\n  padding: var(--space-5) 0 var(--space-2);\n  list-style: none;\n  border-top: var(--border-width) dotted var(--color-border-strong);\n}\n.ds-footer__text {\n  margin: 0;\n  padding: 0 var(--space-7) var(--space-5);\n  color: var(--color-text-muted);\n}\n.ds-footer__band {\n  margin: 0;\n  padding: var(--space-3) var(--space-7);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\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\n/* current item also carries a marker that no token set can remove */\n.ds-nav__link.is-current::before,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"]::before,\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"]::before,\n.ds-page:has(#software:target) .ds-nav__link[href=\"#software\"]::before,\n.ds-page:has(#mysoftware:target) .ds-nav__link[href=\"#mysoftware\"]::before,\n.ds-page:has(#submit:target) .ds-nav__link[href=\"#submit\"]::before,\n.ds-page:has(#feature:target) .ds-nav__link[href=\"#feature\"]::before {\n  content: \">\";\n  margin-right: var(--space-1);\n}\n\n/* ---------- period components: menu, progress, accordion, tooltip, carousel, avatar ---------- */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 20;\n  display: none;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-panel);\n  text-shadow: none;\n  text-transform: none;\n}\n.ds-menu:hover > .ds-menu__list,\n.ds-menu:focus-within > .ds-menu__list {\n  display: block;\n}\n.ds-menu__link {\n  display: block;\n  padding: var(--space-1) var(--space-3);\n  color: var(--color-link);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-decoration: var(--link-decoration-quiet);\n  white-space: nowrap;\n}\n.ds-menu__link:hover,\n.ds-menu__link:focus-visible {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n}\n.ds-meter {\n  margin: 0 0 var(--space-3);\n}\n.ds-meter__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-1);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-progress {\n  display: block;\n  height: var(--space-3);\n  overflow: hidden;\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n}\n.ds-progress__bar {\n  display: block;\n  height: 100%;\n  background-color: var(--color-accent);\n  background-image: repeating-linear-gradient(90deg, transparent 0, transparent var(--size-seg), var(--color-surface-strong) var(--size-seg), var(--color-surface-strong) var(--size-seg-gap));\n}\n.ds-progress--90 .ds-progress__bar { width: 90%; }\n.ds-accordion {\n  margin: 0 0 var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-accordion__summary {\n  padding: var(--space-1) var(--space-3);\n  cursor: pointer;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-accordion__body {\n  padding: var(--space-2) var(--space-3);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n.ds-tooltip {\n  position: relative;\n  border-bottom: var(--border-width) dotted var(--color-border-strong);\n  cursor: help;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: 100%;\n  left: 0;\n  z-index: 20;\n  display: none;\n  width: max-content;\n  max-width: var(--size-tip);\n  padding: var(--space-1) var(--space-2);\n  background: var(--color-inverse);\n  color: var(--color-inverse-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  text-shadow: none;\n  text-transform: none;\n}\n.ds-tooltip:hover > .ds-tooltip__tip,\n.ds-tooltip:focus > .ds-tooltip__tip,\n.ds-tooltip:focus-within > .ds-tooltip__tip {\n  display: block;\n}\n.ds-carousel {\n  margin: 0 0 var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n}\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  margin-right: var(--space-2);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-shadow: none;\n  vertical-align: middle;\n}\n\n:root {\n  --size-tip: 220px;\n  --size-menu: 150px;\n  --size-avatar: 24px;\n  --size-seg: 6px;\n  --size-seg-gap: 8px;\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Y2K futurism showcase, 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__masthead\">\n      <ul class=\"ds-nav__tools\">\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Sign in</a></li>\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Register</a></li>\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Site map</a></li>\n      </ul>\n      <div class=\"ds-nav__brand\">\n        <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n          <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M3.34 17A10 4 -30 1 1 20.66 7A10 4 -30 1 1 3.34 17z\"/><circle cx=\"12\" cy=\"12\" r=\"3.6\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"20.3\" cy=\"7.2\" r=\"1.7\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n          <span class=\"ds-brand__name\">chronoskin</span>\n        </a>\n        <span class=\"ds-nav__tagline\">pocket machines and the software that runs them</span>\n      </div>\n      <form class=\"ds-nav__search\" action=\"#\">\n        <input class=\"ds-form__input ds-form__input--small\" id=\"q\" type=\"text\" aria-label=\"Search\">\n        <button class=\"ds-button\" type=\"button\">Search</button>\n      </form>\n    </div>\n    <ul class=\"ds-nav__tabs\">\n      <li class=\"ds-nav__tab\"><a class=\"ds-nav__link\" href=\"#home\">Home</a></li>\n      <li class=\"ds-menu ds-nav__tab\"><a class=\"ds-nav__link\" href=\"#software\">Software</a><ul class=\"ds-menu__list\"><li><a class=\"ds-menu__link\" href=\"#software\">Newest</a></li><li><a class=\"ds-menu__link\" href=\"#mysoftware\">Most popular</a></li><li><a class=\"ds-menu__link\" href=\"#submit\">Editor's picks</a></li></ul></li>\n      <li class=\"ds-nav__tab\"><a class=\"ds-nav__link\" href=\"#mysoftware\">My software</a></li>\n      <li class=\"ds-nav__tab\"><a class=\"ds-nav__link\" href=\"#submit\">Submit a title</a></li>\n      <li class=\"ds-nav__tab\"><a class=\"ds-nav__link\" href=\"#feature\">Features</a></li>\n    </ul>\n    <ul class=\"ds-nav__sub\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Hot news</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#software\">New this month</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#software\">Downloads</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Owners club</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Where to buy</a></li>\n    </ul>\n  </header>\n\n  <section class=\"ds-view ds-view--home\" id=\"home\">\n    <main class=\"ds-page__body\">\n\n      <section class=\"ds-hero\" data-component=\"hero\">\n        <div class=\"ds-hero__stage\">\n          <svg class=\"ds-hero__figure\" viewBox=\"0 0 300 130\" aria-hidden=\"true\">\n            <rect x=\"112\" y=\"14\" width=\"76\" height=\"102\" rx=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <rect x=\"122\" y=\"24\" width=\"56\" height=\"50\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/>\n            <path d=\"M128 62l10-14 8 9 12-20 14 25z\" fill=\"currentColor\"/>\n            <circle cx=\"150\" cy=\"95\" r=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <circle cx=\"150\" cy=\"95\" r=\"3\" fill=\"currentColor\"/>\n            <path d=\"M108 40L48 24M108 66H52M108 92l-58 16M192 40l60-16M192 66h56M192 92l58 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"1 5\" stroke-linecap=\"round\"/>\n            <rect x=\"18\" y=\"12\" width=\"26\" height=\"20\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <circle cx=\"31\" cy=\"22\" r=\"5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/>\n            <circle cx=\"34\" cy=\"66\" r=\"13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <circle cx=\"34\" cy=\"66\" r=\"3\" fill=\"currentColor\"/>\n            <rect x=\"24\" y=\"96\" width=\"20\" height=\"26\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <path d=\"M28 102h12M28 107h12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/>\n            <rect x=\"256\" y=\"10\" width=\"22\" height=\"26\" rx=\"5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <circle cx=\"267\" cy=\"28\" r=\"3\" fill=\"currentColor\"/>\n            <path d=\"M254 58h28v16h-28zM260 74v5M276 74v5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <path d=\"M256 100h26M256 108h26M256 116h26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n          </svg>\n          <span class=\"ds-hero__kicker\">New for summer</span>\n          <h1 class=\"ds-hero__title\">Everything you carry. One pocket.</h1>\n          <p class=\"ds-hero__text\">The chronoskin P5 keeps your music, pictures and diary on a machine the size of a wallet.</p>\n        </div>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button\" href=\"#feature\">Meet the P5</a>\n          <a class=\"ds-link\" href=\"#feature\">Take the tour</a>\n          <a class=\"ds-link\" href=\"#software\">Compare models</a>\n        </div>\n      </section>\n\n      <p class=\"ds-ticker\">\n        <span class=\"ds-ticker__label\">Hot news</span>\n        <span class=\"ds-ticker__text\"><a class=\"ds-link ds-link--quiet\" href=\"#software\">Sync kit 2.0 adds wireless transfer for every P series model</a></span>\n        <span class=\"ds-ticker__date\">1 June 2001</span>\n      </p>\n\n      <div class=\"ds-grid\" data-component=\"grid\">\n        <div class=\"ds-grid__cell ds-grid__cell--1\">\n          <h2 class=\"ds-grid__title\">P5 handheld</h2>\n          <svg class=\"ds-grid__icon\" viewBox=\"0 0 34 34\" aria-hidden=\"true\"><rect x=\"8\" y=\"2\" width=\"18\" height=\"30\" rx=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><rect x=\"11\" y=\"6\" width=\"12\" height=\"13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/><circle cx=\"17\" cy=\"25\" r=\"3\" fill=\"currentColor\"/></svg>\n          <p class=\"ds-grid__text\">Colour screen, 16 MB, two weeks on one charge. <a class=\"ds-link ds-grid__more\" href=\"#software\">Details &gt;&gt;</a></p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <h2 class=\"ds-grid__title\">Tempo player</h2>\n          <svg class=\"ds-grid__icon\" viewBox=\"0 0 34 34\" aria-hidden=\"true\"><circle cx=\"17\" cy=\"17\" r=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"17\" cy=\"17\" r=\"5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"/><circle cx=\"17\" cy=\"17\" r=\"1.5\" fill=\"currentColor\"/></svg>\n          <p class=\"ds-grid__text\">Sixty songs in a case smaller than a disc. <a class=\"ds-link ds-grid__more\" href=\"#software\">Details &gt;&gt;</a></p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--3\">\n          <h2 class=\"ds-grid__title\">Iris camera</h2>\n          <svg class=\"ds-grid__icon\" viewBox=\"0 0 34 34\" aria-hidden=\"true\"><rect x=\"2\" y=\"9\" width=\"30\" height=\"19\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"17\" cy=\"18.5\" r=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><rect x=\"6\" y=\"5\" width=\"7\" height=\"4\" fill=\"currentColor\"/></svg>\n          <p class=\"ds-grid__text\">Two megapixels, straight to the handheld. <a class=\"ds-link ds-grid__more\" href=\"#software\">Details &gt;&gt;</a></p>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <h2 class=\"ds-grid__title\">Sync kit 2.0</h2>\n          <svg class=\"ds-grid__icon\" viewBox=\"0 0 34 34\" aria-hidden=\"true\"><path d=\"M5 12h20l-5-6M29 22H9l5 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n          <p class=\"ds-grid__text\">Free for owners. Cable or wireless. <a class=\"ds-link ds-grid__more\" href=\"#software\">Download &gt;&gt;</a></p>\n        </div>\n      </div>\n\n      <div class=\"ds-page__band\">\n        <div>\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Latest</h2>\n            <span class=\"ds-section__line\"></span>\n            <a class=\"ds-link ds-section__more\" href=\"#software\">all &gt;&gt;</a>\n          </div>\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#software\">Tempo firmware 1.3</a> <span class=\"ds-badge\">New</span>\n              <span class=\"ds-list__text\">Gapless playback and a louder line out.</span>\n              <span class=\"ds-list__meta\">31 May | 420 KB</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#feature\">Owners club meets in June</a>\n              <span class=\"ds-list__text\">Three cities, free entry with any P series machine.</span>\n              <span class=\"ds-list__meta\">29 May | events</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-link ds-list__title\" href=\"#software\">Diary 4 reads desktop calendars</a>\n              <span class=\"ds-list__text\">Bring a year of appointments across in one pass.</span>\n              <span class=\"ds-list__meta\">26 May | 1.1 MB</span>\n            </li>\n          </ul>\n        </div>\n\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h2 class=\"ds-panel__title\">Top downloads</h2>\n          <div class=\"ds-panel__body\">\n<details class=\"ds-accordion\"><summary class=\"ds-accordion__summary\">System needs</summary><div class=\"ds-accordion__body\"><p>Any desktop from 1999 on, 32 MB of memory.</p></div></details>\n<p class=\"ds-panel__text\"><span class=\"ds-tooltip\" tabindex=\"0\">Skin pack<span class=\"ds-tooltip__tip\" role=\"tooltip\">Works with every player build</span></span></p>\n\n            <ul class=\"ds-list ds-list--compact\">\n              <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Sync kit 2.0</a> <span class=\"ds-list__meta\">48,210</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Tempo firmware 1.3</a> <span class=\"ds-list__meta\">19,774</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Diary 4</a> <span class=\"ds-list__meta\">12,035</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Pocket atlas</a> <span class=\"ds-list__meta\">9,460</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Iris album</a> <span class=\"ds-list__meta\">7,118</span></li>\n            </ul>\n            <p class=\"ds-panel__small\">Counted over the last seven days.</p>\n          </div>\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<div class=\"ds-meter\"><p class=\"ds-meter__label\"><span>Mirror signal</span><span>88%</span></p><div class=\"ds-progress ds-progress--90\" role=\"progressbar\" aria-label=\"Mirror signal\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"88\"><span class=\"ds-progress__bar\"></span></div></div>\n\n            <p class=\"ds-panel__text\">What do you carry every day?</p>\n            <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> A handheld</label>\n            <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> A music player</label>\n            <label class=\"ds-panel__option\"><input class=\"ds-form__checkbox\" type=\"radio\" name=\"poll\"> Both</label>\n            <div class=\"ds-panel__actions\">\n              <button class=\"ds-button\" type=\"button\">Vote</button>\n              <a class=\"ds-link\" href=\"#home\">Results</a>\n            </div>\n          </div>\n        </section>\n      </div>\n\n\n      <div class=\"ds-page__band\">\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Owners club</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">Register your machine for free software and early news.</p>\n            <a class=\"ds-button\" href=\"#mysoftware\">Sign in</a>\n            <p class=\"ds-panel__small\">Not a member? <a class=\"ds-link\" href=\"#mysoftware\">Register</a></p>\n          </div>\n        </section>\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\">One short letter 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        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Where to buy</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">Find a dealer with the P5 on the shelf.</p>\n            <div class=\"ds-panel__field\">\n              <select class=\"ds-form__input ds-form__input--small\" aria-label=\"Region\">\n                <option>Choose...</option>\n                <option>North</option>\n                <option>South</option>\n              </select>\n              <button class=\"ds-button\" type=\"button\">Go</button>\n            </div>\n          </div>\n        </section>\n      </div>\n\n    </main>\n  </section>\n\n  <!-- Catalogue: the list page of the software section. -->\n  <section class=\"ds-view\" id=\"software\">\n    <div class=\"ds-page__body\">\n\n      <div class=\"ds-page-header\">\n        <div>\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=\"#software\">Software</a></li>\n            <li class=\"ds-breadcrumb__sep\">&gt;</li>\n            <li class=\"ds-breadcrumb__current\">Catalogue</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">Software catalogue</h1>\n          <p class=\"ds-page-header__text\">Everything that runs on a P series machine, newest first.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button\" href=\"#submit\">Submit a title</a>\n        </div>\n      </div>\n\n      <div>\n        <ul class=\"ds-tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#software\">All kinds</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#software\">System</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#software\">Organiser</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#software\">Travel</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#software\">Pictures</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#software\">Games</a></li>\n        </ul>\n        <table class=\"ds-table\">\n          <thead>\n            <tr><th>Title</th><th>Kind</th><th>Added</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><a class=\"ds-link\" href=\"#mysoftware\">Tempo firmware 1.3</a> <span class=\"ds-badge\">New</span></td><td>System</td><td>31 May</td><td class=\"ds-table__num\">420 KB</td><td class=\"ds-table__num\">19,774</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Sync kit 2.0</a></td><td>System</td><td>29 May</td><td class=\"ds-table__num\">1,412 KB</td><td class=\"ds-table__num\">48,210</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Diary 4</a></td><td>Organiser</td><td>26 May</td><td class=\"ds-table__num\">1,108 KB</td><td class=\"ds-table__num\">12,035</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Pocket atlas</a></td><td>Travel</td><td>22 May</td><td class=\"ds-table__num\">2,790 KB</td><td class=\"ds-table__num\">9,460</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Iris album</a></td><td>Pictures</td><td>19 May</td><td class=\"ds-table__num\">640 KB</td><td class=\"ds-table__num\">7,118</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Night sky chart</a></td><td>Travel</td><td>15 May</td><td class=\"ds-table__num\">880 KB</td><td class=\"ds-table__num\">5,871</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Tile rally</a></td><td>Games</td><td>11 May</td><td class=\"ds-table__num\">310 KB</td><td class=\"ds-table__num\">5,206</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#mysoftware\">Expense pad</a></td><td>Organiser</td><td>8 May</td><td class=\"ds-table__num\">220 KB</td><td class=\"ds-table__num\">4,655</td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Add to my machine</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=\"#software\">&lt;&lt; Previous</a></li>\n          <li><span class=\"ds-pagination__current\">1</span></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#software\">2</a></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#software\">3</a></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#software\">4</a></li>\n          <li><a class=\"ds-link ds-link--quiet ds-pagination__link\" href=\"#software\">Next &gt;&gt;</a></li>\n        </ul>\n        <p class=\"ds-table__caption\">Titles marked new were added in the last seven days.</p>\n      </div>\n\n    </div>\n  </section>\n\n  <!-- My software: the owner's own page. -->\n  <section class=\"ds-view\" id=\"mysoftware\">\n    <div class=\"ds-page__body\">\n\n      <div class=\"ds-page-header\" data-component=\"page-header\">\n        <div>\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=\"#software\">Software</a></li>\n            <li class=\"ds-breadcrumb__sep\">&gt;</li>\n            <li class=\"ds-breadcrumb__current\">My software</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">My software</h1>\n          <p class=\"ds-page-header__text\">Titles registered to your machine, and what each one needs next.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button\" href=\"#software\">Add a title</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\">titles installed</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">9.6 MB</span><span class=\"ds-stat__label\">memory in use</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">3</span><span class=\"ds-stat__label\">updates waiting</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">6.4 MB</span><span class=\"ds-stat__label\">memory free</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> Iris album did not arrive whole. Repair it or fetch it again from another mirror.</p>\n      </div>\n\n      <div>\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#mysoftware\">All titles</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#mysoftware\">Updates</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#mysoftware\">Removed</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#mysoftware\">Settings</a></li>\n        </ul>\n        <table class=\"ds-table\" data-component=\"table\">\n          <thead>\n            <tr><th>Title</th><th>Kind</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=\"#software\">Sync kit 2.0</a></td><td>System</td><td class=\"ds-table__num\">1,412 KB</td><td><span class=\"ds-badge ds-badge--success\" data-component=\"badge\">Current</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Fetch again</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#software\">Diary 4</a></td><td>Organiser</td><td class=\"ds-table__num\">1,108 KB</td><td><span class=\"ds-badge ds-badge--warning\">Update due</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Update</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#software\">Pocket atlas</a></td><td>Travel</td><td class=\"ds-table__num\">2,790 KB</td><td><span class=\"ds-badge ds-badge--success\">Current</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Fetch again</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#software\">Iris album</a></td><td>Pictures</td><td class=\"ds-table__num\">640 KB</td><td><span class=\"ds-badge ds-badge--danger\">Damaged</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Remove</a></td></tr>\n            <tr><td><a class=\"ds-link\" href=\"#software\">Tempo firmware 1.3</a></td><td>System</td><td class=\"ds-table__num\">420 KB</td><td><span class=\"ds-badge ds-badge--success\">Current</span></td><td><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">Fetch again</a></td></tr>\n          </tbody>\n        </table>\n        <p class=\"ds-table__caption\">Updates install the next time the machine sits in its cradle.</p>\n        <div class=\"ds-buttons\" data-component=\"buttons\">\n          <button class=\"ds-button\" type=\"button\">Update all</button>\n          <button class=\"ds-button ds-button--secondary\" type=\"button\">Check again</button>\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Remove damaged</button>\n          <button class=\"ds-button is-disabled\" type=\"button\" disabled>Sync now</button>\n        </div>\n      </div>\n\n      <div class=\"ds-page__band ds-page__band--split ds-page__band--even\">\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 title</h2>\n            <div class=\"ds-dialog__body\">\n              <p class=\"ds-dialog__text\">Take Iris album off your machine? Your pictures stay where they are.</p>\n              <div class=\"ds-dialog__actions\">\n                <a class=\"ds-button ds-button--danger\" href=\"#mysoftware\">Remove</a>\n                <a class=\"ds-button ds-button--secondary\" href=\"#mysoftware\">Keep it</a>\n              </div>\n            </div>\n          </div>\n        </div>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <p class=\"ds-empty__text\">You have not submitted a title yet.</p>\n          <a class=\"ds-button\" href=\"#submit\">Submit a title</a>\n        </div>\n      </div>\n\n    </div>\n  </section>\n\n  <!-- Submit a title: the form page. -->\n  <section class=\"ds-view\" id=\"submit\">\n    <div class=\"ds-page__body\">\n\n      <div class=\"ds-page-header\">\n        <div>\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=\"#software\">Software</a></li>\n            <li class=\"ds-breadcrumb__sep\">&gt;</li>\n            <li class=\"ds-breadcrumb__current\">Submit a title</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">Submit a title</h1>\n          <p class=\"ds-page-header__text\">Wrote something for the P series? Send it in for the catalogue.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#software\">Back to the catalogue</a>\n        </div>\n      </div>\n\n      <div class=\"ds-page__band ds-page__band--split\">\n        <div>\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">Title details</h2>\n            <span class=\"ds-section__line\"></span>\n            <a class=\"ds-link ds-section__more\" href=\"#feature\">rules &gt;&gt;</a>\n          </div>\n          <form class=\"ds-form\" data-component=\"form\" action=\"#submit\">\n            <div class=\"ds-form__grid\">\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"f-name\">Title</label>\n                <input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"Night sky chart\">\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"f-mail\">Your e-mail</label>\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 class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"f-kind\">Kind</label>\n                <select class=\"ds-form__input\" id=\"f-kind\">\n                  <option>Travel</option>\n                  <option>Organiser</option>\n                </select>\n              </div>\n              <div class=\"ds-form__row\">\n                <span class=\"ds-form__label\">Options</span>\n                <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Show my name with the title</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 class=\"ds-form__row ds-form__row--wide\">\n                <label class=\"ds-form__label\" for=\"f-note\">Notes <span class=\"ds-form__hint\">(optional)</span></label>\n                <textarea class=\"ds-form__input ds-form__input--area\" id=\"f-note\"></textarea>\n              </div>\n            </div>\n            <div class=\"ds-form__actions\">\n              <button class=\"ds-button\" type=\"button\">Send title</button>\n              <a class=\"ds-button ds-button--secondary\" href=\"#software\">Cancel</a>\n            </div>\n          </form>\n        </div>\n        <div class=\"ds-page__stack\">\n          <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n            <h2 class=\"ds-sidebar__title\">In software</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#software\">Browse the catalogue</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#software\">Top 50</a> <span class=\"ds-badge ds-badge--alt\">Live</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#mysoftware\">My software</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#submit\">Submit a title</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#feature\">Developer notes</a></li>\n            </ul>\n          </aside>\n          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Before you send</h2>\n            <div class=\"ds-panel__body\">\n              <p class=\"ds-panel__text\">Titles must run on a stock P5 and fit in 3 MB. We test each one for a week.</p>\n              <p class=\"ds-panel__small\">You hear from us within ten days.</p>\n            </div>\n          </section>\n        </div>\n      </div>\n\n    </div>\n  </section>\n\n  <!-- Feature: an article page. -->\n  <section class=\"ds-view\" id=\"feature\">\n    <div class=\"ds-page__body\">\n\n      <div class=\"ds-page-header\">\n        <div>\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\">A week with a handheld</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">Features</h1>\n          <p class=\"ds-page-header__text\">Long reads from the review desk, one every Friday.</p>\n        </div>\n        <div class=\"ds-page-header__action\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#home\">Front page</a>\n        </div>\n      </div>\n\n      <div class=\"ds-page__band ds-page__band--split\">\n        <div>\n          <div class=\"ds-section\">\n            <h2 class=\"ds-section__title\">This week</h2>\n            <span class=\"ds-section__line\"></span>\n            <a class=\"ds-link ds-section__more\" href=\"#feature\">archive &gt;&gt;</a>\n          </div>\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>A week with nothing but a handheld</h1>\n            <p class=\"ds-prose__byline\">By the review desk, 31 May</p>\n            <p class=\"ds-prose__lead\">We left the laptop at the office and ran a full week of work from a coat pocket.</p>\n            <h2>What worked</h2>\n            <p>Mail, the diary and notes were never a problem. The surprise was <strong>battery life</strong>: one charge lasted until Friday.</p>\n            <ul>\n              <li>Mail over an infrared phone link</li>\n              <li>Notes written with the stylus</li>\n              <li>Music on the train</li>\n            </ul>\n            <h3>What to set first</h3>\n            <p>Open the sync panel and enter <code>auto=hourly</code>. The machine then keeps itself current whenever it sits in the cradle.</p>\n          </article>\n        </div>\n        <div class=\"ds-page__stack\">\n          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Used in this feature</h2>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-list ds-list--compact\">\n                <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Sync kit 2.0</a> <span class=\"ds-list__meta\">1,412 KB</span></li>\n                <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Diary 4</a> <span class=\"ds-list__meta\">1,108 KB</span></li>\n                <li class=\"ds-list__item\"><a class=\"ds-link ds-list__title\" href=\"#software\">Pocket atlas</a> <span class=\"ds-list__meta\">2,790 KB</span></li>\n              </ul>\n            </div>\n          </section>\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\">One short letter 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          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Owners club</h2>\n            <div class=\"ds-panel__body\">\n              <p class=\"ds-panel__text\">Register your machine for free software and early news.</p>\n              <a class=\"ds-button\" href=\"#mysoftware\">Sign in</a>\n            </div>\n          </section>\n        </div>\n      </div>\n\n      <div>\n        <div class=\"ds-section\">\n          <h2 class=\"ds-section__title\">Read next</h2>\n          <span class=\"ds-section__line\"></span>\n        </div>\n        <p class=\"ds-links\" data-component=\"links\">\n          <a class=\"ds-link\" href=\"#feature\">Tempo against the disc player</a>\n          <a class=\"ds-link is-visited\" href=\"#feature\">Iris in low light</a>\n          <a class=\"ds-link is-hover\" href=\"#feature\">Ten titles for travellers</a>\n          <a class=\"ds-link is-active\" href=\"#software\">Fetch the sync kit</a>\n          <a class=\"ds-link ds-link--quiet\" href=\"#home\">Front page</a>\n        </p>\n      </div>\n\n    </div>\n  </section>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">About chronoskin</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Press room</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Jobs</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Contact</a></li>\n      <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Site map</a></li>\n    </ul>\n    <p class=\"ds-footer__text\">Copyright 2001 chronoskin devices. All rights reserved.</p>\n    <p class=\"ds-footer__band\"><a class=\"ds-footer__band-link\" href=\"#home\">Terms of use</a> | <a class=\"ds-footer__band-link\" href=\"#home\">Privacy</a> | Other chronoskin sites around the world</p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.y2k-futurism.portal.s03.p11.t02.u03\",\n  \"library\": \"2026.10.09-1036\",\n  \"era\": {\n    \"slug\": \"y2k-futurism\",\n    \"years\": [\n      1999,\n      2003\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1024,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-yk-3b23\",\n  \"short\": \"v1-yk-3b23\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #000000;\n  --color-canvas: #181818;\n  --color-surface: #181818;\n  --color-surface-alt: #282828;\n  --color-surface-strong: #000000;\n  --color-bar: #98ff00;\n  --color-bar-text: #000000;\n  --color-bar-alt: #484848;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #ffffff;\n  --color-inverse-text: #000000;\n  --color-text: #e0e0e8;\n  --color-text-muted: #c0c0c0;\n  --color-heading: #ffffff;\n  --color-heading-alt: #98ff00;\n  --color-link: #98ff00;\n  --color-link-quiet: #e0e0e8;\n  --color-link-visited: #98d0d0;\n  --color-link-hover: #ffffff;\n  --color-link-active: #a8ff00;\n  --color-border: #686868;\n  --color-border-strong: #98ff00;\n  --color-border-muted: #484848;\n  --color-accent: #98d0d0;\n  --color-accent-text: #000000;\n  --color-accent-alt: #a8ff00;\n  --color-fill-1: #282828;\n  --color-fill-2: #202020;\n  --color-fill-3: #484848;\n  --color-fill-4: #385090;\n  --color-button: #98ff00;\n  --color-button-text: #000000;\n  --color-button-hover-text: #000000;\n  --color-button-secondary: #686868;\n  --color-button-secondary-text: #ffffff;\n  --color-input: #000000;\n  --color-input-text: #98ff00;\n  --color-input-border: #989898;\n  --color-disabled: #282828;\n  --color-disabled-text: #989898;\n  --color-danger: #ff0000;\n  --color-danger-surface: #ffffff;\n  --color-success: #98ff00;\n  --color-warning: #ffc800;\n  --color-notice: #385090;\n  --color-notice-text: #ffffff;\n  --color-focus: #98d0d0;\n  --color-shadow: #000000;\n  --color-overlay: #000000;\n}\n\n/* @part type */\n:root {\n  --font-body: Arial, Helvetica, sans-serif;\n  --font-heading: \"Arial Black\", \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n  --font-ui: Arial, Helvetica, sans-serif;\n  --font-mono: Courier, \"Courier New\", monospace;\n  --text-base: 13px;\n  --text-small: 10px;\n  --text-ui: 11px;\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: 900;\n  --weight-display: 900;\n  --weight-ui: 700;\n  --heading-transform: uppercase;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: underline;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 1px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: none;\n  --shadow-control-pressed: none;\n  --shadow-dialog: none;\n  --shadow-text: none;\n  --fill-page: repeating-linear-gradient(to bottom, color-mix(in srgb, var(--color-page) 92%, white) 0, color-mix(in srgb, var(--color-page) 92%, white) 2px, color-mix(in srgb, var(--color-page) 90%, black) 2px, color-mix(in srgb, var(--color-page) 90%, black) 4px);\n  --fill-bar: repeating-linear-gradient(to bottom, var(--color-bar) 0, var(--color-bar) 2px, color-mix(in srgb, var(--color-bar) 84%, black) 2px, color-mix(in srgb, var(--color-bar) 84%, black) 4px);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: repeating-linear-gradient(to bottom, var(--color-inverse) 0, var(--color-inverse) 2px, color-mix(in srgb, var(--color-inverse) 86%, black) 2px, color-mix(in srgb, var(--color-inverse) 86%, black) 4px);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 75%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
