{
  "id": "v1-fl-5453",
  "long_id": "v1.flat-design.portal.s05.p04.t05.u03",
  "name": "Flat design tile start",
  "era": {
    "slug": "flat-design",
    "code": "fl",
    "name": "Flat design",
    "years": [
      2013,
      2016
    ],
    "description": "Product marketing, 2013 to 2016: full-width bands of solid colour, light sans-serif headings, thin one-pixel rules, and no gloss, bevel or drop shadow anywhere."
  },
  "archetype": "portal",
  "mode": "mix",
  "viewport": {
    "width": 1280,
    "fluid": true,
    "responsive": true
  },
  "summary": "This is the tile start page of flat design, common from 2013 to 2016 wherever a service followed the \"modern UI\" of touch tablets and phones: a start screen of solid colour tiles in three sizes, parted by narrow gaps and sorted into titled groups, some of them \"live\" with a figure or a line of news. Navigation is a pivot, a row of large words set directly on the page with the current one dark and the others faded, and an inner page opens with a round back button beside a very large title. Everything is square and flat; a tile is labelled on a darker strip along its foot, and the only depth is a heavy rule along the top of a panel.",
  "url": "https://chrono.skin/s/v1-fl-5453",
  "preview_url": "https://chrono.skin/s/v1-fl-5453/specimen.html",
  "files": {
    "STYLE.md": "# Flat design tile start\n\n## Summary\n\nThis is the tile start page of flat design, common from 2013 to 2016 wherever a service followed the \"modern UI\" of touch tablets and phones: a start screen of solid colour tiles in three sizes, parted by narrow gaps and sorted into titled groups, some of them \"live\" with a figure or a line of news. Navigation is a pivot, a row of large words set directly on the page with the current one dark and the others faded, and an inner page opens with a round back button beside a very large title. Everything is square and flat; a tile is labelled on a darker strip along its foot, and the only depth is a heavy rule along the top of a panel.\n\n## Layout\n\n- The page is fluid and designed for a 1280px viewport. Every strip (`.ds-nav__bar`, `.ds-nav__pivot`, `.ds-hero`, `.ds-strip`, `.ds-start`, `.ds-page-header`, `.ds-band`, `.ds-footer`) spans the viewport and pads its own sides with `--space-6` (56px); the content inside is a `.ds-wrap` of `--size-page` (1152px). There is no boxed frame and no sidebar on the start page.\n- Navigation has two parts. `.ds-nav__bar` is a thin `--fill-bar` strip, `--size-bar` (48px) tall with a 1px bottom rule: the brand at the left, the search field (`--size-search`, 220px) and the account with its square initials at the right. Under it `.ds-nav__pivot` sets the section names as words of `--text-h1` directly on the page: the current word is `--color-heading`, the others `--color-text-muted`. There is no button and no underline in the pivot.\n- The start page has no hero band. `.ds-hero` is type on the page: the title at display size, one lead line and two buttons at the left, and the `.ds-stat` figures at the right on the same baseline. Under it comes `.ds-strip`, one line of service news on `--fill-bar-alt`.\n- Then `.ds-start`: three `.ds-group` columns `--space-6` apart, each a small title over a `.ds-grid`. A grid is two columns wide with rows of `--size-tile` (150px) and a gap of `--space-2` (8px). A tile is square (one cell), wide (`--wide`, two cells) or large (`--large`, two by two). Text in a tile sits at the bottom left above the label strip; an icon sits in the middle. A `.ds-panel--tile` takes the place of a large tile when a group needs a small table.\n- Inner pages have no hero, no strip and no tiles. Under the pivot comes `.ds-page-header`: a round back button, then the `.ds-breadcrumb`, the page title at display size and one grey line, with the actions at the right on the title's baseline. The content follows in `.ds-band` strips. A hub page uses `.ds-hub`, three sections side by side (1 to 1.2 to 0.8), each under a `.ds-hub__title`. A list page uses `.ds-cols`: the `.ds-tabs` and the table with its pagination in the main column, small panels in a `--size-side` (300px) column at the right; a second `.ds-band--alt` holds two equal halves (`.ds-cols--halves`). A settings page uses `.ds-cols--side-first`: the `.ds-sidebar` section list and a panel at the left, notices, form and the button row at the right. The footer line is unchanged.\n- Views. The specimen is a city library's lending service with four views. `start` is the start page: the hero with the three figures, the news strip and the three tile groups (the reader's shelf, the catalogue, the branches with their opening hours). `catalogue` is the hub: this week's new titles, the librarians' note on borrowing, and the subject list with frequent searches. `loans` is the list page: tabs, the loan table with pagination and the status key, the card and next-return panels, then the open renew dialog beside the empty holds box. `settings` is the card and notices form with its notices and action row, beside the settings list and the card panel. Below 760px the groups, hub sections and columns stack, the search field takes a row of its own under the brand and the account, the pivot scrolls sideways on its own row with its right edge faded by a mask (on the settings view it starts at the right so the current link is in view), and a wide table scrolls inside `.ds-table__wrap` while the page itself never does.\n- Spacing scale: `--space-1` 4px (between a label and its field, tile label padding, pagination gaps), `--space-2` 8px (the gap between tiles, button vertical padding, between adjacent buttons and badges), `--space-3` 12px (tile, cell and panel padding, list row padding, paragraph gap), `--space-4` 20px (button horizontal padding, between form rows, between stacked blocks in a column, footer padding), `--space-5` 32px (strip padding top and bottom, between pivot words, between sidebar and panel), `--space-6` 56px (page side padding, between tile groups and columns, around the dialog band).\n- Other sizes: `--size-icon` 40px (tile and empty-state icons), `--size-thumb` 52px (the cover block of a list row), `--size-dialog` 520px (measure of the dialog text).\n- On a phone (760px and below) there is no menu button: `.ds-nav__inner` wraps, `.ds-nav__search` takes a full row under the brand and the account `.ds-menu`, and `.ds-nav__pivot` is one row of `.ds-nav__links` at the page edge that scrolls sideways without a scrollbar. The pivot takes that scrolling form already below 1040px, because its words are heading-sized and outrun a tablet's window. The current link keeps its mark. A tooltip is not placed beside its trigger: it opens as a full row under its line, inset by `--space-3`, without its arrow.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Colour family: the warm beige page, charcoal and deep red of the 2014 tile-framework page, with that page's orange, yellow, navy and teal; the creams come from the 2014 note-taking page and the greys from the 2014 ride-app page.\n- `--color-page` and `--color-canvas` are beige `#f0e8e0`; `--color-surface` white is for panels, table rows and the current sidebar row; `--color-surface-alt` `#f8f0e8` the alternate row and band; `--color-surface-strong` `#e0d8c0` the panel title strip, the plain tile, idle page numbers and inline code. `--color-bar` white with `--color-bar-text` `#48484c` is the top bar and the table head. `--color-bar-alt` `#333333` with white `--color-bar-alt-text` is the news strip and one tile; nothing else is put on it and its text takes no other colour.\n- Text is `--color-text` `#48484c`, meta `--color-text-muted` `#848484`, headings `--color-heading` `#222222`. `--color-heading-alt` `#9a1616` (deep red) is for group, hub, panel and sidebar titles and h3.\n- `--color-button` `#9a1616` is the only action colour, and also the bar beside a figure, under the current tab and beside the current sidebar row. Links are teal `--color-link` `#008080`, hover navy `#1e347b` and underlined, active black. The secondary button is `--color-button-secondary-text` `#333333` text and edge on white; its text must contrast with the page as well as with its own fill, because a surface set may make the fill transparent. Hovered, it swaps its two colours.\n- `--color-fill-1` (deep red) and `--color-fill-4` (navy) are the tiles that carry text, with `--color-inverse-text` on them, as do the `--fill-inverse` tile, the `--fill-bar-alt` tile (with `--color-bar-alt-text`) and the plain `--color-surface-strong` tile (with `--color-text` and `--color-heading`). `--color-fill-2` (orange) and `--color-fill-3` (yellow) are icon tiles: an icon only, on a round plate of `--color-inverse` mixed in at 40%, so that the layout stays readable when a palette makes these fills pale. Every tile's label stands on a strip of the same 40% mix with `--color-inverse-text`, never on the fill itself. The cover blocks of the list use the four fills without text.\n- `--color-accent` `#fa6800` (white text) is the default badge and the account's initials, `--color-accent-alt` yellow the second badge: a 30% tint over `--color-surface` with a yellow outline and `--color-heading` text. Status: `--color-success` `#60a917`, `--color-warning` `#f0a30a`, `--color-danger` `#dd1144`, all with `--color-accent-text`.\n- `--color-notice` `#e0d8c0` with `--color-notice-text` `#333333` and a thick bar in the text colour; the error notice is `--color-danger` on `--color-danger-surface` with a 1px outline. The footer is `--fill-inverse` `#1a1a1a` with `--color-text-muted` text and a `--color-inverse-text` name.\n- Two families, after the tile-framework page, which set its sub-headings in a serif beside a humanist sans, and the 2014 agency page with its large serif titles: `--font-heading` is Cambria, PT Serif, Georgia; `--font-body` and `--font-ui` are Segoe UI, Open Sans, Helvetica Neue. `--font-mono` is Courier New.\n- `--text-base` 15px at `--line-body` 1.4, `--text-ui` 14px (controls, tables, sidebar, strip), `--text-small` 12px (meta, badges, tile labels, breadcrumb, footer), `--text-large` 20px (lead lines).\n- Headings are regular weight and large: `--text-display` 46px (hero title, page title, figures, the word in a live tile), `--text-h1` 34px (pivot words, panel figures), `--text-h2` 28px (hub titles, dialog and empty-state titles), `--text-h3` 20px (group titles, tile titles, list titles, tabs, the brand). `--weight-heading`, `--weight-display` and `--weight-ui` are 400; `--weight-bold` 700 is for labels, table heads, panel and sidebar titles, badges and the brand name. `--display-tracking` is -0.5px; nothing else is tracked and nothing is uppercase.\n- Surface: everything is square (all four radii 0, so badges are rectangular tags). `--border-width` 1px for rules and outlines; `--border-width-strong` 5px for the bar beside a figure, a notice and the current sidebar row, under the current tab and the table head, and the frame of a hovered tile. `--shadow-panel` is a hard 4px line in `--color-border-strong` along the top of a panel; `--shadow-dialog` adds a 1px ring. A hovered button gets a 2px inner ring, a pressed one 4px (`--shadow-control-hover`, `--shadow-control-pressed`). `--focus-ring` is `1px dashed`. `--transition` fades background and ring in 0.1s.\n- One-off values made with `calc()` and `color-mix()` because the vocabulary has no token: the icon plate and the tile label strip (`--color-inverse` at 40%), the plate on the inverse tile (`--color-inverse-text` at 16%), the `--alt` badge tint (`--color-accent-alt` at 30% over `--color-surface`), the hovered and pressed destructive button (`--color-danger` at 85% over `--color-inverse-text` and over `--color-inverse`), the 2px ring of the back button (twice `--border-width`). A hovered strip link uses `opacity: 0.8`.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, text colour and page fill. Holds the strips directly.\n- `.ds-wrap`: the 1152px content column inside any strip.\n- `.ds-brand`: the site's mark and name, first in the top bar. `.ds-brand__mark` is a 28px tile dressed like the primary button (`--fill-button`, `--color-button-text`, `--radius-control`, `--shadow-control`) holding the mark as inline SVG, drawn with square caps; `.ds-brand__name` is the name in the heading font at `--text-h3` and `--weight-bold` in `--color-heading`. Name and mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the header. `.ds-nav__bar` with `.ds-nav__inner` holds the `.ds-brand`, `.ds-nav__search` and the account, a `.ds-menu` whose toggle holds the name and a `.ds-avatar`. `.ds-nav__pivot` holds `.ds-nav__links` of `.ds-nav__link`; the current word is `is-current`. In the specimen the showing view marks its word with one `:has()` rule per view; a project sets `is-current` itself. In a narrow window the search field takes a row of its own under the brand and the pivot scrolls sideways; under 1040px the hero's figures stand under its text.\n- `.ds-hero`: the start page's introduction, type on the page. `.ds-hero__inner` puts `.ds-hero__copy` (`.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__actions` with one primary and one `--secondary` button) beside the `.ds-stat` row.\n- `.ds-stat`: the row of figures. Each `.ds-stat__item` stands behind a 5px bar in `--color-button` and holds a `.ds-stat__figure` at display size over a small grey `.ds-stat__label`. No box and no icon.\n- `.ds-strip`: one line of news on `--fill-bar-alt`: a badge, `.ds-strip__text` and a bold `.ds-strip__link` at the right. One per page.\n- `.ds-start`: the strip that holds `.ds-start__groups`, three `.ds-group` columns each with a `.ds-group__title`.\n- `.ds-grid`: one group of tiles. `.ds-grid__cell` is a tile and a link; fills `--2`, `--3`, `--4`, `--inverse`, `--bar`, `--plain`; sizes `--wide` and `--large`. Inside: `.ds-grid__body` with a `.ds-grid__figure`, `.ds-grid__title` and `.ds-grid__text` (text tiles), or `.ds-grid__body--icon` with one `.ds-grid__icon` on its plate (icon tiles); then `.ds-grid__foot`, the label strip, with the name at the left and an optional `.ds-badge` count at the right. A hovered tile (`is-hover`) gets a 5px inner frame.\n- `.ds-band`: a strip of an inner page; `--alt` on `--color-surface-alt` with a rule above, `--last` with more room before the footer. `.ds-cols` makes the main and side columns (`--side-first`, `--halves`); `.ds-stack` stacks blocks 32px apart (`--tight`: 20px).\n- `.ds-hub`: three `.ds-hub__section` columns, each under a `.ds-hub__title` (`--next` for a second title lower in the same column).\n- `.ds-page-header`: head of an inner page, used instead of `.ds-hero`. `.ds-page-header__inner` holds `.ds-page-header__back` (the round back button with an arrow), `.ds-page-header__copy` (the breadcrumb, `.ds-page-header__title` at display size, one `.ds-page-header__text` line) and `.ds-page-header__actions` with at most one primary and one `--secondary` button.\n- `.ds-prose`: running text: h1, h2, h3, p, lists, `code`, `strong`. `.ds-prose__lead` for the first paragraph.\n- `.ds-link`: text link. States `is-visited`, `is-hover` (underlined), `is-active`, `is-focus`. `--quiet` for meta and breadcrumb links; `--more` appends an arrow. `.ds-linkrow` lays links in a row.\n- `.ds-button`: flat square button, 14px regular weight. Variants: `--secondary` (outline in its text colour on `--fill-button-secondary`), `--danger` (flat `--color-danger`, for destructive actions only; one per view), `--small`. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow` spaces buttons 8px apart.\n- `.ds-form`: vertical form with labels above the fields. `.ds-form__row` puts fields side by side; `.ds-form__field` wraps `.ds-form__label` and one of `.ds-form__input`, `.ds-form__select`, `.ds-form__textarea`. Error: `is-error` on the input plus `.ds-form__error`. `.ds-form__hint`, `.ds-form__check` with `.ds-form__checkbox`, `.ds-form__actions`.\n- `.ds-table`: data table: the head on `--fill-bar` above a 5px rule, 1px rules between rows, alternate rows on `--color-surface-alt`, no vertical lines. `.ds-table__num` right-aligns numbers; `.ds-table__caption` is a small note below. Wrap it in `.ds-table__wrap`; `.ds-table__foot` is the row under it with the pagination at the left and a key at the right.\n- `.ds-list`: rows of titles. `.ds-list__item` holds a `.ds-list__thumb` cover block (`--2`, `--3`, `--4`) and a `.ds-list__body` with `.ds-list__title`, `.ds-list__text`, `.ds-list__meta`; rows are parted by 1px rules.\n- `.ds-panel`: white box with a 1px border, the heavy top rule of `--shadow-panel`, a `.ds-panel__title` strip and `.ds-panel__body`. `.ds-panel__figure` is a large numeral; `.ds-panel__rows` with `.ds-panel__row` is a two-column list of facts. `--tile` lets it stand in a `.ds-grid` in place of a large tile.\n- `.ds-tabs`: a small pivot of `.ds-tabs__tab` words at `--text-h3`; the current one (`is-current`) is dark and stands on a 5px bar in `--color-button`. No boxes around tabs.\n- `.ds-badge`: small rectangular tag, 12px bold, on `--fill-accent`. `--alt` tinted with an outline, `--quiet` grey for neutral states and counts. Status variants: `--success`, `--warning`, `--danger`. `.ds-badgerow` for several.\n- `.ds-sidebar`: a section list: `.ds-sidebar__title`, `.ds-sidebar__list` of ruled `.ds-sidebar__item` rows with an optional `.ds-sidebar__count`; the current row (`is-current`) is white behind a 5px bar.\n- `.ds-notice`: flat strip behind a 5px bar; `--error` in the danger colours. `.ds-notice__title` for the bold lead-in. `.ds-noticerow` stacks notices.\n- `.ds-pagination`: flat squares of `.ds-pagination__link`; `is-current` is filled with `--fill-button`, `is-disabled` is grey.\n- `.ds-breadcrumb`: 12px grey trail of `.ds-breadcrumb__item` parted by slashes; the last is `.ds-breadcrumb__current`. It sits above the page title.\n- `.ds-dialog`: a dimmed block (`--color-overlay`) crossed from edge to edge by `.ds-dialog__box`, a band on `--fill-panel` with `.ds-dialog__head` (`.ds-dialog__title`, `.ds-dialog__close`), `.ds-dialog__body` in a 520px measure and right-aligned `.ds-dialog__actions` with the primary button first.\n- `.ds-empty`: a panel-like box with the `.ds-empty__icon` at the left and `.ds-empty__copy` beside it: `.ds-empty__title`, `.ds-empty__text` and one button, all left-aligned.\n- `.ds-footer`: one line on `--fill-inverse`: `.ds-footer__name`, `.ds-footer__links` of `.ds-footer__link`, and the copyright at the right.\n- `.ds-menu`: a drop-down under a navigation item, written as `<details>`: `.ds-menu__toggle` is the `<summary>`, set like the navigation links with a small chevron after it, and `.ds-menu__list` holds `.ds-menu__item` links in a flat `--fill-panel` box with a `--border-width` border, `--radius-panel` corners and `--shadow-dialog`. Here it is the account at the right of the bar: the toggle holds the name and the `.ds-avatar`, and the list hangs from the bar's lower edge at the right.\n- `.ds-accordion`: sections that open and close, each a `<details class=\"ds-accordion__item\">` with `.ds-accordion__head` (the `<summary>`, in the heading font, with a plus in `--color-link` at the right that becomes a minus when open) and `.ds-accordion__body`. Items are divided by rules; there are no boxes or fills. Use it for the questions asked at the desk, in a column of a band.\n- `.ds-tooltip`: a term with a dotted underline that shows `.ds-tooltip__tip` above it on hover or focus (give the trigger `tabindex=\"0\"`); `is-open` shows it statically and `--end` hangs the tip from the trigger's right edge. The tip is a small flat box on `--fill-inverse` with `--color-inverse-text` at `--text-small`, `--radius-control` corners and a square pointer. Use it to explain one label in a panel row. Never put it inside `.ds-table__wrap`, which would clip it.\n- `.ds-switch`: an on/off control drawn over a checkbox: a `<label>` holding `.ds-switch__input`, `.ds-switch__track` and `.ds-switch__label`. The track is a flat shape `--size-switch` wide with `--radius-pill` ends in a 30% tint of `--color-text`; switched on it takes `--fill-button` and the `--size-knob` knob (in `--color-button-text`) moves to the right. States `is-on`, `is-focus`, `is-disabled`; `--end` puts the label left and the track at the right edge. With this pack's square corners the track and knob are squares. Use it for notice settings that apply at once.\n- `.ds-switchlist`: a column of `.ds-switch--end` rows divided by rules, for a short group of settings.\n- `.ds-progress`: a thin flat bar: `.ds-progress__head` with the label and `.ds-progress__value` at the right, then a `<progress class=\"ds-progress__bar\">` one `--space-2` high, `--fill-button` on a `--color-border` track with `--radius-pill` ends; `--success` and `--warning` fill it in the status colours. No stripes and no animation. Use it without a head under a `.ds-panel__figure` (titles on loan out of the limit), or with one in a card panel.\n- `.ds-avatar`: a person or account drawn as a flat square with `--radius-control` corners `--size-avatar` across with two initials, `--color-accent-text` on `--fill-accent`; `--2` uses the button colours, `--3` is `--color-heading` on `--color-surface-strong`. Use it for the signed-in reader in the bar and for a member of staff beside a recommendation.\n- `.ds-byline`: an avatar beside `.ds-byline__name` and `.ds-byline__role`, for the author of a quote, a client or an account.\n- `.ds-carousel`: slides of which one shows at a time: hidden radio buttons `.ds-carousel__pick` come first, then `.ds-carousel__slides` holding up to four `.ds-carousel__slide`, then `.ds-carousel__dots` with one `<label class=\"ds-carousel__dot\">` per radio. The checked radio shows its slide and its dot at full strength; the other dots are the text colour at 30% opacity. It turns without script and does not move on its own. Here each slide is a staff recommendation: a `.ds-carousel__quote` in the heading font at `--text-h3` with a `.ds-byline`, set left, with small square dots.\n\n## Never\n\n- `block-gap <= 56px`: strips touch; 56px is the largest space between two blocks.\n- `content-width <= 1152px`: content stays in the 1152px column.\n- `font-size >= 12px`: tile labels and meta text are the smallest text.\n- `font-size <= 46px`: the hero and page titles are the largest text.\n- `font-weight <= 700`: headings are regular; 700 is for labels and tags.\n- `font-families <= 3`: a serif for headings, a sans-serif for text, monospace for code.\n- `line-height <= 1.4`: body text is set at 1.4.\n- `uppercase-text <= 0%`: navigation, labels and headings are in sentence case.\n- `underlined-links <= 5%`: a link is underlined only while it is hovered.\n- `border-radius <= 0px`: the corporate reference has no rounded corner at all, and tiles must meet exactly.\n- `box-shadow-blur <= 0px`: the only shadow is the hard 1px ring of a hovered button; nothing is blurred.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 0%`: every background is one solid colour.\n- `border-width <= 4px`: rules are 2px; 4px marks the current item, the tab line and a news item.\n- `transition = none`: states change without a fade.\n- `animation = none`: no reference has a CSS animation.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new destination on the start page is another `.ds-grid__cell`: an icon tile on any fill, or a text tile on `--color-fill-1`, `--color-fill-4`, the inverse, bar or plain fill, always with a `.ds-grid__foot` label; a new set of destinations is another `.ds-group`. A new section of an inner page goes into a `.ds-band`, a new section of a hub under its own `.ds-hub__title`, and a new box is a `.ds-panel`. Keep every corner square and every fill flat; mark the current or important thing with a `--border-width-strong` bar in `--color-button` rather than with a box. Spacing comes from the `--space-*` scale, and any one-off shade is a `color-mix()` of tokens noted next to the rule.\n",
    "components.css": ":root {\n  --size-page: 1152px;\n  --size-bar: 48px;\n  --size-tile: 150px;\n  --size-icon: 40px;\n  --size-thumb: 52px;\n  --size-side: 300px;\n  --size-search: 220px;\n  --size-dialog: 520px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 20px;\n  --space-5: 32px;\n  --space-6: 56px;\n  --size-avatar: 32px;\n  --size-switch: 44px;\n  --size-knob: 16px;\n  --size-menu: 220px;\n}\n\n/* shell */\n.ds-page {\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\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/* wrap: the content column; every strip pads its own sides */\n.ds-wrap {\n  max-width: var(--size-page);\n  margin: 0 auto;\n}\n\n/* nav: a thin bar with the brand, the search field and the account, then the pivot, a row of large words on the page */\n.ds-nav {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__bar {\n  padding: 0 var(--space-6);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-nav__inner {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  min-height: var(--size-bar);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-right: auto;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: calc(var(--space-4) + var(--space-2));\n  height: calc(var(--space-4) + var(--space-2));\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 76%;\n  height: 76%;\n}\n.ds-brand__name {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-nav__search {\n  flex: 0 1 var(--size-search);\n  min-width: 0;\n  margin: 0;\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-nav__search::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-nav__search:focus,\n.ds-nav__search.is-focus {\n  border-color: var(--color-focus);\n  outline: var(--focus-ring);\n}\n.ds-nav__account:hover,\n.ds-nav__account.is-hover {\n  color: var(--color-link);\n}\n.ds-nav__pivot {\n  padding: var(--space-5) var(--space-6) 0;\n}\n.ds-nav__links {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-5);\n  margin: 0 auto;\n  padding: 0;\n  max-width: var(--size-page);\n  list-style: none;\n}\n.ds-nav__link {\n  display: block;\n  color: var(--color-text-muted);\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-decoration: var(--link-decoration-quiet);\n  text-transform: var(--heading-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  color: var(--color-link);\n}\n.ds-nav__link.is-current {\n  color: var(--color-heading);\n}\n/* the current view marks its word in the pivot */\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#start\"] {\n  color: var(--color-heading);\n}\n.ds-page:has(#start:target) .ds-nav__link[href=\"#start\"] {\n  color: var(--color-heading);\n}\n.ds-page:has(#catalogue:target) .ds-nav__link[href=\"#catalogue\"] {\n  color: var(--color-heading);\n}\n.ds-page:has(#loans:target) .ds-nav__link[href=\"#loans\"] {\n  color: var(--color-heading);\n}\n.ds-page:has(#settings:target) .ds-nav__link[href=\"#settings\"] {\n  color: var(--color-heading);\n}\n\n/* hero: type on the page, not a band; the figures stand beside it */\n.ds-hero {\n  padding: var(--space-5) var(--space-6);\n}\n.ds-hero__inner {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-6);\n}\n.ds-hero__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-4);\n  max-width: 52ch;\n  font-size: var(--text-large);\n  line-height: var(--line-heading);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n\n/* stats: large numerals, each behind a thick bar of the action colour */\n.ds-stat {\n  display: flex;\n  flex: 0 0 auto;\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat__item {\n  min-width: 0;\n  padding-left: var(--space-3);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-button);\n}\n.ds-stat__figure {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n\n/* strip: one line of service news on the secondary bar */\n.ds-strip {\n  padding: var(--space-2) var(--space-6);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-size: var(--text-ui);\n}\n.ds-strip__inner {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-3);\n}\n.ds-strip__text {\n  margin: 0;\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-strip__link {\n  color: inherit;\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-strip__link:hover,\n.ds-strip__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n  opacity: 0.8;\n}\n\n/* start: groups of tiles side by side, each under a small title */\n.ds-start {\n  padding: var(--space-5) var(--space-6) var(--space-6);\n}\n.ds-start__groups {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: var(--space-6);\n}\n.ds-group {\n  min-width: 0;\n}\n.ds-group__title {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading-alt);\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}\n\n/* grid: one group of tiles, two columns wide; a tile is square, wide or large */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  grid-auto-rows: var(--size-tile);\n  gap: var(--space-2);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  overflow: hidden;\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-page);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-grid__cell:hover,\n.ds-grid__cell.is-hover {\n  outline: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  outline-offset: calc(var(--border-width-strong) * -1);\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__cell--inverse {\n  background: var(--fill-inverse);\n}\n.ds-grid__cell--bar {\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n}\n.ds-grid__cell--plain {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n}\n.ds-grid__cell--wide {\n  grid-column: span 2;\n}\n.ds-grid__cell--large {\n  grid-column: span 2;\n  grid-row: span 2;\n}\n.ds-grid__body {\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-end;\n  flex: 1 1 0;\n  min-height: 0;\n  padding: var(--space-3) var(--space-3) var(--space-2);\n}\n.ds-grid__body--icon {\n  align-items: center;\n  justify-content: center;\n  padding-bottom: var(--space-3);\n}\n.ds-grid__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  box-sizing: content-box;\n  padding: var(--space-3);\n  background: color-mix(in srgb, var(--color-inverse) 40%, transparent);\n  color: var(--color-inverse-text);\n  border-radius: 50%;\n}\n.ds-grid__cell--inverse .ds-grid__icon {\n  background: color-mix(in srgb, var(--color-inverse-text) 16%, transparent);\n}\n.ds-grid__figure {\n  display: block;\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}\n.ds-grid__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-grid__cell--plain .ds-grid__title {\n  color: var(--color-heading);\n}\n.ds-grid__text {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-ui);\n}\n.ds-grid__foot {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-3);\n  background: color-mix(in srgb, var(--color-inverse) 40%, transparent);\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n\n/* band: a strip of an inner page */\n.ds-band {\n  padding: var(--space-5) var(--space-6);\n}\n.ds-band--alt {\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-band--last {\n  padding-bottom: var(--space-6);\n}\n.ds-cols {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n  gap: var(--space-6);\n}\n.ds-cols--side-first {\n  grid-template-columns: var(--size-side) minmax(0, 1fr);\n}\n.ds-cols--halves {\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.ds-stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-stack--tight {\n  gap: var(--space-4);\n}\n\n/* hub: sections side by side, each under a large title */\n.ds-hub {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 0.8fr);\n  gap: var(--space-6);\n}\n.ds-hub__section {\n  min-width: 0;\n}\n.ds-hub__title {\n  margin: 0 0 var(--space-4);\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}\n.ds-hub__title--next {\n  margin-top: var(--space-5);\n}\n\n/* page header: a round back button, the breadcrumb, the large title and one line; actions at the right */\n.ds-page-header {\n  padding: var(--space-5) var(--space-6) var(--space-2);\n}\n.ds-page-header__inner {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-4);\n}\n.ds-page-header__back {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  align-self: center;\n  width: calc(var(--space-5) + var(--space-3));\n  height: calc(var(--space-5) + var(--space-3));\n  color: var(--color-heading);\n  border: calc(var(--border-width) * 2) var(--border-style) currentColor;\n  border-radius: 50%;\n  text-decoration: none;\n  transition: none;\n}\n.ds-page-header__back:hover,\n.ds-page-header__back.is-hover {\n  background: var(--color-heading);\n  color: var(--color-canvas);\n  border-color: var(--color-heading);\n}\n.ds-page-header__back svg {\n  display: block;\n  width: 50%;\n  height: 50%;\n}\n.ds-page-header__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: var(--space-1) 0 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__title .ds-badge {\n  margin-left: var(--space-2);\n}\n.ds-page-header__text {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 0 0 auto;\n  align-items: center;\n  gap: var(--space-2);\n  padding-bottom: var(--space-1);\n}\n\n/* typography */\n.ds-prose {\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 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  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin-top: var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin-top: var(--space-4);\n  color: var(--color-heading-alt);\n  font-size: var(--text-h3);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-3);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-3);\n  padding-left: var(--space-4);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-radius: var(--radius-control);\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n  line-height: var(--line-heading);\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  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-link);\n}\n.ds-link--more::after {\n  content: \" \\2192\";\n}\n.ds-linkrow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n}\n\n/* buttons: flat rectangles */\n.ds-button {\n  display: inline-block;\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-align: center;\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width-strong);\n}\n.ds-button--secondary {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: currentColor;\n  transition: none;\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--color-button-secondary-text);\n  color: var(--color-button-secondary);\n  border-color: var(--color-button-secondary-text);\n}\n.ds-button--secondary:active,\n.ds-button--secondary.is-active {\n  background: var(--color-button-secondary-text);\n  color: var(--color-button-secondary);\n}\n.ds-button--danger {\n  background: var(--color-danger);\n  color: var(--color-button-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: color-mix(in srgb, var(--color-danger) 85%, var(--color-inverse-text));\n  color: var(--color-button-hover-text);\n}\n.ds-button--danger:active,\n.ds-button--danger.is-active {\n  background: color-mix(in srgb, var(--color-danger) 85%, var(--color-inverse));\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  border-color: transparent;\n  box-shadow: none;\n  cursor: default;\n}\n.ds-buttonrow {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form: labels above their fields */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form__row {\n  display: flex;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-form__label {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  transition: var(--transition);\n}\n.ds-form__textarea {\n  min-height: calc(var(--space-6) + var(--space-5));\n  resize: vertical;\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-form__input:focus,\n.ds-form__select:focus,\n.ds-form__textarea:focus,\n.ds-form__input.is-focus {\n  border-color: var(--color-focus);\n  outline: var(--focus-ring);\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-form__checkbox {\n  margin: 0;\n  accent-color: var(--color-button);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* table: a head on the bar colour above a heavy rule, then ruled rows */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  background: var(--color-surface);\n  color: var(--color-text);\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3);\n  text-align: left;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table thead th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-ui);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-table tbody th {\n  color: var(--color-heading);\n  font-weight: var(--weight-body);\n}\n.ds-table tbody tr:nth-child(even) td,\n.ds-table tbody tr:nth-child(even) th {\n  background: var(--color-surface-alt);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__caption {\n  caption-side: bottom;\n  padding-top: var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  text-align: left;\n}\n.ds-table__wrap {\n  overflow-x: auto;\n}\n.ds-table__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-top: var(--space-4);\n}\n\n/* list: a colour block for the cover, then title, a line of text and meta */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__item:first-child {\n  padding-top: 0;\n}\n.ds-list__thumb {\n  flex: 0 0 var(--size-thumb);\n  height: calc(var(--size-thumb) + var(--space-4));\n  background: var(--color-fill-1);\n  border-radius: var(--radius-page);\n}\n.ds-list__thumb--2 {\n  background: var(--color-fill-2);\n}\n.ds-list__thumb--3 {\n  background: var(--color-fill-3);\n}\n.ds-list__thumb--4 {\n  background: var(--color-fill-4);\n}\n.ds-list__body {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-list__title {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__text {\n  margin: var(--space-1) 0 0;\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* panel */\n.ds-panel {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel--tile {\n  grid-column: span 2;\n  grid-row: span 2;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-radius: calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width)) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n}\n.ds-panel__body {\n  flex: 1 1 auto;\n  min-height: 0;\n  padding: var(--space-3);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-2);\n}\n.ds-panel__figure {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  font-variant-numeric: tabular-nums;\n}\n.ds-panel__rows {\n  margin: 0 0 var(--space-2);\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-panel__row {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-1) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* tabs: a small pivot; the current word is dark and stands on a thick bar */\n.ds-tabs {\n  display: flex;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n}\n.ds-tabs__tab {\n  display: block;\n  padding-bottom: var(--space-1);\n  color: var(--color-text-muted);\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link);\n}\n.ds-tabs__tab.is-current {\n  color: var(--color-heading);\n  border-bottom-color: var(--color-button);\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  letter-spacing: 0;\n  text-transform: var(--ui-transform);\n  vertical-align: middle;\n  white-space: nowrap;\n}\n.ds-badge--alt {\n  background: color-mix(in srgb, var(--color-accent-alt) 30%, var(--color-surface));\n  color: var(--color-heading);\n  outline: var(--border-width) var(--border-style) var(--color-accent-alt);\n  outline-offset: calc(var(--border-width) * -1);\n}\n.ds-badge--quiet {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n}\n.ds-badge--success {\n  background: var(--color-success);\n  color: var(--color-accent-text);\n}\n.ds-badge--warning {\n  background: var(--color-warning);\n  color: var(--color-accent-text);\n}\n.ds-badge--danger {\n  background: var(--color-danger);\n  color: var(--color-accent-text);\n}\n.ds-badgerow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* sidebar: a list of sections; the current one stands behind a thick bar */\n.ds-sidebar {\n  font-size: var(--text-ui);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  padding: var(--space-2) var(--space-3);\n  border-left: var(--border-width-strong) var(--border-style) transparent;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-sidebar__item.is-current {\n  background: var(--color-surface);\n  color: var(--color-heading);\n  border-left-color: var(--color-button);\n  font-weight: var(--weight-bold);\n}\n.ds-sidebar__count {\n  float: right;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n\n/* notice: a flat strip behind a thick bar */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-notice-text);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border-left-color: var(--color-danger);\n  outline: var(--border-width) var(--border-style) var(--color-danger);\n  outline-offset: calc(var(--border-width) * -1);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-noticerow {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n\n/* pagination: flat squares */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\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__link {\n  display: block;\n  min-width: var(--space-5);\n  padding: var(--space-1) var(--space-2);\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border-radius: var(--radius-control);\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  color: var(--color-link);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  font-weight: var(--weight-bold);\n}\n.ds-pagination__link.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  color: var(--color-border-strong);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n}\n\n/* dialog: a band across the whole dimmed block, its text in a narrow measure */\n.ds-dialog {\n  padding: var(--space-6) 0;\n  background: var(--color-overlay);\n  border-radius: var(--radius-panel);\n}\n.ds-dialog__box {\n  padding: var(--space-4) var(--space-5);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__head {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-dialog__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-dialog__close {\n  color: var(--color-text-muted);\n  font-size: var(--text-h2);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-dialog__close::before {\n  content: \"\";\n  display: inline-block;\n  width: calc(var(--text-h2) * 0.6);\n  height: calc(var(--text-h2) * 0.6);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  rotate: 45deg;\n  vertical-align: middle;\n}\n.ds-dialog__body {\n  max-width: var(--size-dialog);\n  padding: var(--space-2) 0 var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-2);\n}\n\n/* empty state: a large quiet line at the left, with the icon beside it */\n.ds-empty {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-4);\n  padding: var(--space-5);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-empty__icon {\n  flex: 0 0 auto;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  color: var(--color-text-muted);\n}\n.ds-empty__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-4);\n}\n\n/* footer: one dark line */\n.ds-footer {\n  padding: var(--space-4) var(--space-6);\n  background: var(--fill-inverse);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-footer__inner {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-5);\n}\n.ds-footer__name {\n  color: var(--color-inverse-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}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 1 1 auto;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-text-muted);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  color: var(--color-inverse-text);\n}\n\n/* menu: a drop-down under a navigation item, a <details>; a flat list in a border, opened by its toggle */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-bar);\n  color: var(--color-bar-text);\n  text-transform: var(--ui-transform);\n  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-menu__toggle:hover,\n.ds-menu__toggle.is-hover,\n.ds-menu[open] > .ds-menu__toggle {\n  color: var(--color-link);\n}\n.ds-menu__toggle::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__toggle::after {\n  content: \"\";\n  flex: 0 0 auto;\n  width: calc(var(--space-1) + var(--border-width));\n  height: calc(var(--space-1) + var(--border-width));\n  margin-top: calc(0 - var(--space-1) / 2);\n  border-right: var(--border-width) var(--border-style) currentColor;\n  border-bottom: var(--border-width) var(--border-style) currentColor;\n  transform: rotate(45deg);\n}\n.ds-menu__toggle:focus-visible,\n.ds-menu__toggle.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  right: 0;\n  z-index: 5;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  text-align: left;\n}\n.ds-menu__item {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-menu__item:hover,\n.ds-menu__item.is-hover {\n  background: var(--color-surface-alt);\n  color: var(--color-link);\n}\n.ds-menu__item:focus-visible,\n.ds-menu__item.is-focus {\n  outline: var(--focus-ring);\n}\n\n/* accordion: sections that open and close, divided by rules; a plus opens, a minus closes */\n.ds-accordion {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\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  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  flex: none;\n  align-self: center;\n  display: inline-block;\n  width: calc(var(--space-3) - var(--space-2) / 4);\n  height: calc(var(--space-3) - var(--space-2) / 4);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  color: var(--color-link);\n}\n.ds-accordion__item[open] > .ds-accordion__head::after {\n  clip-path: inset(calc(50% - var(--space-2) / 8) 0);\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-link);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: 72ch;\n  padding: 0 0 var(--space-4);\n  color: var(--color-text);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* tooltip: a small flat box above its trigger, shown on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-block;\n  border-bottom: var(--border-width) dotted currentColor;\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 6;\n  display: none;\n  width: max-content;\n  max-width: min(32ch, 70vw);\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  letter-spacing: 0;\n  text-align: left;\n  text-transform: none;\n  white-space: normal;\n}\n.ds-tooltip__tip::after {\n  content: \"\";\n  position: absolute;\n  top: calc(100% - var(--space-1));\n  left: var(--space-3);\n  width: var(--space-2);\n  height: var(--space-2);\n  background: var(--fill-inverse);\n  transform: rotate(45deg);\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n\n/* switch: an on/off control over a checkbox; the knob slides to the right and the track takes the button fill */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  flex: 0 0 auto;\n  width: var(--size-switch);\n  height: calc(var(--size-switch) / 2);\n  background: color-mix(in srgb, var(--color-text) 30%, transparent);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  left: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  width: var(--size-knob);\n  height: var(--size-knob);\n  background: var(--color-button-text);\n  border-radius: var(--radius-pill);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch.is-on .ds-switch__track {\n  background: var(--fill-button);\n}\n.ds-switch__input:checked + .ds-switch__track::after,\n.ds-switch.is-on .ds-switch__track::after {\n  left: calc(var(--size-switch) / 2 + (var(--size-switch) / 2 - var(--size-knob)) / 2);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch.is-focus .ds-switch__track {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width);\n}\n.ds-switch__input:disabled + .ds-switch__track,\n.ds-switch.is-disabled .ds-switch__track {\n  background: var(--color-disabled);\n}\n.ds-switch__label {\n  min-width: 0;\n}\n.ds-switch--end {\n  display: flex;\n  flex-direction: row-reverse;\n  justify-content: space-between;\n}\n\n.ds-switchlist {\n  display: flex;\n  flex-direction: column;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-switchlist .ds-switch {\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* progress: a thin flat bar on a track; no stripes, no gloss, no movement */\n.ds-progress {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-progress__head {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-2);\n  color: var(--color-text);\n}\n.ds-progress__value {\n  color: var(--color-text-muted);\n  font-variant-numeric: tabular-nums;\n}\n.ds-progress__bar {\n  display: block;\n  width: 100%;\n  height: var(--space-2);\n  appearance: none;\n  overflow: hidden;\n  background: var(--color-border);\n  border: 0;\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar::-webkit-progress-bar {\n  background: transparent;\n}\n.ds-progress__bar::-webkit-progress-value {\n  background: var(--fill-button);\n}\n.ds-progress__bar::-moz-progress-bar {\n  background: var(--fill-button);\n}\n.ds-progress__bar--success::-moz-progress-bar {\n  background: var(--color-success);\n}\n.ds-progress__bar--warning::-moz-progress-bar {\n  background: var(--color-warning);\n}\n\n/* avatar: a flat square with initials */\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-avatar--2 {\n  background: var(--fill-button);\n  color: var(--color-button-text);\n}\n.ds-avatar--3 {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n\n/* byline: an avatar beside a name and a line about the person */\n.ds-byline {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-3);\n  text-align: left;\n}\n.ds-byline__text {\n  min-width: 0;\n}\n.ds-byline__name {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-byline__role {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* carousel: one slide showing at a time; the dots are labels of hidden radio buttons, so it turns without script */\n.ds-carousel {\n  position: relative;\n}\n.ds-carousel__pick {\n  position: absolute;\n  margin: 0;\n  opacity: 0;\n  pointer-events: none;\n}\n.ds-carousel__slide {\n  display: none;\n  margin: 0;\n}\n.ds-carousel__pick:nth-of-type(1):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(1),\n.ds-carousel__pick:nth-of-type(2):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(2),\n.ds-carousel__pick:nth-of-type(3):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(3),\n.ds-carousel__pick:nth-of-type(4):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(4) {\n  display: block;\n}\n.ds-carousel__dots {\n  display: flex;\n  justify-content: flex-start;\n  margin: var(--space-3) calc(0 - var(--space-2)) 0;\n}\n.ds-carousel__dot {\n  padding: var(--space-2);\n  cursor: pointer;\n}\n.ds-carousel__dot::before {\n  content: \"\";\n  display: block;\n  width: calc(var(--space-2) + var(--space-1));\n  height: calc(var(--space-2) + var(--space-1));\n  background: currentColor;\n  border-radius: var(--radius-pill);\n  opacity: 0.3;\n  transition: var(--transition);\n}\n.ds-carousel__dot:hover::before,\n.ds-carousel__dot.is-hover::before {\n  opacity: 0.6;\n}\n.ds-carousel__pick:nth-of-type(1):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(1)::before,\n.ds-carousel__pick:nth-of-type(2):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(2)::before,\n.ds-carousel__pick:nth-of-type(3):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(3)::before,\n.ds-carousel__pick:nth-of-type(4):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(4)::before {\n  opacity: 1;\n}\n.ds-carousel__pick:focus-visible ~ .ds-carousel__dots {\n  outline: var(--focus-ring);\n}\n\n.ds-carousel__quote {\n  max-width: 40ch;\n  margin: 0 0 var(--space-4);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-carousel .ds-byline {\n  justify-content: flex-start;\n  margin: 0;\n}\n.ds-panel__body .ds-progress {\n  margin: 0 0 var(--space-3);\n}\n\n/* medium windows: the side column narrows and the hub drops to two columns */\n@media (max-width: 1040px) {\n  .ds-nav__bar,\n  .ds-nav__pivot,\n  .ds-hero,\n  .ds-strip,\n  .ds-start,\n  .ds-band,\n  .ds-page-header,\n  .ds-footer {\n    padding-left: var(--space-5);\n    padding-right: var(--space-5);\n  }\n  .ds-start__groups,\n  .ds-hub,\n  .ds-cols {\n    gap: var(--space-5);\n  }\n  .ds-hero__inner {\n    flex-direction: column;\n    align-items: stretch;\n    gap: var(--space-4);\n  }\n  .ds-hero__copy {\n    flex: 0 0 auto;\n  }\n}\n\n/* narrow windows: everything stacks; the pivot scrolls sideways, as it does on a phone */\n@media (max-width: 760px) {\n  .ds-nav__bar,\n  .ds-nav__pivot,\n  .ds-hero,\n  .ds-strip,\n  .ds-start,\n  .ds-band,\n  .ds-page-header,\n  .ds-footer {\n    padding-left: var(--space-4);\n    padding-right: var(--space-4);\n  }\n  .ds-nav__inner {\n    flex-wrap: wrap;\n    gap: 0 var(--space-3);\n  }\n  .ds-nav__search {\n    order: 3;\n    flex: 0 0 100%;\n    margin-bottom: var(--space-2);\n  }\n  .ds-nav__pivot {\n    padding-top: var(--space-4);\n    overflow-x: auto;\n  }\n  .ds-nav__links {\n    gap: var(--space-4);\n  }\n  .ds-nav__link {\n    font-size: var(--text-h2);\n  }\n  .ds-hero {\n    padding-top: var(--space-4);\n    padding-bottom: var(--space-4);\n  }\n  .ds-hero__inner {\n    flex-direction: column;\n    align-items: stretch;\n    gap: var(--space-4);\n  }\n  .ds-hero__copy {\n    flex: 0 0 auto;\n  }\n  .ds-hero__title,\n  .ds-page-header__title {\n    font-size: var(--text-h1);\n  }\n  .ds-stat {\n    gap: var(--space-3);\n  }\n  .ds-stat__item {\n    flex: 1 1 0;\n    padding-left: var(--space-2);\n  }\n  .ds-stat__figure {\n    font-size: var(--text-h1);\n  }\n  .ds-start {\n    padding-top: var(--space-4);\n    padding-bottom: var(--space-5);\n  }\n  .ds-start__groups,\n  .ds-hub,\n  .ds-cols,\n  .ds-cols--side-first,\n  .ds-cols--halves {\n    grid-template-columns: minmax(0, 1fr);\n    gap: var(--space-5);\n  }\n  .ds-band {\n    padding-top: var(--space-4);\n    padding-bottom: var(--space-4);\n  }\n  .ds-page-header {\n    padding-top: var(--space-4);\n  }\n  .ds-page-header__inner {\n    flex-wrap: wrap;\n    align-items: center;\n    gap: var(--space-3);\n  }\n  .ds-page-header__actions {\n    flex: 0 0 100%;\n  }\n  .ds-tabs {\n    overflow-x: auto;\n  }\n  .ds-table {\n    min-width: 60ch;\n  }\n  .ds-form__row {\n    flex-direction: column;\n  }\n  .ds-dialog {\n    padding: var(--space-5) 0;\n  }\n  .ds-dialog__box {\n    padding: var(--space-4);\n  }\n  .ds-empty {\n    padding: var(--space-4);\n  }\n  .ds-tooltip {\n    position: static;\n  }\n  .ds-tooltip__tip,\n  .ds-tooltip--end .ds-tooltip__tip {\n    right: var(--space-3);\n    bottom: auto;\n    left: var(--space-3);\n    width: auto;\n    max-width: none;\n    margin-top: var(--space-1);\n  }\n  .ds-tooltip__tip::after {\n    display: none;\n  }\n}\n\n/* phones and tablets: the pivot's words are heading-sized and outrun the window well before it is phone-sized,\n   so below 1040px the pivot is one strip that scrolls from edge to edge; the far edge fades to show there is more,\n   and the last word starts in view when it is the current one */\n@media (max-width: 1040px) {\n  .ds-nav__pivot {\n    padding-left: 0;\n    padding-right: 0;\n    overflow-x: auto;\n    scrollbar-width: none;\n    -webkit-mask-image: linear-gradient(to right, black calc(100% - var(--space-6)), transparent);\n    mask-image: linear-gradient(to right, black calc(100% - var(--space-6)), transparent);\n  }\n  .ds-nav__links {\n    box-sizing: border-box;\n    width: max-content;\n    min-width: 100%;\n    max-width: none;\n    margin: 0;\n    padding: 0 var(--space-6) 0 var(--space-5);\n  }\n  .ds-page:has(#settings:target) .ds-nav__pivot {\n    direction: rtl;\n    -webkit-mask-image: linear-gradient(to left, black calc(100% - var(--space-6)), transparent);\n    mask-image: linear-gradient(to left, black calc(100% - var(--space-6)), transparent);\n  }\n  .ds-page:has(#settings:target) .ds-nav__links {\n    direction: ltr;\n    padding: 0 var(--space-5) 0 var(--space-6);\n  }\n}\n@media (max-width: 760px) {\n  .ds-nav__links {\n    padding: 0 var(--space-6) 0 var(--space-4);\n  }\n  .ds-page:has(#settings:target) .ds-nav__links {\n    padding: 0 var(--space-4) 0 var(--space-6);\n  }\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: flat design tile start 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<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__bar\">\n    <div class=\"ds-wrap ds-nav__inner\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#start\">\n        <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\".3\"/><path d=\"M15.5 8.5L21.64 14.64A10 10 0 0 1 14.64 21.64L8.5 15.5Z\" opacity=\".35\"/><rect x=\"8.5\" y=\"8.5\" width=\"7\" height=\"7\"/></svg></span>\n        <span class=\"ds-brand__name\">chronoskin</span>\n      </a>\n      <input class=\"ds-nav__search\" type=\"search\" placeholder=\"Title, author or subject\" aria-label=\"Search the catalogue\">\n      <details class=\"ds-menu\">\n        <summary class=\"ds-menu__toggle\"><span>Ines Varga</span><span class=\"ds-avatar\" aria-hidden=\"true\">IV</span></summary>\n        <ul class=\"ds-menu__list\">\n          <li><a class=\"ds-menu__item\" href=\"#loans\">My loans</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#settings\">Card and notices</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#catalogue\">Reading history</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#start\">Sign out</a></li>\n        </ul>\n      </details>\n    </div>\n  </div>\n  <nav class=\"ds-nav__pivot\" aria-label=\"Sections\">\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#start\">Start</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#catalogue\">Catalogue</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#loans\">My loans</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#settings\">Settings</a></li>\n    </ul>\n  </nav>\n</header>\n\n<section class=\"ds-view ds-view--home\" id=\"start\">\n  <div class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-wrap ds-hero__inner\">\n      <div class=\"ds-hero__copy\">\n        <h1 class=\"ds-hero__title\">Your library, one tap away</h1>\n        <p class=\"ds-hero__lead\">chronoskin keeps your loans, holds and the six city branches on a single start page.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button\" href=\"#catalogue\">Browse the catalogue</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#loans\">Renew my loans</a>\n        </div>\n      </div>\n      <ul class=\"ds-stat\" data-component=\"stats\">\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">4</span><span class=\"ds-stat__label\">Titles on loan</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">2</span><span class=\"ds-stat__label\">Holds ready</span></li>\n        <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">3</span><span class=\"ds-stat__label\">Days to the next return</span></li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"ds-strip\">\n    <div class=\"ds-wrap ds-strip__inner\">\n      <span class=\"ds-badge\">Today</span>\n      <p class=\"ds-strip__text\">The Riverside branch closes at 5 pm for a reading. Returns can go in the box by the door.</p>\n      <a class=\"ds-strip__link\" href=\"#catalogue\">All branch news</a>\n    </div>\n  </div>\n\n  <div class=\"ds-start\">\n    <div class=\"ds-wrap ds-start__groups\">\n      <section class=\"ds-group\">\n        <h2 class=\"ds-group__title\">Your shelf</h2>\n        <div class=\"ds-grid\" data-component=\"grid\">\n          <a class=\"ds-grid__cell ds-grid__cell--large\" href=\"#loans\">\n            <span class=\"ds-grid__body\">\n              <span class=\"ds-grid__figure\">Thursday</span>\n              <span class=\"ds-grid__title\">The Salt Road Atlas is due back</span>\n              <span class=\"ds-grid__text\">Three more titles follow next week. Renew them all in one step.</span>\n            </span>\n            <span class=\"ds-grid__foot\"><span>Loans</span><span class=\"ds-badge\">4</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#loans\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M38 24a14 14 0 1 1-5-10.7 M34 6v8h-8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Renew</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#settings\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M6 12h36v24H6z M12 20h10 M12 27h16 M32 19h4v6h-4z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Library card</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--4 ds-grid__cell--wide\" href=\"#loans\">\n            <span class=\"ds-grid__body\">\n              <span class=\"ds-grid__title\">Two holds are waiting at Central</span>\n              <span class=\"ds-grid__text\">Kept at the desk until Saturday.</span>\n            </span>\n            <span class=\"ds-grid__foot\"><span>Holds</span><span class=\"ds-badge\">2</span></span>\n          </a>\n        </div>\n      </section>\n\n      <section class=\"ds-group\">\n        <h2 class=\"ds-group__title\">Catalogue</h2>\n        <div class=\"ds-grid\">\n          <a class=\"ds-grid__cell ds-grid__cell--plain ds-grid__cell--wide\" href=\"#catalogue\">\n            <span class=\"ds-grid__body\">\n              <span class=\"ds-grid__title\">Twelve gardens in winter</span>\n              <span class=\"ds-grid__text\">New this week, in essays and nature.</span>\n            </span>\n            <span class=\"ds-grid__foot\"><span>New titles</span><span class=\"ds-badge\">128</span></span>\n          </a>\n          <a class=\"ds-grid__cell\" href=\"#catalogue\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><circle cx=\"21\" cy=\"21\" r=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/><path d=\"M30 30l11 11\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Search</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--inverse\" href=\"#catalogue\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M12 6h24v36H12z M18 14h12 M18 21h12 M18 28h8 M22 36h4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>E-books</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--2 ds-grid__cell--wide\" href=\"#catalogue\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M10 30v-6a14 14 0 0 1 28 0v6 M8 28h6v12H8z M34 28h6v12h-6z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Audiobooks</span><span class=\"ds-badge\">New</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#catalogue\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M8 10h22v30H8z M30 16h10v24H30 M14 18h10 M14 25h10 M14 32h10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Magazines</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--4\" href=\"#catalogue\">\n            <span class=\"ds-grid__body\">\n              <span class=\"ds-grid__figure\">31</span>\n              <span class=\"ds-grid__text\">reading lists by the librarians</span>\n            </span>\n            <span class=\"ds-grid__foot\"><span>Lists</span></span>\n          </a>\n        </div>\n      </section>\n\n      <section class=\"ds-group\">\n        <h2 class=\"ds-group__title\">Branches</h2>\n        <div class=\"ds-grid\">\n          <a class=\"ds-grid__cell ds-grid__cell--bar ds-grid__cell--wide\" href=\"#catalogue\">\n            <span class=\"ds-grid__body\">\n              <span class=\"ds-grid__title\">Central is open until 8 pm</span>\n              <span class=\"ds-grid__text\">Nine minutes on foot from where you are.</span>\n            </span>\n            <span class=\"ds-grid__foot\"><span>Nearest branch</span></span>\n          </a>\n          <section class=\"ds-panel ds-panel--tile\" data-component=\"panel\">\n            <h3 class=\"ds-panel__title\">Opening hours this week</h3>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-panel__rows\">\n                <li class=\"ds-panel__row\"><span>Central</span><span>9 am to 8 pm</span></li>\n                <li class=\"ds-panel__row\"><span>Riverside</span><span>10 am to 5 pm</span></li>\n                <li class=\"ds-panel__row\"><span>Old Mill</span><span>10 am to 6 pm</span></li>\n                <li class=\"ds-panel__row\"><span>Northfield</span><span>Closed on Monday</span></li>\n                <li class=\"ds-panel__row\"><span>Harbour</span><span>9 am to 6 pm</span></li>\n                <li class=\"ds-panel__row\"><span>Hillside</span><span>Noon to 7 pm</span></li>\n              </ul>\n              <a class=\"ds-link ds-link--more\" href=\"#settings\">Change your home branch</a>\n            </div>\n          </section>\n          <a class=\"ds-grid__cell\" href=\"#catalogue\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M8 12h32v28H8z M8 20h32 M16 6v10 M32 6v10 M15 27h6v6h-6z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Events</span><span class=\"ds-badge\">3</span></span>\n          </a>\n          <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#catalogue\">\n            <span class=\"ds-grid__body ds-grid__body--icon\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M8 40V10h20v30 M28 18h12v22 M4 40h40 M14 17h8 M14 24h8 M14 31h8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></span>\n            <span class=\"ds-grid__foot\"><span>Study rooms</span></span>\n          </a>\n        </div>\n      </section>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"catalogue\">\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <div class=\"ds-wrap ds-page-header__inner\">\n      <a class=\"ds-page-header__back\" href=\"#start\" aria-label=\"Back to start\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><path d=\"M21 12H4 M11 5l-7 7 7 7\"/></svg></a>\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#start\">Start</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#catalogue\">Catalogue</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">This week</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Catalogue</h1>\n        <p class=\"ds-page-header__text\">What arrived this week, what the librarians recommend and where to look next.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#loans\">My loans</a>\n        <a class=\"ds-button\" href=\"#catalogue\">Place a hold</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-band\">\n    <div class=\"ds-wrap ds-hub\">\n      <section class=\"ds-hub__section\">\n        <h2 class=\"ds-hub__title\">New this week</h2>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__thumb\" aria-hidden=\"true\"></span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#loans\">Twelve gardens in winter</a>\n              <p class=\"ds-list__text\">A year of visits to walled gardens, told month by month.</p>\n              <span class=\"ds-list__meta\">Essays · 3 copies at Central · 240 pages</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__thumb ds-list__thumb--2\" aria-hidden=\"true\"></span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#loans\">The ferry timetable</a>\n              <p class=\"ds-list__text\">A short novel set on the last boat of the evening.</p>\n              <span class=\"ds-list__meta\">Fiction · 1 copy at Harbour · 2 holds</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__thumb ds-list__thumb--4\" aria-hidden=\"true\"></span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#loans\">Bread without a clock</a>\n              <p class=\"ds-list__text\">Slow baking for people who are out all day.</p>\n              <span class=\"ds-list__meta\">Cookery · 5 copies · available now</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__thumb ds-list__thumb--3\" aria-hidden=\"true\"></span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#loans\">How bridges stand</a>\n              <p class=\"ds-list__text\">Engineering explained with paper models to fold.</p>\n              <span class=\"ds-list__meta\">Science · 2 copies at Old Mill · for ages 10 and up</span>\n            </div>\n          </li>\n        </ul>\n      </section>\n\n      <section class=\"ds-hub__section\">\n        <h2 class=\"ds-hub__title\">From the librarians</h2>\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Borrowing, the short version</h1>\n          <p class=\"ds-prose__lead\">Everything on the shelves can go home with you for three weeks.</p>\n          <p>A card lets you take <strong>up to twelve titles</strong> at a time from any branch and return them to any other.</p>\n          <h2>Holds and renewals</h2>\n          <ul>\n            <li>Place a hold and collect it where you like</li>\n            <li>Renew twice, unless someone is waiting</li>\n            <li>Late returns cost nothing for children</li>\n          </ul>\n          <h3>Your card number</h3>\n          <p>The number under the barcode looks like <code>CK 4471 0926</code>. Type it without the spaces when you sign in.</p>\n        </article>\n      </section>\n\n      <section class=\"ds-hub__section\">\n        <h2 class=\"ds-hub__title\">Subjects</h2>\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h3 class=\"ds-sidebar__title\">Browse the shelves</h3>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">4,180</span><a class=\"ds-link\" href=\"#catalogue\">Fiction</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">1,260</span><a class=\"ds-link\" href=\"#catalogue\">History</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">940</span><a class=\"ds-link\" href=\"#catalogue\">Science and nature</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">715</span><a class=\"ds-link\" href=\"#catalogue\">Cookery</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">2,030</span><a class=\"ds-link\" href=\"#catalogue\">Children</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">388</span><a class=\"ds-link\" href=\"#catalogue\">Travel</a></li>\n          </ul>\n        </aside>\n        <h2 class=\"ds-hub__title ds-hub__title--next\">Often searched</h2>\n        <p class=\"ds-linkrow\" data-component=\"links\">\n          <a class=\"ds-link\" href=\"#catalogue\">Large print</a>\n          <a class=\"ds-link is-visited\" href=\"#catalogue\">Local history</a>\n          <a class=\"ds-link is-hover\" href=\"#catalogue\">Picture books</a>\n          <a class=\"ds-link is-active\" href=\"#catalogue\">Crime novels</a>\n          <a class=\"ds-link ds-link--quiet\" href=\"#settings\">Search tips</a>\n        </p>\n      </section>\n    </div>\n  </div>\n\n  <div class=\"ds-band ds-band--alt ds-band--last\">\n    <div class=\"ds-wrap ds-cols ds-cols--halves\">\n      <section class=\"ds-hub__section\">\n        <h2 class=\"ds-hub__title\">Asked at the desk</h2>\n        <div class=\"ds-accordion\">\n          <details class=\"ds-accordion__item\" open>\n            <summary class=\"ds-accordion__head\">How long can I keep a title?</summary>\n            <div class=\"ds-accordion__body\"><p>Three weeks. You can renew it twice from the loans page, unless another reader is waiting.</p></div>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__head\">Can I return it to another branch?</summary>\n            <div class=\"ds-accordion__body\"><p>Yes, to any of the six, or to the box at Central, which is open all night.</p></div>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__head\">What does a hold cost?</summary>\n            <div class=\"ds-accordion__body\"><p>Nothing. It waits six days at the desk of the branch you choose.</p></div>\n          </details>\n        </div>\n      </section>\n      <section class=\"ds-hub__section\">\n        <h2 class=\"ds-hub__title\">Picked by the staff</h2>\n        <div class=\"ds-carousel\">\n          <input class=\"ds-carousel__pick\" type=\"radio\" name=\"picks\" id=\"pick-1\" aria-label=\"First pick\" checked>\n          <input class=\"ds-carousel__pick\" type=\"radio\" name=\"picks\" id=\"pick-2\" aria-label=\"Second pick\">\n          <input class=\"ds-carousel__pick\" type=\"radio\" name=\"picks\" id=\"pick-3\" aria-label=\"Third pick\">\n          <div class=\"ds-carousel__slides\">\n            <figure class=\"ds-carousel__slide\">\n              <blockquote class=\"ds-carousel__quote\">Twelve gardens in winter is the book I hand to anyone who says nothing grows in January.</blockquote>\n              <figcaption class=\"ds-byline\">\n                <span class=\"ds-avatar\">CL</span>\n                <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">A librarian at Central</span><span class=\"ds-byline__role\">Essays and nature</span></span>\n              </figcaption>\n            </figure>\n            <figure class=\"ds-carousel__slide\">\n              <blockquote class=\"ds-carousel__quote\">The ferry timetable is ninety pages long and I missed my stop twice reading it.</blockquote>\n              <figcaption class=\"ds-byline\">\n                <span class=\"ds-avatar ds-avatar--2\">HL</span>\n                <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">A librarian at Harbour</span><span class=\"ds-byline__role\">Fiction</span></span>\n              </figcaption>\n            </figure>\n            <figure class=\"ds-carousel__slide\">\n              <blockquote class=\"ds-carousel__quote\">How bridges stand comes back with every paper model folded, which says enough.</blockquote>\n              <figcaption class=\"ds-byline\">\n                <span class=\"ds-avatar ds-avatar--3\">OM</span>\n                <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">A librarian at Old Mill</span><span class=\"ds-byline__role\">Children and science</span></span>\n              </figcaption>\n            </figure>\n          </div>\n          <div class=\"ds-carousel__dots\">\n            <label class=\"ds-carousel__dot\" for=\"pick-1\" title=\"First pick\"></label>\n            <label class=\"ds-carousel__dot\" for=\"pick-2\" title=\"Second pick\"></label>\n            <label class=\"ds-carousel__dot\" for=\"pick-3\" title=\"Third pick\"></label>\n          </div>\n        </div>\n      </section>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"loans\">\n  <header class=\"ds-page-header\">\n    <div class=\"ds-wrap ds-page-header__inner\">\n      <a class=\"ds-page-header__back\" href=\"#start\" aria-label=\"Back to start\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><path d=\"M21 12H4 M11 5l-7 7 7 7\"/></svg></a>\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#start\">Start</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">My loans</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">My loans</h1>\n        <p class=\"ds-page-header__text\">Four titles are out on your card. One is due on Thursday.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#catalogue\">Find something new</a>\n        <a class=\"ds-button\" href=\"#loans\">Renew all</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-band\">\n    <div class=\"ds-wrap ds-cols\">\n      <div class=\"ds-stack ds-stack--tight\">\n        <div>\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#loans\">On loan</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#loans\">Holds</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#loans\">Returned</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#loans\">Fees</a></li>\n          </ul>\n          <div class=\"ds-table__wrap\">\n            <table class=\"ds-table\" data-component=\"table\">\n              <caption class=\"ds-table__caption\">A title can be renewed twice, unless another reader is waiting for it.</caption>\n              <thead>\n                <tr>\n                  <th scope=\"col\">Title</th>\n                  <th scope=\"col\">Branch</th>\n                  <th scope=\"col\">Due back</th>\n                  <th scope=\"col\">Status</th>\n                  <th scope=\"col\" class=\"ds-table__num\">Renewed</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#loans\">The Salt Road Atlas</a></th><td>Central</td><td>Thursday 12 March</td><td><span class=\"ds-badge ds-badge--warning\">Due soon</span></td><td class=\"ds-table__num\">2</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#loans\">A field guide to stone walls</a></th><td>Old Mill</td><td>Tuesday 17 March</td><td><span class=\"ds-badge ds-badge--quiet\">On loan</span></td><td class=\"ds-table__num\">0</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#loans\">Letters from the lighthouse</a></th><td>Harbour</td><td>Monday 9 March</td><td><span class=\"ds-badge ds-badge--danger\">Overdue</span></td><td class=\"ds-table__num\">1</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#loans\">Bread without a clock</a></th><td>Central</td><td>Friday 20 March</td><td><span class=\"ds-badge ds-badge--quiet\">On loan</span></td><td class=\"ds-table__num\">0</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#loans\">The quiet orchard</a></th><td>Riverside</td><td>Saturday 7 March</td><td><span class=\"ds-badge ds-badge--success\">Returned</span></td><td class=\"ds-table__num\">1</td></tr>\n              </tbody>\n            </table>\n          </div>\n          <div class=\"ds-table__foot\">\n            <ul class=\"ds-pagination\" data-component=\"pagination\">\n              <li><a class=\"ds-pagination__link is-disabled\" href=\"#loans\">Previous</a></li>\n              <li><a class=\"ds-pagination__link is-current\" href=\"#loans\">1</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#loans\">2</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#loans\">3</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#loans\">Next</a></li>\n            </ul>\n            <div class=\"ds-badgerow\" data-component=\"badge\">\n              <span class=\"ds-badge\">New</span>\n              <span class=\"ds-badge ds-badge--alt\">Reserved</span>\n              <span class=\"ds-badge ds-badge--quiet\">On loan</span>\n              <span class=\"ds-badge ds-badge--success\">Returned</span>\n              <span class=\"ds-badge ds-badge--warning\">Due soon</span>\n              <span class=\"ds-badge ds-badge--danger\">Overdue</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-stack ds-stack--tight\">\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Your card</h2>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">4 of 12</span>\n            <p>titles on loan. The card is valid until 30 June 2016.</p>\n            <div class=\"ds-progress\">\n              <progress class=\"ds-progress__bar\" value=\"4\" max=\"12\">4 of 12</progress>\n            </div>\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span>Home branch</span><span>Central</span></li>\n              <li class=\"ds-panel__row\"><span><span class=\"ds-tooltip\" tabindex=\"0\">Fees owed<span class=\"ds-tooltip__tip\" role=\"tooltip\">Lost or damaged titles only. Late returns cost nothing.</span></span></span><span>0.60</span></li>\n            </ul>\n            <a class=\"ds-link ds-link--more\" href=\"#settings\">Card settings</a>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Next return</h2>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">3 days</span>\n            <p>Any branch takes returns, and the box at Central is open all night.</p>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-band ds-band--alt ds-band--last\">\n    <div class=\"ds-wrap ds-cols ds-cols--halves\">\n      <div class=\"ds-dialog\" data-component=\"dialog\">\n        <div class=\"ds-dialog__box\" role=\"dialog\" aria-labelledby=\"dialog-title\">\n          <div class=\"ds-dialog__head\">\n            <h2 class=\"ds-dialog__title\" id=\"dialog-title\">Renew all four titles?</h2>\n            <a class=\"ds-dialog__close\" href=\"#loans\" aria-label=\"Close\"></a>\n          </div>\n          <div class=\"ds-dialog__body\">\n            <p>Three titles move to 7 April. Letters from the lighthouse has a reader waiting and cannot be renewed.</p>\n          </div>\n          <div class=\"ds-dialog__actions\">\n            <a class=\"ds-button\" href=\"#loans\">Renew three</a>\n            <a class=\"ds-button ds-button--secondary\" href=\"#loans\">Cancel</a>\n          </div>\n        </div>\n      </div>\n      <div class=\"ds-empty\" data-component=\"empty\">\n        <svg class=\"ds-empty__icon\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M8 8h14v32H8z M22 8h10v32H22z M33 12l8 2-6 26-8-2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg>\n        <div class=\"ds-empty__copy\">\n          <h2 class=\"ds-empty__title\">Nothing is on hold</h2>\n          <p class=\"ds-empty__text\">Titles you reserve wait here until a branch has them ready for you.</p>\n          <a class=\"ds-button\" href=\"#catalogue\">Browse the catalogue</a>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"settings\">\n  <header class=\"ds-page-header\">\n    <div class=\"ds-wrap ds-page-header__inner\">\n      <a class=\"ds-page-header__back\" href=\"#start\" aria-label=\"Back to start\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><path d=\"M21 12H4 M11 5l-7 7 7 7\"/></svg></a>\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#start\">Start</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#settings\">Settings</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Card and notices</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Settings</h1>\n        <p class=\"ds-page-header__text\">Who the card belongs to and how the library reaches you.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#start\">Back to start</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-band ds-band--last\">\n    <div class=\"ds-wrap ds-cols ds-cols--side-first\">\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Settings</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\">Card and notices</li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Home branch</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Reading history</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Family cards</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#start\">Start page tiles</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Your card</h2>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">CK 4471 0926</span>\n            <p>Valid until 30 June 2016. A new card is posted to you a month before.</p>\n            <div class=\"ds-progress\">\n              <div class=\"ds-progress__head\"><span>On loan</span><span class=\"ds-progress__value\">4 of 12</span></div>\n              <progress class=\"ds-progress__bar\" value=\"4\" max=\"12\">4 of 12</progress>\n            </div>\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span>Home branch</span><span>Central</span></li>\n              <li class=\"ds-panel__row\"><span>Notices by</span><span>Email</span></li>\n            </ul>\n            <a class=\"ds-link ds-link--more\" href=\"#loans\">See what is on loan</a>\n          </div>\n        </section>\n      </div>\n\n      <div class=\"ds-stack ds-stack--tight\">\n        <div class=\"ds-noticerow\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">Notices go out at 8 am.</span> A change made today applies from tomorrow morning.</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">The settings were not saved.</span> Check the highlighted field and try again.</p>\n        </div>\n        <form class=\"ds-form\" data-component=\"form\" action=\"#settings\">\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">First name</span><input class=\"ds-form__input\" type=\"text\" value=\"Ines\"></label>\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Last name</span><input class=\"ds-form__input is-focus\" type=\"text\" placeholder=\"Last name\"></label>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Email for notices</span><input class=\"ds-form__input is-error\" type=\"text\" value=\"ines@varga\"><span class=\"ds-form__error\">Enter a complete email address.</span></label>\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Collect holds at</span>\n              <select class=\"ds-form__select\"><option>Central</option><option>Riverside</option><option>Old Mill</option><option>Harbour</option></select>\n              <span class=\"ds-form__hint\">Holds wait six days at the desk.</span>\n            </label>\n          </div>\n          <label class=\"ds-form__field\"><span class=\"ds-form__label\">Note for the desk</span><textarea class=\"ds-form__textarea\" rows=\"3\" placeholder=\"For example: a neighbour collects for me\"></textarea><span class=\"ds-form__hint\">Optional. Shown to staff when a hold is handed over.</span></label>\n          <div class=\"ds-switchlist\">\n            <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Tell me when a hold is ready</span></label>\n            <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Tell me about events at my home branch</span></label>\n            <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Keep my reading history</span></label>\n          </div>\n          <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>Remind me three days before a title is due. <a class=\"ds-link\" href=\"#loans\">See my loans</a></span></label>\n          <div class=\"ds-buttonrow\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"submit\">Save settings</button>\n            <a class=\"ds-button is-hover\" href=\"#settings\">Send a test notice</a>\n            <a class=\"ds-button ds-button--secondary\" href=\"#start\">Cancel</a>\n            <button class=\"ds-button\" type=\"button\" disabled>Order a new card</button>\n            <a class=\"ds-button ds-button--danger\" href=\"#start\">Close this card</a>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</section>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-wrap ds-footer__inner\">\n    <span class=\"ds-footer__name\">chronoskin</span>\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-footer__link\" href=\"#start\">Start</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#catalogue\">Catalogue</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#loans\">My loans</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#settings\">Settings</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#catalogue\">Branches and hours</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#settings\">Privacy</a></li>\n    </ul>\n    <span>© 2015 chronoskin city libraries</span>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.flat-design.portal.s05.p04.t05.u03\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"flat-design\",\n    \"years\": [\n      2013,\n      2016\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1280,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-fl-5453\",\n  \"short\": \"v1-fl-5453\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f8f0;\n  --color-surface-strong: #eeece4;\n  --color-bar: #ffffff;\n  --color-bar-text: #555459;\n  --color-bar-alt: #3d4b5b;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #303038;\n  --color-inverse-text: #ffffff;\n  --color-text: #555459;\n  --color-text-muted: #9e9ea6;\n  --color-heading: #3d4b5b;\n  --color-heading-alt: #0f7965;\n  --color-link: #0f7965;\n  --color-link-quiet: #9e9ea6;\n  --color-link-visited: #0f7965;\n  --color-link-hover: #3aa497;\n  --color-link-active: #194ba3;\n  --color-border: #dddddd;\n  --color-border-strong: #bbaa99;\n  --color-border-muted: #eeece4;\n  --color-accent: #eb4d5c;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #f8c433;\n  --color-fill-1: #3aa497;\n  --color-fill-2: #eb4d5c;\n  --color-fill-3: #f8c433;\n  --color-fill-4: #439fe0;\n  --color-button: #439fe0;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #3d4b5b;\n  --color-input: #ffffff;\n  --color-input-text: #3d4b5b;\n  --color-input-border: #dddddd;\n  --color-disabled: #eeece4;\n  --color-disabled-text: #9e9ea6;\n  --color-danger: #eb4d5c;\n  --color-danger-surface: #fff8f8;\n  --color-success: #3aa497;\n  --color-warning: #e8a723;\n  --color-notice: #e4f0f6;\n  --color-notice-text: #3d4b5b;\n  --color-focus: #439fe0;\n  --color-shadow: rgb(0 0 0 / 0.15);\n  --color-overlay: rgb(0 0 0 / 0.3);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: Cambria, \"PT Serif\", Georgia, \"Times New Roman\", serif;\n  --font-ui: \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: \"Courier New\", Courier, monospace;\n  --text-base: 15px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 20px;\n  --text-display: 46px;\n  --text-h1: 34px;\n  --text-h2: 28px;\n  --text-h3: 20px;\n  --line-body: 1.4;\n  --line-heading: 1.15;\n  --line-display: 1.08;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: -0.5px;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 4px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 0 0 0 1px var(--color-border-strong);\n  --shadow-control-pressed: none;\n  --shadow-dialog: none;\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface-alt);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 85%, black);\n  --fill-button-secondary: color-mix(in srgb, var(--color-button-secondary) 88%, black);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
