{
  "id": "v1-hp-1214",
  "long_id": "v1.home-pages-90s.blog.s01.p02.t01.u04",
  "name": "Personal home page: the fan page, 1998",
  "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": "blog",
  "mode": "mix",
  "viewport": {
    "width": 800,
    "fluid": false
  },
  "summary": "A fan page as people built them for themselves on free web space between 1996 and 2001: one centred column set straight on a tiled starfield, a huge coloured name at the top, a rainbow bar and a thick-bordered table of sections under it. Text is bright on black in the browser's own serif (white body text, yellow and lime headings, cyan links, pink visited links), every box has a 4px or 6px ridged border, and the page carries the furniture of its kind: a hit counter of boxed digits, \"NEW!\" marks, an \"under construction\" strip, awards, a web ring box and a guestbook. It is loud, centred and hand-made, and it was common until page builders and weblogs replaced it after 2001.",
  "url": "https://chrono.skin/s/v1-hp-1214",
  "preview_url": "https://chrono.skin/s/v1-hp-1214/specimen.html",
  "files": {
    "STYLE.md": "# Personal home page: the fan page, 1998\n\n## Summary\n\nA fan page as people built them for themselves on free web space between 1996 and 2001: one centred column set straight on a tiled starfield, a huge coloured name at the top, a rainbow bar and a thick-bordered table of sections under it. Text is bright on black in the browser's own serif (white body text, yellow and lime headings, cyan links, pink visited links), every box has a 4px or 6px ridged border, and the page carries the furniture of its kind: a hit counter of boxed digits, \"NEW!\" marks, an \"under construction\" strip, awards, a web ring box and a guestbook. It is loud, centred and hand-made, and it was common until page builders and weblogs replaced it after 2001.\n\n## Layout\n\n- Fixed, not fluid: `--size-page` is 700px, centred in an 800px window by `.ds-page__frame`. The frame has no fill and no border: everything stands on `--fill-page`, the tile, as text stood on a background picture.\n- One column, one axis. The header, welcome box, counters, section titles, pictures, boxes, awards and footer are centred; news, tables, forms and running text are left-aligned inside their boxes.\n- The specimen is one example site, a fan page for a made-up television serial, of six views. `.ds-nav` and `.ds-footer` are written once outside the views.\n- Home view from the top: `.ds-nav` (the `.ds-brand` at `--text-display`, an italic tagline, a `.ds-rule--rainbow`, then `.ds-nav__links`, a six-cell table of sections), then `.ds-page__main`: the `.ds-hero` welcome box, the `.ds-construction` strip, the `.ds-stat` counters, a `.ds-heading` over the `.ds-list` of dated news, a rainbow rule, a heading over the `.ds-grid` of four framed pictures, and `.ds-page__pair` with two `.ds-panel` boxes (web ring, poll).\n- Inner pages keep the header and footer and drop the welcome box and counters. `.ds-page__inner` opens with `.ds-page__head`: the centred `.ds-breadcrumb`, the `.ds-page-header` strip (title and one italic line at the left, one button at the right) and, where the page has parts, the `.ds-tabs` row. Below it the page stays one column, with `.ds-rule--rainbow` between unrelated blocks. Only the page of running text uses `.ds-page__columns`: `.ds-prose` and a `--size-side` (190px) `.ds-sidebar` at the right.\n- Views: `home`; `episodes` (tabs for the seasons, the episode table with its key of status badges, page numbers); `about` (running text, the sidebar, the line that shows link states); `gallery` (eight framed pictures and the empty state of a season with none); `links` (two boxes of bulleted links and the awards); `guestbook` (entries, notices, the form to sign, the delete message box).\n- Spacing: `--space-1` 2px between table cells and digits; `--space-2` 4px cell and strip padding; `--space-3` 8px between a title and its block, between buttons and form rows, the height of the rainbow bar; `--space-4` 12px box padding and paragraph spacing; `--space-5` 16px between blocks and columns; `--space-6` 28px list indent, the gap between counters and the side padding of the welcome box.\n- Fixed sizes: `--size-label` 170px form labels, `--size-field` 240px inputs, `--size-area` 340px textarea, `--size-check` 16px, `--size-dialog` 380px, `--size-icon` 40px, `--size-award` 124px, `--size-date` 84px date column of the news, `--size-thumb` 92px height of a framed picture.\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>`; the tiled page and body type. `.ds-page__frame` the centred column; `.ds-page__main` and `.ds-page__inner` stack blocks `--space-5` apart; `.ds-page__head` stacks path, page header and tabs; `.ds-page__columns` text plus sidebar; `.ds-page__pair` two equal boxes; `.ds-section` a heading with its block.\n- `.ds-nav`: the centred header. `.ds-nav__tagline` the italic line; `.ds-nav__links` the table of sections, six `.ds-nav__item` / `.ds-nav__link` cells in `--fill-bar` inside a `--border-width-strong` ridge; the cell of the view that shows takes `--fill-accent` (one selector per view, or `is-current`).\n- `.ds-brand`: mark and name, centred. `.ds-brand__mark` is a tile dressed like the button (`--fill-button`, `--color-button-text`, outset bevel, `--radius-control`, `--shadow-control`) holding the mark as inline SVG with square caps; `.ds-brand__name` is the name at `--text-display` in `--color-heading`. Name and mark are placeholders for the installing project's own.\n- `.ds-hero`: the welcome box on `--fill-panel` in a thick ridge with `--shadow-dialog`: `.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__action` (a `.ds-button--large` and a secondary button), `.ds-hero__hint` (the \"last updated\" line).\n- `.ds-page-header`: a ridged strip: `.ds-page-header__text` with `.ds-page-header__title` and the italic `.ds-page-header__lead`, and `.ds-page-header__action` at the right.\n- `.ds-heading`: a centred section title in `--color-heading-alt`.\n- `.ds-rule`: a carved rule; `.ds-rule--short` is 60% wide; `.ds-rule--rainbow` is the six-step bar, the usual divider.\n- `.ds-construction`: the diagonal-striped strip with `.ds-construction__text` on it. `.ds-blink`: add to one small mark for the slow blink.\n- `.ds-prose`: running text; styles `h1`, `h2`, `h3`, `p`, `ul`, `ol`, `strong`, `code`; `.ds-prose__lead`, `.ds-prose__code` for a block of markup.\n- `.ds-link`: every link; states `is-visited`, `is-hover`, `is-active`, `is-focus`; `.ds-link--quiet` small, `.ds-link--strong` bold, `.ds-link--plain` on a coloured fill. `.ds-links` wraps a line of them. `.ds-icon` holds a small drawing before a link.\n- `.ds-bullets`: a link list with coloured diamonds, `.ds-bullets__item` holding a `.ds-bullets__text`.\n- `.ds-button`: a bevelled grey key; `.ds-button--secondary`, `.ds-button--danger`, `.ds-button--large`; states `is-hover`, `is-pressed`, `is-focus`, `is-disabled`. `.ds-buttons` lays out a row.\n- `.ds-form`: two columns, right-aligned `.ds-form__label` and `.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`: a thick ridge round cells that stand `--space-1` apart on `--color-surface-strong`: `.ds-table__head` (`--num`), `.ds-table__cell` (`--num`, `--group`), `.ds-table__row--alt`, `.ds-table__desc`, `.ds-table__caption`.\n- `.ds-stat`: the row of counters; each `.ds-stat__item` is a `.ds-stat__value` of boxed `.ds-stat__digit` spans in `--fill-inverse` over a `.ds-stat__label`.\n- `.ds-list`: dated news in a ridged box: `.ds-list__item` with a `.ds-list__meta` date and a `.ds-list__body`; `.ds-list__more` under it. `.ds-list--entries` is the guestbook: `.ds-list__title`, meta, `.ds-list__text`.\n- `.ds-panel`: a thick yellow-ridged box: `.ds-panel__title` strip, `.ds-panel__body`, `.ds-panel__text`, `.ds-panel__form`. `.ds-ring` with `.ds-ring__item` is the bracketed previous, random, next line of a web ring.\n- `.ds-grid`: four framed pictures to a row: `.ds-grid__cell` (`--2`, `--3`, `--4` pick the fill) holds a `.ds-grid__pic` block with a line drawing, a `.ds-grid__title` link and a `.ds-grid__text` file size.\n- `.ds-tabs`: a one-row table of `.ds-tabs__item` / `.ds-tabs__tab` cells, the current one (`is-current`) in `--fill-inverse`.\n- `.ds-badge`: a solid \"NEW!\" label; `.ds-badge--text` an italic coloured word, `.ds-badge--count` a muted count, `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger` status labels; `.ds-badges` the key line.\n- `.ds-awards` and `.ds-award`: prize pictures as bordered badges on `--fill-inverse`: `.ds-award__star`, `.ds-award__title`, `.ds-award__text`.\n- `.ds-sidebar`: a column of `.ds-sidebar__block` boxes, each a `.ds-sidebar__title` strip over a `.ds-sidebar__list` of `.ds-sidebar__item` lines.\n- `.ds-notice`: a centred line on `--color-notice`; `.ds-notice__label`; `.ds-notice--error`. `.ds-notices` stacks them.\n- `.ds-pagination`: a centred line: `.ds-pagination__label`, `.ds-pagination__link` with `is-current` and `is-disabled`.\n- `.ds-breadcrumb`: a small centred path, `.ds-breadcrumb__item` separated by a coloured mark, the last `is-current`.\n- `.ds-dialog`: a message box in the page flow: `.ds-dialog__title` bar, `.ds-dialog__body`, `.ds-dialog__actions`. No backdrop.\n- `.ds-empty`: `.ds-empty__title`, `.ds-empty__text` and a button on `--color-surface-alt`.\n- `.ds-footer`: a rainbow bar, `.ds-footer__links` with `.ds-footer__item`, the `.ds-footer__mail` link, the italic `.ds-footer__note` (\"best viewed at\") and `.ds-footer__legal`.\n- `.ds-view`: one screen of the example site; `.ds-view--home` shows when the address names none.\n\n## Never\n\n- `content-width <= 700px`: one fixed 700px column.\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`: every box, key and field is square.\n- `box-shadow-blur <= 0px`: the only shadows are hard 1px and 2px edges.\n- `text-shadow = none`: text is flat.\n- `border-width <= 3px`: the sheet's groove is the thickest line.\n- `transition = none`: nothing eases on hover.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new section is a centred `.ds-heading` over a ridged box, with a `.ds-rule--rainbow` before it; a new box is a `.ds-panel`; a new figure is a counter in `.ds-stat`. Keep everything on the centre axis, keep text bright on the tile, keep links underlined, and never add radius, soft shadows, hover transitions, a second navigation or a muted palette.\n",
    "components.css": "/* Layout tokens (structure part). A fan page of 1998: one centred column of\n   700px set straight on the tiled page of an 800px window, everything on the\n   middle axis, 16px between blocks. */\n:root {\n  --size-page: 700px;\n  --size-side: 190px;\n  --size-label: 170px;\n  --size-field: 240px;\n  --size-area: 340px;\n  --size-check: 16px;\n  --size-dialog: 380px;\n  --size-icon: 40px;\n  --size-award: 124px;\n  --size-date: 84px;\n  --size-thumb: 92px;\n  --space-1: 2px;\n  --space-2: 4px;\n  --space-3: 8px;\n  --space-4: 12px;\n  --space-5: 16px;\n  --space-6: 28px;\n}\n\n/* ---------- shell: no sheet, the column stands on the tile ---------- */\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.ds-page__frame {\n  box-sizing: border-box;\n  width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-4) 0 var(--space-5);\n  border-radius: var(--radius-page);\n  text-align: center;\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-3);\n}\n/* The one page of running text: the text and a narrow column of 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/* Two equal boxes side by side. */\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: big, coloured, centred, straight on the tile. */\n.ds-heading {\n  margin: 0;\n  color: var(--color-heading-alt);\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: center;\n}\n\n/* ---------- nav: the huge name, a rainbow bar, a framed table of sections ---------- */\n.ds-nav {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-3);\n  text-align: center;\n}\n.ds-brand {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-4);\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  flex: none;\n  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  color: var(--color-heading-alt);\n  font-size: var(--text-large);\n  font-style: italic;\n}\n.ds-nav .ds-rule {\n  align-self: stretch;\n}\n/* A table with a thick border and one cell for each section. */\n.ds-nav__links {\n  display: grid;\n  grid-template-columns: repeat(6, minmax(0, 1fr));\n  gap: var(--space-1);\n  align-self: stretch;\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface-strong);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__item {\n  display: flex;\n}\n.ds-nav__link {\n  flex: 1;\n  padding: var(--space-3) var(--space-1);\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-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  text-shadow: var(--shadow-text);\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 section that is showing: the accent fill, no underline. One selector\n   for 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(#episodes:target) .ds-nav__link[href=\"#episodes\"],\n.ds-page:has(#about:target) .ds-nav__link[href=\"#about\"],\n.ds-page:has(#gallery:target) .ds-nav__link[href=\"#gallery\"],\n.ds-page:has(#links:target) .ds-nav__link[href=\"#links\"],\n.ds-page:has(#guestbook:target) .ds-nav__link[href=\"#guestbook\"] {\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-6);\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-3) 0;\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: a ruled strip, title at the left, action at the right ---------- */\n.ds-page-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  text-align: left;\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: var(--space-1) 0 0;\n  color: var(--color-heading-alt);\n  font-style: italic;\n}\n.ds-page-header__action {\n  flex: none;\n}\n\n/* ---------- table: thick outer frame, cells apart on a coloured ground ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border: var(--border-width-strong) 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-2) 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-table__cell {\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-surface);\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-1);\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 var(--space-1);\n  background: var(--color-surface);\n  color: var(--color-text);\n  font-size: var(--text-small);\n  text-align: center;\n}\n\n/* ---------- stats: hit counters of boxed digits ---------- */\n.ds-stat {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-6);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  text-align: center;\n}\n.ds-stat__item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-stat__value {\n  display: flex;\n  gap: var(--space-1);\n  padding: var(--space-1);\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__digit {\n  display: block;\n  padding: calc(var(--space-1) - var(--figure-shift)) var(--space-2) calc(var(--space-1) + var(--figure-shift));\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-display);\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-heading-alt);\n  font-size: var(--text-small);\n}\n\n/* ---------- list: dated news, or signed entries ---------- */\n.ds-list {\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  list-style: none;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  box-shadow: var(--shadow-panel);\n  font-size: var(--text-base);\n  text-align: left;\n}\n.ds-list__item {\n  display: grid;\n  grid-template-columns: var(--size-date) minmax(0, 1fr);\n  column-gap: var(--space-3);\n  align-items: baseline;\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) dotted var(--color-border-muted);\n}\n.ds-list__item:last-child {\n  border-bottom: 0;\n}\n.ds-list__meta {\n  color: var(--color-heading-alt);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-list__body {\n  min-width: 0;\n}\n.ds-list__more {\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-align: center;\n}\n/* Guestbook entries: the name and where from, then the message. */\n.ds-list--entries .ds-list__item {\n  display: block;\n}\n.ds-list__title {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-list__text {\n  margin: var(--space-1) 0 0;\n}\n\n/* ---------- panel: a thick-framed box with a title strip ---------- */\n.ds-panel {\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-panel);\n  text-align: center;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) 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-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  text-shadow: var(--shadow-text);\n}\n.ds-panel__body {\n  padding: var(--space-3) var(--space-4);\n}\n.ds-panel__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__text:last-child {\n  margin: 0;\n}\n/* A one-question form on one line. */\n.ds-panel__form {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n/* The web ring line: previous, random, next. */\n.ds-ring {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-weight: var(--weight-bold);\n}\n.ds-ring__item::before {\n  content: \"[ \";\n  color: var(--color-text-muted);\n}\n.ds-ring__item::after {\n  content: \" ]\";\n  color: var(--color-text-muted);\n}\n\n/* ---------- grid: a row of framed pictures with a caption under each ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  min-width: 0;\n  text-align: center;\n}\n.ds-grid__pic {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: var(--size-thumb);\n  background: var(--color-fill-1);\n  color: var(--color-heading);\n  border: var(--border-width-strong) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__cell--2 .ds-grid__pic {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 .ds-grid__pic {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 .ds-grid__pic {\n  background: var(--color-fill-4);\n}\n.ds-grid__pic svg {\n  display: block;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-grid__title {\n  margin: 0;\n  font-weight: var(--weight-bold);\n}\n.ds-grid__text {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* ---------- tabs: a small table of one row, the current cell inverted ---------- */\n.ds-tabs {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-1);\n  margin: 0 auto;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border);\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-2) var(--space-4);\n  background: var(--color-surface-alt);\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  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n\n/* ---------- sidebar: a column of small framed boxes ---------- */\n.ds-sidebar {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  text-align: left;\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}\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-align: center;\n  text-shadow: var(--shadow-text);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  list-style: none;\n  font-size: var(--text-small);\n}\n.ds-sidebar__item {\n  padding: var(--space-1) 0;\n}\n.ds-sidebar__item + .ds-sidebar__item {\n  border-top: var(--border-width) dotted var(--color-border-muted);\n}\n\n/* ---------- pagination ---------- */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: baseline;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n}\n.ds-pagination__label {\n  color: var(--color-heading-alt);\n  font-style: italic;\n  font-weight: var(--weight-body);\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  padding: 0 var(--space-2);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\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: \"you are here\", centred, small ---------- */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\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: \"\\00bb\";\n  padding: 0 var(--space-3);\n  color: var(--color-accent-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-breadcrumb__item.is-current {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-5) 0 0;\n  text-align: center;\n}\n.ds-footer .ds-rule {\n  align-self: stretch;\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n}\n.ds-footer__item + .ds-footer__item::before {\n  content: \"|\";\n  padding: 0 var(--space-3);\n  color: var(--color-text-muted);\n}\n.ds-footer__mail {\n  margin: 0;\n  font-size: var(--text-large);\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__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 fan page on a free host, 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    <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\">The UNOFFICIAL fan page for the TV serial \"Starlane Seven\"!!</span>\n    <hr class=\"ds-rule ds-rule--rainbow\">\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=\"#episodes\">Episodes</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#about\">The Show</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#gallery\">Pictures</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#links\">Links</a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#guestbook\">Guestbook</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 aboard, Starlaners!</h1>\n        <p class=\"ds-hero__lead\">Episode reviews, pictures, news and every Starlane Seven link I can find, all on one page made by a fan for the fans.</p>\n        <div class=\"ds-hero__action\">\n          <a class=\"ds-button ds-button--large\" href=\"#guestbook\">Sign My Guestbook</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#episodes\">Go to the Episode Guide</a>\n        </div>\n        <p class=\"ds-hero__hint\">Last updated: Sunday 14 March 1999. This page is not connected with the makers of the show.</p>\n      </section>\n\n      <p class=\"ds-construction\"><span class=\"ds-construction__text\">Under construction: the season 3 pages are not finished yet!</span></p>\n\n      <ul class=\"ds-stat\" data-component=\"stats\">\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\"><span class=\"ds-stat__digit\">0</span><span class=\"ds-stat__digit\">2</span><span class=\"ds-stat__digit\">7</span><span class=\"ds-stat__digit\">4</span><span class=\"ds-stat__digit\">1</span><span class=\"ds-stat__digit\">9</span></span> <span class=\"ds-stat__label\">visitors since 2 June 1997</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\"><span class=\"ds-stat__digit\">0</span><span class=\"ds-stat__digit\">3</span><span class=\"ds-stat__digit\">1</span><span class=\"ds-stat__digit\">2</span></span> <span class=\"ds-stat__label\">names in the guestbook</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__value\"><span class=\"ds-stat__digit\">0</span><span class=\"ds-stat__digit\">0</span><span class=\"ds-stat__digit\">5</span><span class=\"ds-stat__digit\">2</span></span> <span class=\"ds-stat__label\">episodes reviewed</span></li>\n      </ul>\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Starlane News</h2>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\"><span class=\"ds-list__meta\">14 Mar 99</span> <span class=\"ds-list__body\"><a class=\"ds-link\" href=\"#episodes\">My review of \"The Long Dark Orbit\"</a> is up at last. <span class=\"ds-badge ds-blink\">NEW!</span></span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-list__meta\">07 Mar 99</span> <span class=\"ds-list__body\">Twelve <a class=\"ds-link\" href=\"#gallery\">pictures of the bridge set</a> added to the gallery. <span class=\"ds-badge ds-badge--text\">Updated!</span></span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-list__meta\">21 Feb 99</span> <span class=\"ds-list__body\">Season 3 is said to begin in the autumn. <a class=\"ds-link is-visited\" href=\"#about\">What we know so far</a></span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-list__meta\">02 Feb 99</span> <span class=\"ds-list__body\">chronoskin has won an award! See it on the <a class=\"ds-link\" href=\"#links\">links page</a>.</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-list__meta\">18 Jan 99</span> <span class=\"ds-list__body\">The guestbook works again. <a class=\"ds-link\" href=\"#guestbook\">Please sign it!</a></span></li>\n        </ul>\n        <p class=\"ds-list__more\"><a class=\"ds-link\" href=\"#home\">Older news...</a></p>\n      </section>\n\n      <hr class=\"ds-rule ds-rule--rainbow\">\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Newest Pictures</h2>\n        <div class=\"ds-grid\" data-component=\"grid\">\n          <div class=\"ds-grid__cell\">\n            <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2l4 9v7l-4 3-4-3v-7zM8 13l-5 5M16 13l5 5\"/></svg></a>\n            <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">The Seven</a></p>\n            <p class=\"ds-grid__text\">ship7.gif, 14 K</p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--2\">\n            <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c1-6 15-6 16 0\"/></svg></a>\n            <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">Captain Vale</a></p>\n            <p class=\"ds-grid__text\">vale2.jpg, 22 K</p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--3\">\n            <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"6\"/><path d=\"M2 15c5 3 15 0 20-6\"/></svg></a>\n            <p class=\"ds-grid__title\"><a class=\"ds-link is-visited\" href=\"#gallery\">Planet Oru</a></p>\n            <p class=\"ds-grid__text\">oru.jpg, 31 K</p>\n          </div>\n          <div class=\"ds-grid__cell ds-grid__cell--4\">\n            <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 5h18v14H3zM3 10h18M8 5v14M16 5v14\"/></svg></a>\n            <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">The Bridge</a></p>\n            <p class=\"ds-grid__text\">bridge.jpg, 27 K</p>\n          </div>\n        </div>\n      </section>\n\n      <div class=\"ds-page__pair\">\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h2 class=\"ds-panel__title\">The Starlane Fans Web Ring</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text\">chronoskin is site 12 of 41 in the ring.</p>\n            <ul class=\"ds-ring\">\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#links\">Previous</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#links\">Random</a></li>\n              <li class=\"ds-ring__item\"><a class=\"ds-link\" href=\"#links\">Next</a></li>\n            </ul>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">This Month's Poll</h2>\n          <div class=\"ds-panel__body\">\n            <form class=\"ds-panel__form\" action=\"#home\">\n              <label for=\"h-poll\">Best of the crew?</label>\n              <select class=\"ds-form__select\" id=\"h-poll\">\n                <option>Captain Vale</option>\n                <option>Doctor Imre</option>\n                <option>Pilot Sunde</option>\n              </select>\n              <button class=\"ds-button\" type=\"button\">Vote</button>\n            </form>\n          </div>\n        </section>\n      </div>\n\n    </main>\n  </section>\n\n  <section class=\"ds-view\" id=\"episodes\">\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=\"#episodes\">Episodes</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Season 2</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\">Episode Guide</h1>\n            <p class=\"ds-page-header__lead\">All 52 episodes, with my score out of ten for each.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#guestbook\">Tell Me Your Favourite</a>\n          </div>\n        </header>\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#episodes\">Season 1</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#episodes\">Season 2</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#episodes\">Season 3</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#episodes\">The Specials</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\">REVIEWED</span> my review is up <span class=\"ds-badge ds-badge--warning\">SOON</span> I am writing it <span class=\"ds-badge ds-badge--danger\">NO TAPE</span> I missed it <span class=\"ds-badge\">NEW!</span> added this month</span>\n          Scores are my own. <a class=\"ds-link\" href=\"#guestbook\">Tell me where I am wrong</a>\n        </caption>\n        <thead>\n          <tr>\n            <th class=\"ds-table__head ds-table__head--num\" scope=\"col\">No.</th>\n            <th class=\"ds-table__head\" scope=\"col\">Episode</th>\n            <th class=\"ds-table__head\" scope=\"col\">First shown</th>\n            <th class=\"ds-table__head\" scope=\"col\">Review</th>\n            <th class=\"ds-table__head ds-table__head--num\" scope=\"col\">Score</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td class=\"ds-table__cell ds-table__cell--num\">2.01</td>\n            <td class=\"ds-table__cell\"><a class=\"ds-link is-visited\" href=\"#about\">Seven Lights Out</a> <span class=\"ds-table__desc\">The ship wakes with nobody at the helm.</span></td>\n            <td class=\"ds-table__cell\">12 Sep 1998</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">REVIEWED</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">9</td>\n          </tr>\n          <tr class=\"ds-table__row--alt\">\n            <td class=\"ds-table__cell ds-table__cell--num\">2.02</td>\n            <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#about\">The Salt Moon</a> <span class=\"ds-table__desc\">Imre finds a garden where none should grow.</span></td>\n            <td class=\"ds-table__cell\">19 Sep 1998</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">REVIEWED</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">7</td>\n          </tr>\n          <tr>\n            <td class=\"ds-table__cell ds-table__cell--num\">2.03</td>\n            <td class=\"ds-table__cell\"><a class=\"ds-link\" href=\"#about\">The Long Dark Orbit</a> <span class=\"ds-badge\">NEW!</span> <span class=\"ds-table__desc\">Two days, one airlock and no answers.</span></td>\n            <td class=\"ds-table__cell\">26 Sep 1998</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">REVIEWED</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">10</td>\n          </tr>\n          <tr class=\"ds-table__row--alt\">\n            <td class=\"ds-table__cell ds-table__cell--num\">2.04</td>\n            <td class=\"ds-table__cell\">A Signal from Oru <span class=\"ds-table__desc\">Sunde answers a call sent forty years ago.</span></td>\n            <td class=\"ds-table__cell\">03 Oct 1998</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--warning\">SOON</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">8</td>\n          </tr>\n          <tr>\n            <td class=\"ds-table__cell ds-table__cell--num\">2.05</td>\n            <td class=\"ds-table__cell\">Paper Stars <span class=\"ds-table__desc\">The one with the school play. So I am told.</span></td>\n            <td class=\"ds-table__cell\">10 Oct 1998</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--danger\">NO TAPE</span></td>\n            <td class=\"ds-table__cell ds-table__cell--num\">0</td>\n          </tr>\n          <tr>\n            <td class=\"ds-table__cell ds-table__cell--group\" colspan=\"5\">Have you got \"Paper Stars\" on tape? <a class=\"ds-link\" href=\"#guestbook\">Please write to me!</a></td>\n          </tr>\n        </tbody>\n      </table>\n\n      <ol class=\"ds-pagination\" data-component=\"pagination\">\n        <li class=\"ds-pagination__label\">Season 2, page:</li>\n        <li><span class=\"ds-pagination__link is-disabled\">&lt;&lt; Back</span></li>\n        <li><span class=\"ds-pagination__link is-current\">1</span></li>\n        <li><a class=\"ds-pagination__link\" href=\"#episodes\">2</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#episodes\">3</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#episodes\">4</a></li>\n        <li><a class=\"ds-pagination__link\" href=\"#episodes\">Next &gt;&gt;</a></li>\n      </ol>\n\n    </div>\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\">\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\">The Show</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">What It Is</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 Show</h1>\n            <p class=\"ds-page-header__lead\">What Starlane Seven is, and why I made this page.</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#episodes\">Episode Guide</a>\n          </div>\n        </header>\n      </div>\n\n      <div class=\"ds-page__columns\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Seven people, one very old ship</h1>\n          <p class=\"ds-prose__lead\">If you have never seen it, start here!</p>\n          <p>Starlane Seven is a serial about the crew of a cargo ship that should have been scrapped years ago. It is shown late on Saturdays, it has <strong>no laser fights at all</strong>, and it is the best thing on television.</p>\n          <h2>Why this page?</h2>\n          <p>Because in 1997 I could not find a single page about the show, so I made one. Everything on chronoskin is typed by hand in a text editor and saved as <code>index.html</code>. You will find here:</p>\n          <ul>\n            <li>a review of every episode I have on tape;</li>\n            <li>pictures, all small files for slow modems;</li>\n            <li>the news, when there is any.</li>\n          </ul>\n          <h3>How the links look</h3>\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 me</h3>\n          <p>I read every letter. The quickest way to say hello is the <a class=\"ds-link\" href=\"#guestbook\">guestbook</a>.</p>\n        </article>\n\n        <aside class=\"ds-sidebar\" data-component=\"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\">First shown: 1996</li>\n              <li class=\"ds-sidebar__item\">Episodes so far: 52</li>\n              <li class=\"ds-sidebar__item\">Length: 45 minutes</li>\n              <li class=\"ds-sidebar__item\">My favourite: <a class=\"ds-link\" href=\"#episodes\">2.03</a></li>\n            </ul>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">The Crew</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#gallery\">Captain Vale</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#gallery\">Doctor Imre</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link is-visited\" href=\"#gallery\">Pilot Sunde</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#gallery\">The other four</a> <span class=\"ds-badge ds-badge--count\">(4)</span></li>\n            </ul>\n          </section>\n          <section class=\"ds-sidebar__block\">\n            <h2 class=\"ds-sidebar__title\">Read Next</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#episodes\">Season 2 reviews</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#links\">Other fan pages</a></li>\n            </ul>\n          </section>\n        </aside>\n      </div>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"gallery\">\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=\"#gallery\">Pictures</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Seasons 1 and 2</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\">Picture Gallery</h1>\n            <p class=\"ds-page-header__lead\">Click a picture to see it full size. Please be patient!</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#guestbook\">Send Me a Picture</a>\n          </div>\n        </header>\n      </div>\n\n      <div class=\"ds-grid\">\n        <div class=\"ds-grid__cell\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2l4 9v7l-4 3-4-3v-7zM8 13l-5 5M16 13l5 5\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">The Seven</a></p>\n          <p class=\"ds-grid__text\">ship7.gif, 14 K</p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c1-6 15-6 16 0\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">Captain Vale</a></p>\n          <p class=\"ds-grid__text\">vale2.jpg, 22 K</p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--3\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"6\"/><path d=\"M2 15c5 3 15 0 20-6\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link is-visited\" href=\"#gallery\">Planet Oru</a></p>\n          <p class=\"ds-grid__text\">oru.jpg, 31 K</p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--4\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 5h18v14H3zM3 10h18M8 5v14M16 5v14\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">The Bridge</a></p>\n          <p class=\"ds-grid__text\">bridge.jpg, 27 K</p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--3\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c1-6 15-6 16 0\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">Doctor Imre</a></p>\n          <p class=\"ds-grid__text\">imre.jpg, 19 K</p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--4\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M4 20l4-12 4 8 3-5 5 9z\"/><circle cx=\"17\" cy=\"5\" r=\"2\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">The Salt Moon</a></p>\n          <p class=\"ds-grid__text\">moon.jpg, 34 K</p>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c1-6 15-6 16 0\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link is-visited\" href=\"#gallery\">Pilot Sunde</a></p>\n          <p class=\"ds-grid__text\">sunde.jpg, 20 K</p>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <a class=\"ds-grid__pic\" href=\"#gallery\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 3h14v18H5zM9 8h6M9 12h6M9 16h3\"/></svg></a>\n          <p class=\"ds-grid__title\"><a class=\"ds-link\" href=\"#gallery\">A Script Page</a></p>\n          <p class=\"ds-grid__text\">script.gif, 41 K</p>\n        </div>\n      </div>\n\n      <hr class=\"ds-rule ds-rule--rainbow\">\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Season 3 Pictures</h2>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <h3 class=\"ds-empty__title\">Nothing here yet!</h3>\n          <p class=\"ds-empty__text\">Season 3 has not been shown, so there are no pictures. If you have one, I would love to put it here with your name.</p>\n          <a class=\"ds-button\" href=\"#guestbook\">Send Me a Picture</a>\n        </div>\n      </section>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"links\">\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=\"#links\">Links</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Fan Pages and 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\">Cool Links</h1>\n            <p class=\"ds-page-header__lead\">Every one visited by me. Tell me if one is dead!</p>\n          </div>\n          <div class=\"ds-page-header__action\">\n            <a class=\"ds-button\" href=\"#guestbook\">Add Your Page</a>\n          </div>\n        </header>\n      </div>\n\n      <div class=\"ds-page__pair\">\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Other Fan Pages</h2>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-bullets\">\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">Deck Four</a>, the biggest picture archive</span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link is-visited\" href=\"#links\">Imre's Garden</a>, all about the Doctor</span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">The Oru Signal</a> <span class=\"ds-badge ds-badge--text\">Cool!</span></span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">Sunde's Logbook</a>, fan stories</span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">Cargo Bay Chat</a>, Sundays at nine</span></li>\n            </ul>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Help for Your Own Page</h2>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-bullets\">\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">Free star backgrounds</a></span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">A counter for your page</a></span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">Get a free guestbook</a> <span class=\"ds-badge\">NEW!</span></span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link is-visited\" href=\"#links\">How to write a table</a></span></li>\n              <li class=\"ds-bullets__item\"><span class=\"ds-bullets__text\"><a class=\"ds-link\" href=\"#links\">Join the web ring</a></span></li>\n            </ul>\n          </div>\n        </section>\n      </div>\n\n      <hr class=\"ds-rule ds-rule--rainbow\">\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Awards This Page Has Won</h2>\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\">Stellar Site</span><span class=\"ds-award__text\">February 1999</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\">Fan Page of the Week</span><span class=\"ds-award__text\">Deck Four</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\">Top 5% of Fan Pages</span><span class=\"ds-award__text\">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\">Kid Safe Page</span><span class=\"ds-award__text\">all ages</span></div>\n        </div>\n        <p class=\"ds-list__more\"><a class=\"ds-link\" href=\"#guestbook\">Want to give chronoskin an award? Write to me!</a></p>\n      </section>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"guestbook\">\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=\"#guestbook\">Guestbook</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Sign It</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\">My Guestbook</h1>\n            <p class=\"ds-page-header__lead\">312 Starlaners have signed. You are next!</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      <ul class=\"ds-list ds-list--entries\">\n        <li class=\"ds-list__item\"><span class=\"ds-list__title\">Mirela</span> <span class=\"ds-list__meta\">from a town by a lake, 11 Mar 99</span>\n          <p class=\"ds-list__text\">At last a page for us! Your review of 2.03 says everything I felt. Vale forever!</p></li>\n        <li class=\"ds-list__item\"><span class=\"ds-list__title\">Deck Four Dan</span> <span class=\"ds-list__meta\">found you through the web ring, 28 Feb 99</span>\n          <p class=\"ds-list__text\">Great page, I have linked you from mine. Your counter is beating my counter.</p></li>\n        <li class=\"ds-list__item\"><span class=\"ds-list__title\">T. Okoro</span> <span class=\"ds-list__meta\">just surfed in, 02 Feb 99</span>\n          <p class=\"ds-list__text\">Never seen the show but now I want to. When is it on? <a class=\"ds-link\" href=\"#episodes\">Found it, thanks.</a></p></li>\n      </ul>\n      <p class=\"ds-list__more\"><a class=\"ds-link\" href=\"#guestbook\">Read all 312 entries...</a></p>\n\n      <hr class=\"ds-rule ds-rule--rainbow\">\n\n      <section class=\"ds-section\">\n        <h2 class=\"ds-heading\">Sign the Guestbook</h2>\n        <div class=\"ds-notices\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__label\">Please note:</span> no tags in your message, and no spoilers for season 3!</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__label\">Oops!</span> Your entry was not added. Please type a name and try again.</p>\n        </div>\n      </section>\n\n      <form class=\"ds-form\" data-component=\"form\" action=\"#guestbook\">\n        <label class=\"ds-form__label\" for=\"g-name\">Your name:</label>\n        <div class=\"ds-form__field\">\n          <input class=\"ds-form__input is-error\" id=\"g-name\" type=\"text\">\n          <span class=\"ds-form__error\">A name is needed, even a made-up one.</span>\n        </div>\n        <label class=\"ds-form__label\" for=\"g-mail\">Your e-mail:</label>\n        <div class=\"ds-form__field\">\n          <input class=\"ds-form__input\" id=\"g-mail\" type=\"text\" value=\"you@example.net\">\n          <span class=\"ds-form__hint\">(not shown on the page)</span>\n        </div>\n        <label class=\"ds-form__label\" for=\"g-how\">How did you find me?</label>\n        <div class=\"ds-form__field\">\n          <select class=\"ds-form__select\" id=\"g-how\">\n            <option>The web ring</option>\n            <option>A search engine</option>\n            <option>A friend told me</option>\n            <option>Just surfed in</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>Add my home page to the links</label>\n        </div>\n        <label class=\"ds-form__label\" for=\"g-note\">Your message:</label>\n        <div class=\"ds-form__field\">\n          <textarea class=\"ds-form__textarea\" id=\"g-note\" rows=\"4\">Greetings from</textarea>\n        </div>\n        <div class=\"ds-form__actions\" data-component=\"buttons\">\n          <button class=\"ds-button\" type=\"button\">Sign the Guestbook</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\">Delete My Entry</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\">Delete your entry?</h2>\n        <p class=\"ds-dialog__body\">Your entry of 11 March will be taken out of the guestbook. This cannot be undone!</p>\n        <div class=\"ds-dialog__actions\">\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Delete It</button>\n          <button class=\"ds-button ds-button--secondary\" type=\"button\">Keep It</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=\"#episodes\">Episodes</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#about\">The Show</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#gallery\">Pictures</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#links\">Links</a></li>\n      <li class=\"ds-footer__item\"><a class=\"ds-link\" href=\"#guestbook\">Guestbook</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=\"#guestbook\">E-mail me!</a></p>\n    <p class=\"ds-footer__note\">chronoskin is best viewed at 800x600 in 256 colours or more.</p>\n    <p class=\"ds-footer__legal\">This is a fan page. Words and layout copyright 1997 to 1999 chronoskin. Starlane Seven belongs to its makers.</p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.home-pages-90s.blog.s01.p02.t01.u04\",\n  \"library\": \"2026.10.09-1036\",\n  \"era\": {\n    \"slug\": \"home-pages-90s\",\n    \"years\": [\n      1996,\n      2001\n    ]\n  },\n  \"archetype\": \"blog\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 800,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-hp-1214\",\n  \"short\": \"v1-hp-1214\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffd6ea;\n  --color-canvas: #fff0f7;\n  --color-surface: #ffffff;\n  --color-surface-alt: #d6efff;\n  --color-surface-strong: #e6d9ff;\n  --color-bar: #9933cc;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #008080;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #660099;\n  --color-inverse-text: #ffff99;\n  --color-text: #330066;\n  --color-text-muted: #7a5c94;\n  --color-heading: #cc0099;\n  --color-heading-alt: #008080;\n  --color-link: #0000ff;\n  --color-link-quiet: #9900cc;\n  --color-link-visited: #800080;\n  --color-link-hover: #ff0066;\n  --color-link-active: #ff0000;\n  --color-border: #cc66cc;\n  --color-border-strong: #660099;\n  --color-border-muted: #f0c0e0;\n  --color-accent: #ff3399;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #ff6600;\n  --color-fill-1: #ffccdd;\n  --color-fill-2: #cce6ff;\n  --color-fill-3: #ccffdd;\n  --color-fill-4: #ffffcc;\n  --color-button: #ffcc00;\n  --color-button-text: #330066;\n  --color-button-hover-text: #cc0099;\n  --color-button-secondary: #cce6ff;\n  --color-button-secondary-text: #330066;\n  --color-input: #ffffff;\n  --color-input-text: #330066;\n  --color-input-border: #9966cc;\n  --color-disabled: #e6e0ea;\n  --color-disabled-text: #998fa3;\n  --color-danger: #cc0000;\n  --color-danger-surface: #fff0f0;\n  --color-success: #008000;\n  --color-warning: #e65c00;\n  --color-notice: #ffffcc;\n  --color-notice-text: #330066;\n  --color-focus: #ff0066;\n  --color-shadow: #cc99cc;\n  --color-overlay: rgba(255, 214, 234, 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: 2px;\n  --border-width-strong: 3px;\n  --border-style: groove;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: 1px 1px 0 var(--color-shadow);\n  --shadow-control-hover: 1px 1px 0 var(--color-shadow);\n  --shadow-control-pressed: inset 1px 1px 0 var(--color-shadow);\n  --shadow-dialog: 2px 2px 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: repeating-conic-gradient(color-mix(in srgb, var(--color-border-muted) 55%, transparent) 0 25%, transparent 0 50%) 0 0 / 4px 4px, var(--color-page);\n  --fill-bar: linear-gradient(90deg, var(--color-bar), color-mix(in srgb, var(--color-bar) 45%, white));\n  --fill-bar-alt: linear-gradient(90deg, var(--color-bar-alt), color-mix(in srgb, var(--color-bar-alt) 45%, white));\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 85%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
