{
  "id": "v1-fl-445a",
  "long_id": "v1.flat-design.landing.s04.p04.t05.u10",
  "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-445a",
  "preview_url": "https://chrono.skin/s/v1-fl-445a/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 warm beige page, charcoal and deep red of the 2014 tile-framework page, with that page's orange, yellow, navy and teal; the creams come from the 2014 note-taking page and the greys from the 2014 ride-app page.\n- `--color-page` and `--color-canvas` are beige `#f0e8e0`; `--color-surface` white is for panels, table rows and the current sidebar row; `--color-surface-alt` `#f8f0e8` the alternate row and band; `--color-surface-strong` `#e0d8c0` the panel title strip, the plain tile, idle page numbers and inline code. `--color-bar` white with `--color-bar-text` `#48484c` is the top bar and the table head. `--color-bar-alt` `#333333` with white `--color-bar-alt-text` is the news strip and one tile; nothing else is put on it and its text takes no other colour.\n- Text is `--color-text` `#48484c`, meta `--color-text-muted` `#848484`, headings `--color-heading` `#222222`. `--color-heading-alt` `#9a1616` (deep red) is for group, hub, panel and sidebar titles and h3.\n- `--color-button` `#9a1616` is the only action colour, and also the bar beside a figure, under the current tab and beside the current sidebar row. Links are teal `--color-link` `#008080`, hover navy `#1e347b` and underlined, active black. The secondary button is `--color-button-secondary-text` `#333333` text and edge on white; its text must contrast with the page as well as with its own fill, because a surface set may make the fill transparent. Hovered, it swaps its two colours.\n- `--color-fill-1` (deep red) and `--color-fill-4` (navy) are the tiles that carry text, with `--color-inverse-text` on them, as do the `--fill-inverse` tile, the `--fill-bar-alt` tile (with `--color-bar-alt-text`) and the plain `--color-surface-strong` tile (with `--color-text` and `--color-heading`). `--color-fill-2` (orange) and `--color-fill-3` (yellow) are icon tiles: an icon only, on a round plate of `--color-inverse` mixed in at 40%, so that the layout stays readable when a palette makes these fills pale. Every tile's label stands on a strip of the same 40% mix with `--color-inverse-text`, never on the fill itself. The cover blocks of the list use the four fills without text.\n- `--color-accent` `#fa6800` (white text) is the default badge and the account's initials, `--color-accent-alt` yellow the second badge: a 30% tint over `--color-surface` with a yellow outline and `--color-heading` text. Status: `--color-success` `#60a917`, `--color-warning` `#f0a30a`, `--color-danger` `#dd1144`, all with `--color-accent-text`.\n- `--color-notice` `#e0d8c0` with `--color-notice-text` `#333333` and a thick bar in the text colour; the error notice is `--color-danger` on `--color-danger-surface` with a 1px outline. The footer is `--fill-inverse` `#1a1a1a` with `--color-text-muted` text and a `--color-inverse-text` name.\n- Two families, after the tile-framework page, which set its sub-headings in a serif beside a humanist sans, and the 2014 agency page with its large serif titles: `--font-heading` is Cambria, PT Serif, Georgia; `--font-body` and `--font-ui` are Segoe UI, Open Sans, Helvetica Neue. `--font-mono` is Courier New.\n- `--text-base` 15px at `--line-body` 1.4, `--text-ui` 14px (controls, tables, sidebar, strip), `--text-small` 12px (meta, badges, tile labels, breadcrumb, footer), `--text-large` 20px (lead lines).\n- Headings are regular weight and large: `--text-display` 46px (hero title, page title, figures, the word in a live tile), `--text-h1` 34px (pivot words, panel figures), `--text-h2` 28px (hub titles, dialog and empty-state titles), `--text-h3` 20px (group titles, tile titles, list titles, tabs, the brand). `--weight-heading`, `--weight-display` and `--weight-ui` are 400; `--weight-bold` 700 is for labels, table heads, panel and sidebar titles, badges and the brand name. `--display-tracking` is -0.5px; nothing else is tracked and nothing is uppercase.\n- Surface: everything is square (all four radii 0, so badges are rectangular tags). `--border-width` 1px for rules and outlines; `--border-width-strong` 5px for the bar beside a figure, a notice and the current sidebar row, under the current tab and the table head, and the frame of a hovered tile. `--shadow-panel` is a hard 4px line in `--color-border-strong` along the top of a panel; `--shadow-dialog` adds a 1px ring. A hovered button gets a 2px inner ring, a pressed one 4px (`--shadow-control-hover`, `--shadow-control-pressed`). `--focus-ring` is `1px dashed`. `--transition` fades background and ring in 0.1s.\n- One-off values made with `calc()` and `color-mix()` because the vocabulary has no token: the icon plate and the tile label strip (`--color-inverse` at 40%), the plate on the inverse tile (`--color-inverse-text` at 16%), 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 2px ring of the back button (twice `--border-width`). A hovered strip link uses `opacity: 0.8`.\n\n- Thick lines: `--border-width` 2px for every rule and outline, `--border-width-strong` 3px for the current item.\n- `--radius-control` and `--radius-panel` 6px, `--radius-pill` 4px (badges are rounded tags, not pills), `--radius-page` 0.\n- Everything that can be picked up stands on a hard lower edge, after the 2015 board-tool page: `--shadow-control` and `--shadow-control-hover` are `0 2px 0 0` in `--color-shadow` under buttons and inputs, `--shadow-panel` the same under panels, `--shadow-dialog` `0 4px 0 0` under a dialog; pressed is `none`. No shadow is blurred and text has none.\n- Buttons are solid: `--fill-button` is the flat `--color-button`, hovered mixed 20% with white; `--fill-button-secondary` is the solid `--color-button-secondary`. `--focus-ring` is `2px solid` 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-size >= 12px`: tile labels and meta text are the smallest text.\n- `font-size <= 46px`: the hero and page titles are the largest text.\n- `font-weight <= 700`: headings are regular; 700 is for labels and tags.\n- `font-families <= 3`: a serif for headings, a sans-serif for text, monospace for code.\n- `line-height <= 1.4`: body text is set at 1.4.\n- `uppercase-text <= 0%`: navigation, labels and headings are in sentence case.\n- `underlined-links <= 5%`: a link is underlined only while it is hovered.\n- `box-shadow-blur <= 0px`: the only shadows are hard edges under controls, panels and dialogs.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 0%`: every background is one solid colour.\n- `border-radius <= 6px`: 6px on controls and panels, 4px on tags.\n- `border-width <= 3px`: rules are 2px; 3px marks the current item.\n- `transition = none`: states change without a fade.\n- `animation = none`: no reference has a CSS animation.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. 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.p04.t05.u10\",\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-445a\",\n  \"short\": \"v1-fl-445a\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #ffffff;\n  --color-canvas: #ffffff;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f8f0;\n  --color-surface-strong: #eeece4;\n  --color-bar: #ffffff;\n  --color-bar-text: #555459;\n  --color-bar-alt: #3d4b5b;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #303038;\n  --color-inverse-text: #ffffff;\n  --color-text: #555459;\n  --color-text-muted: #9e9ea6;\n  --color-heading: #3d4b5b;\n  --color-heading-alt: #0f7965;\n  --color-link: #0f7965;\n  --color-link-quiet: #9e9ea6;\n  --color-link-visited: #0f7965;\n  --color-link-hover: #3aa497;\n  --color-link-active: #194ba3;\n  --color-border: #dddddd;\n  --color-border-strong: #bbaa99;\n  --color-border-muted: #eeece4;\n  --color-accent: #eb4d5c;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #f8c433;\n  --color-fill-1: #3aa497;\n  --color-fill-2: #eb4d5c;\n  --color-fill-3: #f8c433;\n  --color-fill-4: #439fe0;\n  --color-button: #439fe0;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #3d4b5b;\n  --color-input: #ffffff;\n  --color-input-text: #3d4b5b;\n  --color-input-border: #dddddd;\n  --color-disabled: #eeece4;\n  --color-disabled-text: #9e9ea6;\n  --color-danger: #eb4d5c;\n  --color-danger-surface: #fff8f8;\n  --color-success: #3aa497;\n  --color-warning: #e8a723;\n  --color-notice: #e4f0f6;\n  --color-notice-text: #3d4b5b;\n  --color-focus: #439fe0;\n  --color-shadow: rgb(0 0 0 / 0.15);\n  --color-overlay: rgb(0 0 0 / 0.3);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: Cambria, \"PT Serif\", Georgia, \"Times New Roman\", serif;\n  --font-ui: \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: \"Courier New\", Courier, monospace;\n  --text-base: 15px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 20px;\n  --text-display: 46px;\n  --text-h1: 34px;\n  --text-h2: 28px;\n  --text-h3: 20px;\n  --line-body: 1.4;\n  --line-heading: 1.15;\n  --line-display: 1.08;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: -0.5px;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 3px;\n  --border-style: solid;\n  --radius-control: 6px;\n  --radius-panel: 6px;\n  --radius-pill: 4px;\n  --radius-page: 0;\n  --shadow-panel: 0 2px 0 0 var(--color-shadow);\n  --shadow-control: 0 2px 0 0 var(--color-shadow);\n  --shadow-control-hover: 0 2px 0 0 var(--color-shadow);\n  --shadow-control-pressed: none;\n  --shadow-dialog: 0 4px 0 0 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) 80%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
