{
  "id": "v1-nm-3333-dr",
  "long_id": "v1.neumorphism.app.s03.p03.t03.u03.dr",
  "name": "Neumorphism three-pane",
  "era": {
    "slug": "neumorphism",
    "code": "nm",
    "name": "Neumorphism",
    "years": [
      2019,
      2021
    ],
    "description": "Soft UI, 2019 to 2021: controls pressed out of, or into, a single pale surface by a pair of light and dark blurred shadows, with low contrast and very round corners."
  },
  "archetype": "app",
  "mode": "pure",
  "viewport": {
    "width": 1440,
    "fluid": false
  },
  "density": "roomy",
  "summary": "Neumorphism, or soft UI, is the interface style of 2019 to 2021 in which the page and everything on it share one pale colour and shape comes from a pair of blurred shadows, light towards the top left and dark towards the bottom right. This pack is its working application form, the three-pane mail or task client: a raised icon rail at the left edge, a folder column, one tall raised list pane and a reading column, filling the viewport instead of sitting in a centred sheet. It uses the late, restrained variant of the style, a warm off-white surface with 1px hairlines and a shallow relief, near-black text in a humanist sans, a zinc primary button and one orange accent.",
  "url": "https://chrono.skin/s/v1-nm-3333-dr",
  "preview_url": "https://chrono.skin/s/v1-nm-3333-dr/specimen.html",
  "files": {
    "STYLE.md": "# Neumorphism three-pane\n\n## Summary\n\nNeumorphism, or soft UI, is the interface style of 2019 to 2021 in which the page and everything on it share one pale colour and shape comes from a pair of blurred shadows, light towards the top left and dark towards the bottom right. This pack is its working application form, the three-pane mail or task client: a raised icon rail at the left edge, a folder column, one tall raised list pane and a reading column, filling the viewport instead of sitting in a centred sheet. It uses the late, restrained variant of the style, a warm off-white surface with 1px hairlines and a shallow relief, near-black text in a humanist sans, a zinc primary button and one orange accent.\n\n## Layout\n\n- The frame is `.ds-app`, a grid as wide as `--size-page` (1392px, the 1440px viewport less 24px on each side), with `--space-5` (24px) padding and `--space-6` (32px) between columns. There is no top bar and no centred text column.\n- Navigation is vertical: `.ds-nav` is a raised rail `--size-rail` (112px) wide at the far left, as tall as the frame: the brand at the top, one icon key with a small label per section, and settings at the foot above a rule.\n- Home page, four columns, the rail and the three of `.ds-app__frame`: the rail; the `.ds-sidebar` folder column, `--size-folders` (208px), flat on the page with the compose button at its top and the storage meter at its foot; the `.ds-pane` list column, `--size-pane` (392px), one raised sheet from top to bottom holding title, search, tabs, the `.ds-list` and the pagination at its foot; and `.ds-app__main`, the reading column, which takes the rest (about 590px) and stacks its blocks 32px apart: the `.ds-hero` greeting on the bare page, the `.ds-stat` card, notices, the open item in a `.ds-panel`, and the `.ds-grid` of attachment wells.\n- Inner pages use `.ds-app__frame--inner`, two columns beside the same rail: a wide main column, and a `--size-aside` (400px) `.ds-pane` at the right for a form, a short list or a summary. There is no hero and no folder column. At the top of the main column, in one block, come the `.ds-breadcrumb`, the `.ds-page-header` (title at `--text-h1` left, actions right) and, on a list page, the `.ds-tabs` track (`.ds-tabs--inline`, at least half the column wide); then the `.ds-table` or a form in a `.ds-panel`, and under it `.ds-app__row`, two equal columns for an empty state, a dialog or two panels.\n- Views. The specimen is one site with four views, each `<section class=\"ds-view\" id=\"...\">` inside `.ds-app__views`, the second column of `.ds-app`; the rail and the footer stand outside them and one view shows at a time. `inbox` is the home view: folders, the list pane and the reading column with greeting, figures, notices, the open message and its attachments. `compose` is the form page: an error notice and the message form in a panel, with the drafts and the thread in the pane at the right. `bin` is a list page: the table of deleted threads, under it the dialog that deletes one beside a panel, and a storage pane at the right. `rules` is the settings page: tabs, the table of rules, an empty state beside a panel, and the rule form in the pane. The rail presses in the key of the current view, by one `:has()` rule per view next to `.ds-nav__link.is-current`.\n- Spacing scale: `--space-1` 4px (between list rows, folder links and tab segments), `--space-2` 8px (label to control, between rail keys), `--space-3` 12px (row padding, icon to text, between pagination keys), `--space-4` 16px (between buttons, pane tool gap, rail padding), `--space-5` 24px (pane and panel padding, frame padding, between form fields and sidebar groups, between grid wells), `--space-6` 32px (between columns and between blocks of the reading column), `--space-7` 48px (dialog backdrop padding, between page kinds), `--space-8` 64px (unused by the frame, kept for one-off sections).\n- Other sizes: `--size-avatar` 40px (initials disc), `--size-chip` 36px (colour chip), `--size-glyph` 24px (rail icon), `--size-control-large` 48px (compose button), `--size-dialog` 440px.\n- Raised things need room for their shadows: columns are 32px apart and no raised panel sits inside the pane or inside another panel. Inside the pane use flat rows, wells and rules.\n- `--size-rule` (1px) is the weight of the rules between table rows, stat figures, and above a pane or panel foot; it stays when a surface part sets `--border-width` to 0.\n- Below 1100px the columns stack and the rail turns into a horizontal strip: brand, section keys, the settings key at the right. Stacked, the folder column folds into the compose button and one wrapping row of folder keys (its headings, the labels and the storage meter are hidden), and a list pane shows only its first five rows, the pagination reaching the rest. Below 560px the frame padding drops to `--space-4`, the brand shows its mark only, the stat figures and the attachment wells stack, and table columns marked `.ds-table__opt` are hidden so that the table never scrolls sideways.\n\n## Typography and colour roles\n\n- One humanist family for everything: `--font-body`, `--font-heading` and `--font-ui` are Noto Sans, then Open Sans, Lucida Grande and Verdana; `--font-mono` starts with Inconsolata.\n- Roomy body, compact headings: `--text-base` 16px at `--line-body` 1.63, `--text-ui` 15px (buttons, inputs, folder links, tabs, table cells), `--text-small` 14px (meta, rail labels, badges, form labels), `--text-large` 18px (lead, large buttons), `--text-h3` 16px, `--text-h2` 24px (pane titles, stat figures), `--text-h1` 30px, `--text-display` 36px for the hero greeting only.\n- Two weights with a jump between them: `--weight-body` 400; `--weight-bold`, `--weight-heading` and `--weight-ui` 700; `--weight-display` 900 for the greeting. `--line-heading` 1.25, `--line-display` 1.2.\n- No tracking. Uppercase appears only on `.ds-sidebar__heading` and table head cells, written in the components.\n- One surface: `--color-page`, `--color-canvas`, `--color-surface`, `--color-bar`, `--color-input` and `--color-button-secondary` are the same warm off-white (244 244 245). `--color-surface-alt`, `--color-notice` and `--color-danger-surface` are pure white, for hovered rows and notices; `--color-surface-strong` (227 227 231) is for inline code, quiet and status badges and disabled controls.\n- The relief pair: `--color-shadow` (200 200 208) is the dark side and `--color-border-muted` (white) the light side of every shadow; on this pale surface the dark side and the hairline do most of the work. `--color-border-muted` is used for nothing else.\n- Text is near-black zinc (`--color-text`, `--color-heading` 39 39 42); `--color-text-muted` and `--color-heading-alt` (113 113 122) are for meta text, panel titles, sidebar headings and form labels.\n- Each text token goes with its own fill: `--color-bar-text` on `--fill-bar` (rail, table head), `--color-bar-alt-text` on `--fill-bar-alt` (footer band, zinc), `--color-inverse-text` on `--fill-inverse` (code block), `--color-accent-text` on `--fill-accent` (count badge, current page), `--color-button-text` on `--fill-button`, `--color-button-secondary-text` on `--fill-button-secondary` (secondary button, initials discs, pagination keys, current tab), `--color-input-text` on `--fill-input` (controls, tab track, the open list row, grid wells, empty state), `--color-notice-text` on `--color-notice`, `--color-danger` on `--color-danger-surface`. In the open list row every line inherits `--color-input-text`.\n- `--color-accent` is orange (249 115 22) with near-black text: unread count, current page, checked controls, slider thumb, the storage meter and the focus ring. `--color-link` is the darker orange 234 88 12. `--color-accent-alt` (sky blue) only marks \"new\" as a dot. `--color-button` is zinc with white text, the darkest thing on the page.\n- `--color-fill-1` to `--color-fill-4` (orange, zinc, sky blue, green) colour label dots in the sidebar and the chips of the grid wells; no text is set on them.\n- Status: `--color-success` 34 197 94, `--color-warning` 234 179 8, `--color-danger` 239 68 68, as 8px dots and as error text and rings.\n- Surface: `--border-width` is 1px, so the rail, pane, panels, keys and wells are outlined in `--color-border` or `--color-input-border` and the relief only finishes the edge; `--border-width-strong` is 2px. `--shadow-control` is 2px offset with 4px blur, `--shadow-panel` and `--shadow-control-hover` 3px and 6px, `--shadow-dialog` 6px and 12px (its light side at 20%, because the dialog lies on the dark overlay, where a white edge would glow), `--shadow-control-pressed` 2px and 5px inset. Corners: `--radius-control` and `--radius-panel` 8.8px, `--radius-page` 12px (rail, pane, grid wells, dialog, footer band), `--radius-pill` 30px. Fills are flat, `--shadow-text` is `none`, transitions run 0.15s.\n- One-off values with no token: discs use `border-radius: 50%`; tab segments and inline code use half of `--radius-control`; the meter bar is 40% wide in the specimen and takes its real share in an application; secondary lines in a well are `--color-input-text` at opacity 0.75; placeholders at 0.55.\n\nSpacing is roomy: every `--space-*` token of the layout was multiplied by 1.25. Where the Layout section names a spacing in pixels, the tokens are right.\n\n## Components\n\n- `.ds-page`: on `<body>`; paints the surface and sets the base type. The frame is `.ds-app` (the rail and `.ds-app__views`, which holds the screens); `.ds-app__frame` lays out one screen's columns (folders, pane, reading column) and `.ds-app__frame--inner` an inner page's (main, pane); `.ds-app__main` stacks blocks 32px apart; `.ds-app__row` is two equal columns inside it. `.ds-view` is one screen of the specimen (see Layout).\n- `.ds-brand`: the site's mark and name, in the header, linking to the home page: `.ds-brand__mark` is a small raised key (`--size-brand`, 40px) dressed like the primary button (`--fill-button`, `--color-button-text` for the mark, the hairline from `--border-width`, `--radius-control`, `--shadow-control`) holding the mark as inline SVG painted with `currentColor`; `.ds-brand__name` is the name in the heading font at `--text-h3`, in `--color-bar-text` because it stands on the rail. In the rail it takes `.ds-brand--stacked`, which puts the name under the key at `--text-small`. The name `chronoskin` and its mark are placeholders: replace them with the installing project's own name and logo and keep the key.\n- `.ds-nav`: the raised rail. the `.ds-brand` stands at its top; `.ds-nav__list` holds `.ds-nav__link` keys, each a `.ds-nav__glyph` icon above a one-word label; `.ds-nav__foot` pins settings to the bottom. The current key (`is-current`) is pressed in, `is-hover` raises one.\n- `.ds-hero`: the greeting at the top of the reading column, on the bare page and left-aligned: `.ds-hero__date`, `.ds-hero__title` at the display size, `.ds-hero__lead` and `.ds-hero__actions` with one primary and one secondary large button.\n- `.ds-page-header`: head of an inner page instead of the hero: `.ds-page-header__text` with `.ds-page-header__title` and one line of `.ds-page-header__lead`; `.ds-page-header__actions` at the right with at most one primary button. The breadcrumb goes directly above it and the tabs directly below.\n- `.ds-pane`: a tall raised sheet for one column: `.ds-pane__head` with `.ds-pane__title` and a count badge, `.ds-pane__tools` for a search input and tabs (or a whole form on an inner page), then a `.ds-list`, and `.ds-pane__foot`, pinned to the bottom above a rule, for pagination or one button. A pane may hold two titled lists one after the other.\n- `.ds-prose`: running text: h1 to h3, paragraphs, lists, inline `code`; `.ds-prose__lead` for a lead paragraph, `.ds-prose__code` for a dark code block. Put prose inside a `.ds-panel`.\n- `.ds-link`: link in running text; states `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` for undecorated links in tables and titles. `.ds-link__sample` lays out a row of links.\n- `.ds-button`: primary, zinc, 40px high, raised; `is-hover` lifts it, `is-active` sinks it. `.ds-button--secondary` is the same key in the surface colour. `.ds-button--danger` is the destructive action, a surface-coloured key with `--color-danger` text and outline, used once and last in a group. `.ds-button--large` (48px) for the hero and compose; `.ds-button--block` fills its column. `disabled` or `is-disabled` is flat. `.ds-button__row` spaces a group.\n- `.ds-form`: a vertical stack of `.ds-form__field` (a `.ds-form__label` and a control): `.ds-form__input`, `.ds-form__textarea` (`.ds-form__textarea--tall` for a message body), `.ds-form__select` (in `.ds-form__select-wrap` with `.ds-form__chevron`), `.ds-form__range`. `.ds-form__check` is a label row with a `.ds-form__checkbox` or a `.ds-form__switch`. `is-error` on an input gives a 2px danger ring and is followed by `.ds-form__error`; `.ds-form__hint` is help text; `.ds-form__actions` holds the buttons. Text controls are wells: `--shadow-control-pressed`. On an inner page the form lives in the right-hand pane.\n- `.ds-table`: one raised sheet with a small uppercase head and 1px rules between rows. `.ds-table__num` right-aligns numbers, `.ds-table__meta` is muted, `is-hover` on a row lightens it.\n- `.ds-list`: flat rows inside a pane, 4px apart, no rules. A `.ds-list__item` has a raised `.ds-list__avatar` disc with initials and a `.ds-list__body`: a `.ds-list__line` with `.ds-list__title` and `.ds-list__time`, then one or two single-line `.ds-list__meta` lines that cut off with an ellipsis. A `.ds-list__dot` at the start of a meta line marks state (`--new` unread, `--off` a problem). The open row is `is-current`, a sunk well; `is-hover` lightens a row.\n- `.ds-panel`: the raised card of the reading column: `.ds-panel__title` (with a status badge at its right), an optional `.ds-panel__from` line (avatar, `.ds-panel__who` with `.ds-panel__meta`, a badge), `.ds-panel__body`, and `.ds-panel__foot` for the reply actions above a rule.\n- `.ds-grid`: sunk wells two across, for attachments and linked items. `.ds-grid__cell` (with `--1` to `--4` for the chip colour) holds a raised `.ds-grid__chip` at the left and a `.ds-grid__label` over a `.ds-grid__meta`.\n- `.ds-stat`: the row itself, one raised card; each `.ds-stat__item` is one figure, a `.ds-stat__label` above a `.ds-stat__value` with a `.ds-stat__meta` line under it. Three items, divided by rules, under the hero.\n- `.ds-tabs`: a sunk track as wide as its container with equal `.ds-tabs__item` segments; the `.ds-tabs__tab` with `is-current` is raised out of it. Inside a pane it filters the list; `.ds-tabs--inline` is the view switch under a page header.\n- `.ds-badge`: pill for counts, filled with the accent (`--color-accent-text` on `--fill-accent`). `.ds-badge--quiet` is a flat pill in `--color-surface-strong` with `--color-text`, for neutral counts; it has no shadow, because a well is too deep for a pill this small. Status labels are `.ds-badge--success`, `.ds-badge--warning` and `.ds-badge--danger`: the same flat pill with a leading 8px dot in the status colour. Never colour the whole pill.\n- `.ds-sidebar`: the folder column, flat on the page: groups of a small uppercase `.ds-sidebar__heading` and a `.ds-sidebar__list` of `.ds-sidebar__link` rows, with a count badge at the right or a `.ds-sidebar__dot` (`--1` to `--4`) at the left; the current folder is pressed in. `.ds-sidebar__foot` pins a last group to the bottom; `.ds-sidebar__note` is a small muted line. `.ds-meter` with `.ds-meter__bar` is a sunk track with an accent bar for a quota.\n- `.ds-notice`: a message sunk into the surface, with `.ds-notice__icon` and `.ds-notice__title`; `.ds-notice--error` takes `--color-danger`. `.ds-notice__stack` stacks several.\n- `.ds-pagination`: raised 40px keys, `.ds-pagination__link`, centred in a pane foot; the current page is flat and filled with the accent.\n- `.ds-breadcrumb`: small muted trail, `.ds-breadcrumb__item` separated by slashes, `.ds-breadcrumb__link` for linked levels.\n- `.ds-dialog`: a tinted sheet (`--color-overlay`) with a centred `.ds-dialog__box`, at most 440px wide, raised by `--shadow-dialog`: `.ds-dialog__title`, `.ds-dialog__body`, `.ds-dialog__actions` right-aligned.\n- `.ds-empty`: a sunk well with a raised `.ds-empty__icon` disc, `.ds-empty__title`, `.ds-empty__text` and one primary button.\n- `.ds-footer`: one rounded band in `--fill-bar-alt` as wide as the frame, 32px under it: a line of small text at the left and `.ds-footer__links` with `.ds-footer__link` at the right, inside `.ds-footer__inner`.\n\n## Never\n\n- `row-gap <= 10px`: list rows and folder links sit 4px apart; table rows touch.\n- `block-gap <= 60px`: columns and blocks sit 32px apart; 48px between page kinds is the largest gap.\n- `content-width <= 1392px`: the frame fills a 1440px viewport and goes no wider.\n- `font-size <= 36px`: the hero greeting is the largest text.\n- `font-size >= 14px`: meta text and badges are the smallest text.\n- `font-weight <= 900`: only the hero greeting is black; headings are 700.\n- `font-families <= 2`: one sans and one monospace.\n- `line-height <= 1.65`: body text is set at 1.63.\n- `letter-spacing = 0`: no tracking on any text.\n- `underlined-links <= 10%`: underline is a hover state.\n- `uppercase-text <= 5%`: uppercase is for sidebar headings and table heads only.\n- `border-width <= 2px`: outlines are 1px hairlines; 2px is the focus and error ring.\n- `border-radius <= 12px`: controls and panels 8.8px, the rail, pane, wells and dialog 12px; only pills and discs go higher.\n- `box-shadow-blur <= 12px`: the relief is shallow: 4px to 7px on the page, 12px on the dialog.\n- `text-shadow = none`: text is flat.\n- `gradient-fills <= 5%`: every fill is one flat colour.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and decide first which column it belongs to: navigation between sections is a key in the rail, a way to narrow the list is a link in the sidebar, a collection is rows in a `.ds-pane`, and whatever is opened is a `.ds-panel` in the reading column. A raised container starts from `.ds-panel` (fill, hairline, radius and `--shadow-panel` together); something that shows a state or takes input starts from `.ds-form__input` (`--fill-input`, `--color-input-text`, `--shadow-control-pressed`); something to press starts from `.ds-button--secondary`. Keep every fill equal to the surface behind it, always write the outline as `var(--border-width) var(--border-style)` with a border colour token so that a softer surface part can remove it, and use each shadow token alone as the whole `box-shadow` value, since a token may be `none`. Use tokens only; for a size with no token use `calc()` over `--space-*` or `--size-*`. Keep each text token on the fill it belongs to and the accent to one small element per column.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 1392px;\n  --size-rail: 112px;\n  --size-folders: 208px;\n  --size-pane: 392px;\n  --size-aside: 400px;\n  --size-dialog: 440px;\n  --size-control: 40px;\n  --size-control-large: 48px;\n  --size-icon: 16px;\n  --size-glyph: 24px;\n  --size-dot: 8px;\n  --size-chip: 36px;\n  --size-avatar: 40px;\n  --size-thumb: 20px;\n  --size-track: 8px;\n  --size-check: 20px;\n  --size-rule: 1px;\n  --size-brand: 40px;\n  --space-1: 5px;\n  --space-2: 10px;\n  --space-3: 15px;\n  --space-4: 20px;\n  --space-5: 30px;\n  --space-6: 40px;\n  --space-7: 60px;\n  --space-8: 80px;\n}\n\n/* shell: an application frame of panes that fills the viewport */\n.ds-page {\n  margin: 0;\n  min-height: 100vh;\n  background: var(--fill-page);\n  background-color: var(--color-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.ds-app {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  gap: var(--space-6);\n  align-items: start;\n  width: 100%;\n  max-width: calc(var(--size-page) + 2 * var(--space-5));\n  margin: 0 auto;\n  padding: var(--space-5);\n}\n.ds-app__views {\n  min-width: 0;\n}\n\n/* views: one screen of the example site shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* frame: the columns of one view, beside the rail */\n.ds-app__frame {\n  display: grid;\n  grid-template-columns: var(--size-folders) var(--size-pane) minmax(0, 1fr);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-app__frame--inner {\n  grid-template-columns: minmax(0, 1fr) var(--size-aside);\n}\n.ds-app__main {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-6);\n  min-width: 0;\n}\n.ds-app__row {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-6);\n  align-items: stretch;\n}\n\n/* brand: the mark on a small raised key in the primary button's dress, then the name */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-bar-text);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: var(--size-brand);\n  height: var(--size-brand);\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n}\n.ds-brand__name {\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  text-shadow: var(--shadow-text);\n}\n.ds-brand--stacked {\n  flex-direction: column;\n  gap: var(--space-2);\n}\n.ds-brand--stacked .ds-brand__name {\n  font-size: var(--text-small);\n}\n\n/* nav: a raised vertical rail at the left edge, one icon key per section */\n.ds-nav {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  align-self: stretch;\n  gap: var(--space-5);\n  padding: var(--space-4) var(--space-2);\n  background: var(--fill-bar);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-bar-text);\n} \n.ds-nav__list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  width: 100%;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-1);\n  padding: var(--space-3) var(--space-1);\n  border-radius: var(--radius-control);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  box-shadow: var(--shadow-control);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#inbox\"],\n.ds-page:has(#inbox:target) .ds-nav__link[href=\"#inbox\"],\n.ds-page:has(#compose:target) .ds-nav__link[href=\"#compose\"],\n.ds-page:has(#bin:target) .ds-nav__link[href=\"#bin\"],\n.ds-page:has(#rules:target) .ds-nav__link[href=\"#rules\"] {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-nav__glyph {\n  width: var(--size-glyph);\n  height: var(--size-glyph);\n}\n.ds-nav__foot {\n  width: 100%;\n  margin-top: auto;\n  padding-top: var(--space-4);\n  border-top: var(--size-rule) var(--border-style) var(--color-border);\n}\n\n/* sidebar: the folder column, flat on the page, the current folder pressed in */\n.ds-sidebar {\n  display: flex;\n  flex-direction: column;\n  align-self: stretch;\n  gap: var(--space-5);\n}\n.ds-sidebar__heading {\n  margin: 0 var(--space-3) var(--space-2);\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-transform: uppercase;\n}\n.ds-sidebar__list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-3);\n  border-radius: var(--radius-control);\n  color: var(--color-link-quiet);\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-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-sidebar__link .ds-badge {\n  margin-left: auto;\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  background: var(--color-surface-alt);\n}\n.ds-sidebar__link.is-current {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-sidebar__dot {\n  flex: none;\n  width: var(--size-dot);\n  height: var(--size-dot);\n  border-radius: 50%;\n}\n.ds-sidebar__dot--1 {\n  background: var(--color-fill-1);\n}\n.ds-sidebar__dot--2 {\n  background: var(--color-fill-2);\n}\n.ds-sidebar__dot--3 {\n  background: var(--color-fill-3);\n}\n.ds-sidebar__dot--4 {\n  background: var(--color-fill-4);\n}\n.ds-sidebar__foot {\n  margin-top: auto;\n  padding-bottom: var(--space-4);\n}\n.ds-sidebar__note {\n  margin: 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n}\n\n/* meter: a sunk track with an accent bar */\n.ds-meter {\n  height: var(--size-track);\n  margin: 0 var(--space-3) var(--space-2);\n  overflow: hidden;\n  background: var(--fill-input);\n  border-radius: var(--size-track);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-meter--flush {\n  margin: 0;\n}\n.ds-meter__bar {\n  width: 40%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-radius: var(--size-track);\n}\n\n/* pane: the list column, one tall raised sheet */\n.ds-pane {\n  display: flex;\n  flex-direction: column;\n  align-self: stretch;\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  color: var(--color-text);\n}\n.ds-pane__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-5) var(--space-5) var(--space-4);\n}\n.ds-pane__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  text-transform: var(--heading-transform);\n}\n.ds-pane__tools {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  padding: 0 var(--space-5) var(--space-5);\n}\n.ds-pane__foot {\n  display: flex;\n  justify-content: center;\n  margin-top: auto;\n  padding: var(--space-4) var(--space-5) var(--space-5);\n  border-top: var(--size-rule) var(--border-style) var(--color-border);\n}\n\n/* hero: a greeting on the bare page at the top of the reading column */\n.ds-hero {\n  padding: var(--space-2) 0 0;\n}\n.ds-hero__date {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-hero__title {\n  margin: var(--space-1) 0 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-hero__lead {\n  max-width: 52ch;\n  margin: var(--space-3) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-5);\n}\n\n/* page header (inner pages) */\n.ds-page-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4) var(--space-6);\n  margin: var(--space-3) 0 var(--space-6);\n}\n.ds-page-header:last-child {\n  margin-bottom: 0;\n}\n.ds-page-header__text {\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-page-header__lead {\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  gap: var(--space-4);\n}\n\n/* prose */\n.ds-prose {\n  max-width: 76ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-6) 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  margin-top: 0;\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-5);\n}\n.ds-prose li + li {\n  margin-top: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  border-radius: calc(var(--radius-control) / 2);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-prose__lead {\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n.ds-prose__code {\n  margin: 0 0 var(--space-4);\n  padding: var(--space-4) var(--space-5);\n  overflow: auto;\n  background: var(--fill-inverse);\n  border-radius: var(--radius-control);\n  color: var(--color-inverse-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited {\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__sample {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n}\n\n/* buttons: raised at rest, lifted on hover, sunk when pressed */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\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  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\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(--space-1);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  border-color: var(--color-border);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--fill-panel);\n  border-color: var(--color-danger);\n  color: var(--color-danger);\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-size: var(--text-large);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  border-color: transparent;\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  cursor: default;\n}\n.ds-button__row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n}\n/* form: every control is a well sunk into the surface */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n.ds-form__label {\n  display: flex;\n  justify-content: space-between;\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-4);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-pressed);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  transition: var(--transition);\n}\n.ds-form__textarea {\n  min-height: calc(2 * var(--size-control) + var(--space-4));\n  padding: var(--space-3) var(--space-4);\n  border-radius: min(var(--radius-control), var(--radius-panel));\n  line-height: var(--line-body);\n  resize: vertical;\n}\n.ds-form__textarea--tall {\n  min-height: calc(4 * var(--size-control));\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-input-text);\n  opacity: 0.55;\n}\n.ds-form__select {\n  padding-right: var(--space-7);\n  appearance: none;\n  -webkit-appearance: none;\n}\n.ds-form__select-wrap {\n  position: relative;\n  display: block;\n}\n.ds-form__chevron {\n  position: absolute;\n  top: 50%;\n  right: var(--space-4);\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-top: calc(var(--size-icon) / -2);\n  color: var(--color-input-text);\n  pointer-events: none;\n}\n.ds-form__input:focus-visible,\n.ds-form__select:focus-visible,\n.ds-form__textarea:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-form__input.is-error {\n  box-shadow: 0 0 0 var(--border-width-strong) var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\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-3);\n  color: var(--color-text);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n}\n.ds-form__checkbox {\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  padding: var(--space-1);\n  background: var(--fill-input);\n  border-radius: calc(var(--radius-control) / 2);\n  box-shadow: var(--shadow-control);\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background: var(--fill-accent);\n  background-clip: content-box;\n}\n.ds-form__checkbox:focus-visible {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n/* the era's switch: a sunk pill with a raised thumb */\n.ds-form__switch {\n  position: relative;\n  flex: none;\n  width: calc(2 * var(--size-thumb) + 2 * var(--space-1));\n  height: calc(var(--size-thumb) + 2 * var(--space-1));\n  margin: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  background: var(--fill-input);\n  border-radius: var(--size-thumb);\n  box-shadow: var(--shadow-control-pressed);\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-form__switch::before {\n  content: \"\";\n  position: absolute;\n  top: var(--space-1);\n  left: var(--space-1);\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  background: var(--fill-panel);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n}\n.ds-form__switch:checked {\n  background: var(--fill-accent);\n  box-shadow: none;\n}\n.ds-form__switch:checked::before {\n  left: calc(var(--size-thumb) + var(--space-1));\n}\n/* the era's slider: a sunk track with a raised round thumb */\n.ds-form__range {\n  width: 100%;\n  height: var(--size-thumb);\n  margin: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  background: transparent;\n}\n.ds-form__range::-webkit-slider-runnable-track {\n  height: var(--size-track);\n  background: var(--fill-input);\n  border-radius: var(--size-track);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-form__range::-webkit-slider-thumb {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  margin-top: calc((var(--size-track) - var(--size-thumb)) / 2);\n  -webkit-appearance: none;\n  background: var(--fill-accent);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n}\n.ds-form__range::-moz-range-track {\n  height: var(--size-track);\n  background: var(--fill-input);\n  border-radius: var(--size-track);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-form__range::-moz-range-thumb {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  background: var(--fill-accent);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n}\n\n/* table: one raised sheet, rows divided by a rule */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 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  color: var(--color-text);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-4) var(--space-5);\n  text-align: left;\n  vertical-align: middle;\n}\n.ds-table th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n.ds-table th:first-child {\n  border-top-left-radius: var(--radius-panel);\n}\n.ds-table th:last-child {\n  border-top-right-radius: var(--radius-panel);\n}\n.ds-table td {\n  border-top: var(--size-rule) var(--border-style) var(--color-border);\n}\n.ds-table tbody tr:hover td,\n.ds-table tbody tr.is-hover td {\n  background: var(--color-surface-alt);\n}\n.ds-table tbody tr:last-child td:first-child {\n  border-bottom-left-radius: var(--radius-panel);\n}\n.ds-table tbody tr:last-child td:last-child {\n  border-bottom-right-radius: var(--radius-panel);\n}\n.ds-table .ds-table__num {\n  white-space: nowrap;\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table .ds-table__meta {\n  color: var(--color-text-muted);\n}\n/* panel */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-5) var(--space-5) 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-5);\n}\n.ds-panel__title + .ds-panel__body {\n  padding-top: var(--space-3);\n}\n/* badge */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-1);\n  padding: 0 var(--space-3);\n  background: var(--fill-accent);\n  border-radius: var(--radius-pill);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  white-space: nowrap;\n  vertical-align: middle;\n}\n/* quiet and status badges: a flat pill one step darker than the surface; status adds a dot */\n.ds-badge--quiet,\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n}\n.ds-badge--success::before,\n.ds-badge--warning::before,\n.ds-badge--danger::before {\n  content: \"\";\n  width: var(--size-dot);\n  height: var(--size-dot);\n  flex: none;\n  border-radius: 50%;\n}\n.ds-badge--success::before {\n  background: var(--color-success);\n}\n.ds-badge--warning::before {\n  background: var(--color-warning);\n}\n.ds-badge--danger::before {\n  background: var(--color-danger);\n}\n/* notice: a message sunk into the surface */\n.ds-notice {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  padding: var(--space-4) var(--space-5);\n  background: var(--color-notice);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control-pressed);\n  color: var(--color-notice-text);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  border-color: var(--color-danger);\n  color: var(--color-danger);\n}\n.ds-notice__icon {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  flex: none;\n  margin-top: calc((var(--text-ui) * var(--line-body) - var(--size-thumb)) / 2);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-notice__stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n}\n\n/* pagination: raised keys, the current one in the accent */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control);\n  min-height: var(--size-control);\n  padding: 0 var(--space-3);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-accent);\n  border-color: transparent;\n  box-shadow: none;\n  color: var(--color-accent-text);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin: 0 var(--space-2);\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* dialog, shown open in the page flow */\n.ds-dialog {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-7) var(--space-5);\n  background: var(--color-overlay);\n  border-radius: var(--radius-page);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  padding: var(--space-6);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n  color: var(--color-text);\n}\n.ds-dialog__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-dialog__body {\n  color: var(--color-text-muted);\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  margin-top: var(--space-6);\n}\n\n/* empty state: a sunk well with a raised icon disc */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: var(--space-6) var(--space-5);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control-pressed);\n  color: var(--color-input-text);\n  text-align: center;\n}\n.ds-empty__icon {\n  width: var(--size-control-large);\n  height: var(--size-control-large);\n  margin-bottom: var(--space-4);\n  padding: var(--space-3);\n  background: var(--fill-button-secondary);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n}\n.ds-empty__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-empty__text {\n  max-width: 40ch;\n  margin: var(--space-2) 0 var(--space-5);\n  font-size: var(--text-ui);\n}\n\n/* full-width button, for the compose key above the folders */\n.ds-button--block {\n  display: flex;\n  width: 100%;\n}\n\n/* list: flat rows inside the pane; the open row is a sunk well */\n.ds-list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0 var(--space-3) var(--space-3);\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  padding: var(--space-3);\n  border-radius: var(--radius-control);\n  color: var(--color-text);\n  transition: var(--transition);\n}\n.ds-list__item:hover,\n.ds-list__item.is-hover {\n  background: var(--color-surface-alt);\n}\n.ds-list__item.is-current {\n  background: var(--fill-input);\n  box-shadow: var(--shadow-control-pressed);\n  color: var(--color-input-text);\n}\n.ds-list__avatar {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-list__body {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__line {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-list__title {\n  overflow: hidden;\n  color: var(--color-link-quiet);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-list__time {\n  flex: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  font-variant-numeric: tabular-nums;\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-1);\n  overflow: hidden;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-list__item.is-current .ds-list__title,\n.ds-list__item.is-current .ds-list__time,\n.ds-list__item.is-current .ds-list__meta {\n  color: inherit;\n}\n.ds-list__dot {\n  display: inline-block;\n  width: var(--size-dot);\n  height: var(--size-dot);\n  margin-right: var(--space-1);\n  background: var(--color-success);\n  border-radius: 50%;\n}\n.ds-list__dot--off {\n  background: var(--color-danger);\n}\n.ds-list__dot--new {\n  background: var(--color-accent-alt);\n}\n\n/* message head inside a panel: sender, address line and time above the text */\n.ds-panel__from {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-4) var(--space-5) 0;\n}\n.ds-panel__who {\n  flex: 1;\n  min-width: 0;\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-panel__meta {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n.ds-panel__foot {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  padding: var(--space-4) var(--space-5);\n  border-top: var(--size-rule) var(--border-style) var(--color-border);\n}\n\n/* grid: sunk wells two across, each with a raised colour chip */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-5);\n}\n.ds-grid__cell {\n  display: grid;\n  grid-template-columns: auto minmax(0, 1fr);\n  column-gap: var(--space-4);\n  align-items: center;\n  padding: var(--space-4) var(--space-5);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-control-pressed);\n  color: var(--color-input-text);\n}\n.ds-grid__chip {\n  grid-row: 1 / span 2;\n  width: var(--size-chip);\n  height: var(--size-chip);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n}\n.ds-grid__cell--1 .ds-grid__chip {\n  background: var(--color-fill-1);\n}\n.ds-grid__cell--2 .ds-grid__chip {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 .ds-grid__chip {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 .ds-grid__chip {\n  background: var(--color-fill-4);\n}\n.ds-grid__label {\n  overflow: hidden;\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-grid__meta {\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  opacity: 0.75;\n}\n\n/* stats: one raised card, three figures divided by rules */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  margin: 0;\n  padding: var(--space-4) 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__item {\n  padding: 0 var(--space-5);\n}\n.ds-stat__item + .ds-stat__item {\n  border-left: var(--size-rule) var(--border-style) var(--color-border);\n}\n.ds-stat__label {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-stat__value {\n  margin: var(--space-1) 0 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  font-variant-numeric: tabular-nums;\n  text-shadow: var(--shadow-text);\n}\n.ds-stat__meta {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  text-shadow: none;\n}\n\n/* tabs: a sunk track as wide as its pane, equal segments, the current one raised */\n.ds-tabs {\n  display: flex;\n  gap: var(--space-1);\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-tabs__item {\n  flex: 1;\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  border-radius: calc(var(--radius-control) / 2);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-align: center;\n  text-decoration: none;\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-tabs__tab.is-current {\n  background: var(--fill-button-secondary);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n}\n.ds-tabs--inline {\n  align-self: flex-start;\n  min-width: 50%;\n}\n\n/* footer: one rounded band under the panes */\n.ds-footer {\n  width: 100%;\n  max-width: calc(var(--size-page) + 2 * var(--space-5));\n  margin: var(--space-6) auto 0;\n  padding: 0 var(--space-5) var(--space-5);\n  font-size: var(--text-small);\n}\n.ds-footer__inner {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-5);\n  padding: var(--space-4) var(--space-5);\n  background: var(--fill-bar-alt);\n  border-radius: var(--radius-page);\n  color: var(--color-bar-alt-text);\n}\n.ds-footer__links {\n  display: flex;\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n\n@media (max-width: 1100px) {\n  .ds-app,\n  .ds-app__frame,\n  .ds-app__frame--inner,\n  .ds-app__row {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-nav {\n    flex-direction: row;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    gap: var(--space-3);\n    padding: var(--space-3) var(--space-4);\n  }\n  .ds-nav__list {\n    flex-direction: row;\n    width: auto;\n  }\n  .ds-nav__link {\n    padding: var(--space-2) var(--space-3);\n  }\n  .ds-nav__foot {\n    width: auto;\n    margin-top: 0;\n    padding-top: 0;\n    border-top: 0;\n  }\n  /* stacked: the folder column folds into one row of folder keys, labels and storage go */\n  .ds-sidebar {\n    gap: var(--space-4);\n  }\n  .ds-sidebar > div + div,\n  .ds-sidebar__heading {\n    display: none;\n  }\n  .ds-sidebar__list {\n    flex-direction: row;\n    flex-wrap: wrap;\n    gap: var(--space-2);\n  }\n  .ds-sidebar__link {\n    gap: var(--space-2);\n  }\n  /* and the list pane shows its first five rows; the pagination reaches the rest */\n  .ds-pane .ds-list__item:nth-child(n+6) {\n    display: none;\n  }\n}\n@media (max-width: 560px) {\n  .ds-app {\n    gap: var(--space-5);\n    padding: var(--space-4);\n  }\n  .ds-app__frame,\n  .ds-app__main {\n    gap: var(--space-5);\n  }\n  .ds-nav {\n    gap: var(--space-2);\n    padding: var(--space-3) var(--space-2);\n  }\n  .ds-nav__list {\n    gap: var(--space-1);\n  }\n  .ds-nav__link {\n    padding: var(--space-2);\n  }\n  .ds-brand--stacked .ds-brand__name {\n    display: none;\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-hero__actions .ds-button {\n    flex: 1 1 auto;\n  }\n  .ds-stat {\n    grid-template-columns: minmax(0, 1fr);\n    padding: 0 var(--space-5);\n  }\n  .ds-stat .ds-stat__item {\n    padding: var(--space-3) 0;\n    border-left: 0;\n  }\n  .ds-stat .ds-stat__item + .ds-stat__item {\n    border-top: var(--size-rule) var(--border-style) var(--color-border);\n  }\n  .ds-grid {\n    grid-template-columns: minmax(0, 1fr);\n    gap: var(--space-4);\n  }\n  .ds-tabs--inline {\n    align-self: stretch;\n    flex-wrap: wrap;\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-3);\n  }\n  .ds-table .ds-table__opt {\n    display: none;\n  }\n  .ds-dialog {\n    padding: var(--space-5) var(--space-4);\n  }\n  .ds-dialog__box {\n    padding: var(--space-5);\n  }\n  .ds-dialog__actions,\n  .ds-pagination,\n  .ds-footer__links {\n    flex-wrap: wrap;\n  }\n  .ds-pagination {\n    gap: var(--space-2);\n  }\n  .ds-pane__foot {\n    padding-left: var(--space-4);\n    padding-right: var(--space-4);\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: mail</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<div class=\"ds-app\">\n\n  <nav class=\"ds-nav\" data-component=\"nav\" aria-label=\"Sections\">\n    <a class=\"ds-brand ds-brand--stacked\" data-component=\"brand\" href=\"#\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 3a9 9 0 1 1-9 9\"/><path d=\"M12 17a5 5 0 1 1 5-5\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ul class=\"ds-nav__list\">\n      <li><a class=\"ds-nav__link\" href=\"#inbox\"><svg class=\"ds-nav__glyph\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M3 8l9 6 9-6\"/></svg>Mail</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#compose\"><svg class=\"ds-nav__glyph\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"M4 20h4L19 9l-4-4L4 16z\"/><path d=\"M13 7l4 4\"/></svg>Write</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#bin\"><svg class=\"ds-nav__glyph\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"M5 7h14M10 7V4h4v3M7 7l1 13h8l1-13\"/></svg>Bin</a></li>\n    </ul>\n    <div class=\"ds-nav__foot\">\n      <a class=\"ds-nav__link\" href=\"#rules\"><svg class=\"ds-nav__glyph\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1\"/></svg>Rules</a>\n    </div>\n  </nav>\n\n  <div class=\"ds-app__views\">\n\n    <section class=\"ds-view ds-view--home\" id=\"inbox\">\n    <div class=\"ds-app__frame\">\n\n    <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n      <a class=\"ds-button ds-button--large ds-button--block\" href=\"#compose\">New message</a>\n      <div>\n        <h2 class=\"ds-sidebar__heading\">Folders</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li><a class=\"ds-sidebar__link is-current\" href=\"#inbox\">Inbox <span class=\"ds-badge\" data-component=\"badge\">12</span></a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#compose\">Drafts <span class=\"ds-badge ds-badge--quiet\">2</span></a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#inbox\">Sent</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#inbox\">Waiting <span class=\"ds-badge ds-badge--quiet\">4</span></a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#inbox\">Archive</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#bin\">Bin</a></li>\n        </ul>\n      </div>\n      <div>\n        <h2 class=\"ds-sidebar__heading\">Labels</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li><a class=\"ds-sidebar__link\" href=\"#rules\"><span class=\"ds-sidebar__dot ds-sidebar__dot--1\"></span>Print shop</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#rules\"><span class=\"ds-sidebar__dot ds-sidebar__dot--2\"></span>Suppliers</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#rules\"><span class=\"ds-sidebar__dot ds-sidebar__dot--3\"></span>Invoices</a></li>\n          <li><a class=\"ds-sidebar__link\" href=\"#rules\"><span class=\"ds-sidebar__dot ds-sidebar__dot--4\"></span>Family</a></li>\n        </ul>\n      </div>\n      <div class=\"ds-sidebar__foot\">\n        <h2 class=\"ds-sidebar__heading\">Storage</h2>\n        <div class=\"ds-meter\"><div class=\"ds-meter__bar\"></div></div>\n        <p class=\"ds-sidebar__note\">6.1 of 15 GB used</p>\n      </div>\n    </aside>\n\n\n    <section class=\"ds-pane\" aria-label=\"Inbox\">\n      <header class=\"ds-pane__head\">\n        <h2 class=\"ds-pane__title\">Inbox</h2>\n        <span class=\"ds-badge ds-badge--quiet\">12 unread</span>\n      </header>\n      <div class=\"ds-pane__tools\">\n        <input class=\"ds-form__input\" type=\"text\" placeholder=\"Search mail\" aria-label=\"Search mail\">\n        <ul class=\"ds-tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#inbox\" aria-current=\"true\">All</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#inbox\">Unread</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#inbox\">Flagged</a></li>\n        </ul>\n      </div>\n      <ul class=\"ds-list\" data-component=\"list\">\n        <li class=\"ds-list__item is-current\">\n          <span class=\"ds-list__avatar\">IB</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Ines Baptista</a><span class=\"ds-list__time\">09:42</span></div>\n            <span class=\"ds-list__meta\">Proofs for the spring catalogue</span>\n            <span class=\"ds-list__meta\">The second proof is attached. Two pages changed.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">TO</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Tobias Okafor</a><span class=\"ds-list__time\">09:10</span></div>\n            <span class=\"ds-list__meta\"><span class=\"ds-list__dot ds-list__dot--new\"></span>Paper stock for April</span>\n            <span class=\"ds-list__meta\">We can hold the 120 gram until Friday.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">HL</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Hanne Lindqvist</a><span class=\"ds-list__time\">08:31</span></div>\n            <span class=\"ds-list__meta\"><span class=\"ds-list__dot ds-list__dot--new\"></span>Invoice 2041 is ready</span>\n            <span class=\"ds-list__meta\">Thirty days from today, same account as before.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item is-hover\">\n          <span class=\"ds-list__avatar\">RM</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Rafael Moreau</a><span class=\"ds-list__time\">Tue</span></div>\n            <span class=\"ds-list__meta\">Re: binding samples</span>\n            <span class=\"ds-list__meta\">The sewn one, without question.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">CP</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Courier pickups</a><span class=\"ds-list__time\">Tue</span></div>\n            <span class=\"ds-list__meta\"><span class=\"ds-list__dot ds-list__dot--off\"></span>Collection missed</span>\n            <span class=\"ds-list__meta\">Nobody answered at the side door at 16:05.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">AS</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Agnes Sato</a><span class=\"ds-list__time\">Mon</span></div>\n            <span class=\"ds-list__meta\">Sunday lunch</span>\n            <span class=\"ds-list__meta\">Bring the folding chairs if they fit in the car.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">TO</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Tobias Okafor</a><span class=\"ds-list__time\">Mon</span></div>\n            <span class=\"ds-list__meta\">Delivery note 778</span>\n            <span class=\"ds-list__meta\">Four pallets, signed for by the morning shift.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">GW</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Guild of Printers</a><span class=\"ds-list__time\">3 Mar</span></div>\n            <span class=\"ds-list__meta\">Spring meeting, agenda</span>\n            <span class=\"ds-list__meta\">Three items and the election of a treasurer.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">HL</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Hanne Lindqvist</a><span class=\"ds-list__time\">3 Mar</span></div>\n            <span class=\"ds-list__meta\">Statement for February</span>\n            <span class=\"ds-list__meta\">Nothing is overdue on your account.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">NB</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Noor Bakker</a><span class=\"ds-list__time\">2 Mar</span></div>\n            <span class=\"ds-list__meta\">Type samples</span>\n            <span class=\"ds-list__meta\">The narrow cut reads better at nine point.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">RM</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Rafael Moreau</a><span class=\"ds-list__time\">2 Mar</span></div>\n            <span class=\"ds-list__meta\">Workshop keys</span>\n            <span class=\"ds-list__meta\">I left the spare set in the top drawer.</span>\n          </div>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__avatar\">IB</span>\n          <div class=\"ds-list__body\">\n            <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Ines Baptista</a><span class=\"ds-list__time\">28 Feb</span></div>\n            <span class=\"ds-list__meta\">First proof</span>\n            <span class=\"ds-list__meta\">Eleven corrections, most of them on page 14.</span>\n          </div>\n        </li>\n      </ul>\n      <footer class=\"ds-pane__foot\">\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><a class=\"ds-pagination__link\" href=\"#inbox\">Previous</a></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#inbox\" aria-current=\"page\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#inbox\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#inbox\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#inbox\">Next</a></li>\n        </ul>\n      </footer>\n    </section>\n\n\n    <main class=\"ds-app__main\">\n\n      <section class=\"ds-hero\" data-component=\"hero\">\n        <span class=\"ds-hero__date\">Wednesday, 11 March</span>\n        <h1 class=\"ds-hero__title\">Good morning, Marta</h1>\n        <p class=\"ds-hero__lead\">Twelve unread messages, and three people are waiting for an answer from you today.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button ds-button--large\" href=\"#compose\">Answer the oldest</a>\n          <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#inbox\">Mark all read</a>\n        </div>\n      </section>\n\n      <dl class=\"ds-stat\" data-component=\"stats\">\n        <div class=\"ds-stat__item\">\n          <dt class=\"ds-stat__label\">Unread</dt>\n          <dd class=\"ds-stat__value\">12 <span class=\"ds-stat__meta\">5 since yesterday</span></dd>\n        </div>\n        <div class=\"ds-stat__item\">\n          <dt class=\"ds-stat__label\">Waiting on you</dt>\n          <dd class=\"ds-stat__value\">3 <span class=\"ds-stat__meta\">oldest from Monday</span></dd>\n        </div>\n        <div class=\"ds-stat__item\">\n          <dt class=\"ds-stat__label\">Answered</dt>\n          <dd class=\"ds-stat__value\">27 <span class=\"ds-stat__meta\">this week</span></dd>\n        </div>\n      </dl>\n\n      <div class=\"ds-notice__stack\" data-component=\"notice\">\n        <div class=\"ds-notice\" role=\"status\">\n          <svg class=\"ds-notice__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"8\"/><path d=\"M10 9v5M10 6v.5\"/></svg>\n          <div><span class=\"ds-notice__title\">This thread is snoozed until noon.</span> It returns to the top of the inbox then.</div>\n        </div>\n        <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n          <svg class=\"ds-notice__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"M10 2.5 18 17H2z\"/><path d=\"M10 8v4M10 14v.5\"/></svg>\n          <div><span class=\"ds-notice__title\">Your reply of 08:55 was not sent.</span> The attachment is larger than 25 MB.</div>\n        </div>\n      </div>\n\n      <section class=\"ds-panel\" data-component=\"panel\">\n        <h2 class=\"ds-panel__title\">Proofs for the spring catalogue <span class=\"ds-badge ds-badge--warning\">Reply today</span></h2>\n        <div class=\"ds-panel__from\">\n          <span class=\"ds-list__avatar\">IB</span>\n          <span class=\"ds-panel__who\">Ines Baptista <span class=\"ds-panel__meta\">to Marta Keane, 09:42</span></span>\n          <span class=\"ds-badge ds-badge--quiet\">2 files</span>\n        </div>\n        <div class=\"ds-panel__body\">\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>Second proof</h1>\n            <p class=\"ds-prose__lead\">Two pages changed since Friday and both are marked in the margin.</p>\n            <p>Page 14 now carries the corrected price list, and the cover uses the <strong>warmer grey</strong> you asked for. The file names follow the usual pattern, for example <code>cat-spring-p14.pdf</code>.</p>\n            <h2>What I need from you</h2>\n            <p>A yes or no on the cover by this afternoon, so that the plates can be made tomorrow.</p>\n            <h3>Still open</h3>\n            <ul>\n              <li>The back cover address, which the shop has not confirmed.</li>\n              <li>Whether the insert is stapled or loose.</li>\n              <li>The number of copies for the fair.</li>\n            </ul>\n            <p class=\"ds-link__sample\" data-component=\"links\">\n              <a class=\"ds-link\" href=\"#compose\">Answer Ines</a>\n              <a class=\"ds-link is-visited\" href=\"#inbox\">First proof</a>\n              <a class=\"ds-link is-hover\" href=\"#rules\">Print shop rule</a>\n              <a class=\"ds-link is-active\" href=\"#bin\">Deleted proofs</a>\n              <a class=\"ds-link ds-link--quiet\" href=\"#inbox\">Back to the inbox</a>\n            </p>\n          </article>\n        </div>\n        <div class=\"ds-panel__foot\">\n          <a class=\"ds-button\" href=\"#compose\">Reply</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#compose\">Forward</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#bin\">Delete</a>\n        </div>\n      </section>\n\n      <section class=\"ds-grid\" data-component=\"grid\">\n        <div class=\"ds-grid__cell ds-grid__cell--1\">\n          <span class=\"ds-grid__chip\"></span>\n          <span class=\"ds-grid__label\">cat-spring-p14.pdf</span>\n          <span class=\"ds-grid__meta\">Price list, 1.8 MB</span>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <span class=\"ds-grid__chip\"></span>\n          <span class=\"ds-grid__label\">cat-spring-cover.pdf</span>\n          <span class=\"ds-grid__meta\">Cover, 4.2 MB</span>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--3\">\n          <span class=\"ds-grid__chip\"></span>\n          <span class=\"ds-grid__label\">Print shop</span>\n          <span class=\"ds-grid__meta\">Label, 31 threads</span>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--4\">\n          <span class=\"ds-grid__chip\"></span>\n          <span class=\"ds-grid__label\">Plates on Thursday</span>\n          <span class=\"ds-grid__meta\">Diary, 08:00</span>\n        </div>\n      </section>\n\n    </main>\n\n    </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"compose\">\n    <div class=\"ds-app__frame ds-app__frame--inner\">\n\n      <div class=\"ds-app__main\">\n\n        <div>\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#inbox\">chronoskin</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#inbox\">Inbox</a></li>\n            <li class=\"ds-breadcrumb__item\" aria-current=\"page\">New message</li>\n          </ol>\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">New message</h1>\n              <p class=\"ds-page-header__lead\">An answer to Ines Baptista, kept as a draft while you write.</p>\n            </div>\n            <div class=\"ds-page-header__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#inbox\">Back to the inbox</a>\n            </div>\n          </header>\n        </div>\n\n        <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n          <svg class=\"ds-notice__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"M10 2.5 18 17H2z\"/><path d=\"M10 8v4M10 14v.5\"/></svg>\n          <div><span class=\"ds-notice__title\">The cover file is 31 MB.</span> Attachments over 25 MB cannot be sent. Share it from Files in its place.</div>\n        </div>\n\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Re: Proofs for the spring catalogue <span class=\"ds-badge ds-badge--quiet\">Draft, saved 09:58</span></h2>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-form\">\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"c-to\">To</label>\n                <input class=\"ds-form__input\" id=\"c-to\" type=\"text\" value=\"Ines Baptista\">\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"c-subject\">Subject</label>\n                <input class=\"ds-form__input\" id=\"c-subject\" type=\"text\" value=\"Re: Proofs for the spring catalogue\">\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"c-body\">Message</label>\n                <textarea class=\"ds-form__textarea ds-form__textarea--tall\" id=\"c-body\">Yes to the cover, the warmer grey is right. Page 14 is fine as it stands. I will confirm the back cover address before noon.</textarea>\n              </div>\n              <label class=\"ds-form__check\">\n                <input class=\"ds-form__switch\" type=\"checkbox\" checked>\n                Remind me if there is no answer by Friday\n              </label>\n            </div>\n          </div>\n          <div class=\"ds-panel__foot\">\n            <a class=\"ds-button\" href=\"#inbox\">Send</a>\n            <a class=\"ds-button ds-button--secondary\" href=\"#inbox\">Save draft</a>\n            <a class=\"ds-button ds-button--danger\" href=\"#bin\">Discard</a>\n          </div>\n        </section>\n\n      </div>\n\n      <section class=\"ds-pane\" aria-label=\"Drafts\">\n        <header class=\"ds-pane__head\">\n          <h2 class=\"ds-pane__title\">Drafts</h2>\n          <span class=\"ds-badge ds-badge--quiet\">2</span>\n        </header>\n        <ul class=\"ds-list\">\n          <li class=\"ds-list__item is-current\">\n            <span class=\"ds-list__avatar\">IB</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#compose\">Ines Baptista</a><span class=\"ds-list__time\">09:58</span></div>\n              <span class=\"ds-list__meta\">Re: Proofs for the spring catalogue</span>\n              <span class=\"ds-list__meta\">Yes to the cover, the warmer grey is right.</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">TO</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#compose\">Tobias Okafor</a><span class=\"ds-list__time\">Tue</span></div>\n              <span class=\"ds-list__meta\">Re: Paper stock for April</span>\n              <span class=\"ds-list__meta\">Please hold forty reams of the 120 gram.</span>\n            </div>\n          </li>\n        </ul>\n        <header class=\"ds-pane__head\">\n          <h2 class=\"ds-pane__title\">In this thread</h2>\n          <span class=\"ds-badge ds-badge--quiet\">4</span>\n        </header>\n        <ul class=\"ds-list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">IB</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Ines Baptista</a><span class=\"ds-list__time\">09:42</span></div>\n              <span class=\"ds-list__meta\">Second proof</span>\n              <span class=\"ds-list__meta\">Two pages changed since Friday.</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">MK</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Marta Keane</a><span class=\"ds-list__time\">Fri</span></div>\n              <span class=\"ds-list__meta\">Re: First proof</span>\n              <span class=\"ds-list__meta\">The grey on the cover is too cold.</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">IB</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Ines Baptista</a><span class=\"ds-list__time\">28 Feb</span></div>\n              <span class=\"ds-list__meta\">First proof</span>\n              <span class=\"ds-list__meta\">Eleven corrections, most of them on page 14.</span>\n            </div>\n          </li>\n        </ul>\n        <footer class=\"ds-pane__foot\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#inbox\">Open the thread</a>\n        </footer>\n      </section>\n\n    </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"bin\">\n    <div class=\"ds-app__frame ds-app__frame--inner\">\n\n      <div class=\"ds-app__main\">\n\n        <div>\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#inbox\">chronoskin</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#inbox\">Mail</a></li>\n            <li class=\"ds-breadcrumb__item\" aria-current=\"page\">Bin</li>\n          </ol>\n          <header class=\"ds-page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">Bin</h1>\n              <p class=\"ds-page-header__lead\">Deleted threads stay here for thirty days and are then removed for good.</p>\n            </div>\n            <div class=\"ds-page-header__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#inbox\">Back to the inbox</a>\n            </div>\n          </header>\n        </div>\n\n        <table class=\"ds-table\">\n          <thead>\n            <tr>\n              <th scope=\"col\">Thread</th>\n              <th scope=\"col\" class=\"ds-table__opt\">From</th>\n              <th scope=\"col\">Removed in</th>\n              <th scope=\"col\" class=\"ds-table__num\">Size</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#bin\">Proofs, first round</a></td>\n              <td class=\"ds-table__meta ds-table__opt\">Ines Baptista</td>\n              <td><span class=\"ds-badge ds-badge--danger\">2 days</span></td>\n              <td class=\"ds-table__num\">6.0 MB</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#bin\">Collection booked for Monday</a></td>\n              <td class=\"ds-table__meta ds-table__opt\">Courier pickups</td>\n              <td><span class=\"ds-badge ds-badge--warning\">9 days</span></td>\n              <td class=\"ds-table__num\">0.1 MB</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#bin\">Winter meeting, minutes</a></td>\n              <td class=\"ds-table__meta ds-table__opt\">Guild of Printers</td>\n              <td><span class=\"ds-badge ds-badge--quiet\">14 days</span></td>\n              <td class=\"ds-table__num\">0.4 MB</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#bin\">Type samples, old set</a></td>\n              <td class=\"ds-table__meta ds-table__opt\">Noor Bakker</td>\n              <td><span class=\"ds-badge ds-badge--quiet\">21 days</span></td>\n              <td class=\"ds-table__num\">11.2 MB</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#bin\">Statement for January</a></td>\n              <td class=\"ds-table__meta ds-table__opt\">Hanne Lindqvist</td>\n              <td><span class=\"ds-badge ds-badge--quiet\">27 days</span></td>\n              <td class=\"ds-table__num\">0.2 MB</td>\n            </tr>\n          </tbody>\n        </table>\n\n        <div class=\"ds-app__row\">\n        <section class=\"ds-dialog\" data-component=\"dialog\">\n          <div class=\"ds-dialog__box\" role=\"dialog\" aria-labelledby=\"d-title\">\n            <h2 class=\"ds-dialog__title\" id=\"d-title\">Delete this thread?</h2>\n            <div class=\"ds-dialog__body\">Four messages and two files go to the bin and are removed for good after thirty days.</div>\n            <div class=\"ds-dialog__actions\">\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Keep</button>\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Delete</button>\n            </div>\n          </div>\n        </section>\n          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Before it is gone</h2>\n            <div class=\"ds-panel__body\">\n              A thread can be put back in its folder until its last day. Files that other threads still use are kept, and rules never touch the bin.\n            </div>\n            <div class=\"ds-panel__foot\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#inbox\">Put back</a>\n            </div>\n          </section>\n        </div>\n\n      </div>\n\n      <section class=\"ds-pane\" aria-label=\"Storage\">\n        <header class=\"ds-pane__head\">\n          <h2 class=\"ds-pane__title\">Storage</h2>\n          <span class=\"ds-badge ds-badge--quiet\">6.1 of 15 GB</span>\n        </header>\n        <div class=\"ds-pane__tools\">\n          <div class=\"ds-meter ds-meter--flush\"><div class=\"ds-meter__bar\"></div></div>\n          <span class=\"ds-form__hint\">The bin holds 17.9 MB in five threads.</span>\n        </div>\n        <ul class=\"ds-list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">IN</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Inbox</a><span class=\"ds-list__time\">2.4 GB</span></div>\n              <span class=\"ds-list__meta\">1,912 threads</span>\n              <span class=\"ds-list__meta\">Largest: spring catalogue proofs</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">PS</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Print shop</a><span class=\"ds-list__time\">1.9 GB</span></div>\n              <span class=\"ds-list__meta\">31 threads</span>\n              <span class=\"ds-list__meta\">Mostly proofs and plates</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__avatar\">AR</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#inbox\">Archive</a><span class=\"ds-list__time\">1.6 GB</span></div>\n              <span class=\"ds-list__meta\">4,020 threads</span>\n              <span class=\"ds-list__meta\">Nothing newer than January</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item is-current\">\n            <span class=\"ds-list__avatar\">BN</span>\n            <div class=\"ds-list__body\">\n              <div class=\"ds-list__line\"><a class=\"ds-list__title\" href=\"#bin\">Bin</a><span class=\"ds-list__time\">17.9 MB</span></div>\n              <span class=\"ds-list__meta\">5 threads</span>\n              <span class=\"ds-list__meta\">Emptied a little every day</span>\n            </div>\n          </li>\n        </ul>\n        <footer class=\"ds-pane__foot\">\n          <a class=\"ds-button ds-button--danger\" href=\"#bin\">Empty the bin</a>\n        </footer>\n      </section>\n\n    </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"rules\">\n    <div class=\"ds-app__frame ds-app__frame--inner\">\n\n      <div class=\"ds-app__main\">\n\n        <div>\n          <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#inbox\">chronoskin</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#rules\">Settings</a></li>\n            <li class=\"ds-breadcrumb__item\" aria-current=\"page\">Rules</li>\n          </ol>\n          <header class=\"ds-page-header\" data-component=\"page-header\">\n            <div class=\"ds-page-header__text\">\n              <h1 class=\"ds-page-header__title\">Rules</h1>\n              <p class=\"ds-page-header__lead\">Five rules sort incoming mail before it reaches the inbox.</p>\n            </div>\n            <div class=\"ds-page-header__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#inbox\">Back to mail</a>\n              <a class=\"ds-button\" href=\"#rules\">New rule</a>\n            </div>\n          </header>\n          <ul class=\"ds-tabs ds-tabs--inline\" data-component=\"tabs\">\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#rules\" aria-current=\"true\">All rules</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#rules\">Active</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#rules\">Paused</a></li>\n            <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#rules\">Failed</a></li>\n          </ul>\n        </div>\n\n\n        <table class=\"ds-table\" data-component=\"table\">\n          <thead>\n            <tr>\n              <th scope=\"col\">Rule</th>\n              <th scope=\"col\">Status</th>\n              <th scope=\"col\" class=\"ds-table__opt\">Moves mail to</th>\n              <th scope=\"col\" class=\"ds-table__num\">Matched</th>\n              <th scope=\"col\" class=\"ds-table__num ds-table__opt\">This week</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#rules\">Invoices from suppliers</a></td>\n              <td><span class=\"ds-badge ds-badge--success\">Active</span></td>\n              <td class=\"ds-table__meta ds-table__opt\">Invoices</td>\n              <td class=\"ds-table__num\">412</td>\n              <td class=\"ds-table__num ds-table__opt\">9</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#rules\">Courier notices</a></td>\n              <td><span class=\"ds-badge ds-badge--success\">Active</span></td>\n              <td class=\"ds-table__meta ds-table__opt\">Archive</td>\n              <td class=\"ds-table__num\">1,238</td>\n              <td class=\"ds-table__num ds-table__opt\">31</td>\n            </tr>\n            <tr class=\"is-hover\">\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#rules\">Print shop threads</a></td>\n              <td><span class=\"ds-badge ds-badge--success\">Active</span></td>\n              <td class=\"ds-table__meta ds-table__opt\">Print shop</td>\n              <td class=\"ds-table__num\">96</td>\n              <td class=\"ds-table__num ds-table__opt\">14</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#rules\">Newsletters</a></td>\n              <td><span class=\"ds-badge ds-badge--warning\">Paused</span></td>\n              <td class=\"ds-table__meta ds-table__opt\">Waiting</td>\n              <td class=\"ds-table__num\">57</td>\n              <td class=\"ds-table__num ds-table__opt\">0</td>\n            </tr>\n            <tr>\n              <td><a class=\"ds-link ds-link--quiet\" href=\"#rules\">Old guild list</a></td>\n              <td><span class=\"ds-badge ds-badge--danger\">Failed</span></td>\n              <td class=\"ds-table__meta ds-table__opt\">Folder was deleted</td>\n              <td class=\"ds-table__num\">8</td>\n              <td class=\"ds-table__num ds-table__opt\">0</td>\n            </tr>\n          </tbody>\n        </table>\n\n\n        <div class=\"ds-app__row\">\n        <section class=\"ds-empty\" data-component=\"empty\">\n          <svg class=\"ds-empty__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"M4 7h6l2 2h8v10H4z\"/></svg>\n          <h2 class=\"ds-empty__title\">No rules for the Family label</h2>\n          <p class=\"ds-empty__text\">Mail with this label is sorted by hand until you add a rule for it.</p>\n          <a class=\"ds-button\" href=\"#rules\">Add a rule</a>\n        </section>\n          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">When rules run <span class=\"ds-badge ds-badge--quiet\">5</span></h2>\n            <div class=\"ds-panel__body\">\n              Each new message is checked against the rules from the top of the list down, and the first one that matches moves it. A failed rule is skipped until its folder exists again.\n            </div>\n          </section>\n        </div>\n\n      </div>\n\n      <section class=\"ds-pane\">\n        <header class=\"ds-pane__head\">\n          <h2 class=\"ds-pane__title\">New rule</h2>\n          <span class=\"ds-badge ds-badge--quiet\">Draft</span>\n        </header>\n        <div class=\"ds-pane__tools\">\n          <form class=\"ds-form\" data-component=\"form\">\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-name\">Name</label>\n              <input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"Proofs from the print shop\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-folder\">Move to</label>\n              <span class=\"ds-form__select-wrap\">\n                <select class=\"ds-form__select\" id=\"f-folder\">\n                  <option>Print shop</option>\n                  <option>Invoices</option>\n                  <option>Archive</option>\n                </select>\n                <svg class=\"ds-form__chevron\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"m4 6 4 4 4-4\"/></svg>\n              </span>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-from\">Sender contains</label>\n              <input class=\"ds-form__input is-error\" id=\"f-from\" type=\"text\" value=\"@\" aria-invalid=\"true\" aria-describedby=\"f-from-error\">\n              <span class=\"ds-form__error\" id=\"f-from-error\">Enter at least three characters.</span>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-size\">Only above <span>5 MB</span></label>\n              <input class=\"ds-form__range\" id=\"f-size\" type=\"range\" min=\"0\" max=\"100\" value=\"20\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-note\">Note</label>\n              <textarea class=\"ds-form__textarea\" id=\"f-note\" placeholder=\"Why this rule exists\"></textarea>\n              <span class=\"ds-form__hint\">Only you can see this.</span>\n            </div>\n            <label class=\"ds-form__check\">\n              <input class=\"ds-form__checkbox\" type=\"checkbox\" checked>\n              Mark as read\n            </label>\n            <label class=\"ds-form__check\">\n              <input class=\"ds-form__switch\" type=\"checkbox\" checked>\n              Apply to mail already in the inbox\n            </label>\n            <div class=\"ds-form__actions\" data-component=\"buttons\">\n              <button class=\"ds-button\" type=\"button\">Save</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Cancel</button>\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Delete</button>\n              <button class=\"ds-button\" type=\"button\" disabled>Test</button>\n            </div>\n          </form>\n        </div>\n      </section>\n\n    </div>\n    </section>\n\n  </div>\n</div>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <span>chronoskin, mail and tasks for the Keane print workshop</span>\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-footer__link\" href=\"#rules\">Rules</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#compose\">Write</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#bin\">Bin</a></li>\n    </ul>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.neumorphism.app.s03.p03.t03.u03.dr\",\n  \"library\": \"2026.10.07-2111\",\n  \"era\": {\n    \"slug\": \"neumorphism\",\n    \"years\": [\n      2019,\n      2021\n    ]\n  },\n  \"archetype\": \"app\",\n  \"mode\": \"pure\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-nm-3333-dr\",\n  \"short\": \"v1-nm-3333-dr\",\n  \"density\": \"roomy\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: rgb(244 244 245);\n  --color-canvas: rgb(244 244 245);\n  --color-surface: rgb(244 244 245);\n  --color-surface-alt: rgb(255 255 255);\n  --color-surface-strong: rgb(227 227 231);\n  --color-bar: rgb(244 244 245);\n  --color-bar-text: rgb(39 39 42);\n  --color-bar-alt: rgb(39 39 42);\n  --color-bar-alt-text: rgb(244 244 245);\n  --color-inverse: rgb(39 39 42);\n  --color-inverse-text: rgb(255 255 255);\n  --color-text: rgb(39 39 42);\n  --color-text-muted: rgb(113 113 122);\n  --color-heading: rgb(39 39 42);\n  --color-heading-alt: rgb(113 113 122);\n  --color-link: rgb(234 88 12);\n  --color-link-quiet: rgb(39 39 42);\n  --color-link-visited: rgb(113 113 122);\n  --color-link-hover: rgb(39 39 42);\n  --color-link-active: rgb(249 115 22);\n  --color-border: rgb(227 227 231);\n  --color-border-strong: rgb(210 214 218);\n  --color-border-muted: rgb(255 255 255);\n  --color-accent: rgb(249 115 22);\n  --color-accent-text: rgb(24 24 27);\n  --color-accent-alt: rgb(14 165 233);\n  --color-fill-1: rgb(249 115 22);\n  --color-fill-2: rgb(39 39 42);\n  --color-fill-3: rgb(14 165 233);\n  --color-fill-4: rgb(34 197 94);\n  --color-button: rgb(39 39 42);\n  --color-button-text: rgb(255 255 255);\n  --color-button-hover-text: rgb(255 255 255);\n  --color-button-secondary: rgb(244 244 245);\n  --color-button-secondary-text: rgb(39 39 42);\n  --color-input: rgb(244 244 245);\n  --color-input-text: rgb(39 39 42);\n  --color-input-border: rgb(210 214 218);\n  --color-disabled: rgb(227 227 231);\n  --color-disabled-text: rgb(113 113 122 / 0.7);\n  --color-danger: rgb(239 68 68);\n  --color-danger-surface: rgb(255 255 255);\n  --color-success: rgb(34 197 94);\n  --color-warning: rgb(234 179 8);\n  --color-notice: rgb(255 255 255);\n  --color-notice-text: rgb(39 39 42);\n  --color-focus: rgb(249 115 22);\n  --color-shadow: rgb(200 200 208);\n  --color-overlay: rgb(39 39 42 / 0.4);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Noto Sans\", \"Open Sans\", \"Lucida Grande\", \"Segoe UI\", Verdana, sans-serif;\n  --font-heading: \"Noto Sans\", \"Open Sans\", \"Lucida Grande\", \"Segoe UI\", Verdana, sans-serif;\n  --font-ui: \"Noto Sans\", \"Open Sans\", \"Lucida Grande\", \"Segoe UI\", Verdana, sans-serif;\n  --font-mono: Inconsolata, Monaco, Consolas, \"Courier New\", Courier, monospace;\n  --text-base: 16px;\n  --text-small: 14px;\n  --text-ui: 15px;\n  --text-large: 18px;\n  --text-display: 36px;\n  --text-h1: 30px;\n  --text-h2: 24px;\n  --text-h3: 16px;\n  --line-body: 1.63;\n  --line-heading: 1.25;\n  --line-display: 1.2;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 900;\n  --weight-ui: 700;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 8.8px;\n  --radius-panel: 8.8px;\n  --radius-pill: 30px;\n  --radius-page: 12px;\n  --shadow-panel: 3px 3px 6px color-mix(in srgb, var(--color-shadow) 80%, transparent), -3px -3px 6px var(--color-border-muted);\n  --shadow-control: 2px 2px 4px color-mix(in srgb, var(--color-shadow) 80%, transparent), -2px -2px 4px var(--color-border-muted);\n  --shadow-control-hover: 3px 3px 6px var(--color-shadow), -3px -3px 6px var(--color-border-muted);\n  --shadow-control-pressed: inset 2px 2px 5px color-mix(in srgb, var(--color-shadow) 80%, transparent), inset -3px -3px 7px var(--color-border-muted);\n  --shadow-dialog: 6px 6px 12px var(--color-shadow), -6px -6px 12px color-mix(in srgb, var(--color-border-muted) 20%, transparent);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 85%, var(--color-border-muted));\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: box-shadow 0.15s ease-in-out, background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n  --backdrop-blur: 0px;\n}\n"
  }
}
