{
  "id": "v1-bs-3333",
  "long_id": "v1.bootstrap-era.app.s03.p03.t03.u03",
  "name": "Framework default admin dashboard",
  "era": {
    "slug": "bootstrap-era",
    "code": "bs",
    "name": "Framework default",
    "years": [
      2011,
      2014
    ],
    "description": "The framework look of 2011 to 2014: a dark or white bar across the top, a big grey hero block, rows of three columns, wells and bordered panels, blue primary and coloured status buttons, Helvetica at 14px."
  },
  "archetype": "app",
  "mode": "pure",
  "viewport": {
    "width": 1280,
    "fluid": false
  },
  "summary": "The framework look of 2011 to 2014: pages assembled from one widely used front-end toolkit, with a bar fixed across the top, a grey hero block, wells, bordered panels with tinted heading strips and coloured status buttons and labels. This pack is the dark theme of the time, as an admin dashboard: charcoal surfaces, a bar in the brand colour, square corners, slab-serif headings over a plain sans-serif. Free and paid themes like it sat behind most small back offices built in those years.",
  "url": "https://chrono.skin/s/v1-bs-3333",
  "preview_url": "https://chrono.skin/s/v1-bs-3333/specimen.html",
  "files": {
    "STYLE.md": "# Framework default admin dashboard\n\n## Summary\n\nThe framework look of 2011 to 2014: pages assembled from one widely used front-end toolkit, with a bar fixed across the top, a grey hero block, wells, bordered panels with tinted heading strips and coloured status buttons and labels. This pack is the dark theme of the time, as an admin dashboard: charcoal surfaces, a bar in the brand colour, square corners, slab-serif headings over a plain sans-serif. Free and paid themes like it sat behind most small back offices built in those years.\n\n## Layout\n\n- The application fills the window: the top bar, then `.ds-app`, a grey rail of `--size-rail` (220px) at the left with the list groups and the work in `.ds-app__main` at the right, then the footer strip. There is no centred container; at the 1280px design width the working column is about 1000px (`--size-page`).\n- The top bar is `--size-nav` (50px) tall and fixed (`position: sticky`); its inner row is `--size-bar` (the full width): brand, links, then the signed-in name and a small button at the right.\n- Dashboard (home): a compact grey hero block with a greeting and the main action, a row of four stat panels with tinted heading strips, then a wide panel holding a toolbar and a striped table with action buttons beside a `--size-sidebar` (280px) column with an alert and an activity panel, then four thumbnails. Blocks are `--space-4` apart.\n- Inner pages have no hero. They start with the `.ds-breadcrumb` strip, then `.ds-page-header` (title, one grey line, actions at the right, a rule under it). A list page continues with `.ds-tabs`, a boxed `.ds-toolbar` and the table with its pagination. A detail or settings page uses a `.ds-row`: the work (action row, text, form) in the main column and stacked panels in the 280px side column. The rail and the bar stay as they are on every page.\n- Views. The specimen is the back office of a bike hire shop in five views. `home` is the dashboard described above. `bookings` is the list page: tabs with counts, a search toolbar, the table with a button group in every row, pagination and the status legend. `booking` is one booking: the action row, the hire agreement in a well, the open cancel modal, and payment, customer and history panels at the side. `customers` is a list of people in a panel with a row of links, beside an empty waiting list. `settings` is the shop form in a panel under two alerts, with hours, last changes and a well at the side.\n- Responsive: this was the first responsive generation. Below 1000px the stat panels and thumbnails fold to two columns. Below 760px the rail is hidden and the bar, wrapped into a row of links under the brand, stands in for it; every row of columns stacks, and a wide table scrolls sideways inside `.ds-table__wrap` while the page itself never does.\n- Spacing scale: `--space-1` 5px (inside labels, between a label and its field), `--space-2` 10px (between adjacent controls, cell padding, alert padding), `--space-3` 15px (the column gutter half, panel padding, paragraph gap), `--space-4` 20px (between stacked blocks, well padding), `--space-5` 30px (the gutter between columns, between sections), `--space-6` 40px (around featurettes and above the footer), `--space-7` 60px (hero padding). Controls are padded by `--space-control-y` (5px) and `--space-control-x` (12px).\n- Other sizes: `--size-tile` 72px (thumbnail colour block), `--size-icon` 36px, `--size-mark` 26px, `--size-dialog` 520px, `--size-search` 220px.\n\n## Typography and colour roles\n\n- Two families: a slab serif for headings, the brand name and figures (`--font-heading`: Roboto Slab, then Rockwell, then Georgia) and a plain sans-serif for everything else (`--font-body` and `--font-ui`: Open Sans, then Helvetica Neue). The references used a commercial slab and a commercial sans; these are the nearest open and system faces. `--font-mono` (Consolas, Menlo) is for code.\n- Body is `--text-base` 14px at `--line-body` 1.5 in light grey `--color-text` #cccccc. Headings are regular weight (`--weight-heading` 400) in white: `--text-h1` 32px, `--text-h2` 26px, `--text-h3` 20px; `--text-display` is 48px. `--text-large` 18px is the hero line and large buttons; `--text-ui` 13px bold (`--weight-ui` 700) is buttons and navigation; `--text-small` 12px is meta and labels.\n- Surfaces are charcoal, darkest outside: `--color-page` #111111, `--color-surface` #1b1b1b for panels and rows, `--color-surface-alt` #222222 for stripes, wells and the rail, `--color-surface-strong` #333333 for the hero block and panel heading strips. Borders are 1px `--color-border` #333333.\n- Teal green is the brand colour: the bar (`--color-bar` #1fa67a with pale `--color-bar-text` #d2ebe3), the primary button, links (`--color-link` #21b384), the current list item (`--color-accent` #1b926c). Small titles are mint `--color-heading-alt` #a5d8c7. The inverted block is light (`--color-inverse` #eeeeee with dark text): the footer strip.\n- Square and flat: every radius is 0, every `--fill-*` token is a single colour, there are no drop shadows and no text shadows; the modal has only a 1px dark outline. `--border-width-strong` is 3px, under a table head.\n\n- Text on fills, the convention every layout and token set of this era keeps:\n  - on `--color-page`, `--color-canvas`, `--color-surface`, `--color-surface-alt` and `--color-surface-strong`: body text `--color-text`, headings `--color-heading`, small titles (panel strip, sidebar heading, h3) `--color-heading-alt`, meta `--color-text-muted`, links `--color-link`. A token set keeps these five fills on one side, all light or all dark, so that the same text reads on each;\n  - on the top bar (`--fill-bar`): `--color-bar-text` only, for the name, the links and plain text. Hover and current items get a plate of `--color-bar-text` mixed into transparent at 9% and 18%, never a second colour;\n  - on the secondary bar (`--fill-bar-alt`): `--color-bar-alt-text`; a link there is `.ds-link` or inherits and is underlined;\n  - on `--fill-inverse`: `--color-inverse-text`, with `opacity` for the quieter line;\n  - on `--color-fill-1` to `--color-fill-4`, `--fill-accent`, `--color-accent-alt`, `--color-success`, `--color-warning` and `--color-danger` used as a fill (buttons, labels, tiles, the masthead, the current list item): `--color-accent-text`. A token set keeps all of these dark or saturated enough for it;\n  - on `--fill-button`: `--color-button-text`; on `--fill-button-secondary`: `--color-button-secondary-text`;\n  - on `--color-notice`: `--color-notice-text`; on `--color-danger-surface`: `--color-danger`;\n  - the grey count label is `--color-text-muted` with `--color-canvas` text.\n- Status colours: `--color-success` (green), `--color-warning` (amber), `--color-danger` (red) and `--color-accent-alt` (the light blue \"info\") fill buttons and labels; mixed at 20% into `--color-surface` they tint the heading strip of a contextual panel, whose text stays `--color-heading`.\n- `--fill-button` is either the flat `--color-button` or a translucent gloss laid over it. The status buttons reuse it with `background-color` set to their own colour, so a token set must not bake an opaque gradient into `--fill-button` or `--fill-button-hover`.\n- Inputs, wells and the current bar item take `--shadow-control-pressed` (the inset shadow); buttons and the brand tile take `--shadow-control`. Button and brand tile borders are `--color-shadow`, a translucent dark edge on any fill.\n- Links are never underlined at rest (`--link-decoration: none`) and underline on hover. `--color-link-visited` equals the link colour.\n- One-off shades made with `color-mix()` because the vocabulary has no token: the bar's bottom edge (`--color-bar-text` at 22% over `--color-bar`), bar hover and current plates (9% and 18%), the hovered secondary button (its text colour at 12% into its fill), contextual panel strips (20%) and their borders (45% into `--color-border`), notice borders (the text colour at 25% into the notice fill).\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, the text colour and `--fill-page`.\n- `.ds-container`: the centred column, `--size-page` wide plus a `--space-3` gutter each side. `.ds-row` lays `.ds-col` columns side by side with a `--space-5` gutter: three plain columns are the era's standard row; `.ds-col--wide` takes two shares, `.ds-col--side` is `--size-sidebar` wide, `.ds-col--stack` stacks blocks `--space-4` apart and `.ds-grow` on its last block makes both columns end on one line (with `.ds-row--level`). `.ds-row--flush` drops the bottom margin. `.ds-col__title`, `.ds-col__text` and `.ds-col__icon` (a round grey plate) dress a column of a three-column row, which ends in a `.ds-button--secondary` reading \"View details\". `.ds-rule` is the faint horizontal rule between sections. `.ds-title` is a section heading (`--small` for h3 size) with a muted `.ds-title__small` after it; `.ds-lead` is a paragraph at `--text-large`; `.ds-muted` greys a phrase; `.ds-spaced` puts `--space-4` under a block.\n- `.ds-well`: the inset grey box (`--color-surface-alt`, faint border, inset shadow) for an aside or a call to action. `.ds-code` is a block of code in the same grey with a border; `.ds-code--inverse` sets it on `--fill-inverse` for a terminal line; `.ds-code__comment` and `.ds-code__key` colour parts of it. `.ds-figure` is a placeholder picture, a grey bordered block with its size written on it (`--tall` doubles the height); replace it with a real picture.\n- `.ds-brand`: the site's mark and name, first in the top bar. `.ds-brand__mark` is a `--size-mark` tile dressed like the primary button (`--fill-button`, `--color-button-text`, a `--color-shadow` border, `--radius-control`, `--shadow-control`) holding the mark as inline SVG; `.ds-brand__name` is the name in the heading font at `--text-large` in `--color-bar-text`. The name and the mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the bar fixed across the top (`position: sticky`), on `--fill-bar` with a 1px bottom edge. `.ds-nav__inner` is `--size-bar` wide and `--size-nav` tall; it holds the `.ds-brand`, `.ds-nav__links` with full-height `.ds-nav__link` items (current: `is-current`, a darker plate with the inset shadow) and `.ds-nav__aside` on the right for `.ds-nav__text`, a small button or a `.ds-nav__search` field. In the specimen the current item is marked by the view that is showing, with one `:has()` rule per view; a project sets `is-current` itself. Below 760px the bar stops being fixed and wraps: brand and aside on the first row, the links in a wrapped row under them.\n- `.ds-hero`: a compact grey block (`--color-surface-strong`, `--radius-page`) that opens the dashboard: `.ds-hero__copy` with `.ds-hero__title` (h1 size) and one `.ds-hero__lead` line, and `.ds-hero__actions` at the right with one large primary button. `.ds-app` is the frame under the bar: `.ds-app__side` is the grey rail, `.ds-app__main` the padded working area that holds the views.\n- `.ds-page-header`: head of an inner page, used instead of `.ds-hero`: `.ds-page-header__copy` with `.ds-page-header__title` (a status label may follow the text) and one grey `.ds-page-header__text` line, `.ds-page-header__actions` at the right on the baseline with at most one primary button, and a faint rule under it all. Place it directly after the breadcrumb.\n- `.ds-prose`: running text: h1, h2, h3 (in `--color-heading-alt`), p, lists, `strong`, and inline `code` in `--color-danger` on a faint grey chip. `.ds-prose__lead` for the first paragraph.\n- `.ds-link`: text link. States `is-visited`, `is-hover` (darker and underlined), `is-active`, `is-focus`. `--quiet` is grey for meta. `.ds-linkrow` lays links in a row.\n- `.ds-button`: the primary button on `--fill-button` with a translucent dark border and `--radius-control`. Variants: `--secondary` (the pale default button, `--fill-button-secondary` with a `--color-border-strong` border; the usual choice), `--danger` (red, for destructive actions), `--success` (green), `--warning` (amber), `--info` (light blue), `--large` (hero actions), `--small` (table rows, the bar), `--block` (full width). States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow` spaces buttons `--space-2` apart; `.ds-buttongroup` joins small buttons into one strip for the actions of a table row.\n- `.ds-form`: vertical form. `.ds-form__row` puts fields side by side; `.ds-form__field` wraps a bold `.ds-form__label` and one of `.ds-form__input`, `.ds-form__select`, `.ds-form__textarea` (`.ds-form__input--small` in bars). Error: `is-error` on the field and the input plus `.ds-form__error`. `.ds-form__hint`, `.ds-form__check` with `.ds-form__checkbox`. `.ds-form__actions` is the grey strip that closes a form inside a panel; `--inline` sets a form in one row; `--flush` removes the gap when the form wraps a panel body and its action strip.\n- `.ds-table`: striped data table: a rule above every row, odd rows on `--color-surface-alt`, a `--border-width-strong` rule under the bold head, no fill on the head. `--bordered` adds the outer box and vertical rules. `.ds-table__num` right-aligns numbers; `.ds-table__actions` is the right-aligned cell for a `.ds-buttongroup`; `.ds-table__caption` is a small note below. Wrap it in `.ds-table__wrap` so that it scrolls on its own in a narrow window; `.ds-table__foot` is the row under it with the pagination at the left and a legend at the right.\n- `.ds-list`: rows divided by faint rules. `.ds-list__item` holds a bold link `.ds-list__title`, `.ds-list__text` and small grey `.ds-list__meta`.\n- `.ds-panel`: bordered box with `--radius-panel` and `--shadow-panel`: a tinted `.ds-panel__title` strip (`--color-surface-strong`, `--color-heading-alt`, a label may float right in it), `.ds-panel__body`, optional grey `.ds-panel__foot`. `.ds-panel__figure` is a large figure (a price, a total). Contextual variants colour the strip and the border: `--primary` (the button fill), `--success`, `--warning`, `--danger`, `--info` (20% tints). `.ds-panels` sets three panels side by side.\n- `.ds-stat`: the row of four stat panels. `.ds-stat` is the row; each `.ds-stat__item` is also a contextual `.ds-panel` (`--primary`, `--success`, `--warning`, `--danger`) whose `.ds-panel__title` strip names the figure and whose body holds a `.ds-stat__figure` (h1 size, heading font) over a small grey `.ds-stat__label`. `.ds-toolbar` is the grey secondary bar (`--fill-bar-alt`) above a table: a `.ds-toolbar__field` search input, a small button and a right-aligned `.ds-toolbar__text` count; inside a panel it sits between the heading strip and `.ds-panel__table` (the wrapper that aligns the table with the panel padding), on its own it is `--boxed`. `.ds-facts` is a list of label and value rows (`.ds-facts__row`, `.ds-facts__label`, `.ds-facts__value`) for a detail panel.\n- `.ds-grid`: four bordered thumbnails in a row. Each `.ds-grid__cell` is a white box with `--space-1` padding holding a `.ds-grid__tile` (`--color-fill-1`; `--2`, `--3`, `--4` for the other fills) with a `.ds-grid__icon` in `--color-accent-text`, then a `.ds-grid__caption` with `.ds-grid__title`, `.ds-grid__text` and a link.\n- `.ds-tabs`: boxed tabs standing on a rule. `.ds-tabs__tab` is a link; `is-current` has a border on three sides, `--color-canvas` behind it and body-coloured text. A count label may follow the text.\n- `.ds-badge`: the small bold label on `--fill-accent` with `--radius-pill`. Variants: `--info` (light blue), `--success` (green), `--warning` (amber), `--danger` (red), all with `--color-accent-text`; `--quiet` is the grey count. `.ds-badgerow` for several.\n- `.ds-sidebar`: the list groups in the left rail, written once outside the views. A small `.ds-sidebar__title`, then a `.ds-sidebar__list` of joined bordered `.ds-sidebar__link` rows on `--color-surface`, each with an optional count label at the right; the current row is filled with `--fill-accent` (`is-current`, or in the specimen the row of `.ds-sidebar__list--main` that matches the view). `.ds-sidebar__note` is a small grey line under the lists. The rail is hidden below 760px.\n- `.ds-notice`: the alert: a tinted box (`--color-notice`, `--color-notice-text`) with a 1px border of the same hue; `--error` uses `--color-danger-surface` and `--color-danger`; `--callout` adds a `--space-1` left edge for a note inside documentation. `.ds-notice__title` for the bold lead-in. `.ds-noticerow` stacks notices.\n- `.ds-pagination`: joined bordered boxes of `.ds-pagination__link`; `is-current` is filled with `--fill-accent`, `is-disabled` is grey. The first and last box carry the `--radius-control` corners.\n- `.ds-breadcrumb`: a grey rounded strip (`--color-surface-alt`) of `.ds-breadcrumb__item` separated by slashes; the last item is `.ds-breadcrumb__current`, plain grey text.\n- `.ds-dialog`: the modal, shown open: a `--color-overlay` backdrop block centring `.ds-dialog__box` (bordered, `--radius-page`, `--shadow-dialog`) with `.ds-dialog__head` (`.ds-dialog__title`, `.ds-dialog__close`) over a rule, `.ds-dialog__body`, and a grey `.ds-dialog__actions` strip with the buttons at the right, the confirming one last.\n- `.ds-empty`: a centred message in a well: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one `.ds-button--secondary`. It stands where a list would be.\n- `.ds-footer`: a full-width strip on `--fill-inverse` at the foot of the window, small text: `.ds-footer__text` at the left and `.ds-footer__links` of underlined `.ds-footer__link` at the right.\n\n## Never\n\n- `font-families <= 3`: a slab serif for headings, a sans-serif for text, monospace for code.\n- `font-size >= 12px`: meta text and labels are the smallest.\n- `font-size <= 32px`: page titles and stat figures are the largest text; a dashboard has no display type.\n- `letter-spacing = 0`: text is not tracked.\n- `uppercase-text = 0%`: navigation, buttons and headings are in sentence case.\n- `underlined-links <= 20%`: links are underlined only on hover and in the footer.\n- `border-radius <= 0px`: every corner is square.\n- `border-width <= 3px`: borders are 1px; 3px only under a table head.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills = 0%`: every background is one solid colour.\n- `box-shadow-blur <= 0px`: nothing casts a soft shadow.\n- `transition = none`: nothing animates.\n- `animation = none`: nothing moves on its own.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new box is a `.ds-panel` (border, heading strip, body) or a `.ds-well`; a new action is a `.ds-button`, pale `--secondary` unless it is the one main action of the view; a new status is one of the four status colours with `--color-accent-text` on it. Lay new content out in a `.ds-row` of `.ds-col` columns. Controls take `--radius-control`, boxes `--radius-panel`, labels `--radius-pill`, the hero and the dialog `--radius-page`. Spacing comes from the `--space-*` scale; any one-off shade is a `color-mix()` of tokens, noted next to the rule. Keep to the text-on-fill convention above, so that the component still reads with another palette of the era.\n",
    "components.css": ":root {\n  --size-page: 1000px;\n  --size-bar: 100%;\n  --size-nav: 50px;\n  --size-mark: 26px;\n  --size-search: 220px;\n  --size-sidebar: 280px;\n  --size-rail: 220px;\n  --size-tile: 72px;\n  --size-icon: 36px;\n  --size-dialog: 520px;\n  --space-control-y: 5px;\n  --space-control-x: 12px;\n  --space-1: 5px;\n  --space-2: 10px;\n  --space-3: 15px;\n  --space-4: 20px;\n  --space-5: 30px;\n  --space-6: 40px;\n  --space-7: 60px;\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/* container, rows and columns: the fixed centred column and its equal columns */\n.ds-container {\n  max-width: calc(var(--size-page) + var(--space-3) * 2);\n  margin: 0 auto;\n  padding: 0 var(--space-3);\n}\n.ds-row {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-5);\n  margin-bottom: var(--space-5);\n}\n.ds-row--level {\n  align-items: stretch;\n}\n.ds-row--middle {\n  align-items: center;\n}\n.ds-row--flush {\n  margin-bottom: 0;\n}\n.ds-col {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-col--wide {\n  flex: 2 1 0;\n}\n.ds-col--side {\n  flex: 0 0 var(--size-sidebar);\n}\n.ds-col--stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n}\n.ds-col--stack > .ds-grow {\n  flex: 1 0 auto;\n}\n.ds-col__title {\n  margin: 0 0 var(--space-2);\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  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-col__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-col__icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-bottom: var(--space-3);\n  padding: var(--space-2);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n}\n.ds-col__icon svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-rule {\n  height: 0;\n  margin: var(--space-5) 0;\n  border: 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-title {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-title--small {\n  font-size: var(--text-h3);\n}\n.ds-title__small {\n  color: var(--color-text-muted);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n}\n.ds-lead {\n  margin: 0 0 var(--space-4);\n  font-size: var(--text-large);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-muted {\n  color: var(--color-text-muted);\n}\n\n/* well: an inset grey box */\n.ds-well {\n  padding: var(--space-4);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-well > :last-child {\n  margin-bottom: 0;\n}\n\n/* code block */\n.ds-code {\n  display: block;\n  margin: 0 0 var(--space-3);\n  padding: var(--space-2) var(--space-3);\n  overflow-x: auto;\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n  white-space: pre;\n}\n.ds-code__comment {\n  color: var(--color-text-muted);\n}\n.ds-code__key {\n  color: var(--color-link);\n}\n.ds-code--inverse {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-color: transparent;\n}\n\n/* placeholder picture: a grey block with its size written on it */\n.ds-figure {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: var(--size-tile);\n  padding: var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-align: center;\n}\n.ds-figure--tall {\n  min-height: calc(var(--size-tile) * 2);\n}\n\n/* nav: the bar fixed across the top */\n.ds-nav {\n  position: sticky;\n  top: 0;\n  z-index: 10;\n  background-color: var(--color-bar);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar-text) 22%, var(--color-bar));\n  box-shadow: var(--shadow-panel);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__inner {\n  max-width: var(--size-bar);\n  min-height: var(--size-nav);\n  margin: 0 auto;\n  padding: 0 var(--space-3);\n  display: flex;\n  align-items: stretch;\n  gap: var(--space-3);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-right: var(--space-2);\n  color: var(--color-bar-text);\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: var(--size-mark);\n  height: var(--size-mark);\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) var(--color-shadow);\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-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__links {\n  display: flex;\n  align-items: stretch;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__links > li {\n  display: flex;\n}\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  padding: 0 var(--space-3);\n  color: var(--color-bar-text);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  background: color-mix(in srgb, var(--color-bar-text) 9%, transparent);\n}\n.ds-nav__link.is-current {\n  background: color-mix(in srgb, var(--color-bar-text) 18%, transparent);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-nav__aside {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-left: auto;\n}\n.ds-nav__text {\n  color: var(--color-bar-text);\n}\n.ds-nav__search {\n  width: var(--size-search);\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  font-size: var(--text-h2);\n  margin-top: var(--space-4);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n  margin-top: var(--space-4);\n  color: var(--color-heading-alt);\n}\n.ds-prose > :first-child {\n  margin-top: 0;\n}\n.ds-prose p {\n  margin: 0 0 var(--space-2);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-2);\n  padding-left: var(--space-4);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-alt);\n  color: var(--color-danger);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\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-hover);\n}\n.ds-linkrow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-1) var(--space-4);\n  margin: 0;\n}\n\n/* buttons: the primary fill, a pale default, and four status colours */\n.ds-button {\n  display: inline-block;\n  margin: 0;\n  padding: var(--space-control-y) var(--space-control-x);\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) var(--color-shadow);\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  vertical-align: middle;\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  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-button--secondary {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: var(--color-border-strong);\n  text-shadow: none;\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover,\n.ds-button--secondary:active,\n.ds-button--secondary.is-active {\n  background: color-mix(in srgb, var(--color-button-secondary) 88%, var(--color-button-secondary-text));\n  color: var(--color-button-secondary-text);\n}\n.ds-button--danger {\n  background: var(--fill-button);\n  background-color: var(--color-danger);\n  color: var(--color-accent-text);\n}\n.ds-button--success {\n  background: var(--fill-button);\n  background-color: var(--color-success);\n  color: var(--color-accent-text);\n}\n.ds-button--warning {\n  background: var(--fill-button);\n  background-color: var(--color-warning);\n  color: var(--color-accent-text);\n}\n.ds-button--info {\n  background: var(--fill-button);\n  background-color: var(--color-accent-alt);\n  color: var(--color-accent-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover,\n.ds-button--danger:active,\n.ds-button--danger.is-active {\n  background: var(--fill-button-hover);\n  background-color: var(--color-danger);\n  color: var(--color-accent-text);\n}\n.ds-button--success:hover,\n.ds-button--success.is-hover,\n.ds-button--success:active,\n.ds-button--success.is-active {\n  background: var(--fill-button-hover);\n  background-color: var(--color-success);\n  color: var(--color-accent-text);\n}\n.ds-button--warning:hover,\n.ds-button--warning.is-hover,\n.ds-button--warning:active,\n.ds-button--warning.is-active {\n  background: var(--fill-button-hover);\n  background-color: var(--color-warning);\n  color: var(--color-accent-text);\n}\n.ds-button--info:hover,\n.ds-button--info.is-hover,\n.ds-button--info:active,\n.ds-button--info.is-active {\n  background: var(--fill-button-hover);\n  background-color: var(--color-accent-alt);\n  color: var(--color-accent-text);\n}\n.ds-button--large {\n  padding: var(--space-2) var(--space-4);\n  border-radius: var(--radius-page);\n  font-size: var(--text-large);\n}\n.ds-button--small {\n  padding: calc(var(--space-control-y) / 3) var(--space-2);\n  font-size: var(--text-small);\n}\n.ds-button--block {\n  display: block;\n  width: 100%;\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  border-color: var(--color-border);\n  box-shadow: none;\n  text-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.ds-buttongroup {\n  display: inline-flex;\n  vertical-align: middle;\n}\n.ds-buttongroup > .ds-button {\n  border-radius: 0;\n}\n.ds-buttongroup > .ds-button + .ds-button {\n  margin-left: calc(var(--border-width) * -1);\n}\n.ds-buttongroup > .ds-button:first-child {\n  border-top-left-radius: var(--radius-control);\n  border-bottom-left-radius: var(--radius-control);\n}\n.ds-buttongroup > .ds-button:last-child {\n  border-top-right-radius: var(--radius-control);\n  border-bottom-right-radius: var(--radius-control);\n}\n\n/* form */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n  margin: 0;\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form--inline {\n  flex-direction: row;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-form--flush {\n  gap: 0;\n}\n.ds-form__row {\n  display: flex;\n  gap: var(--space-3);\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-text);\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-control-y) var(--space-control-x);\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-pressed);\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__input--small {\n  padding: calc(var(--space-control-y) / 2) var(--space-2);\n}\n.ds-form__textarea {\n  min-height: var(--space-7);\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__field.is-error .ds-form__label {\n  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: baseline;\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  margin-top: var(--space-1);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: 0 0 var(--radius-panel) var(--radius-panel);\n}\n\n/* table: striped rows, a rule above every row, a strong rule under the head */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  background: var(--color-surface);\n  color: var(--color-text);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2);\n  text-align: left;\n  vertical-align: middle;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table thead th {\n  color: var(--color-heading);\n  border-top: 0;\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border);\n  font-weight: var(--weight-bold);\n  vertical-align: bottom;\n}\n.ds-table tbody th {\n  font-weight: var(--weight-body);\n}\n.ds-table tbody tr:nth-child(odd) td,\n.ds-table tbody tr:nth-child(odd) 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 .ds-table__actions {\n  text-align: right;\n  white-space: nowrap;\n}\n.ds-table--bordered {\n  border: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table--bordered th,\n.ds-table--bordered td {\n  border-left: var(--border-width) var(--border-style) var(--color-border);\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-3);\n}\n\n/* list: media rows divided by faint rules */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:first-child {\n  padding-top: 0;\n  border-top: 0;\n}\n.ds-list__item:last-child {\n  padding-bottom: 0;\n}\n.ds-list__title {\n  display: block;\n  color: var(--color-link);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-list__text {\n  display: block;\n  margin: 0;\n}\n.ds-list__meta {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* panel: a bordered box with a tinted heading strip */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width)) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n}\n.ds-panel__title .ds-badge {\n  float: right;\n}\n.ds-panel__body {\n  padding: var(--space-3);\n}\n.ds-panel__body > p {\n  margin: 0 0 var(--space-2);\n}\n.ds-panel__body > :last-child {\n  margin-bottom: 0;\n}\n.ds-panel__foot {\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-surface-alt);\n  color: var(--color-text-muted);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 0 0 calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width));\n  font-size: var(--text-small);\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-heading);\n  line-height: var(--line-heading);\n}\n.ds-panel--primary {\n  border-color: var(--color-button);\n}\n.ds-panel--primary > .ds-panel__title {\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border-bottom-color: var(--color-button);\n  text-shadow: var(--shadow-text);\n}\n.ds-panel--success {\n  border-color: color-mix(in srgb, var(--color-success) 45%, var(--color-border));\n}\n.ds-panel--success > .ds-panel__title {\n  background: color-mix(in srgb, var(--color-success) 20%, var(--color-surface));\n  color: var(--color-heading);\n  border-bottom-color: color-mix(in srgb, var(--color-success) 45%, var(--color-border));\n}\n.ds-panel--warning {\n  border-color: color-mix(in srgb, var(--color-warning) 45%, var(--color-border));\n}\n.ds-panel--warning > .ds-panel__title {\n  background: color-mix(in srgb, var(--color-warning) 20%, var(--color-surface));\n  color: var(--color-heading);\n  border-bottom-color: color-mix(in srgb, var(--color-warning) 45%, var(--color-border));\n}\n.ds-panel--danger {\n  border-color: color-mix(in srgb, var(--color-danger) 45%, var(--color-border));\n}\n.ds-panel--danger > .ds-panel__title {\n  background: color-mix(in srgb, var(--color-danger) 20%, var(--color-surface));\n  color: var(--color-heading);\n  border-bottom-color: color-mix(in srgb, var(--color-danger) 45%, var(--color-border));\n}\n.ds-panel--info {\n  border-color: color-mix(in srgb, var(--color-accent-alt) 45%, var(--color-border));\n}\n.ds-panel--info > .ds-panel__title {\n  background: color-mix(in srgb, var(--color-accent-alt) 20%, var(--color-surface));\n  color: var(--color-heading);\n  border-bottom-color: color-mix(in srgb, var(--color-accent-alt) 45%, var(--color-border));\n}\n.ds-panel.ds-grow {\n  display: flex;\n  flex-direction: column;\n}\n.ds-panel.ds-grow > .ds-panel__body {\n  flex: 1 0 auto;\n}\n.ds-panels {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: var(--space-5);\n  margin-bottom: var(--space-5);\n}\n\n/* grid: bordered thumbnails, each a colour block over a caption */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  min-width: 0;\n  padding: var(--space-1);\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-grid__tile {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: var(--size-tile);\n  background: var(--color-fill-1);\n  color: var(--color-accent-text);\n  border-radius: calc(var(--radius-panel) / 2);\n}\n.ds-grid__tile--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__tile--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__tile--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-grid__caption {\n  padding: var(--space-2);\n}\n.ds-grid__title {\n  margin: 0;\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-grid__text {\n  margin: var(--space-1) 0 var(--space-2);\n}\n\n/* tabs: boxed tabs standing on a rule */\n.ds-tabs {\n  display: flex;\n  gap: var(--border-width-strong);\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-tabs__tab {\n  display: block;\n  margin-bottom: calc(var(--border-width) * -1);\n  padding: var(--space-2) var(--space-3);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  background: var(--color-surface-strong);\n  border-color: var(--color-surface-strong) var(--color-surface-strong) var(--color-border);\n}\n.ds-tabs__tab.is-current {\n  background: var(--color-canvas);\n  color: var(--color-text);\n  border-color: var(--color-border) var(--color-border) var(--color-canvas);\n}\n.ds-tabs__tab .ds-badge {\n  margin-left: var(--space-1);\n}\n\n/* badge: the small label; status colours and a count */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-1);\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-shadow: var(--shadow-text);\n  vertical-align: baseline;\n  white-space: nowrap;\n}\n.ds-badge--quiet {\n  background: var(--color-text-muted);\n  color: var(--color-canvas);\n  text-shadow: none;\n}\n.ds-badge--info {\n  background: var(--color-accent-alt);\n}\n.ds-badge--success {\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  background: var(--color-danger);\n}\n.ds-badgerow {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-1);\n}\n\n/* notice: the tinted alert box */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-notice-text) 25%, var(--color-notice));\n  border-radius: var(--radius-panel);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border-color: color-mix(in srgb, var(--color-danger) 25%, var(--color-danger-surface));\n}\n.ds-notice--callout {\n  border-left: var(--space-1) var(--border-style) var(--color-notice-text);\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  margin-bottom: var(--space-4);\n}\n\n/* pagination: joined boxes */\n.ds-pagination {\n  display: inline-flex;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-panel);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__link {\n  display: block;\n  margin-left: calc(var(--border-width) * -1);\n  padding: var(--space-control-y) var(--space-control-x);\n  background: var(--color-surface);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-pagination > li:first-child .ds-pagination__link {\n  margin-left: 0;\n  border-radius: var(--radius-control) 0 0 var(--radius-control);\n}\n.ds-pagination > li:last-child .ds-pagination__link {\n  border-radius: 0 var(--radius-control) var(--radius-control) 0;\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-pagination__link.is-current {\n  position: relative;\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-accent);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n}\n\n/* breadcrumb: a grey strip with slashes */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-1);\n  margin: 0 0 var(--space-4);\n  padding: var(--space-2) var(--space-3);\n  list-style: none;\n  background: var(--color-surface-alt);\n  color: var(--color-text-muted);\n  border-radius: var(--radius-panel);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-1);\n  color: var(--color-border-strong);\n}\n.ds-breadcrumb__current {\n  color: var(--color-text-muted);\n}\n\n/* dialog: the modal, shown open on its backdrop */\n.ds-dialog {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-5) var(--space-3);\n  background: var(--color-overlay);\n  border-radius: var(--radius-panel);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--space-2) var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-dialog__title {\n  margin: 0;\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-dialog__close {\n  color: var(--color-text-muted);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-dialog__body {\n  padding: var(--space-3);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-1);\n  padding: var(--space-3);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 0 0 calc(var(--radius-page) - var(--border-width)) calc(var(--radius-page) - var(--border-width));\n}\n\n/* empty state: a well with a message and one button */\n.ds-empty {\n  padding: var(--space-5) var(--space-4);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control-pressed);\n  text-align: center;\n}\n.ds-empty__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-bottom: var(--space-2);\n  color: var(--color-border-strong);\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-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-3);\n  color: var(--color-text-muted);\n}\n\n/* spacing helper: a block that is followed by another */\n.ds-page .ds-spaced {\n  margin-bottom: var(--space-4);\n}\n\n/* the current view marks its item in the top bar and in the side list; a booking marks Bookings */\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#bookings:target) .ds-nav__link[href=\"#bookings\"],\n.ds-page:has(#booking:target) .ds-nav__link[href=\"#bookings\"],\n.ds-page:has(#customers:target) .ds-nav__link[href=\"#customers\"],\n.ds-page:has(#settings:target) .ds-nav__link[href=\"#settings\"] {\n  background: color-mix(in srgb, var(--color-bar-text) 18%, transparent);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-page:not(:has(.ds-view:target)) .ds-sidebar__list--main .ds-sidebar__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-sidebar__list--main .ds-sidebar__link[href=\"#home\"],\n.ds-page:has(#bookings:target) .ds-sidebar__list--main .ds-sidebar__link[href=\"#bookings\"],\n.ds-page:has(#booking:target) .ds-sidebar__list--main .ds-sidebar__link[href=\"#bookings\"],\n.ds-page:has(#customers:target) .ds-sidebar__list--main .ds-sidebar__link[href=\"#customers\"],\n.ds-page:has(#settings:target) .ds-sidebar__list--main .ds-sidebar__link[href=\"#settings\"] {\n  position: relative;\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-accent);\n  text-shadow: var(--shadow-text);\n}\n\n/* app: a grey rail on the left with the list groups, the work on the right, full width */\n.ds-app {\n  display: flex;\n  align-items: stretch;\n}\n.ds-app__side {\n  flex: 0 0 var(--size-rail);\n  padding: var(--space-4) var(--space-3);\n  background: var(--color-surface-alt);\n  border-right: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-app__main {\n  flex: 1 1 0;\n  min-width: 0;\n  padding: var(--space-4) var(--space-5) var(--space-6);\n}\n\n/* sidebar: list groups in the rail */\n.ds-sidebar {\n  font-family: var(--font-ui);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-1);\n  color: var(--color-heading-alt);\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}\n.ds-sidebar__list {\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-sidebar__link {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: var(--space-2);\n  margin-top: calc(var(--border-width) * -1);\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-surface);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-ui);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-sidebar__list > li:first-child .ds-sidebar__link {\n  margin-top: 0;\n  border-radius: var(--radius-panel) var(--radius-panel) 0 0;\n}\n.ds-sidebar__list > li:last-child .ds-sidebar__link {\n  border-radius: 0 0 var(--radius-panel) var(--radius-panel);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-sidebar__link.is-current {\n  position: relative;\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-accent);\n}\n.ds-sidebar__note {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* hero: a compact grey block that opens the dashboard */\n.ds-hero {\n  display: flex;\n  align-items: center;\n  gap: var(--space-5);\n  margin-bottom: var(--space-4);\n  padding: var(--space-5);\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border-radius: var(--radius-page);\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-1);\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  letter-spacing: var(--heading-tracking);\n}\n.ds-hero__lead {\n  margin: 0;\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-hero__actions {\n  display: flex;\n  flex: 0 0 auto;\n  gap: var(--space-2);\n}\n\n/* page header: title with a rule under it */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-4);\n  padding-bottom: var(--space-2);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-page-header__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__title .ds-badge {\n  vertical-align: middle;\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: 0 0 auto;\n  gap: var(--space-2);\n}\n\n/* stats: four panels in a row, each a tinted heading strip over one figure */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: var(--space-4);\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n}\n.ds-stat__item {\n  min-width: 0;\n}\n.ds-stat__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-heading);\n  line-height: var(--line-heading);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* toolbar: the grey secondary bar above a table */\n.ds-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-2) var(--space-3);\n  background-color: var(--color-bar-alt);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-toolbar--boxed {\n  margin-bottom: var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-toolbar__field {\n  flex: 0 1 var(--size-search);\n}\n.ds-toolbar__text {\n  margin-left: auto;\n  font-size: var(--text-small);\n}\n.ds-panel__table .ds-table th:first-child,\n.ds-panel__table .ds-table td:first-child {\n  padding-left: var(--space-3);\n}\n.ds-panel__table .ds-table th:last-child,\n.ds-panel__table .ds-table td:last-child {\n  padding-right: var(--space-3);\n}\n\n/* definition rows: a label and its value, used in detail panels */\n.ds-facts {\n  margin: 0;\n}\n.ds-facts__row {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-1) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-facts__row:first-child {\n  padding-top: 0;\n  border-top: 0;\n}\n.ds-facts__label {\n  color: var(--color-text-muted);\n}\n.ds-facts__value {\n  margin: 0;\n  text-align: right;\n}\n\n/* footer: an inverted strip across the page */\n.ds-footer {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  gap: var(--space-2) var(--space-4);\n  padding: var(--space-3) var(--space-5);\n  background-color: var(--color-inverse);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-size: var(--text-small);\n}\n.ds-footer__text {\n  margin: 0;\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: inherit;\n  text-decoration: underline;\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: none;\n}\n\n/* medium windows: the stat panels and tiles fold to two columns */\n@media (max-width: 1000px) {\n  .ds-stat,\n  .ds-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n}\n\n/* narrow windows: the bar wraps into rows of links and stands in for the rail, columns stack, wide tables scroll in their own box */\n@media (max-width: 760px) {\n  .ds-nav {\n    position: static;\n  }\n  .ds-nav__inner {\n    flex-wrap: wrap;\n    gap: 0 var(--space-2);\n    padding-top: var(--space-1);\n  }\n  .ds-brand {\n    min-height: var(--size-nav);\n  }\n  .ds-nav__links {\n    order: 3;\n    flex: 0 0 100%;\n    flex-wrap: wrap;\n  }\n  .ds-nav__link {\n    padding: var(--space-2);\n  }\n  .ds-nav__text {\n    display: none;\n  }\n  .ds-app {\n    display: block;\n  }\n  .ds-app__side {\n    display: none;\n  }\n  .ds-app__main {\n    padding: var(--space-3) var(--space-3) var(--space-5);\n  }\n  .ds-row {\n    flex-direction: column;\n    align-items: stretch;\n    gap: var(--space-4);\n  }\n  .ds-col,\n  .ds-col--wide,\n  .ds-col--side {\n    flex: 0 0 auto;\n  }\n  .ds-hero {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-3);\n    padding: var(--space-4);\n  }\n  .ds-hero__copy {\n    flex: 0 0 auto;\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-2);\n  }\n  .ds-page-header__copy {\n    flex: 0 0 auto;\n  }\n  .ds-stat,\n  .ds-grid {\n    gap: var(--space-3);\n  }\n  .ds-panels {\n    grid-template-columns: 1fr;\n    gap: var(--space-4);\n  }\n  .ds-tabs {\n    overflow-x: auto;\n    overflow-y: hidden;\n  }\n  .ds-table {\n    min-width: 64ch;\n  }\n  .ds-toolbar__field {\n    flex: 1 1 100%;\n  }\n  .ds-toolbar__text {\n    margin-left: 0;\n  }\n  .ds-form__row {\n    flex-direction: column;\n  }\n  .ds-dialog {\n    padding: var(--space-4) var(--space-2);\n  }\n  .ds-dialog__actions {\n    flex-wrap: wrap;\n  }\n  .ds-pagination {\n    flex-wrap: wrap;\n  }\n  .ds-footer {\n    padding: var(--space-3);\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: framework default dashboard 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__inner\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 3a9 9 0 1 1-9 9\"/><path d=\"M12 17a5 5 0 1 1 5-5\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Dashboard</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#bookings\">Bookings</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#customers\">Customers</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#settings\">Settings</a></li>\n    </ul>\n    <div class=\"ds-nav__aside\">\n      <span class=\"ds-nav__text\">Signed in as Marta L.</span>\n      <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#settings\">Sign out</a>\n    </div>\n  </div>\n</header>\n\n<div class=\"ds-app\">\n<div class=\"ds-app__side\">\n  <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n    <h2 class=\"ds-sidebar__title\">Harbour shop</h2>\n    <ul class=\"ds-sidebar__list ds-sidebar__list--main\">\n      <li><a class=\"ds-sidebar__link\" href=\"#home\">Dashboard</a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#bookings\">Bookings <span class=\"ds-badge ds-badge--quiet\">23</span></a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#customers\">Customers <span class=\"ds-badge ds-badge--quiet\">412</span></a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#settings\">Settings</a></li>\n    </ul>\n    <h2 class=\"ds-sidebar__title\">Workshop</h2>\n    <ul class=\"ds-sidebar__list\">\n      <li><a class=\"ds-sidebar__link\" href=\"#bookings\">Due back today <span class=\"ds-badge ds-badge--warning\">6</span></a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#bookings\">In for repair <span class=\"ds-badge ds-badge--danger\">2</span></a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#customers\">Waiting list</a></li>\n    </ul>\n    <p class=\"ds-sidebar__note\">Open today from 8:00 to 18:30.</p>\n  </aside>\n</div>\n<main class=\"ds-app__main\">\n\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <div class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-hero__copy\">\n      <h1 class=\"ds-hero__title\">Good morning, Marta</h1>\n      <p class=\"ds-hero__lead\">Twelve bikes go out today and six come back. Two are still in the workshop.</p>\n    </div>\n    <div class=\"ds-hero__actions\">\n      <a class=\"ds-button ds-button--large\" href=\"#booking\">New booking</a>\n    </div>\n  </div>\n\n  <ul class=\"ds-stat\" data-component=\"stats\">\n    <li class=\"ds-stat__item ds-panel ds-panel--primary\">\n      <h2 class=\"ds-panel__title\">Out today</h2>\n      <div class=\"ds-panel__body\"><span class=\"ds-stat__figure\">12</span><span class=\"ds-stat__label\">pick-ups before noon: 9</span></div>\n    </li>\n    <li class=\"ds-stat__item ds-panel ds-panel--success\">\n      <h2 class=\"ds-panel__title\">Taken this week</h2>\n      <div class=\"ds-panel__body\"><span class=\"ds-stat__figure\">$3,480</span><span class=\"ds-stat__label\">up 8% on last week</span></div>\n    </li>\n    <li class=\"ds-stat__item ds-panel ds-panel--warning\">\n      <h2 class=\"ds-panel__title\">Due back</h2>\n      <div class=\"ds-panel__body\"><span class=\"ds-stat__figure\">6</span><span class=\"ds-stat__label\">one of them is late</span></div>\n    </li>\n    <li class=\"ds-stat__item ds-panel ds-panel--danger\">\n      <h2 class=\"ds-panel__title\">In for repair</h2>\n      <div class=\"ds-panel__body\"><span class=\"ds-stat__figure\">2</span><span class=\"ds-stat__label\">ready on Thursday</span></div>\n    </li>\n  </ul>\n\n  <div class=\"ds-row ds-row--level\">\n    <div class=\"ds-col ds-col--stack\">\n      <section class=\"ds-panel ds-grow\" data-component=\"panel\">\n        <h2 class=\"ds-panel__title\">Pick-ups today</h2>\n        <form class=\"ds-toolbar\" action=\"#bookings\">\n          <label class=\"ds-toolbar__field\"><input class=\"ds-form__input ds-form__input--small\" type=\"text\" placeholder=\"Find a name or a bike\" aria-label=\"Find a name or a bike\"></label>\n          <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#bookings\">Search</a>\n          <span class=\"ds-toolbar__text\">4 of 12 shown</span>\n        </form>\n        <div class=\"ds-table__wrap ds-panel__table\">\n          <table class=\"ds-table\">\n            <thead>\n              <tr><th scope=\"col\">Time</th><th scope=\"col\">Customer</th><th scope=\"col\">Bike</th><th scope=\"col\">Status</th><th scope=\"col\" class=\"ds-table__num\">Days</th><th scope=\"col\" class=\"ds-table__actions\">Actions</th></tr>\n            </thead>\n            <tbody>\n              <tr><td>8:30</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Anouk Visser</a></th><td>City 7, blue</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__num\">3</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--success ds-button--small\" href=\"#booking\">Hand over</a></span></td></tr>\n              <tr><td>9:00</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Rui Pacheco</a></th><td>Cargo 2</td><td><span class=\"ds-badge ds-badge--warning\">Deposit due</span></td><td class=\"ds-table__num\">1</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--success ds-button--small\" href=\"#booking\">Hand over</a></span></td></tr>\n              <tr><td>10:15</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Greta Holm</a></th><td>Electric 4</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__num\">7</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--success ds-button--small\" href=\"#booking\">Hand over</a></span></td></tr>\n              <tr><td>11:45</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Tomas Okafor</a></th><td>Child 12</td><td><span class=\"ds-badge ds-badge--danger\">Card failed</span></td><td class=\"ds-table__num\">2</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--warning ds-button--small\" href=\"#booking\">Take payment</a></span></td></tr>\n            </tbody>\n          </table>\n        </div>\n        <div class=\"ds-panel__foot\"><a class=\"ds-link\" href=\"#bookings\">See all 23 bookings</a></div>\n      </section>\n    </div>\n    <div class=\"ds-col ds-col--side ds-col--stack\">\n      <p class=\"ds-notice\"><span class=\"ds-notice__title\">Rain after 15:00.</span> Put the covers on the cargo bikes.</p>\n      <section class=\"ds-panel ds-grow\">\n        <h2 class=\"ds-panel__title\">Just now</h2>\n        <div class=\"ds-panel__body\">\n          <ul class=\"ds-list\">\n            <li class=\"ds-list__item\"><a class=\"ds-list__title\" href=\"#booking\">City 3 came back early</a><span class=\"ds-list__meta\">8:02, checked in by Jonas</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-list__title\" href=\"#booking\">New booking for Saturday</a><span class=\"ds-list__meta\">7:48, made on the website</span></li>\n            <li class=\"ds-list__item\"><a class=\"ds-list__title\" href=\"#customers\">Greta Holm joined</a><span class=\"ds-list__meta\">7:31, first booking</span></li>\n          </ul>\n        </div>\n      </section>\n    </div>\n  </div>\n\n  <h2 class=\"ds-title ds-title--small\">The fleet <small class=\"ds-title__small\">what is in the shop right now</small></h2>\n  <div class=\"ds-grid\" data-component=\"grid\">\n    <div class=\"ds-grid__cell\">\n      <div class=\"ds-grid__tile\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 40 40\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"26\" r=\"7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/><circle cx=\"30\" cy=\"26\" r=\"7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/><path d=\"M10 26l7-13h9l4 13 M17 13l5 13 M14 13h6 M26 9h4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></div>\n      <div class=\"ds-grid__caption\">\n        <h3 class=\"ds-grid__title\">City bikes</h3>\n        <p class=\"ds-grid__text\">14 of 22 in the shop</p>\n        <a class=\"ds-link\" href=\"#bookings\">Book one</a>\n      </div>\n    </div>\n    <div class=\"ds-grid__cell\">\n      <div class=\"ds-grid__tile ds-grid__tile--2\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 40 40\" aria-hidden=\"true\"><path d=\"M6 12h18v12H6z M24 16h6l4 5v3h-10 M11 28a3 3 0 1 0 0.1 0 M28 28a3 3 0 1 0 0.1 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></div>\n      <div class=\"ds-grid__caption\">\n        <h3 class=\"ds-grid__title\">Cargo bikes</h3>\n        <p class=\"ds-grid__text\">3 of 5 in the shop</p>\n        <a class=\"ds-link\" href=\"#bookings\">Book one</a>\n      </div>\n    </div>\n    <div class=\"ds-grid__cell\">\n      <div class=\"ds-grid__tile ds-grid__tile--3\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 40 40\" aria-hidden=\"true\"><path d=\"M23 4L10 22h9l-3 14 14-19h-9z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linejoin=\"round\"/></svg></div>\n      <div class=\"ds-grid__caption\">\n        <h3 class=\"ds-grid__title\">Electric</h3>\n        <p class=\"ds-grid__text\">2 of 8 in the shop</p>\n        <a class=\"ds-link\" href=\"#bookings\">Book one</a>\n      </div>\n    </div>\n    <div class=\"ds-grid__cell\">\n      <div class=\"ds-grid__tile ds-grid__tile--4\"><svg class=\"ds-grid__icon\" viewBox=\"0 0 40 40\" aria-hidden=\"true\"><circle cx=\"20\" cy=\"12\" r=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/><path d=\"M8 35a12 12 0 0 1 24 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg></div>\n      <div class=\"ds-grid__caption\">\n        <h3 class=\"ds-grid__title\">Children</h3>\n        <p class=\"ds-grid__text\">9 of 12 in the shop</p>\n        <a class=\"ds-link\" href=\"#bookings\">Book one</a>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"bookings\">\n  <ol class=\"ds-breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Dashboard</a></li>\n    <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Bookings</li>\n  </ol>\n  <header class=\"ds-page-header\">\n    <div class=\"ds-page-header__copy\">\n      <h1 class=\"ds-page-header__title\">Bookings</h1>\n      <p class=\"ds-page-header__text\">Every hire from the Harbour shop, newest first.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#settings\">Export</a>\n      <a class=\"ds-button\" href=\"#booking\">New booking</a>\n    </div>\n  </header>\n\n  <ul class=\"ds-tabs\" data-component=\"tabs\">\n    <li><a class=\"ds-tabs__tab is-current\" href=\"#bookings\">All <span class=\"ds-badge ds-badge--quiet\">23</span></a></li>\n    <li><a class=\"ds-tabs__tab\" href=\"#bookings\">Out now <span class=\"ds-badge ds-badge--quiet\">9</span></a></li>\n    <li><a class=\"ds-tabs__tab\" href=\"#bookings\">Late <span class=\"ds-badge ds-badge--danger\">1</span></a></li>\n    <li><a class=\"ds-tabs__tab\" href=\"#bookings\">Cancelled</a></li>\n  </ul>\n\n  <form class=\"ds-toolbar ds-toolbar--boxed\" action=\"#bookings\">\n    <label class=\"ds-toolbar__field\"><input class=\"ds-form__input ds-form__input--small\" type=\"text\" placeholder=\"Find a name or a bike\" aria-label=\"Find a name or a bike\"></label>\n    <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#bookings\">Search</a>\n    <span class=\"ds-toolbar__text\">Showing 1 to 6 of 23</span>\n  </form>\n\n  <div class=\"ds-table__wrap\">\n    <table class=\"ds-table\" data-component=\"table\">\n      <caption class=\"ds-table__caption\">Totals include the deposit. Times are shop time.</caption>\n      <thead>\n        <tr><th scope=\"col\">No.</th><th scope=\"col\">Customer</th><th scope=\"col\">Bike</th><th scope=\"col\">Out</th><th scope=\"col\">Back</th><th scope=\"col\">Status</th><th scope=\"col\" class=\"ds-table__num\">Total</th><th scope=\"col\" class=\"ds-table__actions\">Actions</th></tr>\n      </thead>\n      <tbody>\n        <tr><td>2041</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Anouk Visser</a></th><td>City 7, blue</td><td>12 May</td><td>15 May</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__num\">$84.00</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">Edit</a><a class=\"ds-button ds-button--danger ds-button--small\" href=\"#booking\">Cancel</a></span></td></tr>\n        <tr><td>2040</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Rui Pacheco</a></th><td>Cargo 2</td><td>12 May</td><td>13 May</td><td><span class=\"ds-badge ds-badge--warning\">Deposit due</span></td><td class=\"ds-table__num\">$45.00</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">Edit</a><a class=\"ds-button ds-button--danger ds-button--small\" href=\"#booking\">Cancel</a></span></td></tr>\n        <tr><td>2039</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Greta Holm</a></th><td>Electric 4</td><td>12 May</td><td>19 May</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__num\">$266.00</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">Edit</a><a class=\"ds-button ds-button--danger ds-button--small\" href=\"#booking\">Cancel</a></span></td></tr>\n        <tr><td>2038</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Tomas Okafor</a></th><td>Child 12</td><td>12 May</td><td>14 May</td><td><span class=\"ds-badge ds-badge--danger\">Card failed</span></td><td class=\"ds-table__num\">$22.00</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">Edit</a><a class=\"ds-button ds-button--danger ds-button--small\" href=\"#booking\">Cancel</a></span></td></tr>\n        <tr><td>2037</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Ilse Brandt</a></th><td>City 3, green</td><td>9 May</td><td>12 May</td><td><span class=\"ds-badge ds-badge--info\">Out now</span></td><td class=\"ds-table__num\">$84.00</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">Edit</a><a class=\"ds-button ds-button--danger ds-button--small\" href=\"#booking\">Cancel</a></span></td></tr>\n        <tr><td>2036</td><th scope=\"row\"><a class=\"ds-link\" href=\"#booking\">Pavel Novak</a></th><td>City 11, red</td><td>8 May</td><td>11 May</td><td><span class=\"ds-badge ds-badge--danger\">Late</span></td><td class=\"ds-table__num\">$96.00</td><td class=\"ds-table__actions\"><span class=\"ds-buttongroup\"><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">View</a><a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#booking\">Edit</a><a class=\"ds-button ds-button--danger ds-button--small\" href=\"#booking\">Cancel</a></span></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=\"#bookings\">&laquo; Previous</a></li>\n      <li><a class=\"ds-pagination__link is-current\" href=\"#bookings\">1</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#bookings\">2</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#bookings\">3</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#bookings\">4</a></li>\n      <li><a class=\"ds-pagination__link\" href=\"#bookings\">Next &raquo;</a></li>\n    </ul>\n    <div class=\"ds-badgerow\" data-component=\"badge\">\n      <span class=\"ds-muted\">Status:</span>\n      <span class=\"ds-badge\">Booked</span>\n      <span class=\"ds-badge ds-badge--info\">Out now</span>\n      <span class=\"ds-badge ds-badge--success\">Paid</span>\n      <span class=\"ds-badge ds-badge--warning\">Deposit due</span>\n      <span class=\"ds-badge ds-badge--danger\">Late</span>\n      <span class=\"ds-badge ds-badge--quiet\">23</span>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"booking\">\n  <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Dashboard</a></li>\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#bookings\">Bookings</a></li>\n    <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">2041</li>\n  </ol>\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <div class=\"ds-page-header__copy\">\n      <h1 class=\"ds-page-header__title\">Booking 2041 <span class=\"ds-badge ds-badge--success\">Paid</span></h1>\n      <p class=\"ds-page-header__text\">Anouk Visser, City 7 in blue, 12 to 15 May.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#bookings\">Back to the list</a>\n    </div>\n  </header>\n\n  <div class=\"ds-row ds-row--level ds-row--flush\">\n    <div class=\"ds-col ds-col--stack\">\n      <div class=\"ds-buttonrow\" data-component=\"buttons\">\n        <a class=\"ds-button\" href=\"#booking\">Hand over the bike</a>\n        <a class=\"ds-button ds-button--secondary\" href=\"#booking\">Print the agreement</a>\n        <a class=\"ds-button ds-button--danger\" href=\"#booking\">Cancel the booking</a>\n        <button class=\"ds-button\" type=\"button\" disabled>Refund the deposit</button>\n      </div>\n      <div class=\"ds-well\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Hire agreement</h1>\n          <p>Three days from Monday 12 May at 8:30. The bike is due back on <strong>Thursday 15 May before 18:00</strong>; a late return is charged by the day.</p>\n          <h2>What goes with the bike</h2>\n          <ul>\n            <li>A lock with two keys</li>\n            <li>Front and rear lights</li>\n            <li>A helmet, size M</li>\n          </ul>\n          <h3>Note from the customer</h3>\n          <p>Asked for the saddle to be set high. The reference on the tag is <code>B-2041</code>.</p>\n        </article>\n      </div>\n      <div class=\"ds-dialog ds-grow\" 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\">Cancel this booking?</h2>\n            <a class=\"ds-dialog__close\" href=\"#booking\" aria-label=\"Close\">&times;</a>\n          </div>\n          <div class=\"ds-dialog__body\">\n            <p>City 7 goes back on the shelf for 12 to 15 May and $84.00 is refunded to the card.</p>\n          </div>\n          <div class=\"ds-dialog__actions\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#booking\">Keep it</a>\n            <a class=\"ds-button ds-button--danger\" href=\"#bookings\">Cancel the booking</a>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"ds-col ds-col--side ds-col--stack\">\n      <section class=\"ds-panel ds-panel--success\">\n        <h2 class=\"ds-panel__title\">Payment</h2>\n        <div class=\"ds-panel__body\">\n          <span class=\"ds-panel__figure\">$84.00</span>\n          <dl class=\"ds-facts\">\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Hire, 3 days</dt><dd class=\"ds-facts__value\">$54.00</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Deposit</dt><dd class=\"ds-facts__value\">$30.00</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Paid by</dt><dd class=\"ds-facts__value\">Card, 10 May</dd></div>\n          </dl>\n        </div>\n      </section>\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Customer</h2>\n        <div class=\"ds-panel__body\">\n          <dl class=\"ds-facts\">\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Name</dt><dd class=\"ds-facts__value\"><a class=\"ds-link\" href=\"#customers\">Anouk Visser</a></dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Phone</dt><dd class=\"ds-facts__value\">555 0142</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Hires so far</dt><dd class=\"ds-facts__value\">4</dd></div>\n          </dl>\n        </div>\n      </section>\n      <section class=\"ds-panel ds-grow\">\n        <h2 class=\"ds-panel__title\">History</h2>\n        <div class=\"ds-panel__body\">\n          <ul class=\"ds-list\">\n            <li class=\"ds-list__item\"><span class=\"ds-list__text\">Booked on the website</span><span class=\"ds-list__meta\">9 May, 21:14</span></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__text\">Paid in full by card</span><span class=\"ds-list__meta\">10 May, 8:02</span></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__text\">Saddle note added</span><span class=\"ds-list__meta\">11 May, 16:40, by Jonas</span></li>\n          </ul>\n        </div>\n      </section>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"customers\">\n  <ol class=\"ds-breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Dashboard</a></li>\n    <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Customers</li>\n  </ol>\n  <header class=\"ds-page-header\">\n    <div class=\"ds-page-header__copy\">\n      <h1 class=\"ds-page-header__title\">Customers</h1>\n      <p class=\"ds-page-header__text\">412 people have hired from the Harbour shop.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button\" href=\"#settings\">Add a customer</a>\n    </div>\n  </header>\n\n  <div class=\"ds-row ds-row--level ds-row--flush\">\n    <div class=\"ds-col ds-col--stack\">\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Hired this month</h2>\n        <div class=\"ds-panel__body\">\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#booking\">Anouk Visser</a>\n              <p class=\"ds-list__text\">City 7 in blue, out until Thursday.</p>\n              <span class=\"ds-list__meta\">4 hires, customer since March 2012, 555 0142</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#booking\">Greta Holm</a>\n              <p class=\"ds-list__text\">Electric 4 for a week, first booking.</p>\n              <span class=\"ds-list__meta\">1 hire, customer since May 2014, 555 0187</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#booking\">Pavel Novak</a>\n              <p class=\"ds-list__text\">City 11 in red, one day late.</p>\n              <span class=\"ds-list__meta\">9 hires, customer since June 2011, 555 0110</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#booking\">Rui Pacheco</a>\n              <p class=\"ds-list__text\">Cargo 2 for the day, deposit still to pay.</p>\n              <span class=\"ds-list__meta\">2 hires, customer since April 2014, 555 0163</span>\n            </li>\n          </ul>\n        </div>\n        <div class=\"ds-panel__foot\">Showing 4 of 37 this month.</div>\n      </section>\n      <p class=\"ds-linkrow\" data-component=\"links\">\n        <strong>More lists:</strong>\n        <a class=\"ds-link\" href=\"#customers\">Everyone, A to Z</a>\n        <a class=\"ds-link is-visited\" href=\"#customers\">Regulars</a>\n        <a class=\"ds-link is-hover\" href=\"#customers\">Owing a deposit</a>\n        <a class=\"ds-link is-active\" href=\"#bookings\">Out now</a>\n        <a class=\"ds-link ds-link--quiet\" href=\"#settings\">Export as a file</a>\n      </p>\n    </div>\n    <div class=\"ds-col ds-col--side ds-col--stack\">\n      <div class=\"ds-empty ds-grow\" data-component=\"empty\">\n        <svg class=\"ds-empty__icon\" viewBox=\"0 0 40 40\" aria-hidden=\"true\"><path d=\"M8 8h24v26H8z M14 15h12 M14 21h12 M14 27h7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"/></svg>\n        <h2 class=\"ds-empty__title\">Nobody is waiting</h2>\n        <p class=\"ds-empty__text\">When every bike of a kind is out, people who ask for one are listed here.</p>\n        <a class=\"ds-button ds-button--secondary\" href=\"#bookings\">Add a name</a>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"settings\">\n  <ol class=\"ds-breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link\" href=\"#home\">Dashboard</a></li>\n    <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Settings</li>\n  </ol>\n  <header class=\"ds-page-header\">\n    <div class=\"ds-page-header__copy\">\n      <h1 class=\"ds-page-header__title\">Settings</h1>\n      <p class=\"ds-page-header__text\">Shop details that are printed on every agreement.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#home\">Back to the dashboard</a>\n    </div>\n  </header>\n\n  <ul class=\"ds-tabs\">\n    <li><a class=\"ds-tabs__tab is-current\" href=\"#settings\">Shop</a></li>\n    <li><a class=\"ds-tabs__tab\" href=\"#settings\">Prices</a></li>\n    <li><a class=\"ds-tabs__tab\" href=\"#settings\">Staff</a></li>\n  </ul>\n\n  <div class=\"ds-row ds-row--level ds-row--flush\">\n    <div class=\"ds-col\">\n      <div class=\"ds-noticerow\" data-component=\"notice\">\n        <p class=\"ds-notice\"><span class=\"ds-notice__title\">Note.</span> Agreements already printed keep the details they were printed with.</p>\n        <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Not saved.</span> Check the field marked below and save again.</p>\n      </div>\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Shop details</h2>\n        <form class=\"ds-form ds-form--flush\" data-component=\"form\" action=\"#settings\">\n          <div class=\"ds-panel__body ds-form\">\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Shop name</span><input class=\"ds-form__input\" type=\"text\" value=\"Harbour shop\"></label>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Phone</span><input class=\"ds-form__input is-focus\" type=\"text\" placeholder=\"Shown on the agreement\"></label>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__field is-error\"><span class=\"ds-form__label\">Closing time</span><input class=\"ds-form__input is-error\" type=\"text\" value=\"half six\"><span class=\"ds-form__error\">Write the time as 18:30.</span></label>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Late return is charged</span>\n                <select class=\"ds-form__select\"><option>By the day</option><option>By the hour</option><option>Not at all</option></select>\n              </label>\n            </div>\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Line at the foot of the agreement</span><textarea class=\"ds-form__textarea\" rows=\"3\" placeholder=\"Ride safely and lock it twice\"></textarea><span class=\"ds-form__hint\">Optional. One or two lines.</span></label>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>Send a reminder the evening before a bike is due back. <a class=\"ds-link\" href=\"#settings\">Edit the reminder</a></span></label>\n          </div>\n          <div class=\"ds-form__actions\">\n            <button class=\"ds-button\" type=\"submit\">Save the details</button>\n            <a class=\"ds-button ds-button--secondary\" href=\"#home\">Cancel</a>\n          </div>\n        </form>\n      </section>\n    </div>\n    <div class=\"ds-col ds-col--side ds-col--stack\">\n      <section class=\"ds-panel ds-panel--info\">\n        <h2 class=\"ds-panel__title\">Opening hours</h2>\n        <div class=\"ds-panel__body\">\n          <dl class=\"ds-facts\">\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Monday to Friday</dt><dd class=\"ds-facts__value\">8:00 to 18:30</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Saturday</dt><dd class=\"ds-facts__value\">9:00 to 17:00</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__label\">Sunday</dt><dd class=\"ds-facts__value\">Closed</dd></div>\n          </dl>\n        </div>\n      </section>\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Last changes</h2>\n        <div class=\"ds-panel__body\">\n          <ul class=\"ds-list\">\n            <li class=\"ds-list__item\"><span class=\"ds-list__text\">Closing time</span><span class=\"ds-list__meta\">2 May, by Marta</span></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__text\">Late return charge</span><span class=\"ds-list__meta\">18 April, by Marta</span></li>\n            <li class=\"ds-list__item\"><span class=\"ds-list__text\">Shop phone</span><span class=\"ds-list__meta\">6 January, by Jonas</span></li>\n          </ul>\n        </div>\n      </section>\n      <div class=\"ds-well ds-grow\">\n        <h2 class=\"ds-title ds-title--small\">A second shop?</h2>\n        <p class=\"ds-col__text\">Each shop has its own fleet, hours and staff, under one sign-in.</p>\n        <a class=\"ds-button ds-button--info\" href=\"#settings\">Add a shop</a>\n      </div>\n    </div>\n  </div>\n</section>\n\n</main>\n</div>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <p class=\"ds-footer__text\">chronoskin for bike hire, Harbour shop. Version 3.2, 2014.</p>\n  <ul class=\"ds-footer__links\">\n    <li><a class=\"ds-footer__link\" href=\"#bookings\">Bookings</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#customers\">Customers</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#settings\">Settings</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#home\">Back to top</a></li>\n  </ul>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.bootstrap-era.app.s03.p03.t03.u03\",\n  \"library\": \"2026.10.07-2111\",\n  \"era\": {\n    \"slug\": \"bootstrap-era\",\n    \"years\": [\n      2011,\n      2014\n    ]\n  },\n  \"archetype\": \"app\",\n  \"mode\": \"pure\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1280,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-bs-3333\",\n  \"short\": \"v1-bs-3333\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #111111;\n  --color-canvas: #111111;\n  --color-surface: #1b1b1b;\n  --color-surface-alt: #222222;\n  --color-surface-strong: #333333;\n  --color-bar: #1fa67a;\n  --color-bar-text: #d2ebe3;\n  --color-bar-alt: #252525;\n  --color-bar-alt-text: #999999;\n  --color-inverse: #eeeeee;\n  --color-inverse-text: #333333;\n  --color-text: #cccccc;\n  --color-text-muted: #999999;\n  --color-heading: #ffffff;\n  --color-heading-alt: #a5d8c7;\n  --color-link: #21b384;\n  --color-link-quiet: #999999;\n  --color-link-visited: #21b384;\n  --color-link-hover: #a5d8c7;\n  --color-link-active: #1b926c;\n  --color-border: #333333;\n  --color-border-strong: #5a5a5a;\n  --color-border-muted: #252525;\n  --color-accent: #1b926c;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #5fb0e4;\n  --color-fill-1: #1b926c;\n  --color-fill-2: #6d3353;\n  --color-fill-3: #006dcc;\n  --color-fill-4: #c09853;\n  --color-button: #1fa67a;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #333333;\n  --color-button-secondary-text: #ffffff;\n  --color-input: #222222;\n  --color-input-text: #cccccc;\n  --color-input-border: #5a5a5a;\n  --color-disabled: #252525;\n  --color-disabled-text: #5a5a5a;\n  --color-danger: #da4f49;\n  --color-danger-surface: #2d1a1a;\n  --color-success: #62c462;\n  --color-warning: #f89406;\n  --color-notice: #333333;\n  --color-notice-text: #d2ebe3;\n  --color-focus: #a5d8c7;\n  --color-shadow: rgb(0 0 0 / 0.5);\n  --color-overlay: rgb(0 0 0 / 0.7);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: \"Roboto Slab\", Rockwell, Georgia, \"Times New Roman\", serif;\n  --font-ui: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: Consolas, Menlo, Monaco, \"Courier New\", monospace;\n  --text-base: 14px;\n  --text-small: 12px;\n  --text-ui: 13px;\n  --text-large: 18px;\n  --text-display: 48px;\n  --text-h1: 32px;\n  --text-h2: 26px;\n  --text-h3: 20px;\n  --line-body: 1.5;\n  --line-heading: 1.25;\n  --line-display: 1.15;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 700;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\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: 1px;\n  --border-width-strong: 3px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: none;\n  --shadow-control-pressed: none;\n  --shadow-dialog: 0 0 0 1px var(--color-shadow);\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);\n  --fill-button: var(--color-button);\n  --fill-button-hover: linear-gradient(color-mix(in srgb, white 15%, transparent), color-mix(in srgb, white 15%, transparent)), var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
