{
  "id": "v1-fl-6263",
  "long_id": "v1.flat-design.app.s06.p02.t06.u03",
  "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-6263",
  "preview_url": "https://chrono.skin/s/v1-fl-6263/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 deep teal, sky blue and pale blue of the 2014 agency page on the greys of the 2014 newsletter page, with that page's vermilion as the one warm colour and the cyan and ink of the 2014 ride-app page; the green is the 2014 note-taking page's.\n- `--color-page` and `--color-canvas` are grey `#f2f2f2`; `--color-surface` white is every card; `--color-surface-alt` `#f9f9f9` the tab strip, a hovered table row and the foot of a dialog; `--color-surface-strong` `#e8e8e8` the quiet badge, inline code and the lines of a template drawing. `--color-bar` white with `--color-bar-text` `#3a3a3a` is the top bar and the table head. `--color-bar-alt` `#0b5472` (deep teal) with white `--color-bar-alt-text` is the rail; nothing else is put on it and its text takes no other colour, so rail links differ by opacity only.\n- Text is `--color-text` `#474747`, meta `--color-text-muted` `#9c9c9c`, headings and figures `--color-heading` `#070716`; card titles, sidebar titles and h3 are `--color-heading-alt` `#0b5472`.\n- `--color-button` `#1ca8c3` (cyan, white text) is the only action colour and also the top edge of the current tab, the current page number and the edge of the current sidebar row. Links are `--color-link` `#2c9ab7`, hover `#1fbad6`, active `#0b5472`; no link is underlined. The secondary button is `--color-button-secondary-text` `#0b5472` text and edge on white; its text must contrast with the page as well as with its own fill, because a surface set may make the fill transparent. Hovered, it swaps its two colours.\n- `--color-fill-1` (cyan) is the banner, with `--color-inverse-text` on it and the `--inverse` and `--ghost` buttons; it is the only fill that carries text. `--color-fill-1` to `--color-fill-4` are the colour blocks of number cards and template cards and the first two are the two series of a chart. A block holds an icon only, on a round plate of `--color-inverse` mixed in at 40%, or a small white sheet, never text, so a palette may make any fill pale.\n- `--color-accent` `#3ea5ce` (white text) is the default badge, the count in the rail and the account's initials; `--color-accent-alt` pale blue the second badge: a 30% tint over `--color-surface` with an outline and `--color-heading` text. Status: `--color-success` `#20c05c`, `--color-warning` `#f0a30a`, `--color-danger` `#e85c41`, all with `--color-accent-text`; the small line under a figure is `--color-success`, or `--color-danger` with `--down`.\n- `--color-notice` `#b7dded` with `--color-notice-text` `#0b5472`; the error notice is `--color-danger` on `--color-danger-surface` with a 1px border. The footer line is `--fill-inverse` `#070716` with `--color-text-muted` text.\n- One grotesque family for everything, bold for headings, after the newsletter and agency pages: `--font-body`, `--font-heading` and `--font-ui` are Helvetica Neue, Helvetica, Arial. `--font-mono` is Monaco.\n- Dense: `--text-base` 14px at `--line-body` 1.45, `--text-ui` 13px (controls, rail, tables, sidebar), `--text-small` 11px (meta, badges, table heads, labels under figures, breadcrumb, footer), `--text-large` 17px (banner lead, prose lead, the brand).\n- Headings are bold and tight: `--weight-heading` and `--weight-display` 700 with `--heading-tracking` -0.2px and `--display-tracking` -1.5px. `--text-display` 40px is the banner title only; `--text-h1` 28px page titles and figures; `--text-h2` 20px dialog and empty-state titles; `--text-h3` 15px card titles. `--weight-ui` 500 for buttons, tabs and rail links; `--weight-bold` 700 for labels, table heads, row heads and list titles. Nothing is uppercase.\n- Surface: small corners (`--radius-control` 2px, `--radius-panel` 3px, `--radius-page` 5px for the banner and template cards, `--radius-pill` 9px for badges). `--border-width` 1px; `--border-width-strong` 3px marks the current rail link, tab and sidebar row. Depth is a flat frame, never a blur: `--shadow-panel` is a 3px ring in the translucent `--color-shadow` around every card, `--shadow-control` a 1px ring around buttons and inputs that grows to 3px on hover, `--shadow-dialog` an 8px ring. `--focus-ring` is `2px dashed`. `--transition` eases ring and background in 0.15s.\n- One-off values made with `calc()` and `color-mix()` because the vocabulary has no token: the washes behind a hovered and a current rail link and the rule above the account (`--color-bar-alt-text` at 8%, 14% and 16%), the idle bars of the banner drawing (`--color-inverse` at 18%), the icon plate (`--color-inverse` at 40%), the ghost button border (`--color-inverse-text` at 55%), the hovered inverse button (`--color-inverse-text` at 85%), 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 plot of a small chart (half of `--size-chart`). Idle rail links use `opacity` 0.75, group names 0.6, the banner lead 0.85. Bar heights are percentages. The empty state's outline is dashed.\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-size >= 11px`: labels, badges and table heads are the smallest text.\n- `font-size <= 40px`: the banner title is the largest text.\n- `font-weight <= 700`: headings and figures are bold, never black.\n- `font-families <= 2`: one sans-serif family, plus monospace for code.\n- `line-height <= 1.45`: body text is set at 1.45.\n- `uppercase-text <= 0%`: labels, tabs and buttons are in sentence case.\n- `underlined-links <= 0%`: no reference underlines links.\n- `border-radius <= 0px`: the corporate reference has no rounded corner at all, and tiles must meet exactly.\n- `box-shadow-blur <= 0px`: the only shadow is the hard 1px ring of a hovered button; nothing is blurred.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 0%`: every background is one solid colour.\n- `border-width <= 4px`: rules are 2px; 4px marks the current item, the tab line and a news item.\n- `transition = none`: states change without a fade.\n- `animation = none`: no reference has a CSS animation.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. 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.p02.t06.u03\",\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-6263\",\n  \"short\": \"v1-fl-6263\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f8f8;\n  --color-surface-strong: #efefef;\n  --color-bar: #ffffff;\n  --color-bar-text: #2e2f33;\n  --color-bar-alt: #262626;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #262626;\n  --color-inverse-text: #ffffff;\n  --color-text: #2e2f33;\n  --color-text-muted: #919496;\n  --color-heading: #503750;\n  --color-heading-alt: #f037a5;\n  --color-link: #d65a3e;\n  --color-link-quiet: #919496;\n  --color-link-visited: #d65a3e;\n  --color-link-hover: #2e2f33;\n  --color-link-active: #000000;\n  --color-border: #d9dadc;\n  --color-border-strong: #c1c3c6;\n  --color-border-muted: #efefef;\n  --color-accent: #f037a5;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #f8c433;\n  --color-fill-1: #d65a3e;\n  --color-fill-2: #f8c433;\n  --color-fill-3: #503750;\n  --color-fill-4: #2ebd59;\n  --color-button: #2ebd59;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #2e2f33;\n  --color-input: #ffffff;\n  --color-input-text: #2e2f33;\n  --color-input-border: #c1c3c6;\n  --color-disabled: #efefef;\n  --color-disabled-text: #919496;\n  --color-danger: #e81020;\n  --color-danger-surface: #fff8f8;\n  --color-success: #2ebd59;\n  --color-warning: #f59b23;\n  --color-notice: #f8c433;\n  --color-notice-text: #2e2f33;\n  --color-focus: #2ebd59;\n  --color-shadow: rgb(0 0 0 / 0.15);\n  --color-overlay: rgb(0 0 0 / 0.35);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-ui: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: Monaco, Consolas, \"Lucida Console\", monospace;\n  --text-base: 14px;\n  --text-small: 11px;\n  --text-ui: 13px;\n  --text-large: 17px;\n  --text-display: 40px;\n  --text-h1: 28px;\n  --text-h2: 20px;\n  --text-h3: 15px;\n  --line-body: 1.45;\n  --line-heading: 1.2;\n  --line-display: 1.15;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: -0.2px;\n  --display-tracking: -1.5px;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 4px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 0 0 0 1px var(--color-border-strong);\n  --shadow-control-pressed: none;\n  --shadow-dialog: none;\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface-alt);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 85%, black);\n  --fill-button-secondary: color-mix(in srgb, var(--color-button-secondary) 88%, black);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dotted var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
