{
  "id": "v1-fl-4536",
  "long_id": "v1.flat-design.landing.s04.p05.t03.u06",
  "name": "Flat design app page",
  "era": {
    "slug": "flat-design",
    "code": "fl",
    "name": "Flat design",
    "years": [
      2013,
      2016
    ],
    "description": "Product marketing, 2013 to 2016: full-width bands of solid colour, light sans-serif headings, thin one-pixel rules, and no gloss, bevel or drop shadow anywhere."
  },
  "archetype": "landing",
  "mode": "mix",
  "viewport": {
    "width": 1280,
    "fluid": true,
    "responsive": true
  },
  "summary": "This is the app page of flat design, common from 2013 to 2016 for mobile apps and small team tools: a hero cut into two flat halves with a sign-up field on one and a long-shadow emblem on the other, a dark strip of figures, then a flat phone with feature callouts pointing at it from both sides and three plan cards with the middle one raised. Icons are white silhouettes on solid colour chips, each casting a hard 45 degree shadow to the lower right; there is no gloss, gradient or blurred drop shadow anywhere. The navigation is symmetric, with the wordmark in the middle of the bar, and the page ends in one centred dark footer.",
  "url": "https://chrono.skin/s/v1-fl-4536",
  "preview_url": "https://chrono.skin/s/v1-fl-4536/specimen.html",
  "files": {
    "STYLE.md": "# Flat design app page\n\n## Summary\n\nThis is the app page of flat design, common from 2013 to 2016 for mobile apps and small team tools: a hero cut into two flat halves with a sign-up field on one and a long-shadow emblem on the other, a dark strip of figures, then a flat phone with feature callouts pointing at it from both sides and three plan cards with the middle one raised. Icons are white silhouettes on solid colour chips, each casting a hard 45 degree shadow to the lower right; there is no gloss, gradient or blurred drop shadow anywhere. The navigation is symmetric, with the wordmark in the middle of the bar, and the page ends in one centred dark footer.\n\n## Layout\n\n- The page is fluid and designed for a 1280px viewport. Every strip (`.ds-nav`, `.ds-hero`, `.ds-stat`, `.ds-band`, `.ds-page-header`, `.ds-footer`) spans the viewport and paints its own background; content sits in a centred column of `--size-page` (1140px) with `--space-5` (30px) at each side. Never box the whole page in a frame.\n- Navigation is one `--fill-bar` bar, `--size-nav` (70px) tall, with a 1px bottom rule and three zones: section links at the left, the wordmark exactly in the middle, the sign-in link and one small button at the right. The current link carries a 2px line on the top edge of the bar.\n- The hero is one `--color-fill-1` strip split 58 to 42: the left part holds a small pill line, the title, a lead and the `.ds-signup` row (one field, one white button); the right part is a darker shade of the same fill that runs to the viewport edge and holds one round emblem of `--size-disc` (300px). Text in the hero is left-aligned.\n- Directly under the hero comes `.ds-stat`, a `--fill-bar-alt` strip of four centred figures. Then `.ds-band` sections on `--color-canvas` and `--color-surface-alt` in turn, each headed by a centred `.ds-band__head`: the feature `.ds-grid` (two cells, the phone, two cells), the three plan cards in `.ds-plans`, a 7 to 5 `.ds-cols` row with running text at the left and the `.ds-list` timeline at the right, and one centred `.ds-quote`.\n- Inner pages have no hero and no stat strip. Under the nav comes `.ds-page-header`, a `--color-fill-1` strip that holds, top to bottom, the `.ds-breadcrumb`, the page title with its one line of description and the actions at the right, and, on a list page, the `.ds-tabs` standing on its lower edge so that the current tab joins the white content below (a page without tabs adds `--plain`). The content band is `.ds-cols--tight`: a main column at the left and a `--size-sidebar` (300px) column at the right. The main column stacks the notices, the table with its pagination and note underneath, an action row, or a form inside a `.ds-panel--plain`; the right column holds the `.ds-sidebar` list group and small plain panels. A text page uses the 7 to 5 `.ds-cols` row instead. The footer is unchanged.\n- Views. The specimen is a shift-handover app with five views. `home` is the app page: the split hero, the figure strip, the phone with its four feature cells, the three plan cards and one quotation. `news` is a text page: why the app is built as it is, beside the timeline of versions. `handovers` is the list page: tabs on the page header, notices, the week's table with pagination, an empty box for templates, and the site list and label key in the right column. `handover` is one shift: its lines, the action row and the open closing dialog, with the shift's count and the last note at the right. `settings` is the site's settings form in a plain panel beside the settings links. Below 760px the columns stack, the navigation wraps under the brand, grids fold to two columns or one, and a wide table scrolls sideways inside `.ds-table__wrap` while the page itself never does. The split hero becomes one column and the phone leads its feature cells.\n- Spacing scale: `--space-1` 5px (between a label and its field, small button and pagination vertical padding, between tabs), `--space-2` 10px (button and input vertical padding, between adjacent buttons, table cell vertical padding), `--space-3` 15px (paragraph gap, between form rows, cell and input horizontal padding, title strips), `--space-4` 20px (button horizontal padding, plain panel padding, between a chip and its text), `--space-5` 30px (page side padding, column gutter, plan card padding, between stacked blocks), `--space-6` 60px (between text columns, between feature cells, under a band head, compact band padding, footer padding), `--space-7` 90px (band and hero padding).\n- Other sizes: `--size-measure` 480px (the sign-up row; with the sidebar width it also gives the 780px measure of a band head and the quotation), `--size-chip` 60px (icon chip), `--size-phone` 250px and `--size-screen` 400px (the device), `--size-avatar` 50px, `--size-dialog` 440px.\n- On a phone (960px and below) there is no menu button: the bar wraps, the `.ds-nav__links--end` group stays on the first row and the main `.ds-nav__links` take a row of their own, centred and then (760px and below) spread over the full width; the current link is marked by a `--color-link` line under it. A drop-down in that row opens under the row, aligned to its right edge. A tooltip is not placed beside its trigger: it opens as a full row under its line, inset by `--space-3`, without its arrow.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Colour family: the 2014 corporate home page (one blue, black text, grey bands and saturated product tiles); the purple and yellow are read from its screenshot.\n- `--color-page`, `--color-canvas` and `--color-surface` are white `#ffffff`; `--color-surface-alt` `#f0f0f0` is the alternate band and row, the plain tile, the page-header strip, the rail and the footer; `--color-surface-strong` `#e0e0e0` is the table head, the panel title strip, the idle tabs and the second plain tile. `--color-bar` `#eeeeee` with `--color-bar-text` `#1a1a1a` is the header. `--color-bar-alt` `#1570a6` with `--color-bar-alt-text` `#ffffff` is the breadcrumb toolbar; nothing else is put on it and its text takes no other colour.\n- Text and headings are near-black `#1a1a1a` (`--color-text`, `--color-heading`); `--color-heading-alt` is `#000000` (panel and sidebar titles, h3); meta text is `--color-text-muted` `#969696`.\n- `--color-button`, `--color-link`, `--color-link-visited` and `--color-focus` are the one blue `#1570a6`; hover is the darker `--color-link-hover` `#106088`, active `#1a1a1a`. Quiet links are `#1a1a1a`. The secondary button is blue text and outline on a grey block. The current tab, the current page number, the line under the tabs and the current rail marker are `--color-button`.\n- `--color-fill-1` `#108010` (green) is the first tile and the title tile of an inner page; `--color-fill-4` `#5133ab` (purple) is the other fill that carries text. Text on either, and on `--color-inverse` `#1a1a1a`, is `--color-inverse-text`. `--color-fill-2` `#e04000` (orange) and `--color-fill-3` `#1570a6` (blue) are icon tiles: an icon only, never running text, and the icon (`.ds-grid__icon`) sits on a round plate, `--color-inverse` mixed in at 40%, so that the layout stays readable when the palette is exchanged for one whose second or third fill is pale. On a fill the button is `.ds-button--inverse`: `--color-inverse-text` with `--color-fill-1` text.\n- `--color-accent` `#5133ab` (purple, white text) is the default tag, `--color-accent-alt` `#ffbb00` (yellow) the second: a 30% tint of it over `--color-surface` with a yellow outline and `--color-heading` text. Status: `--color-success` `#108010`, `--color-warning` `#e04000`, `--color-danger` `#e81020`, all with `--color-accent-text`.\n- `--color-notice` `#e8f0f0` with `--color-notice-text` `#106088`; the error notice is red on `--color-danger-surface` `#f8f8f8` with a red border.\n- Borders: `--color-border` `#d8e0e0` (table grid, panel outline, rail edge), `--color-border-muted` `#e0e0e0`; `--color-border-strong` and `--color-input-border` are the mid grey `#969696` (control outlines, the rule above a news item). The footer is light: `--color-surface-alt` with `--color-link` links and `--color-heading` titles; `--color-inverse` appears only as a tile (one mosaic tile and one stat).\n- One plain humanist sans at regular weight, after the 2014 payments page with the sizes of the corporate home page: `--font-body`, `--font-heading` and `--font-ui` are Source Sans Pro, Lucida Grande, Segoe UI (the references used Segoe UI and commercial faces). `--font-mono` is Consolas.\n- Dense: `--text-base` and `--text-ui` 14px at `--line-body` 1.5, `--text-small` 12px (meta, tags, breadcrumb, footer base), `--text-large` 16px (lead lines, news titles, footer titles).\n- Headings are regular weight and modest: `--weight-heading` and `--weight-display` 400; `--text-display` 38px (the first tile's title and the stat figures), `--text-h1` 26px (band titles, the inner page title, the dialog title), `--text-h2` 20px (tile titles, the quotation, the wordmark), `--text-h3` 16px. Hierarchy is size only.\n- `--weight-ui` is 400: buttons, tabs and navigation are not bold. `--weight-bold` 600 is for labels, table heads and row heads, news titles, panel and sidebar titles and the \"more\" link in a tile.\n- Sentence case, no tracking: `--ui-transform` and `--heading-transform` are `none`, both tracking tokens 0. All three link decorations are `none`.\n- Everything is square: `--radius-control`, `--radius-panel`, `--radius-page` and also `--radius-pill` are 0, so badges are rectangular tags. The mosaic parts its tiles by half of `--radius-page`, which is nothing here: with a rounder surface set the tiles separate just enough for their corners to read.\n- Buttons are solid: `--fill-button` is the flat `--color-button`, hovered 15% darker and ringed by `--shadow-control-hover`, a hard 1px line in `--color-border-strong`. The secondary button is a grey block: `--fill-button-secondary` is `--color-button-secondary` darkened 12%, inside a 2px outline. Panels and the dialog band are `--fill-panel`, the grey `--color-surface-alt`.\n- Lines are heavy: `--border-width` 2px for rules, the table grid and control outlines; `--border-width-strong` 4px for the current navigation item, the line under the tabs, the rule above a news item and the current rail marker.\n- One-off shades made with `color-mix()` because the vocabulary has no token: the ghost button border (`--color-inverse-text` at 50%), the icon plate (`--color-inverse` at 40%), the `--alt` badge tint (`--color-accent-alt` at 30% over `--color-surface`), the hovered and pressed destructive button (`--color-danger` at 85% over `--color-inverse-text` and over `--color-inverse`). The lead in the first tile, the source line under the quotation and idle breadcrumb links use `opacity: 0.8`.\n- Nothing is blurred and nothing casts a shadow at rest: apart from the hover ring every shadow is `none`, every fill a flat colour. `--focus-ring` is `1px dotted` in `--color-focus`. `--transition` is `none`.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, text colour and page fill. It has no width of its own.\n- `.ds-band`: full-width section with a `.ds-band__inner` column. Variants `--alt` (off-white) and `--compact` (60px padding). `.ds-band__head` centres a `.ds-band__title` and a `.ds-band__lead` above the content. `.ds-cols` lays columns out: `.ds-cols__wide` with `.ds-cols__narrow` (7 to 5), `.ds-cols__main` with `.ds-cols__side` (300px, on the right), or two `.ds-cols__half`; `.ds-cols--tight` narrows the gutter to 30px. `.ds-stack` stacks blocks 30px apart.\n- `.ds-brand`: the site's mark and name, exactly in the middle of the top bar. `.ds-brand__mark` is a 30px tile dressed like the primary button (`--fill-button`, `--color-button-text` for the drawing, `--radius-control`, `--shadow-control`) holding the mark as inline SVG; `.ds-brand__name` is the name in the heading font at `--text-h2` and `--weight-bold` (not the heading weight: the light headings of several token sets are too weak beside the tile) in `--color-heading`. The name and the mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the top bar. `.ds-nav__links` with `.ds-nav__entry` and `.ds-nav__link` at the left (current item: `is-current`; the specimen marks it by the view that is showing, one `:has()` rule per view), the `.ds-brand` in the middle, a second `.ds-nav__links--end` list at the right for sign-in and one `.ds-button--small`. Under 960px the bar is two rows, the brand with the account links and then the navigation, and the current item is marked by a rule under its text instead of the one on the bar's upper edge; the features of `.ds-grid` stack under the phone from the same width.\n- `.ds-hero`: the split fill strip. `.ds-hero__copy` holds `.ds-hero__kicker` (optional pill line), `.ds-hero__title`, `.ds-hero__lead` and the `.ds-signup` row (`.ds-signup__input`, a `.ds-button--inverse ds-button--large`, `.ds-signup__note`). `.ds-hero__side` holds one `.ds-hero__disc` with a long-shadow drawing (`.ds-hero__art`). One hero per site, on the home page only.\n- `.ds-shade`, `.ds-tint`: colour helpers for parts of an inline SVG. `.ds-shade` is the long shadow and grey detail, `.ds-tint` a detail in `--color-fill-1`.\n- `.ds-page-header`: head of an inner page, used instead of `.ds-hero`. `.ds-page-header__inner` is the column; put the `.ds-breadcrumb` first, then `.ds-page-header__row` with `.ds-page-header__copy` (`.ds-page-header__title`, one `.ds-page-header__text` line) and `.ds-page-header__actions` (one `--ghost` and one `--inverse` button at most), then `.ds-tabs--onfill` last.\n- `.ds-prose`: running text: h1, h2, h3, p, lists, `code`, `strong`. `.ds-prose__lead` for the first paragraph.\n- `.ds-link`: text link. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `--quiet` for meta links. `.ds-linkrow` lays links in a row.\n- `.ds-button`: flat button, 4px radius, 15px weight 700. Variants: `--secondary` (white with a 1px outline), `--danger` (flat red, destructive actions only), `--inverse` (white, on a fill), `--ghost` (outlined, on a fill only), `--large`, `--small`, `--block`. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow` spaces buttons 10px apart.\n- `.ds-form`: stacked labels. `.ds-form__row` puts two fields side by side; `.ds-form__field` wraps `.ds-form__label` and one of `.ds-form__input`, `.ds-form__select`, `.ds-form__textarea`, all with a 2px outline and the control lip. Error: `is-error` on the input plus `.ds-form__error`. `.ds-form__hint`, `.ds-form__check` with `.ds-form__checkbox`, and `.ds-form__actions` (right-aligned, above a 1px rule). Place a form inside a `.ds-panel--plain`.\n- `.ds-table`: boxed data table with 4px corners, a `--color-surface-strong` head in small bold type, 1px rules between rows and alternate rows off-white. `.ds-table__num` right-aligns numbers; a row head that opens a detail page holds a `.ds-table__link`. Wrap it in `.ds-table__wrap` so that it scrolls on its own in a narrow window. `.ds-tablefoot` sits under it with the pagination at the left and `.ds-tablefoot__note` at the right.\n- `.ds-list`: a timeline for news and changes: a 2px rule down the left and one accent dot per `.ds-list__item`, which holds `.ds-list__meta` (date first), `.ds-list__title` and `.ds-list__text`.\n- `.ds-panel`: a card with a `.ds-panel__title` strip and `.ds-panel__body`. As a plan card inside `.ds-plans` (three across, centred text) it holds `.ds-panel__figure`, `.ds-panel__unit`, a `.ds-panel__rows` list of `.ds-panel__line` and one button; `.ds-panel--featured` is the raised middle plan with an accent strip. `.ds-panel--plain` is the left-aligned working panel of inner pages.\n- `.ds-stat`: the strip of summary figures; it is the row. `.ds-stat__inner` is a list of four `.ds-stat__item`, each a `.ds-stat__figure` over a `.ds-stat__label`. Use it once, directly under the hero or directly under a page header.\n- `.ds-grid`: the feature layout: `.ds-grid__col--start` (two cells, text right-aligned), the `.ds-phone`, `.ds-grid__col` (two cells). A `.ds-grid__cell` is a `.ds-grid__chip` (`--2`, `--3`, `--4` for the other fills) with a `.ds-grid__icon`, and a `.ds-grid__body` with `.ds-grid__title` and `.ds-grid__text`.\n- `.ds-phone`: the flat device, drawn with blocks only: `.ds-phone__screen`, `.ds-phone__bar`, rows of `.ds-phone__row` with a `.ds-phone__dot` and `.ds-phone__lines` of `.ds-phone__line`, and `.ds-phone__action`.\n- `.ds-quote`: one centred testimonial: `.ds-quote__text`, then `.ds-quote__by` with a `.ds-avatar`, `.ds-quote__name` and `.ds-quote__role`.\n- `.ds-tabs`: folder tabs on a 1px rule; `.ds-tabs__tab` with `is-current` is boxed and open at the bottom. `.ds-tabs--onfill` is the form used in the page header: white text, and the current tab is a `--color-canvas` block. `.ds-tabs__count` is a faint number after the label.\n- `.ds-badge`: fully rounded pill, 13px weight 700. Accent by default, `--alt` a 30% tint of `--color-accent-alt` over `--color-surface` with a `--border-width` outline in the full colour and `--color-heading` text (the text never lies on the accent itself, so the second accent may be light or dark), `--quiet` grey for counts. Status variants `--success`, `--warning`, `--danger`. `.ds-badgerow` for several.\n- `.ds-sidebar`: a boxed list group in the right column: `.ds-sidebar__title` strip, `.ds-sidebar__list` of `.ds-sidebar__item` rows, each a link and an optional `.ds-badge--quiet` count; the current row is `is-current`.\n- `.ds-notice`: flat message strip with a 2px left edge; `--error` for errors. `.ds-notice__title` for the bold lead-in. `.ds-noticerow` stacks notices.\n- `.ds-pagination`: one joined group of bordered `.ds-pagination__item` cells holding `.ds-pagination__link`; `is-current` is filled with the button colour, `is-disabled` is grey.\n- `.ds-breadcrumb`: 13px trail of `.ds-breadcrumb__item` separated by slashes, links are `.ds-breadcrumb__link`, the last item is `.ds-breadcrumb__current`. Inside the page header it takes the header's text colour.\n- `.ds-dialog`: dimmed block (`--color-overlay`) centring a flat `.ds-dialog__box` with `.ds-dialog__head` (`.ds-dialog__title`, `.ds-dialog__close`) above a 1px rule, `.ds-dialog__body` and an off-white `.ds-dialog__actions` strip with the buttons at the right.\n- `.ds-empty`: centred message in a 2px dashed outline: `.ds-empty__chip` (a grey disc with a long-shadow icon), `.ds-empty__title`, `.ds-empty__text` and one button.\n- `.ds-footer`: one centred stack on `--fill-inverse`: `.ds-footer__brand`, a `.ds-footer__links` row of `.ds-footer__link`, a `.ds-footer__social` row of round `.ds-footer__chip` outlines with a `.ds-footer__glyph`, and the `.ds-footer__base` line above a faint rule.\n- `.ds-menu`: a drop-down under a navigation item, written as `<details>`: `.ds-menu__toggle` is the `<summary>`, set like the navigation links with a small chevron after it, and `.ds-menu__list` holds `.ds-menu__item` links in a flat `--fill-panel` box with a `--border-width` border, `--radius-panel` corners and `--shadow-dialog`. Here it is the last item of the left navigation, \"More\", and holds the settings and the other secondary pages; its toggle carries the current mark (`is-current`) when one of them is showing. In a window under 960px the list spans the row of links.\n- `.ds-accordion`: sections that open and close, each a `<details class=\"ds-accordion__item\">` with `.ds-accordion__head` (the `<summary>`, in the heading font, with a plus in `--color-link` at the right that becomes a minus when open) and `.ds-accordion__body`. Items are divided by rules; there are no boxes or fills. Use it under the plans for the questions asked before signing up; `.ds-plans + .ds-accordion` is centred at the quote's width.\n- `.ds-tooltip`: a term with a dotted underline that shows `.ds-tooltip__tip` above it on hover or focus (give the trigger `tabindex=\"0\"`); `is-open` shows it statically and `--end` hangs the tip from the trigger's right edge. The tip is a small flat box on `--fill-inverse` with `--color-inverse-text` at `--text-small`, `--radius-control` corners and a square pointer. Use it to explain one word of a plan or a figure. Never put it inside `.ds-table__wrap`, which would clip it.\n- `.ds-switch`: an on/off control drawn over a checkbox: a `<label>` holding `.ds-switch__input`, `.ds-switch__track` and `.ds-switch__label`. The track is a flat shape `--size-switch` wide with `--radius-pill` ends in a 30% tint of `--color-text`; switched on it takes `--fill-button` and the `--size-knob` knob (in `--color-button-text`) moves to the right. States `is-on`, `is-focus`, `is-disabled`; `--end` puts the label left and the track at the right edge. Use it for settings that apply at once, such as reminders in a side panel.\n- `.ds-switchlist`: a column of `.ds-switch--end` rows divided by rules, for a short group of settings.\n- `.ds-progress`: a thin flat bar: `.ds-progress__head` with the label and `.ds-progress__value` at the right, then a `<progress class=\"ds-progress__bar\">` one `--space-2` high, `--fill-button` on a `--color-border` track with `--radius-pill` ends; `--success` and `--warning` fill it in the status colours. No stripes and no animation. Use it without a head under a `.ds-panel__figure` to show how much of a list is done.\n- `.ds-avatar`: a person or account drawn as a flat disc `--size-avatar` across with two initials, `--color-accent-text` on `--fill-accent`; `--2` uses the button colours, `--3` is `--color-heading` on `--color-surface-strong`; `--small` is the size for a table row, set before the name. Use it in `.ds-quote__by` and beside the names in a table.\n- `.ds-carousel`: slides of which one shows at a time: hidden radio buttons `.ds-carousel__pick` come first, then `.ds-carousel__slides` holding up to four `.ds-carousel__slide`, then `.ds-carousel__dots` with one `<label class=\"ds-carousel__dot\">` per radio. The checked radio shows its slide and its dot at full strength; the other dots are the text colour at 30% opacity. It turns without script and does not move on its own. Here it is the `.ds-quote`: each slide is a `.ds-quote__text` with its `.ds-quote__by`, centred, with the dots beneath.\n\n## Never\n\n- `block-gap <= 90px`: the largest space between blocks is the 90px band padding.\n- `content-width <= 1140px`: content stays in the centred column while strips run edge to edge.\n- `font-weight <= 600`: headings are regular; 600 is only for labels and small titles.\n- `font-size >= 12px`: meta text and tags are the smallest text.\n- `font-size <= 38px`: the first tile's title is the largest text.\n- `font-families <= 2`: one sans-serif family, plus monospace for code.\n- `line-height <= 1.5`: body text is set at 1.5.\n- `letter-spacing = 0`: text is not tracked.\n- `uppercase-text <= 0%`: navigation, buttons and headings are in sentence case.\n- `underlined-links <= 0%`: no reference underlines links.\n- `border-radius <= 9px`: 2px on controls, 3px on cards, 5px on the banner; the 9px badge is the roundest box.\n- `box-shadow-blur <= 0px`: the frames around cards, controls and the dialog are flat rings.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 0%`: every background is one solid colour.\n- `border-width <= 3px`: rules are 1px; 3px marks the current item.\n- `animation = none`: nothing moves by itself.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new home section is a `.ds-band` with a centred `.ds-band__head`; a new feature is another `.ds-grid__cell` with a chip whose icon is a white silhouette plus one `.ds-shade` path running at 45 degrees to the lower right edge of the chip. A new box is a `.ds-panel--plain` (1px border, title strip) and takes `--shadow-panel`, which is none here. On an inner page, new views go behind a tab in the page header and new groups of links into the `.ds-sidebar` on the right. Text goes on `--color-fill-1`, the bar-alt strip and the inverse fill only; the other fills take icons. New actions are always `--color-button`, or `.ds-button--inverse` on a fill. Spacing comes from the `--space-*` scale, and any one-off shade is a `color-mix()` of tokens noted next to the rule.\n",
    "components.css": ":root {\n  --size-page: 1140px;\n  --size-nav: 70px;\n  --size-sidebar: 300px;\n  --size-measure: 480px;\n  --size-disc: 300px;\n  --size-chip: 60px;\n  --size-phone: 250px;\n  --size-screen: 400px;\n  --size-avatar: 50px;\n  --size-dialog: 440px;\n  --space-1: 5px;\n  --space-2: 10px;\n  --space-3: 15px;\n  --space-4: 20px;\n  --space-5: 30px;\n  --space-6: 60px;\n  --space-7: 90px;\n  --size-switch: 46px;\n  --size-knob: 19px;\n  --size-menu: 220px;\n}\n\n/* shell */\n.ds-page {\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* views: one screen of the example site shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* band: a full-width strip with a centred column; headings in a band are centred */\n.ds-band {\n  background: var(--color-canvas);\n  padding: var(--space-7) var(--space-5);\n}\n.ds-band--alt {\n  background: var(--color-surface-alt);\n}\n.ds-band--compact {\n  padding-top: var(--space-6);\n  padding-bottom: var(--space-6);\n}\n.ds-band__inner {\n  max-width: var(--size-page);\n  margin: 0 auto;\n}\n.ds-band__head {\n  max-width: calc(var(--size-measure) + var(--size-sidebar));\n  margin: 0 auto var(--space-6);\n  text-align: center;\n}\n.ds-band__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-band__lead {\n  margin: 0;\n  font-size: var(--text-large);\n}\n.ds-cols {\n  display: flex;\n  gap: var(--space-6);\n  align-items: flex-start;\n}\n.ds-cols--tight {\n  gap: var(--space-5);\n}\n.ds-cols__main {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-cols__side {\n  flex: 0 0 var(--size-sidebar);\n  min-width: 0;\n}\n.ds-cols__wide {\n  flex: 7 1 0;\n  min-width: 0;\n}\n.ds-cols__narrow {\n  flex: 5 1 0;\n  min-width: 0;\n}\n.ds-cols__half {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n}\n\n/* nav: wordmark in the middle of the bar, links to its left, account links and a button to its right */\n.ds-nav {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  padding: 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__inner {\n  max-width: var(--size-page);\n  min-height: var(--size-nav);\n  margin: 0 auto;\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  align-items: stretch;\n  gap: var(--space-5);\n}\n.ds-nav__links {\n  display: flex;\n  align-items: stretch;\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__links--end {\n  justify-content: flex-end;\n  align-items: center;\n}\n.ds-nav__entry {\n  display: flex;\n  align-items: stretch;\n}\n.ds-nav__links--end .ds-nav__entry {\n  align-items: center;\n}\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  min-height: var(--size-nav);\n  color: var(--color-bar-text);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  border-top: var(--border-width-strong) var(--border-style) transparent;\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  color: var(--color-link);\n}\n.ds-nav__link.is-current {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n/* the current view marks its navigation item; a single handover marks Handovers */\n.ds-page:not(:has(.ds-view:target)) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#home\"] {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-page:has(#home:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#home\"] {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-page:has(#news:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#news\"] {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-page:has(#handovers:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#handovers\"] {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-page:has(#handover:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#handovers\"] {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-page:has(#settings:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#settings\"] {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--space-5);\n  height: var(--space-5);\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 80%;\n  height: 80%;\n}\n.ds-brand__name {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n\n/* hero: two flat halves edge to edge; copy and sign-up on the fill, a long-shadow emblem on its darker shade */\n.ds-hero {\n  position: relative;\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  padding: 0 var(--space-5);\n  overflow: hidden;\n}\n.ds-hero::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 58%;\n  right: 0;\n  background: color-mix(in srgb, var(--color-inverse) 18%, transparent);\n}\n.ds-hero__inner {\n  position: relative;\n  max-width: var(--size-page);\n  margin: 0 auto;\n  display: flex;\n  align-items: center;\n}\n.ds-hero__copy {\n  flex: 0 0 58%;\n  min-width: 0;\n  padding: var(--space-7) var(--space-6) var(--space-7) 0;\n}\n.ds-hero__kicker {\n  display: inline-block;\n  margin: 0 0 var(--space-3);\n  padding: var(--space-1) var(--space-3);\n  background: color-mix(in srgb, var(--color-inverse) 18%, transparent);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-3);\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-wrap: balance;\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-5);\n  max-width: 46ch;\n  font-size: var(--text-large);\n  opacity: 0.85;\n}\n.ds-hero__side {\n  flex: 1 1 0;\n  min-width: 0;\n  display: flex;\n  justify-content: center;\n  padding: var(--space-6) 0 var(--space-6) var(--space-6);\n}\n.ds-hero__disc {\n  width: var(--size-disc);\n  height: auto;\n  max-width: 100%;\n  aspect-ratio: 1 / 1;\n  background: var(--color-fill-4);\n  color: var(--color-inverse-text);\n  border-radius: 50%;\n  overflow: hidden;\n}\n.ds-hero__art {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-shade {\n  color: var(--color-overlay);\n}\n.ds-tint {\n  color: var(--color-fill-1);\n}\n\n/* sign-up row: one field and one button, used in the hero */\n.ds-signup {\n  display: flex;\n  gap: var(--space-2);\n  max-width: var(--size-measure);\n}\n.ds-signup__input {\n  flex: 1 1 0;\n  min-width: 0;\n  margin: 0;\n  box-shadow: var(--shadow-control);\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n}\n.ds-signup__input::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-signup__input:focus,\n.ds-signup__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-signup__note {\n  margin: var(--space-3) 0 0;\n  font-size: var(--text-small);\n  opacity: 0.85;\n}\n\n/* stats: a strip of centred figures directly under the hero */\n.ds-stat {\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  padding: var(--space-5);\n}\n.ds-stat__inner {\n  max-width: var(--size-page);\n  margin: 0 auto;\n  padding: 0;\n  list-style: none;\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: var(--space-5);\n}\n.ds-stat__item {\n  min-width: 0;\n  text-align: center;\n}\n.ds-stat__figure {\n  display: block;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--display-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__label {\n  display: block;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  opacity: 0.8;\n}\n\n/* grid: a flat phone in the middle, two feature cells on each side pointing at it */\n.ds-grid {\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  align-items: center;\n  gap: var(--space-6);\n}\n.ds-grid__col {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-6);\n  min-width: 0;\n}\n.ds-grid__cell {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-4);\n}\n.ds-grid__col--start .ds-grid__cell {\n  flex-direction: row-reverse;\n  text-align: right;\n}\n.ds-grid__chip {\n  flex: 0 0 var(--size-chip);\n  width: var(--size-chip);\n  height: var(--size-chip);\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-panel);\n  overflow: hidden;\n}\n.ds-grid__chip--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__chip--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__chip--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__icon {\n  display: block;\n  width: 100%;\n  height: 100%;\n  background: color-mix(in srgb, var(--color-inverse) 40%, transparent);\n  border-radius: 50%;\n}\n.ds-grid__body {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-grid__title {\n  margin: 0 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-grid__text {\n  margin: 0;\n}\n\n/* phone: a flat device drawn with blocks; the screen shows a list */\n.ds-phone {\n  width: var(--size-phone);\n  padding: var(--space-6) var(--space-3);\n  background: var(--color-inverse);\n  border-radius: calc(var(--radius-panel) * 4);\n}\n.ds-phone__screen {\n  display: flex;\n  flex-direction: column;\n  height: var(--size-screen);\n  background: var(--color-surface);\n  border-radius: var(--radius-page);\n  overflow: hidden;\n}\n.ds-phone__bar {\n  height: var(--space-6);\n  background: var(--color-fill-1);\n}\n.ds-phone__row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-phone__dot {\n  flex: 0 0 var(--space-4);\n  height: var(--space-4);\n  background: var(--color-fill-1);\n  border-radius: 50%;\n}\n.ds-phone__dot--2 {\n  background: var(--color-fill-2);\n}\n.ds-phone__dot--3 {\n  background: var(--color-fill-3);\n}\n.ds-phone__dot--4 {\n  background: var(--color-fill-4);\n}\n.ds-phone__lines {\n  flex: 1 1 0;\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n}\n.ds-phone__line {\n  height: var(--space-2);\n  background: var(--color-surface-strong);\n}\n.ds-phone__line--short {\n  width: 55%;\n  height: var(--space-1);\n}\n.ds-phone__action {\n  margin: auto var(--space-3) var(--space-3);\n  height: var(--space-5);\n  background: var(--fill-button);\n  border-radius: var(--radius-control);\n}\n\n/* page header: the head of an inner page, a fill strip with the breadcrumb, the title and the tabs standing on its lower edge */\n.ds-page-header {\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  padding: var(--space-4) var(--space-5) 0;\n}\n.ds-page-header__inner {\n  max-width: var(--size-page);\n  margin: 0 auto;\n}\n.ds-page-header--plain {\n  padding-bottom: var(--space-1);\n}\n.ds-page-header__row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  padding: var(--space-4) 0 var(--space-5);\n}\n.ds-page-header__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__text {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-large);\n  opacity: 0.85;\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 0 0 auto;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* typography */\n.ds-prose {\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  font-size: var(--text-h2);\n  margin-top: var(--space-5);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n  margin-top: var(--space-4);\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-prose p {\n  margin: 0 0 var(--space-3);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-3);\n  padding-left: var(--space-4);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-radius: var(--radius-control);\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose__lead {\n  font-size: var(--text-large);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-link);\n}\n.ds-linkrow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-4);\n}\n\n/* buttons */\n.ds-button {\n  display: inline-block;\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-align: center;\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width-strong);\n}\n.ds-button--secondary {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: currentColor;\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--color-surface-strong);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--secondary:active,\n.ds-button--secondary.is-active {\n  background: var(--color-surface-strong);\n  color: var(--color-link-active);\n}\n.ds-button--danger {\n  background: var(--color-danger);\n  color: var(--color-button-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: color-mix(in srgb, var(--color-danger) 85%, var(--color-inverse-text));\n  color: var(--color-button-hover-text);\n}\n.ds-button--danger:active,\n.ds-button--danger.is-active {\n  background: color-mix(in srgb, var(--color-danger) 85%, var(--color-inverse));\n}\n.ds-button--inverse {\n  background: var(--color-inverse-text);\n  color: var(--color-fill-1);\n}\n.ds-button--inverse:hover,\n.ds-button--inverse.is-hover {\n  background: color-mix(in srgb, var(--color-inverse-text) 85%, transparent);\n  color: var(--color-fill-1);\n}\n.ds-button--ghost {\n  background: transparent;\n  color: var(--color-inverse-text);\n  border-color: color-mix(in srgb, var(--color-inverse-text) 55%, transparent);\n  box-shadow: none;\n}\n.ds-button--ghost:hover,\n.ds-button--ghost.is-hover {\n  background: transparent;\n  color: var(--color-inverse-text);\n  border-color: var(--color-inverse-text);\n}\n.ds-button--large {\n  padding: var(--space-3) var(--space-5);\n  font-size: var(--text-base);\n}\n.ds-button--small {\n  padding: var(--space-1) var(--space-3);\n  font-size: var(--text-small);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  border-color: transparent;\n  box-shadow: none;\n  cursor: default;\n}\n.ds-buttonrow {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form: stacked labels, two fields to a row, inside a panel */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form__row {\n  display: flex;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-form__label {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  transition: var(--transition);\n}\n.ds-form__textarea {\n  min-height: var(--space-7);\n  resize: vertical;\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-form__input:focus,\n.ds-form__select:focus,\n.ds-form__textarea:focus,\n.ds-form__input.is-focus {\n  border-color: var(--color-focus);\n  outline: 0;\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-form__checkbox {\n  margin: 0;\n  accent-color: var(--color-button);\n}\n.ds-form__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding-top: var(--space-3);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* table: a boxed table with a filled head and rules between rows */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 0;\n  background: var(--color-surface);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-3);\n  text-align: left;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table thead th {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-top: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n}\n.ds-table thead th:first-child {\n  border-top-left-radius: var(--radius-panel);\n}\n.ds-table thead th:last-child {\n  border-top-right-radius: var(--radius-panel);\n}\n.ds-table tbody th {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-table tbody tr:nth-child(even) td,\n.ds-table tbody tr:nth-child(even) th {\n  background: var(--color-surface-alt);\n}\n.ds-table tbody tr:last-child th: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  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__wrap {\n  overflow-x: auto;\n}\n.ds-table__link {\n  color: inherit;\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-table__link:hover,\n.ds-table__link.is-hover {\n  color: var(--color-link);\n}\n.ds-tablefoot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  margin-top: var(--space-3);\n}\n.ds-tablefoot__note {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* list: a timeline, a strong rule down the left with one dot per entry */\n.ds-list {\n  margin: 0;\n  padding: 0 0 0 var(--space-5);\n  list-style: none;\n  border-left: var(--border-width-strong) var(--border-style) var(--color-border);\n}\n.ds-list__item {\n  position: relative;\n  padding: 0 0 var(--space-5);\n}\n.ds-list__item:last-child {\n  padding-bottom: 0;\n}\n.ds-list__item::before {\n  content: \"\";\n  position: absolute;\n  top: var(--space-1);\n  left: calc((var(--space-5) + var(--space-3) / 2 + var(--border-width-strong) / 2) * -1);\n  width: var(--space-3);\n  height: var(--space-3);\n  background: var(--fill-accent);\n  border-radius: 50%;\n}\n.ds-list__meta {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n}\n.ds-list__title {\n  display: block;\n  margin: var(--space-1) 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__text {\n  margin: 0;\n}\n\n/* panel: a plan card; three stand side by side and the middle one is featured */\n.ds-plans {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: var(--space-5);\n  align-items: center;\n}\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  text-align: center;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-radius: calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width)) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-panel__body {\n  padding: var(--space-5);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__figure {\n  display: block;\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}\n.ds-panel__unit {\n  display: block;\n  margin-bottom: var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-panel__rows {\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n}\n.ds-panel__line {\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-panel__line:last-child {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-panel--featured {\n  border-color: var(--color-accent);\n}\n.ds-panel--featured .ds-panel__title {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  padding-top: var(--space-4);\n  padding-bottom: var(--space-4);\n}\n.ds-panel--featured .ds-panel__body {\n  padding-top: var(--space-6);\n  padding-bottom: var(--space-6);\n}\n.ds-panel--plain {\n  text-align: left;\n}\n.ds-panel--plain .ds-panel__title {\n  font-size: var(--text-base);\n}\n.ds-panel--plain .ds-panel__body {\n  padding: var(--space-4);\n}\n\n/* quote: one centred testimonial */\n.ds-quote {\n  max-width: calc(var(--size-measure) + var(--size-sidebar));\n  margin: 0 auto;\n  text-align: center;\n}\n.ds-quote__text {\n  margin: 0 0 var(--space-5);\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}\n.ds-quote__by {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  text-align: left;\n}\n.ds-quote__name {\n  display: block;\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-quote__role {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* tabs: folder tabs on a rule; on the page header they stand on the lower edge of the fill */\n.ds-tabs {\n  display: flex;\n  gap: var(--space-1);\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-tabs__tab {\n  display: block;\n  margin-bottom: calc(var(--border-width) * -1);\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-panel) var(--radius-panel) 0 0;\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-tabs__tab.is-current {\n  background: var(--color-canvas);\n  color: var(--color-heading);\n  border-color: var(--color-border);\n  border-bottom-color: var(--color-canvas);\n}\n.ds-tabs--onfill {\n  margin-bottom: 0;\n  border-bottom: 0;\n}\n.ds-tabs--onfill .ds-tabs__tab {\n  margin-bottom: 0;\n  color: var(--color-inverse-text);\n  border-color: transparent;\n}\n.ds-tabs--onfill .ds-tabs__tab:hover,\n.ds-tabs--onfill .ds-tabs__tab.is-hover {\n  background: color-mix(in srgb, var(--color-inverse) 18%, transparent);\n}\n.ds-tabs--onfill .ds-tabs__tab.is-current {\n  background: var(--color-canvas);\n  color: var(--color-heading);\n  border-color: var(--color-canvas);\n}\n.ds-tabs__count {\n  margin-left: var(--space-1);\n  opacity: 0.7;\n}\n\n/* badge */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-2);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  vertical-align: middle;\n  white-space: nowrap;\n}\n.ds-badge--alt {\n  background: color-mix(in srgb, var(--color-accent-alt) 30%, var(--color-surface));\n  color: var(--color-heading);\n  outline: var(--border-width) var(--border-style) var(--color-accent-alt);\n  outline-offset: calc(var(--border-width) * -1);\n}\n.ds-badge--quiet {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n}\n.ds-badge--success {\n  background: var(--color-success);\n  color: var(--color-accent-text);\n}\n.ds-badge--warning {\n  background: var(--color-warning);\n  color: var(--color-accent-text);\n}\n.ds-badge--danger {\n  background: var(--color-danger);\n  color: var(--color-accent-text);\n}\n.ds-badgerow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* sidebar: a boxed list group in the right column of an inner page */\n.ds-sidebar {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  font-size: var(--text-ui);\n}\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-radius: calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width)) 0 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-2) var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-left: var(--border-width-strong) var(--border-style) transparent;\n}\n.ds-sidebar__item.is-current {\n  background: var(--color-surface-alt);\n  border-left-color: var(--color-accent);\n}\n.ds-sidebar__item.is-current .ds-link {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* notice: a flat strip with a strong left edge */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-notice-text);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border-left-color: var(--color-danger);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-noticerow {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n\n/* pagination: one joined group of bordered cells */\n.ds-pagination {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__item + .ds-pagination__item {\n  margin-left: calc(var(--border-width) * -1);\n}\n.ds-pagination__link {\n  display: block;\n  min-width: var(--space-5);\n  padding: var(--space-1) var(--space-3);\n  background: var(--color-surface);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-pagination__item:first-child .ds-pagination__link {\n  border-radius: var(--radius-control) 0 0 var(--radius-control);\n}\n.ds-pagination__item:last-child .ds-pagination__link {\n  border-radius: 0 var(--radius-control) var(--radius-control) 0;\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-pagination__link.is-current {\n  position: relative;\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border-color: var(--color-button);\n  font-weight: var(--weight-ui);\n}\n.ds-pagination__link.is-disabled {\n  background: var(--color-surface);\n  color: var(--color-disabled-text);\n}\n\n/* breadcrumb: slash-separated; inside the page header it takes the header's text colour */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  opacity: 0.6;\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  color: var(--color-link);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n}\n.ds-page-header .ds-breadcrumb,\n.ds-page-header .ds-breadcrumb__current {\n  color: inherit;\n}\n.ds-page-header .ds-breadcrumb__link,\n.ds-page-header .ds-breadcrumb__link:hover {\n  color: inherit;\n  opacity: 0.8;\n}\n\n/* dialog: a flat box with a title strip on a dimmed block */\n.ds-dialog {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-6) var(--space-4);\n  background: var(--color-overlay);\n  border-radius: var(--radius-panel);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-dialog__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-dialog__close {\n  color: var(--color-text-muted);\n  font-size: var(--text-h2);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-dialog__close::before {\n  content: \"\";\n  display: inline-block;\n  width: calc(var(--text-h2) * 0.6);\n  height: calc(var(--text-h2) * 0.6);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  rotate: 45deg;\n  vertical-align: middle;\n}\n.ds-dialog__body {\n  padding: var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  border-radius: 0 0 var(--radius-panel) var(--radius-panel);\n}\n\n/* empty state */\n.ds-empty {\n  padding: var(--space-6) var(--space-4);\n  background: var(--color-surface);\n  border: var(--border-width-strong) dashed var(--color-border);\n  border-radius: var(--radius-panel);\n  text-align: center;\n}\n.ds-empty__chip {\n  width: var(--size-chip);\n  height: var(--size-chip);\n  margin: 0 auto var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-surface);\n  border-radius: 50%;\n  overflow: hidden;\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-4);\n}\n\n/* footer: one centred stack on the inverse fill */\n.ds-footer {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  padding: var(--space-6) var(--space-5) var(--space-5);\n  font-size: var(--text-ui);\n  text-align: center;\n}\n.ds-footer__inner {\n  max-width: var(--size-page);\n  margin: 0 auto;\n}\n.ds-footer__brand {\n  display: block;\n  margin: 0 0 var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-2) var(--space-5);\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  opacity: 0.75;\n  transition: var(--transition);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  opacity: 1;\n}\n.ds-footer__social {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__chip {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: calc(var(--space-5) + var(--space-2));\n  height: calc(var(--space-5) + var(--space-2));\n  color: var(--color-inverse-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 40%, transparent);\n  border-radius: 50%;\n}\n.ds-footer__glyph {\n  width: var(--space-4);\n  height: var(--space-4);\n}\n.ds-footer__base {\n  margin: 0;\n  padding-top: var(--space-4);\n  border-top: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 16%, transparent);\n  font-size: var(--text-small);\n  opacity: 0.75;\n}\n\n/* menu: a drop-down under a navigation item, a <details>; a flat list in a border, opened by its toggle */\n.ds-menu {\n  position: relative;\n}\n.ds-menu {\n  display: flex;\n  align-items: stretch;\n}\n.ds-menu__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-nav);\n  color: var(--color-bar-text);\n  border-top: var(--border-width-strong) var(--border-style) transparent;\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-menu__toggle:hover,\n.ds-menu__toggle.is-hover,\n.ds-menu[open] > .ds-menu__toggle {\n  color: var(--color-link);\n}\n/* the settings view lies under the menu, so it marks the toggle */\n.ds-menu__toggle.is-current,\n.ds-page:has(#settings:target) .ds-menu__toggle {\n  color: var(--color-link);\n  border-top-color: var(--color-link);\n}\n.ds-menu__toggle::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__toggle::after {\n  content: \"\";\n  flex: 0 0 auto;\n  width: calc(var(--space-1) + var(--border-width));\n  height: calc(var(--space-1) + var(--border-width));\n  margin-top: calc(0 - var(--space-1) / 2);\n  border-right: var(--border-width) var(--border-style) currentColor;\n  border-bottom: var(--border-width) var(--border-style) currentColor;\n  transform: rotate(45deg);\n}\n.ds-menu__toggle:focus-visible,\n.ds-menu__toggle.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 5;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  text-align: left;\n}\n.ds-menu__item {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-menu__item:hover,\n.ds-menu__item.is-hover {\n  background: var(--color-surface-alt);\n  color: var(--color-link);\n}\n.ds-menu__item:focus-visible,\n.ds-menu__item.is-focus {\n  outline: var(--focus-ring);\n}\n\n/* accordion: sections that open and close, divided by rules; a plus opens, a minus closes */\n.ds-accordion {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  flex: none;\n  align-self: center;\n  display: inline-block;\n  width: calc(var(--space-3) - var(--space-2) / 4);\n  height: calc(var(--space-3) - var(--space-2) / 4);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  color: var(--color-link);\n}\n.ds-accordion__item[open] > .ds-accordion__head::after {\n  clip-path: inset(calc(50% - var(--space-2) / 8) 0);\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-link);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: 72ch;\n  padding: 0 0 var(--space-4);\n  color: var(--color-text);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* tooltip: a small flat box above its trigger, shown on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-block;\n  border-bottom: var(--border-width) dotted currentColor;\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 6;\n  display: none;\n  width: max-content;\n  max-width: min(32ch, 70vw);\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  letter-spacing: 0;\n  text-align: left;\n  text-transform: none;\n  white-space: normal;\n}\n.ds-tooltip__tip::after {\n  content: \"\";\n  position: absolute;\n  top: calc(100% - var(--space-1));\n  left: var(--space-3);\n  width: var(--space-2);\n  height: var(--space-2);\n  background: var(--fill-inverse);\n  transform: rotate(45deg);\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n\n/* switch: an on/off control over a checkbox; the knob slides to the right and the track takes the button fill */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  flex: 0 0 auto;\n  width: var(--size-switch);\n  height: calc(var(--size-switch) / 2);\n  background: color-mix(in srgb, var(--color-text) 30%, transparent);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  left: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  width: var(--size-knob);\n  height: var(--size-knob);\n  background: var(--color-button-text);\n  border-radius: var(--radius-pill);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch.is-on .ds-switch__track {\n  background: var(--fill-button);\n}\n.ds-switch__input:checked + .ds-switch__track::after,\n.ds-switch.is-on .ds-switch__track::after {\n  left: calc(var(--size-switch) / 2 + (var(--size-switch) / 2 - var(--size-knob)) / 2);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch.is-focus .ds-switch__track {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width);\n}\n.ds-switch__input:disabled + .ds-switch__track,\n.ds-switch.is-disabled .ds-switch__track {\n  background: var(--color-disabled);\n}\n.ds-switch__label {\n  min-width: 0;\n}\n.ds-switch--end {\n  display: flex;\n  flex-direction: row-reverse;\n  justify-content: space-between;\n}\n\n.ds-switchlist {\n  display: flex;\n  flex-direction: column;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-switchlist .ds-switch {\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* progress: a thin flat bar on a track; no stripes, no gloss, no movement */\n.ds-progress {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-progress__head {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-2);\n  color: var(--color-text);\n}\n.ds-progress__value {\n  color: var(--color-text-muted);\n  font-variant-numeric: tabular-nums;\n}\n.ds-progress__bar {\n  display: block;\n  width: 100%;\n  height: var(--space-2);\n  appearance: none;\n  overflow: hidden;\n  background: var(--color-border);\n  border: 0;\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar::-webkit-progress-bar {\n  background: transparent;\n}\n.ds-progress__bar::-webkit-progress-value {\n  background: var(--fill-button);\n}\n.ds-progress__bar::-moz-progress-bar {\n  background: var(--fill-button);\n}\n.ds-progress__bar--success::-webkit-progress-value {\n  background: var(--color-success);\n}\n.ds-progress__bar--success::-moz-progress-bar {\n  background: var(--color-success);\n}\n.ds-progress__bar--warning::-moz-progress-bar {\n  background: var(--color-warning);\n}\n\n/* avatar: a flat disc with initials */\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-radius: 50%;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-avatar--2 {\n  background: var(--fill-button);\n  color: var(--color-button-text);\n}\n.ds-avatar--3 {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n\n.ds-avatar--small {\n  width: calc(var(--size-avatar) * 0.7);\n  height: calc(var(--size-avatar) * 0.7);\n  margin-right: var(--space-2);\n  font-size: var(--text-small);\n  vertical-align: middle;\n}\n\n/* carousel: one slide showing at a time; the dots are labels of hidden radio buttons, so it turns without script */\n.ds-carousel {\n  position: relative;\n}\n.ds-carousel__pick {\n  position: absolute;\n  margin: 0;\n  opacity: 0;\n  pointer-events: none;\n}\n.ds-carousel__slide {\n  display: none;\n  margin: 0;\n}\n.ds-carousel__pick:nth-of-type(1):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(1),\n.ds-carousel__pick:nth-of-type(2):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(2),\n.ds-carousel__pick:nth-of-type(3):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(3),\n.ds-carousel__pick:nth-of-type(4):checked ~ .ds-carousel__slides > .ds-carousel__slide:nth-child(4) {\n  display: block;\n}\n.ds-carousel__dots {\n  display: flex;\n  justify-content: center;\n  margin: var(--space-3) calc(0 - var(--space-2)) 0;\n}\n.ds-carousel__dot {\n  padding: var(--space-2);\n  cursor: pointer;\n}\n.ds-carousel__dot::before {\n  content: \"\";\n  display: block;\n  width: calc(var(--space-2) + var(--space-1));\n  height: calc(var(--space-2) + var(--space-1));\n  background: currentColor;\n  border-radius: 50%;\n  opacity: 0.3;\n  transition: var(--transition);\n}\n.ds-carousel__dot:hover::before,\n.ds-carousel__dot.is-hover::before {\n  opacity: 0.6;\n}\n.ds-carousel__pick:nth-of-type(1):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(1)::before,\n.ds-carousel__pick:nth-of-type(2):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(2)::before,\n.ds-carousel__pick:nth-of-type(3):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(3)::before,\n.ds-carousel__pick:nth-of-type(4):checked ~ .ds-carousel__dots > .ds-carousel__dot:nth-child(4)::before {\n  opacity: 1;\n}\n.ds-carousel__pick:focus-visible ~ .ds-carousel__dots {\n  outline: var(--focus-ring);\n}\n.ds-plans + .ds-accordion {\n  max-width: calc(var(--size-measure) + var(--size-sidebar));\n  margin: var(--space-6) auto 0;\n}\n.ds-panel__body .ds-progress {\n  margin: var(--space-3) 0;\n}\n\n/* medium and narrow windows: the bar becomes two rows (wordmark and account links, then the navigation),\n   the current item is marked under its text, the features stack under the phone */\n@media (max-width: 960px) {\n  .ds-nav {\n    padding: 0 var(--space-4);\n  }\n  .ds-nav__inner {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    gap: 0 var(--space-3);\n    min-height: 0;\n    padding-top: var(--space-2);\n  }\n  .ds-brand {\n    order: -1;\n  }\n  .ds-nav__links {\n    position: relative;\n    order: 2;\n    flex: 0 0 100%;\n    flex-wrap: wrap;\n    gap: 0 var(--space-4);\n  }\n  .ds-nav__links--end {\n    position: static;\n    order: 0;\n    flex: 0 0 auto;\n  }\n  .ds-nav__link,\n  .ds-menu__toggle {\n    min-height: calc(var(--size-nav) / 1.75);\n  }\n  .ds-nav__link.is-current,\n  .ds-page:not(:has(.ds-view:target)) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#home\"],\n  .ds-page:has(#home:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#home\"],\n  .ds-page:has(#news:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#news\"],\n  .ds-page:has(#handovers:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#handovers\"],\n  .ds-page:has(#handover:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#handovers\"],\n  .ds-page:has(#settings:target) .ds-nav__links:not(.ds-nav__links--end) .ds-nav__link[href=\"#settings\"],\n  .ds-menu__toggle.is-current,\n  .ds-page:has(#settings:target) .ds-menu__toggle {\n    border-top-color: transparent;\n    border-bottom-color: var(--color-link);\n  }\n  .ds-menu {\n    position: static;\n  }\n  .ds-menu__list {\n    right: 0;\n  }\n  .ds-grid {\n    grid-template-columns: 1fr;\n    gap: var(--space-5);\n  }\n  .ds-grid__col {\n    gap: var(--space-5);\n  }\n  .ds-grid__col--start .ds-grid__cell {\n    flex-direction: row;\n    text-align: left;\n  }\n  .ds-phone {\n    order: -1;\n    justify-self: center;\n  }\n}\n\n/* narrow windows: the bar wraps with the links under the brand, columns stack, the phone leads its feature cells, wide tables scroll inside their own box */\n@media (max-width: 760px) {\n  .ds-nav {\n    padding: 0 var(--space-3);\n  }\n  .ds-hero {\n    padding: 0 var(--space-3);\n  }\n  .ds-hero::before {\n    display: none;\n  }\n  .ds-hero__inner {\n    flex-direction: column;\n    align-items: stretch;\n  }\n  .ds-hero__copy {\n    flex: 0 0 auto;\n    padding: var(--space-6) 0 var(--space-5);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-hero__side {\n    flex: 0 0 auto;\n    padding: 0 0 var(--space-6);\n  }\n  .ds-hero__disc {\n    width: calc(var(--size-disc) / 1.5);\n    height: calc(var(--size-disc) / 1.5);\n  }\n  .ds-signup {\n    flex-wrap: wrap;\n  }\n  .ds-signup__input {\n    flex: 0 0 100%;\n  }\n  .ds-stat {\n    padding: var(--space-4) var(--space-3);\n  }\n  .ds-stat__inner {\n    grid-template-columns: 1fr 1fr;\n    gap: var(--space-4) var(--space-3);\n  }\n  .ds-stat__figure {\n    font-size: var(--text-h2);\n  }\n  .ds-band,\n  .ds-band--compact {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-band__head {\n    margin-bottom: var(--space-5);\n  }\n  .ds-grid {\n    grid-template-columns: 1fr;\n    gap: var(--space-5);\n  }\n  .ds-grid__col {\n    gap: var(--space-5);\n  }\n  .ds-grid__col--start .ds-grid__cell {\n    flex-direction: row;\n    text-align: left;\n  }\n  .ds-phone {\n    order: -1;\n    justify-self: center;\n  }\n  .ds-plans {\n    grid-template-columns: 1fr;\n  }\n  .ds-cols,\n  .ds-cols--tight {\n    flex-direction: column;\n    align-items: stretch;\n    gap: var(--space-5);\n  }\n  .ds-cols__main,\n  .ds-cols__side,\n  .ds-cols__wide,\n  .ds-cols__narrow,\n  .ds-cols__half {\n    flex: 0 0 auto;\n  }\n  .ds-page-header {\n    padding: var(--space-3) var(--space-3) 0;\n  }\n  .ds-page-header__row {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-3);\n    padding: var(--space-3) 0 var(--space-4);\n  }\n  .ds-page-header__copy {\n    flex: 0 0 auto;\n  }\n  .ds-tabs {\n    overflow-x: auto;\n  }\n  .ds-tabs__tab {\n    padding: var(--space-2) var(--space-3);\n    white-space: nowrap;\n  }\n  .ds-table {\n    min-width: 72ch;\n  }\n  .ds-form__row {\n    flex-direction: column;\n    gap: var(--space-3);\n  }\n  .ds-form__actions {\n    flex-wrap: wrap;\n  }\n  .ds-dialog {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-quote__text {\n    font-size: var(--text-h3);\n  }\n  .ds-footer {\n    padding: var(--space-5) var(--space-3) var(--space-4);\n  }\n  .ds-nav {\n    padding: 0 var(--space-3);\n  }\n  .ds-nav__links {\n    gap: 0 var(--space-3);\n  }\n  .ds-tooltip {\n    position: static;\n  }\n  .ds-tooltip__tip,\n  .ds-tooltip--end .ds-tooltip__tip {\n    right: var(--space-3);\n    bottom: auto;\n    left: var(--space-3);\n    width: auto;\n    max-width: none;\n    margin-top: var(--space-1);\n  }\n  .ds-tooltip__tip::after {\n    display: none;\n  }\n}\n\n/* medium windows: the links sit centred under the brand; on a phone they spread over the whole row */\n@media (max-width: 960px) {\n  .ds-nav__links:not(.ds-nav__links--end) {\n    justify-content: center;\n  }\n}\n@media (max-width: 760px) {\n  .ds-nav__links:not(.ds-nav__links--end) {\n    justify-content: space-between;\n    gap: 0 var(--space-2);\n  }\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: flat design app page specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__inner\">\n    <ul class=\"ds-nav__links\">\n      <li class=\"ds-nav__entry\"><a class=\"ds-nav__link\" href=\"#home\">Features</a></li>\n      <li class=\"ds-nav__entry\"><a class=\"ds-nav__link\" href=\"#news\">What's new</a></li>\n      <li class=\"ds-nav__entry\"><a class=\"ds-nav__link\" href=\"#handovers\">Handovers</a></li>\n      <li class=\"ds-nav__entry\">\n        <details class=\"ds-menu\">\n          <summary class=\"ds-menu__toggle\">More</summary>\n          <ul class=\"ds-menu__list\">\n            <li><a class=\"ds-menu__item\" href=\"#settings\">Settings</a></li>\n            <li><a class=\"ds-menu__item\" href=\"#handovers\">Sites</a></li>\n            <li><a class=\"ds-menu__item\" href=\"#handover\">The latest handover</a></li>\n            <li><a class=\"ds-menu__item\" href=\"#news\">Help and versions</a></li>\n          </ul>\n        </details>\n      </li>\n    </ul>\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\".3\"/><path d=\"M15.5 8.5L21.64 14.64A10 10 0 0 1 14.64 21.64L8.5 15.5Z\" opacity=\".35\"/><rect x=\"8.5\" y=\"8.5\" width=\"7\" height=\"7\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ul class=\"ds-nav__links ds-nav__links--end\">\n      <li class=\"ds-nav__entry\"><a class=\"ds-nav__link\" href=\"#handovers\">Sign in</a></li>\n      <li class=\"ds-nav__entry\"><a class=\"ds-button ds-button--small\" href=\"#home\">Get the app</a></li>\n    </ul>\n  </div>\n</header>\n\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <div class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-hero__inner\">\n      <div class=\"ds-hero__copy\">\n        <p class=\"ds-hero__kicker\">New: handovers on the lock screen</p>\n        <h1 class=\"ds-hero__title\">Hand the shift over in two minutes flat</h1>\n        <p class=\"ds-hero__lead\">chronoskin turns the scribbled note by the till into a shared checklist that the next shift opens on any phone.</p>\n        <form class=\"ds-signup\" action=\"#handovers\">\n          <input class=\"ds-signup__input\" type=\"text\" placeholder=\"Work email address\" aria-label=\"Work email address\">\n          <a class=\"ds-button ds-button--inverse ds-button--large\" href=\"#handovers\">Start for free</a>\n        </form>\n        <p class=\"ds-signup__note\">Free for teams of up to five. No card needed.</p>\n      </div>\n      <div class=\"ds-hero__side\" aria-hidden=\"true\">\n        <div class=\"ds-hero__disc\">\n          <svg class=\"ds-hero__art\" viewBox=\"0 0 200 200\">\n            <path class=\"ds-shade\" d=\"M138 46l100 100v104h-76L62 150z\" fill=\"currentColor\"/>\n            <rect x=\"62\" y=\"46\" width=\"76\" height=\"104\" rx=\"4\" fill=\"currentColor\"/>\n            <g class=\"ds-tint\">\n              <rect x=\"74\" y=\"62\" width=\"14\" height=\"14\" fill=\"currentColor\"/>\n              <rect x=\"74\" y=\"88\" width=\"14\" height=\"14\" fill=\"currentColor\"/>\n            </g>\n            <g class=\"ds-shade\">\n              <rect x=\"74\" y=\"114\" width=\"14\" height=\"14\" fill=\"currentColor\"/>\n              <rect x=\"96\" y=\"66\" width=\"30\" height=\"6\" fill=\"currentColor\"/>\n              <rect x=\"96\" y=\"92\" width=\"22\" height=\"6\" fill=\"currentColor\"/>\n              <rect x=\"96\" y=\"118\" width=\"30\" height=\"6\" fill=\"currentColor\"/>\n            </g>\n          </svg>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-stat\" data-component=\"stats\">\n    <ul class=\"ds-stat__inner\">\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">4,180</span><span class=\"ds-stat__label\">Teams this month</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">96,300</span><span class=\"ds-stat__label\">Handovers written</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">1 min 52 s</span><span class=\"ds-stat__label\">Median handover</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">4.8 of 5</span><span class=\"ds-stat__label\">Average store rating</span></li>\n    </ul>\n  </div>\n\n  <div class=\"ds-band\">\n    <div class=\"ds-band__inner\">\n      <div class=\"ds-band__head\">\n        <h2 class=\"ds-band__title\">One list that every shift can trust</h2>\n        <p class=\"ds-band__lead\">Four small tools around a single screen. Nothing to set up, nothing to learn.</p>\n      </div>\n      <div class=\"ds-grid\" data-component=\"grid\">\n        <div class=\"ds-grid__col ds-grid__col--start\">\n          <div class=\"ds-grid__cell\">\n            <div class=\"ds-grid__chip\">\n              <svg class=\"ds-grid__icon\" viewBox=\"0 0 60 60\" aria-hidden=\"true\"><path class=\"ds-shade\" d=\"M40 15l50 50v30H70L20 45z\" fill=\"currentColor\"/><rect x=\"20\" y=\"15\" width=\"20\" height=\"30\" fill=\"currentColor\"/><g class=\"ds-shade\"><rect x=\"24\" y=\"21\" width=\"12\" height=\"3\" fill=\"currentColor\"/><rect x=\"24\" y=\"28\" width=\"12\" height=\"3\" fill=\"currentColor\"/><rect x=\"24\" y=\"35\" width=\"8\" height=\"3\" fill=\"currentColor\"/></g></svg>\n            </div>\n            <div class=\"ds-grid__body\">\n              <h3 class=\"ds-grid__title\">Checklists that carry over</h3>\n              <p class=\"ds-grid__text\">Anything left unticked moves to the next shift by itself, with a note of who left it.</p>\n            </div>\n          </div>\n          <div class=\"ds-grid__cell\">\n            <div class=\"ds-grid__chip ds-grid__chip--2\">\n              <svg class=\"ds-grid__icon\" viewBox=\"0 0 60 60\" aria-hidden=\"true\"><path class=\"ds-shade\" d=\"M30 30l50 50\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"26\"/><circle cx=\"30\" cy=\"30\" r=\"13\" fill=\"currentColor\"/><path class=\"ds-shade\" d=\"M30 22v9l6 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"/></svg>\n            </div>\n            <div class=\"ds-grid__body\">\n              <h3 class=\"ds-grid__title\">Reminders at the right hour</h3>\n              <p class=\"ds-grid__text\">Set the fridge check for 4 pm once and the afternoon shift is asked every day.</p>\n            </div>\n          </div>\n        </div>\n        <div class=\"ds-phone\" aria-hidden=\"true\">\n          <div class=\"ds-phone__screen\">\n            <div class=\"ds-phone__bar\"></div>\n            <div class=\"ds-phone__row\"><span class=\"ds-phone__dot\"></span><span class=\"ds-phone__lines\"><span class=\"ds-phone__line\"></span><span class=\"ds-phone__line ds-phone__line--short\"></span></span></div>\n            <div class=\"ds-phone__row\"><span class=\"ds-phone__dot ds-phone__dot--2\"></span><span class=\"ds-phone__lines\"><span class=\"ds-phone__line\"></span><span class=\"ds-phone__line ds-phone__line--short\"></span></span></div>\n            <div class=\"ds-phone__row\"><span class=\"ds-phone__dot ds-phone__dot--3\"></span><span class=\"ds-phone__lines\"><span class=\"ds-phone__line\"></span><span class=\"ds-phone__line ds-phone__line--short\"></span></span></div>\n            <div class=\"ds-phone__row\"><span class=\"ds-phone__dot ds-phone__dot--4\"></span><span class=\"ds-phone__lines\"><span class=\"ds-phone__line\"></span><span class=\"ds-phone__line ds-phone__line--short\"></span></span></div>\n            <div class=\"ds-phone__row\"><span class=\"ds-phone__dot\"></span><span class=\"ds-phone__lines\"><span class=\"ds-phone__line\"></span><span class=\"ds-phone__line ds-phone__line--short\"></span></span></div>\n            <div class=\"ds-phone__action\"></div>\n          </div>\n        </div>\n        <div class=\"ds-grid__col\">\n          <div class=\"ds-grid__cell\">\n            <div class=\"ds-grid__chip ds-grid__chip--3\">\n              <svg class=\"ds-grid__icon\" viewBox=\"0 0 60 60\" aria-hidden=\"true\"><path class=\"ds-shade\" d=\"M44 19l50 50v18l-22 7-50-50z\" fill=\"currentColor\"/><path d=\"M16 19h28v18H30l-8 7v-7h-6z\" fill=\"currentColor\"/></svg>\n            </div>\n            <div class=\"ds-grid__body\">\n              <h3 class=\"ds-grid__title\">Notes with a reply</h3>\n              <p class=\"ds-grid__text\">Ask about the odd delivery under the note itself, not in a group chat nobody reads.</p>\n            </div>\n          </div>\n          <div class=\"ds-grid__cell\">\n            <div class=\"ds-grid__chip ds-grid__chip--4\">\n              <svg class=\"ds-grid__icon\" viewBox=\"0 0 60 60\" aria-hidden=\"true\"><path class=\"ds-shade\" d=\"M45 15l50 50v30H67L17 45z\" fill=\"currentColor\"/><path d=\"M17 31h8v14h-8z M27 23h8v22h-8z M37 15h8v30h-8z\" fill=\"currentColor\"/></svg>\n            </div>\n            <div class=\"ds-grid__body\">\n              <h3 class=\"ds-grid__title\">A week at a glance</h3>\n              <p class=\"ds-grid__text\">See which jobs keep slipping and which shift is carrying them, without a spreadsheet.</p>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-band ds-band--alt\">\n    <div class=\"ds-band__inner\">\n      <div class=\"ds-band__head\">\n        <h2 class=\"ds-band__title\">Plain pricing</h2>\n        <p class=\"ds-band__lead\">Pay per site, not per person. Change or cancel in two taps.</p>\n      </div>\n      <div class=\"ds-plans\">\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h3 class=\"ds-panel__title\">Corner</h3>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">$0</span>\n            <span class=\"ds-panel__unit\">for one site, up to five people</span>\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__line\">One shared checklist</li>\n              <li class=\"ds-panel__line\">30 days of history</li>\n              <li class=\"ds-panel__line\">Phone and web apps</li>\n            </ul>\n            <a class=\"ds-button ds-button--secondary\" href=\"#handovers\">Start free</a>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--featured\">\n          <h3 class=\"ds-panel__title\">Shopfront</h3>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">$12</span>\n            <span class=\"ds-panel__unit\">per <span class=\"ds-tooltip\" tabindex=\"0\">site<span class=\"ds-tooltip__tip\" role=\"tooltip\">One shop, café or kitchen with its own lists.</span></span> each month</span>\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__line\">Unlimited checklists and people</li>\n              <li class=\"ds-panel__line\">Timed reminders</li>\n              <li class=\"ds-panel__line\">A year of history</li>\n              <li class=\"ds-panel__line\">Weekly summary by email</li>\n            </ul>\n            <a class=\"ds-button ds-button--large\" href=\"#handovers\">Try 30 days free</a>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h3 class=\"ds-panel__title\">High street</h3>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">$9</span>\n            <span class=\"ds-panel__unit\">per site each month, from six sites</span>\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__line\">Everything in Shopfront</li>\n              <li class=\"ds-panel__line\">Templates shared across sites</li>\n              <li class=\"ds-panel__line\">Export to a spreadsheet</li>\n            </ul>\n            <a class=\"ds-button ds-button--secondary\" href=\"#news\">Read the stories</a>\n          </div>\n        </section>\n      </div>\n      <div class=\"ds-accordion\">\n        <details class=\"ds-accordion__item\" open>\n          <summary class=\"ds-accordion__head\">What counts as a site?</summary>\n          <div class=\"ds-accordion__body\"><p>One shop, café or kitchen with its own lists. A stall that opens at weekends counts as one too.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Do the people on a shift need an account?</summary>\n          <div class=\"ds-accordion__body\"><p>No. They open the list from a link on the shop phone and sign each line with their name.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">What happens when the phone is offline?</summary>\n          <div class=\"ds-accordion__body\"><p>The handover is kept on the phone and sent the moment it finds a signal. The list page shows it as not sent until then.</p></div>\n        </details>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-band ds-band--alt ds-band--compact\">\n    <div class=\"ds-band__inner\">\n      <div class=\"ds-quote ds-carousel\">\n        <input class=\"ds-carousel__pick\" type=\"radio\" name=\"owners\" id=\"owner-1\" aria-label=\"First quote\" checked>\n        <input class=\"ds-carousel__pick\" type=\"radio\" name=\"owners\" id=\"owner-2\" aria-label=\"Second quote\">\n        <input class=\"ds-carousel__pick\" type=\"radio\" name=\"owners\" id=\"owner-3\" aria-label=\"Third quote\">\n        <div class=\"ds-carousel__slides\">\n          <figure class=\"ds-carousel__slide\">\n            <blockquote class=\"ds-quote__text\">We stopped ringing each other at eleven at night to ask whether the ovens were off. That alone was worth it.</blockquote>\n            <figcaption class=\"ds-quote__by\">\n              <span class=\"ds-avatar\">IR</span>\n              <span><span class=\"ds-quote__name\">Ines Rahal</span><span class=\"ds-quote__role\">Owner, a bakery with two sites</span></span>\n            </figcaption>\n          </figure>\n          <figure class=\"ds-carousel__slide\">\n            <blockquote class=\"ds-quote__text\">The morning shift reads last night's note before the kettle has boiled. Nothing gets found out at noon any more.</blockquote>\n            <figcaption class=\"ds-quote__by\">\n              <span class=\"ds-avatar ds-avatar--2\">SL</span>\n              <span><span class=\"ds-quote__name\">A shift lead</span><span class=\"ds-quote__role\">A café by the station</span></span>\n            </figcaption>\n          </figure>\n          <figure class=\"ds-carousel__slide\">\n            <blockquote class=\"ds-quote__text\">Six shops, one list each, and I can see on a Monday which one keeps leaving the same job.</blockquote>\n            <figcaption class=\"ds-quote__by\">\n              <span class=\"ds-avatar ds-avatar--3\">AM</span>\n              <span><span class=\"ds-quote__name\">An area manager</span><span class=\"ds-quote__role\">Six shops on the high street plan</span></span>\n            </figcaption>\n          </figure>\n        </div>\n        <div class=\"ds-carousel__dots\">\n          <label class=\"ds-carousel__dot\" for=\"owner-1\" title=\"First quote\"></label>\n          <label class=\"ds-carousel__dot\" for=\"owner-2\" title=\"Second quote\"></label>\n          <label class=\"ds-carousel__dot\" for=\"owner-3\" title=\"Third quote\"></label>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"news\">\n  <header class=\"ds-page-header ds-page-header--plain\">\n    <div class=\"ds-page-header__inner\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#home\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">What's new</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__copy\">\n        <h1 class=\"ds-page-header__title\">What's new</h1>\n        <p class=\"ds-page-header__text\">Why the app is built the way it is, and what each version added.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--inverse\" href=\"#handovers\">Open the app</a>\n      </div>\n    </div>\n    </div>\n  </header>\n\n  <div class=\"ds-band ds-band--compact\">\n    <div class=\"ds-band__inner ds-cols\">\n      <div class=\"ds-cols__wide ds-stack\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n                <h1>Made for the five minutes nobody has</h1>\n                <p class=\"ds-prose__lead\">The end of a shift is the worst time to write things down. So chronoskin asks for as little as it can.</p>\n                <p>Open the app and the list is already there, in the order the room is walked. Tick, add a line where something is odd, and <strong>close the shift with one button</strong>.</p>\n                <h2>What the next shift sees</h2>\n                <ul>\n                  <li>What was done, and by whom</li>\n                  <li>What was left, with the reason given</li>\n                  <li>Anything new since they were last in</li>\n                </ul>\n                <h3>For the till and the back office</h3>\n                <p>Post a handover from your own system with one call to <code>POST /v1/handovers</code>, and read it back as plain text.</p>\n              </article>\n        <p class=\"ds-linkrow\" data-component=\"links\">\n          <a class=\"ds-link\" href=\"#home\">See the features</a>\n          <a class=\"ds-link is-visited\" href=\"#home\">Compare the plans</a>\n          <a class=\"ds-link is-hover\" href=\"#handovers\">Open this week</a>\n          <a class=\"ds-link is-active\" href=\"#settings\">Set up a site</a>\n          <a class=\"ds-link ds-link--quiet\" href=\"#news\">Older versions</a>\n        </p>\n      </div>\n      <div class=\"ds-cols__narrow\">\n        <ul class=\"ds-list\" data-component=\"list\">\n                <li class=\"ds-list__item\">\n                  <span class=\"ds-list__meta\">18 May 2015 · Version 2.4</span>\n                  <a class=\"ds-list__title\" href=\"#news\">Handovers on the lock screen</a>\n                  <p class=\"ds-list__text\">The three most urgent lines now show before the phone is unlocked.</p>\n                </li>\n                <li class=\"ds-list__item\">\n                  <span class=\"ds-list__meta\">2 April 2015 · Version 2.3</span>\n                  <a class=\"ds-list__title\" href=\"#news\">Templates for opening and closing</a>\n                  <p class=\"ds-list__text\">Keep one list for the morning and another for the night, and switch by the clock.</p>\n                </li>\n                <li class=\"ds-list__item\">\n                  <span class=\"ds-list__meta\">9 March 2015 · Version 2.2</span>\n                  <a class=\"ds-list__title\" href=\"#news\">Photos on any line</a>\n                  <p class=\"ds-list__text\">Show the broken shelf instead of describing it.</p>\n                </li>\n                <li class=\"ds-list__item\">\n                  <span class=\"ds-list__meta\">20 January 2015 · Version 2.0</span>\n                  <a class=\"ds-list__title\" href=\"#news\">A web app for the back office</a>\n                  <p class=\"ds-list__text\">Everything on the phone, on a bigger screen, with a week view.</p>\n                </li>\n              </ul>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"handovers\">\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <div class=\"ds-page-header__inner\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#home\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#handovers\">Mill Lane site</a></li>\n      <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Handovers</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__copy\">\n        <h1 class=\"ds-page-header__title\">Handovers</h1>\n        <p class=\"ds-page-header__text\">Every shift closed at Mill Lane this week, and what it left behind.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--ghost\" href=\"#settings\">Settings</a>\n        <a class=\"ds-button ds-button--inverse\" href=\"#handover\">New handover</a>\n      </div>\n    </div>\n    <ul class=\"ds-tabs ds-tabs--onfill\" data-component=\"tabs\">\n      <li><a class=\"ds-tabs__tab is-current\" href=\"#handovers\">This week <span class=\"ds-tabs__count\">14</span></a></li>\n      <li><a class=\"ds-tabs__tab\" href=\"#handovers\">Left open <span class=\"ds-tabs__count\">3</span></a></li>\n      <li><a class=\"ds-tabs__tab\" href=\"#handovers\">Templates</a></li>\n      <li><a class=\"ds-tabs__tab\" href=\"#handovers\">People</a></li>\n    </ul>\n    </div>\n  </header>\n\n  <div class=\"ds-band ds-band--compact\">\n    <div class=\"ds-band__inner ds-cols ds-cols--tight\">\n      <div class=\"ds-cols__main ds-stack\">\n        <div class=\"ds-noticerow\" data-component=\"notice\">\n                  <p class=\"ds-notice\"><span class=\"ds-notice__title\">Three lines are still open.</span> They were carried over to this morning's opening list.</p>\n                  <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Tuesday's closing handover was not sent.</span> The phone was offline. Open it to send again.</p>\n        </div>\n        <div>\n          <div class=\"ds-table__wrap\">\n            <table class=\"ds-table\" data-component=\"table\">\n                      <thead>\n                        <tr>\n                          <th scope=\"col\">Shift</th>\n                          <th scope=\"col\">Closed by</th>\n                          <th scope=\"col\">Status</th>\n                          <th scope=\"col\" class=\"ds-table__num\">Lines</th>\n                          <th scope=\"col\" class=\"ds-table__num\">Left open</th>\n                          <th scope=\"col\" class=\"ds-table__num\">Time taken</th>\n                        </tr>\n                      </thead>\n                      <tbody>\n                        <tr><th scope=\"row\"><a class=\"ds-table__link\" href=\"#handover\">Thu 21 May, close</a></th><td><span class=\"ds-avatar ds-avatar--small\">TB</span>Tomas Brandt</td><td><span class=\"ds-badge ds-badge--success\">Complete</span></td><td class=\"ds-table__num\">18</td><td class=\"ds-table__num\">0</td><td class=\"ds-table__num\">1:40</td></tr>\n                        <tr><th scope=\"row\"><a class=\"ds-table__link\" href=\"#handover\">Thu 21 May, open</a></th><td><span class=\"ds-avatar ds-avatar--small ds-avatar--2\">IR</span>Ines Rahal</td><td><span class=\"ds-badge ds-badge--warning\">2 carried over</span></td><td class=\"ds-table__num\">14</td><td class=\"ds-table__num\">2</td><td class=\"ds-table__num\">2:05</td></tr>\n                        <tr><th scope=\"row\"><a class=\"ds-table__link\" href=\"#handover\">Wed 20 May, close</a></th><td><span class=\"ds-avatar ds-avatar--small ds-avatar--3\">OM</span>Odile Marsh</td><td><span class=\"ds-badge ds-badge--success\">Complete</span></td><td class=\"ds-table__num\">18</td><td class=\"ds-table__num\">0</td><td class=\"ds-table__num\">1:52</td></tr>\n                        <tr><th scope=\"row\"><a class=\"ds-table__link\" href=\"#handover\">Wed 20 May, open</a></th><td><span class=\"ds-avatar ds-avatar--small ds-avatar--2\">IR</span>Ines Rahal</td><td><span class=\"ds-badge ds-badge--success\">Complete</span></td><td class=\"ds-table__num\">14</td><td class=\"ds-table__num\">0</td><td class=\"ds-table__num\">1:31</td></tr>\n                        <tr><th scope=\"row\"><a class=\"ds-table__link\" href=\"#handover\">Tue 19 May, close</a></th><td><span class=\"ds-avatar ds-avatar--small\">TB</span>Tomas Brandt</td><td><span class=\"ds-badge ds-badge--danger\">Not sent</span></td><td class=\"ds-table__num\">18</td><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">3:10</td></tr>\n                      </tbody>\n                    </table>\n          </div>\n          <div class=\"ds-tablefoot\">\n            <ul class=\"ds-pagination\" data-component=\"pagination\">\n                        <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link is-disabled\" href=\"#handovers\">Previous</a></li>\n                        <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link is-current\" href=\"#handovers\">1</a></li>\n                        <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#handovers\">2</a></li>\n                        <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#handovers\">3</a></li>\n                        <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#handovers\">Next</a></li>\n                      </ul>\n            <span class=\"ds-tablefoot__note\">Showing 5 of 14 handovers. Times in minutes and seconds.</span>\n          </div>\n        </div>\n        <div class=\"ds-empty\" data-component=\"empty\">\n            <div class=\"ds-empty__chip\">\n              <svg class=\"ds-grid__icon\" viewBox=\"0 0 60 60\" aria-hidden=\"true\"><path class=\"ds-shade\" d=\"M40 15l50 50v30H70L20 45z\" fill=\"currentColor\"/><rect x=\"20\" y=\"15\" width=\"20\" height=\"30\" fill=\"currentColor\"/></svg>\n            </div>\n            <h2 class=\"ds-empty__title\">No templates yet</h2>\n            <p class=\"ds-empty__text\">Save a handover as a template and it will appear here.</p>\n            <a class=\"ds-button\" href=\"#handover\">Make the first template</a>\n          </div>\n      </div>\n      <div class=\"ds-cols__side ds-stack\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Sites</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\"><a class=\"ds-link\" href=\"#handovers\">Mill Lane</a><span class=\"ds-badge ds-badge--quiet\">14</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#handovers\">Station Road</a><span class=\"ds-badge ds-badge--quiet\">12</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#handovers\">Market stall</a><span class=\"ds-badge ds-badge--quiet\">5</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Add a site</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">Labels in use</h2>\n          <div class=\"ds-panel__body\">\n            <p>Labels sort lines inside a handover. A line can carry one.</p>\n            <div class=\"ds-badgerow\" data-component=\"badge\">\n                        <span class=\"ds-badge\">New</span>\n                        <span class=\"ds-badge ds-badge--alt\">Delivery</span>\n                        <span class=\"ds-badge ds-badge--quiet\">Stock</span>\n                        <span class=\"ds-badge ds-badge--success\">Complete</span>\n                        <span class=\"ds-badge ds-badge--warning\">Carried over</span>\n                        <span class=\"ds-badge ds-badge--danger\">Not sent</span>\n                      </div>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">This week at Mill Lane</h2>\n          <div class=\"ds-panel__body\">\n            <p>Fourteen shifts closed by three people. The median handover took 1 minute 52 seconds.</p>\n            <a class=\"ds-link\" href=\"#handover\">Open the latest handover</a>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"handover\">\n  <header class=\"ds-page-header ds-page-header--plain\">\n    <div class=\"ds-page-header__inner\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#home\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#handovers\">Handovers</a></li>\n      <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Thu 21 May, close</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__copy\">\n        <h1 class=\"ds-page-header__title\">Thursday close</h1>\n        <p class=\"ds-page-header__text\">Eighteen lines, written by Tomas Brandt. Two are still open.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--ghost\" href=\"#handovers\">All handovers</a>\n      </div>\n    </div>\n    </div>\n  </header>\n\n  <div class=\"ds-band ds-band--compact\">\n    <div class=\"ds-band__inner ds-cols ds-cols--tight\">\n      <div class=\"ds-cols__main ds-stack\">\n        <div class=\"ds-table__wrap\">\n          <table class=\"ds-table\">\n            <thead>\n              <tr>\n                <th scope=\"col\">Line</th>\n                <th scope=\"col\">Label</th>\n                <th scope=\"col\">Done by</th>\n                <th scope=\"col\">Status</th>\n              </tr>\n            </thead>\n            <tbody>\n              <tr><th scope=\"row\">Ovens off and doors open</th><td><span class=\"ds-badge ds-badge--quiet\">Kitchen</span></td><td>Tomas Brandt</td><td><span class=\"ds-badge ds-badge--success\">Done</span></td></tr>\n              <tr><th scope=\"row\">Till counted and float set</th><td><span class=\"ds-badge ds-badge--quiet\">Stock</span></td><td>Tomas Brandt</td><td><span class=\"ds-badge ds-badge--success\">Done</span></td></tr>\n              <tr><th scope=\"row\">Flour delivery checked in</th><td><span class=\"ds-badge ds-badge--alt\">Delivery</span></td><td>Odile Marsh</td><td><span class=\"ds-badge ds-badge--warning\">Left open</span></td></tr>\n              <tr><th scope=\"row\">Fridge two temperature logged</th><td><span class=\"ds-badge ds-badge--quiet\">Kitchen</span></td><td>Nobody yet</td><td><span class=\"ds-badge ds-badge--warning\">Left open</span></td></tr>\n              <tr><th scope=\"row\">Back door locked</th><td><span class=\"ds-badge ds-badge--quiet\">Stock</span></td><td>Tomas Brandt</td><td><span class=\"ds-badge ds-badge--success\">Done</span></td></tr>\n            </tbody>\n          </table>\n        </div>\n        <div class=\"ds-buttonrow\" data-component=\"buttons\">\n          <a class=\"ds-button\" href=\"#handover\">Close shift</a>\n          <a class=\"ds-button is-hover\" href=\"#handover\">Add a line</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#handovers\">Save as template</a>\n          <a class=\"ds-button ds-button--danger\" href=\"#handovers\">Delete list</a>\n          <button class=\"ds-button\" type=\"button\" disabled>Send again</button>\n        </div>\n        <div class=\"ds-dialog\" data-component=\"dialog\">\n                <div class=\"ds-dialog__box\" role=\"dialog\" aria-labelledby=\"dialog-title\">\n                  <div class=\"ds-dialog__head\">\n                    <h2 class=\"ds-dialog__title\" id=\"dialog-title\">Close this shift?</h2>\n                    <a class=\"ds-dialog__close\" href=\"#handover\" aria-label=\"Close\"></a>\n                  </div>\n                  <div class=\"ds-dialog__body\">\n                    <p>Two lines are still open. They will be carried over to Friday's opening list.</p>\n                  </div>\n                  <div class=\"ds-dialog__actions\">\n                    <a class=\"ds-button ds-button--secondary\" href=\"#handover\">Keep editing</a>\n                    <a class=\"ds-button\" href=\"#handovers\">Close shift</a>\n                  </div>\n                </div>\n        </div>\n      </div>\n      <div class=\"ds-cols__side ds-stack\">\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">This shift</h2>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">16 of 18</span>\n            <span class=\"ds-panel__unit\">lines done so far, in 1 minute 40 seconds</span>\n            <div class=\"ds-progress\">\n              <progress class=\"ds-progress__bar ds-progress__bar--success\" value=\"16\" max=\"18\">16 of 18</progress>\n            </div>\n            <p>Closing carries the two open lines over to Friday's opening list.</p>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">Note from the last shift</h2>\n          <div class=\"ds-panel__body\">\n            <p>The flour came two sacks short. The driver says the rest follows on Friday before nine.</p>\n            <a class=\"ds-link\" href=\"#handovers\">See Thursday's opening list</a>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"settings\">\n  <header class=\"ds-page-header ds-page-header--plain\">\n    <div class=\"ds-page-header__inner\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#home\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#handovers\">Mill Lane site</a></li>\n      <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Settings</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__copy\">\n        <h1 class=\"ds-page-header__title\">Settings</h1>\n        <p class=\"ds-page-header__text\">How handovers are written and sent at Mill Lane.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--ghost\" href=\"#handovers\">Back to handovers</a>\n      </div>\n    </div>\n    </div>\n  </header>\n\n  <div class=\"ds-band ds-band--compact\">\n    <div class=\"ds-band__inner ds-cols ds-cols--tight\">\n      <div class=\"ds-cols__main\">\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">Handover settings for this site</h2>\n          <div class=\"ds-panel__body\">\n            <form class=\"ds-form\" data-component=\"form\" action=\"#settings\">\n                        <div class=\"ds-form__row\">\n                          <label class=\"ds-form__field\"><span class=\"ds-form__label\">Site name</span><input class=\"ds-form__input\" type=\"text\" value=\"Mill Lane\"></label>\n                          <label class=\"ds-form__field\"><span class=\"ds-form__label\">Closing time</span>\n                            <select class=\"ds-form__select\"><option>10 pm</option><option>11 pm</option><option>Midnight</option></select>\n                          </label>\n                        </div>\n                        <div class=\"ds-form__row\">\n                          <label class=\"ds-form__field\"><span class=\"ds-form__label\">Summary goes to</span><input class=\"ds-form__input is-error\" type=\"text\" value=\"ines@mill-lane\"><span class=\"ds-form__error\">Enter a complete email address.</span></label>\n                          <label class=\"ds-form__field\"><span class=\"ds-form__label\">Shift lead</span><input class=\"ds-form__input is-focus\" type=\"text\" placeholder=\"Name of the person who signs off\"></label>\n                        </div>\n                        <label class=\"ds-form__field\"><span class=\"ds-form__label\">Note at the top of every list</span><textarea class=\"ds-form__textarea\" rows=\"3\" placeholder=\"Walk the room clockwise from the door\"></textarea><span class=\"ds-form__hint\">Optional. Shown above the first line of each handover.</span></label>\n                        <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>Carry open lines over to the next shift. <a class=\"ds-link\" href=\"#news\">How this works</a></span></label>\n                        <div class=\"ds-form__actions\">\n                          <a class=\"ds-button ds-button--secondary\" href=\"#handovers\">Cancel</a>\n                          <button class=\"ds-button\" type=\"submit\">Save settings</button>\n                        </div>\n                      </form>\n          </div>\n        </section>\n      </div>\n      <div class=\"ds-cols__side ds-stack\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Settings</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\"><a class=\"ds-link\" href=\"#settings\">Handovers</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">People</a><span class=\"ds-badge ds-badge--quiet\">3</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Reminders</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#home\">Plan and billing</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">Reminders</h2>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-switchlist\">\n              <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">An hour before closing</span></label>\n              <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">When a line is left open</span></label>\n              <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">On days the site is shut</span></label>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--plain\">\n          <h2 class=\"ds-panel__title\">Who gets the summary</h2>\n          <div class=\"ds-panel__body\">\n            <p>One email each Monday, to the address on this page. Nobody else is copied in.</p>\n            <a class=\"ds-link\" href=\"#news\">Read how summaries work</a>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <span class=\"ds-footer__brand\">chronoskin</span>\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-footer__link\" href=\"#home\">Features</a></li>\n            <li><a class=\"ds-footer__link\" href=\"#news\">What's new</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#handovers\">Handovers</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#settings\">Settings</a></li>\n          </ul>\n    <ul class=\"ds-footer__social\">\n      <li><a class=\"ds-footer__chip\" href=\"#home\" aria-label=\"Email\"><svg class=\"ds-footer__glyph\" viewBox=\"0 0 20 20\" aria-hidden=\"true\"><path d=\"M3 5h14v10H3z M3 5l7 6 7-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"/></svg></a></li>\n      <li><a class=\"ds-footer__chip\" href=\"#home\" aria-label=\"News feed\"><svg class=\"ds-footer__glyph\" viewBox=\"0 0 20 20\" aria-hidden=\"true\"><path d=\"M4 9a7 7 0 0 1 7 7 M4 4a12 12 0 0 1 12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"/><circle cx=\"5\" cy=\"15\" r=\"1.5\" fill=\"currentColor\"/></svg></a></li>\n      <li><a class=\"ds-footer__chip\" href=\"#home\" aria-label=\"Community\"><svg class=\"ds-footer__glyph\" viewBox=\"0 0 20 20\" aria-hidden=\"true\"><path d=\"M3 4h14v9h-7l-4 3v-3H3z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"/></svg></a></li>\n    </ul>\n    <p class=\"ds-footer__base\">© 2015 chronoskin. Privacy, terms and cookies are one short page.</p>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.flat-design.landing.s04.p05.t03.u06\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"flat-design\",\n    \"years\": [\n      2013,\n      2016\n    ]\n  },\n  \"archetype\": \"landing\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1280,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-fl-4536\",\n  \"short\": \"v1-fl-4536\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #f0e8e0;\n  --color-canvas: #f0e8e0;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f0e8;\n  --color-surface-strong: #e0d8c0;\n  --color-bar: #ffffff;\n  --color-bar-text: #48484c;\n  --color-bar-alt: #333333;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #1a1a1a;\n  --color-inverse-text: #ffffff;\n  --color-text: #48484c;\n  --color-text-muted: #848484;\n  --color-heading: #222222;\n  --color-heading-alt: #9a1616;\n  --color-link: #008080;\n  --color-link-quiet: #848484;\n  --color-link-visited: #5ba9ae;\n  --color-link-hover: #1e347b;\n  --color-link-active: #000000;\n  --color-border: #d8d8d8;\n  --color-border-strong: #333333;\n  --color-border-muted: #e8e0d0;\n  --color-accent: #fa6800;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #e3c800;\n  --color-fill-1: #9a1616;\n  --color-fill-2: #fa6800;\n  --color-fill-3: #e3c800;\n  --color-fill-4: #1e347b;\n  --color-button: #9a1616;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #333333;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #848484;\n  --color-disabled: #e8e0d0;\n  --color-disabled-text: #848484;\n  --color-danger: #dd1144;\n  --color-danger-surface: #f8f0e8;\n  --color-success: #60a917;\n  --color-warning: #f0a30a;\n  --color-notice: #e0d8c0;\n  --color-notice-text: #333333;\n  --color-focus: #008080;\n  --color-shadow: rgb(0 0 0 / 0.2);\n  --color-overlay: rgb(51 51 51 / 0.6);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Source Sans Pro\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Segoe UI\", Geneva, Tahoma, Arial, sans-serif;\n  --font-heading: \"Source Sans Pro\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Segoe UI\", Geneva, Tahoma, Arial, sans-serif;\n  --font-ui: \"Source Sans Pro\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Segoe UI\", Geneva, Tahoma, Arial, sans-serif;\n  --font-mono: Consolas, Menlo, \"Liberation Mono\", monospace;\n  --text-base: 14px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 16px;\n  --text-display: 38px;\n  --text-h1: 26px;\n  --text-h2: 20px;\n  --text-h3: 16px;\n  --line-body: 1.5;\n  --line-heading: 1.25;\n  --line-display: 1.3;\n  --weight-body: 400;\n  --weight-bold: 600;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 3px;\n  --border-style: solid;\n  --radius-control: 2px;\n  --radius-panel: 3px;\n  --radius-pill: 9px;\n  --radius-page: 5px;\n  --shadow-panel: 0 0 0 3px var(--color-shadow);\n  --shadow-control: 0 0 0 1px var(--color-shadow);\n  --shadow-control-hover: 0 0 0 3px var(--color-shadow);\n  --shadow-control-pressed: inset 0 0 0 2px var(--color-shadow);\n  --shadow-dialog: 0 0 0 8px var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 90%, black);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px dashed var(--color-focus);\n  --transition: box-shadow 0.15s ease, background-color 0.15s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
