{
  "id": "v1-md-413a",
  "long_id": "v1.material-design.docs.s04.p01.t03.u10",
  "name": "Material console dashboard, 2017",
  "era": {
    "slug": "material-design",
    "code": "md",
    "name": "Material Design",
    "years": [
      2014,
      2018
    ],
    "description": "Paper and ink, 2014 to 2018: flat sheets that cast soft shadows, a coloured app bar, uppercase medium-weight buttons, two-pixel corners and one bright accent for the floating action."
  },
  "archetype": "docs",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "A signed-in console in the paper-and-ink manner: a dark navigation drawer runs the full height of the window at the left, a coloured app bar with a row of tabs spans the rest, and the page under it is a grey desk covered with white cards. The cards carry the work: a welcome card with a colour block, four figure cards with a square colour tile, a chart, a ruled activity list, guide cards with a round mark on the edge of their colour head, and one floating action button that rides the bottom right corner. Admin templates, developer consoles and the signed-in side of documentation sites built on material frameworks looked like this from about 2015 to 2018.",
  "url": "https://chrono.skin/s/v1-md-413a",
  "preview_url": "https://chrono.skin/s/v1-md-413a/specimen.html",
  "files": {
    "STYLE.md": "# Material console dashboard, 2017\n\n## Summary\n\nA signed-in console in the paper-and-ink manner: a dark navigation drawer runs the full height of the window at the left, a coloured app bar with a row of tabs spans the rest, and the page under it is a grey desk covered with white cards. The cards carry the work: a welcome card with a colour block, four figure cards with a square colour tile, a chart, a ruled activity list, guide cards with a round mark on the edge of their colour head, and one floating action button that rides the bottom right corner. Admin templates, developer consoles and the signed-in side of documentation sites built on material frameworks looked like this from about 2015 to 2018.\n\n## Layout\n\n- The page is fluid: `--size-page` is `100%`. Designed at 1440px. `.ds-app` is a two-column grid: the `.ds-sidebar` drawer (`--size-drawer`, 256px) and `.ds-body`, which takes the rest and holds the `.ds-nav` app bar, `.ds-main` and, at the foot, `.ds-footer`. Nothing is centred and there is no maximum content width: cards stretch with the window, as in an application.\n- The drawer starts at the very top of the window, beside the app bar, not under it. Its head (`.ds-sidebar__head`, `--size-bar` 64px tall) holds the `.ds-brand`; under it come the account block and the link groups. The app bar is two rows: a 64px row with the view title, a search field (`--size-search` 320px) and round tool buttons, then a `--size-row` (48px) row of tabs, the views of the project, whose current tab has a 2px line in `--color-bar-text` on the bar's bottom edge.\n- `.ds-main` is a vertical stack of rows with `--space-4` (24px) between them and `--space-4` of padding at the sides and top. Rows are either a full-width card, a four-up row (`.ds-stats`, `.ds-grid`) or a `.ds-row`, a 12-column grid: `.ds-row__wide` (8) with `.ds-row__narrow` (4), or `.ds-row__main` (7) with `.ds-row__side` (5). `.ds-stack` piles cards in one column of a row. A group of cards may be introduced by `.ds-subhead`, a small caption set on the desk.\n- Everything sits on a card; only `.ds-subhead`, the page header of an inner page and the footer line are set directly on the desk. Cards are separated by the 24px gutter and their shadow, never by rules on the desk.\n- Home page order: `.ds-hero` (welcome card), `.ds-stats`, chart card beside the activity list, `.ds-subhead` and `.ds-grid`, then text and secondary cards. `.ds-fab` is the last child of `.ds-main`: it is sticky, so the floating button stays 24px above the bottom right corner of the window while the view scrolls and comes to rest under the last row.\n- Spacing is on an 8px grid: `--space-1` 4px (helper text, pagination gap, tool buttons), `--space-2` 8px (between flat buttons, card action padding, icon to label in a button), `--space-3` 16px (figure card padding, guide card text padding, button side padding, paragraph gap), `--space-4` 24px (gutter between cards, card side padding, drawer and bar side padding, field gap), `--space-5` 32px (welcome card padding), `--space-6` 48px (bottom of the view, overlay padding), `--space-7` 64px (spare step).\n- Heights: drawer head, app bar row and card head `--size-bar` 64px; tabs, drawer links and table rows `--size-row` 48px; avatars, tool buttons and the round mark `--size-row-dense` 40px; buttons and fields `--size-control` 36px; floating button `--size-fab` 56px; two-line list rows 64px. Other sizes: `--size-brand` 28px (brand tile), `--size-tile` 64px (figure card tile), `--size-media` 88px (colour head of a guide card), `--size-art` 380px (colour block of the welcome card), `--size-chart` 232px, `--size-measure` 640px (running text), `--size-stripe` 4px (current drawer link), `--size-icon` 24px, `--size-check` 18px, `--size-badge` 22px, `--size-dialog` 440px, `--size-area` 96px.\n- Inner pages (a list of records, one record and its settings, alerts, a guide) keep the drawer and the app bar. There is no `.ds-hero`. `.ds-main` opens with `.ds-head`, set directly on the desk: the `.ds-breadcrumb`, then `.ds-page-header` (24px title, one grey line, raised buttons at the right). Under it a list page has its notices side by side (`.ds-notices--pair`) and one `.ds-panel` that holds `.ds-tabs` along its top edge, the `.ds-table` and a `.ds-panel__foot` with the row count and `.ds-pagination`. An edit page is a `.ds-row`: the form card (`.ds-row__wide`, fields two to a line in `.ds-form__row`, actions in a ruled strip at the bottom right) and a `.ds-stack` of secondary cards (`.ds-row__narrow`; `.ds-stack--fill` lets its last block take the remaining height). A guide page is a `.ds-row` with the text card (`.ds-row__main`) beside a stack of cards (`.ds-row__side`). On a separate application screen the bar of an inner page may drop the tab row and show a back arrow before the title. The `.ds-footer` line closes the body column.\n- Views: the specimen is one console with five views; the drawer links and the tab row of the app bar both lead to them and both mark the current one. `dashboard` is the home view: welcome card, figure cards, the chart beside recent activity, the guide cards and the floating button. `channels` is a list of records: page header, two notices, and the card with tabs, table and pagination. `channel` is one record: page header with its actions, the settings form, the key card and the pause dialog. `alerts` is the alerts screen, shown empty, beside a list of channels worth watching. `guide` is the quick start: the text card beside related links and two cards.\n- Below 900px the drawer shrinks to its head with the brand, above the body, and its links go; the menu button `.ds-nav__menu` (a `.ds-menu--start` in the bar) appears and opens a list with the same links, the tab row `.ds-nav__links` scrolls sideways with the current tab still marked `.is-current`, the search field hides, four-up rows become two-up and every `.ds-row` becomes one column. Below 600px four-up rows and form rows become one column, and table cells marked `.ds-table__extra` are hidden.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- `--color-bar` soft teal `#80cbc4` with dark `--color-bar-text` `#212121`: navigation bar and header band carry dark text, not white. `--color-bar-alt` and `--color-inverse` are blue-grey `#455a64` with white text (toolbar, footer).\n- Green is the colour of action: `--color-button`, `--color-link`, `--color-focus` and `--color-success` are `#46873b` with white button text; `--color-link-hover` stays `#46873b`, so hover is shown by elevation; `--color-link-active` is `#455a64`.\n- `--color-accent` mint `#64ffda` with `#212121` text: floating button, count badges. The 3px indicator under the current toolbar link and tab is `--color-link`, which reads on a white sheet under every palette. `--color-accent-alt` is blue-grey `#455a64`.\n- Page `#f3f3f3`, sheets white, `--color-surface-alt` `#fafafa`, `--color-surface-strong` `#e3e3e3`; borders `#dcdcdc`, inner dividers `#ebebec`. Text `#212121`, secondary `#757575`, section titles `#444444`.\n- Block fills: teal `#80cbc4`, mint `#64ffda`, light green `#6ab344` (all with dark text), blue-grey `#455a64` (white text). `--color-danger` `#c2185b`, `--color-warning` amber `#ffc400`, notice `#e3e3e3`.\n- One family, Roboto, for body, headings and UI; `--font-mono` for code only.\n- Dense text: `--text-base` 13px on a 24px line (`--line-body` 1.85), `--text-small` 12px, `--text-ui` 14px.\n- Small regular headings: `--text-display` 34px, `--text-h1` 24px, `--text-h2` 20px, `--text-h3` 15px at `--weight-bold` 500; `--text-large` 18px for the lead.\n- `--ui-transform` is `none`: buttons, navigation and tabs are sentence case at `--weight-ui` 500. No uppercase anywhere, no underlines, no tracking.\n- Raised paper: every sheet floats visibly. `--shadow-panel` is a three-layer shadow (10px blur, 4px drop); `--shadow-control` a deeper one (14px blur, 6px drop) on resting buttons; `--shadow-control-hover` drops 8px; `--shadow-control-pressed` falls back to two tight layers; `--shadow-dialog` is two layers, 14px blur with a 12px drop.\n- All corners are 2px, including `--radius-pill`: badges, chips and pagination cells are small rectangles, not pills.\n- Fills are flat; depth comes from shadow only. `--border-width` 1px, `--border-width-strong` 3px for indicators, stat rules and the focus and error line of a field. A hovered button darkens: `--fill-button-hover` is the button colour mixed with 12% black. `--fill-input` is transparent, so fields are a bottom line only; `--focus-ring` is a solid 3px line; `--transition` is a quick 0.15s ease-out.\n- In this layout the toolbar is a white sheet (`--fill-panel`) with `--color-text-muted` links and a `--color-heading` brand name; `--fill-bar` with `--color-bar-text` fills the hero and the inner page header instead. `--fill-inverse` with `--color-inverse-text` is the dark band and the footer. `--color-surface-strong` is the grey band and the table head, both with `--color-text`.\n- Text on fills follows fixed pairs: `--color-bar-text` on the hero, the page header, `--color-fill-1` and `--color-fill-3`; `--color-accent-text` on the accent, `--color-fill-2` and the warning badge; `--color-inverse-text` on `--color-fill-4`, the dark band and the footer; `--color-button-text` on the primary and danger buttons and on the new, success and danger badges. Links and muted text are used only on the page and on white sheets, never on a grey, coloured or dark band.\n- One-off values built with `color-mix()`, `calc()` or `opacity` because the vocabulary has no token: 87% and 70% of the bar text colour for the hero lead, the page header text and its breadcrumb; 14%, 22% and 40% washes of it for the hero shapes; 87% opacity for card text on a colour block; 87%, 70% and 40% of the inverse text in the dark band and footer; 66% of the quiet link colour for rail links; a 20% grey wash behind a hovered flat button; line heights 1.18, 1.2, 1.43, 1.6 and 1.85.\n\n- Tonal sheets: `--shadow-panel` is `none` and sheets have no outline; `--fill-page` is `--color-page` darkened with 14% black, so the page is always a step darker than the sheets on it, under a light palette and under a dark one, and a sheet is told from the page by its tone alone.\n- Buttons keep a tight lift: `--shadow-control` is a 2px-blur pair, `--shadow-control-hover` a 10px-blur pair; the dialog alone drops a 10px shadow.\n- `--radius-control` and `--radius-panel` are 2px; `--radius-page` is 0, so the largest containers and grid cards are square; `--radius-pill` is a full pill for badges, chips and pagination.\n- Flat fills; fields are filled with `--color-input` above their bottom line. `--border-width` 1px dividers, `--border-width-strong` 2px indicators, `--focus-ring` a 1px line; `--transition` is slow and soft, 0.4s.\n\n## Components\n\n- `.ds-page` on `<body>`: desk fill, body family and size.\n- `.ds-app`, `.ds-body`, `.ds-main`: the frame described above. `.ds-row` with `.ds-row__wide`, `.ds-row__narrow`, `.ds-row__main`, `.ds-row__side` splits a row (`--stretch` makes its cards equally tall); `.ds-stack` piles cards (`--fill` stretches the last one); `.ds-subhead` captions a group; `.ds-head` groups breadcrumb and page header.\n- `.ds-brand`: the site's mark and name, one link in the drawer head. `.ds-brand__mark` is a `--size-brand` (28px) tile dressed like the primary raised button (`--fill-button`, `--color-button-text`, `--radius-control`, `--shadow-control`) with a `--border-width` ring of `--color-bar-alt-text` at 70%, which keeps it apart from the drawer head under every palette, holding the mark as inline SVG in the current colour; `.ds-brand__name` is the name at `--text-large` in the heading font with `--weight-heading`, `--heading-tracking` and `--heading-transform`, in `--color-bar-alt-text` because the drawer head is filled with `--fill-bar-alt`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-sidebar`: the navigation drawer. `.ds-sidebar__head` holds the brand; `.ds-sidebar__account` an `.ds-sidebar__avatar` disc with `.ds-sidebar__who` (`.ds-sidebar__name`, `.ds-sidebar__role`); `.ds-sidebar__title` is a small uppercase group heading; `.ds-sidebar__list` a ruled group of 48px `.ds-sidebar__link` rows, each an `.ds-icon` and a label, optionally a badge with `.ds-sidebar__count`. States `is-hover`, `is-current`.\n- `.ds-nav`: the app bar. `.ds-nav__row` holds `.ds-nav__title` (the current project or section), `.ds-nav__search` with `.ds-nav__input`, and `.ds-nav__tools` of round `.ds-nav__tool` icon buttons (`.ds-nav__dot` marks unread alerts; `.ds-nav__menu` is the tool that opens the drawer on small windows: a `.ds-menu` listing the side navigation). `.ds-nav__links` > `.ds-nav__item` > `.ds-nav__link` is the tab row; `is-current` is full strength with a 2px `--color-bar-text` line. Leave the tab row out on inner pages.\n- `.ds-hero`: the welcome card of a home view. `.ds-hero__body` holds `.ds-hero__label` (overline), `.ds-hero__title`, `.ds-hero__lead` and `.ds-hero__actions` (one raised button, one flat); `.ds-hero__art` is the colour block with `.ds-hero__figure`, `.ds-hero__caption` and a `.ds-hero__spark` line drawing whose `.ds-hero__area` is the tinted area under the line.\n- `.ds-page-header`: the head of an inner page, on the desk. `.ds-page-header__body` with `.ds-page-header__title` and `.ds-page-header__text`; `.ds-page-header__actions` at the right, bottom-aligned.\n- `.ds-prose`: long-form text inside a card; styles h1 to h3, paragraphs, lists, `strong`, inline `code`, `pre` and links. `.ds-prose__lead` is the 18px opening paragraph.\n- `.ds-link`: inline link with `is-visited`, `is-hover`, `is-active`, `is-focus`; `--quiet` is text-coloured. `.ds-links` lays several out in a row.\n- `.ds-button`: raised blue button, 36px, uppercase. `--secondary` raised white, `--flat` no fill or shadow and link-coloured text (inside cards, dialogs, banners), `--danger` filled with `--color-danger` for a destructive action, `--flat` with `--danger` its flat form, `--fab` the 56px accent disc holding one `.ds-icon`. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. Group with `.ds-buttons`. `.ds-fab` is the sticky wrapper that places the view's one floating button.\n- `.ds-icon`: 24px stroked inline SVG in the current colour; `--small` is 18px.\n- `.ds-form`: fields inside a card. `.ds-form__row` puts two fields on a line; `.ds-form__field` wraps a small `.ds-form__label` above a `.ds-form__control`, which has only a bottom line (`--area` for a textarea, wrapped in `.ds-form__select` for a select). `is-focus` thickens the line in `--color-focus`; `is-invalid` on the field plus `.ds-form__error` shows an error; `.ds-form__hint` is help text; `.ds-form__check` with `.ds-form__checkbox` is a checkbox. The buttons go in the card's `.ds-panel__actions--end`.\n- `.ds-table`: sits inside a `.ds-panel` with no box of its own; 48px rows divided by hairlines, a small grey bold head, `.ds-table__num` for right-aligned figures, `.ds-table__name` for the bold first column, `.ds-table__extra` for cells a phone can do without, `tr.is-current` tinted.\n- `.ds-list`: ruled two-line rows inside a `.ds-panel`. `.ds-list__item` holds an `.ds-list__avatar` disc (`--alt`, `--accent`, `--dark` pick the fill), `.ds-list__body` with `.ds-list__title` and `.ds-list__text`, and `.ds-list__meta` at the right.\n- `.ds-panel`: the card. `.ds-panel__head` (64px) holds `.ds-panel__title`, or `.ds-panel__heading` with the title and a `.ds-panel__sub` line, and optional `.ds-panel__tools` of round `.ds-panel__tool` icon buttons. `.ds-panel__body` is the padded content (`--top` when there is no head; `.ds-panel__label` is a small uppercase caption inside it). `.ds-panel__actions` is a ruled strip of flat buttons (`--end` right-aligns a form's buttons); `.ds-panel__foot` a ruled strip for a row count and pagination.\n- `.ds-chart`: an inline SVG chart inside a card body, `--size-chart` tall. Bars paint in `--color-button`; wrap grid lines in `.ds-chart__grid` and a line series in `.ds-chart__line`. `.ds-chart__legend` lists `.ds-chart__key` items with a `.ds-chart__swatch` (`--line` for the line series).\n- `.ds-stat`: one figure card. Four sit in a `.ds-stats` row. `.ds-stat__main` holds the square `.ds-stat__tile` with an icon (`.ds-stat--2`, `--3`, `--4` pick the fill) and the right-aligned `.ds-stat__figure`: a small `.ds-stat__label` above the `.ds-stat__value` (24px, tabular figures). `.ds-stat__foot` is a ruled line of grey context under it.\n- `.ds-grid`: four guide cards. Each `.ds-grid__cell` (`--2`, `--3`, `--4` pick the fill) has a flat `.ds-grid__media` head carrying a small uppercase kind label and the round white `.ds-grid__mark` that straddles its lower edge, then `.ds-grid__title`, `.ds-grid__text` and a ruled `.ds-grid__actions` strip.\n- `.ds-tabs`: a hairline-ruled row of uppercase `.ds-tabs__tab` along the top of a card; `is-current` is dark with a 2px line in `--color-link`. A tab may carry a count badge.\n- `.ds-badge`: amber count; `--new` pink, `--chip` a 32px grey chip. Status labels: `--success`, `--warning`, `--danger`, flat fills, one or two words in sentence case. Group with `.ds-badges`. `.ds-panel__key` puts such a group at the left of a `.ds-panel__foot` as the key to the status labels of the table above: the count and the three status labels.\n- `.ds-notice`: a banner sheet: an `.ds-icon`, `.ds-notice__body` with a `.ds-notice__title` and one line, and one flat button that takes the banner's text colour. `--error` uses the danger surface and danger text. Group with `.ds-notices` (`--pair` sets two side by side).\n- `.ds-pagination`: a row of `.ds-pagination__link` cells in a card foot; `is-current` is filled with the button colour, `is-disabled` is grey; previous and next are chevron icons.\n- `.ds-breadcrumb`: 12px grey trail of `.ds-breadcrumb__item` with `.ds-breadcrumb__link`, separated by drawn chevrons; the last carries `is-current`.\n- `.ds-dialog`: a white sheet with the deepest shadow, `.ds-dialog__title`, `.ds-dialog__body` and right-aligned flat buttons in `.ds-dialog__actions`. No title bar, no close cross. Sits on `.ds-overlay`.\n- `.ds-empty`: centred `.ds-empty__mark` disc, `.ds-empty__title`, `.ds-empty__text` and one flat button, inside a `.ds-panel`.\n- `.ds-footer`: one quiet line at the foot of the body column, on the desk above a hairline: `.ds-footer__list` of `.ds-footer__link` at the left, `.ds-footer__legal` at the right. It is never a dark band; the drawer is the dark element.\n- `.ds-menu`: a `<details>` whose `.ds-menu__button` (the `<summary>`: an icon, or the account's `.ds-avatar`) opens `.ds-menu__list`, a white sheet with the dialog shadow holding 48px `.ds-menu__link` rows. Use it for the account menu and the overflow (three dots) at the end of the bar; `--start` hangs the sheet from the left, for the menu button that carries the navigation on a phone.\n- `.ds-tooltip`: on an icon-only button, with a `.ds-tooltip__text` child naming it; the small dark label shows on hover and focus (`is-open` statically). It sits below; `--left`, `--right` and `--above` move it. Use it on the floating button and bar icons, never on a button that already has a text label.\n- `.ds-switch`: an on-off setting that takes effect at once: a `<span>` or `<label>` holding `.ds-switch__input` (a checkbox) and `.ds-switch__track`, which draws the track and the round thumb; `is-on` shows the on state statically. Keep the checkbox for choices that are saved with a form.\n- `.ds-progress`: a `--size-progress` line with `.ds-progress__bar` (`--low`, `--high`) for work whose length is known; `--ring` is the small ring for work whose length is not. Put it inside the card or notice it reports on.\n- `.ds-accordion`: expansion panels inside a card: `<details class=\"ds-accordion__item\">` with a `.ds-accordion__head` summary (a chevron is drawn at its right) and a `.ds-accordion__body` paragraph. Use it for short questions and answers, closed by default.\n\n## Never\n\n- `row-gap = 0px`: table and list rows touch and are divided by hairlines.\n- `block-gap <= 24px`: cards are one 24px gutter apart.\n- `content-width >= 75%`: the drawer and the cards fill the window; nothing is a centred column.\n- `uppercase-text = 0%`: labels, buttons and navigation are sentence case.\n- `underlined-links = 0%`: links are marked by colour and weight.\n- `font-weight <= 500`: emphasis is medium, never bold.\n- `font-size >= 12px`: captions are the smallest text.\n- `font-size <= 34px`: the header band title is the largest text.\n- `letter-spacing = 0px`: no tracking.\n- `font-families <= 2`: one sans-serif plus the mono for code.\n- `gradient-fills = 0%`: every fill is one flat colour.\n- `text-shadow = none`: no text has a shadow.\n- `border-radius <= 2px`: every box and control has a 2px corner; pills and discs are the only round shapes.\n- `box-shadow-blur <= 10px`: sheets have no shadow at all, buttons and the dialog reach at most 10px.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen. New content is a new card: a `.ds-panel` with a `.ds-panel__head`, placed in a `.ds-row` or a `.ds-stack` so it keeps the 24px gutter. A new figure is a `.ds-stat`; a new destination is a `.ds-sidebar__link` with an icon; a new view-level switch is a `.ds-nav__link` in the bar, a switch inside one card a `.ds-tabs` row. Use tokens only, pick heights and gaps from the `--size-*` and `--space-*` scale, and colour a block with one flat `--color-fill-*` and the text colour paired with it above. Never set content directly on the desk, add a second floating button, outline a card, centre the page in a column or put a dark band across the body.\n",
    "components.css": ":root {\n  --size-page: 100%;\n  --size-menu: 208px;\n  --size-switch: 36px;\n  --size-switch-track: 14px;\n  --size-switch-knob: 20px;\n  --size-progress: 4px;\n  --size-ring: 32px;\n  --size-brand: 28px;\n  --size-drawer: 256px;\n  --size-measure: 640px;\n  --size-bar: 64px;\n  --size-row: 48px;\n  --size-row-dense: 40px;\n  --size-control: 36px;\n  --size-fab: 56px;\n  --size-icon: 24px;\n  --size-check: 18px;\n  --size-badge: 22px;\n  --size-stripe: 4px;\n  --size-tile: 64px;\n  --size-media: 88px;\n  --size-art: 380px;\n  --size-chart: 232px;\n  --size-search: 320px;\n  --size-dialog: 440px;\n  --size-area: 96px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 16px;\n  --space-4: 24px;\n  --space-5: 32px;\n  --space-6: 48px;\n  --space-7: 64px;\n}\n\n/* menu: a sheet of choices that drops from a button in the bar */\n.ds-menu {\n  position: relative;\n  display: flex;\n  align-items: center;\n  align-self: center;\n  flex: none;\n}\n.ds-menu__button {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-width: var(--size-row-dense);\n  height: var(--size-row-dense);\n  border-radius: var(--radius-pill);\n  color: inherit;\n  font-size: var(--text-small);\n  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-menu__button::-webkit-details-marker { display: none; }\n.ds-menu__button:hover,\n.ds-menu__button.is-hover,\n.ds-menu[open] > .ds-menu__button { background: color-mix(in srgb, currentColor 16%, transparent); }\n.ds-menu__button:focus-visible,\n.ds-menu__button.is-focus { outline: var(--focus-ring); }\n.ds-menu__list {\n  position: absolute;\n  z-index: 20;\n  top: 100%;\n  right: 0;\n  min-width: var(--size-menu);\n  margin: var(--space-1) 0 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-dialog);\n  color: var(--color-text);\n}\n.ds-menu--start .ds-menu__list { right: auto; left: 0; }\n.ds-menu__link,\n.ds-menu__link:hover {\n  display: flex;\n  align-items: center;\n  min-height: var(--size-row);\n  padding: 0 var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  text-decoration: none;\n  text-transform: none;\n  white-space: nowrap;\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover { background: var(--color-surface-alt); }\n.ds-menu__link:focus-visible { outline: var(--focus-ring); outline-offset: calc(var(--border-width-strong) * -1); }\n\n/* tooltip: the name of an icon button, shown on hover and focus */\n.ds-tooltip { position: relative; }\n.ds-tooltip__text {\n  position: absolute;\n  z-index: 30;\n  top: calc(100% + var(--space-2));\n  left: 50%;\n  transform: translateX(-50%);\n  padding: var(--space-1) var(--space-2);\n  border-radius: var(--radius-control);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  text-transform: none;\n  white-space: nowrap;\n  visibility: hidden;\n  opacity: 0;\n  pointer-events: none;\n}\n.ds-tooltip:hover > .ds-tooltip__text,\n.ds-tooltip:focus-visible > .ds-tooltip__text,\n.ds-tooltip.is-open > .ds-tooltip__text { visibility: visible; opacity: 1; }\n.ds-tooltip--left > .ds-tooltip__text {\n  top: 50%;\n  right: calc(100% + var(--space-2));\n  left: auto;\n  transform: translateY(-50%);\n}\n\n/* switch: an on-off setting drawn over a checkbox */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  flex: none;\n  width: var(--size-switch);\n  height: var(--size-switch-knob);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  width: 100%;\n  height: var(--size-switch-track);\n  border-radius: var(--radius-pill);\n  background: var(--color-border-strong);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: var(--size-switch-knob);\n  height: var(--size-switch-knob);\n  border-radius: 50%;\n  background: var(--fill-button-secondary);\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch.is-on .ds-switch__track { background: color-mix(in srgb, var(--color-button) 50%, transparent); }\n.ds-switch__input:checked + .ds-switch__track::after,\n.ds-switch.is-on .ds-switch__track::after {\n  left: calc(100% - var(--size-switch-knob));\n  background: var(--fill-button);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch.is-focus .ds-switch__track { outline: var(--focus-ring); outline-offset: var(--border-width-strong); }\n\n/* progress: a thin line, or a ring while the length is unknown */\n.ds-progress {\n  display: block;\n  height: var(--size-progress);\n  margin: var(--space-3) 0 var(--space-1);\n  overflow: hidden;\n  background: color-mix(in srgb, var(--color-button) 30%, transparent);\n}\n.ds-progress__bar {\n  display: block;\n  width: 60%;\n  height: 100%;\n  background: var(--fill-button);\n}\n.ds-progress__bar--low { width: 30%; }\n\n/* accordion: expansion panels inside a sheet */\n.ds-accordion {\n  margin: var(--space-3) 0 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item + .ds-accordion__item { border-top: var(--border-width) var(--border-style) var(--color-border); }\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  min-height: var(--size-row);\n  color: var(--color-text);\n  font-size: var(--text-ui);\n  list-style: none;\n  cursor: pointer;\n}\n.ds-accordion__head::-webkit-details-marker { display: none; }\n.ds-accordion__head::after {\n  content: \"\";\n  flex: none;\n  width: var(--space-2);\n  height: var(--space-2);\n  margin: 0 var(--space-1);\n  border-right: var(--border-width-strong) var(--border-style) var(--color-text-muted);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-text-muted);\n  transform: rotate(45deg);\n}\n.ds-accordion__item[open] > .ds-accordion__head::after { transform: rotate(-135deg); }\n.ds-accordion__head:focus-visible { outline: var(--focus-ring); }\n.ds-accordion__body {\n  margin: 0;\n  padding: 0 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n\n/* shell */\n.ds-page {\n  margin: 0;\n  min-width: 0;\n  width: var(--size-page);\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  -webkit-font-smoothing: antialiased;\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after { box-sizing: border-box; }\n\n.ds-icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  flex: none;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 2;\n}\n.ds-icon--small {\n  width: var(--size-check);\n  height: var(--size-check);\n}\n\n/* app frame: drawer and body side by side */\n.ds-app {\n  display: grid;\n  grid-template-columns: var(--size-drawer) minmax(0, 1fr);\n  align-items: stretch;\n}\n.ds-body {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n.ds-main {\n  display: grid;\n  flex: 1 1 auto;\n  align-content: start;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: var(--space-4) var(--space-4) var(--space-6);\n}\n.ds-row {\n  display: grid;\n  grid-template-columns: repeat(12, minmax(0, 1fr));\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-row--stretch { align-items: stretch; }\n.ds-row__wide { grid-column: span 8; min-width: 0; }\n.ds-row__main { grid-column: span 7; min-width: 0; }\n.ds-row__side { grid-column: span 5; min-width: 0; }\n.ds-row__narrow { grid-column: span 4; min-width: 0; }\n.ds-stack {\n  display: grid;\n  gap: var(--space-4);\n  align-content: start;\n}\n.ds-stack--fill {\n  grid-template-rows: auto minmax(0, 1fr);\n  align-content: stretch;\n}\n.ds-subhead {\n  margin: var(--space-2) 0 calc(var(--space-2) * -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  text-transform: var(--ui-transform);\n}\n\n/* sidebar: the navigation drawer */\n.ds-sidebar {\n  position: relative;\n  z-index: 2;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  background: var(--fill-inverse);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n}\n.ds-sidebar__head {\n  display: flex;\n  align-items: center;\n  flex: none;\n  height: var(--size-bar);\n  padding: 0 var(--space-4);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  text-shadow: var(--shadow-text);\n}\n\n/* brand: mark and name, in the drawer head */\n.ds-brand {\n  display: flex;\n  align-items: center;\n  gap: calc(var(--space-2) + var(--space-1));\n  min-width: 0;\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  line-height: 1.2;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-brand);\n  height: var(--size-brand);\n  flex: none;\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar-alt-text) 70%, transparent);\n  border-radius: var(--radius-control);\n  background: var(--color-button);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 72%;\n  height: 72%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-sidebar__account {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-4) var(--space-4) var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 12%, transparent);\n}\n.ds-sidebar__avatar {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-row-dense);\n  height: var(--size-row-dense);\n  flex: none;\n  border-radius: 50%;\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n}\n.ds-sidebar__who { min-width: 0; }\n.ds-sidebar__name {\n  display: block;\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1.43;\n}\n.ds-sidebar__role {\n  display: block;\n  color: color-mix(in srgb, var(--color-inverse-text) 70%, transparent);\n  font-size: var(--text-small);\n  line-height: 1.43;\n}\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4) var(--space-1);\n  color: color-mix(in srgb, var(--color-inverse-text) 70%, transparent);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 12%, transparent);\n}\n.ds-sidebar__list:last-child { border-bottom: 0; }\n.ds-sidebar__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  height: var(--size-row);\n  padding: 0 var(--space-3) 0 calc(var(--space-4) - var(--size-stripe));\n  border-left: var(--size-stripe) var(--border-style) transparent;\n  color: color-mix(in srgb, var(--color-inverse-text) 70%, transparent);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  background: color-mix(in srgb, var(--color-inverse-text) 8%, transparent);\n  color: var(--color-inverse-text);\n}\n.ds-sidebar__link.is-current {\n  border-left-color: var(--color-accent);\n  background: color-mix(in srgb, var(--color-inverse-text) 12%, transparent);\n  color: var(--color-inverse-text);\n}\n.ds-sidebar__count { margin-left: auto; }\n\n/* nav: the app bar */\n.ds-nav {\n  position: relative;\n  z-index: 1;\n  background: var(--fill-bar);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  height: var(--size-bar);\n  padding: 0 var(--space-3) 0 var(--space-4);\n}\n.ds-nav__title {\n  flex: 1 1 auto;\n  min-width: 0;\n  margin: 0;\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  line-height: 1.2;\n  text-decoration: none;\n}\n.ds-nav__search {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  flex: 0 1 var(--size-search);\n  height: var(--size-control);\n  padding: 0 var(--space-2);\n  border-radius: var(--radius-control);\n  background: color-mix(in srgb, var(--color-bar-text) 16%, transparent);\n  color: color-mix(in srgb, var(--color-bar-text) 87%, transparent);\n}\n.ds-nav__input {\n  flex: 1 1 auto;\n  min-width: 0;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  color: inherit;\n  font-family: var(--font-body);\n  font-size: var(--text-ui);\n  text-shadow: none;\n  appearance: none;\n}\n.ds-nav__input::placeholder { color: inherit; opacity: 1; }\n.ds-nav__input:focus { outline: 0; }\n.ds-nav__tools {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n}\n.ds-nav__tool {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-row-dense);\n  height: var(--size-row-dense);\n  border-radius: 50%;\n  color: var(--color-bar-text);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-nav__tool:hover,\n.ds-nav__tool.is-hover { background: color-mix(in srgb, var(--color-bar-text) 16%, transparent); }\n.ds-nav__tool.ds-nav__menu { display: none; }\n.ds-nav__dot {\n  position: absolute;\n  top: var(--space-2);\n  right: var(--space-2);\n  width: var(--space-2);\n  height: var(--space-2);\n  border-radius: 50%;\n  background: var(--color-accent-alt);\n}\n.ds-nav__links {\n  display: flex;\n  height: var(--size-row);\n  margin: 0;\n  padding: 0 var(--space-2);\n  list-style: none;\n}\n.ds-nav__item { display: flex; }\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  padding: 0 var(--space-3);\n  border-top: var(--border-width-strong) var(--border-style) transparent;\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  color: color-mix(in srgb, var(--color-bar-text) 70%, transparent);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover { color: var(--color-bar-text); }\n.ds-nav__link.is-current {\n  color: var(--color-bar-text);\n  border-bottom-color: var(--color-bar-text);\n}\n\n/* hero: the welcome card */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-art);\n  overflow: hidden;\n  border-radius: var(--radius-page);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-hero__body { padding: var(--space-5) var(--space-5) var(--space-4); }\n.ds-hero__label {\n  margin: 0 0 var(--space-2);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n}\n.ds-hero__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  max-width: var(--size-measure);\n  margin: var(--space-2) 0 var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n  line-height: 1.5;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-hero__art {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  background: var(--color-fill-1);\n  color: var(--color-bar-text);\n}\n.ds-hero__figure {\n  padding: var(--space-4) var(--space-4) 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: 1.18;\n  font-variant-numeric: tabular-nums;\n}\n.ds-hero__caption {\n  padding: 0 var(--space-4);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n  opacity: 0.87;\n}\n.ds-hero__spark {\n  display: block;\n  flex: 1 1 auto;\n  width: 100%;\n  min-height: var(--size-media);\n  margin-top: var(--space-2);\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 2;\n}\n.ds-hero__area { opacity: 0.24; }\n\n/* page header */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n.ds-page-header__body { flex: 1 1 0; min-width: 0; }\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: 1.18;\n  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-page-header__text {\n  max-width: var(--size-measure);\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-base);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex: none;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n.ds-head {\n  display: grid;\n  gap: var(--space-2);\n}\n\n/* typography */\n.ds-prose {\n  max-width: var(--size-measure);\n  color: var(--color-text);\n  font-size: var(--text-base);\n  line-height: var(--line-body);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-4) 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  text-transform: var(--heading-transform);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-prose h1 { margin-top: 0; font-size: var(--text-h1); line-height: 1.18; }\n.ds-prose h2 { font-size: var(--text-h2); }\n.ds-prose h3 { font-size: var(--text-h3); font-weight: var(--weight-bold); }\n.ds-prose p { margin: 0 0 var(--space-3); }\n.ds-prose ul,\n.ds-prose ol { margin: 0 0 var(--space-3); padding-left: var(--space-4); }\n.ds-prose li { margin: 0; }\n.ds-prose strong { font-weight: var(--weight-bold); }\n.ds-prose code {\n  padding: 0 var(--space-1);\n  border-radius: var(--radius-control);\n  background: var(--color-surface-strong);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-prose pre {\n  margin: 0;\n  padding: var(--space-3);\n  overflow: auto;\n  border-radius: var(--radius-panel);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-prose pre code { padding: 0; background: transparent; font-size: inherit; }\n.ds-prose__lead {\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n  line-height: 1.5;\n}\n.ds-prose a { color: var(--color-link); text-decoration: var(--link-decoration); }\n.ds-prose a:hover { color: var(--color-link-hover); text-decoration: var(--link-decoration-hover); }\n\n/* links */\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-4);\n}\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited { color: var(--color-link-visited); }\n.ds-link:hover,\n.ds-link.is-hover { color: var(--color-link-hover); text-decoration: var(--link-decoration-hover); }\n.ds-link:active,\n.ds-link.is-active { color: var(--color-link-active); }\n.ds-link:focus-visible,\n.ds-link.is-focus { outline: var(--focus-ring); }\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  font-weight: var(--weight-body);\n  text-decoration: var(--link-decoration-quiet);\n}\n\n/* buttons */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-width: calc(var(--size-control) + var(--size-control) + var(--space-3));\n  height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-3);\n  border: 0;\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\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  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\n}\n.ds-button:active,\n.ds-button.is-active { box-shadow: var(--shadow-control-pressed); }\n.ds-button:focus-visible,\n.ds-button.is-focus { outline: var(--focus-ring); outline-offset: var(--border-width-strong); }\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--flat,\n.ds-button--flat:active,\n.ds-button--flat.is-active {\n  background: transparent;\n  box-shadow: none;\n  color: var(--color-link);\n  text-shadow: none;\n}\n.ds-button--flat:hover,\n.ds-button--flat.is-hover {\n  background: color-mix(in srgb, var(--color-text-muted) 20%, transparent);\n  box-shadow: none;\n  color: var(--color-link);\n}\n.ds-button--danger {\n  background: var(--color-danger);\n  color: var(--color-button-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: color-mix(in srgb, var(--color-danger) 88%, var(--color-shadow));\n  color: var(--color-button-hover-text);\n}\n.ds-button--flat.ds-button--danger,\n.ds-button--flat.ds-button--danger:active,\n.ds-button--flat.ds-button--danger.is-active {\n  background: transparent;\n  color: var(--color-danger);\n}\n.ds-button--flat.ds-button--danger:hover,\n.ds-button--flat.ds-button--danger.is-hover {\n  background: color-mix(in srgb, var(--color-danger) 12%, transparent);\n  color: var(--color-danger);\n}\n.ds-button--fab,\n.ds-button--fab:hover,\n.ds-button--fab.is-hover {\n  width: var(--size-fab);\n  min-width: 0;\n  height: var(--size-fab);\n  padding: 0;\n  border-radius: 50%;\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  text-shadow: none;\n}\n.ds-button--fab { box-shadow: var(--shadow-control-hover); }\n.ds-button:disabled,\n.ds-button.is-disabled,\n.ds-button.is-disabled:hover {\n  background: var(--color-disabled);\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  text-shadow: none;\n  cursor: default;\n}\n\n/* the floating action of a view: rides the bottom right corner */\n.ds-fab {\n  position: sticky;\n  z-index: 3;\n  bottom: var(--space-4);\n  display: flex;\n  justify-content: flex-end;\n  height: var(--size-fab);\n  margin: calc(var(--space-3) * -1) 0 calc(var(--space-4) * -1);\n  pointer-events: none;\n}\n.ds-fab .ds-button { pointer-events: auto; }\n\n/* form */\n.ds-form {\n  display: grid;\n  gap: var(--space-4);\n  color: var(--color-text);\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-form__field { display: block; }\n.ds-form__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: 1.25;\n}\n.ds-form__control {\n  display: block;\n  width: 100%;\n  height: var(--size-control);\n  margin: 0;\n  padding: var(--space-1) calc(var(--radius-control) * 2);\n  border: 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  line-height: var(--line-body);\n  appearance: none;\n  transition: var(--transition);\n}\n.ds-form__control:focus,\n.ds-form__control.is-focus {\n  outline: 0;\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-focus);\n  padding-bottom: calc(var(--space-1) - var(--border-width));\n}\n.ds-form__control--area {\n  height: var(--size-area);\n  resize: vertical;\n}\n.ds-form__select {\n  position: relative;\n  display: block;\n}\n.ds-form__select::after {\n  content: \"\";\n  position: absolute;\n  right: var(--space-1);\n  top: calc(var(--size-control) / 2 - var(--border-width-strong));\n  border: var(--size-stripe) var(--border-style) transparent;\n  border-top-color: var(--color-text-muted);\n  border-bottom: 0;\n  pointer-events: none;\n}\n.ds-form__hint,\n.ds-form__error {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: 1.25;\n}\n.ds-form__field.is-invalid .ds-form__label,\n.ds-form__error { color: var(--color-danger); }\n.ds-form__field.is-invalid .ds-form__control {\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-danger);\n  padding-bottom: calc(var(--space-1) - var(--border-width));\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-size: var(--text-ui);\n}\n.ds-form__checkbox {\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  flex: none;\n  accent-color: var(--color-button);\n}\n\n/* panel: the card */\n.ds-panel {\n  min-width: 0;\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  min-height: var(--size-bar);\n  padding: 0 var(--space-2) 0 var(--space-4);\n}\n.ds-panel__heading { min-width: 0; }\n.ds-panel__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-bold);\n  line-height: 1.3;\n}\n.ds-panel__sub {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: 1.43;\n}\n.ds-panel__tools {\n  display: flex;\n  align-items: center;\n  flex: none;\n  gap: var(--space-1);\n}\n.ds-panel__tool {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-row-dense);\n  height: var(--size-row-dense);\n  border-radius: 50%;\n  color: var(--color-text-muted);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-panel__tool:hover,\n.ds-panel__tool.is-hover { background: color-mix(in srgb, var(--color-text-muted) 20%, transparent); }\n.ds-panel__body {\n  padding: 0 var(--space-4) var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n  line-height: 1.43;\n}\n.ds-panel__body--top { padding-top: var(--space-4); }\n.ds-panel__body p { margin: 0 0 var(--space-3); }\n.ds-panel__body p:last-child { margin-bottom: 0; }\n.ds-panel__body .ds-panel__label {\n  margin: var(--space-4) 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n}\n.ds-panel__body .ds-panel__label:first-child { margin-top: 0; }\n.ds-panel__actions {\n  display: flex;\n  gap: var(--space-2);\n  padding: var(--space-2);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__actions--end { justify-content: flex-end; }\n.ds-panel__foot {\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  min-height: calc(var(--size-row) + var(--space-2));\n  padding: 0 var(--space-3) 0 var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-panel__key { margin-right: auto; }\n\n/* chart */\n.ds-chart {\n  display: block;\n  width: 100%;\n  height: var(--size-chart);\n  color: var(--color-button);\n  fill: none;\n  stroke: none;\n}\n.ds-chart__grid { color: var(--color-border); }\n.ds-chart__line { color: var(--color-accent-alt); }\n.ds-chart__legend {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin: var(--space-3) 0 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n}\n.ds-chart__key {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-chart__swatch {\n  width: calc(var(--space-2) + var(--space-1));\n  height: calc(var(--space-2) + var(--space-1));\n  border-radius: var(--radius-control);\n  background: var(--color-button);\n}\n.ds-chart__swatch--line { background: var(--color-accent-alt); }\n\n/* table */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  height: var(--size-row);\n  padding: 0 var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  text-align: left;\n  vertical-align: middle;\n}\n.ds-table th {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-table tbody tr:last-child td { border-bottom: 0; }\n.ds-table tbody tr:hover,\n.ds-table tbody tr.is-hover { background: var(--color-surface-strong); }\n.ds-table tbody tr.is-current { background: var(--color-surface-alt); }\n.ds-table .ds-table__num { text-align: right; font-variant-numeric: tabular-nums; }\n.ds-table__name {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* list */\n.ds-list {\n  margin: 0;\n  padding: 0 0 var(--space-2);\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-height: calc(var(--size-row) + var(--space-3));\n  padding: var(--space-2) var(--space-4);\n}\n.ds-list__item + .ds-list__item { border-top: var(--border-width) var(--border-style) var(--color-border-muted); }\n.ds-list__avatar {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-row-dense);\n  height: var(--size-row-dense);\n  flex: none;\n  border-radius: 50%;\n  background: var(--color-fill-3);\n  color: var(--color-bar-text);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n}\n.ds-list__avatar--alt { background: var(--color-fill-1); }\n.ds-list__avatar--accent { background: var(--color-fill-2); color: var(--color-accent-text); }\n.ds-list__avatar--dark { background: var(--color-fill-4); color: var(--color-inverse-text); }\n.ds-list__body { flex: 1 1 0; min-width: 0; }\n.ds-list__title {\n  display: block;\n  color: var(--color-link-quiet);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1.43;\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:hover { color: var(--color-link-hover); }\n.ds-list__text {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: 1.43;\n}\n.ds-list__meta {\n  flex: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* stats: four small cards with a colour tile */\n.ds-stats {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat {\n  min-width: 0;\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-stat__main {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-3);\n}\n.ds-stat__tile {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-tile);\n  height: var(--size-tile);\n  flex: none;\n  border-radius: var(--radius-panel);\n  background: var(--color-fill-1);\n  color: var(--color-bar-text);\n}\n.ds-stat--2 .ds-stat__tile { background: var(--color-fill-2); color: var(--color-accent-text); }\n.ds-stat--3 .ds-stat__tile { background: var(--color-fill-3); }\n.ds-stat--4 .ds-stat__tile { background: var(--color-fill-4); color: var(--color-inverse-text); }\n.ds-stat__figure {\n  flex: 1 1 0;\n  min-width: 0;\n  text-align: right;\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-stat__value {\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: 1.18;\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__foot {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0 var(--space-3);\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n\n/* grid: cards with a colour head and a round mark on its edge */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  border-radius: var(--radius-page);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__media {\n  position: relative;\n  height: var(--size-media);\n  padding: var(--space-3);\n  border-radius: var(--radius-page) var(--radius-page) 0 0;\n  background: var(--color-fill-1);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n}\n.ds-grid__cell--2 .ds-grid__media { background: var(--color-fill-2); color: var(--color-accent-text); }\n.ds-grid__cell--3 .ds-grid__media { background: var(--color-fill-3); }\n.ds-grid__cell--4 .ds-grid__media { background: var(--color-fill-4); color: var(--color-inverse-text); }\n.ds-grid__mark {\n  position: absolute;\n  right: var(--space-3);\n  bottom: calc(var(--size-row-dense) / -2);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-row-dense);\n  height: var(--size-row-dense);\n  border-radius: 50%;\n  background: var(--color-surface);\n  box-shadow: var(--shadow-control);\n  color: var(--color-text);\n}\n.ds-grid__title {\n  margin: 0;\n  padding: var(--space-4) var(--space-3) 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-grid__text {\n  flex: 1 1 auto;\n  margin: 0;\n  padding: var(--space-1) var(--space-3) var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n  line-height: 1.43;\n}\n.ds-grid__actions {\n  padding: var(--space-2);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* tabs */\n.ds-tabs {\n  display: flex;\n  margin: 0;\n  padding: 0 var(--space-2);\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n}\n.ds-tabs__tab {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  height: var(--size-row);\n  padding: 0 var(--space-3);\n  margin-bottom: calc(var(--border-width) * -1);\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover { color: var(--color-text); }\n.ds-tabs__tab.is-current {\n  color: var(--color-text);\n  border-bottom-color: var(--color-link);\n}\n\n/* badge */\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-badge);\n  height: var(--size-badge);\n  padding: 0 var(--space-2);\n  border-radius: var(--radius-pill);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  white-space: nowrap;\n}\n.ds-badge--new { background: var(--color-accent-alt); color: var(--color-button-text); }\n.ds-badge--success { background: var(--color-success); color: var(--color-button-text); }\n.ds-badge--warning { background: var(--color-warning); color: var(--color-accent-text); }\n.ds-badge--danger { background: var(--color-danger); color: var(--color-button-text); }\n.ds-badge--chip {\n  height: var(--space-5);\n  padding: 0 calc(var(--space-2) + var(--space-1));\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  font-weight: var(--weight-body);\n}\n\n/* notice: a banner sheet with an icon and one action */\n.ds-notices {\n  display: grid;\n  gap: var(--space-3);\n}\n.ds-notice {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-height: var(--size-bar);\n  padding: var(--space-2) var(--space-2) var(--space-2) var(--space-3);\n  border-radius: var(--radius-panel);\n  background: var(--color-notice);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-notice-text);\n  font-size: var(--text-ui);\n  line-height: 1.43;\n}\n.ds-notice__body { flex: 1 1 0; min-width: 0; }\n.ds-notice__title {\n  display: block;\n  font-weight: var(--weight-bold);\n}\n.ds-notice .ds-button--flat,\n.ds-notice .ds-button--flat:hover { color: inherit; }\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n}\n.ds-pagination__link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control);\n  height: var(--size-control);\n  padding: 0 var(--space-2);\n  border-radius: var(--radius-pill);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover { background: color-mix(in srgb, var(--color-text-muted) 20%, transparent); }\n.ds-pagination__link.is-current {\n  background: var(--fill-button);\n  color: var(--color-button-text);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  background: transparent;\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-breadcrumb__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"\";\n  width: calc(var(--space-1) + var(--border-width-strong));\n  height: calc(var(--space-1) + var(--border-width-strong));\n  border-top: var(--border-width) var(--border-style) currentColor;\n  border-right: var(--border-width) var(--border-style) currentColor;\n  transform: rotate(45deg);\n}\n.ds-breadcrumb__link { color: inherit; text-decoration: var(--link-decoration-quiet); }\n.ds-breadcrumb__link:hover { color: var(--color-link-hover); }\n.ds-breadcrumb__item.is-current { color: var(--color-text); }\n\n/* dialog */\n.ds-overlay {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  padding: var(--space-6) var(--space-4);\n  border-radius: var(--radius-panel);\n  background: var(--color-overlay);\n}\n.ds-dialog {\n  width: 100%;\n  max-width: var(--size-dialog);\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-4) var(--space-4) 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-dialog__body {\n  padding: var(--space-3) var(--space-4) var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-base);\n}\n.ds-dialog__body p { margin: 0; }\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding: var(--space-2);\n}\n\n/* empty */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  padding: var(--space-5) var(--space-4);\n  color: var(--color-text-muted);\n  text-align: center;\n}\n.ds-empty__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-fab);\n  height: var(--size-fab);\n  margin-bottom: var(--space-3);\n  border-radius: 50%;\n  background: var(--color-surface-strong);\n  color: var(--color-text-muted);\n}\n.ds-empty__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-bold);\n  line-height: 1.3;\n}\n.ds-empty__text {\n  margin: var(--space-1) 0 var(--space-3);\n  font-size: var(--text-ui);\n}\n\n/* footer: one quiet line at the foot of the body */\n.ds-footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  min-height: var(--size-row);\n  padding: 0 var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-footer__list {\n  display: flex;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-text-muted);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover { color: var(--color-link-hover); }\n.ds-footer__legal { margin: 0; }\n\n.ds-notices--pair { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n.ds-table .ds-badge { vertical-align: middle; }\n\n/* views */\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.ds-view { flex: 1 1 auto; }\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#dashboard\"],\n.ds-page:has(#dashboard:target) .ds-nav__link[href=\"#dashboard\"],\n.ds-page:has(#channels:target) .ds-nav__link[href=\"#channels\"],\n.ds-page:has(#channel:target) .ds-nav__link[href=\"#channels\"],\n.ds-page:has(#alerts:target) .ds-nav__link[href=\"#alerts\"],\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n  color: var(--color-bar-text);\n  border-bottom-color: var(--color-bar-text);\n}\n.ds-page:not(:has(.ds-view:target)) .ds-sidebar__link[href=\"#dashboard\"],\n.ds-page:has(#dashboard:target) .ds-sidebar__link[href=\"#dashboard\"],\n.ds-page:has(#channels:target) .ds-sidebar__link[href=\"#channels\"],\n.ds-page:has(#channel:target) .ds-sidebar__link[href=\"#channel\"],\n.ds-page:has(#alerts:target) .ds-sidebar__link[href=\"#alerts\"],\n.ds-page:has(#guide:target) .ds-sidebar__link[href=\"#guide\"] {\n  border-left-color: var(--color-accent);\n  background: color-mix(in srgb, var(--color-inverse-text) 12%, transparent);\n  color: var(--color-inverse-text);\n}\n\n@media (max-width: 900px) {\n  .ds-app { grid-template-columns: minmax(0, 1fr); }\n  .ds-sidebar__account,\n  .ds-sidebar__title,\n  .ds-sidebar__list { display: none; }\n  .ds-nav__tool.ds-nav__menu { display: flex; }\n  .ds-nav__search { display: none; }\n  .ds-nav__links { overflow: auto; }\n  .ds-nav__link { white-space: nowrap; }\n  .ds-hero { grid-template-columns: minmax(0, 1fr); }\n  .ds-stats,\n  .ds-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  .ds-row__wide,\n  .ds-row__main,\n  .ds-row__side,\n  .ds-row__narrow { grid-column: span 12; }\n  .ds-notices--pair { grid-template-columns: minmax(0, 1fr); }\n  .ds-page-header { flex-direction: column; align-items: flex-start; }\n  .ds-tabs { overflow: auto; }\n  .ds-tabs__tab { white-space: nowrap; }\n  .ds-footer { flex-direction: column; align-items: flex-start; padding: var(--space-3) var(--space-4); }\n}\n@media (max-width: 600px) {\n  .ds-sidebar__head { padding: 0 var(--space-3); }\n  .ds-nav__row { padding: 0 var(--space-2); gap: var(--space-2); }\n  .ds-nav__links { padding: 0; }\n  .ds-nav__link { padding: 0 calc(var(--space-2) + var(--space-1)); }\n  .ds-main { gap: var(--space-3); padding: var(--space-3) var(--space-3) var(--space-5); }\n  .ds-row { gap: var(--space-3); }\n  .ds-hero__body { padding: var(--space-4) var(--space-3) var(--space-3); }\n  .ds-hero__title { font-size: var(--text-h1); }\n  .ds-hero__lead { font-size: var(--text-base); }\n  .ds-stats,\n  .ds-grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-3); }\n  .ds-form__row { grid-template-columns: minmax(0, 1fr); }\n  .ds-panel__head { padding-left: var(--space-3); }\n  .ds-panel__body { padding: 0 var(--space-3) var(--space-3); }\n  .ds-panel__body--top { padding-top: var(--space-3); }\n  .ds-panel__tools .ds-badge--chip { display: none; }\n  .ds-table th,\n  .ds-table td { padding: 0 var(--space-2); }\n  .ds-table .ds-table__extra { display: none; }\n  .ds-list__item { padding: var(--space-2) var(--space-3); }\n  .ds-panel__foot { flex-wrap: wrap; gap: var(--space-2); padding: var(--space-2) var(--space-3); }\n  .ds-notice { flex-wrap: wrap; }\n  .ds-overlay { padding: var(--space-4) var(--space-3); }\n  .ds-footer__list { flex-wrap: wrap; gap: var(--space-2) var(--space-3); }\n}\n\n/* phones: at the end of the page the floating button sits below the last card, not on its corner */\n@media (max-width: 600px) {\n  .ds-fab {\n    margin: 0;\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 console</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<div class=\"ds-app\">\n\n  <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n    <div class=\"ds-sidebar__head\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#\">\n        <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M4 3h8.5v8.5H21V21H4z\"/><path d=\"M14.5 3l6.5 6.5h-6.5z\" fill-opacity=\"0.55\"/></svg></span>\n        <span class=\"ds-brand__name\">chronoskin</span>\n      </a>\n    </div>\n    <div class=\"ds-sidebar__account\">\n      <span class=\"ds-sidebar__avatar\">MO</span>\n      <span class=\"ds-sidebar__who\">\n        <span class=\"ds-sidebar__name\">Mira Okafor</span>\n        <span class=\"ds-sidebar__role\">Project owner</span>\n      </span>\n    </div>\n    <ul class=\"ds-sidebar__list\">\n      <li><a class=\"ds-sidebar__link\" href=\"#dashboard\">\n        <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 13h6V4H4zM14 20h6v-9h-6zM4 20h6v-3H4zM14 7h6V4h-6z\" stroke=\"currentColor\" fill=\"none\"/></svg>\n        Dashboard</a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#channels\">\n        <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 6h16M4 12h16M4 18h10\" stroke=\"currentColor\" fill=\"none\"/></svg>\n        Channels <span class=\"ds-badge ds-sidebar__count\">5</span></a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#channel\">\n        <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 14a4 4 0 1 1 3.5-6H20v4h-2v3h-4v-3h-2.5A4 4 0 0 1 8 14z\" stroke=\"currentColor\" fill=\"none\"/></svg>\n        Push, phones</a></li>\n      <li><a class=\"ds-sidebar__link\" href=\"#alerts\">\n        <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 17V11a6 6 0 0 1 12 0v6l2 2H4zM10 21h4\" stroke=\"currentColor\" fill=\"none\"/></svg>\n        Alerts</a></li>\n    </ul>\n    <h2 class=\"ds-sidebar__title\">Documentation</h2>\n    <ul class=\"ds-sidebar__list\">\n      <li><a class=\"ds-sidebar__link\" href=\"#guide\">\n        <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 7l-5 5 5 5M15 7l5 5-5 5\" stroke=\"currentColor\" fill=\"none\"/></svg>\n        Quick start</a></li>\n    </ul>\n  </aside>\n\n  <div class=\"ds-body\">\n\n    <header class=\"ds-nav\" data-component=\"nav\">\n      <div class=\"ds-nav__row\">\n        <details class=\"ds-menu ds-menu--start ds-nav__tool ds-nav__menu\" data-component=\"menu\">\n          <summary class=\"ds-menu__button\" aria-label=\"Menu\"><svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 7h16M4 12h16M4 17h16\" stroke=\"currentColor\" fill=\"none\"/></svg></summary>\n          <ul class=\"ds-menu__list\">\n            <li><a class=\"ds-menu__link\" href=\"#dashboard\">Dashboard</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#channels\">Channels</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#channel\">Push, phones</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#alerts\">Alerts</a></li>\n            <li><a class=\"ds-menu__link\" href=\"#guide\">Quick start</a></li>\n          </ul>\n        </details>\n        <a class=\"ds-nav__title\" href=\"#dashboard\">Night desk</a>\n        <label class=\"ds-nav__search\">\n          <svg class=\"ds-icon ds-icon--small\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M10.500 17a6.500 6.500 0 1 1 0-13 6.500 6.500 0 0 1 0 13zM15.500 15.500L20 20\" stroke=\"currentColor\" fill=\"none\"/></svg>\n          <input class=\"ds-nav__input\" type=\"search\" placeholder=\"Search channels and guides\" aria-label=\"Search\">\n        </label>\n        <div class=\"ds-nav__tools\">\n          <a class=\"ds-nav__tool ds-tooltip\" href=\"#alerts\" aria-label=\"Alerts\"><span class=\"ds-tooltip__text\" role=\"tooltip\">Alerts</span>\n            <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 17V11a6 6 0 0 1 12 0v6l2 2H4zM10 21h4\" stroke=\"currentColor\" fill=\"none\"/></svg>\n            <span class=\"ds-nav__dot\"></span>\n          </a>\n          <a class=\"ds-nav__tool ds-tooltip\" href=\"#guide\" aria-label=\"Help\"><span class=\"ds-tooltip__text\" role=\"tooltip\">Help</span>\n            <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 21a9 9 0 1 1 0-18 9 9 0 0 1 0 18zM9.500 9.500a2.500 2.500 0 1 1 3.500 2.300c-.6.300-1 .8-1 1.700M12 17v.5\" stroke=\"currentColor\" fill=\"none\"/></svg>\n          </a>\n          <details class=\"ds-menu\" data-component=\"menu\">\n            <summary class=\"ds-menu__button\" aria-label=\"More\"><svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5\" r=\"1\" stroke=\"currentColor\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"1\" stroke=\"currentColor\" fill=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" stroke=\"currentColor\" fill=\"none\"/></svg></summary>\n            <ul class=\"ds-menu__list\">\n              <li><a class=\"ds-menu__link\" href=\"#alerts\">Set an alert</a></li>\n              <li><a class=\"ds-menu__link\" href=\"#channel\">Channel settings</a></li>\n              <li><a class=\"ds-menu__link\" href=\"#guide\">Quick start</a></li>\n            </ul>\n          </details>\n        </div>\n      </div>\n      <ul class=\"ds-nav__links\">\n        <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#dashboard\">Overview</a></li>\n        <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#channels\">Channels</a></li>\n        <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#alerts\">Alerts</a></li>\n        <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#guide\">Quick start</a></li>\n      </ul>\n    </header>\n\n    <section class=\"ds-view ds-view--home\" id=\"dashboard\">\n      <div class=\"ds-main\">\n\n        <div class=\"ds-hero\" data-component=\"hero\">\n          <div class=\"ds-hero__body\">\n            <p class=\"ds-hero__label\">Project overview</p>\n            <h1 class=\"ds-hero__title\">Night desk</h1>\n            <p class=\"ds-hero__lead\">Four channels are sending. Add a channel, or follow the quick start to send a first message from your own code.</p>\n            <div class=\"ds-hero__actions\">\n              <a class=\"ds-button\" href=\"#guide\">Read the quick start</a>\n              <a class=\"ds-button ds-button--flat\" href=\"#channels\">See the channels</a>\n            </div>\n          </div>\n          <div class=\"ds-hero__art\">\n            <span class=\"ds-hero__figure\">1,284,310</span>\n            <span class=\"ds-hero__caption\">Messages sent in the last seven days</span>\n            <svg class=\"ds-hero__spark\" viewBox=\"0 0 380 120\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n            <path class=\"ds-hero__area\" d=\"M0 120V84L54 70l54 14 54-34 54 18 54-40 54 22 56-30v96z\" fill=\"currentColor\" stroke=\"none\"/>\n            <path d=\"M0 84L54 70l54 14 54-34 54 18 54-40 54 22 56-30\" stroke=\"currentColor\" fill=\"none\" vector-effect=\"non-scaling-stroke\"/>\n          </svg>\n          </div>\n        </div>\n\n        <ul class=\"ds-stats\" data-component=\"stats\">\n          <li class=\"ds-stat\">\n            <div class=\"ds-stat__main\">\n              <span class=\"ds-stat__tile\"><svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12l16-7-6 15-3-6z\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n              <span class=\"ds-stat__figure\"><span class=\"ds-stat__label\">Sent today</span><span class=\"ds-stat__value\">184,220</span></span>\n            </div>\n            <div class=\"ds-stat__foot\">Up 6% on yesterday</div>\n          </li>\n          <li class=\"ds-stat ds-stat--2\">\n            <div class=\"ds-stat__main\">\n              <span class=\"ds-stat__tile\"><svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 21a9 9 0 1 1 0-18 9 9 0 0 1 0 18zM12 7v5l3 2\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n              <span class=\"ds-stat__figure\"><span class=\"ds-stat__label\">Median delay</span><span class=\"ds-stat__value\">212 ms</span></span>\n            </div>\n            <div class=\"ds-stat__foot\">Measured over one hour</div>\n          </li>\n          <li class=\"ds-stat ds-stat--3\">\n            <div class=\"ds-stat__main\">\n              <span class=\"ds-stat__tile\"><svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12l5 5 9-10\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n              <span class=\"ds-stat__figure\"><span class=\"ds-stat__label\">Delivered</span><span class=\"ds-stat__value\">99.2%</span></span>\n            </div>\n            <div class=\"ds-stat__foot\">Target is 99%</div>\n          </li>\n          <li class=\"ds-stat ds-stat--4\">\n            <div class=\"ds-stat__main\">\n              <span class=\"ds-stat__tile\"><svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 4l9 16H3zM12 10v4M12 17v.5\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n              <span class=\"ds-stat__figure\"><span class=\"ds-stat__label\">Open errors</span><span class=\"ds-stat__value\">3</span></span>\n            </div>\n            <div class=\"ds-stat__foot\">Oldest is two days old</div>\n          </li>\n        </ul>\n\n        <div class=\"ds-row ds-row--stretch\">\n          <div class=\"ds-panel ds-row__wide\">\n            <header class=\"ds-panel__head\">\n              <div class=\"ds-panel__heading\">\n                <h2 class=\"ds-panel__title\">Messages per day</h2>\n                <span class=\"ds-panel__sub\">Sent and delivered, last twelve days</span>\n              </div>\n              <div class=\"ds-panel__tools\">\n                <a class=\"ds-panel__tool\" href=\"#channels\" aria-label=\"Open the channels\">\n                  <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 6h16M4 12h16M4 18h10\" stroke=\"currentColor\" fill=\"none\"/></svg>\n                </a>\n              </div>\n            </header>\n            <div class=\"ds-panel__body\">\n              <svg class=\"ds-chart\" viewBox=\"0 0 720 232\" preserveAspectRatio=\"none\" role=\"img\" aria-label=\"Bar chart of messages per day\">\n              <g class=\"ds-chart__grid\">\n                <path d=\"M0 1h720M0 58h720M0 116h720M0 174h720M0 231h720\" stroke=\"currentColor\" fill=\"none\" vector-effect=\"non-scaling-stroke\"/>\n              </g>\n              <path d=\"M12 231V120h36v111zM72 231V96h36v135zM132 231V132h36v99zM192 231V84h36v147zM252 231V64h36v167zM312 231V104h36v127zM372 231V150h36v81zM432 231V76h36v155zM492 231V48h36v183zM552 231V60h36v171zM612 231V36h36v195zM672 231V70h36v161z\" fill=\"currentColor\" stroke=\"none\"/>\n              <g class=\"ds-chart__line\">\n                <path d=\"M30 140L90 118l60 32 60-44 60-22 60 38 60 44 60-70 60-30 60 14 60-26 60 34\" stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" vector-effect=\"non-scaling-stroke\"/>\n              </g>\n            </svg>\n              <ul class=\"ds-chart__legend\">\n                <li class=\"ds-chart__key\"><span class=\"ds-chart__swatch\"></span>Sent</li>\n                <li class=\"ds-chart__key\"><span class=\"ds-chart__swatch ds-chart__swatch--line\"></span>Delivered within a second</li>\n              </ul>\n            </div>\n          </div>\n\n          <div class=\"ds-panel ds-row__narrow\">\n            <header class=\"ds-panel__head\">\n              <h2 class=\"ds-panel__title\">Recent activity</h2>\n            </header>\n            <ul class=\"ds-list\" data-component=\"list\">\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar\">JR</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channel\">Key rotated for Push, phones</a>\n                  <span class=\"ds-list__text\">Jonas Reuter, from the console</span>\n                </span>\n                <span class=\"ds-list__meta\">9 min</span>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar ds-list__avatar--alt\">MO</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channel\">Quota raised to 200,000</a>\n                  <span class=\"ds-list__text\">Mira Okafor, Push channel</span>\n                </span>\n                <span class=\"ds-list__meta\">2 h</span>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar ds-list__avatar--accent\">AT</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channels\">Channel \"Night digest\" added</a>\n                  <span class=\"ds-list__text\">Ana Teixeira, mail</span>\n                </span>\n                <span class=\"ds-list__meta\">Tue</span>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar ds-list__avatar--dark\">CS</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channels\">Nightly export finished</a>\n                  <span class=\"ds-list__text\">chronoskin, 41 MB archive</span>\n                </span>\n                <span class=\"ds-list__meta\">Mon</span>\n              </li>\n            </ul>\n          </div>\n        </div>\n\n        <h2 class=\"ds-subhead\">Guides for this project</h2>\n\n        <div class=\"ds-grid\" data-component=\"grid\">\n          <article class=\"ds-grid__cell\">\n            <div class=\"ds-grid__media\">Guide\n              <span class=\"ds-grid__mark\"><svg class=\"ds-icon ds-icon--small\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12l16-7-6 15-3-6z\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n            </div>\n            <h3 class=\"ds-grid__title\">Send a first message</h3>\n            <p class=\"ds-grid__text\">Create a key, call the send method and watch the message arrive.</p>\n            <div class=\"ds-grid__actions\"><a class=\"ds-button ds-button--flat\" href=\"#guide\">Open</a></div>\n          </article>\n          <article class=\"ds-grid__cell ds-grid__cell--2\">\n            <div class=\"ds-grid__media\">Guide\n              <span class=\"ds-grid__mark\"><svg class=\"ds-icon ds-icon--small\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 4h9l4 4v12H6zM9 12h7M9 16h7\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n            </div>\n            <h3 class=\"ds-grid__title\">Channels</h3>\n            <p class=\"ds-grid__text\">One way of reaching a reader, with its own key and quota.</p>\n            <div class=\"ds-grid__actions\"><a class=\"ds-button ds-button--flat\" href=\"#channels\">Open</a></div>\n          </article>\n          <article class=\"ds-grid__cell ds-grid__cell--3\">\n            <div class=\"ds-grid__media\">Reference\n              <span class=\"ds-grid__mark\"><svg class=\"ds-icon ds-icon--small\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 7l-5 5 5 5M15 7l5 5-5 5\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n            </div>\n            <h3 class=\"ds-grid__title\">Delivery alerts</h3>\n            <p class=\"ds-grid__text\">Be told when delivery drops or a quota runs low.</p>\n            <div class=\"ds-grid__actions\"><a class=\"ds-button ds-button--flat\" href=\"#alerts\">Open</a></div>\n          </article>\n          <article class=\"ds-grid__cell ds-grid__cell--4\">\n            <div class=\"ds-grid__media\">Sample\n              <span class=\"ds-grid__mark\"><svg class=\"ds-icon ds-icon--small\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 4v10M8 10l4 4 4-4M5 19h14\" stroke=\"currentColor\" fill=\"none\"/></svg></span>\n            </div>\n            <h3 class=\"ds-grid__title\">Night digest</h3>\n            <p class=\"ds-grid__text\">A small project that gathers the day and sends it at ten.</p>\n            <div class=\"ds-grid__actions\"><a class=\"ds-button ds-button--flat\" href=\"#guide\">Open</a></div>\n          </article>\n        </div>\n\n        <div class=\"ds-fab\">\n          <a class=\"ds-button ds-button--fab ds-tooltip ds-tooltip--left\" href=\"#channel\" aria-label=\"Add a channel\"><span class=\"ds-tooltip__text\" role=\"tooltip\">Add a channel</span>\n            <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" fill=\"none\"/></svg>\n          </a>\n        </div>\n\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"channels\">\n      <div class=\"ds-main\">\n\n        <div class=\"ds-head\">\n          <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#dashboard\">Night desk</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#channels\">Services</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Channels</li>\n          </ol>\n          <header class=\"ds-page-header\" data-component=\"page-header\">\n            <div class=\"ds-page-header__body\">\n              <h1 class=\"ds-page-header__title\">Channels</h1>\n              <p class=\"ds-page-header__text\">Each channel is one way of reaching a reader, with its own key, quota and delivery record.</p>\n            </div>\n            <div class=\"ds-page-header__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#alerts\">Set an alert</a>\n              <a class=\"ds-button\" href=\"#channel\">Add channel</a>\n            </div>\n          </header>\n        </div>\n\n        <div class=\"ds-notices ds-notices--pair\" data-component=\"notice\">\n          <div class=\"ds-notice\">\n            <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 21a9 9 0 1 1 0-18 9 9 0 0 1 0 18zM12 11v6M12 7v.5\" stroke=\"currentColor\" fill=\"none\"/></svg>\n            <div class=\"ds-notice__body\">\n              <strong class=\"ds-notice__title\">Trial ends in nine days</strong>\n              Add a payment method to keep sending.\n            </div>\n            <a class=\"ds-button ds-button--flat\" href=\"#dashboard\">Overview</a>\n          </div>\n          <div class=\"ds-notice ds-notice--error\">\n            <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 4l9 16H3zM12 10v4M12 17v.5\" stroke=\"currentColor\" fill=\"none\"/></svg>\n            <div class=\"ds-notice__body\">\n              <strong class=\"ds-notice__title\">Push channel rejected 214 messages</strong>\n              The certificate expired on Monday.\n            </div>\n            <a class=\"ds-button ds-button--flat ds-button--danger\" href=\"#channel\">Fix</a>\n          </div>\n        </div>\n\n        <div class=\"ds-panel\">\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#channels\">All channels <span class=\"ds-badge\">5</span></a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#channels\">Sending</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#channels\">Paused</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#channels\">Archived</a></li>\n          </ul>\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr><th>Channel</th><th class=\"ds-table__extra\">Kind</th><th>Status</th><th class=\"ds-table__num\">Sent today</th><th class=\"ds-table__num ds-table__extra\">Delivered</th><th class=\"ds-table__num ds-table__extra\">Quota used</th></tr>\n            </thead>\n            <tbody>\n              <tr><td class=\"ds-table__name\"><a class=\"ds-link ds-link--quiet\" href=\"#channel\">Mail relay</a></td><td class=\"ds-table__extra\">Mail</td><td><span class=\"ds-badge ds-badge--success\">Sending</span></td><td class=\"ds-table__num\">96,410</td><td class=\"ds-table__num ds-table__extra\">99.6%</td><td class=\"ds-table__num ds-table__extra\">48%</td></tr>\n              <tr class=\"is-current\"><td class=\"ds-table__name\"><a class=\"ds-link ds-link--quiet\" href=\"#channel\">Push, phones</a> <span class=\"ds-badge\">3</span></td><td class=\"ds-table__extra\">Push</td><td><span class=\"ds-badge ds-badge--danger\">Failing</span></td><td class=\"ds-table__num\">61,075</td><td class=\"ds-table__num ds-table__extra\">97.1%</td><td class=\"ds-table__num ds-table__extra\">31%</td></tr>\n              <tr><td class=\"ds-table__name\"><a class=\"ds-link ds-link--quiet\" href=\"#channel\">Text alerts</a></td><td class=\"ds-table__extra\">Text</td><td><span class=\"ds-badge ds-badge--success\">Sending</span></td><td class=\"ds-table__num\">18,902</td><td class=\"ds-table__num ds-table__extra\">99.9%</td><td class=\"ds-table__num ds-table__extra\">76%</td></tr>\n              <tr><td class=\"ds-table__name\"><a class=\"ds-link ds-link--quiet\" href=\"#channel\">Web hooks</a></td><td class=\"ds-table__extra\">Hook</td><td><span class=\"ds-badge ds-badge--warning\">Paused</span></td><td class=\"ds-table__num\">7,833</td><td class=\"ds-table__num ds-table__extra\">98.4%</td><td class=\"ds-table__num ds-table__extra\">12%</td></tr>\n              <tr><td class=\"ds-table__name\"><a class=\"ds-link ds-link--quiet\" href=\"#channel\">Night digest</a> <span class=\"ds-badge ds-badge--new\">New</span></td><td class=\"ds-table__extra\">Mail</td><td><span class=\"ds-badge ds-badge--success\">Sending</span></td><td class=\"ds-table__num\">0</td><td class=\"ds-table__num ds-table__extra\">100%</td><td class=\"ds-table__num ds-table__extra\">2%</td></tr>\n            </tbody>\n          </table>\n          <div class=\"ds-panel__foot\">\n            <div class=\"ds-badges ds-panel__key\" data-component=\"badge\">\n              <span class=\"ds-badge\">3</span>\n              <span class=\"ds-badge ds-badge--success\">Sending</span>\n              <span class=\"ds-badge ds-badge--warning\">Paused</span>\n              <span class=\"ds-badge ds-badge--danger\">Failing</span>\n            </div>\n            <span>Rows 1 to 5 of 18</span>\n            <ul class=\"ds-pagination\" data-component=\"pagination\">\n              <li><a class=\"ds-pagination__link is-disabled\" href=\"#channels\" aria-label=\"Previous\">\n                <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M15 6l-6 6 6 6\" stroke=\"currentColor\" fill=\"none\"/></svg>\n              </a></li>\n              <li><a class=\"ds-pagination__link is-current\" href=\"#channels\">1</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#channels\">2</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#channels\">3</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#channels\">4</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#channels\" aria-label=\"Next\">\n                <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 6l6 6-6 6\" stroke=\"currentColor\" fill=\"none\"/></svg>\n              </a></li>\n            </ul>\n          </div>\n        </div>\n\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"channel\">\n      <div class=\"ds-main\">\n\n        <div class=\"ds-head\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#dashboard\">Night desk</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#channels\">Channels</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Push, phones</li>\n          </ol>\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__body\">\n              <h1 class=\"ds-page-header__title\">Push, phones</h1>\n              <p class=\"ds-page-header__text\">Push channel of the reader app. Failing since Monday: the certificate has expired.</p>\n            </div>\n            <div class=\"ds-page-header__actions ds-buttons\" data-component=\"buttons\">\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Remove</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Pause</button>\n              <button class=\"ds-button is-disabled\" type=\"button\" disabled>Send a test</button>\n              <a class=\"ds-button\" href=\"#channels\">Save changes</a>\n            </div>\n          </header>\n        </div>\n\n        <div class=\"ds-row ds-row--stretch\">\n          <div class=\"ds-panel ds-row__wide\">\n            <header class=\"ds-panel__head\">\n              <div class=\"ds-panel__heading\">\n                <h2 class=\"ds-panel__title\">Settings</h2>\n                <span class=\"ds-panel__sub\">Changes apply to messages sent from now on</span>\n              </div>\n              <div class=\"ds-panel__tools\">\n                <span class=\"ds-badge ds-badge--chip\">Push</span>\n                <span class=\"ds-badge ds-badge--chip\">Version 14</span>\n              </div>\n            </header>\n            <div class=\"ds-panel__body\">\n              <form class=\"ds-form\" data-component=\"form\">\n                <div class=\"ds-form__row\">\n                  <label class=\"ds-form__field\">\n                    <span class=\"ds-form__label\">Channel name</span>\n                    <input class=\"ds-form__control\" type=\"text\" value=\"Push, phones\">\n                  </label>\n                  <label class=\"ds-form__field\">\n                    <span class=\"ds-form__label\">Kind</span>\n                    <span class=\"ds-form__select\">\n                      <select class=\"ds-form__control\">\n                        <option>Push</option>\n                        <option>Mail</option>\n                        <option>Text</option>\n                      </select>\n                    </span>\n                  </label>\n                </div>\n                <div class=\"ds-form__row\">\n                  <label class=\"ds-form__field is-invalid\">\n                    <span class=\"ds-form__label\">Certificate expires</span>\n                    <input class=\"ds-form__control\" type=\"text\" value=\"12 March\">\n                    <span class=\"ds-form__error\">This date has passed. Upload a new certificate.</span>\n                  </label>\n                  <label class=\"ds-form__field\">\n                    <span class=\"ds-form__label\">Daily quota</span>\n                    <input class=\"ds-form__control\" type=\"text\" value=\"200,000\">\n                    <span class=\"ds-form__hint\">Messages above the quota wait until midnight.</span>\n                  </label>\n                </div>\n                <label class=\"ds-form__field\">\n                  <span class=\"ds-form__label\">Notes for the team</span>\n                  <textarea class=\"ds-form__control ds-form__control--area\">Used by the reader app on phones. Ask Jonas before changing the quota.</textarea>\n                </label>\n                <label class=\"ds-form__check\">\n                  <input class=\"ds-form__checkbox\" type=\"checkbox\" checked>\n                  <span>Send me a message when delivery drops below 98%</span>\n                </label>\n                <label class=\"ds-form__check\"><span class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span></span><span>Hold messages between midnight and six</span></label>\n              </form>\n            </div>\n            <div class=\"ds-panel__actions ds-panel__actions--end\">\n              <a class=\"ds-button ds-button--flat\" href=\"#channels\">Cancel</a>\n              <a class=\"ds-button\" href=\"#channels\">Save changes</a>\n            </div>\n          </div>\n\n          <div class=\"ds-stack ds-stack--fill ds-row__narrow\">\n            <div class=\"ds-panel\" data-component=\"panel\">\n              <header class=\"ds-panel__head\">\n                <h2 class=\"ds-panel__title\">Key in use</h2>\n              </header>\n              <div class=\"ds-panel__body\">\n                <p>Created on 2 February by Jonas Reuter. Last used four minutes ago from the reader app.</p>\n                <p>31% of today's quota is used.</p>\n                <span class=\"ds-progress\" data-component=\"progress\" role=\"progressbar\" aria-label=\"Daily quota used\"><span class=\"ds-progress__bar ds-progress__bar--low\"></span></span>\n              </div>\n              <div class=\"ds-panel__actions\">\n                <a class=\"ds-button ds-button--flat\" href=\"#guide\">About keys</a>\n                <a class=\"ds-button ds-button--flat\" href=\"#dashboard\">View activity</a>\n              </div>\n            </div>\n            <div class=\"ds-overlay\">\n              <div class=\"ds-dialog\" role=\"dialog\" aria-labelledby=\"dialog-title\" data-component=\"dialog\">\n                <h3 class=\"ds-dialog__title\" id=\"dialog-title\">Pause the Push channel?</h3>\n                <div class=\"ds-dialog__body\">\n                  <p>Messages wait in the queue for up to a day and are sent when you resume.</p>\n                </div>\n                <div class=\"ds-dialog__actions\">\n                  <a class=\"ds-button ds-button--flat\" href=\"#channel\">Keep sending</a>\n                  <a class=\"ds-button ds-button--flat ds-button--danger\" href=\"#channels\">Pause</a>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"alerts\">\n      <div class=\"ds-main\">\n\n        <div class=\"ds-head\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#dashboard\">Night desk</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#channels\">Services</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Alerts</li>\n          </ol>\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__body\">\n              <h1 class=\"ds-page-header__title\">Alerts</h1>\n              <p class=\"ds-page-header__text\">A message to you or the team when a channel needs attention.</p>\n            </div>\n            <div class=\"ds-page-header__actions\">\n              <a class=\"ds-button\" href=\"#channel\">Create an alert</a>\n            </div>\n          </header>\n        </div>\n\n        <div class=\"ds-row ds-row--stretch\">\n          <div class=\"ds-panel ds-row__main\">\n            <div class=\"ds-empty\" data-component=\"empty\">\n              <span class=\"ds-empty__mark\">\n                <svg class=\"ds-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 17V11a6 6 0 0 1 12 0v6l2 2H4zM10 21h4\" stroke=\"currentColor\" fill=\"none\"/></svg>\n              </span>\n              <h3 class=\"ds-empty__title\">No alerts set</h3>\n              <p class=\"ds-empty__text\">Be told when delivery drops or a quota runs low.</p>\n              <a class=\"ds-button ds-button--flat\" href=\"#channel\">Create an alert</a>\n            </div>\n          </div>\n          <div class=\"ds-panel ds-row__side\">\n            <header class=\"ds-panel__head\">\n              <div class=\"ds-panel__heading\">\n                <h2 class=\"ds-panel__title\">Worth watching</h2>\n                <span class=\"ds-panel__sub\">Channels that came close to a limit this week</span>\n              </div>\n            </header>\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar ds-list__avatar--alt\">PP</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channel\">Push, phones</a>\n                  <span class=\"ds-list__text\">Delivery fell to 97.1% on Monday</span>\n                </span>\n                <span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--danger\">Failing</span></span>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar ds-list__avatar--accent\">TA</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channels\">Text alerts</a>\n                  <span class=\"ds-list__text\">76% of the daily quota used</span>\n                </span>\n                <span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--warning\">Close</span></span>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__avatar\">MR</span>\n                <span class=\"ds-list__body\">\n                  <a class=\"ds-list__title\" href=\"#channels\">Mail relay</a>\n                  <span class=\"ds-list__text\">Steady at 99.6% delivered</span>\n                </span>\n                <span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--success\">Fine</span></span>\n              </li>\n            </ul>\n          </div>\n        </div>\n\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"guide\">\n      <div class=\"ds-main\">\n\n        <div class=\"ds-head\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#dashboard\">Night desk</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#guide\">Documentation</a></li>\n            <li class=\"ds-breadcrumb__item is-current\">Quick start</li>\n          </ol>\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__body\">\n              <h1 class=\"ds-page-header__title\">Quick start</h1>\n              <p class=\"ds-page-header__text\">From an empty folder to a first message in about ten minutes.</p>\n            </div>\n            <div class=\"ds-page-header__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#channels\">Open the channels</a>\n            </div>\n          </header>\n        </div>\n\n        <div class=\"ds-row ds-row--stretch\">\n          <div class=\"ds-panel ds-row__main\">\n            <div class=\"ds-panel__body ds-panel__body--top\">\n              <article class=\"ds-prose\" data-component=\"typography\">\n                <h1>Send a first message</h1>\n                <p class=\"ds-prose__lead\">A message goes to a channel, and the channel decides how it reaches the reader.</p>\n                <h2>Create a key</h2>\n                <p>Every call is signed with a project key. Make one for a channel, then keep it in <code>chronoskin.key</code> next to your code. The <a href=\"#channel\">channel settings</a> show which key is in use.</p>\n                <ul>\n                  <li>A key belongs to one project and one channel.</li>\n                  <li>Rotate a key without stopping delivery.</li>\n                  <li>Revoked keys fail at once, with a clear error.</li>\n                </ul>\n                <h3>Send from the command line</h3>\n                <p>Install the tool and send a test message to yourself.</p>\n                <pre><code>chronoskin login --project night-desk\nchronoskin send --channel mail --to me \"First light\"</code></pre>\n              </article>\n            </div>\n          </div>\n\n          <div class=\"ds-stack ds-row__side\">\n            <div class=\"ds-panel\">\n              <header class=\"ds-panel__head\">\n                <h2 class=\"ds-panel__title\">Read next</h2>\n              </header>\n              <div class=\"ds-panel__body\">\n                <div class=\"ds-links\" data-component=\"links\">\n                  <a class=\"ds-link\" href=\"#channels\">Channels</a>\n                  <a class=\"ds-link is-visited\" href=\"#dashboard\">Project overview</a>\n                  <a class=\"ds-link is-hover\" href=\"#alerts\">Delivery alerts</a>\n                  <a class=\"ds-link is-active\" href=\"#channel\">Channel settings</a>\n                  <a class=\"ds-link ds-link--quiet\" href=\"#dashboard\">Recent activity</a>\n                </div>\n              </div>\n            </div>\n            <div class=\"ds-panel\">\n              <header class=\"ds-panel__head\">\n                <div class=\"ds-panel__heading\">\n                  <h2 class=\"ds-panel__title\">Sample: Night digest</h2>\n                  <span class=\"ds-panel__sub\">Mail channel, one template</span>\n                </div>\n              </header>\n              <div class=\"ds-panel__body\">\n                <p>A small project that gathers the day and sends it at ten. It uses one key, one channel and the send call from this page.</p>\n              </div>\n              <div class=\"ds-panel__actions\">\n                <a class=\"ds-button ds-button--flat\" href=\"#channels\">See its channel</a>\n              </div>\n            </div>\n            <div class=\"ds-panel\">\n              <header class=\"ds-panel__head\">\n                <h2 class=\"ds-panel__title\">When a send fails</h2>\n              </header>\n              <div class=\"ds-panel__body\">\n                <p>The console keeps every rejected message for a day. Set an alert to hear about it before your readers do.</p>\n                <div class=\"ds-accordion\" data-component=\"accordion\">\n                  <details class=\"ds-accordion__item\">\n                    <summary class=\"ds-accordion__head\">Rejected by the channel</summary>\n                    <p class=\"ds-accordion__body\">The certificate or key has expired. Upload a new one in the channel settings.</p>\n                  </details>\n                  <details class=\"ds-accordion__item\">\n                    <summary class=\"ds-accordion__head\">Over the daily quota</summary>\n                    <p class=\"ds-accordion__body\">Messages wait until midnight and are sent in order.</p>\n                  </details>\n                  <details class=\"ds-accordion__item\">\n                    <summary class=\"ds-accordion__head\">No such reader</summary>\n                    <p class=\"ds-accordion__body\">The address is dropped from the channel after three tries.</p>\n                  </details>\n                </div>\n              </div>\n              <div class=\"ds-panel__actions\">\n                <a class=\"ds-button ds-button--flat\" href=\"#alerts\">Set an alert</a>\n              </div>\n            </div>\n          </div>\n        </div>\n\n      </div>\n    </section>\n\n    <footer class=\"ds-footer\" data-component=\"footer\">\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#dashboard\">Overview</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#channels\">Channels</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#alerts\">Alerts</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#guide\">Quick start</a></li>\n      </ul>\n      <p class=\"ds-footer__legal\">chronoskin is a sample project. Documentation is free to reuse.</p>\n    </footer>\n\n  </div>\n</div>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.material-design.docs.s04.p01.t03.u10\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"material-design\",\n    \"years\": [\n      2014,\n      2018\n    ]\n  },\n  \"archetype\": \"docs\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-md-413a\",\n  \"short\": \"v1-md-413a\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #fafafa;\n  --color-canvas: #fafafa;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f7f7f7;\n  --color-surface-strong: #eeeeee;\n  --color-bar: #455a64;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #546e7a;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #424242;\n  --color-inverse-text: #ffffff;\n  --color-text: #212121;\n  --color-text-muted: #757575;\n  --color-heading: #212121;\n  --color-heading-alt: #757575;\n  --color-link: #00bcd4;\n  --color-link-quiet: #212121;\n  --color-link-visited: #00bcd4;\n  --color-link-hover: #00acc1;\n  --color-link-active: #00838f;\n  --color-border: rgb(0 0 0 / 0.12);\n  --color-border-strong: #757575;\n  --color-border-muted: #ebebeb;\n  --color-accent: #ffc400;\n  --color-accent-text: #212121;\n  --color-accent-alt: #ff4081;\n  --color-fill-1: #00bcd4;\n  --color-fill-2: #ffc400;\n  --color-fill-3: #607d8b;\n  --color-fill-4: #212121;\n  --color-button: #00bcd4;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #212121;\n  --color-input: #ffffff;\n  --color-input-text: #212121;\n  --color-input-border: #757575;\n  --color-disabled: #e3e3e3;\n  --color-disabled-text: #9e9e9e;\n  --color-danger: #c2185b;\n  --color-danger-surface: #ffffff;\n  --color-success: #46873b;\n  --color-warning: #ff9800;\n  --color-notice: #edf2f5;\n  --color-notice-text: #212121;\n  --color-focus: #00bcd4;\n  --color-shadow: #000000;\n  --color-overlay: rgb(0 0 0 / 0.5);\n}\n\n/* @part type */\n:root {\n  --font-body: Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-ui: Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: \"Roboto Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n  --text-base: 13px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 18px;\n  --text-display: 34px;\n  --text-h1: 24px;\n  --text-h2: 20px;\n  --text-h3: 15px;\n  --line-body: 1.85;\n  --line-heading: 1.33;\n  --line-display: 1.18;\n  --weight-body: 400;\n  --weight-bold: 500;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 2px;\n  --radius-panel: 2px;\n  --radius-pill: 9999px;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: 0 0 2px 0 color-mix(in srgb, var(--color-shadow) 12%, transparent), 0 2px 2px 0 color-mix(in srgb, var(--color-shadow) 20%, transparent);\n  --shadow-control-hover: 0 3px 10px 0 color-mix(in srgb, var(--color-shadow) 16%, transparent), 0 3px 10px 0 color-mix(in srgb, var(--color-shadow) 23%, transparent);\n  --shadow-control-pressed: 0 0 2px 0 color-mix(in srgb, var(--color-shadow) 12%, transparent);\n  --shadow-dialog: 0 6px 10px 0 color-mix(in srgb, var(--color-shadow) 30%, transparent);\n  --shadow-text: none;\n  --fill-page: color-mix(in srgb, var(--color-page) 86%, black);\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: color-mix(in srgb, var(--color-button) 84%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px solid var(--color-focus);\n  --transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);\n  --backdrop-blur: 0px;\n}\n"
  }
}
