{
  "id": "v1-hp-2312",
  "long_id": "v1.home-pages-90s.landing.s02.p03.t01.u02",
  "name": "Personal home page: the family page, 1999",
  "era": {
    "slug": "home-pages-90s",
    "code": "hp",
    "name": "Personal home pages",
    "years": [
      1996,
      2001
    ],
    "description": "The amateur web of 1996 to 2001: tiled patterned backgrounds, bright text on black or deep colours, centred everything, big coloured headings, ruled dividers, link lists, visitor counters, guestbooks and web rings, all in the browser default fonts."
  },
  "archetype": "landing",
  "mode": "mix",
  "viewport": {
    "width": 800,
    "fluid": false
  },
  "summary": "A family or hobby home page as built at home between 1996 and 2001: a framed sheet centred on a pastel gingham tile, the family's name in a large playful face, a striped bar of links, a welcome box and a two-column table of \"my pages\". Text is dark purple in a rounded hand-drawn face on pink and white, headings are hot pink and teal, links are default blue and underlined, and every box has a double border with a hard offset shadow. Counters, \"NEW!\" marks, awards, web rings and an e-mail form are its furniture; it was common on free hosts until page builders replaced it after 2001.",
  "url": "https://chrono.skin/s/v1-hp-2312",
  "preview_url": "https://chrono.skin/s/v1-hp-2312/specimen.html",
  "files": {
    "STYLE.md": "# Personal home page: the family page, 1999\n\n## Summary\n\nA family or hobby home page as built at home between 1996 and 2001: a framed sheet centred on a pastel gingham tile, the family's name in a large playful face, a striped bar of links, a welcome box and a two-column table of \"my pages\". Text is dark purple in a rounded hand-drawn face on pink and white, headings are hot pink and teal, links are default blue and underlined, and every box has a double border with a hard offset shadow. Counters, \"NEW!\" marks, awards, web rings and an e-mail form are its furniture; it was common on free hosts until page builders replaced it after 2001.\n\n## Layout\n\n- Fixed, not fluid: `--size-page` is 640px. `.ds-page__frame` is a sheet in `--color-canvas` with a `--border-width-strong` border in `--color-border-strong` and `--shadow-panel`, centred with `--space-5` above and below, so the `--fill-page` tile shows 80px wide on each side of an 800px window.\n- The specimen is one example site, a family's home page, of five views. `.ds-nav` and `.ds-footer` are written once, inside the sheet and outside the views.\n- Home view: `.ds-nav` (`.ds-nav__top` with the `.ds-brand` at the left and the italic `.ds-nav__tagline` right-aligned beside it, then the `.ds-nav__links` bar across the sheet), then `.ds-page__main`: the centred `.ds-hero` welcome box, the `.ds-stat` row of three counters, and `.ds-page__columns`: a `.ds-page__column` (a `.ds-heading` over the two-column `.ds-grid` of pages, a heading over the bulleted `.ds-list` of news, a `.ds-panel`) and a `--size-side` (190px) `.ds-sidebar` of small boxes at the right, which ends near the foot of the main column.\n- Inner pages keep header and footer and drop the welcome box and counters. `.ds-page__inner` opens with `.ds-page__head`: the `.ds-breadcrumb`, the `.ds-page-header` (title and italic line at the left, a button at the right, a thick rule under) and, where the page has parts, the `.ds-tabs` row of keys. Below it the page is one full-width column (table and page numbers, awards and `.ds-page__pair` boxes, or notices and form); the page of running text keeps `.ds-page__columns` with the sidebar.\n- Views: `home`; `about` (running text, sidebar, link states); `recipes` (tabs, the recipe table with its badge key, page numbers, the empty state of a part with no recipes); `awards` (award badges, two web ring boxes, a bulleted list of rules); `mail` (notices, the form, the message box for leaving the mailing list).\n- Spacing: `--space-1` 3px strip and cell padding; `--space-2` 6px between grid cells, tabs and page numbers; `--space-3` 10px box padding, gaps between buttons and form rows; `--space-4` 14px between sidebar boxes, paragraph spacing; `--space-5` 20px sheet padding, the gap between blocks and columns; `--space-6` 32px list indent.\n- Fixed sizes: `--size-label` 140px, `--size-field` 230px, `--size-area` 330px, `--size-check` 16px, `--size-dialog` 360px, `--size-icon` 34px, `--size-award` 128px.\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\nThese are the conventions of the whole era; every layout and token set of it follows them.\n\n- The page and the sheet are of one lightness: `--color-page` and `--color-canvas` are both dark or both light, and `--fill-page` is a quiet tile built from palette tokens. `--color-text`, `--color-text-muted`, `--color-heading`, `--color-heading-alt`, every link colour, `--color-accent-alt`, `--color-danger`, `--color-success` and `--color-warning` are legible on the page, the canvas, all three surfaces and all four `--color-fill-*` blocks, at 2:1 or better.\n- Fills that bring their own text: `--fill-bar` with `--color-bar-text` (the table of sections, table heads, the dialog title), `--fill-bar-alt` with `--color-bar-alt-text` (panel and sidebar title strips), `--fill-inverse` with `--color-inverse-text` (counter digits, awards, the current tab), `--fill-accent` with `--color-accent-text` (the current section, the \"NEW!\" badge, the current page number), `--color-notice` with `--color-notice-text` (notices and the two stripes of the construction strip), `--color-danger-surface` with `--color-danger`. A link on one of these takes the fill's text colour (`.ds-link--plain`).\n- Status colours double as fills: a status badge and the destructive button are filled with `--color-success`, `--color-warning` or `--color-danger` and lettered in `--color-canvas`.\n- `--color-surface-strong` is the ground that shows between the cells of a table; `--color-surface-alt` is alternate rows, inline code and the empty state.\n- Headings are coloured: `--color-heading` (yellow here) for the name, page titles, h1 and h3; `--color-heading-alt` (lime) for section titles, h2, taglines, dates and form labels. `--color-accent-alt` (magenta) is the italic \"Updated!\" word, bullets and list markers.\n- The rainbow bar is six hard steps: `--color-danger`, `--color-warning`, `--color-heading`, `--color-success`, `--color-link`, `--color-link-visited`.\n- Type here: `--font-body` and `--font-heading` are Times New Roman at 16px, the unchanged browser default; headings 19, 24 and 32px bold, the name 48px. `--font-ui` Arial 13px sets buttons, controls, table heads, the section cells and badges; `--font-mono` Courier New sets counter digits, news dates and the textarea. Links are always underlined. Italic is written literally for taglines, lead lines and the footer note.\n- Surface here: `--border-style` `ridge`, 4px for boxes and 6px (`--border-width-strong`) for the section table, the welcome box, tables, panels, pictures, awards and the dialog. No shadows, no radius, flat fills, no transitions. `--fill-page` is a starfield of 1px dots in the text, heading and link colours over `--color-page`.\n- Written literally in `components.css`: `outset` and `inset` bevels on buttons, the brand tile and form controls (drawn in the control's own colour), `dotted` rules inside lists, the 45 degree turn of a bullet, and the slow two-step `.ds-blink`, which only runs inside `prefers-reduced-motion: no-preference`.\n\n## Components\n\n- `.ds-page`: on `<body>`; tile and body type. `.ds-page__frame` the sheet; `.ds-page__main`, `.ds-page__inner` stack blocks; `.ds-page__head`; `.ds-page__columns` with `.ds-page__column` and the sidebar; `.ds-page__pair` two equal boxes; `.ds-section` a heading with its block.\n- `.ds-nav`: `.ds-nav__top` (brand and `.ds-nav__tagline`) over `.ds-nav__links`, a bar in `--fill-bar` of `.ds-nav__item` / `.ds-nav__link` with a diamond between them; the current view's link takes `--fill-accent`.\n- `.ds-brand`: `.ds-brand__mark`, a tile dressed like the primary button, and `.ds-brand__name` at `--text-display` in `--color-heading`. Name and mark are placeholders for the installing project's own.\n- `.ds-hero`: the centred welcome box with `--shadow-dialog`: `.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__action`, `.ds-hero__hint`.\n- `.ds-page-header`: `.ds-page-header__text` (`.ds-page-header__title`, `.ds-page-header__lead`) and `.ds-page-header__action`, closed by a thick rule.\n- `.ds-heading`: a left-aligned section title with a thick underline.\n- `.ds-rule`, `.ds-rule--short`, `.ds-rule--rainbow`: the carved rule and the six-step colour bar that opens the footer.\n- `.ds-construction` with `.ds-construction__text`: the striped strip. `.ds-blink`: the slow blink for one small mark.\n- `.ds-prose`: running text (`h1` to `h3`, `p`, lists, `strong`, `code`), `.ds-prose__lead`, `.ds-prose__code`.\n- `.ds-link`: states `is-visited`, `is-hover`, `is-active`, `is-focus`; `.ds-link--quiet`, `.ds-link--strong`, `.ds-link--plain`; `.ds-links`; `.ds-icon`.\n- `.ds-bullets`: a list with coloured diamonds, `.ds-bullets__item`, `.ds-bullets__text`.\n- `.ds-button`: `.ds-button--secondary`, `.ds-button--danger`, `.ds-button--large`; states `is-hover`, `is-pressed`, `is-focus`, `is-disabled`; `.ds-buttons`.\n- `.ds-form`: `.ds-form__label`, `.ds-form__field`, `.ds-form__input` (`--short`, `is-error`), `.ds-form__select`, `.ds-form__textarea`, `.ds-form__check`, `.ds-form__hint`, `.ds-form__error`, `.ds-form__actions`.\n- `.ds-table`: collapsed cells, each with a double border: `.ds-table__head` (`--num`), `.ds-table__cell` (`--num`, `--group` on `--color-fill-4`), `.ds-table__row--alt`, `.ds-table__desc`, `.ds-table__caption`.\n- `.ds-stat`: the row; three `.ds-stat__item` cells, each a `.ds-stat__value` (six digits on `--fill-inverse`) over a `.ds-stat__label`.\n- `.ds-list`: news with round coloured bullets: `.ds-list__item`, `.ds-list__body`, `.ds-list__meta` (the date in brackets), `.ds-list__more`; `.ds-list__title` a bold coloured name.\n- `.ds-panel`: `.ds-panel__title` strip, `.ds-panel__body`, `.ds-panel__text`, `.ds-panel__form`. `.ds-ring` / `.ds-ring__item`: the web ring line.\n- `.ds-grid`: the two-column table of pages on `--color-surface-strong`: `.ds-grid__cell` (`--2`, `--3`, `--4`) with a `.ds-grid__icon`, `.ds-grid__title` and `.ds-grid__text`.\n- `.ds-tabs`: a row of bevelled keys, `.ds-tabs__item` / `.ds-tabs__tab`; `is-current` is pressed in and takes `--fill-bar-alt`.\n- `.ds-badge`: `.ds-badge--text`, `.ds-badge--count`, `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`; `.ds-badges` the key line.\n- `.ds-awards`, `.ds-award` (`.ds-award__star`, `.ds-award__title`, `.ds-award__text`): awards as badges.\n- `.ds-sidebar`: `.ds-sidebar__block` boxes with a `.ds-sidebar__title` strip and a `.ds-sidebar__body` or a `.ds-sidebar__list` of `.ds-sidebar__item`.\n- `.ds-notice`: `.ds-notice__label`, `.ds-notice--error`; `.ds-notices`.\n- `.ds-pagination`: small outlined squares: `.ds-pagination__label`, `.ds-pagination__link` (`is-current`, `is-disabled`).\n- `.ds-breadcrumb`: `.ds-breadcrumb__item`, the last `is-current`.\n- `.ds-dialog`: `.ds-dialog__title`, `.ds-dialog__body`, `.ds-dialog__actions`, in the page flow.\n- `.ds-empty`: `.ds-empty__title`, `.ds-empty__text` and a button.\n- `.ds-footer`: rainbow bar, bracketed `.ds-footer__links` / `.ds-footer__item`, `.ds-footer__mail`, `.ds-footer__note`, `.ds-footer__legal`.\n- `.ds-view`: one screen; `.ds-view--home` shows by default.\n\n## Never\n\n- `content-width <= 640px`: everything is inside the 640px sheet.\n- `font-size <= 48px`: the name is the largest text.\n- `font-size >= 13px`: small print is 13px.\n- `font-weight >= 400`: regular and bold only.\n- `font-families <= 3`: Times, Arial and Courier.\n- `uppercase-text <= 0%`: capitals are typed, never transformed.\n- `border-radius <= 0px`: boxes are square; only the round bullets are shapes.\n- `box-shadow-blur <= 0px`: shadows are hard offsets, never soft.\n- `text-shadow = none`: text is flat.\n- `border-width <= 5px`: the thickest border is the 5px double line.\n- `transition = none`: nothing eases.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new block in the main column is a `.ds-heading` over a bordered box; a new small box goes in the `.ds-sidebar`; a new page link is a `.ds-grid__cell`. Keep the sheet framed on the tile, the text dark on pastel, links blue and underlined, borders double with hard shadows, and never add radius, blur, transitions or grey.\n",
    "components.css": "/* Layout tokens (structure part). A family page of 1999: a 640px sheet with\n   a thick frame, centred on the tiled page of an 800px window; a welcome box,\n   then a main column and a 190px column of small boxes at the right. */\n:root {\n  --size-page: 640px;\n  --size-side: 190px;\n  --size-label: 140px;\n  --size-field: 230px;\n  --size-area: 330px;\n  --size-check: 16px;\n  --size-dialog: 360px;\n  --size-icon: 34px;\n  --size-award: 128px;\n  --size-date: 60px;\n  --space-1: 3px;\n  --space-2: 6px;\n  --space-3: 10px;\n  --space-4: 14px;\n  --space-5: 20px;\n  --space-6: 32px;\n}\n\n/* ---------- shell: a framed sheet on the tile ---------- */\n.ds-page {\n  margin: 0;\n  padding: var(--space-5) 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.ds-page__frame {\n  box-sizing: border-box;\n  width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-4) var(--space-5) var(--space-5);\n  background: var(--color-canvas);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-page__main,\n.ds-page__inner {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n  padding: var(--space-5) 0 0;\n}\n.ds-page__head {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n/* Main column and the column of small boxes. */\n.ds-page__columns {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n  column-gap: var(--space-5);\n  align-items: start;\n}\n.ds-page__column {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-page__pair {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-5);\n  align-items: stretch;\n}\n.ds-section {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n  min-width: 0;\n}\n\n/* Section title: a coloured line with a short thick underline. */\n.ds-heading {\n  margin: 0;\n  padding: 0 0 var(--space-1);\n  color: var(--color-heading);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border);\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  text-align: left;\n}\n\n/* ---------- nav: name at the left, greeting at the right, a bar of links under ---------- */\n.ds-nav {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n.ds-nav__top {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n.ds-brand {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  box-sizing: border-box;\n  width: var(--text-display);\n  height: var(--text-display);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) outset var(--color-button);\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  text-shadow: var(--shadow-text);\n}\n.ds-nav__tagline {\n  min-width: 0;\n  color: var(--color-heading-alt);\n  font-size: var(--text-base);\n  font-style: italic;\n  text-align: right;\n}\n/* One bar across the sheet, the links apart, a diamond between them. */\n.ds-nav__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  margin: 0;\n  padding: var(--space-1) var(--space-2);\n  list-style: none;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__item {\n  display: flex;\n  align-items: center;\n}\n.ds-nav__item + .ds-nav__item::before {\n  content: \"\";\n  width: var(--space-2);\n  height: var(--space-2);\n  margin: 0 var(--space-2);\n  background: currentColor;\n  transform: rotate(45deg);\n}\n.ds-nav__link {\n  padding: var(--space-1) var(--space-2);\n  color: var(--color-bar-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n}\n/* The page that is showing: the accent fill, no underline. One selector for\n   each view, and the home link when the address names no view. */\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(#about:target) .ds-nav__link[href=\"#about\"],\n.ds-page:has(#recipes:target) .ds-nav__link[href=\"#recipes\"],\n.ds-page:has(#awards:target) .ds-nav__link[href=\"#awards\"],\n.ds-page:has(#mail:target) .ds-nav__link[href=\"#mail\"] {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  text-decoration: none;\n}\n\n/* ---------- hero: the welcome box ---------- */\n.ds-hero {\n  padding: var(--space-4) var(--space-5);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n  text-align: center;\n}\n.ds-hero__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-hero__lead {\n  margin: var(--space-2) 0 var(--space-3);\n  font-size: var(--text-large);\n}\n.ds-hero__action {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-3);\n}\n.ds-hero__hint {\n  margin: var(--space-3) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- page header: title and a line, the action at the right, a thick rule under ---------- */\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-border);\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  color: var(--color-heading-alt);\n  font-style: italic;\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- table: every cell outlined ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\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  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  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\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  vertical-align: top;\n}\n.ds-table__cell--num,\n.ds-table__head--num {\n  text-align: right;\n}\n.ds-table__row--alt .ds-table__cell {\n  background: var(--color-surface-alt);\n}\n.ds-table__cell--group {\n  background: var(--color-fill-4);\n  text-align: center;\n}\n.ds-table__desc {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-table__caption {\n  caption-side: bottom;\n  padding: var(--space-3) 0 0;\n  font-size: var(--text-small);\n  text-align: center;\n}\n\n/* ---------- stats: three counters in one outlined row ---------- */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  box-shadow: var(--shadow-panel);\n  text-align: center;\n}\n.ds-stat__item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-1);\n  padding: 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__value {\n  display: block;\n  padding: 0 var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  letter-spacing: var(--space-1);\n}\n.ds-stat__label {\n  display: block;\n  font-size: var(--text-small);\n}\n\n/* ---------- list: news with coloured bullets and a date ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-base);\n}\n.ds-list__item {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-2);\n  padding: var(--space-1) 0;\n}\n.ds-list__item::before {\n  content: \"\";\n  flex: none;\n  width: var(--space-3);\n  height: var(--space-3);\n  background: var(--color-accent);\n  border-radius: 50%;\n}\n.ds-list__item:nth-child(even)::before {\n  background: var(--color-heading-alt);\n}\n.ds-list__body {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__meta {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-list__more {\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-align: right;\n}\n.ds-list__title {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- panel: an outlined box with a title strip ---------- */\n.ds-panel {\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-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  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-panel__body {\n  padding: var(--space-3);\n}\n.ds-panel__text {\n  margin: 0 0 var(--space-2);\n}\n.ds-panel__text:last-child {\n  margin: 0;\n}\n.ds-panel__form {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n}\n/* The web ring line: previous, random, next. */\n.ds-ring {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-ring__item + .ds-ring__item::before {\n  content: \"|\";\n  padding: 0 var(--space-2) 0 0;\n  color: var(--color-text-muted);\n}\n\n/* ---------- grid: a two-column table of \"my pages\" ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-2);\n  padding: var(--space-2);\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__cell {\n  display: grid;\n  grid-template-columns: var(--size-icon) minmax(0, 1fr);\n  column-gap: var(--space-3);\n  align-items: center;\n  min-width: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-fill-1);\n  color: var(--color-text);\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__icon {\n  grid-row: span 2;\n  display: block;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  color: var(--color-heading);\n}\n.ds-grid__icon svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-grid__title {\n  margin: 0;\n  font-weight: var(--weight-bold);\n}\n.ds-grid__text {\n  margin: 0;\n  font-size: var(--text-small);\n}\n\n/* ---------- tabs: a row of keys, the current one pressed in ---------- */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: var(--space-2) 0 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  text-transform: var(--ui-transform);\n}\n.ds-tabs__item {\n  display: flex;\n}\n.ds-tabs__tab {\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border: var(--border-width) outset var(--color-button-secondary);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  text-decoration: underline;\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border: var(--border-width) inset var(--color-bar-alt);\n  font-weight: var(--weight-bold);\n  text-shadow: var(--shadow-text);\n}\n\n/* ---------- sidebar: small boxes down the right ---------- */\n.ds-sidebar {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n}\n.ds-sidebar__block {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  box-shadow: var(--shadow-panel);\n  text-align: center;\n}\n.ds-sidebar__title {\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-heading);\n  font-size: var(--text-base);\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  text-shadow: var(--shadow-text);\n}\n.ds-sidebar__body {\n  margin: 0;\n  padding: var(--space-2);\n  font-size: var(--text-small);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: var(--space-2) var(--space-2) var(--space-2) var(--space-5);\n  list-style: square;\n  font-size: var(--text-small);\n  text-align: left;\n}\n.ds-sidebar__item {\n  padding: 0 0 var(--space-1);\n}\n.ds-sidebar__item::marker {\n  color: var(--color-accent);\n}\n\n/* ---------- pagination: small outlined squares ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__label {\n  color: var(--color-text-muted);\n}\n.ds-pagination__link {\n  display: block;\n  padding: 0 var(--space-2);\n  background: var(--color-surface);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) var(--color-border);\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  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-pagination__link.is-disabled {\n  background: var(--color-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-size: var(--text-small);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"::\";\n  padding: 0 var(--space-2);\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__item.is-current {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  padding: var(--space-5) 0 0;\n  text-align: center;\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin: var(--space-2) 0 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n}\n.ds-footer__item::before {\n  content: \"[ \";\n  color: var(--color-text-muted);\n}\n.ds-footer__item::after {\n  content: \" ]\";\n  padding: 0 var(--space-1) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-footer__mail {\n  margin: 0;\n  font-weight: var(--weight-bold);\n}\n.ds-footer__note {\n  margin: 0;\n  color: var(--color-heading-alt);\n  font-style: italic;\n}\n.ds-footer__legal {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\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/* ---------- rules: the plain carved one and the rainbow bar ---------- */\n.ds-rule {\n  box-sizing: border-box;\n  width: 100%;\n  height: 0;\n  margin: 0 auto;\n  border: 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-rule--short {\n  width: 60%;\n}\n/* Six hard steps of the palette's loudest colours, as a divider picture was. */\n.ds-rule--rainbow {\n  height: var(--space-3);\n  border: 0;\n  background: linear-gradient(90deg, var(--color-danger) 0 16.66%, var(--color-warning) 16.66% 33.33%, var(--color-heading) 33.33% 50%, var(--color-success) 50% 66.66%, var(--color-link) 66.66% 83.33%, var(--color-link-visited) 83.33%);\n}\n\n/* ---------- under construction: a strip of diagonal stripes ---------- */\n.ds-construction {\n  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-2);\n  background: repeating-linear-gradient(-45deg, var(--color-notice) 0 var(--space-4), var(--color-notice-text) var(--space-4) calc(var(--space-4) * 2));\n  border: var(--border-width) var(--border-style) var(--color-border);\n  text-align: center;\n}\n.ds-construction__text {\n  display: inline-block;\n  padding: var(--space-1) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n\n/* ---------- blink: a slow two-step dim, only when motion is welcome ---------- */\n@media (prefers-reduced-motion: no-preference) {\n  .ds-blink {\n    animation: ds-blink 1.6s steps(2, jump-none) infinite;\n  }\n}\n@keyframes ds-blink {\n  from { opacity: 1; }\n  to { opacity: 0.6; }\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-size: var(--text-small);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--strong {\n  font-weight: var(--weight-bold);\n}\n/* A link on a bar, a notice or another coloured fill takes that fill's text colour. */\n.ds-link--plain,\n.ds-link--plain:visited,\n.ds-link--plain:hover,\n.ds-link--plain.is-hover {\n  color: inherit;\n  text-decoration: underline;\n}\n.ds-links {\n  margin: 0 0 var(--space-4);\n}\n/* The little drawing before an e-mail link or over a picture link. */\n.ds-icon {\n  display: inline-block;\n  width: var(--text-large);\n  height: var(--text-large);\n  vertical-align: middle;\n  color: var(--color-accent-alt);\n}\n.ds-icon svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n/* ---------- bullets: a link list with coloured diamonds ---------- */\n.ds-bullets {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  text-align: left;\n}\n.ds-bullets__item {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  padding: var(--space-1) 0;\n}\n.ds-bullets__item::before {\n  content: \"\";\n  flex: none;\n  width: var(--space-3);\n  height: var(--space-3);\n  background: var(--color-accent-alt);\n  transform: rotate(45deg);\n}\n.ds-bullets__item:nth-child(3n+2)::before {\n  background: var(--color-heading-alt);\n}\n.ds-bullets__item:nth-child(3n)::before {\n  background: var(--color-warning);\n}\n.ds-bullets__text {\n  min-width: 0;\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  text-align: left;\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-5) 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  text-align: center;\n}\n.ds-prose h2 {\n  color: var(--color-heading-alt);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n  padding: 0 0 0 var(--space-6);\n}\n.ds-prose li::marker {\n  color: var(--color-accent-alt);\n}\n.ds-prose strong {\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-alt);\n  font-family: var(--font-mono);\n  font-size: var(--text-base);\n}\n.ds-prose__lead {\n  color: var(--color-heading-alt);\n  font-size: var(--text-large);\n  font-style: italic;\n  text-align: center;\n}\n/* A block of markup to copy. */\n.ds-prose__code {\n  margin: 0 0 var(--space-4);\n  padding: var(--space-3);\n  overflow: hidden;\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  white-space: pre-wrap;\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  box-sizing: border-box;\n  margin: 0;\n  padding: var(--space-1) var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) outset var(--color-button);\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  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  border-color: var(--color-button-secondary);\n}\n.ds-button--large {\n  padding: var(--space-2) var(--space-5);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n}\n/* Destructive action: the danger colour as the fill, the sheet colour as the label. */\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--color-danger);\n  color: var(--color-canvas);\n  border-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  border-color: var(--color-disabled);\n  box-shadow: none;\n}\n\n/* ---------- form ---------- */\n.ds-form {\n  display: grid;\n  grid-template-columns: var(--size-label) minmax(0, 1fr);\n  column-gap: var(--space-3);\n  row-gap: var(--space-3);\n  align-items: baseline;\n  margin: 0;\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  text-align: left;\n}\n.ds-form__label {\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-bold);\n  text-align: right;\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) var(--space-2);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) inset var(--color-input-border);\n  border-radius: var(--radius-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  max-width: 100%;\n}\n.ds-form__input--short {\n  width: calc(var(--size-field) / 2);\n}\n.ds-form__textarea {\n  display: block;\n  width: var(--size-area);\n  max-width: 100%;\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.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__input:disabled,\n.ds-form__input.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__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) 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 fill. */\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__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\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  grid-column: 2;\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  padding: var(--space-2) 0 0;\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-body);\n  text-transform: var(--ui-transform);\n  vertical-align: baseline;\n}\n/* The usual mark beside a link: a loud italic word with no box. */\n.ds-badge--text {\n  padding: 0;\n  background: transparent;\n  color: var(--color-accent-alt);\n  font-style: italic;\n}\n.ds-badge--count {\n  padding: 0;\n  background: transparent;\n  color: var(--color-text-muted);\n  font-weight: var(--weight-body);\n}\n/* Status labels: the status colour as the fill, the sheet colour as the word. */\n.ds-badge--success {\n  background: var(--color-success);\n  color: var(--color-canvas);\n}\n.ds-badge--warning {\n  background: var(--color-warning);\n  color: var(--color-canvas);\n}\n.ds-badge--danger {\n  background: var(--color-danger);\n  color: var(--color-canvas);\n}\n.ds-badges {\n  display: block;\n  padding: 0 0 var(--space-2);\n}\n\n/* ---------- award: a prize picture drawn as a bordered badge ---------- */\n.ds-awards {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-4);\n}\n.ds-award {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  box-sizing: border-box;\n  width: var(--size-award);\n  padding: var(--space-2);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  text-align: center;\n}\n.ds-award__star {\n  display: block;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-award__star svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-award__title {\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-award__text {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* ---------- notice ---------- */\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n.ds-notice {\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\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  text-align: center;\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__label {\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- dialog: a message box in the page flow ---------- */\n.ds-dialog {\n  position: static;\n  box-sizing: border-box;\n  width: var(--size-dialog);\n  max-width: 100%;\n  margin: 0 auto;\n  padding: 0;\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  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  text-align: left;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n}\n.ds-dialog__body {\n  margin: 0;\n  padding: var(--space-4) var(--space-4) var(--space-3);\n  text-align: center;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-3);\n  padding: 0 var(--space-3) var(--space-4);\n}\n\n/* ---------- empty state ---------- */\n.ds-empty {\n  padding: var(--space-4);\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-size: var(--text-base);\n  text-align: center;\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\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-empty__text {\n  margin: 0 0 var(--space-3);\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: a family home page, 1996 to 2001: 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-nav\" data-component=\"nav\">\n    <div class=\"ds-nav__top\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#\">\n        <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M12.00 2.00L13.66 5.82L17.00 3.34L16.53 7.47L20.66 7.00L18.18 10.34L22.00 12.00L18.18 13.66L20.66 17.00L16.53 16.53L17.00 20.66L13.66 18.18L12.00 22.00L10.34 18.18L7.00 20.66L7.47 16.53L3.34 17.00L5.82 13.66L2.00 12.00L5.82 10.34L3.34 7.00L7.47 7.47L7.00 3.34L10.34 5.82ZM9.4 12a2.6 2.6 0 1 0 5.2 0a2.6 2.6 0 1 0 -5.2 0Z\"/></svg></span>\n        <span class=\"ds-brand__name\">chronoskin</span>\n      </a>\n      <span class=\"ds-nav__tagline\">Our family's little corner of the Web: two people, three cats and one busy kitchen!</span>\n    </div>\n    <ul class=\"ds-nav__links\">\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#home\">Home</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#about\">About Us</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#recipes\">Recipe Box</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#awards\">Awards and Rings</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#mail\">E-mail Us</a></li>\n    </ul>\n  </header>\n\n  <section class=\"ds-view ds-view--home\" id=\"home\">\n    <main class=\"ds-page__main\">\n\n      <section class=\"ds-hero\" data-component=\"hero\">\n        <h1 class=\"ds-hero__title\">Welcome to Our Home Page!</h1>\n        <p class=\"ds-hero__lead\">Come in, wipe your feet and stay a while. The kettle is on and the cats are (mostly) friendly.</p>\n        <div class=\"ds-hero__action\">\n          <a class=\"ds-button ds-button--large\" href=\"#recipes\">Open the Recipe Box</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#mail\">Drop us a line</a>\n        </div>\n        <p class=\"ds-hero__hint\">This page was last updated on 9 May 1999. <span class=\"ds-badge ds-blink\">UPDATED</span></p>\n      </section>\n\n      <ul class=\"ds-stat\" data-component=\"stats\">\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">008214</span> <span class=\"ds-stat__label\">visitors since August 1997</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">000064</span> <span class=\"ds-stat__label\">recipes in the box</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\">000003</span> <span class=\"ds-stat__label\">cats on the sofa</span></li>\n      </ul>\n\n      <div class=\"ds-page__columns\">\n        <div class=\"ds-page__column\">\n\n          <section class=\"ds-section\">\n            <h2 class=\"ds-heading\">Our Pages</h2>\n            <div class=\"ds-grid\" data-component=\"grid\">\n              <div class=\"ds-grid__cell\">\n                <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M4 11h16v3a8 8 0 0 1-16 0zM9 3v4M13 3v4M17 4v3\"/></svg></span>\n                <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#recipes\">Recipe Box</a></p>\n                <p class=\"ds-grid__text\">64 recipes, all tried.</p>\n              </div>\n              <div class=\"ds-grid__cell ds-grid__cell--2\">\n                <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 20V9l-1-5 5 3h6l5-3-1 5v11zM9 13v1M15 13v1\"/></svg></span>\n                <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#about\">Meet the Cats</a></p>\n                <p class=\"ds-grid__text\">Biscuit, Mop and Sir Purr.</p>\n              </div>\n              <div class=\"ds-grid__cell ds-grid__cell--3\">\n                <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 21V10M12 10c0-4-3-6-6-6 0 4 2 6 6 6zM12 13c0-3 3-5 6-5 0 3-2 5-6 5z\"/></svg></span>\n                <p class=\"ds-grid__title\"><a class=\"ds-link is-visited\" href=\"#about\">Our Garden</a></p>\n                <p class=\"ds-grid__text\">Beans, roses and slugs.</p>\n              </div>\n              <div class=\"ds-grid__cell ds-grid__cell--4\">\n                <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 6h18v13H3zM3 16l5-5 4 4 3-3 6 6\"/><circle cx=\"16\" cy=\"10\" r=\"1.500\"/></svg></span>\n                <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#about\">Holiday Snaps</a></p>\n                <p class=\"ds-grid__text\">The seaside, 1998.</p>\n              </div>\n              <div class=\"ds-grid__cell ds-grid__cell--3\">\n                <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\" aria-hidden=\"true\"><path d=\"M12 2l3 7h7l-5.500 4.500 2 7.500-6.500-4.500-6.500 4.500 2-7.500L2 9h7z\"/></svg></span>\n                <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#awards\">Our Awards</a></p>\n                <p class=\"ds-grid__text\">Four so far!</p>\n              </div>\n              <div class=\"ds-grid__cell\">\n                <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 6h18v12H3zM3 6l9 7 9-7\"/></svg></span>\n                <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#mail\">E-mail Us</a></p>\n                <p class=\"ds-grid__text\">We always write back.</p>\n              </div>\n            </div>\n          </section>\n\n          <section class=\"ds-section\">\n            <h2 class=\"ds-heading\">What's New</h2>\n            <ul class=\"ds-list\" data-component=\"list\">\n              <li class=\"ds-list__item\"><span class=\"ds-list__body\"><a class=\"ds-link\" href=\"#recipes\">Nan's lemon drizzle cake</a> is in the box at last <span class=\"ds-badge\">NEW!</span> <span class=\"ds-list__meta\">(9 May)</span></span></li>\n              <li class=\"ds-list__item\"><span class=\"ds-list__body\">Sir Purr is <a class=\"ds-link\" href=\"#about\">pet of the month</a>, again <span class=\"ds-list__meta\">(1 May)</span></span></li>\n              <li class=\"ds-list__item\"><span class=\"ds-list__body\">We joined a <a class=\"ds-link is-visited\" href=\"#awards\">second web ring</a> <span class=\"ds-badge ds-badge--text\">Hooray!</span> <span class=\"ds-list__meta\">(18 April)</span></span></li>\n              <li class=\"ds-list__item\"><span class=\"ds-list__body\">Six <a class=\"ds-link\" href=\"#about\">photos of the garden</a> in spring <span class=\"ds-list__meta\">(4 April)</span></span></li>\n            </ul>\n            <p class=\"ds-list__more\"><a class=\"ds-link\" href=\"#home\">Older news...</a></p>\n          </section>\n\n          <section class=\"ds-panel\" data-component=\"panel\">\n            <h2 class=\"ds-panel__title\">The chronoskin Kitchen Letter</h2>\n            <div class=\"ds-panel__body\">\n              <p class=\"ds-panel__text\">One new recipe by e-mail on the first of every month. Free, of course!</p>\n              <form class=\"ds-panel__form\" action=\"#home\">\n                <label for=\"h-mail\">Your e-mail:</label>\n                <input class=\"ds-form__input ds-form__input--short\" id=\"h-mail\" type=\"text\" value=\"you@example.net\">\n                <button class=\"ds-button\" type=\"button\">Join</button>\n                <button class=\"ds-button ds-button--secondary\" type=\"button\">Leave</button>\n              </form>\n            </div>\n          </section>\n\n        </div>\n\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Who We Are</h2>\n            <p class=\"ds-sidebar__body\">Jo bakes, Sam gardens and the cats supervise. We live at the end of a lane with a view of the hills. <a class=\"ds-link\" href=\"#about\">More about us</a></p>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Favourite Places</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#awards\">The Home Cooks Ring</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#awards\">Cat Lovers' Corner</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link is-visited\" href=\"#awards\">Free pastel backgrounds</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#awards\">A seed swap page</a></li>\n            </ul>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Home Cooks Ring</h2>\n            <div class=\"ds-sidebar__body\">\n              <ul class=\"ds-ring\">\n                <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Previous</a></li>\n                <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Random</a></li>\n                <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Next</a></li>\n              </ul>\n            </div>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Pet of the Month</h2>\n            <p class=\"ds-sidebar__body\"><span class=\"ds-list__title\">Sir Purr</span>, for sitting in the flour and looking pleased about it.</p>\n          </section>\n          <p class=\"ds-construction\"><span class=\"ds-construction__text\">Garden pages under construction</span></p>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Sign In, Please</h2>\n            <p class=\"ds-sidebar__body\">Tell us you were here! <a class=\"ds-link ds-link--strong\" href=\"#mail\">Sign our guestbook</a> or <a class=\"ds-link\" href=\"#mail\">read it</a>.</p>\n          </section>\n        </aside>\n      </div>\n\n    </main>\n  </section>\n\n  <section class=\"ds-view\" id=\"about\">\n    <div class=\"ds-page__inner\">\n\n      <div class=\"ds-page__head\">\n        <nav aria-label=\"You are here\">\n          <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Home</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#about\">About Us</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">The Family</li>\n          </ol>\n        </nav>\n        <header class=\"ds-page-header\" data-component=\"page-header\">\n          <div class=\"ds-page-header__text\">\n            <h1 class=\"ds-page-header__title\">About Us</h1>\n            <p class=\"ds-page-header__lead\">Two people, three cats and a garden full of beans.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#mail\">Say Hello</a>\n          </div>\n        </header>\n      </div>\n\n      <div class=\"ds-page__columns\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Hello from all of us!</h1>\n          <p class=\"ds-prose__lead\">We made this page ourselves, one evening at a time.</p>\n          <p>We are Jo and Sam. We started chronoskin in <strong>August 1997</strong> to share Nan's recipes with the cousins, and it grew. Every page is typed by hand and the front page is a file called <code>index.html</code>, which still feels like magic.</p>\n          <h2>The cats</h2>\n          <p>There are three, and they run the house:</p>\n          <ul>\n            <li>Biscuit, who is ginger and sleeps on the monitor;</li>\n            <li>Mop, who is mostly fur;</li>\n            <li>Sir Purr, pet of the month eleven times.</li>\n          </ul>\n          <h2>Finding your way</h2>\n          <p>Links on our pages are underlined, and their colour tells you where you have been.</p>\n          <p class=\"ds-links\" data-component=\"links\">\n            <a class=\"ds-link\" href=\"#about\">A link you have not followed</a>,\n            <a class=\"ds-link is-visited\" href=\"#about\">one you have visited</a>,\n            <a class=\"ds-link is-hover\" href=\"#about\">one under the pointer</a>,\n            <a class=\"ds-link is-active\" href=\"#about\">one as you click it</a>,\n            <a class=\"ds-link ds-link--strong\" href=\"#about\">a bold link</a> and\n            <a class=\"ds-link ds-link--quiet\" href=\"#about\">a small link</a>.\n          </p>\n          <h3>Write to us</h3>\n          <p>We answer every letter. Use the <a class=\"ds-link\" href=\"#mail\">e-mail page</a> and tell us what you baked.</p>\n        </article>\n\n        <aside class=\"ds-sidebar\">\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Fact File</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\">On the Web since 1997</li>\n              <li class=\"ds-sidebar__item\">Cats: 3</li>\n              <li class=\"ds-sidebar__item\">Favourite cake: lemon</li>\n              <li class=\"ds-sidebar__item\">Modem: slow</li>\n            </ul>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Pet of the Month</h2>\n            <p class=\"ds-sidebar__body\"><span class=\"ds-list__title\">Sir Purr</span><br>for sitting in the flour and looking pleased about it.</p>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">See Also</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#recipes\">The Recipe Box</a> <span class=\"ds-badge ds-badge--count\">(64)</span></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#awards\">Our awards</a></li>\n            </ul>\n          </section>\n        </aside>\n      </div>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"recipes\">\n    <div class=\"ds-page__inner\">\n\n      <div class=\"ds-page__head\">\n        <nav aria-label=\"You are here\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Home</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#recipes\">Recipe Box</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Cakes and Bakes</li>\n          </ol>\n        </nav>\n        <header class=\"ds-page-header\">\n          <div class=\"ds-page-header__text\">\n            <h1 class=\"ds-page-header__title\">The Recipe Box</h1>\n            <p class=\"ds-page-header__lead\">Every one cooked in our kitchen, most of them twice.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#mail\">Send Us a Recipe</a>\n          </div>\n        </header>\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#recipes\">Cakes and Bakes</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#recipes\">Suppers</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#recipes\">Jams</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#recipes\">Soups</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#recipes\">For the Cats</a></li>\n        </ul>\n      </div>\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\">EASY</span> a child could do it <span class=\"ds-badge ds-badge--warning\">FIDDLY</span> read it twice <span class=\"ds-badge ds-badge--danger\">HOT!</span> mind your fingers <span class=\"ds-badge\">NEW!</span> added this month</span>\n          Spoons are level and ovens are in degrees C. <a class=\"ds-link\" href=\"#mail\">Tell us how yours turned out</a>\n        </caption>\n        <thead>\n          <tr>\n            <th class=\"ds-table__head\" scope=\"col\">Recipe</th>\n            <th class=\"ds-table__head\" scope=\"col\">How hard</th>\n            <th class=\"ds-table__head ds-table__head--num\" scope=\"col\">Serves</th>\n            <th class=\"ds-table__head ds-table__head--num\" scope=\"col\">Minutes</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#recipes\">Nan's Lemon Drizzle Cake</a> <span class=\"ds-badge\">NEW!</span> <span class=\"ds-table__desc\">Sharp, sticky and gone by teatime.</span></td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">EASY</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">8</td>\n            <td class=\"ds-table__cell ds-table__cell--num\">55</td>\n          </tr>\n          <tr class=\"ds-table__row--alt\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link is-visited\" href=\"#recipes\">Cheese Scones</a> <span class=\"ds-table__desc\">The ones from the village fair.</span></td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">EASY</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">12</td>\n            <td class=\"ds-table__cell ds-table__cell--num\">25</td>\n          </tr>\n          <tr>\n            <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#recipes\">Plaited Loaf</a> <span class=\"ds-table__desc\">Three strands, or six if you are brave.</span></td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--warning\">FIDDLY</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">10</td>\n            <td class=\"ds-table__cell ds-table__cell--num\">140</td>\n          </tr>\n          <tr class=\"ds-table__row--alt\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#recipes\">Treacle Toffee</a> <span class=\"ds-table__desc\">For bonfire night. Keep the cats out.</span></td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--danger\">HOT!</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">20</td>\n            <td class=\"ds-table__cell ds-table__cell--num\">40</td>\n          </tr>\n          <tr>\n            <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#recipes\">Sam's Bean Flan</a> <span class=\"ds-table__desc\">What to do with too many beans.</span></td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">EASY</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">6</td>\n            <td class=\"ds-table__cell ds-table__cell--num\">70</td>\n          </tr>\n          <tr>\n            <td class=\"ds-table__cell ds-table__cell--group\" colspan=\"4\">Got a better scone? <a class=\"ds-link\" href=\"#mail\">Send us the recipe</a> and we will try it.</td>\n          </tr>\n        </tbody>\n      </table>\n\n      <ol class=\"ds-pagination\" data-component=\"pagination\">\n        <li class=\"ds-pagination__label\">Cakes and Bakes, page</li>\n        <li><span class=\"ds-pagination__link is-disabled\">&lt; Back</span></li>\n        <li><span class=\"ds-pagination__link is-current\">1</span></li>\n        <li><a class=\"ds-pagination__link\" href=\"#recipes\">2</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#recipes\">3</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#recipes\">More &gt;</a></li>\n      </ol>\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Soups</h2>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <h3 class=\"ds-empty__title\">The soup pot is empty!</h3>\n          <p class=\"ds-empty__text\">We have not typed up a single soup yet. If you have a good one, it could be the first.</p>\n          <a class=\"ds-button\" href=\"#mail\">Send Us a Soup</a>\n        </div>\n      </section>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"awards\">\n    <div class=\"ds-page__inner\">\n\n      <div class=\"ds-page__head\">\n        <nav aria-label=\"You are here\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Home</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#awards\">Awards and Rings</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Our Awards</li>\n          </ol>\n        </nav>\n        <header class=\"ds-page-header\">\n          <div class=\"ds-page-header__text\">\n            <h1 class=\"ds-page-header__title\">Awards and Web Rings</h1>\n            <p class=\"ds-page-header__lead\">Kind people have given our page these. Thank you all!</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#mail\">Win Our Award</a>\n          </div>\n        </header>\n      </div>\n\n      <div class=\"ds-awards\">\n        <div class=\"ds-award\"><span class=\"ds-award__star\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\" aria-hidden=\"true\"><path d=\"M12 2l3 7h7l-5.500 4.500 2 7.500-6.500-4.500-6.500 4.500 2-7.500L2 9h7z\"/></svg></span><span class=\"ds-award__title\">Golden Spoon</span><span class=\"ds-award__text\">for family recipes, 1998</span></div>\n        <div class=\"ds-award\"><span class=\"ds-award__star\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\" aria-hidden=\"true\"><path d=\"M12 2l3 7h7l-5.500 4.500 2 7.500-6.500-4.500-6.500 4.500 2-7.500L2 9h7z\"/></svg></span><span class=\"ds-award__title\">Purr-fect Page</span><span class=\"ds-award__text\">Cat Lovers' Corner</span></div>\n        <div class=\"ds-award\"><span class=\"ds-award__star\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\" aria-hidden=\"true\"><path d=\"M12 2l3 7h7l-5.500 4.500 2 7.500-6.500-4.500-6.500 4.500 2-7.500L2 9h7z\"/></svg></span><span class=\"ds-award__title\">Family Friendly</span><span class=\"ds-award__text\">safe for all ages</span></div>\n        <div class=\"ds-award\"><span class=\"ds-award__star\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\" aria-hidden=\"true\"><path d=\"M12 2l3 7h7l-5.500 4.500 2 7.500-6.500-4.500-6.500 4.500 2-7.500L2 9h7z\"/></svg></span><span class=\"ds-award__title\">Cosy Site of the Week</span><span class=\"ds-award__text\">March 1999</span></div>\n      </div>\n\n      <hr class=\"ds-rule ds-rule--rainbow\">\n\n      <div class=\"ds-page__pair\">\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">The Home Cooks Ring</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">chronoskin is kitchen 27 of 113 in this ring of pages by people who cook at home.</p>\n            <ul class=\"ds-ring\">\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Previous</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Random</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Next</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">List all</a></li>\n            </ul>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">The Ring of Happy Cats</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">Sir Purr signed us up. We are sofa 8 of 52, and proud of it.</p>\n            <ul class=\"ds-ring\">\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Previous</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link is-visited\" href=\"#awards\">Random</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">Next</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#awards\">List all</a></li>\n            </ul>\n          </div>\n        </section>\n      </div>\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Win the chronoskin Cosy Page Award</h2>\n        <ul class=\"ds-bullets\">\n          <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\">Your page must be made by you, at home.</span></li>\n          <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\">It must be safe for the whole family.</span></li>\n          <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\">It helps if there is a cat on it. <a class=\"ds-link\" href=\"#mail\">Send us your address</a></span></li>\n        </ul>\n      </section>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"mail\">\n    <div class=\"ds-page__inner\">\n\n      <div class=\"ds-page__head\">\n        <nav aria-label=\"You are here\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Home</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#mail\">E-mail Us</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Write a Letter</li>\n          </ol>\n        </nav>\n        <header class=\"ds-page-header\">\n          <div class=\"ds-page-header__text\">\n            <h1 class=\"ds-page-header__title\">E-mail Us</h1>\n            <p class=\"ds-page-header__lead\">Recipes, cat pictures and kind words all welcome.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#home\">Back to the Front Page</a>\n          </div>\n        </header>\n      </div>\n\n      <div class=\"ds-notices\" data-component=\"notice\">\n        <p class=\"ds-notice\"><span class=\"ds-notice__label\">Please note:</span> we read our mail on Sundays, so be patient with us.</p>\n        <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__label\">Oh dear!</span> Your letter was not sent. Please fill in your name and try again.</p>\n      </div>\n\n      <form class=\"ds-form\" data-component=\"form\" action=\"#mail\">\n        <label class=\"ds-form__label\" for=\"m-name\">Your name:</label>\n        <div class=\"ds-form__field\">\n          <input class=\"ds-form__input is-error\" id=\"m-name\" type=\"text\">\n          <span class=\"ds-form__error\">We need a name to write back to.</span>\n        </div>\n        <label class=\"ds-form__label\" for=\"m-mail\">Your e-mail:</label>\n        <div class=\"ds-form__field\">\n          <input class=\"ds-form__input\" id=\"m-mail\" type=\"text\" value=\"you@example.net\">\n          <span class=\"ds-form__hint\">(we never pass it on)</span>\n        </div>\n        <label class=\"ds-form__label\" for=\"m-what\">It is about:</label>\n        <div class=\"ds-form__field\">\n          <select class=\"ds-form__select\" id=\"m-what\">\n            <option>A recipe for the box</option>\n            <option>The cats</option>\n            <option>Your award</option>\n            <option>Just saying hello</option>\n          </select>\n        </div>\n        <span class=\"ds-form__label\">Also:</span>\n        <div class=\"ds-form__field\">\n          <label><input class=\"ds-form__check\" type=\"checkbox\" checked>Put my message in the guestbook</label>\n        </div>\n        <label class=\"ds-form__label\" for=\"m-note\">Your letter:</label>\n        <div class=\"ds-form__field\">\n          <textarea class=\"ds-form__textarea\" id=\"m-note\" rows=\"4\">Dear Jo and Sam,</textarea>\n        </div>\n        <div class=\"ds-form__actions\" data-component=\"buttons\">\n          <button class=\"ds-button\" type=\"button\">Send It</button>\n          <button class=\"ds-button ds-button--secondary\" type=\"button\">Start Again</button>\n          <button class=\"ds-button\" type=\"button\" disabled>Add a Picture</button>\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Take Me Off the List</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\">Leave the Kitchen Letter?</h2>\n        <p class=\"ds-dialog__body\">You will get no more recipes by e-mail. We will miss you, and so will the cats!</p>\n        <div class=\"ds-dialog__actions\">\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Take Me Off</button>\n          <button class=\"ds-button ds-button--secondary\" type=\"button\">Stay</button>\n        </div>\n      </section>\n\n    </div>\n  </section>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <hr class=\"ds-rule ds-rule--rainbow\">\n    <ul class=\"ds-footer__links\">\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#home\">Home</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#about\">About Us</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#recipes\">Recipe Box</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#awards\">Awards and Rings</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#mail\">E-mail Us</a></li>\n    </ul>\n    <p class=\"ds-footer__mail\"><span class=\"ds-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 6h18v12H3zM3 6l9 7 9-7\"/></svg></span> <a class=\"ds-link\" href=\"#mail\">E-mail us!</a></p>\n    <p class=\"ds-footer__note\">chronoskin is best viewed at 800x600 with a cup of tea.</p>\n    <p class=\"ds-footer__legal\">Made at home by Jo and Sam. Words and recipes copyright 1997 to 1999 chronoskin.</p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.home-pages-90s.landing.s02.p03.t01.u02\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"home-pages-90s\",\n    \"years\": [\n      1996,\n      2001\n    ]\n  },\n  \"archetype\": \"landing\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 800,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-hp-2312\",\n  \"short\": \"v1-hp-2312\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #00004d;\n  --color-canvas: #000033;\n  --color-surface: #000066;\n  --color-surface-alt: #1a1a80;\n  --color-surface-strong: #33338f;\n  --color-bar: #ff6600;\n  --color-bar-text: #000033;\n  --color-bar-alt: #800000;\n  --color-bar-alt-text: #ffcc66;\n  --color-inverse: #ffffff;\n  --color-inverse-text: #000066;\n  --color-text: #ffffff;\n  --color-text-muted: #b3b3d9;\n  --color-heading: #ff9933;\n  --color-heading-alt: #ffcc00;\n  --color-link: #66ccff;\n  --color-link-quiet: #ffcc99;\n  --color-link-visited: #cc99ff;\n  --color-link-hover: #ffff00;\n  --color-link-active: #ff3300;\n  --color-border: #9999cc;\n  --color-border-strong: #ff6600;\n  --color-border-muted: #333380;\n  --color-accent: #ffcc00;\n  --color-accent-text: #000033;\n  --color-accent-alt: #00ffcc;\n  --color-fill-1: #800000;\n  --color-fill-2: #804000;\n  --color-fill-3: #005c5c;\n  --color-fill-4: #4d004d;\n  --color-button: #cc3300;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffff00;\n  --color-button-secondary: #333399;\n  --color-button-secondary-text: #ffffff;\n  --color-input: #ffffff;\n  --color-input-text: #000033;\n  --color-input-border: #9999cc;\n  --color-disabled: #333366;\n  --color-disabled-text: #8c8cb3;\n  --color-danger: #ff5050;\n  --color-danger-surface: #4d0000;\n  --color-success: #33ff66;\n  --color-warning: #ffaa00;\n  --color-notice: #ffe0b3;\n  --color-notice-text: #000033;\n  --color-focus: #ffff00;\n  --color-shadow: #000000;\n  --color-overlay: rgba(0, 0, 51, 0.7);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Times New Roman\", Times, serif;\n  --font-heading: \"Times New Roman\", Times, serif;\n  --font-ui: Arial, Helvetica, sans-serif;\n  --font-mono: \"Courier New\", Courier, monospace;\n  --text-base: 16px;\n  --text-small: 13px;\n  --text-ui: 13px;\n  --text-large: 19px;\n  --text-display: 48px;\n  --text-h1: 32px;\n  --text-h2: 24px;\n  --text-h3: 19px;\n  --line-body: 1.2;\n  --line-heading: 1.1;\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: -0.08em;\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: 3px;\n  --border-width-strong: 5px;\n  --border-style: double;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: 4px 4px 0 var(--color-shadow);\n  --shadow-control: 2px 2px 0 var(--color-shadow);\n  --shadow-control-hover: 3px 3px 0 var(--color-shadow);\n  --shadow-control-pressed: 0 0 0 var(--color-shadow);\n  --shadow-dialog: 6px 6px 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: linear-gradient(90deg, color-mix(in srgb, var(--color-surface-alt) 50%, transparent) 50%, transparent 50%) 0 0 / 32px 32px, linear-gradient(color-mix(in srgb, var(--color-surface-alt) 50%, transparent) 50%, transparent 50%) 0 0 / 32px 32px, var(--color-page);\n  --fill-bar: repeating-linear-gradient(45deg, var(--color-bar) 0 8px, color-mix(in srgb, var(--color-bar) 86%, white) 8px 16px);\n  --fill-bar-alt: repeating-linear-gradient(-45deg, var(--color-bar-alt) 0 8px, color-mix(in srgb, var(--color-bar-alt) 86%, white) 8px 16px);\n  --fill-inverse: repeating-linear-gradient(90deg, var(--color-inverse) 0 6px, color-mix(in srgb, var(--color-inverse) 88%, black) 6px 12px);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: linear-gradient(color-mix(in srgb, var(--color-button) 60%, white) 0 50%, var(--color-button) 50%);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: linear-gradient(color-mix(in srgb, var(--color-button-secondary) 60%, white) 0 50%, var(--color-button-secondary) 50%);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px dashed var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
