{
  "id": "v1-te-2242",
  "long_id": "v1.table-era-90s.portal.s02.p02.t04.u02",
  "name": "Table-era news front, 1999",
  "era": {
    "slug": "table-era-90s",
    "code": "te",
    "name": "Table-era web",
    "years": [
      1996,
      2000
    ],
    "description": "The first commercial web, 1996 to 2000: narrow fixed pages built from tables, blue underlined links on white or grey, Times and Arial at their default sizes, bevelled form buttons, and flat colour strips where a designer wanted emphasis."
  },
  "archetype": "portal",
  "mode": "mix",
  "viewport": {
    "width": 800,
    "fluid": false
  },
  "summary": "A news and services front page as built between 1996 and 2000: one fixed 770px table centred in an 800px window, with a flat coloured navigation rail running down the left side and the stories in ruled cells to its right. Nearly all text is an underlined blue link in the browser's default 16px serif, with 13px sans-serif only in the rail, the controls and the small print, on white with one lavender rail, grey title strips and grey slabs. It was the standard skeleton of newspaper, broadcaster and magazine sites until stylesheet layouts replaced the rail-and-table page after 2000.",
  "url": "https://chrono.skin/s/v1-te-2242",
  "preview_url": "https://chrono.skin/s/v1-te-2242/specimen.html",
  "files": {
    "STYLE.md": "# Table-era news front, 1999\n\n## Summary\n\nA news and services front page as built between 1996 and 2000: one fixed 770px table centred in an 800px window, with a flat coloured navigation rail running down the left side and the stories in ruled cells to its right. Nearly all text is an underlined blue link in the browser's default 16px serif, with 13px sans-serif only in the rail, the controls and the small print, on white with one lavender rail, grey title strips and grey slabs. It was the standard skeleton of newspaper, broadcaster and magazine sites until stylesheet layouts replaced the rail-and-table page after 2000.\n\n## Layout\n\n- The page is fixed, not fluid, and centred: `--size-page` is 770px, and `.ds-page__frame` sits in the middle of the window with the spare width split on both sides. Nothing stretches with the window.\n- Order from the top: `.ds-masthead` (wordmark at the left, a small tagline, the search form at the right, all on one line), then `.ds-page__columns`, then the `.ds-footer` opened by a 2px `.ds-rule`.\n- The specimen is one example site, a news front with a reader reviews section, of five views. The `.ds-masthead`, the rail with the `.ds-nav` and the `.ds-footer` are written once, outside the views; each view is a `.ds-view` section inside `.ds-page__content`, the content column, and one shows at a time.\n- `.ds-page__columns` is two columns: the `--size-rail` (130px) `.ds-page__rail` on the left, filled with `--fill-bar` for the whole height of the page, and the content column `.ds-page__content` to its right after a `--space-4` (12px) gutter. The rail holds the `.ds-nav` (a vertical list of section links, one per line, then a second group under a grey label) and under it `.ds-sidebar` blocks. There is no horizontal navigation bar and no right-hand sidebar.\n- The home page content column, `.ds-page__main`, runs: the `.ds-tabs` line of service links, the `.ds-dateline`, a `.ds-notice` for breaking news, then `.ds-page__lead`, which sets the `.ds-hero` lead story beside a `--size-side` (220px) column of modules (`.ds-page__side`: a `.ds-panel` and a short list). Under the lead comes the `.ds-grid`, one outlined band of four ruled cells, then `.ds-sections`, two equal columns of headline groups, each a linked section name over a `.ds-list`.\n- Inner pages (a story, a section list, a form) keep the masthead, the rail and the footer unchanged. The lead story, the module column and the cell band go. The content column, `.ds-page__inner`, is a single 628px column and opens with the `.ds-breadcrumb`, then the `.ds-page-header` (title and one line at the left, one button at the right, closed by its own 2px rule in the bar colour), then the `.ds-tabs` line when the page has views of its own. Below come `.ds-stat` when the page has figures, the `.ds-table` or `.ds-list`, the `.ds-pagination`, or the running text of a story, or the `.ds-notices` and the `.ds-form`.\n- Views: `front` is the front page (service links, dateline, breaking news, lead story and modules, the cell band, two columns of headlines). `story` is one story as running text, closed by a line of related links and more headlines of its section. `reviews` is the list of a section: figures, the table of reader reviews with its status key, and the page links. `send` is the form for a new review, with its notices and the message box that discarding a draft opens. `mine` is the reader's own list while it is empty: the empty state, a list of products readers ask about and a panel of advice. The rail marks the view that is showing with the strip in `--fill-bar-alt`; the front page link is marked when the address names no view.\n- Blocks are separated by rules, title strips and outlines, never by cards with shadows or wide gutters. Everything in the content column is left-aligned; nothing is centred.\n- Spacing scale: `--space-1` 2px is the padding of strips, table cells and controls; `--space-2` 4px is the side padding of cells and strips and the gap between a title and its body; `--space-3` 8px is the page margin, paragraph spacing and the gap between buttons and form rows; `--space-4` 12px is the gutter between columns and the gap between neighbouring blocks of the content column; `--space-5` 20px is the indent of short bullet lists and the foot of the page; `--space-6` 40px is the indent of headline lists and lists in running text.\n- Fixed sizes: `--size-search` 130px masthead search field, `--size-field` 220px text input, `--size-area` 320px textarea, `--size-check` 13px checkbox, `--size-dialog` 360px message box.\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- Family: pure red links and navy on white, with one gold strip, three light greys, maroon for visited links and errors, dark green and orange for status.\n- `--color-page`, `--color-canvas`, `--color-surface` are white `#ffffff`; `--color-surface-alt` `#efefef` is the resting folder tabs of an inner page, alternate table rows and the empty state; `--color-surface-strong` `#e0e0e0`.\n- `--color-bar` `#ffe888` (gold, black text, red links) is the current tab, the strip under the tabs, panel title strips, the table head and the 2px rule under the view tabs. `--color-bar-alt` `#e0e0e0` (grey, black text) is the resting tabs, sidebar and form title strips, figure labels and the footer link strip.\n- `--color-inverse` `#003098` (navy, white text) is the message box title bar only. The same navy is `--color-heading-alt` (the brand name, section headings, h3, positive figures), `--color-accent` (the solid badge, white text) and `--color-link-active`.\n- Links are pure red `--color-link` `#ff0000`, always underlined; visited is maroon `--color-link-visited` `#900000`; hover equals the link colour because the era had no hover effect.\n- Text is `--color-text` black; `--color-text-muted` `#686868` is for counts, the meta line under a list entry and the legal line. `--color-heading` is black.\n- `--color-accent-alt` `#900000` (maroon) is the kicker over the feature title, prices, the \"New!\" word, the star of a required field and negative figures. `--color-danger` is the same maroon: error text is bold and never underlined, which is what tells it from a red link.\n- `--color-fill-1` to `--color-fill-4` are `#efefef`, `#e0e0e0`, `#ffe888`, `#ffffff`: the title strips of the four department boxes. `--color-fill-1` is also the feature box and the form box; `--color-fill-3` is the cover block. They carry black text and red links.\n- `--color-success` `#006600` and `--color-danger` `#900000` carry white text as fills; `--color-warning` `#ff5000` (orange) is a fill only and carries black text. Notices are grey `#efefef`; the error notice is maroon text on white in a maroon outline.\n- Borders: `--color-border` `#989898` for every outline, `--color-border-strong` `#000000` for the cover block and the rule under a section heading, `--color-border-muted` `#c0c0c0` for the rules between rows and for bevels, `--color-input-border` `#c0c0c0` for input bevels.\n- Two families and a code face. `--font-body` (Times New Roman, Times) sets running text, feature text and table data. `--font-heading` and `--font-ui` (Trebuchet MS, one of the 1996 core web fonts, falling back to Arial) set the brand name, headings, title strips, tabs, every list of links in a box, forms, buttons, notices and all small print. `--font-mono` (Courier New) is for code and textareas.\n- Sizes: `--text-base` 16px for running text; `--text-ui` 12px for tabs, the strip, box lists, meta lines, the line under a table entry, department box text, forms and buttons; `--text-small` 11px for the tagline, account links, kickers, table heads, figure labels, view tabs, captions and the footer; `--text-h3` 13px bold for title strips; `--text-h2` 16px bold for section headings; `--text-large` 18px for the feature title, figures and a lead line; `--text-h1` 20px for a page title; `--text-display` 24px for the brand name only. Line height is `normal` everywhere; bold is 700.\n- No uppercase transform and no letter spacing; capitals in kickers and status labels are typed. All three link decorations are `underline`.\n- `--border-width` 1px `solid` for outlines and rules, `--border-width-strong` 2px for the rule the view tabs stand on and control bevels. The surface is shaded the way shop fronts of 1999 shaded their bars with a strip of picture: `--fill-bar`, `--fill-bar-alt`, `--fill-inverse` and `--fill-accent` run from a much lighter mix of the palette colour at the top to the colour itself at the bottom, and so do the three button fills. `--fill-panel`, `--fill-input` and `--fill-page` stay flat. Boxes and the sheet carry a 1px outline with a 2px edge at the right and bottom (`--shadow-panel`, in `--color-border-muted`) and the message box a 2px one (`--shadow-dialog`, in `--color-border`), none of them blurred; the control and text shadows are `none`. Radius 0; `--focus-ring` is `1px dotted`; `--transition` is `none`.\n- Not expressible by a token, written literally in `components.css`: the bevel of buttons, selects, page keys, the brand tile and the message box is `border-style: outset` and of inputs, checkboxes, pressed buttons and the current page key `inset`, drawn in `--color-border-muted` and `--color-input-border`.\n\n## Components\n\n- `.ds-menu`: a jump menu in the sidebar, a `<select>` \"Go to a section...\" with a `.ds-menu__go` button beside it; use it where a page offers a quick way to a section.\n- `.ds-page`: on `<body>`; page fill and body type. `.ds-page__frame` is the centred 770px table; `.ds-page__columns` the rail-plus-content grid; `.ds-page__rail` the coloured left column; `.ds-page__content` the content column that holds the views; `.ds-page__main` the home content column and `.ds-page__inner` the inner-page content column, both with `--space-4` between blocks; `.ds-page__lead` sets the lead story beside `.ds-page__side`. The page margin is padding inside `.ds-page__frame`, not on `<body>`: when a palette gives `--color-canvas` a colour of its own the frame shows as a sheet on the page and its content keeps that margin from the sheet edge. `.ds-page__frame` takes `--shadow-panel` as well, so a surface set that outlines its boxes also outlines the sheet.\n- `.ds-masthead`: the line above the columns: the `.ds-brand`, `.ds-masthead__tagline`, and `.ds-masthead__search` with `.ds-masthead__field`.\n- `.ds-brand`: the site's mark and name, at the left of the `.ds-masthead`. `.ds-brand__mark` is a small square tile dressed like the button (`--fill-button` over `--color-button`, `--color-button-text` for the drawing, the 2px `outset` bevel in `--color-border-muted`, `--radius-control`, `--shadow-control`), so every palette and surface reskins it; it holds the mark as inline SVG painted with `currentColor`, drawn with square line caps, a 3 unit stroke and crisp edges. `.ds-brand__name` is the name in the heading family at `--text-display`, with the heading weight, tracking and transform, in `--color-heading-alt`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the site navigation, a vertical list at the top of the rail. `.ds-nav__links` holds `.ds-nav__item` / `.ds-nav__link`, one per line, section names typed in capitals; the link of the view that is showing is a bold strip in `--fill-bar-alt` without underline (`components.css` has one selector per view for this, and `is-current` does the same by hand). `.ds-nav__label` is a grey strip that opens a second group of links. A link to a section that has no view of its own carries `.ds-nav__link--elsewhere`: it opens the nearest fitting view and is never marked as the view that is showing.\n- `.ds-hero`: the lead story, the era's page introduction: `.ds-hero__title` (19px bold, itself a link), one or two `.ds-hero__lead` paragraphs, `.ds-hero__action` (the bold \"FULL STORY\" link, the main action) and `.ds-hero__related`, a short bullet list. Never a band, a banner or a large heading.\n- `.ds-page-header`: the head of an inner page, used instead of `.ds-hero`: `.ds-page-header__text` with `.ds-page-header__title` and `.ds-page-header__lead`, `.ds-page-header__action` with one button at the right, and a 2px bottom rule in `--color-bar`.\n- `.ds-prose`: running text; styles `h1`, `h2`, `h3`, `p`, `ul`, `ol`, `strong`, `code`; `.ds-prose__lead` for a bold opening line.\n- `.ds-link`: every link. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` for secondary links in the sans face, `.ds-link--strong` for bold links. `.ds-links` wraps a line of links.\n- `.ds-button`: grey bevelled button with a 13px sans label, on a `<button>` or, when it leads to another page, on a link. `.ds-button--secondary` is a darker grey, `.ds-button--danger` the destructive action (the same bevel on `--color-surface` with a bold label in `--color-danger`, never a red button). States `is-hover`, `is-pressed`, `is-focus`, `is-disabled`. `.ds-buttons` lays out a row.\n- `.ds-form`: a stacked form: each `.ds-form__row` puts a bold `.ds-form__label` on its own line above its `.ds-form__field`. Controls: `.ds-form__input`, `.ds-form__select`, `.ds-form__textarea`, `.ds-form__check` inside a `.ds-form__option` line. `.ds-form__hint` for help, `.ds-form__error` for a bold red message under the field, `.ds-form__actions` for the button row. A select is a bevelled key in `--fill-button` with `--color-button-text`; a checkbox is a small inset field in `--color-input` whose tick is a block of `--color-input-text`.\n- `.ds-table`: one ruled grid with no space between cells. `.ds-table__head` (bar colour, bold sans, left-aligned; `--num` right-aligned), `.ds-table__cell` with `--num`, `--up`, `--down` and `--group` (a full-width summary row on `--color-fill-1`), `.ds-table__row--alt` for grey rows, `.ds-table__caption` for the line beneath.\n- `.ds-stat`: the row. One outlined line divided by 1px rules; each `.ds-stat__item` has its `.ds-stat__label` (13px sans) at the left and its `.ds-stat__value` (16px bold) at the right, on one baseline. Never stacked numerals or separate cards.\n- `.ds-list`: bulleted headline list with a 40px indent; `.ds-list__item`, `.ds-list__meta` (grey time in brackets), `.ds-list__more` (right-aligned link), `.ds-list--sub` for the indented list under an \"In depth:\" line.\n- `.ds-sections`: two columns of headline groups: `.ds-sections__title` (a linked section name in typed capitals) over a `.ds-list`, with `.ds-sections__sub` for the \"In depth:\" line.\n- `.ds-panel`: an outlined module: `.ds-panel__title` grey strip with an optional `.ds-panel__tool` link at the right, `.ds-panel__body`, `.ds-panel__list` for a short bullet list.\n- `.ds-grid`: one outlined band of four cells in a row, divided by 1px rules with no gap: `.ds-grid__cell` and `--2`, `--3`, `--4` for the four fills, `.ds-grid__title`, `.ds-grid__text`.\n- `.ds-tabs`: the era's tabs, one line of 16px links separated by bars over a 1px rule, used for the services line at the top of the home page and for the views of an inner page; `.ds-tabs__item`, `.ds-tabs__tab`, current `is-current` (bold, black, not underlined).\n- `.ds-badge`: small solid red label. `.ds-badge--text` is a bold red word beside a link; `.ds-badge--count` is a grey count in brackets. Status labels, typed in capitals: `.ds-badge--success` (green, white text), `.ds-badge--warning` (orange, black text), `.ds-badge--danger` (red, white text). `.ds-badges` is a key line under a table.\n- `.ds-sidebar`: a block of the rail under the navigation: `.ds-sidebar__title` grey strip, `.ds-sidebar__list` / `.ds-sidebar__item` (links, one per line, no bullets), `.ds-sidebar__text`, `.ds-sidebar__lookup` with `.ds-sidebar__field` for a one-field form.\n- `.ds-notice`: a flag and a line: `.ds-notice__label` is a solid red block with white capitals, `.ds-notice__text` the message on grey. `.ds-notice--error` is red text on white with a red border. `.ds-notices` stacks several.\n- `.ds-pagination`: one left-aligned line: `.ds-pagination__label`, then `.ds-pagination__item` entries separated by bars holding `.ds-pagination__link`; current `is-current`, `is-disabled`.\n- `.ds-breadcrumb`: a 13px sans path separated by colons; `.ds-breadcrumb__item`, last one `is-current` (bold).\n- `.ds-dialog`: a 360px box in the page flow, left-aligned, with a 1px black border, `.ds-dialog__title` bar in `--fill-inverse`, `.ds-dialog__body` and right-aligned `.ds-dialog__actions`. No backdrop, no shadow.\n- `.ds-empty`: outlined grey block with `.ds-empty__title`, `.ds-empty__text` and a button, left-aligned.\n- `.ds-footer`: a `.ds-rule`, then `.ds-footer__links`, a grey strip of `.ds-footer__item` links separated by bars after a bold `.ds-footer__label`, then `.ds-footer__legal`. Left-aligned.\n- `.ds-view`: one screen of the example site; only the one named in the address shows, and `.ds-view--home` shows when none is named. It has no box of its own.\n- `.ds-rule`: 2px rule in the bar colour; `.ds-rule--thin` 1px grey. `.ds-heading`: a section title on a grey strip. `.ds-dateline`: the date and update line.\n\n## Never\n\n- `row-gap <= 2px`: headlines and table rows follow each other with no space between them.\n- `block-gap <= 12px`: neighbouring blocks are at most one 12px gutter apart.\n- `content-width <= 770px`: the page is a fixed 770px table and never grows with the window.\n- `content-width >= 700px`: the table fills an 800px window; the page is never a narrow centred column.\n- `font-size <= 24px`: the brand name is the largest text; headings stop at 18px.\n- `font-size >= 10px`: small print is 10px, nothing smaller.\n- `font-weight >= 400`: only regular and bold were measured.\n- `font-families <= 3`: Times, Trebuchet and Courier.\n- `underlined-links >= 90%`: every reference underlines its links; only a current tab or page key loses the underline.\n- `letter-spacing = 0`: no reference tracks its text.\n- `uppercase-text <= 0%`: no reference uses text-transform; capitals are typed.\n- `border-radius <= 0px`: no reference has a rounded corner.\n- `box-shadow-blur <= 0px`: shadows are hard bevel lines and the offset edge of the message box; nothing is blurred.\n- `text-shadow = none`: no reference has a text shadow.\n- `gradient-fills <= 6%`: only title strips and the top edge of form fields are shaded; every other fill is flat.\n- `border-width <= 3px`: the widest border is the 3px bevel of a control and the header and footer rules.\n- `transition = none`: nothing in the references changes on hover.\n- `animation = none`: no reference has a CSS animation.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new module is a `.ds-panel` in the column beside the lead or a cell of the `.ds-grid` band; a new group of headlines is one more entry in `.ds-sections`; a new group of navigation or service links is a `.ds-sidebar` block in the rail under a grey strip; anything tabular is a `.ds-table` with ruled cells. Keep the rail on the left on every page, keep the content column left-aligned, keep text at 16px serif and controls at 13px sans, keep links underlined and blue, separate with 1px outlines, 2px rules and grey strips, and never add radius, shadow, gradient, hover effects, centred blocks or more whitespace than `--space-4` between blocks.\n",
    "components.css": "/* Layout tokens (structure part). Read from the 1999 news front page and the\n   1998 personal start page: a 770px table set against the left edge of an\n   800px window, a 130px coloured navigation rail down the left side, a 220px\n   module column beside the lead story, 2px and 4px cell padding, 12px\n   gutters and a 40px list indent. */\n:root {\n  --size-page: 770px;\n  --size-rail: 130px;\n  --size-side: 220px;\n  --size-search: 130px;\n  --size-field: 220px;\n  --size-area: 320px;\n  --size-check: 13px;\n  --size-dialog: 360px;\n  --space-1: 2px;\n  --space-2: 4px;\n  --space-3: 8px;\n  --space-4: 12px;\n  --space-5: 20px;\n  --space-6: 40px;\n}\n\n/* ---------- shell ---------- */\n.ds-page {\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n/* The page is a fixed table against the left edge, not centred. */\n/* The margin is inside the sheet, so a canvas that differs from the page\n   keeps its text off the sheet edge. */\n.ds-page__frame {\n  width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-3);\n  background: var(--color-canvas);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n/* Coloured rail on the left, everything else to its right. */\n.ds-page__columns {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  column-gap: var(--space-4);\n  align-items: stretch;\n}\n.ds-page__rail {\n  display: flex;\n  flex-direction: column;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  text-shadow: var(--shadow-text);\n}\n.ds-page__main,\n.ds-page__inner {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: 0 0 var(--space-4);\n}\n/* The content column: holds the views, one of which shows. */\n.ds-page__content {\n  min-width: 0;\n}\n\n/* ---------- views: one screen of the example site shows at a time ---------- */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* Lead story beside a narrow module column. */\n.ds-page__lead {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n  column-gap: var(--space-4);\n  align-items: start;\n}\n.ds-page__side {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n  min-width: 0;\n}\n\n/* ---------- masthead: wordmark left, search right ---------- */\n.ds-masthead {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) 0 var(--space-3);\n}\n/* brand: the mark on a small bevelled tile dressed like the button, then the name */\n.ds-brand {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  color: var(--color-heading-alt);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  box-sizing: border-box;\n  width: calc(var(--text-display) + var(--space-2));\n  height: calc(var(--text-display) + var(--space-2));\n  background: var(--color-button);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width-strong) outset var(--color-border-muted);\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-heading);\n  line-height: var(--line-display);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-masthead__tagline {\n  flex: 1;\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-masthead__search {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form__input.ds-masthead__field {\n  width: var(--size-search);\n}\n\n/* ---------- rules and section headings ---------- */\n.ds-rule {\n  height: 0;\n  margin: var(--space-3) 0;\n  border: 0;\n  border-top: var(--border-width-strong) var(--border-style) var(--color-bar);\n}\n.ds-rule--thin {\n  margin: 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n/* Section title: a flat strip across the column. */\n.ds-heading {\n  margin: 0 0 var(--space-2);\n  padding: 0 var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n/* Date and update line above the lead story. */\n.ds-dateline {\n  margin: 0;\n  font-size: var(--text-base);\n}\n\n/* ---------- links ---------- */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\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  font-family: var(--font-ui);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--strong {\n  font-weight: var(--weight-bold);\n}\n.ds-links {\n  margin: 0;\n}\n\n/* ---------- nav: a vertical list at the top of the rail ---------- */\n.ds-nav {\n  padding: 0 0 var(--space-3);\n}\n.ds-nav__links {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  text-transform: var(--ui-transform);\n}\n.ds-nav__item {\n  padding: 0;\n}\n.ds-nav__link {\n  display: block;\n  padding: 0 var(--space-2);\n  color: var(--color-link);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__link:visited,\n.ds-nav__link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  color: var(--color-link-hover);\n}\n/* The page you are on: a strip in the secondary bar colour. One selector per\n   view, and the front page link when the address names no view; the two\n   review screens are entered from the rail and marked there. */\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#front\"]:not(.ds-nav__link--elsewhere),\n.ds-page:has(#front:target) .ds-nav__link[href=\"#front\"]:not(.ds-nav__link--elsewhere),\n.ds-page:has(#story:target) .ds-nav__link[href=\"#story\"]:not(.ds-nav__link--elsewhere),\n.ds-page:has(#reviews:target) .ds-nav__link[href=\"#reviews\"]:not(.ds-nav__link--elsewhere),\n.ds-page:has(#send:target) .ds-nav__link[href=\"#send\"]:not(.ds-nav__link--elsewhere),\n.ds-page:has(#mine:target) .ds-nav__link[href=\"#mine\"]:not(.ds-nav__link--elsewhere) {\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-nav__label {\n  margin: var(--space-3) 0 var(--space-1);\n  padding: var(--space-1) var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n}\n\n/* ---------- sidebar: further blocks of the rail ---------- */\n.ds-sidebar {\n  display: flex;\n  flex-direction: column;\n  padding: 0 0 var(--space-3);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-1);\n  padding: var(--space-1) var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n}\n.ds-sidebar__list {\n  margin: 0 0 var(--space-3);\n  padding: 0 var(--space-2);\n  list-style: none;\n}\n.ds-sidebar__item {\n  padding: 0;\n}\n.ds-sidebar__text {\n  margin: 0;\n  padding: 0 var(--space-2);\n}\n.ds-sidebar__lookup {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: var(--space-2) 0 var(--space-3);\n  padding: 0 var(--space-2);\n}\n.ds-sidebar__field {\n  width: 100%;\n  min-width: 0;\n}\n\n/* ---------- hero: the lead story ---------- */\n.ds-hero {\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-3);\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  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-3);\n  font-size: var(--text-base);\n}\n.ds-hero__action {\n  margin: 0 0 var(--space-3);\n}\n.ds-hero__related {\n  margin: 0;\n  padding: 0 0 0 var(--space-5);\n  list-style: disc;\n}\n\n/* ---------- prose ---------- */\n.ds-prose {\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  line-height: var(--line-body);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-3) 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-prose h1 {\n  margin-top: 0;\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n  color: var(--color-heading-alt);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-3);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-3);\n  padding: 0 0 0 var(--space-6);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- page header: title and one line, closed by a thick rule ---------- */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: 0 0 var(--space-2);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-bar);\n}\n.ds-page-header__text {\n  flex: 1;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__lead {\n  margin: 0;\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- buttons ---------- */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-button {\n  display: inline-block;\n  margin: 0;\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width-strong) outset var(--color-border-muted);\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-heading);\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  transition: var(--transition);\n  cursor: default;\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-pressed {\n  border-style: inset;\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 same bevel on the surface colour, the label in the\n   bold danger colour, which every palette keeps legible on its surface. */\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--color-surface);\n  color: var(--color-danger);\n  font-weight: var(--weight-bold);\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}\n\n/* ---------- form: each label on its own line above its control ---------- */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form__row {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-1);\n}\n.ds-form__label {\n  font-weight: var(--weight-bold);\n}\n.ds-form__field {\n  min-width: 0;\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-1);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width-strong) inset var(--color-input-border);\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  transition: var(--transition);\n}\n.ds-form__input {\n  width: var(--size-field);\n}\n.ds-form__select {\n  border-style: outset;\n  background: var(--fill-button);\n  color: var(--color-button-text);\n}\n.ds-form__textarea {\n  display: block;\n  width: var(--size-area);\n  font-family: var(--font-mono);\n}\n.ds-form__input:focus-visible,\n.ds-form__select:focus-visible,\n.ds-form__textarea:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input:disabled,\n.ds-form__input.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__check {\n  appearance: none;\n  box-sizing: border-box;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0 var(--space-2) 0 0;\n  padding: var(--space-1);\n  vertical-align: middle;\n  background-color: var(--color-input);\n  border: var(--border-width-strong) inset var(--color-input-border);\n  border-radius: var(--radius-control);\n}\n/* The tick is a block of the field's text colour inside the field's own\n   fill, so it reads the same on a light and on a dark page. */\n.ds-form__check:checked::before,\n.ds-form__check.is-checked::before {\n  content: \"\";\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: var(--color-input-text);\n}\n.ds-form__option {\n  display: block;\n}\n.ds-form__hint {\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-form__error {\n  display: block;\n  color: var(--color-danger);\n  font-weight: var(--weight-bold);\n}\n.ds-form__actions {\n  display: flex;\n  gap: var(--space-3);\n  padding: var(--space-2) 0 0;\n}\n\n/* ---------- table: one ruled grid, no spacing between cells ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-table__head {\n  padding: var(--space-1) var(--space-2);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  text-align: left;\n}\n.ds-table__cell {\n  padding: var(--space-1) var(--space-2);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  text-align: left;\n}\n.ds-table__head--num,\n.ds-table__cell--num {\n  text-align: right;\n}\n.ds-table__cell--group {\n  background: var(--color-fill-1);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-table__row--alt .ds-table__cell {\n  background: var(--color-surface-alt);\n}\n.ds-table__caption {\n  caption-side: bottom;\n  padding: var(--space-2) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-align: left;\n}\n\n/* ---------- stats: one ruled line, label left and figure right ---------- */\n.ds-stat {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-stat__item {\n  flex: 1;\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-2);\n}\n.ds-stat__item + .ds-stat__item {\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-stat__value {\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}\n\n/* ---------- sections: two columns of headline groups ---------- */\n.ds-sections {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  column-gap: var(--space-4);\n  row-gap: var(--space-4);\n}\n.ds-sections__title {\n  margin: 0;\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n}\n.ds-sections__sub {\n  margin: var(--space-3) 0 0;\n  padding: 0 0 0 var(--space-5);\n}\n\n/* ---------- list: bulleted headlines ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0 0 0 var(--space-6);\n  list-style: disc;\n  font-size: var(--text-base);\n}\n.ds-list--sub {\n  padding: 0 0 0 calc(var(--space-5) + var(--space-5));\n}\n.ds-list__item {\n  padding: 0;\n}\n.ds-list__meta {\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-list__more {\n  margin: var(--space-2) 0 0;\n  text-align: right;\n  font-size: var(--text-base);\n}\n\n/* ---------- panel: outlined module with a title strip ---------- */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin: 0;\n  padding: var(--space-1) var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-panel__tool {\n  font-weight: var(--weight-body);\n}\n.ds-panel__body {\n  padding: var(--space-2);\n}\n.ds-panel__list {\n  margin: 0;\n  padding: 0 0 0 var(--space-5);\n  list-style: disc;\n}\n\n/* ---------- grid: one outlined band of ruled cells ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr 1fr;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n}\n.ds-grid__cell {\n  min-width: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-fill-1);\n}\n.ds-grid__cell + .ds-grid__cell {\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-grid__cell--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-heading);\n}\n.ds-grid__text {\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- tabs: one line of links between bars ---------- */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin: 0;\n  padding: 0 0 var(--space-1);\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  text-transform: var(--ui-transform);\n}\n.ds-tabs__item + .ds-tabs__item::before {\n  content: \"|\";\n  padding: 0 var(--space-2);\n  color: var(--color-text);\n}\n.ds-tabs__tab {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link-hover);\n}\n.ds-tabs__tab.is-current {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n\n/* ---------- badge ---------- */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-2);\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-heading);\n}\n.ds-badge--text {\n  padding: 0;\n  background: transparent;\n  color: var(--color-accent-alt);\n}\n.ds-badge--count {\n  padding: 0;\n  background: transparent;\n  color: var(--color-text-muted);\n  font-weight: var(--weight-body);\n}\n.ds-badge--success {\n  background: var(--color-success);\n  color: var(--color-accent-text);\n}\n.ds-badge--warning {\n  background: var(--color-warning);\n  color: var(--color-bar-alt-text);\n}\n.ds-badge--danger {\n  background: var(--color-danger);\n  color: var(--color-accent-text);\n}\n.ds-badges {\n  display: block;\n  padding: 0 0 var(--space-1);\n}\n\n/* ---------- notice: a flag and a line of text ---------- */\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n.ds-notice {\n  display: flex;\n  align-items: stretch;\n  margin: 0;\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border: var(--border-width) var(--border-style) var(--color-bar-alt);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-notice__label {\n  flex: none;\n  display: flex;\n  align-items: center;\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  padding: var(--space-1) var(--space-3);\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--error .ds-notice__label {\n  background: var(--color-danger);\n  color: var(--color-accent-text);\n}\n\n/* ---------- pagination: one line against the left edge ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-pagination__label {\n  padding: 0 var(--space-3) 0 0;\n  font-weight: var(--weight-bold);\n}\n.ds-pagination__item + .ds-pagination__item::before {\n  content: \"|\";\n  padding: 0 var(--space-2);\n  color: var(--color-text);\n}\n.ds-pagination__link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  color: var(--color-link-hover);\n}\n.ds-pagination__link.is-current {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  text-decoration: none;\n}\n\n/* ---------- breadcrumb ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \":\";\n  padding: 0 var(--space-2) 0 var(--space-1);\n  color: var(--color-text);\n}\n.ds-breadcrumb__item.is-current {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- dialog: an outlined box in the page flow ---------- */\n.ds-dialog {\n  position: static;\n  box-sizing: border-box;\n  width: var(--size-dialog);\n  margin: 0;\n  padding: 0;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-1) var(--space-2);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-heading);\n}\n.ds-dialog__body {\n  margin: 0;\n  padding: var(--space-3);\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-3);\n  padding: 0 var(--space-3) var(--space-3);\n}\n\n/* ---------- empty state ---------- */\n.ds-empty {\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-base);\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-3);\n}\n\n/* ---------- footer: a strip of links, then small print, left-aligned ---------- */\n.ds-footer {\n  padding: 0 0 var(--space-5);\n  font-size: var(--text-base);\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0;\n  padding: var(--space-1) var(--space-2);\n  list-style: none;\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-footer__item + .ds-footer__item::before {\n  content: \"|\";\n  padding: 0 var(--space-2);\n}\n.ds-footer__label {\n  padding: 0 var(--space-3) 0 0;\n  font-weight: var(--weight-bold);\n}\n.ds-footer__legal {\n  margin: var(--space-3) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- menu (jump menu: a drop-down list with a Go button) ---------- */\n.ds-menu {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: var(--space-2) 0 var(--space-3);\n}\n.ds-menu__select {\n  flex: 1 1 auto;\n  min-width: 0;\n  width: 100%;\n}\n.ds-menu__go {\n  flex: none;\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>Table-era news front, 1996 to 2000: 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\n<div class=\"ds-page__frame\">\n\n  <header class=\"ds-masthead\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9.2\"/><ellipse cx=\"12\" cy=\"12\" rx=\"4\" ry=\"9.2\"/><line x1=\"2.8\" y1=\"12\" x2=\"21.2\" y2=\"12\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <span class=\"ds-masthead__tagline\">News from the coast, around the clock</span>\n    <form class=\"ds-masthead__search\" action=\"#\">\n      <label for=\"m-q\">Search</label>\n      <select class=\"ds-form__select\" aria-label=\"Where to search\">\n        <option>chronoskin</option>\n        <option>Archive</option>\n        <option>The Web</option>\n      </select>\n      <input class=\"ds-form__input ds-masthead__field\" id=\"m-q\" type=\"text\">\n      <button class=\"ds-button\" type=\"button\">Find</button>\n    </form>\n  </header>\n\n  <div class=\"ds-page__columns\">\n\n    <div class=\"ds-page__rail\">\n      <nav class=\"ds-nav\" data-component=\"nav\">\n        <ul class=\"ds-nav__links\">\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#front\">FRONT PAGE</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#story\">REGION</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#story\">NATION</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#mine\">WEATHER</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#story\">MONEY</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#story\">SPORT</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#reviews\">COMPUTING</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#story\">SCIENCE</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#reviews\">THE ARTS</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#send\">OPINION</a></li>\n        </ul>\n        <h2 class=\"ds-nav__label\">YOUR REVIEWS:</h2>\n        <ul class=\"ds-nav__links\">\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#send\">send a review</a></li>\n          <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#mine\">my reviews</a></li>\n        </ul>\n      </nav>\n      <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n        <section>\n          <h2 class=\"ds-sidebar__title\">Jump To</h2>\n          <form class=\"ds-menu\" action=\"#\">\n            <select class=\"ds-form__select ds-menu__select\" aria-label=\"Go to a section\">\n              <option>Go to a section...</option>\n              <option>Region</option><option>Money</option><option>Sport</option><option>Science</option><option>Computing</option>\n            </select>\n            <a class=\"ds-button ds-menu__go\" href=\"#reviews\">Go</a>\n          </form>\n        </section>\n\n        <h2 class=\"ds-sidebar__title\">SERVICES:</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#reviews\">tide tables</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#reviews\">ferry times</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link is-visited\" href=\"#reviews\">news quiz</a></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#reviews\">daily almanac</a></li>\n        </ul>\n        <h2 class=\"ds-sidebar__title\">E-MAIL:</h2>\n        <p class=\"ds-sidebar__text\">Get the morning headlines by e-mail. Enter your address:</p>\n        <form class=\"ds-sidebar__lookup\" action=\"#\">\n          <input class=\"ds-form__input ds-sidebar__field\" type=\"text\" aria-label=\"E-mail address\">\n          <button class=\"ds-button\" type=\"button\">go</button>\n        </form>\n      </aside>\n    </div>\n\n    <main class=\"ds-page__content\">\n\n      <section class=\"ds-view ds-view--home\" id=\"front\">\n      <div class=\"ds-page__main\">\n\n        <ul class=\"ds-tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#front\">Today</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#mine\">My chronoskin</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Pictures</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Sound</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Morning Brief</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Reader Reviews</a></li>\n        </ul>\n\n        <p class=\"ds-dateline\"><a class=\"ds-link\" href=\"#reviews\">March 9, 1999</a> -- Updated 6:40 a.m. local time</p>\n\n        <p class=\"ds-notice\">\n          <span class=\"ds-notice__label\">JUST IN</span>\n          <span class=\"ds-notice__text\">The coast road is closed between Saltmarsh and Port Ellery after a landslip overnight. Buses are running by the inland route.</span>\n        </p>\n\n        <div class=\"ds-page__lead\">\n\n          <section class=\"ds-hero\" data-component=\"hero\">\n            <h1 class=\"ds-hero__title\"><a class=\"ds-link\" href=\"#story\">Lighthouse keepers hand over to the machines</a></h1>\n            <p class=\"ds-hero__lead\">The last staffed light on the northern coast was switched to automatic working at midnight, ending 160 years of watches kept by hand.</p>\n            <p class=\"ds-hero__lead\">\"The lamp will not notice the difference,\" said the departing keeper. \"The village might.\"</p>\n            <p class=\"ds-hero__action\"><a class=\"ds-link ds-link--strong\" href=\"#story\">FULL STORY</a></p>\n            <ul class=\"ds-hero__related\">\n              <li><a class=\"ds-link\" href=\"#story\">How an automatic light works</a></li>\n              <li><a class=\"ds-link\" href=\"#story\">A keeper's log, page by page</a></li>\n              <li><a class=\"ds-link is-visited\" href=\"#story\">Map of the northern lights</a></li>\n              <li>Message board: <a class=\"ds-link\" href=\"#reviews\">Your memories</a> <span class=\"ds-badge ds-badge--count\">(48)</span></li>\n            </ul>\n          </section>\n\n          <div class=\"ds-page__side\">\n            <section class=\"ds-panel\" data-component=\"panel\">\n              <h2 class=\"ds-panel__title\">On the radio today <a class=\"ds-link ds-panel__tool\" href=\"#reviews\">all</a></h2>\n              <div class=\"ds-panel__body\">\n                <ul class=\"ds-panel__list\">\n                  <li>7 a.m.: Harbour report</li>\n                  <li>1 p.m.: The council debate, live</li>\n                  <li>6 p.m.: <a class=\"ds-link\" href=\"#reviews\">Listeners' letters</a></li>\n                </ul>\n              </div>\n            </section>\n            <section>\n              <p class=\"ds-links\">In other news:</p>\n              <ul class=\"ds-hero__related\">\n                <li><a class=\"ds-link\" href=\"#story\">Fishing fleet stays in port for a third day</a></li>\n                <li><a class=\"ds-link\" href=\"#story\">School wins funds for a telescope</a> <span class=\"ds-badge ds-badge--text\">New!</span></li>\n                <li><a class=\"ds-link\" href=\"#story\">Mill chimney to come down in May</a></li>\n              </ul>\n            </section>\n          </div>\n\n        </div>\n\n        <div class=\"ds-grid\" data-component=\"grid\">\n          <div class=\"ds-grid__cell\">\n            <p class=\"ds-grid__title\">Weather</p>\n            <p class=\"ds-grid__text\">Showers, clearing by noon. High 11. <a class=\"ds-link\" href=\"#reviews\">Five-day outlook</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--2\">\n            <p class=\"ds-grid__title\">Tides</p>\n            <p class=\"ds-grid__text\">High 4:12 a.m. and 4:40 p.m. <a class=\"ds-link\" href=\"#story\">Full table</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--3\">\n            <p class=\"ds-grid__title\">Results</p>\n            <p class=\"ds-grid__text\">Rovers 2, Saltmarsh 2. <a class=\"ds-link\" href=\"#reviews\">All scores</a></p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--4\">\n            <p class=\"ds-grid__title\">Quick vote</p>\n            <p class=\"ds-grid__text\">Should the pier stay open in winter? <a class=\"ds-link\" href=\"#send\">Vote</a></p>\n          </div>\n        </div>\n\n        <div class=\"ds-sections\">\n          <section>\n            <h2 class=\"ds-sections__title\"><a class=\"ds-link\" href=\"#story\">REGION</a></h2>\n            <ul class=\"ds-list\" data-component=\"list\">\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Council agrees a later last bus on Saturdays</a> <span class=\"ds-list__meta\">(6:10 a.m.)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Market hall roof to be repaired by summer</a> <span class=\"ds-list__meta\">(5:45 a.m.)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Lost seal pup returned to the estuary</a> <span class=\"ds-list__meta\">(Mon 9:20 p.m.)</span></li>\n            </ul>\n            <p class=\"ds-sections__sub\">In depth:</p>\n            <ul class=\"ds-list ds-list--sub\">\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">The harbour at 200</a></li>\n            </ul>\n          </section>\n          <section>\n            <h2 class=\"ds-sections__title\"><a class=\"ds-link\" href=\"#reviews\">MONEY</a></h2>\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Boatyard takes on forty apprentices</a> <span class=\"ds-list__meta\">(6:25 a.m.)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Paper mill reports a steady quarter</a> <span class=\"ds-list__meta\">(Mon 4:02 p.m.)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link is-visited\" href=\"#story\">What the new postage rates will cost you</a> <span class=\"ds-list__meta\">(Mon 1:30 p.m.)</span></li>\n            </ul>\n            <p class=\"ds-list__more\"><a class=\"ds-link\" href=\"#reviews\">More money news</a></p>\n          </section>\n        </div>\n\n      </div>\n      </section>\n\n      <section class=\"ds-view\" id=\"story\">\n        <div class=\"ds-page__inner\">\n\n          <nav aria-label=\"Path\">\n            <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#front\">Front Page</a></li>\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#story\">Region</a></li>\n              <li class=\"ds-breadcrumb__item is-current\">Northern Coast</li>\n            </ol>\n          </nav>\n\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">Region</h1>\n              <p class=\"ds-page-header__lead\">March 9, 1999. Filed from the northern coast at 6:10 a.m.</p>\n            </div>\n            <div class=\"ds-page-header__action\">\n              <a class=\"ds-button\" href=\"#front\">Front Page</a>\n            </div>\n          </header>\n\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>Lighthouse keepers hand over to the machines</h1>\n            <p class=\"ds-prose__lead\">The last staffed light on the northern coast went automatic at midnight.</p>\n            <p>For 160 years somebody climbed the stairs at dusk. Last night nobody did. The lamp at Gull Point lit itself, turned itself and, at 6:02 this morning, <strong>put itself out again</strong> without a hand on the switch.</p>\n            <p>\"The lamp will not notice the difference,\" said the departing keeper, who leaves the service after 31 years. \"The village might.\"</p>\n            <h2>How the new light works</h2>\n            <p>A sensor on the gallery measures daylight. The station reports to the harbour office by telephone line every hour, and an engineer can ask for its state by sending the word <code>STATUS</code>.</p>\n            <ul>\n              <li>The lamp changes its own bulb from a rack of six.</li>\n              <li>A battery room keeps it lit for nine days without mains power.</li>\n              <li>The fog signal sounds when visibility falls below two miles.</li>\n            </ul>\n            <h3>Open day</h3>\n            <p>The keeper's cottage opens to visitors on the first Sunday of May. Entry is free; the stairs are not for the faint of heart.</p>\n          </article>\n\n          <p class=\"ds-links\" data-component=\"links\">\n            Related:\n            <a class=\"ds-link\" href=\"#story\">How an automatic light works</a> |\n            <a class=\"ds-link is-visited\" href=\"#story\">Map of the northern lights</a> |\n            <a class=\"ds-link is-hover\" href=\"#story\">A keeper's log, page by page</a> |\n            <a class=\"ds-link is-active\" href=\"#story\">Your memories</a> |\n            <a class=\"ds-link ds-link--quiet\" href=\"#story\">printer version</a> |\n            <a class=\"ds-link ds-link--strong\" href=\"#front\">MORE NEWS</a>\n          </p>\n\n          <section>\n            <h2 class=\"ds-heading\">More from the region</h2>\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Council agrees a later last bus on Saturdays</a> <span class=\"ds-list__meta\">(6:10 a.m.)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Market hall roof to be repaired by summer</a> <span class=\"ds-list__meta\">(5:45 a.m.)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#story\">Lost seal pup returned to the estuary</a> <span class=\"ds-list__meta\">(Mon 9:20 p.m.)</span></li>\n            </ul>\n          </section>\n\n        </div>\n      </section>\n\n      <section class=\"ds-view\" id=\"reviews\">\n        <div class=\"ds-page__inner\">\n\n          <nav aria-label=\"Path\">\n            <ol class=\"ds-breadcrumb\">\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#front\">Front Page</a></li>\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#reviews\">Computing</a></li>\n              <li class=\"ds-breadcrumb__item is-current\">Reader Reviews</li>\n            </ol>\n          </nav>\n\n          <header class=\"ds-page-header\" data-component=\"page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">Reader Reviews</h1>\n              <p class=\"ds-page-header__lead\">Modems, printers and programs, tested by the people who bought them.</p>\n            </div>\n            <div class=\"ds-page-header__action\">\n              <a class=\"ds-button\" href=\"#send\">Send a Review</a>\n            </div>\n          </header>\n\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#reviews\">Latest</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">By Product</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">By Reader</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Editors' Picks</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#mine\">My Reviews</a></li>\n          </ul>\n\n          <ul class=\"ds-stat\" data-component=\"stats\">\n            <li class=\"ds-stat__item\"><span class=\"ds-stat__label\">Reviews</span> <span class=\"ds-stat__value\">1,306</span></li>\n            <li class=\"ds-stat__item\"><span class=\"ds-stat__label\">This week</span> <span class=\"ds-stat__value\">27</span></li>\n            <li class=\"ds-stat__item\"><span class=\"ds-stat__label\">In the queue</span> <span class=\"ds-stat__value\">9</span></li>\n            <li class=\"ds-stat__item\"><span class=\"ds-stat__label\">Readers</span> <span class=\"ds-stat__value\">412</span></li>\n          </ul>\n\n          <table class=\"ds-table\" data-component=\"table\">\n            <caption class=\"ds-table__caption\">\n              <span class=\"ds-badges\" data-component=\"badge\">Key: <span class=\"ds-badge ds-badge--success\">PRINTED</span> on the site <span class=\"ds-badge ds-badge--warning\">HELD</span> waiting for the desk <span class=\"ds-badge ds-badge--danger\">RETURNED</span> sent back to its writer <span class=\"ds-badge\">NEW</span> in the last day</span>\n              Reviews are read by the desk before they appear. <a class=\"ds-link\" href=\"#send\">House rules</a> | <a class=\"ds-link\" href=\"#reviews\">Sort by date</a>\n            </caption>\n            <thead>\n              <tr>\n                <th class=\"ds-table__head\" scope=\"col\">Product</th>\n                <th class=\"ds-table__head\" scope=\"col\">Status</th>\n                <th class=\"ds-table__head\" scope=\"col\">Sent</th>\n                <th class=\"ds-table__head ds-table__head--num\" scope=\"col\">Marks</th>\n                <th class=\"ds-table__head ds-table__head--num\" scope=\"col\">Readers</th>\n              </tr>\n            </thead>\n            <tbody>\n              <tr>\n                <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#reviews\">Pelican 56K external modem</a> <span class=\"ds-badge\">NEW</span></td>\n                <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">PRINTED</span></td>\n                <td class=\"ds-table__cell\">Mar 8</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">8 / 10</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">2,140</td>\n              </tr>\n              <tr class=\"ds-table__row--alt\">\n                <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#reviews\">Inkwell 300 colour printer</a></td>\n                <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">PRINTED</span></td>\n                <td class=\"ds-table__cell\">Mar 5</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">6 / 10</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">1,877</td>\n              </tr>\n              <tr>\n                <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#reviews\">Ledgerbook home accounts 2.0</a></td>\n                <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--warning\">HELD</span></td>\n                <td class=\"ds-table__cell\">Mar 8</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">9 / 10</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">0</td>\n              </tr>\n              <tr class=\"ds-table__row--alt\">\n                <td class=\"ds-table__cell\"><a class=\"ds-link is-visited\" href=\"#reviews\">Scanmate flatbed scanner</a></td>\n                <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--danger\">RETURNED</span></td>\n                <td class=\"ds-table__cell\">Feb 26</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">3 / 10</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">0</td>\n              </tr>\n              <tr>\n                <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#reviews\">Tutor Type keyboard course</a></td>\n                <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">PRINTED</span></td>\n                <td class=\"ds-table__cell\">Feb 24</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">7 / 10</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">964</td>\n              </tr>\n              <tr class=\"ds-table__row--alt\">\n                <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#reviews\">Harbourlight 15 inch monitor</a></td>\n                <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">PRINTED</span></td>\n                <td class=\"ds-table__cell\">Feb 19</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">5 / 10</td>\n                <td class=\"ds-table__cell ds-table__cell--num\">1,312</td>\n              </tr>\n              <tr>\n                <td class=\"ds-table__cell ds-table__cell--group\" colspan=\"5\">Average mark this month: 6.8. <a class=\"ds-link\" href=\"#reviews\">See every product</a></td>\n              </tr>\n            </tbody>\n          </table>\n\n          <ol class=\"ds-pagination\" data-component=\"pagination\">\n            <li class=\"ds-pagination__label\">More reviews:</li>\n            <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reviews\">Previous</a></li>\n            <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reviews\">1</a></li>\n            <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link is-current\" href=\"#reviews\">2</a></li>\n            <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reviews\">3</a></li>\n            <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reviews\">4</a></li>\n            <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reviews\">Next</a></li>\n          </ol>\n\n        </div>\n      </section>\n\n      <section class=\"ds-view\" id=\"send\">\n        <div class=\"ds-page__inner\">\n\n          <nav aria-label=\"Path\">\n            <ol class=\"ds-breadcrumb\">\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#front\">Front Page</a></li>\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#reviews\">Reader Reviews</a></li>\n              <li class=\"ds-breadcrumb__item is-current\">Send a Review</li>\n            </ol>\n          </nav>\n\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">Send a Review</h1>\n              <p class=\"ds-page-header__lead\">Say what you bought, what it cost and how it behaved after a month.</p>\n            </div>\n            <div class=\"ds-page-header__action\">\n              <a class=\"ds-button\" href=\"#mine\">My Reviews</a>\n            </div>\n          </header>\n\n          <div class=\"ds-notices\" data-component=\"notice\">\n            <p class=\"ds-notice\"><span class=\"ds-notice__label\">NOTE</span> <span class=\"ds-notice__text\">Reviews sent before noon are usually read the same day.</span></p>\n            <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__label\">ERROR</span> <span class=\"ds-notice__text\">Your review was not sent. Please correct the marked field and try again.</span></p>\n          </div>\n\n          <form class=\"ds-form\" data-component=\"form\" action=\"#send\">\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-name\">Your name:</label>\n              <div class=\"ds-form__field\">\n                <input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"R. Okafor\">\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-mail\">E-mail address:</label>\n              <div class=\"ds-form__field\">\n                <input class=\"ds-form__input\" id=\"f-mail\" type=\"text\" value=\"okafor@example\">\n                <span class=\"ds-form__error\">That address is not complete.</span>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-kind\">Kind of product:</label>\n              <div class=\"ds-form__field\">\n                <select class=\"ds-form__select\" id=\"f-kind\">\n                  <option>Modem</option>\n                  <option>Printer</option>\n                  <option>Program</option>\n                </select>\n                <span class=\"ds-form__hint\">Choose the nearest.</span>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <span class=\"ds-form__label\">You may:</span>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__option\"><input class=\"ds-form__check\" type=\"checkbox\" checked>print my name</label>\n                <label class=\"ds-form__option\"><input class=\"ds-form__check\" type=\"checkbox\">send me replies</label>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"f-text\">Your review:</label>\n              <div class=\"ds-form__field\">\n                <textarea class=\"ds-form__textarea\" id=\"f-text\" rows=\"4\"></textarea>\n                <span class=\"ds-form__hint\">Keep to 300 words and give a mark out of ten.</span>\n              </div>\n            </div>\n            <div class=\"ds-form__actions\" data-component=\"buttons\">\n              <button class=\"ds-button\" type=\"button\">Send Review</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Clear</button>\n              <button class=\"ds-button\" type=\"button\" disabled>Preview</button>\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Discard Draft</button>\n            </div>\n          </form>\n\n          <section class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"d-title\">\n            <h2 class=\"ds-dialog__title\" id=\"d-title\">Discard this draft?</h2>\n            <p class=\"ds-dialog__body\">What you have typed will be lost. The <a class=\"ds-link\" href=\"#reviews\">reviews already printed</a> are not changed.</p>\n            <div class=\"ds-dialog__actions\">\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Discard</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Keep Writing</button>\n            </div>\n          </section>\n\n        </div>\n      </section>\n\n      <section class=\"ds-view\" id=\"mine\">\n        <div class=\"ds-page__inner\">\n\n          <nav aria-label=\"Path\">\n            <ol class=\"ds-breadcrumb\">\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#front\">Front Page</a></li>\n              <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#reviews\">Reader Reviews</a></li>\n              <li class=\"ds-breadcrumb__item is-current\">My Reviews</li>\n            </ol>\n          </nav>\n\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">My Reviews</h1>\n              <p class=\"ds-page-header__lead\">Everything you have sent to the desk, and where each one stands.</p>\n            </div>\n            <div class=\"ds-page-header__action\">\n              <a class=\"ds-button\" href=\"#reviews\">All Reviews</a>\n            </div>\n          </header>\n\n          <ul class=\"ds-tabs\">\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Latest</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">By Product</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">By Reader</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#reviews\">Editors' Picks</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#mine\">My Reviews</a></li>\n          </ul>\n\n          <section class=\"ds-empty\" data-component=\"empty\">\n            <h2 class=\"ds-empty__title\">You have not sent any reviews.</h2>\n            <p class=\"ds-empty__text\">Reviews you send will be listed here with their status. Anyone may send one; the desk reads them all.</p>\n            <a class=\"ds-button\" href=\"#send\">Write a Review</a>\n          </section>\n\n          <section>\n            <h2 class=\"ds-heading\">Readers are asking about</h2>\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#send\">Ledgerbook home accounts 2.0</a> <span class=\"ds-list__meta\">(14 requests)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#send\">Any 56K modem that works on a rural line</a> <span class=\"ds-list__meta\">(11 requests)</span></li>\n              <li class=\"ds-list__item\"><a class=\"ds-link\" href=\"#send\">Colour printers under 200 dollars</a> <span class=\"ds-list__meta\">(8 requests)</span></li>\n            </ul>\n            <p class=\"ds-list__more\"><a class=\"ds-link\" href=\"#reviews\">See what has been reviewed</a></p>\n          </section>\n\n          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Before you write <a class=\"ds-link ds-panel__tool\" href=\"#send\">start now</a></h2>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-panel__list\">\n                <li>Give the exact model name as it appears on the box.</li>\n                <li>Say which computer you used and what the product cost.</li>\n                <li>Keep to 300 words and give a mark out of ten.</li>\n              </ul>\n            </div>\n          </section>\n\n        </div>\n      </section>\n\n    </main>\n  </div>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <hr class=\"ds-rule\">\n    <ul class=\"ds-footer__links\">\n      <li class=\"ds-footer__label\">chronoskin:</li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#front\">Front Page</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#send\">Help</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#reviews\">Contents</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#send\">Search</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#send\">Advertise</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#reviews\">Jobs</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#send\">Send a Review</a></li>\n    </ul>\n    <p class=\"ds-footer__legal\">Copyright 1999 chronoskin. All rights reserved. <a class=\"ds-link\" href=\"#send\">Terms</a> under which this service is provided to you.</p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.table-era-90s.portal.s02.p02.t04.u02\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"table-era-90s\",\n    \"years\": [\n      1996,\n      2000\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 800,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-te-2242\",\n  \"short\": \"v1-te-2242\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #eeeeee;\n  --color-surface-strong: #dddddd;\n  --color-bar: #ccccff;\n  --color-bar-text: #000000;\n  --color-bar-alt: #cccccc;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #666666;\n  --color-inverse-text: #ffffff;\n  --color-text: #000000;\n  --color-text-muted: #666666;\n  --color-heading: #000000;\n  --color-heading-alt: #303068;\n  --color-link: #0000ee;\n  --color-link-quiet: #0000ee;\n  --color-link-visited: #666699;\n  --color-link-hover: #0000ee;\n  --color-link-active: #cc0000;\n  --color-border: #666666;\n  --color-border-strong: #000000;\n  --color-border-muted: #cccccc;\n  --color-accent: #cc0000;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #cc0000;\n  --color-fill-1: #dddddd;\n  --color-fill-2: #ccccff;\n  --color-fill-3: #cccccc;\n  --color-fill-4: #eeeeee;\n  --color-button: #efefef;\n  --color-button-text: #000000;\n  --color-button-hover-text: #000000;\n  --color-button-secondary: #dddddd;\n  --color-button-secondary-text: #000000;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #cccccc;\n  --color-disabled: #efefef;\n  --color-disabled-text: #787878;\n  --color-danger: #cc0000;\n  --color-danger-surface: #ffffff;\n  --color-success: #006600;\n  --color-warning: #ff6600;\n  --color-notice: #eeeeee;\n  --color-notice-text: #000000;\n  --color-focus: #000000;\n  --color-shadow: #000000;\n  --color-overlay: #ffffff;\n}\n\n/* @part type */\n:root {\n  --font-body: \"Times New Roman\", Times, serif;\n  --font-heading: \"Trebuchet MS\", Arial, Helvetica, sans-serif;\n  --font-ui: \"Trebuchet MS\", Arial, Helvetica, sans-serif;\n  --font-mono: \"Courier New\", Courier, monospace;\n  --text-base: 16px;\n  --text-small: 11px;\n  --text-ui: 12px;\n  --text-large: 18px;\n  --text-display: 24px;\n  --text-h1: 20px;\n  --text-h2: 16px;\n  --text-h3: 13px;\n  --line-body: normal;\n  --line-heading: normal;\n  --line-display: 1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: underline;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 3px;\n  --border-style: inset;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: inset 1px 1px 0 color-mix(in srgb, var(--color-button) 35%, white), inset -1px -1px 0 color-mix(in srgb, var(--color-button) 60%, black);\n  --shadow-control-hover: inset 1px 1px 0 color-mix(in srgb, var(--color-button) 35%, white), inset -1px -1px 0 color-mix(in srgb, var(--color-button) 60%, black);\n  --shadow-control-pressed: inset 1px 1px 0 color-mix(in srgb, var(--color-button) 60%, black), inset -1px -1px 0 color-mix(in srgb, var(--color-button) 35%, white);\n  --shadow-dialog: 2px 2px 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: linear-gradient(90deg, var(--color-bar-alt), color-mix(in srgb, var(--color-bar-alt) 45%, white));\n  --fill-inverse: linear-gradient(90deg, var(--color-inverse), color-mix(in srgb, var(--color-inverse) 55%, white));\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: linear-gradient(color-mix(in srgb, var(--color-input) 88%, black), var(--color-input) 4px);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
