{
  "id": "v1-fl-6522",
  "long_id": "v1.flat-design.app.s06.p05.t02.u02",
  "name": "Flat design dashboard",
  "era": {
    "slug": "flat-design",
    "code": "fl",
    "name": "Flat design",
    "years": [
      2013,
      2016
    ],
    "description": "Product marketing, 2013 to 2016: full-width bands of solid colour, light sans-serif headings, thin one-pixel rules, and no gloss, bevel or drop shadow anywhere."
  },
  "archetype": "app",
  "mode": "mix",
  "viewport": {
    "width": 1280,
    "fluid": true,
    "responsive": true
  },
  "summary": "This is the admin dashboard of flat design, common from 2013 to 2016 for the signed-in side of web services: a rail of one solid colour down the left edge with the brand on top and icon links below, a white top bar with search and a single action, and a grey work area filled with white cards. The first screen is a flat banner, a row of number cards each led by a solid colour block with an icon, and a bar chart drawn as plain rectangles; inner screens are a table card with tabs on its head, a report and a form. Nothing has gloss, gradient or a blurred shadow: cards are set off from the page by a hairline and a flat translucent frame.",
  "url": "https://chrono.skin/s/v1-fl-6522",
  "preview_url": "https://chrono.skin/s/v1-fl-6522/specimen.html",
  "files": {
    "STYLE.md": "# Flat design dashboard\n\n## Summary\n\nThis is the admin dashboard of flat design, common from 2013 to 2016 for the signed-in side of web services: a rail of one solid colour down the left edge with the brand on top and icon links below, a white top bar with search and a single action, and a grey work area filled with white cards. The first screen is a flat banner, a row of number cards each led by a solid colour block with an icon, and a bar chart drawn as plain rectangles; inner screens are a table card with tabs on its head, a report and a form. Nothing has gloss, gradient or a blurred shadow: cards are set off from the page by a hairline and a flat translucent frame.\n\n## Layout\n\n- The page is fluid and designed for a 1280px viewport. `.ds-page` is a grid of two columns: the rail (`.ds-nav`, `--size-rail` 220px) for the whole height, and beside it the top bar, the showing view and the footer line. The work area is not centred: `.ds-content` starts at the rail, is at most `--size-page` (1060px) wide and pads itself with `--space-5` (24px).\n- Navigation is the rail on `--fill-bar-alt`: the `.ds-brand` in a row as tall as the top bar, then groups of links under small group names, each link an icon and a label with an optional count, the current one on a lighter wash behind a 3px edge; the account sits under the links. `.ds-topbar` on `--fill-bar` is `--size-top` (56px) tall with a 1px bottom rule: the search field at the left, two text links and one small primary button at the right. No other navigation exists; the footer is one thin line.\n- Everything in the work area stands in a card (`.ds-panel`, `.ds-stat__item`, `.ds-grid__cell`, `.ds-sidebar`) and cards are `--space-5` apart in both directions. The dashboard stacks, top to bottom: `.ds-hero`, one flat `--color-fill-1` banner with the headline figure in words, two buttons and a small bar drawing; `.ds-stat`, four number cards; `.ds-cols`, a chart card two thirds wide beside a list card; and `.ds-grid`, four template cards.\n- Inner pages have no hero. `.ds-content` opens with `.ds-page-header`, which is not a strip and has no fill: the `.ds-breadcrumb`, the page title and one grey line at the left, the actions at the right on the same baseline. Below, `.ds-cols` (2 to 1) holds the work at the left and small cards at the right; with `--level` both columns end on one line and the card marked `.ds-panel--grow` takes up the difference. A list page puts `.ds-tabs` on the head of the table card and the pagination in its `.ds-table__foot`; a report puts a `.ds-stat--3` row first; a form sits in a card under its notices.\n- Views. The specimen is a newsletter service's reporting side with five views. `dashboard` is the home view: the banner, the four number cards, the chart of the last seven sends beside the latest campaigns, and the templates. `campaigns` is the list page: tabs on the table card, pagination, the lists and the label key at the right, and the empty box for automatic letters. `report` is one campaign: three number cards, the table of links with the action row, the open delete dialog, and the hourly chart with the send's details at the right. `compose` is the form for a new campaign under its notices, beside the checklist and the best sending time. `guide` is a text page in a card beside its contents list and further links. Below 1040px the side column goes under the main one and cards stand two across; below 760px the rail's brand and account avatar stand in one row across the top and its links become a tab bar fixed to the bottom of the window, cards stack, and a wide table scrolls inside `.ds-table__wrap` while the page itself never does.\n- Spacing scale: `--space-1` 4px (between a label and its field, between chart bars, pagination gaps), `--space-2` 8px (button and rail link vertical padding, between adjacent buttons and badges), `--space-3` 12px (card head, table cell and list row vertical padding, paragraph gap), `--space-4` 16px (card padding, button and cell horizontal padding, between form rows, between chart groups), `--space-5` 24px (between cards, work area padding, banner padding), `--space-6` 40px (banner side padding, around a dialog, empty-state padding).\n- Other sizes: `--size-chip` 72px (the colour block of a number card), `--size-icon` 28px, `--size-chart` 200px (height of a chart's plot), `--size-thumb` 104px (the colour block of a template card), `--size-search` 260px, `--size-dialog` 440px.\n- On a phone (760px and below) `.ds-nav` is a row holding only the `.ds-brand` and the account `.ds-menu` of `.ds-nav__foot` (the name and `.ds-nav__quota` are not shown, the list opens to the right edge); the group names are not shown and the links become a tab bar fixed to the bottom of the window: the first `.ds-nav__links` list on the left three quarters, the second on the right quarter, each `.ds-nav__link` an `.ds-nav__icon` over its label, the current one marked by a line along its top edge, a count badge on the corner of its icon. A tooltip is not placed beside its trigger: it opens as a full row under its line, inset by `--space-3`, without its arrow.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Colour family: the 2015 music landing page (coral, yellow, plum, green and magenta on white with a near-black inverse); the red of `--color-danger` `#e81020` is borrowed from the 2014 corporate home page, because the family has no error colour.\n- `--color-page`, `--color-canvas`, `--color-surface` and `--color-bar` are white `#ffffff`; `--color-surface-alt` `#f8f8f8` is the alternate section, `--color-surface-strong` `#efefef` the code background, the quiet badge and the empty-state disc.\n- Text is near-black `--color-text` `#2e2f33`, not grey; headings are plum `--color-heading` `#503750`; small titles (panel, sidebar, h3) are magenta `--color-heading-alt` `#f037a5`; meta text and table heads are `--color-text-muted` `#919496`.\n- `--color-fill-1` `#d65a3e` (coral) is the hero; `--color-fill-4` `#2ebd59` (green) is the closing call to action. Text on either is `--color-inverse-text`. `--color-fill-2` `#f8c433` (yellow) and `--color-fill-3` `#503750` (plum) fill feature pictures, hero blocks and grid discs and carry an icon only, never running text. An icon on a fill never lies on the fill itself: `.ds-grid__icon` and `.ds-feature__icon` carries a round plate, `--color-inverse` mixed in at 40%, so the `--color-inverse-text` icon stays legible when a token set makes the fill pale (yellow, beige).\n- `--color-button` `#2ebd59` (green, white text) is the only action colour and also the current tab segment, the current page number, the current sidebar marker and `--color-focus`. The secondary button is `--color-button-secondary-text` `#2e2f33` on white. On a fill the button is `.ds-button--inverse`: `--color-inverse-text` with `--color-fill-1` text.\n- Links are coral `--color-link` `#d65a3e`, visited the same; hover goes dark `--color-link-hover` `#2e2f33`, active `#000000`. Quiet links are `#919496`. The solid navigation bar uses `--color-bar-text` with `--color-link` for the current item; the overlay navigation uses `--color-inverse-text` only.\n- `--color-accent` `#f037a5` (magenta, white text) is the default badge; `--color-accent-alt` and `--color-notice` are yellow `#f8c433`: the `--alt` badge is a 30% tint of it over `--color-surface` with a yellow outline and `--color-heading` text, the notice is solid yellow with `--color-notice-text` `#2e2f33`. Status badges are `--color-success`, `--color-warning` and `--color-danger` with `--color-accent-text`.\n- Borders: `--color-border` `#d9dadc`, `--color-border-strong` and `--color-input-border` `#c1c3c6`, `--color-border-muted` `#efefef` (table rows, panel title rule). The footer is a light line on `--color-canvas` in `--color-text-muted` with `--color-link-quiet` links; `--color-inverse` is not used as a block in this layout, only mixed at 16% for the hero device.\n- One light geometric sans for everything, after the 2014 site-builder page: `--font-body`, `--font-heading` and `--font-ui` are Raleway, Montserrat, Avenir (the references used commercial geometric faces). `--font-mono` is Menlo.\n- Small and airy: `--text-base` 13px at `--line-body` 1.6, `--weight-body` 300; `--text-small` 10px for meta, badges, table heads and the footer; `--text-ui` 12px.\n- Headings are light and tracked, never bold: `--weight-heading` and `--weight-display` 300, `--heading-tracking` 0.5px, `--display-tracking` 1px; `--text-display` 44px (hero title, inner page title, figures), `--text-h1` 32px (section and feature titles), `--text-h2` 22px, `--text-h3` and `--text-large` 16px.\n- `--ui-transform` is `uppercase` at `--weight-ui` 500: navigation, tab segments, buttons and table heads are small capitals-by-transform. `--weight-bold` 500 is the heaviest weight. All three link decorations are `none`.\n- Buttons and inputs are pills: `--radius-control` 20px rounds a control of ordinary height completely; `--radius-pill` 500px makes badges, grid discs and the circled plus fully round. Panels, notices, dialogs and the top of the hero's device take `--radius-panel` 8px; `--radius-page` 12px rounds feature pictures and the grid box. The hero itself runs edge to edge and has no corners.\n- The secondary button is a ghost: `--fill-button-secondary` is `transparent`, drawn by its 1px outline only. The primary button is the flat `--color-button`; hovered it is the same colour mixed 20% with white.\n- `--border-width` 1px for every rule and outline; `--border-width-strong` 3px for the current navigation item and the current sidebar marker. `--focus-ring` is `2px solid` in `--color-focus`.\n- One-off shades made with `color-mix()` because the vocabulary has no token: the hero device and its blocks (`--color-inverse` at 16%), the ghost button border (`--color-inverse-text` at 50%), the icon plate (`--color-inverse` at 40%), the `--alt` badge tint (`--color-accent-alt` at 30% over `--color-surface`), the hovered and pressed destructive button (`--color-danger` at 85% over `--color-inverse-text` and over `--color-inverse`). The hero lead and a hovered overlay link use `opacity: 0.8`.\n- Nothing casts a shadow at rest: the panel, control, hover, dialog and text shadows are `none`; only a pressed button darkens, with `--shadow-control-pressed`, an inset 2px ring in `--color-shadow`. Every fill is a flat colour. `--transition` fades colour, background and border colour in 0.2s.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, text colour and page fill and makes the two-column grid; `.ds-nav`, `.ds-topbar`, the views and `.ds-footer` are its direct children.\n- `.ds-content`: the padded column inside a view; stacks its children 24px apart.\n- `.ds-brand`: the site's mark and name, first in the rail. `.ds-brand__mark` is a 28px tile dressed like the primary button (`--fill-button`, `--color-button-text`, `--radius-control`, `--shadow-control`) holding the mark as inline SVG; `.ds-brand__name` is the name at `--text-large` and `--weight-bold` in the rail's text colour. Name and mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the rail. `.ds-nav__group` names a group; `.ds-nav__links` holds `.ds-nav__link` rows of a `.ds-nav__icon`, a `.ds-nav__label` and an optional `.ds-badge`; the current row is `is-current`. `.ds-nav__foot` is the account, a `.ds-menu` with a `.ds-avatar` and `.ds-nav__who`; `.ds-nav__quota` under it shows the plan in use. In the specimen the showing view marks its link with one `:has()` rule per view; a project sets `is-current` itself. In a narrow window the rail is a block on top: the brand with the account's avatar at the right, then the links in one row.\n- `.ds-topbar`: the bar above the work area: `.ds-topbar__search`, up to two `.ds-topbar__link` and one `.ds-button--small`.\n- `.ds-hero`: the dashboard's banner on `--color-fill-1`. `.ds-hero__copy` holds `.ds-hero__title` (40px bold), `.ds-hero__lead` and `.ds-hero__actions` with one `.ds-button--inverse` and one `.ds-button--ghost`; `.ds-hero__art` is a row of `.ds-hero__bar` (`--2` to `--5` for other heights, the last one white). One per site, on the home view only.\n- `.ds-page-header`: head of an inner page, used instead of `.ds-hero`. `.ds-page-header__copy` holds the breadcrumb, `.ds-page-header__title` (28px bold) and one `.ds-page-header__text` line; `.ds-page-header__actions` at the right with at most one primary and one `--secondary` button.\n- `.ds-cols`: main and side column, 2 to 1 (`--level` to end them on one line). `.ds-stack` stacks cards 24px apart; `.ds-panel--grow` on one of them fills the column.\n- `.ds-prose`: running text inside a card: h1, h2, h3, p, lists, `code`, `strong`. `.ds-prose__lead` for the first paragraph.\n- `.ds-link`: text link. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `--quiet` for meta and breadcrumb links; `--more` appends a chevron. `.ds-linkrow` lays links in a row.\n- `.ds-button`: flat button with 2px corners, 13px medium weight. Variants: `--secondary` (outline in its text colour on `--fill-button-secondary`), `--danger` (flat `--color-danger`, for destructive actions only), `--inverse` (white, on the banner), `--ghost` (outline in white, on the banner only), `--small`. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow` spaces buttons 8px apart.\n- `.ds-form`: vertical form with labels above the fields, inside a card. `.ds-form__row` puts fields side by side; `.ds-form__field` wraps `.ds-form__label` and one of `.ds-form__input`, `.ds-form__select`, `.ds-form__textarea`. Error: `is-error` on the input plus `.ds-form__error`. `.ds-form__hint`, `.ds-form__check` with `.ds-form__checkbox`, `.ds-form__actions`.\n- `.ds-table`: data table inside a card, edge to edge: an 11px bold head on `--fill-bar`, 1px rules between rows, no stripes and no vertical lines; a hovered row (`is-hover`) is `--color-surface-alt`. `.ds-table__num` right-aligns numbers; `.ds-table__caption` is a small note below. Wrap it in `.ds-table__wrap`; `.ds-table__foot` is the card's last row, with the pagination or an action row at the left and a count at the right.\n- `.ds-list`: rows inside a card. `.ds-list__item` holds a `.ds-list__head` (the bold `.ds-list__title` and a status badge at the right), an optional `.ds-list__text` and `.ds-list__meta`.\n- `.ds-panel`: the card: `--fill-panel`, a 1px border, 3px corners and the ring of `--shadow-panel`. `.ds-panel__head` holds the `.ds-panel__title` and an optional small action above a rule; `.ds-panel__body` is padded. `.ds-panel__figure` is a large bold numeral or phrase; `.ds-panel__rows` with `.ds-panel__row` is a two-column list of facts (`--after` when it follows other content).\n- `.ds-stat`: the row of number cards, four across (`--3` for three). Each `.ds-stat__item` is a card: `.ds-stat__chip` (`--2`, `--3`, `--4` for the other fills) with a `.ds-stat__icon` on its plate, and `.ds-stat__body` with the `.ds-stat__figure` (28px bold), the `.ds-stat__label` and a `.ds-stat__delta` line (`--down` when the change is for the worse).\n- `.ds-chart`: a bar chart in CSS. `.ds-chart__plot` holds up to four `.ds-chart__line` gridlines (`--2`, `--3`, `--4`) and one `.ds-chart__group` per step; a group holds one or two `.ds-chart__bar`, the second with `--alt`, their heights set by `--20` to `--100` in steps of ten. `.ds-chart__axis` of `.ds-chart__tick` labels the steps; `.ds-chart__legend` of `.ds-chart__key` (`--alt`) names the series. `--small` halves the plot. Use it for at most two series and twelve steps.\n- `.ds-grid`: four cards across. Each `.ds-grid__cell` is a `.ds-grid__thumb` colour block (`--2`, `--3`, `--4`) holding a `.ds-grid__sheet` of `.ds-grid__line` (`--head`, `--short`), and a `.ds-grid__body` with `.ds-grid__title`, `.ds-grid__text` and a link.\n- `.ds-tabs`: the head of a card: `.ds-tabs__tab` in a row on `--color-surface-alt`; the current tab (`is-current`) takes the card's fill under a 3px top edge in `--color-button` and joins the card below.\n- `.ds-badge`: small rounded tag, 11px bold, on `--fill-accent`. `--alt` tinted with an outline, `--quiet` grey for neutral states. Status variants: `--success`, `--warning`, `--danger`. `.ds-badgerow` for several.\n- `.ds-sidebar`: a card of links: `.ds-sidebar__title` above a rule, `.ds-sidebar__list` of `.ds-sidebar__item` with an optional `.ds-sidebar__count`; the current row (`is-current`) is bold behind a 3px edge.\n- `.ds-notice`: flat message strip; `--error` in the danger colours with a 1px border. `.ds-notice__title` for the bold lead-in. `.ds-noticerow` stacks notices.\n- `.ds-pagination`: small outlined squares of `.ds-pagination__link`; `is-current` is filled with `--fill-button`, `is-disabled` is grey.\n- `.ds-breadcrumb`: 11px grey trail of `.ds-breadcrumb__item` parted by chevrons; the last is `.ds-breadcrumb__current`. It sits above the page title.\n- `.ds-dialog`: a dimmed block (`--color-overlay`) centring `.ds-dialog__box`, a small card in the ring of `--shadow-dialog`: `.ds-dialog__head` (`.ds-dialog__title`, `.ds-dialog__close`) above a rule, `.ds-dialog__body`, and `.ds-dialog__actions` right-aligned on `--color-surface-alt`.\n- `.ds-empty`: a centred message in a dashed outline with no fill: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one button. It stands where a card would be.\n- `.ds-footer`: one thin line on `--fill-inverse` under the work area: `.ds-footer__name`, the copyright, and `.ds-footer__links` of `.ds-footer__link` at the right.\n- `.ds-menu`: a drop-down under a navigation item, written as `<details>`: `.ds-menu__toggle` is the `<summary>`, set like the navigation links with a small chevron after it, and `.ds-menu__list` holds `.ds-menu__item` links in a flat `--fill-panel` box with a `--border-width` border, `--radius-panel` corners and `--shadow-dialog`. Here it is the account at the foot of the rail: the toggle holds the `.ds-avatar` and `.ds-nav__account` (the name in `.ds-nav__who` and the organisation), in the rail's own text colour, and the list opens under it. In a narrow window only the avatar shows, at the right of the brand, and the list hangs from the right edge.\n- `.ds-accordion`: sections that open and close, each a `<details class=\"ds-accordion__item\">` with `.ds-accordion__head` (the `<summary>`, in the heading font, with a plus in `--color-link` at the right that becomes a minus when open) and `.ds-accordion__body`. Items are divided by rules; there are no boxes or fills. Use it at the end of a help article for the questions that follow from it.\n- `.ds-tooltip`: a term with a dotted underline that shows `.ds-tooltip__tip` above it on hover or focus (give the trigger `tabindex=\"0\"`); `is-open` shows it statically and `--end` hangs the tip from the trigger's right edge. The tip is a small flat box on `--fill-inverse` with `--color-inverse-text` at `--text-small`, `--radius-control` corners and a square pointer. Use it to explain one label in a `.ds-panel__row`. Never put it inside `.ds-table__wrap`, which would clip it.\n- `.ds-switch`: an on/off control drawn over a checkbox: a `<label>` holding `.ds-switch__input`, `.ds-switch__track` and `.ds-switch__label`. The track is a flat shape `--size-switch` wide with `--radius-pill` ends in a 30% tint of `--color-text`; switched on it takes `--fill-button` and the `--size-knob` knob (in `--color-button-text`) moves to the right. States `is-on`, `is-focus`, `is-disabled`; `--end` puts the label left and the track at the right edge. Use it for options of a send that apply at once.\n- `.ds-switchlist`: a column of `.ds-switch--end` rows divided by rules, for a short group of settings.\n- `.ds-progress`: a thin flat bar: `.ds-progress__head` with the label and `.ds-progress__value` at the right, then a `<progress class=\"ds-progress__bar\">` one `--space-2` high, `--fill-button` on a `--color-border` track with `--radius-pill` ends; `--success` and `--warning` fill it in the status colours. No stripes and no animation. Use it in a panel for the steps left before sending. `.ds-nav__quota` holds one in the rail under the account, drawn in `--color-bar-alt-text` on a 20% tint of it, for how much of the plan is used.\n- `.ds-avatar`: a person or account drawn as a flat disc `--size-avatar` across with two initials, `--color-accent-text` on `--fill-accent`; `--2` uses the button colours, `--3` is `--color-heading` on `--color-surface-strong`. Use it for the signed-in account in the rail.\n\n## Never\n\n- `block-gap <= 40px`: cards are 24px apart; nothing is further from its neighbour than 40px.\n- `font-weight <= 500`: this type set is light; 500 is its heaviest weight.\n- `font-size >= 10px`: the 10px small print of the site-builder page is the smallest text.\n- `font-size <= 44px`: the hero title is the largest text.\n- `font-families <= 2`: one sans-serif family, plus monospace for code.\n- `line-height <= 1.6`: body text is set at 1.6.\n- `letter-spacing <= 1px`: only headings are tracked, by 0.5px and 1px.\n- `underlined-links <= 0%`: no reference underlines links.\n- `box-shadow = none`: the music and site-builder references have no box shadow.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 0%`: every background is one solid colour.\n- `border-radius <= 20px`: 20px is the control radius; anything rounder is a true pill or disc.\n- `border-width <= 3px`: rules are 1px; the 3px current-item marker is the widest border.\n- `animation = none`: no reference has a CSS animation.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything new in the work area is a `.ds-panel` with a `.ds-panel__head`, placed in `.ds-content` or in a column of `.ds-cols`, 24px from its neighbours; a new figure is another `.ds-stat__item`, a new chart another `.ds-chart` inside a card, a new destination another `.ds-nav__link` in the rail with a 20px line icon. Text goes on the card, on `--color-fill-1` in the banner and on the rail only; the other fills take an icon on its plate or a drawing. Keep every fill flat and every frame unblurred. New actions are always `--color-button`, with at most one primary button per card. Spacing comes from the `--space-*` scale, and any one-off shade is a `color-mix()` of tokens noted next to the rule.\n",
    "components.css": ":root {\n  --size-page: 1060px;\n  --size-rail: 220px;\n  --size-top: 56px;\n  --size-chip: 72px;\n  --size-icon: 28px;\n  --size-chart: 200px;\n  --size-thumb: 104px;\n  --size-search: 260px;\n  --size-dialog: 440px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 24px;\n  --space-6: 40px;\n  --size-avatar: 32px;\n  --size-switch: 40px;\n  --size-knob: 16px;\n  --size-menu: 188px;\n}\n\n/* shell: a rail at the left for the whole height, the top bar, the view and the footer line beside it */\n.ds-page {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  grid-template-rows: auto 1fr auto;\n  min-height: 100vh;\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* views: one screen of the example site shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n.ds-view {\n  grid-column: 2;\n  grid-row: 2;\n  min-width: 0;\n}\n.ds-content {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  max-width: var(--size-page);\n  padding: var(--space-5);\n}\n\n/* nav: the rail, one solid colour; brand on top, grouped links with icons, the account at the foot */\n.ds-nav {\n  grid-column: 1;\n  grid-row: 1 / span 3;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-brand {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-top);\n  padding: 0 var(--space-4);\n  color: inherit;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: calc(var(--space-5) + var(--space-1));\n  height: calc(var(--space-5) + var(--space-1));\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 76%;\n  height: 76%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-nav__group {\n  margin: var(--space-4) 0 var(--space-1);\n  padding: 0 var(--space-4);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n  opacity: 0.6;\n}\n.ds-nav__links {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  color: inherit;\n  border-left: var(--border-width-strong) var(--border-style) transparent;\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  opacity: 0.75;\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 8%, transparent);\n  opacity: 1;\n}\n.ds-nav__link.is-current {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n/* the current view marks its link in the rail; a campaign's report marks Campaigns */\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#dashboard\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n.ds-page:has(#dashboard:target) .ds-nav__link[href=\"#dashboard\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n.ds-page:has(#campaigns:target) .ds-nav__link[href=\"#campaigns\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n.ds-page:has(#report:target) .ds-nav__link[href=\"#campaigns\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n.ds-page:has(#compose:target) .ds-nav__link[href=\"#compose\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  border-left-color: currentColor;\n  opacity: 1;\n}\n.ds-nav__icon {\n  flex: 0 0 auto;\n  width: calc(var(--space-4) + var(--space-1));\n  height: calc(var(--space-4) + var(--space-1));\n}\n.ds-nav__label {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-nav__foot {\n  margin-top: var(--space-5);\n  padding: var(--space-4);\n  border-top: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar-alt-text) 16%, transparent);\n  font-size: var(--text-small);\n}\n.ds-nav__who {\n  display: block;\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n}\n\n/* top bar: search at the left, help and the one primary action at the right */\n.ds-topbar {\n  grid-column: 2;\n  grid-row: 1;\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  min-width: 0;\n  min-height: var(--size-top);\n  padding: var(--space-2) var(--space-5);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-topbar__search {\n  flex: 0 1 var(--size-search);\n  min-width: 0;\n  margin: 0 auto 0 0;\n  padding: var(--space-1) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-topbar__search::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-topbar__search:focus,\n.ds-topbar__search.is-focus {\n  border-color: var(--color-focus);\n  outline: var(--focus-ring);\n}\n.ds-topbar__link {\n  color: var(--color-bar-text);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-topbar__link:hover,\n.ds-topbar__link.is-hover {\n  color: var(--color-link);\n}\n\n/* hero: one flat banner at the head of the dashboard */\n.ds-hero {\n  display: flex;\n  align-items: stretch;\n  gap: var(--space-6);\n  padding: var(--space-5) var(--space-6);\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-page);\n}\n.ds-hero__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-4);\n  max-width: 56ch;\n  font-size: var(--text-large);\n  opacity: 0.85;\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  align-items: flex-end;\n  flex: 0 0 26%;\n  gap: var(--space-2);\n}\n.ds-hero__bar {\n  flex: 1 1 0;\n  height: 40%;\n  background: color-mix(in srgb, var(--color-inverse) 18%, transparent);\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n}\n.ds-hero__bar--2 {\n  height: 65%;\n}\n.ds-hero__bar--3 {\n  height: 52%;\n}\n.ds-hero__bar--4 {\n  height: 85%;\n}\n.ds-hero__bar--5 {\n  height: 100%;\n  background: var(--color-inverse-text);\n}\n\n/* page header: breadcrumb, title and one line at the left, actions at the right; no fill */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-5);\n}\n.ds-page-header__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: var(--space-1) 0 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__title .ds-badge {\n  margin-left: var(--space-2);\n}\n.ds-page-header__text {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 0 0 auto;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* columns */\n.ds-cols {\n  display: grid;\n  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);\n  gap: var(--space-5);\n  align-items: start;\n}\n.ds-cols--level {\n  align-items: stretch;\n}\n.ds-stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-stack > .ds-panel--grow {\n  flex: 1 0 auto;\n}\n\n/* typography */\n.ds-prose {\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin-top: var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin-top: var(--space-4);\n  color: var(--color-heading-alt);\n  font-size: var(--text-h3);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-3);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-3);\n  padding-left: var(--space-4);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-radius: var(--radius-control);\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n  line-height: var(--line-heading);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-link);\n}\n.ds-link--more::after {\n  content: \" \\203A\";\n}\n.ds-linkrow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n}\n\n/* buttons */\n.ds-button {\n  display: inline-block;\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-align: center;\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width-strong);\n}\n.ds-button--secondary {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: currentColor;\n  transition: none;\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--color-button-secondary-text);\n  color: var(--color-button-secondary);\n  border-color: var(--color-button-secondary-text);\n}\n.ds-button--secondary:active,\n.ds-button--secondary.is-active {\n  background: var(--color-button-secondary-text);\n  color: var(--color-button-secondary);\n}\n.ds-button--danger {\n  background: var(--color-danger);\n  color: var(--color-button-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: color-mix(in srgb, var(--color-danger) 85%, var(--color-inverse-text));\n  color: var(--color-button-hover-text);\n}\n.ds-button--danger:active,\n.ds-button--danger.is-active {\n  background: color-mix(in srgb, var(--color-danger) 85%, var(--color-inverse));\n}\n.ds-button--inverse {\n  background: var(--color-inverse-text);\n  color: var(--color-fill-1);\n}\n.ds-button--inverse:hover,\n.ds-button--inverse.is-hover {\n  background: color-mix(in srgb, var(--color-inverse-text) 85%, transparent);\n  color: var(--color-fill-1);\n}\n.ds-button--ghost {\n  background: transparent;\n  color: var(--color-inverse-text);\n  border-color: color-mix(in srgb, var(--color-inverse-text) 55%, transparent);\n  box-shadow: none;\n}\n.ds-button--ghost:hover,\n.ds-button--ghost.is-hover {\n  background: transparent;\n  color: var(--color-inverse-text);\n  border-color: var(--color-inverse-text);\n}\n.ds-button--small {\n  padding: var(--space-1) var(--space-3);\n  font-size: var(--text-small);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  border-color: transparent;\n  box-shadow: none;\n  cursor: default;\n}\n.ds-buttonrow {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form__row {\n  display: flex;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-form__label {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  transition: var(--transition);\n}\n.ds-form__textarea {\n  min-height: calc(var(--space-6) + var(--space-5));\n  resize: vertical;\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-form__input:focus,\n.ds-form__select:focus,\n.ds-form__textarea:focus,\n.ds-form__input.is-focus {\n  border-color: var(--color-focus);\n  outline: var(--focus-ring);\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-form__checkbox {\n  margin: 0;\n  accent-color: var(--color-button);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-2);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  letter-spacing: 0;\n  text-transform: var(--ui-transform);\n  vertical-align: middle;\n  white-space: nowrap;\n}\n.ds-badge--alt {\n  background: color-mix(in srgb, var(--color-accent-alt) 30%, var(--color-surface));\n  color: var(--color-heading);\n  outline: var(--border-width) var(--border-style) var(--color-accent-alt);\n  outline-offset: calc(var(--border-width) * -1);\n}\n.ds-badge--quiet {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n}\n.ds-badge--success {\n  background: var(--color-success);\n  color: var(--color-accent-text);\n}\n.ds-badge--warning {\n  background: var(--color-warning);\n  color: var(--color-accent-text);\n}\n.ds-badge--danger {\n  background: var(--color-danger);\n  color: var(--color-accent-text);\n}\n.ds-badgerow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"\\203A\";\n  margin-right: var(--space-2);\n  color: var(--color-border-strong);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n}\n\n/* table: inside a panel; a quiet head, ruled rows, no outer border of its own */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  color: var(--color-text);\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  text-align: left;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-table thead th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-table tbody th {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-table tbody tr:hover td,\n.ds-table tbody tr:hover th,\n.ds-table tbody tr.is-hover td,\n.ds-table tbody tr.is-hover th {\n  background: var(--color-surface-alt);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__caption {\n  caption-side: bottom;\n  padding: var(--space-2) var(--space-4) 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  text-align: left;\n}\n.ds-table__wrap {\n  overflow-x: auto;\n}\n.ds-table__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* list: rows inside a panel, a title with its state at the right and a line of meta */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:last-child {\n  border-bottom: 0;\n}\n.ds-list__head {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-2);\n}\n.ds-list__title {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__text {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-ui);\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* panel: the card everything stands in */\n.ds-panel {\n  min-width: 0;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__title {\n  margin: 0;\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__body {\n  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__body > :last-child {\n  margin-bottom: 0;\n}\n.ds-panel__figure {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-panel__rows {\n  margin: 0 0 var(--space-3);\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-panel__rows--after {\n  margin-top: var(--space-3);\n}\n.ds-panel__row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* stats: number cards; a solid colour block with an icon, the figure beside it */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat--3 {\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.ds-stat__item {\n  display: flex;\n  min-width: 0;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-stat__chip {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 var(--size-chip);\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  border-radius: calc(var(--radius-panel) - var(--border-width)) 0 0 calc(var(--radius-panel) - var(--border-width));\n}\n.ds-stat__chip--2 {\n  background: var(--color-fill-2);\n}\n.ds-stat__chip--3 {\n  background: var(--color-fill-3);\n}\n.ds-stat__chip--4 {\n  background: var(--color-fill-4);\n}\n.ds-stat__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  box-sizing: content-box;\n  padding: var(--space-2);\n  background: color-mix(in srgb, var(--color-inverse) 40%, transparent);\n  border-radius: 50%;\n}\n.ds-stat__body {\n  flex: 1 1 0;\n  min-width: 0;\n  padding: var(--space-3) var(--space-4);\n}\n.ds-stat__figure {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-stat__delta {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-success);\n  font-size: var(--text-small);\n}\n.ds-stat__delta--down {\n  color: var(--color-danger);\n}\n\n/* chart: flat bars drawn in CSS; a bar's height is a class, in steps of ten percent */\n.ds-chart {\n  min-width: 0;\n}\n.ds-chart__plot {\n  position: relative;\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-4);\n  height: var(--size-chart);\n  padding: 0 var(--space-2);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n}\n.ds-chart--small {\n  margin-bottom: var(--space-3);\n}\n.ds-chart--small .ds-chart__plot {\n  height: calc(var(--size-chart) * 0.5);\n}\n.ds-chart__line {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 25%;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-chart__line--2 {\n  bottom: 50%;\n}\n.ds-chart__line--3 {\n  bottom: 75%;\n}\n.ds-chart__line--4 {\n  bottom: 100%;\n}\n.ds-chart__group {\n  position: relative;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  flex: 1 1 0;\n  gap: var(--space-1);\n  height: 100%;\n  min-width: 0;\n}\n.ds-chart__bar {\n  flex: 0 1 var(--space-5);\n  height: 10%;\n  background: var(--color-fill-1);\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n}\n.ds-chart__bar--alt {\n  background: var(--color-fill-2);\n}\n.ds-chart__bar--20 { height: 20%; }\n.ds-chart__bar--30 { height: 30%; }\n.ds-chart__bar--40 { height: 40%; }\n.ds-chart__bar--50 { height: 50%; }\n.ds-chart__bar--60 { height: 60%; }\n.ds-chart__bar--70 { height: 70%; }\n.ds-chart__bar--80 { height: 80%; }\n.ds-chart__bar--100 { height: 100%; }\n.ds-chart__axis {\n  display: flex;\n  gap: var(--space-4);\n  margin: var(--space-2) 0 0;\n  padding: 0 var(--space-2);\n  list-style: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  text-align: center;\n}\n.ds-chart__tick {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-chart__legend {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-4);\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__key::before {\n  content: \"\";\n  width: var(--space-3);\n  height: var(--space-3);\n  background: var(--color-fill-1);\n  border-radius: var(--radius-control);\n}\n.ds-chart__key--alt::before {\n  background: var(--color-fill-2);\n}\n\n/* grid: template cards; a colour block with a small sheet on it, the name underneath */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n}\n.ds-grid__cell {\n  min-width: 0;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__thumb {\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  height: var(--size-thumb);\n  background: var(--color-fill-1);\n  border-radius: calc(var(--radius-page) - var(--border-width)) calc(var(--radius-page) - var(--border-width)) 0 0;\n}\n.ds-grid__thumb--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__thumb--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__thumb--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__sheet {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  width: 46%;\n  height: 78%;\n  padding: var(--space-2);\n  background: var(--color-surface);\n}\n.ds-grid__line {\n  height: var(--space-1);\n  background: var(--color-surface-strong);\n}\n.ds-grid__line--head {\n  height: var(--space-3);\n  background: var(--color-border-strong);\n}\n.ds-grid__line--short {\n  width: 60%;\n}\n.ds-grid__body {\n  padding: var(--space-3) var(--space-4);\n}\n.ds-grid__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-grid__text {\n  margin: var(--space-1) 0 var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* tabs: the head of a panel; the current tab joins the panel under a strong top edge */\n.ds-tabs {\n  display: flex;\n  margin: 0;\n  padding: var(--space-2) var(--space-2) 0;\n  list-style: none;\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width)) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-tabs__tab {\n  display: block;\n  margin-bottom: calc(var(--border-width) * -1);\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-top: var(--border-width-strong) var(--border-style) transparent;\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link);\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-panel);\n  color: var(--color-heading);\n  border-color: var(--color-border);\n  border-top-color: var(--color-button);\n  border-bottom-color: transparent;\n}\n\n/* sidebar: a card of links with counts */\n.ds-sidebar {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  font-size: var(--text-ui);\n}\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-heading-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  padding: var(--space-1) var(--space-4);\n  border-left: var(--border-width-strong) var(--border-style) transparent;\n}\n.ds-sidebar__item.is-current {\n  color: var(--color-heading);\n  border-left-color: var(--color-button);\n  font-weight: var(--weight-bold);\n}\n.ds-sidebar__count {\n  float: right;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n\n/* notice */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border: var(--border-width) var(--border-style) var(--color-danger);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-noticerow {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n\n/* pagination: small outlined squares */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__link {\n  display: block;\n  min-width: calc(var(--space-5) + var(--space-1));\n  padding: var(--space-1) var(--space-2);\n  background: var(--fill-panel);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  border-color: var(--color-border-strong);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border-color: transparent;\n  font-weight: var(--weight-bold);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n}\n\n/* dialog: a small card in the middle of a dimmed block */\n.ds-dialog {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-6) var(--space-4);\n  background: var(--color-overlay);\n  border-radius: var(--radius-panel);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-dialog__close {\n  color: var(--color-text-muted);\n  font-size: var(--text-h2);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-dialog__close::before {\n  content: \"\";\n  display: inline-block;\n  width: calc(var(--text-h2) * 0.6);\n  height: calc(var(--text-h2) * 0.6);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  rotate: 45deg;\n  vertical-align: middle;\n}\n.ds-dialog__body {\n  padding: var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 0 0 var(--radius-panel) var(--radius-panel);\n}\n\n/* empty state: centred in a dashed box */\n.ds-empty {\n  padding: var(--space-6) var(--space-4);\n  border: var(--border-width) dashed var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  text-align: center;\n}\n.ds-empty__icon {\n  width: calc(var(--size-icon) + var(--space-4));\n  height: calc(var(--size-icon) + var(--space-4));\n  color: var(--color-text-muted);\n}\n.ds-empty__title {\n  margin: var(--space-2) 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-4);\n}\n\n/* footer: one thin line under the view */\n.ds-footer {\n  grid-column: 2;\n  grid-row: 3;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-5);\n  min-width: 0;\n  padding: var(--space-3) var(--space-5);\n  background: var(--fill-inverse);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-footer__name {\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-text-muted);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  color: var(--color-inverse-text);\n}\n\n/* menu: a drop-down under a navigation item, a <details>; a flat list in a border, opened by its toggle */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: inherit;\n  list-style: none;\n  cursor: pointer;\n}\n.ds-menu__toggle:hover,\n.ds-menu__toggle.is-hover {\n  opacity: 0.85;\n}\n.ds-nav__account {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-menu__toggle::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__toggle::after {\n  content: \"\";\n  flex: 0 0 auto;\n  width: calc(var(--space-1) + var(--border-width));\n  height: calc(var(--space-1) + var(--border-width));\n  margin-top: calc(0 - var(--space-1) / 2);\n  border-right: var(--border-width) var(--border-style) currentColor;\n  border-bottom: var(--border-width) var(--border-style) currentColor;\n  transform: rotate(45deg);\n}\n.ds-menu__toggle:focus-visible,\n.ds-menu__toggle.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 5;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  text-align: left;\n}\n.ds-menu__item {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-menu__item:hover,\n.ds-menu__item.is-hover {\n  background: var(--color-surface-alt);\n  color: var(--color-link);\n}\n.ds-menu__item:focus-visible,\n.ds-menu__item.is-focus {\n  outline: var(--focus-ring);\n}\n\n/* accordion: sections that open and close, divided by rules; a plus opens, a minus closes */\n.ds-accordion {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  flex: none;\n  align-self: center;\n  display: inline-block;\n  width: calc(var(--space-3) - var(--space-2) / 4);\n  height: calc(var(--space-3) - var(--space-2) / 4);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  color: var(--color-link);\n}\n.ds-accordion__item[open] > .ds-accordion__head::after {\n  clip-path: inset(calc(50% - var(--space-2) / 8) 0);\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-link);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: 72ch;\n  padding: 0 0 var(--space-4);\n  color: var(--color-text);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* tooltip: a small flat box above its trigger, shown on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-block;\n  border-bottom: var(--border-width) dotted currentColor;\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 6;\n  display: none;\n  width: max-content;\n  max-width: min(32ch, 70vw);\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  letter-spacing: 0;\n  text-align: left;\n  text-transform: none;\n  white-space: normal;\n}\n.ds-tooltip__tip::after {\n  content: \"\";\n  position: absolute;\n  top: calc(100% - var(--space-1));\n  left: var(--space-3);\n  width: var(--space-2);\n  height: var(--space-2);\n  background: var(--fill-inverse);\n  transform: rotate(45deg);\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n\n/* switch: an on/off control over a checkbox; the knob slides to the right and the track takes the button fill */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  flex: 0 0 auto;\n  width: var(--size-switch);\n  height: calc(var(--size-switch) / 2);\n  background: color-mix(in srgb, var(--color-text) 30%, transparent);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  left: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  width: var(--size-knob);\n  height: var(--size-knob);\n  background: var(--color-button-text);\n  border-radius: var(--radius-pill);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch.is-on .ds-switch__track {\n  background: var(--fill-button);\n}\n.ds-switch__input:checked + .ds-switch__track::after,\n.ds-switch.is-on .ds-switch__track::after {\n  left: calc(var(--size-switch) / 2 + (var(--size-switch) / 2 - var(--size-knob)) / 2);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch.is-focus .ds-switch__track {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width);\n}\n.ds-switch__input:disabled + .ds-switch__track,\n.ds-switch.is-disabled .ds-switch__track {\n  background: var(--color-disabled);\n}\n.ds-switch__label {\n  min-width: 0;\n}\n.ds-switch--end {\n  display: flex;\n  flex-direction: row-reverse;\n  justify-content: space-between;\n}\n\n.ds-switchlist {\n  display: flex;\n  flex-direction: column;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-switchlist .ds-switch {\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* progress: a thin flat bar on a track; no stripes, no gloss, no movement */\n.ds-progress {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-progress__head {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-2);\n  color: var(--color-text);\n}\n.ds-progress__value {\n  color: var(--color-text-muted);\n  font-variant-numeric: tabular-nums;\n}\n.ds-progress__bar {\n  display: block;\n  width: 100%;\n  height: var(--space-2);\n  appearance: none;\n  overflow: hidden;\n  background: var(--color-border);\n  border: 0;\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar::-webkit-progress-bar {\n  background: transparent;\n}\n.ds-progress__bar::-webkit-progress-value {\n  background: var(--fill-button);\n}\n.ds-progress__bar::-moz-progress-bar {\n  background: var(--fill-button);\n}\n.ds-progress__bar--success::-moz-progress-bar {\n  background: var(--color-success);\n}\n.ds-progress__bar--warning::-webkit-progress-value {\n  background: var(--color-warning);\n}\n.ds-progress__bar--warning::-moz-progress-bar {\n  background: var(--color-warning);\n}\n\n/* avatar: a flat disc with initials */\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: 50%;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n}\n/* the quota in the rail: the bar is drawn in the rail's own text colour */\n.ds-nav__quota {\n  padding: var(--space-4) var(--space-4) 0;\n}\n.ds-nav__quota .ds-progress__head,\n.ds-nav__quota .ds-progress__value {\n  color: inherit;\n  font-size: var(--text-small);\n}\n.ds-nav__quota .ds-progress__bar {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 20%, transparent);\n}\n.ds-nav__quota .ds-progress__bar::-webkit-progress-value {\n  background: var(--color-bar-alt-text);\n}\n.ds-nav__quota .ds-progress__bar::-moz-progress-bar {\n  background: var(--color-bar-alt-text);\n}\n.ds-panel__body .ds-progress {\n  margin-bottom: var(--space-3);\n}\n.ds-prose + .ds-accordion {\n  margin-top: var(--space-4);\n}\n\n/* medium windows: number cards and templates two across, the side column goes under */\n@media (max-width: 1040px) {\n  .ds-stat,\n  .ds-stat--3,\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-cols {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-hero__art {\n    display: none;\n  }\n}\n\n/* narrow windows: the rail becomes a block on top: brand and account, then its links in one row */\n@media (max-width: 760px) {\n  .ds-page {\n    display: block;\n    min-height: 0;\n  }\n  .ds-nav {\n    flex-direction: row;\n    flex-wrap: wrap;\n    align-items: center;\n  }\n  .ds-brand {\n    order: -2;\n    flex: 1 1 auto;\n  }\n  .ds-nav__foot {\n    order: -1;\n    margin: 0;\n    padding: 0 var(--space-4);\n    border-top: 0;\n  }\n  .ds-nav__account,\n  .ds-nav__quota {\n    display: none;\n  }\n  .ds-menu__list {\n    right: 0;\n    left: auto;\n  }\n  /* the first group title only breaks the row here: the links start a line of their own under the brand */\n  .ds-nav__group {\n    flex: 0 0 100%;\n    height: 0;\n    margin: 0;\n    padding: 0;\n    overflow: hidden;\n  }\n  .ds-nav__group ~ .ds-nav__group {\n    display: none;\n  }\n  .ds-nav__links {\n    display: flex;\n  }\n  .ds-nav__link {\n    padding: var(--space-3) var(--space-3);\n    border-left: 0;\n    border-bottom: var(--border-width-strong) var(--border-style) transparent;\n    white-space: nowrap;\n  }\n  .ds-nav__link.is-current {\n    border-bottom-color: currentColor;\n  }\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(#campaigns:target) .ds-nav__link[href=\"#campaigns\"],\n  .ds-page:has(#report:target) .ds-nav__link[href=\"#campaigns\"],\n  .ds-page:has(#compose:target) .ds-nav__link[href=\"#compose\"],\n  .ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n    border-bottom-color: currentColor;\n  }\n  .ds-nav__icon {\n    display: none;\n  }\n  .ds-topbar {\n    padding: var(--space-2) var(--space-4);\n  }\n  .ds-topbar__link {\n    display: none;\n  }\n  .ds-content {\n    gap: var(--space-4);\n    padding: var(--space-4);\n  }\n  .ds-hero {\n    padding: var(--space-4);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-3);\n  }\n  .ds-page-header__copy {\n    flex: 0 0 auto;\n  }\n  .ds-stat,\n  .ds-stat--3 {\n    grid-template-columns: minmax(0, 1fr);\n    gap: var(--space-3);\n  }\n  .ds-grid {\n    gap: var(--space-4);\n  }\n  .ds-cols,\n  .ds-stack {\n    gap: var(--space-4);\n  }\n  .ds-chart__plot,\n  .ds-chart__axis {\n    gap: var(--space-2);\n  }\n  .ds-tabs {\n    overflow-x: auto;\n  }\n  .ds-table {\n    min-width: 62ch;\n  }\n  .ds-form__row {\n    flex-direction: column;\n  }\n  .ds-dialog {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-footer__links {\n    justify-content: flex-start;\n  }\n  .ds-tooltip {\n    position: static;\n  }\n  .ds-tooltip__tip,\n  .ds-tooltip--end .ds-tooltip__tip {\n    right: var(--space-3);\n    bottom: auto;\n    left: var(--space-3);\n    width: auto;\n    max-width: none;\n    margin-top: var(--space-1);\n  }\n  .ds-tooltip__tip::after {\n    display: none;\n  }\n}\n\n/* phones: the rail's links become a dock of four equal cells along the bottom edge */\n@media (max-width: 760px) {\n  .ds-page {\n    padding-bottom: calc(var(--space-6) + var(--space-4));\n  }\n  .ds-nav__links {\n    position: fixed;\n    left: 0;\n    bottom: 0;\n    z-index: 6;\n    width: 75%;\n    height: calc(var(--space-6) + var(--space-4));\n    background: var(--fill-bar-alt);\n  }\n  .ds-nav__links ~ .ds-nav__links {\n    left: 75%;\n    width: 25%;\n  }\n  .ds-nav__links > li {\n    flex: 1 1 0;\n    min-width: 0;\n  }\n  .ds-nav__link {\n    flex-direction: column;\n    justify-content: center;\n    gap: var(--space-1);\n    height: 100%;\n    padding: var(--space-1);\n    border-bottom: 0;\n    border-top: var(--border-width-strong) var(--border-style) transparent;\n    font-size: var(--text-small);\n    text-align: center;\n  }\n  .ds-nav__link.is-current,\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(#campaigns:target) .ds-nav__link[href=\"#campaigns\"],\n  .ds-page:has(#report:target) .ds-nav__link[href=\"#campaigns\"],\n  .ds-page:has(#compose:target) .ds-nav__link[href=\"#compose\"],\n  .ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n    border-top-color: currentColor;\n  }\n  .ds-nav__icon {\n    display: block;\n  }\n}\n/* phones: the count rides on the corner of its dock cell */\n@media (max-width: 760px) {\n  .ds-nav__link {\n    position: relative;\n  }\n  .ds-nav__link .ds-badge {\n    position: absolute;\n    top: var(--space-1);\n    left: calc(50% + var(--space-2));\n  }\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: flat design dashboard specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <a class=\"ds-brand\" data-component=\"brand\" href=\"#dashboard\">\n    <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\".3\"/><path d=\"M15.5 8.5L21.64 14.64A10 10 0 0 1 14.64 21.64L8.5 15.5Z\" opacity=\".35\"/><rect x=\"8.5\" y=\"8.5\" width=\"7\" height=\"7\"/></svg></span>\n    <span class=\"ds-brand__name\">chronoskin</span>\n  </a>\n  <p class=\"ds-nav__group\">Mailings</p>\n  <ul class=\"ds-nav__links\">\n    <li><a class=\"ds-nav__link\" href=\"#dashboard\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M3 17V9 M8 17V3 M13 17v-6 M18 17V6\"/></svg><span class=\"ds-nav__label\">Dashboard</span></a></li>\n    <li><a class=\"ds-nav__link\" href=\"#campaigns\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M2 4h16v12H2z M2 5l8 6 8-6\"/></svg><span class=\"ds-nav__label\">Campaigns</span><span class=\"ds-badge\">23</span></a></li>\n    <li><a class=\"ds-nav__link\" href=\"#compose\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M4 16l1-4 9-9 3 3-9 9z M12 5l3 3\"/></svg><span class=\"ds-nav__label\">Write</span></a></li>\n  </ul>\n  <p class=\"ds-nav__group\">Help</p>\n  <ul class=\"ds-nav__links\">\n    <li><a class=\"ds-nav__link\" href=\"#guide\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M4 3h9l3 3v11H4z M7 8h6 M7 11h6 M7 14h4\"/></svg><span class=\"ds-nav__label\">Sending guide</span></a></li>\n  </ul>\n  <div class=\"ds-nav__foot\">\n    <details class=\"ds-menu\">\n      <summary class=\"ds-menu__toggle\"><span class=\"ds-avatar\" aria-hidden=\"true\">TO</span><span class=\"ds-nav__account\"><span class=\"ds-nav__who\">Tomas Okafor</span>Harbour Bakery</span></summary>\n      <ul class=\"ds-menu__list\">\n        <li><a class=\"ds-menu__item\" href=\"#campaigns\">Lists and readers</a></li>\n        <li><a class=\"ds-menu__item\" href=\"#compose\">Sender details</a></li>\n        <li><a class=\"ds-menu__item\" href=\"#guide\">Help</a></li>\n        <li><a class=\"ds-menu__item\" href=\"#dashboard\">Sign out</a></li>\n      </ul>\n    </details>\n  </div>\n  <div class=\"ds-nav__quota\">\n    <div class=\"ds-progress\">\n      <div class=\"ds-progress__head\"><span>Readers on this plan</span><span class=\"ds-progress__value\">2,480 of 5,000</span></div>\n      <progress class=\"ds-progress__bar\" value=\"2480\" max=\"5000\">2,480 of 5,000</progress>\n    </div>\n  </div>\n</header>\n\n<div class=\"ds-topbar\">\n  <input class=\"ds-topbar__search\" type=\"search\" placeholder=\"Find a campaign or a reader\" aria-label=\"Search\">\n  <a class=\"ds-topbar__link\" href=\"#guide\">Help</a>\n  <a class=\"ds-topbar__link\" href=\"#campaigns\">All campaigns</a>\n  <a class=\"ds-button ds-button--small\" href=\"#compose\">New campaign</a>\n</div>\n\n<section class=\"ds-view ds-view--home\" id=\"dashboard\">\n  <div class=\"ds-content\">\n    <div class=\"ds-hero\" data-component=\"hero\">\n      <div class=\"ds-hero__copy\">\n        <h1 class=\"ds-hero__title\">Tuesday's letter was opened by 1,412 readers</h1>\n        <p class=\"ds-hero__lead\">That is 57 in every 100, the best send since chronoskin started counting for you in January.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button ds-button--inverse\" href=\"#report\">Read the report</a>\n          <a class=\"ds-button ds-button--ghost\" href=\"#compose\">Write the next one</a>\n        </div>\n      </div>\n      <div class=\"ds-hero__art\" aria-hidden=\"true\">\n        <span class=\"ds-hero__bar\"></span>\n        <span class=\"ds-hero__bar ds-hero__bar--3\"></span>\n        <span class=\"ds-hero__bar ds-hero__bar--2\"></span>\n        <span class=\"ds-hero__bar\"></span>\n        <span class=\"ds-hero__bar ds-hero__bar--4\"></span>\n        <span class=\"ds-hero__bar ds-hero__bar--2\"></span>\n        <span class=\"ds-hero__bar ds-hero__bar--5\"></span>\n      </div>\n    </div>\n\n    <ul class=\"ds-stat\" data-component=\"stats\">\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"10\" r=\"4\"/><path d=\"M3 23c1-5 4-7 8-7s7 2 8 7 M19 7a4 4 0 0 1 0 7 M21 17c2 1 3 3 4 6\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">2,480</span><span class=\"ds-stat__label\">Readers</span><span class=\"ds-stat__delta\">64 more than last week</span></span>\n      </li>\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip ds-stat__chip--2\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 11l11-7 11 7v12H3z M3 11l11 7 11-7\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">57%</span><span class=\"ds-stat__label\">Opened</span><span class=\"ds-stat__delta\">4 points up</span></span>\n      </li>\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip ds-stat__chip--3\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M8 4l14 9-6 2 4 7-3 2-4-7-5 4z\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">18%</span><span class=\"ds-stat__label\">Clicked</span><span class=\"ds-stat__delta ds-stat__delta--down\">1 point down</span></span>\n      </li>\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip ds-stat__chip--4\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 5h18v18H5z M10 14h8\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">6</span><span class=\"ds-stat__label\">Unsubscribed</span><span class=\"ds-stat__delta\">2 fewer than usual</span></span>\n      </li>\n    </ul>\n\n    <div class=\"ds-cols ds-cols--level\">\n      <section class=\"ds-panel\" data-component=\"panel\">\n        <div class=\"ds-panel__head\">\n          <h2 class=\"ds-panel__title\">Opens and clicks, last seven sends</h2>\n          <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#campaigns\">Export</a>\n        </div>\n        <div class=\"ds-panel__body\">\n          <div class=\"ds-chart\">\n            <div class=\"ds-chart__plot\" role=\"img\" aria-label=\"Bar chart of opens and clicks for the last seven sends\">\n              <span class=\"ds-chart__line\"></span><span class=\"ds-chart__line ds-chart__line--2\"></span><span class=\"ds-chart__line ds-chart__line--3\"></span><span class=\"ds-chart__line ds-chart__line--4\"></span>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--60\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--20\"></span></div>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--70\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--30\"></span></div>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--50\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--20\"></span></div>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--80\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--30\"></span></div>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--70\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--40\"></span></div>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--80\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--30\"></span></div>\n              <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--100\"></span><span class=\"ds-chart__bar ds-chart__bar--alt ds-chart__bar--30\"></span></div>\n            </div>\n            <ul class=\"ds-chart__axis\">\n              <li class=\"ds-chart__tick\">27 Jan</li><li class=\"ds-chart__tick\">3 Feb</li><li class=\"ds-chart__tick\">10 Feb</li><li class=\"ds-chart__tick\">17 Feb</li><li class=\"ds-chart__tick\">24 Feb</li><li class=\"ds-chart__tick\">3 Mar</li><li class=\"ds-chart__tick\">10 Mar</li>\n            </ul>\n          </div>\n        </div>\n        <div class=\"ds-table__foot\">\n          <div class=\"ds-chart__legend\"><span class=\"ds-chart__key\">Opened</span><span class=\"ds-chart__key ds-chart__key--alt\">Clicked a link</span></div>\n          <span>Each line is 400 readers</span>\n        </div>\n      </section>\n\n      <section class=\"ds-panel\">\n        <div class=\"ds-panel__head\">\n          <h2 class=\"ds-panel__title\">Latest campaigns</h2>\n          <a class=\"ds-link ds-link--more\" href=\"#campaigns\">All</a>\n        </div>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <div class=\"ds-list__head\"><a class=\"ds-list__title\" href=\"#report\">The March bake list</a><span class=\"ds-badge ds-badge--success\">Sent</span></div>\n            <span class=\"ds-list__meta\">10 March 2015 · 2,474 delivered · 57% opened</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div class=\"ds-list__head\"><a class=\"ds-list__title\" href=\"#report\">Sourdough class, two places left</a><span class=\"ds-badge ds-badge--success\">Sent</span></div>\n            <span class=\"ds-list__meta\">3 March 2015 · 2,410 delivered · 49% opened</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div class=\"ds-list__head\"><a class=\"ds-list__title\" href=\"#compose\">Easter orders open</a><span class=\"ds-badge ds-badge--warning\">Scheduled</span></div>\n            <span class=\"ds-list__meta\">Goes out 17 March 2015 at 7 am</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div class=\"ds-list__head\"><a class=\"ds-list__title\" href=\"#compose\">A note about the new oven</a><span class=\"ds-badge ds-badge--quiet\">Draft</span></div>\n            <span class=\"ds-list__meta\">Edited yesterday by Tomas</span>\n          </li>\n        </ul>\n      </section>\n    </div>\n\n    <div class=\"ds-grid\" data-component=\"grid\">\n      <div class=\"ds-grid__cell\">\n        <div class=\"ds-grid__thumb\" aria-hidden=\"true\"><span class=\"ds-grid__sheet\"><span class=\"ds-grid__line ds-grid__line--head\"></span><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line ds-grid__line--short\"></span></span></div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\">Weekly letter</h3>\n          <p class=\"ds-grid__text\">One column, used 14 times</p>\n          <a class=\"ds-link ds-link--more\" href=\"#compose\">Use it</a>\n        </div>\n      </div>\n      <div class=\"ds-grid__cell\">\n        <div class=\"ds-grid__thumb ds-grid__thumb--2\" aria-hidden=\"true\"><span class=\"ds-grid__sheet\"><span class=\"ds-grid__line ds-grid__line--head\"></span><span class=\"ds-grid__line ds-grid__line--short\"></span><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line\"></span></span></div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\">Announcement</h3>\n          <p class=\"ds-grid__text\">Headline and one button, used 5 times</p>\n          <a class=\"ds-link ds-link--more\" href=\"#compose\">Use it</a>\n        </div>\n      </div>\n      <div class=\"ds-grid__cell\">\n        <div class=\"ds-grid__thumb ds-grid__thumb--3\" aria-hidden=\"true\"><span class=\"ds-grid__sheet\"><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line ds-grid__line--head\"></span><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line ds-grid__line--short\"></span></span></div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\">Price list</h3>\n          <p class=\"ds-grid__text\">Two columns, used 3 times</p>\n          <a class=\"ds-link ds-link--more\" href=\"#compose\">Use it</a>\n        </div>\n      </div>\n      <div class=\"ds-grid__cell\">\n        <div class=\"ds-grid__thumb ds-grid__thumb--4\" aria-hidden=\"true\"><span class=\"ds-grid__sheet\"><span class=\"ds-grid__line ds-grid__line--short\"></span><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line\"></span><span class=\"ds-grid__line ds-grid__line--head\"></span></span></div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\">Plain note</h3>\n          <p class=\"ds-grid__text\">Text only, used once</p>\n          <a class=\"ds-link ds-link--more\" href=\"#compose\">Use it</a>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"campaigns\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\" data-component=\"page-header\">\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#dashboard\">Dashboard</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#campaigns\">Campaigns</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">All</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Campaigns</h1>\n        <p class=\"ds-page-header__text\">Every letter you have written, with how it did.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#guide\">Sending guide</a>\n        <a class=\"ds-button\" href=\"#compose\">New campaign</a>\n      </div>\n    </header>\n\n    <div class=\"ds-cols ds-cols--level\">\n      <section class=\"ds-panel\">\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#campaigns\">All</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#campaigns\">Sent</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#campaigns\">Scheduled</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#campaigns\">Drafts</a></li>\n        </ul>\n        <div class=\"ds-table__wrap\">\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr>\n                <th scope=\"col\">Campaign</th>\n                <th scope=\"col\">Sent</th>\n                <th scope=\"col\">Status</th>\n                <th scope=\"col\" class=\"ds-table__num\">Delivered</th>\n                <th scope=\"col\" class=\"ds-table__num\">Opened</th>\n                <th scope=\"col\" class=\"ds-table__num\">Clicked</th>\n              </tr>\n            </thead>\n            <tbody>\n              <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#report\">The March bake list</a></th><td>10 March 2015</td><td><span class=\"ds-badge ds-badge--success\">Sent</span></td><td class=\"ds-table__num\">2,474</td><td class=\"ds-table__num\">57%</td><td class=\"ds-table__num\">18%</td></tr>\n              <tr class=\"is-hover\"><th scope=\"row\"><a class=\"ds-link\" href=\"#report\">Sourdough class, two places left</a></th><td>3 March 2015</td><td><span class=\"ds-badge ds-badge--success\">Sent</span></td><td class=\"ds-table__num\">2,410</td><td class=\"ds-table__num\">49%</td><td class=\"ds-table__num\">22%</td></tr>\n              <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#compose\">Easter orders open</a></th><td>17 March 2015</td><td><span class=\"ds-badge ds-badge--warning\">Scheduled</span></td><td class=\"ds-table__num\">0</td><td class=\"ds-table__num\">0%</td><td class=\"ds-table__num\">0%</td></tr>\n              <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#report\">Closed on the 24th</a></th><td>24 February 2015</td><td><span class=\"ds-badge ds-badge--danger\">Bounced</span></td><td class=\"ds-table__num\">1,902</td><td class=\"ds-table__num\">41%</td><td class=\"ds-table__num\">6%</td></tr>\n              <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#report\">February bake list</a></th><td>10 February 2015</td><td><span class=\"ds-badge ds-badge--success\">Sent</span></td><td class=\"ds-table__num\">2,355</td><td class=\"ds-table__num\">52%</td><td class=\"ds-table__num\">17%</td></tr>\n              <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#compose\">A note about the new oven</a></th><td>Not sent</td><td><span class=\"ds-badge ds-badge--quiet\">Draft</span></td><td class=\"ds-table__num\">0</td><td class=\"ds-table__num\">0%</td><td class=\"ds-table__num\">0%</td></tr>\n            </tbody>\n          </table>\n        </div>\n        <div class=\"ds-table__foot\">\n          <ul class=\"ds-pagination\" data-component=\"pagination\">\n            <li><a class=\"ds-pagination__link is-disabled\" href=\"#campaigns\">Previous</a></li>\n            <li><a class=\"ds-pagination__link is-current\" href=\"#campaigns\">1</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#campaigns\">2</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#campaigns\">3</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#campaigns\">4</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#campaigns\">Next</a></li>\n          </ul>\n          <span>Showing 6 of 23 campaigns</span>\n        </div>\n      </section>\n\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Lists</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\"><span class=\"ds-sidebar__count\">2,480</span>Everyone</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">1,130</span><a class=\"ds-link\" href=\"#campaigns\">Weekly letter</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">412</span><a class=\"ds-link\" href=\"#campaigns\">Class news</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">96</span><a class=\"ds-link\" href=\"#campaigns\">Wholesale</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">What the labels mean</h2></div>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-badgerow\" data-component=\"badge\">\n              <span class=\"ds-badge\">New</span>\n              <span class=\"ds-badge ds-badge--alt\">Test</span>\n              <span class=\"ds-badge ds-badge--quiet\">Draft</span>\n              <span class=\"ds-badge ds-badge--success\">Sent</span>\n              <span class=\"ds-badge ds-badge--warning\">Scheduled</span>\n              <span class=\"ds-badge ds-badge--danger\">Bounced</span>\n            </div>\n            <ul class=\"ds-panel__rows ds-panel__rows--after\">\n              <li class=\"ds-panel__row\"><span>Sent</span><span>Delivered to its list</span></li>\n              <li class=\"ds-panel__row\"><span>Scheduled</span><span>Waiting for its hour</span></li>\n              <li class=\"ds-panel__row\"><span>Bounced</span><span>One in ten came back</span></li>\n              <li class=\"ds-panel__row\"><span>Test</span><span>Sent to you only</span></li>\n            </ul>\n            <a class=\"ds-link ds-link--more\" href=\"#guide\">More in the sending guide</a>\n          </div>\n        </section>\n      </div>\n    </div>\n\n    <div class=\"ds-empty\" data-component=\"empty\">\n      <svg class=\"ds-empty__icon\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M6 12h36v26H6z M6 14l18 13 18-13\"/></svg>\n      <h2 class=\"ds-empty__title\">No automatic letters yet</h2>\n      <p class=\"ds-empty__text\">A welcome letter goes out by itself when someone joins a list. You have not written one.</p>\n      <a class=\"ds-button\" href=\"#compose\">Write a welcome letter</a>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"report\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#dashboard\">Dashboard</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#campaigns\">Campaigns</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">The March bake list</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">The March bake list <span class=\"ds-badge ds-badge--success\">Sent</span></h1>\n        <p class=\"ds-page-header__text\">Sent on Tuesday 10 March 2015 at 7 am to the list Everyone.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#campaigns\">Back to campaigns</a>\n      </div>\n    </header>\n\n    <ul class=\"ds-stat ds-stat--3\">\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 7h22v14H3z M3 8l11 8 11-8\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">2,474</span><span class=\"ds-stat__label\">Delivered</span><span class=\"ds-stat__delta ds-stat__delta--down\">6 bounced</span></span>\n      </li>\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip ds-stat__chip--2\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 11l11-7 11 7v12H3z M3 11l11 7 11-7\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">1,412</span><span class=\"ds-stat__label\">Opened</span><span class=\"ds-stat__delta\">57 in every 100</span></span>\n      </li>\n      <li class=\"ds-stat__item\">\n        <span class=\"ds-stat__chip ds-stat__chip--4\"><svg class=\"ds-stat__icon\" viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M8 4l14 9-6 2 4 7-3 2-4-7-5 4z\"/></svg></span>\n        <span class=\"ds-stat__body\"><span class=\"ds-stat__figure\">446</span><span class=\"ds-stat__label\">Clicked</span><span class=\"ds-stat__delta\">18 in every 100</span></span>\n      </li>\n    </ul>\n\n    <div class=\"ds-cols ds-cols--level\">\n      <div class=\"ds-stack\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Links in this letter</h2></div>\n          <div class=\"ds-table__wrap\">\n            <table class=\"ds-table\">\n              <caption class=\"ds-table__caption\">A reader who clicks twice is counted once.</caption>\n              <thead>\n                <tr><th scope=\"col\">Link</th><th scope=\"col\" class=\"ds-table__num\">Clicks</th><th scope=\"col\" class=\"ds-table__num\">Share</th></tr>\n              </thead>\n              <tbody>\n                <tr><th scope=\"row\">Order the weekend loaf</th><td class=\"ds-table__num\">201</td><td class=\"ds-table__num\">45%</td></tr>\n                <tr><th scope=\"row\">Sourdough class dates</th><td class=\"ds-table__num\">118</td><td class=\"ds-table__num\">26%</td></tr>\n                <tr><th scope=\"row\">Recipe: seeded rye</th><td class=\"ds-table__num\">94</td><td class=\"ds-table__num\">21%</td></tr>\n                <tr><th scope=\"row\">Opening hours</th><td class=\"ds-table__num\">33</td><td class=\"ds-table__num\">8%</td></tr>\n              </tbody>\n            </table>\n          </div>\n          <div class=\"ds-table__foot\">\n            <div class=\"ds-buttonrow\" data-component=\"buttons\">\n              <a class=\"ds-button\" href=\"#compose\">Send to those who missed it</a>\n              <a class=\"ds-button is-hover\" href=\"#compose\">Copy as new</a>\n              <a class=\"ds-button ds-button--secondary\" href=\"#report\">Export</a>\n              <button class=\"ds-button\" type=\"button\" disabled>Edit</button>\n              <a class=\"ds-button ds-button--danger\" href=\"#report\">Delete report</a>\n            </div>\n          </div>\n        </section>\n\n        <div class=\"ds-dialog\" data-component=\"dialog\">\n          <div class=\"ds-dialog__box\" role=\"dialog\" aria-labelledby=\"dialog-title\">\n            <div class=\"ds-dialog__head\">\n              <h2 class=\"ds-dialog__title\" id=\"dialog-title\">Delete this report?</h2>\n              <a class=\"ds-dialog__close\" href=\"#report\" aria-label=\"Close\"></a>\n            </div>\n            <div class=\"ds-dialog__body\">\n              <p>The letter stays in your readers' inboxes. Its figures and the list of clicks are removed for good.</p>\n            </div>\n            <div class=\"ds-dialog__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#report\">Keep it</a>\n              <a class=\"ds-button ds-button--danger\" href=\"#campaigns\">Delete report</a>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-stack\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Opens by hour</h2></div>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-chart\">\n              <div class=\"ds-chart__plot\" role=\"img\" aria-label=\"Bar chart of opens in the first six hours\">\n                <span class=\"ds-chart__line\"></span><span class=\"ds-chart__line ds-chart__line--2\"></span><span class=\"ds-chart__line ds-chart__line--3\"></span><span class=\"ds-chart__line ds-chart__line--4\"></span>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--100\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--70\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--40\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--30\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--50\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--20\"></span></div>\n              </div>\n              <ul class=\"ds-chart__axis\">\n                <li class=\"ds-chart__tick\">7</li><li class=\"ds-chart__tick\">8</li><li class=\"ds-chart__tick\">9</li><li class=\"ds-chart__tick\">10</li><li class=\"ds-chart__tick\">11</li><li class=\"ds-chart__tick\">12</li>\n              </ul>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">About this send</h2></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span>From</span><span>Harbour Bakery</span></li>\n              <li class=\"ds-panel__row\"><span>List</span><span>Everyone</span></li>\n              <li class=\"ds-panel__row\"><span>Template</span><span>Weekly letter</span></li>\n              <li class=\"ds-panel__row\"><span><span class=\"ds-tooltip\" tabindex=\"0\">Unsubscribed<span class=\"ds-tooltip__tip\" role=\"tooltip\">Readers who left the list from the link at the foot of this letter.</span></span></span><span>2</span></li>\n            </ul>\n            <a class=\"ds-link ds-link--more\" href=\"#guide\">How opens are counted</a>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"compose\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#dashboard\">Dashboard</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#campaigns\">Campaigns</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">New campaign</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Write a campaign</h1>\n        <p class=\"ds-page-header__text\">Say who it is from, pick a list and write the letter.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#campaigns\">Discard</a>\n      </div>\n    </header>\n\n    <div class=\"ds-cols ds-cols--level\">\n      <div class=\"ds-stack\">\n        <div class=\"ds-noticerow\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">Saved as a draft.</span> Nothing is sent until you choose a time.</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">This campaign cannot be scheduled yet.</span> Check the highlighted field.</p>\n        </div>\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">The letter</h2><span class=\"ds-badge ds-badge--quiet\">Draft</span></div>\n          <div class=\"ds-panel__body\">\n            <form class=\"ds-form\" data-component=\"form\" action=\"#compose\">\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Subject</span><input class=\"ds-form__input\" type=\"text\" value=\"Easter orders open\"></label>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">From name</span><input class=\"ds-form__input is-focus\" type=\"text\" placeholder=\"Harbour Bakery\"></label>\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Reply-to address</span><input class=\"ds-form__input is-error\" type=\"text\" value=\"hello@harbour\"><span class=\"ds-form__error\">Enter a complete email address.</span></label>\n              </div>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Send to</span>\n                <select class=\"ds-form__select\"><option>Everyone, 2,480 readers</option><option>Weekly letter, 1,130 readers</option><option>Class news, 412 readers</option></select>\n              </label>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Message</span><textarea class=\"ds-form__textarea\" rows=\"5\" placeholder=\"Start with the news, then the details\"></textarea><span class=\"ds-form__hint\">Plain text. Links are tracked unless you switch that off.</span></label>\n              <div class=\"ds-switchlist\">\n                <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Send at 7 am in each reader's own time zone</span></label>\n                <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Send me a copy when it goes out</span></label>\n              </div>\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>Count opens and clicks. <a class=\"ds-link\" href=\"#guide\">What is counted</a></span></label>\n              <div class=\"ds-form__actions\">\n                <button class=\"ds-button\" type=\"submit\">Schedule for 7 am</button>\n                <a class=\"ds-button ds-button--secondary\" href=\"#campaigns\">Save and close</a>\n              </div>\n            </form>\n          </div>\n        </section>\n      </div>\n\n      <div class=\"ds-stack\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Before you send</h2></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span>Subject line</span><span class=\"ds-badge ds-badge--success\">Ready</span></li>\n              <li class=\"ds-panel__row\"><span>Reply-to address</span><span class=\"ds-badge ds-badge--danger\">Fix</span></li>\n              <li class=\"ds-panel__row\"><span>List chosen</span><span class=\"ds-badge ds-badge--success\">Ready</span></li>\n              <li class=\"ds-panel__row\"><span>Test letter</span><span class=\"ds-badge ds-badge--warning\">Not sent</span></li>\n            </ul>\n            <div class=\"ds-progress\">\n              <div class=\"ds-progress__head\"><span>Ready to schedule</span><span class=\"ds-progress__value\">2 of 4</span></div>\n              <progress class=\"ds-progress__bar ds-progress__bar--warning\" value=\"2\" max=\"4\">2 of 4</progress>\n            </div>\n            <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#compose\">Send me a test</a>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Best time for this list</h2></div>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">Tuesday, 7 am</span>\n            <p>Your readers open most letters before work. Sends after noon do half as well.</p>\n            <div class=\"ds-chart ds-chart--small\">\n              <div class=\"ds-chart__plot\" role=\"img\" aria-label=\"Bar chart of opens by weekday\">\n                <span class=\"ds-chart__line ds-chart__line--2\"></span><span class=\"ds-chart__line ds-chart__line--4\"></span>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--60\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--100\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--70\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--50\"></span></div>\n                <div class=\"ds-chart__group\"><span class=\"ds-chart__bar ds-chart__bar--40\"></span></div>\n              </div>\n              <ul class=\"ds-chart__axis\">\n                <li class=\"ds-chart__tick\">Mon</li><li class=\"ds-chart__tick\">Tue</li><li class=\"ds-chart__tick\">Wed</li><li class=\"ds-chart__tick\">Thu</li><li class=\"ds-chart__tick\">Fri</li>\n              </ul>\n            </div>\n            <a class=\"ds-link ds-link--more\" href=\"#report\">See last Tuesday's report</a>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"guide\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__copy\">\n        <ol class=\"ds-breadcrumb\">\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#dashboard\">Dashboard</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Sending guide</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Sending guide</h1>\n        <p class=\"ds-page-header__text\">How chronoskin delivers a letter and what the figures mean.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#compose\">Write a campaign</a>\n      </div>\n    </header>\n\n    <div class=\"ds-cols ds-cols--level\">\n      <section class=\"ds-panel\">\n        <div class=\"ds-panel__body\">\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>What happens when you press send</h1>\n            <p class=\"ds-prose__lead\">A letter leaves in batches of two hundred, so a large list takes a few minutes.</p>\n            <p>Each reader gets their own copy. chronoskin notes when it is <strong>delivered, opened and clicked</strong>, and nothing else.</p>\n            <h2>What the figures count</h2>\n            <ul>\n              <li>Delivered: the reader's mail server accepted it</li>\n              <li>Opened: the pictures in the letter were loaded</li>\n              <li>Clicked: at least one link was followed</li>\n            </ul>\n            <h3>Adding a reader's name</h3>\n            <p>Write <code>{first_name}</code> anywhere in the subject or the message and it is replaced for each reader.</p>\n          </article>\n          <div class=\"ds-accordion\">\n            <details class=\"ds-accordion__item\" open>\n              <summary class=\"ds-accordion__head\">Why is a letter counted as bounced?</summary>\n              <div class=\"ds-accordion__body\"><p>The reader's mail server refused it: the address no longer exists or the mailbox is full. After three bounces the address is set aside.</p></div>\n            </details>\n            <details class=\"ds-accordion__item\">\n              <summary class=\"ds-accordion__head\">Can I stop a letter after pressing send?</summary>\n              <div class=\"ds-accordion__body\"><p>For as long as it is scheduled, yes. Once the first batch has left, the rest follows.</p></div>\n            </details>\n            <details class=\"ds-accordion__item\">\n              <summary class=\"ds-accordion__head\">What does a reader see when they unsubscribe?</summary>\n              <div class=\"ds-accordion__body\"><p>One page with one button. They are off the list at once and you see them in the report.</p></div>\n            </details>\n            <details class=\"ds-accordion__item\">\n              <summary class=\"ds-accordion__head\">How many readers can a list have?</summary>\n              <div class=\"ds-accordion__body\"><p>As many as the plan allows. The bar under your name in the rail shows how much of it is used.</p></div>\n            </details>\n          </div>\n        </div>\n      </section>\n\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">In this guide</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\">Pressing send</li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#guide\">Lists and readers</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#guide\">Bounces</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#guide\">Unsubscribing</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Read next</h2></div>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-linkrow\" data-component=\"links\">\n              <a class=\"ds-link\" href=\"#guide\">Writing a subject line</a>\n              <a class=\"ds-link is-visited\" href=\"#guide\">Why letters bounce</a>\n              <a class=\"ds-link is-hover\" href=\"#guide\">Importing a list</a>\n              <a class=\"ds-link is-active\" href=\"#guide\">Sending a test</a>\n              <a class=\"ds-link ds-link--quiet\" href=\"#campaigns\">Back to campaigns</a>\n            </p>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <span class=\"ds-footer__name\">chronoskin</span>\n  <span>© 2015 chronoskin. Letters are sent from servers in Dublin.</span>\n  <ul class=\"ds-footer__links\">\n    <li><a class=\"ds-footer__link\" href=\"#guide\">Sending guide</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#campaigns\">Campaigns</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#dashboard\">Status</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#dashboard\">Privacy</a></li>\n  </ul>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.flat-design.app.s06.p05.t02.u02\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"flat-design\",\n    \"years\": [\n      2013,\n      2016\n    ]\n  },\n  \"archetype\": \"app\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1280,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-fl-6522\",\n  \"short\": \"v1-fl-6522\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #f0e8e0;\n  --color-canvas: #f0e8e0;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f0e8;\n  --color-surface-strong: #e0d8c0;\n  --color-bar: #ffffff;\n  --color-bar-text: #48484c;\n  --color-bar-alt: #333333;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #1a1a1a;\n  --color-inverse-text: #ffffff;\n  --color-text: #48484c;\n  --color-text-muted: #848484;\n  --color-heading: #222222;\n  --color-heading-alt: #9a1616;\n  --color-link: #008080;\n  --color-link-quiet: #848484;\n  --color-link-visited: #5ba9ae;\n  --color-link-hover: #1e347b;\n  --color-link-active: #000000;\n  --color-border: #d8d8d8;\n  --color-border-strong: #333333;\n  --color-border-muted: #e8e0d0;\n  --color-accent: #fa6800;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #e3c800;\n  --color-fill-1: #9a1616;\n  --color-fill-2: #fa6800;\n  --color-fill-3: #e3c800;\n  --color-fill-4: #1e347b;\n  --color-button: #9a1616;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #333333;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #848484;\n  --color-disabled: #e8e0d0;\n  --color-disabled-text: #848484;\n  --color-danger: #dd1144;\n  --color-danger-surface: #f8f0e8;\n  --color-success: #60a917;\n  --color-warning: #f0a30a;\n  --color-notice: #e0d8c0;\n  --color-notice-text: #333333;\n  --color-focus: #008080;\n  --color-shadow: rgb(0 0 0 / 0.2);\n  --color-overlay: rgb(51 51 51 / 0.6);\n}\n\n/* @part type */\n:root {\n  --font-body: Raleway, Montserrat, Avenir, \"Avenir Next\", \"Century Gothic\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: Raleway, Montserrat, Avenir, \"Avenir Next\", \"Century Gothic\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-ui: Raleway, Montserrat, Avenir, \"Avenir Next\", \"Century Gothic\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: Menlo, Consolas, \"Liberation Mono\", monospace;\n  --text-base: 13px;\n  --text-small: 10px;\n  --text-ui: 12px;\n  --text-large: 16px;\n  --text-display: 44px;\n  --text-h1: 32px;\n  --text-h2: 22px;\n  --text-h3: 16px;\n  --line-body: 1.6;\n  --line-heading: 1.3;\n  --line-display: 1.05;\n  --weight-body: 300;\n  --weight-bold: 500;\n  --weight-heading: 300;\n  --weight-display: 300;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0.5px;\n  --display-tracking: 1px;\n  --figure-shift: 0em;\n  --ui-transform: uppercase;\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: 3px;\n  --border-style: solid;\n  --radius-control: 20px;\n  --radius-panel: 8px;\n  --radius-pill: 500px;\n  --radius-page: 12px;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: none;\n  --shadow-control-pressed: inset 0 0 0 2px var(--color-shadow);\n  --shadow-dialog: none;\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 80%, white);\n  --fill-button-secondary: transparent;\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
