{
  "id": "v1-fl-8535",
  "long_id": "v1.flat-design.blog.s08.p05.t03.u05",
  "name": "Flat design personal sheet",
  "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": "blog",
  "mode": "mix",
  "viewport": {
    "width": 1280,
    "fluid": true,
    "responsive": true
  },
  "summary": "This is the personal site of flat design, common from 2013 to 2016 for freelancers, small workshops and their notebooks: one band of solid colour across the top with the name and four links, and a single white sheet pulled up over its lower edge that holds the whole page. The sheet opens with a round flat picture beside a heavy headline, then a strip of figures, then a tinted side column of facts and flat skill bars beside the work and the latest notes. Running text is a serif set generously, headings and controls a heavy sans; corners are barely rounded and the only depth is a one pixel edge under a box.",
  "url": "https://chrono.skin/s/v1-fl-8535",
  "preview_url": "https://chrono.skin/s/v1-fl-8535/specimen.html",
  "files": {
    "STYLE.md": "# Flat design personal sheet\n\n## Summary\n\nThis is the personal site of flat design, common from 2013 to 2016 for freelancers, small workshops and their notebooks: one band of solid colour across the top with the name and four links, and a single white sheet pulled up over its lower edge that holds the whole page. The sheet opens with a round flat picture beside a heavy headline, then a strip of figures, then a tinted side column of facts and flat skill bars beside the work and the latest notes. Running text is a serif set generously, headings and controls a heavy sans; corners are barely rounded and the only depth is a one pixel edge under a box.\n\n## Layout\n\n- The page is fluid and designed for a 1280px viewport, but the content is one centred `.ds-sheet` of `--size-page` (940px) on the `--fill-page` background. Nothing else spans the viewport except the band at the top and the footer block at the bottom.\n- Navigation is the band: `.ds-nav` on `--color-fill-1` with `--color-inverse-text`, the `.ds-brand` at the left of the 940px column and the links at the right. The band is `--size-overlap` (112px) taller than its content, and the sheet of the showing view is pulled up by the same amount, so the sheet's head lies on colour and its body on the page. The current link is fully opaque over a `--border-width-strong` line; the others are at 70%.\n- The home sheet stacks, top to bottom: `.ds-hero` (a `--size-disc` 120px disc at the left, then a small coloured line, the title at display size, a lead and two buttons, all left-aligned), `.ds-stat` (one tinted strip of four centred figures between two rules), and `.ds-sheet__cols`: a `--size-side` (260px) side column on `--color-surface-alt` closed by a rule at its right, and the main column. The side column holds the `.ds-sidebar` facts, the `.ds-progress` bars and a `.ds-panel`; the main column holds the `.ds-grid` of work cards and the `.ds-list` of notes, each under a `.ds-sheet__title` with one link at its right.\n- Inner pages have no hero and no figure strip. The sheet opens with `.ds-page-header` on `--color-surface-alt`: the `.ds-breadcrumb` first, then the page title with one line of description at the left and the actions at the right on the same baseline, closed by a rule. Below, the same `.ds-sheet__cols`: filters, a label key or the contents of a note in the side column; in the main column `.ds-tabs` standing on the table with the pagination under it, or the list of notes, or the running text with its links and action row, or the notices, the form and the dialog. The footer is unchanged.\n- Views. The specimen is a two-person sign painting workshop with five views. `home` is the introduction: picture and headline, four figures, facts, skill bars and the day rate at the left, four pieces of recent work and three notes at the right. `work` is the list page: kinds, the label key and the next free week at the left, year tabs on the commission table with its pagination and the empty waiting list at the right. `notes` is the notebook: subjects and the most read note beside five notes and the pagination. `note` is one note: its contents, author and further reading beside the text, the links and the action row. `contact` is the enquiry page: workshop hours and a hint beside the notices, the form and the open dialog. Below 760px the side column goes under the main one, the disc stands above the headline, the figures fold to two across, the work cards to one column, and a wide table scrolls sideways inside `.ds-table__wrap` while the page itself never does.\n- Spacing scale: `--space-1` 3px (between a label and its field, under a title line, pagination gaps), `--space-2` 7px (button and table cell vertical padding, between badges, sidebar rows, the height of a bar), `--space-3` 14px (paragraph gap, cell horizontal padding, list row padding, between buttons), `--space-4` 21px (button horizontal padding, panel and card padding, page side padding, between cards), `--space-5` 28px (between stacked blocks, side column padding, between navigation links), `--space-6` 42px (hero and main column padding, under the sheet, the brand mark), `--space-7` 70px (least height of a text area).\n- Other sizes: `--size-date` 56px (the date block of a note), `--size-tile` 126px (the colour block of a work card), `--size-icon` 42px, `--size-dialog` 420px.\n- On a phone (760px and below) there is no menu button: `.ds-nav__links` takes the full width under the brand with its links spread over it, and the current link keeps its mark. A drop-down in the links opens under them, aligned to the left edge. A tooltip is not placed beside its trigger: it opens as a full row under its line, inset by `--space-3`, without its arrow.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Colour family: the 2014 corporate home page (one blue, black text, grey bands and saturated product tiles); the purple and yellow are read from its screenshot.\n- `--color-page`, `--color-canvas` and `--color-surface` are white `#ffffff`; `--color-surface-alt` `#f0f0f0` is the alternate band and row, the plain tile, the page-header strip, the rail and the footer; `--color-surface-strong` `#e0e0e0` is the table head, the panel title strip, the idle tabs and the second plain tile. `--color-bar` `#eeeeee` with `--color-bar-text` `#1a1a1a` is the header. `--color-bar-alt` `#1570a6` with `--color-bar-alt-text` `#ffffff` is the breadcrumb toolbar; nothing else is put on it and its text takes no other colour.\n- Text and headings are near-black `#1a1a1a` (`--color-text`, `--color-heading`); `--color-heading-alt` is `#000000` (panel and sidebar titles, h3); meta text is `--color-text-muted` `#969696`.\n- `--color-button`, `--color-link`, `--color-link-visited` and `--color-focus` are the one blue `#1570a6`; hover is the darker `--color-link-hover` `#106088`, active `#1a1a1a`. Quiet links are `#1a1a1a`. The secondary button is blue text and outline on a grey block. The current tab, the current page number, the line under the tabs and the current rail marker are `--color-button`.\n- `--color-fill-1` `#108010` (green) is the first tile and the title tile of an inner page; `--color-fill-4` `#5133ab` (purple) is the other fill that carries text. Text on either, and on `--color-inverse` `#1a1a1a`, is `--color-inverse-text`. `--color-fill-2` `#e04000` (orange) and `--color-fill-3` `#1570a6` (blue) are icon tiles: an icon only, never running text, and the icon (`.ds-grid__icon`) sits on a round plate, `--color-inverse` mixed in at 40%, so that the layout stays readable when the palette is exchanged for one whose second or third fill is pale. On a fill the button is `.ds-button--inverse`: `--color-inverse-text` with `--color-fill-1` text.\n- `--color-accent` `#5133ab` (purple, white text) is the default tag, `--color-accent-alt` `#ffbb00` (yellow) the second: a 30% tint of it over `--color-surface` with a yellow outline and `--color-heading` text. Status: `--color-success` `#108010`, `--color-warning` `#e04000`, `--color-danger` `#e81020`, all with `--color-accent-text`.\n- `--color-notice` `#e8f0f0` with `--color-notice-text` `#106088`; the error notice is red on `--color-danger-surface` `#f8f8f8` with a red border.\n- Borders: `--color-border` `#d8e0e0` (table grid, panel outline, rail edge), `--color-border-muted` `#e0e0e0`; `--color-border-strong` and `--color-input-border` are the mid grey `#969696` (control outlines, the rule above a news item). The footer is light: `--color-surface-alt` with `--color-link` links and `--color-heading` titles; `--color-inverse` appears only as a tile (one mosaic tile and one stat).\n- One plain humanist sans at regular weight, after the 2014 payments page with the sizes of the corporate home page: `--font-body`, `--font-heading` and `--font-ui` are Source Sans Pro, Lucida Grande, Segoe UI (the references used Segoe UI and commercial faces). `--font-mono` is Consolas.\n- Dense: `--text-base` and `--text-ui` 14px at `--line-body` 1.5, `--text-small` 12px (meta, tags, breadcrumb, footer base), `--text-large` 16px (lead lines, news titles, footer titles).\n- Headings are regular weight and modest: `--weight-heading` and `--weight-display` 400; `--text-display` 38px (the first tile's title and the stat figures), `--text-h1` 26px (band titles, the inner page title, the dialog title), `--text-h2` 20px (tile titles, the quotation, the wordmark), `--text-h3` 16px. Hierarchy is size only.\n- `--weight-ui` is 400: buttons, tabs and navigation are not bold. `--weight-bold` 600 is for labels, table heads and row heads, news titles, panel and sidebar titles and the \"more\" link in a tile.\n- Sentence case, no tracking: `--ui-transform` and `--heading-transform` are `none`, both tracking tokens 0. All three link decorations are `none`.\n- Everything is square: `--radius-control`, `--radius-panel`, `--radius-page` and also `--radius-pill` are 0, so badges are rectangular tags. The mosaic parts its tiles by half of `--radius-page`, which is nothing here: with a rounder surface set the tiles separate just enough for their corners to read.\n- Buttons are solid: `--fill-button` is the flat `--color-button`, hovered 15% darker and ringed by `--shadow-control-hover`, a hard 1px line in `--color-border-strong`. The secondary button is a grey block: `--fill-button-secondary` is `--color-button-secondary` darkened 12%, inside a 2px outline. Panels and the dialog band are `--fill-panel`, the grey `--color-surface-alt`.\n- Lines are heavy: `--border-width` 2px for rules, the table grid and control outlines; `--border-width-strong` 4px for the current navigation item, the line under the tabs, the rule above a news item and the current rail marker.\n- One-off shades made with `color-mix()` because the vocabulary has no token: the ghost button border (`--color-inverse-text` at 50%), the icon plate (`--color-inverse` at 40%), the `--alt` badge tint (`--color-accent-alt` at 30% over `--color-surface`), the hovered and pressed destructive button (`--color-danger` at 85% over `--color-inverse-text` and over `--color-inverse`). The lead in the first tile, the source line under the quotation and idle breadcrumb links use `opacity: 0.8`.\n- Nothing is blurred and nothing casts a shadow at rest: apart from the hover ring every shadow is `none`, every fill a flat colour. `--focus-ring` is `1px dotted` in `--color-focus`. `--transition` is `none`.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, text colour and page fill. Holds the band, the views and the footer.\n- `.ds-sheet`: the one box of a view, on `--color-canvas` with a border, `--radius-page` and `--shadow-panel`. `.ds-sheet__cols` splits it into `.ds-sheet__side` and `.ds-sheet__main` (`--wide`: no side column); both stack their blocks 28px apart. `.ds-sheet__title` heads a block in the main column and may hold one `.ds-link` at its right.\n- `.ds-brand`: the site's mark and name, at the left of the band. `.ds-brand__mark` is a 42px tile dressed like the primary button (`--fill-button`, `--color-button-text`, `--radius-control`, `--shadow-control`) inside a faint ring, holding the mark as inline SVG; `.ds-brand__name` is the name in the heading font at `--text-h2` and `--weight-bold` in `--color-inverse-text`. The name and the mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the band: `.ds-nav__inner` with the brand and `.ds-nav__links` of `.ds-nav__link` (current item: `is-current`). In the specimen the current item is marked by the view that is showing, with one `:has()` rule per view; a project sets `is-current` itself.\n- `.ds-hero`: head of the home sheet. `.ds-hero__disc` with a `.ds-hero__icon`, then `.ds-hero__copy` with `.ds-hero__kicker`, `.ds-hero__title`, `.ds-hero__lead` and `.ds-hero__actions` (one primary and one `--secondary` button, both `--large`).\n- `.ds-page-header`: head of an inner sheet, used instead of `.ds-hero`. The breadcrumb, then `.ds-page-header__inner` with `.ds-page-header__copy` (`.ds-page-header__title`, one `.ds-page-header__text` line) and `.ds-page-header__actions`.\n- `.ds-prose`: running text in the serif: 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; `--more` appends a small chevron. `.ds-linkrow` lays links in a row.\n- `.ds-button`: flat button. Variants: `--secondary` (outlined), `--danger` (flat `--color-danger`, for destructive actions only; one per view), `--inverse` and `--ghost` (on a fill only), `--large`, `--small`. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow` spaces buttons.\n- `.ds-form`: vertical form. `.ds-form__row` puts fields side by side; `.ds-form__field` wraps `.ds-form__label` and one of `.ds-form__input`, `.ds-form__select`, `.ds-form__textarea`. Error: `is-error` on the input plus `.ds-form__error`. `.ds-form__hint`, `.ds-form__check` with `.ds-form__checkbox`, `.ds-form__actions`, `.ds-form__submit`.\n- `.ds-table`: compact data table in the UI font: a `--color-surface-strong` head over a strong rule, 1px rules between rows, alternate rows tinted. `.ds-table__num` right-aligns numbers; `.ds-table__caption` is a small note below. Wrap it in `.ds-table__wrap`; `.ds-table__foot` holds the pagination.\n- `.ds-list`: notes. Each `.ds-list__item` is a `.ds-list__date` block (`.ds-list__day` over the month) beside a `.ds-list__body` with `.ds-list__title`, `.ds-list__text` and `.ds-list__meta`.\n- `.ds-panel`: small box under a strong top edge in `--color-button`: `.ds-panel__title`, `.ds-panel__body`, optional `.ds-panel__figure`. It belongs in the side column.\n- `.ds-stat`: the strip of four figures across the sheet. Each `.ds-stat__item` centres a `.ds-stat__figure` over a small `.ds-stat__label`; items are divided by 1px rules.\n- `.ds-grid`: two columns of `.ds-grid__cell` cards, each a `.ds-grid__tile` block (`--2`, `--3`, `--4` for the other fills) with a `.ds-grid__icon` on its plate over `.ds-grid__copy` with `.ds-grid__title` and `.ds-grid__text`. A cell may be a link.\n- `.ds-tabs`: joined outlined cells; `.ds-tabs__tab` with `is-current` is tinted over a strong lower edge in `--color-button`. It stands directly on the table.\n- `.ds-badge`: small tag with `--radius-pill` corners. `--alt`, `--quiet`, and the status variants `--success`, `--warning`, `--danger`. `.ds-badgerow` for several.\n- `.ds-sidebar`: block for the side column: `.ds-sidebar__title`, `.ds-sidebar__list` of ruled `.ds-sidebar__item` rows with optional `.ds-sidebar__count`; the current row is `is-current`.\n- `.ds-notice`: message strip with a strong left edge; `--error` is `--color-danger-surface` with a danger border. `.ds-notice__title` for the bold lead-in. `.ds-noticerow` stacks notices.\n- `.ds-pagination`: row of `.ds-pagination__link`; `is-current` is filled like the primary button, `is-disabled` is grey.\n- `.ds-breadcrumb`: small trail of `.ds-breadcrumb__item` separated by chevrons; the last item is `.ds-breadcrumb__current`.\n- `.ds-dialog`: dimmed block (`--color-overlay`) centring a `.ds-dialog__box` with `.ds-dialog__head` (`.ds-dialog__title`, `.ds-dialog__close`), `.ds-dialog__body` and right-aligned `.ds-dialog__actions`.\n- `.ds-empty`: centred message in an outlined box: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one button. It stands where a list would be.\n- `.ds-footer`: the inverted block under the page: `.ds-footer__inner` centres the `.ds-footer__name`, a row of `.ds-footer__links` with `.ds-footer__link`, and the `.ds-footer__base` line.\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 navigation on the first fill: the toggle is `--color-inverse-text` at 70% like the links, and the list hangs from its right edge. In a narrow window 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 in the side column for the questions asked before writing; the heads are bold at `--text-base`.\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 trade word in running text. 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 in a side `.ds-panel` for a choice that applies at once, such as letters by email.\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. Here the side column shows what the workshop does most as four of them, one under another: `--1`, `--2`, `--3` and `--4` fill the bar with `--color-fill-2`, `--color-fill-4`, `--color-accent` and `--color-fill-1`.\n- `.ds-avatar`: a person or account drawn as a flat disc `--size-avatar` across with two initials, `--color-accent-text` on `--fill-accent`; `--2` uses the button colours, `--3` is `--color-heading` on `--color-surface-strong`. Use it for the author of a note and of a quote.\n- `.ds-byline`: an avatar beside `.ds-byline__name` and `.ds-byline__role`, for the author of a quote, a client or an account.\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 each slide is a shopkeeper's `.ds-carousel__quote` in the heading font at `--text-h3` with a `.ds-byline`, set left under a `.ds-sheet__title`, with round dots at the left.\n\n## Never\n\n- `content-width <= 940px`: all content stays inside the sheet.\n- `font-weight <= 600`: headings are regular; 600 is only for labels and small titles.\n- `font-size >= 12px`: meta text and tags are the smallest text.\n- `font-size <= 38px`: the first tile's title is the largest text.\n- `font-families <= 2`: one sans-serif family, plus monospace for code.\n- `line-height <= 1.5`: body text is set at 1.5.\n- `letter-spacing = 0`: text is not tracked.\n- `uppercase-text <= 0%`: navigation, buttons and headings are in sentence case.\n- `underlined-links <= 0%`: no reference underlines links.\n- `border-radius <= 0px`: tiles, buttons, panels and tags are square; only the icon plate and the back button are circles.\n- `box-shadow-blur <= 0px`: the top rule of a panel and the ring of a hovered button are hard lines.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 0%`: every background is one solid colour.\n- `border-width <= 5px`: rules are 1px; 5px is the marker bar.\n- `animation = none`: nothing moves by itself.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new page is one `.ds-sheet` with a `.ds-page-header` and `.ds-sheet__cols`; never add a second sheet or a band below the first. Small facts and filters go in the side column as a `.ds-sidebar` or a `.ds-panel`, the work in the main column under a `.ds-sheet__title`. Every corner takes `--radius-control`, `--radius-panel`, `--radius-pill` or `--radius-page`. Text goes on `--color-fill-1` only; the other fills carry an icon on its plate. New actions are `--color-button`. 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: 940px;\n  --size-side: 260px;\n  --size-overlap: 112px;\n  --size-disc: 120px;\n  --size-date: 56px;\n  --size-tile: 126px;\n  --size-icon: 42px;\n  --size-dialog: 420px;\n  --space-1: 3px;\n  --space-2: 7px;\n  --space-3: 14px;\n  --space-4: 21px;\n  --space-5: 28px;\n  --space-6: 42px;\n  --space-7: 70px;\n  --size-avatar: 42px;\n  --size-switch: 42px;\n  --size-knob: 15px;\n  --size-menu: 210px;\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/* nav: a band of the first fill; the sheet below is pulled up over its lower part */\n.ds-nav {\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  padding: var(--space-4) var(--space-4) var(--size-overlap);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__inner {\n  max-width: var(--size-page);\n  margin: 0 auto;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-5);\n  padding-bottom: var(--space-4);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: inherit;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--space-6);\n  height: var(--space-6);\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) color-mix(in srgb, var(--color-inverse-text) 50%, transparent);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 70%;\n  height: 70%;\n}\n.ds-brand__name {\n  color: var(--color-inverse-text);\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.ds-nav__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-1) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-2) 0;\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  opacity: 0.7;\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  opacity: 1;\n}\n.ds-nav__link.is-current {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n/* the current view marks its navigation item; one note marks Notes */\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"] {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"] {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n.ds-page:has(#work:target) .ds-nav__link[href=\"#work\"] {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n.ds-page:has(#notes:target) .ds-nav__link[href=\"#notes\"] {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n.ds-page:has(#note:target) .ds-nav__link[href=\"#notes\"] {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n.ds-page:has(#contact:target) .ds-nav__link[href=\"#contact\"] {\n  opacity: 1;\n  border-bottom-color: currentColor;\n}\n\n/* sheet: the one box every view stands in, lying over the foot of the band */\n.ds-view {\n  padding: 0 var(--space-4);\n}\n.ds-sheet {\n  max-width: var(--size-page);\n  margin: calc(var(--size-overlap) * -1) auto var(--space-6);\n  background: var(--color-canvas);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-sheet__cols {\n  display: grid;\n  grid-template-columns: var(--size-side) minmax(0, 1fr);\n}\n.ds-sheet__side {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n  padding: var(--space-5);\n  background: var(--color-surface-alt);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom-left-radius: calc(var(--radius-page) - var(--border-width));\n}\n.ds-sheet__main {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n  padding: var(--space-5) var(--space-6) var(--space-6);\n}\n.ds-sheet__title {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-sheet__title .ds-link {\n  float: right;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n  line-height: var(--line-body);\n  text-transform: none;\n}\n\n/* hero: the head of the home sheet, a round picture beside the introduction */\n.ds-hero {\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  padding: var(--space-6);\n}\n.ds-hero__disc {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 var(--size-disc);\n  height: var(--size-disc);\n  background: var(--color-fill-2);\n  color: var(--color-inverse-text);\n  border-radius: 50%;\n}\n.ds-hero__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  box-sizing: content-box;\n  padding: var(--space-3);\n  background: color-mix(in srgb, var(--color-inverse) 40%, transparent);\n  border-radius: 50%;\n}\n.ds-hero__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-hero__kicker {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\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  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-4);\n  max-width: 52ch;\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  align-items: center;\n}\n\n/* page header: the head of an inner sheet */\n.ds-page-header {\n  padding: var(--space-4) var(--space-6) var(--space-5);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: calc(var(--radius-page) - var(--border-width)) calc(var(--radius-page) - var(--border-width)) 0 0;\n}\n.ds-page-header__inner {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-5);\n  margin-top: var(--space-4);\n}\n.ds-page-header__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__title .ds-badge {\n  margin-left: var(--space-2);\n  letter-spacing: 0;\n}\n.ds-page-header__text {\n  margin: 0;\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 h3 {\n  font-size: var(--text-h3);\n  margin-top: var(--space-4);\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-body);\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  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  font-weight: var(--weight-heading);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-link);\n}\n.ds-link--more::after {\n  content: \" \\203A\";\n}\n.ds-linkrow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-3);\n}\n\n/* buttons */\n.ds-button {\n  display: inline-block;\n  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-align: center;\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  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-notice);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--secondary:active,\n.ds-button--secondary.is-active {\n  background: var(--color-notice);\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:hover,\n.ds-button--inverse.is-hover {\n  background: var(--color-notice);\n  color: var(--color-fill-1);\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-large);\n  line-height: var(--line-heading);\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  cursor: default;\n}\n.ds-buttonrow {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n\n/* form */\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-2);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-form__label {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  transition: var(--transition);\n}\n.ds-form__textarea {\n  min-height: 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: var(--focus-ring);\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-form__checkbox {\n  margin: 0;\n  accent-color: var(--color-button);\n}\n.ds-form__actions {\n  display: flex;\n  gap: var(--space-3);\n}\n.ds-form__submit {\n  flex: 1 1 auto;\n}\n\n/* table: rules between rows, no vertical lines, no outer box */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  border-radius: var(--radius-panel);\n  background: var(--color-surface);\n  color: var(--color-text);\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3);\n  text-align: left;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table thead th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  font-weight: var(--weight-bold);\n}\n.ds-table tbody th {\n  color: var(--color-heading);\n  font-weight: var(--weight-body);\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 .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__caption {\n  caption-side: bottom;\n  padding-top: var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  text-align: left;\n}\n\n.ds-table__wrap {\n  overflow-x: auto;\n}\n.ds-table__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-top: var(--space-4);\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/* notice */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border: var(--border-width) var(--border-style) var(--color-danger);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-noticerow {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__link {\n  display: block;\n  min-width: var(--space-5);\n  padding: var(--space-1) var(--space-2);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  border-color: var(--color-border);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  font-weight: var(--weight-ui);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"\\203A\";\n  margin-right: var(--space-2);\n  color: var(--color-border-strong);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n}\n\n/* dialog: a flat white box on a dimmed block; no shadow */\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-4) var(--space-5) 0;\n}\n.ds-dialog__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\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-3) var(--space-5) var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-5);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* empty state */\n.ds-empty {\n  padding: var(--space-6) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\n  text-align: center;\n}\n.ds-empty__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-bottom: var(--space-3);\n  color: var(--color-border-strong);\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-heading);\n  line-height: var(--line-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-4);\n}\n\n/* list: notes, each led by a small date block */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: grid;\n  grid-template-columns: var(--size-date) minmax(0, 1fr);\n  gap: var(--space-4);\n  padding: var(--space-3) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__date {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  align-self: start;\n  height: var(--size-date);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  text-transform: var(--ui-transform);\n}\n.ds-list__day {\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n}\n.ds-list__body {\n  min-width: 0;\n}\n.ds-list__title {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__text {\n  margin: var(--space-1) 0 0;\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* panel: a small box under a strong top edge */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-button);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4) 0;\n  color: var(--color-heading-alt);\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-2) var(--space-4) var(--space-4);\n  font-size: var(--text-ui);\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-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n}\n\n/* stats: one strip across the sheet, the figures centred in equal parts */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__item {\n  min-width: 0;\n  padding: var(--space-4) var(--space-3);\n  text-align: center;\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__item:first-child {\n  border-left: 0;\n}\n.ds-stat__figure {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__label {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  text-transform: var(--ui-transform);\n}\n\n/* grid: outlined cards, a flat colour block above a caption */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  display: block;\n  min-width: 0;\n  color: inherit;\n  text-decoration: none;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__tile {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: var(--size-tile);\n  background: var(--color-fill-1);\n  color: var(--color-inverse-text);\n  border-radius: calc(var(--radius-page) - var(--border-width)) calc(var(--radius-page) - var(--border-width)) 0 0;\n}\n.ds-grid__tile--2 {\n  background: var(--color-fill-2);\n}\n.ds-grid__tile--3 {\n  background: var(--color-fill-3);\n}\n.ds-grid__tile--4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__icon {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  box-sizing: content-box;\n  padding: var(--space-3);\n  background: color-mix(in srgb, var(--color-inverse) 40%, transparent);\n  border-radius: 50%;\n}\n.ds-grid__copy {\n  padding: var(--space-3) var(--space-4);\n}\n.ds-grid__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-grid__text {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n}\n\n/* meter: a skill or share drawn as a flat bar */\n\n/* tabs: joined outlined cells, the current one on a strong lower edge */\n.ds-tabs {\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-tabs__tab {\n  display: block;\n  margin-right: calc(var(--border-width) * -1);\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-link);\n}\n.ds-tabs__tab.is-current {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-weight: var(--weight-ui);\n  border-bottom-color: var(--color-button);\n}\n\n/* sidebar: facts and links in the side column */\n.ds-sidebar {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading-alt);\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-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-sidebar__item.is-current {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-sidebar__count {\n  float: right;\n  color: var(--color-text-muted);\n}\n\n/* footer: one centred line on the inverted block */\n.ds-footer {\n  background: var(--fill-inverse);\n  color: var(--color-text-muted);\n  padding: var(--space-5) var(--space-4);\n  font-family: var(--font-ui);\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__name {\n  margin: 0 0 var(--space-2);\n  color: var(--color-inverse-text);\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}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-1) var(--space-4);\n  margin: 0 0 var(--space-2);\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-text-muted);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  color: var(--color-inverse-text);\n}\n.ds-footer__base {\n  margin: 0;\n  font-size: var(--text-small);\n}\n\n/* this layout's forms of the shared pieces */\n.ds-prose h1 {\n  font-size: var(--text-h2);\n}\n.ds-prose h2 {\n  font-size: var(--text-large);\n  margin-top: var(--space-4);\n}\n.ds-prose h3 {\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n}\n.ds-prose__lead {\n  font-weight: var(--weight-body);\n}\n.ds-table {\n  font-family: var(--font-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-3);\n}\n.ds-table thead th {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n.ds-table__foot {\n  margin-top: var(--space-3);\n}\n.ds-breadcrumb,\n.ds-notice {\n  font-family: var(--font-ui);\n}\n.ds-notice {\n  border-left: var(--border-width-strong) var(--border-style) var(--color-notice-text);\n}\n.ds-notice--error {\n  border-left: var(--border-width-strong) var(--border-style) var(--color-danger);\n}\n.ds-dialog {\n  padding: var(--space-5) var(--space-4);\n}\n.ds-dialog__head {\n  padding: var(--space-4) var(--space-4) 0;\n}\n.ds-dialog__body {\n  padding: var(--space-2) var(--space-4) var(--space-4);\n}\n.ds-dialog__actions {\n  padding: var(--space-3) var(--space-4);\n}\n.ds-empty {\n  padding: var(--space-5) var(--space-4);\n}\n\n/* menu: a drop-down under a navigation item, a <details>; a flat list in a border, opened by its toggle */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-2) 0;\n  color: var(--color-inverse-text);\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n  text-shadow: var(--shadow-text);\n  list-style: none;\n  opacity: 0.7;\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  opacity: 1;\n}\n.ds-menu__toggle::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__toggle::after {\n  content: \"\";\n  flex: 0 0 auto;\n  width: calc(var(--space-1) + var(--border-width));\n  height: calc(var(--space-1) + var(--border-width));\n  margin-top: calc(0 - var(--space-1) / 2);\n  border-right: var(--border-width) var(--border-style) currentColor;\n  border-bottom: var(--border-width) var(--border-style) currentColor;\n  transform: rotate(45deg);\n}\n.ds-menu__toggle:focus-visible,\n.ds-menu__toggle.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  right: 0;\n  z-index: 5;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  text-align: left;\n}\n.ds-menu__item {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-menu__item:hover,\n.ds-menu__item.is-hover {\n  background: var(--color-surface-alt);\n  color: var(--color-link);\n}\n.ds-menu__item:focus-visible,\n.ds-menu__item.is-focus {\n  outline: var(--focus-ring);\n}\n\n/* accordion: sections that open and close, divided by rules; a plus opens, a minus closes */\n.ds-accordion {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  list-style: none;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  flex: none;\n  align-self: center;\n  display: inline-block;\n  width: calc(var(--space-3) - var(--space-2) / 4);\n  height: calc(var(--space-3) - var(--space-2) / 4);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  color: var(--color-link);\n}\n.ds-accordion__item[open] > .ds-accordion__head::after {\n  clip-path: inset(calc(50% - var(--space-2) / 8) 0);\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-link);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: 72ch;\n  padding: 0 0 var(--space-4);\n  color: var(--color-text);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* tooltip: a small flat box above its trigger, shown on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-block;\n  border-bottom: var(--border-width) dotted currentColor;\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 6;\n  display: none;\n  width: max-content;\n  max-width: min(32ch, 70vw);\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  letter-spacing: 0;\n  text-align: left;\n  text-transform: none;\n  white-space: normal;\n}\n.ds-tooltip__tip::after {\n  content: \"\";\n  position: absolute;\n  top: calc(100% - var(--space-1));\n  left: var(--space-3);\n  width: var(--space-2);\n  height: var(--space-2);\n  background: var(--fill-inverse);\n  transform: rotate(45deg);\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n\n/* switch: an on/off control over a checkbox; the knob slides to the right and the track takes the button fill */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  flex: 0 0 auto;\n  width: var(--size-switch);\n  height: calc(var(--size-switch) / 2);\n  background: color-mix(in srgb, var(--color-text) 30%, transparent);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  left: calc((var(--size-switch) / 2 - var(--size-knob)) / 2);\n  width: var(--size-knob);\n  height: var(--size-knob);\n  background: var(--color-button-text);\n  border-radius: var(--radius-pill);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch.is-on .ds-switch__track {\n  background: var(--fill-button);\n}\n.ds-switch__input:checked + .ds-switch__track::after,\n.ds-switch.is-on .ds-switch__track::after {\n  left: calc(var(--size-switch) / 2 + (var(--size-switch) / 2 - var(--size-knob)) / 2);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch.is-focus .ds-switch__track {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width);\n}\n.ds-switch__input:disabled + .ds-switch__track,\n.ds-switch.is-disabled .ds-switch__track {\n  background: var(--color-disabled);\n}\n.ds-switch__label {\n  min-width: 0;\n}\n\n/* progress: a thin flat bar on a track; no stripes, no gloss, no movement */\n.ds-progress {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-progress__head {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-2);\n  color: var(--color-text);\n}\n.ds-progress__value {\n  color: var(--color-text-muted);\n  font-variant-numeric: tabular-nums;\n}\n.ds-progress__bar {\n  display: block;\n  width: 100%;\n  height: var(--space-2);\n  appearance: none;\n  overflow: hidden;\n  background: var(--color-border);\n  border: 0;\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar::-webkit-progress-bar {\n  background: transparent;\n}\n.ds-progress__bar::-webkit-progress-value {\n  background: var(--fill-button);\n}\n.ds-progress__bar::-moz-progress-bar {\n  background: var(--fill-button);\n}\n.ds-progress__bar--success::-moz-progress-bar {\n  background: var(--color-success);\n}\n.ds-progress__bar--warning::-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/* byline: an avatar beside a name and a line about the person */\n.ds-byline {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-3);\n  text-align: left;\n}\n.ds-byline__text {\n  min-width: 0;\n}\n.ds-byline__name {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-byline__role {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\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: flex-start;\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\n.ds-carousel__quote {\n  max-width: 40ch;\n  margin: 0 0 var(--space-4);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-carousel .ds-byline {\n  justify-content: flex-start;\n  margin: 0;\n}\n/* the bars of the side column take the block colours */\n.ds-progress + .ds-progress {\n  margin-top: var(--space-3);\n}\n.ds-progress__bar--1::-webkit-progress-value {\n  background: var(--color-fill-2);\n}\n.ds-progress__bar--1::-moz-progress-bar {\n  background: var(--color-fill-2);\n}\n.ds-progress__bar--2::-webkit-progress-value {\n  background: var(--color-fill-4);\n}\n.ds-progress__bar--2::-moz-progress-bar {\n  background: var(--color-fill-4);\n}\n.ds-progress__bar--3::-webkit-progress-value {\n  background: var(--color-accent);\n}\n.ds-progress__bar--3::-moz-progress-bar {\n  background: var(--color-accent);\n}\n.ds-progress__bar--4::-webkit-progress-value {\n  background: var(--color-fill-1);\n}\n.ds-progress__bar--4::-moz-progress-bar {\n  background: var(--color-fill-1);\n}\n.ds-panel__body .ds-byline {\n  margin-bottom: var(--space-2);\n}\n.ds-panel__body .ds-switch {\n  margin-bottom: var(--space-3);\n}\n\n/* narrow windows: the side column lies under the main one, the picture above the introduction, tables scroll inside their own box */\n@media (max-width: 760px) {\n  .ds-nav {\n    padding: var(--space-3) var(--space-3) var(--size-overlap);\n  }\n  .ds-nav__inner {\n    padding-bottom: var(--space-2);\n  }\n  .ds-nav__links {\n    gap: var(--space-1) var(--space-4);\n  }\n  .ds-view {\n    padding: 0 var(--space-2);\n  }\n  .ds-sheet {\n    margin-bottom: var(--space-4);\n  }\n  .ds-sheet__cols {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-sheet__side {\n    order: 2;\n    padding: var(--space-4) var(--space-3);\n    border-right: 0;\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-sheet__main {\n    padding: var(--space-4) var(--space-3);\n  }\n  .ds-hero {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-4);\n    padding: var(--space-4) var(--space-3);\n  }\n  .ds-hero__disc {\n    flex: 0 0 auto;\n    width: var(--size-disc);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-page-header {\n    padding: var(--space-3);\n  }\n  .ds-page-header__inner {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-3);\n    margin-top: var(--space-3);\n  }\n  .ds-page-header__copy {\n    flex: 0 0 auto;\n  }\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-stat__item:nth-child(odd) {\n    border-left: 0;\n  }\n  .ds-stat__item:nth-child(n + 3) {\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-tabs {\n    overflow-x: auto;\n  }\n  .ds-tabs__tab {\n    padding: var(--space-2) var(--space-3);\n  }\n  .ds-table {\n    min-width: 60ch;\n  }\n  .ds-form__row {\n    flex-direction: column;\n    gap: var(--space-3);\n  }\n  .ds-dialog {\n    padding: var(--space-3);\n  }\n  .ds-dialog__actions {\n    flex-wrap: wrap;\n  }\n  .ds-nav__links {\n    position: relative;\n  }\n  .ds-menu {\n    position: static;\n  }\n  .ds-menu__list {\n    top: 100%;\n    right: auto;\n    left: 0;\n  }\n  .ds-tooltip {\n    position: static;\n  }\n  .ds-tooltip__tip,\n  .ds-tooltip--end .ds-tooltip__tip {\n    right: var(--space-3);\n    bottom: auto;\n    left: var(--space-3);\n    width: auto;\n    max-width: none;\n    margin-top: var(--space-1);\n  }\n  .ds-tooltip__tip::after {\n    display: none;\n  }\n}\n\n/* phones: the five entries spread over the whole row under the brand */\n@media (max-width: 760px) {\n  .ds-nav__links {\n    flex: 0 0 100%;\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 personal site 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    <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\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">About</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#work\">Work</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#notes\">Notes</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#contact\">Contact</a></li>\n      <li>\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=\"#work\">All commissions</a></li>\n            <li><a class=\"ds-menu__item\" href=\"#note\">The latest note</a></li>\n            <li><a class=\"ds-menu__item\" href=\"#contact\">Prices and dates</a></li>\n            <li><a class=\"ds-menu__item\" href=\"#notes\">Notes by email</a></li>\n          </ul>\n        </details>\n      </li>\n    </ul>\n  </div>\n</header>\n\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <div class=\"ds-sheet\">\n    <div class=\"ds-hero\" data-component=\"hero\">\n      <div class=\"ds-hero__disc\" aria-hidden=\"true\">\n        <svg class=\"ds-hero__icon\" viewBox=\"0 0 48 48\" width=\"42\" height=\"42\"><path d=\"M30 6l12 12-22 22-14 2 2-14z M26 10l12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n      </div>\n      <div class=\"ds-hero__copy\">\n        <p class=\"ds-hero__kicker\">Sign painting and lettering, since 2009</p>\n        <h1 class=\"ds-hero__title\">Shop fronts, painted by hand</h1>\n        <p class=\"ds-hero__lead\">chronoskin is a workshop of two. We draw, gild and paint signs for bakeries, bars and bookshops, and keep notes on how it is done.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button ds-button--large\" href=\"#contact\">Ask about a sign</a>\n          <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#work\">See the work</a>\n        </div>\n      </div>\n    </div>\n\n    <ul class=\"ds-stat\" data-component=\"stats\">\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">143</span><span class=\"ds-stat__label\">Signs painted</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">6</span><span class=\"ds-stat__label\">Years at the bench</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">11</span><span class=\"ds-stat__label\">Towns</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">3</span><span class=\"ds-stat__label\">Weeks to book</span></li>\n    </ul>\n\n    <div class=\"ds-sheet__cols\">\n      <div class=\"ds-sheet__side\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">At a glance</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">Two</span>People</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">By the canal</span>Workshop</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">From June</span>Next free</li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#work\">All commissions</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#notes\">Workshop notes</a></li>\n          </ul>\n        </aside>\n        <div>\n          <h2 class=\"ds-sidebar__title\">What we do most</h2>\n          <div class=\"ds-progress\">\n            <div class=\"ds-progress__head\"><span>Fascia lettering</span><span class=\"ds-progress__value\">90%</span></div>\n            <progress class=\"ds-progress__bar ds-progress__bar--1\" value=\"90\" max=\"100\">90%</progress>\n          </div>\n          <div class=\"ds-progress\">\n            <div class=\"ds-progress__head\"><span>Window gilding</span><span class=\"ds-progress__value\">75%</span></div>\n            <progress class=\"ds-progress__bar ds-progress__bar--2\" value=\"75\" max=\"100\">75%</progress>\n          </div>\n          <div class=\"ds-progress\">\n            <div class=\"ds-progress__head\"><span>Menu boards</span><span class=\"ds-progress__value\">60%</span></div>\n            <progress class=\"ds-progress__bar ds-progress__bar--3\" value=\"60\" max=\"100\">60%</progress>\n          </div>\n          <div class=\"ds-progress\">\n            <div class=\"ds-progress__head\"><span>Murals</span><span class=\"ds-progress__value\">40%</span></div>\n            <progress class=\"ds-progress__bar ds-progress__bar--4\" value=\"40\" max=\"100\">40%</progress>\n          </div>\n        </div>\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h2 class=\"ds-panel__title\">A day on site</h2>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">$480</span>\n            <p>for both of us, paint and gold included. Most shop fronts take two days.</p>\n            <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#contact\">Ask for a quote</a>\n          </div>\n        </section>\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">On the bench now</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">Week 2</span>The tannery bar</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">Drawing</span>A florist's window</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">Quoted</span>Two delivery vans</li>\n          </ul>\n        </aside>\n      </div>\n\n      <div class=\"ds-sheet__main\">\n        <div>\n          <h2 class=\"ds-sheet__title\">Recent work <a class=\"ds-link\" href=\"#work\">All commissions</a></h2>\n          <div class=\"ds-grid\" data-component=\"grid\">\n            <a class=\"ds-grid__cell\" href=\"#work\">\n              <div class=\"ds-grid__tile\">\n                <svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" width=\"42\" height=\"42\" aria-hidden=\"true\"><path d=\"M6 20l4-12h28l4 12 M8 20v20h32V20 M6 20h36 M20 40V28h8v12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n              </div>\n              <div class=\"ds-grid__copy\">\n                <h3 class=\"ds-grid__title\">Bakery fascia</h3>\n                <p class=\"ds-grid__text\">Enamel on board, four metres</p>\n              </div>\n            </a>\n            <a class=\"ds-grid__cell\" href=\"#work\">\n              <div class=\"ds-grid__tile ds-grid__tile--2\">\n                <svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" width=\"42\" height=\"42\" aria-hidden=\"true\"><path d=\"M8 8h32v32H8z M24 8v32 M8 24h32\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n              </div>\n              <div class=\"ds-grid__copy\">\n                <h3 class=\"ds-grid__title\">Bookshop window</h3>\n                <p class=\"ds-grid__text\">Gold leaf on glass, reversed</p>\n              </div>\n            </a>\n            <a class=\"ds-grid__cell\" href=\"#work\">\n              <div class=\"ds-grid__tile ds-grid__tile--3\">\n                <svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" width=\"42\" height=\"42\" aria-hidden=\"true\"><path d=\"M12 6h24v36H12z M18 14h12 M18 22h12 M18 30h8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n              </div>\n              <div class=\"ds-grid__copy\">\n                <h3 class=\"ds-grid__title\">Bar menu boards</h3>\n                <p class=\"ds-grid__text\">Chalk paint, six panels</p>\n              </div>\n            </a>\n            <a class=\"ds-grid__cell\" href=\"#work\">\n              <div class=\"ds-grid__tile ds-grid__tile--4\">\n                <svg class=\"ds-grid__icon\" viewBox=\"0 0 48 48\" width=\"42\" height=\"42\" aria-hidden=\"true\"><path d=\"M6 40V14l12-8 12 8 12-8v34z M18 6v34 M30 14v26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n              </div>\n              <div class=\"ds-grid__copy\">\n                <h3 class=\"ds-grid__title\">Gable end mural</h3>\n                <p class=\"ds-grid__text\">Masonry paint, two storeys</p>\n              </div>\n            </a>\n          </div>\n        </div>\n\n        <div>\n          <h2 class=\"ds-sheet__title\">From the notes <a class=\"ds-link\" href=\"#notes\">All notes</a></h2>\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__date\"><span class=\"ds-list__day\">12</span>Mar</span>\n              <div class=\"ds-list__body\">\n                <a class=\"ds-list__title\" href=\"#note\">Why the first coat is always grey</a>\n                <p class=\"ds-list__text\">A neutral ground shows every wobble before the colour hides it.</p>\n                <span class=\"ds-list__meta\">Process · 4 minutes · 6 comments</span>\n              </div>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__date\"><span class=\"ds-list__day\">2</span>Mar</span>\n              <div class=\"ds-list__body\">\n                <a class=\"ds-list__title\" href=\"#note\">Three brushes that do most of the work</a>\n                <p class=\"ds-list__text\">A flat, a liner and a worn-out quill we cannot replace.</p>\n                <span class=\"ds-list__meta\">Tools · 3 minutes · 2 comments</span>\n              </div>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__date\"><span class=\"ds-list__day\">19</span>Feb</span>\n              <div class=\"ds-list__body\">\n                <a class=\"ds-list__title\" href=\"#note\">Gilding in a cold shop</a>\n                <p class=\"ds-list__text\">What the size does below ten degrees, and how long to wait.</p>\n                <span class=\"ds-list__meta\">Process · 6 minutes · 9 comments</span>\n              </div>\n            </li>\n          </ul>\n        </div>\n        <div>\n          <h2 class=\"ds-sheet__title\">From the shops</h2>\n          <div class=\"ds-carousel\">\n            <input class=\"ds-carousel__pick\" type=\"radio\" name=\"shops\" id=\"shop-1\" aria-label=\"First quote\" checked>\n            <input class=\"ds-carousel__pick\" type=\"radio\" name=\"shops\" id=\"shop-2\" aria-label=\"Second quote\">\n            <input class=\"ds-carousel__pick\" type=\"radio\" name=\"shops\" id=\"shop-3\" aria-label=\"Third quote\">\n            <div class=\"ds-carousel__slides\">\n              <figure class=\"ds-carousel__slide\">\n                <blockquote class=\"ds-carousel__quote\">People stop to photograph the fascia. Then they come in and buy bread.</blockquote>\n                <figcaption class=\"ds-byline\">\n                  <span class=\"ds-avatar\">CB</span>\n                  <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">Owner of the corner bakery</span><span class=\"ds-byline__role\">Fascia lettering, 2015</span></span>\n                </figcaption>\n              </figure>\n              <figure class=\"ds-carousel__slide\">\n                <blockquote class=\"ds-carousel__quote\">The gold still catches the last of the light at closing time, two winters on.</blockquote>\n                <figcaption class=\"ds-byline\">\n                  <span class=\"ds-avatar ds-avatar--2\">QB</span>\n                  <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">A bookseller on Quarry Lane</span><span class=\"ds-byline__role\">Window gilding, 2013</span></span>\n                </figcaption>\n              </figure>\n              <figure class=\"ds-carousel__slide\">\n                <blockquote class=\"ds-carousel__quote\">They redrew our menu boards in an afternoon and nobody has asked what a flat white is since.</blockquote>\n                <figcaption class=\"ds-byline\">\n                  <span class=\"ds-avatar ds-avatar--3\">TB</span>\n                  <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">Manager of the tannery bar</span><span class=\"ds-byline__role\">Menu boards, 2014</span></span>\n                </figcaption>\n              </figure>\n            </div>\n            <div class=\"ds-carousel__dots\">\n              <label class=\"ds-carousel__dot\" for=\"shop-1\" title=\"First quote\"></label>\n              <label class=\"ds-carousel__dot\" for=\"shop-2\" title=\"Second quote\"></label>\n              <label class=\"ds-carousel__dot\" for=\"shop-3\" title=\"Third quote\"></label>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"work\">\n  <div class=\"ds-sheet\">\n    <header class=\"ds-page-header\" data-component=\"page-header\">\n      <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">About</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#work\">Work</a></li>\n        <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">2015</li>\n      </ol>\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Work</h1>\n          <p class=\"ds-page-header__text\">Every commission of the year, finished or still on the bench.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button\" href=\"#contact\">Ask about a sign</a>\n        </div>\n      </div>\n    </header>\n    <div class=\"ds-sheet__cols\">\n      <div class=\"ds-sheet__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">By kind</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\"><span class=\"ds-sidebar__count\">23</span>Everything</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">11</span><a class=\"ds-link\" href=\"#work\">Fascia lettering</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">6</span><a class=\"ds-link\" href=\"#work\">Window gilding</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">4</span><a class=\"ds-link\" href=\"#work\">Menu boards</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">2</span><a class=\"ds-link\" href=\"#work\">Murals</a></li>\n          </ul>\n        </aside>\n        <div>\n          <h2 class=\"ds-sidebar__title\">Labels</h2>\n          <div class=\"ds-badgerow\" data-component=\"badge\">\n            <span class=\"ds-badge\">New</span>\n            <span class=\"ds-badge ds-badge--alt\">Gold leaf</span>\n            <span class=\"ds-badge ds-badge--quiet\">23</span>\n            <span class=\"ds-badge ds-badge--success\">Finished</span>\n            <span class=\"ds-badge ds-badge--warning\">On the bench</span>\n            <span class=\"ds-badge ds-badge--danger\">Postponed</span>\n          </div>\n        </div>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Next free week</h2>\n          <div class=\"ds-panel__body\">\n            <span class=\"ds-panel__figure\">1 June</span>\n            <p>Outdoor work is booked by the dry week, indoor work by the day.</p>\n            <a class=\"ds-link ds-link--more\" href=\"#contact\">Ask for it</a>\n          </div>\n        </section>\n      </div>\n      <div class=\"ds-sheet__main\">\n        <div>\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#work\">2015</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#work\">2014</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#work\">2013</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#work\">Earlier</a></li>\n          </ul>\n          <div class=\"ds-table__wrap\">\n            <table class=\"ds-table\" data-component=\"table\">\n              <caption class=\"ds-table__caption\">Lengths are of the lettered line. Showing 5 of 23 commissions.</caption>\n              <thead>\n                <tr>\n                  <th scope=\"col\">Commission</th>\n                  <th scope=\"col\">Kind</th>\n                  <th scope=\"col\">Status</th>\n                  <th scope=\"col\" class=\"ds-table__num\">Metres</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#note\">Corner bakery</a></th><td>Fascia lettering</td><td><span class=\"ds-badge ds-badge--success\">Finished</span></td><td class=\"ds-table__num\">4.2</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#note\">Quarry Lane bookshop</a></th><td>Window gilding</td><td><span class=\"ds-badge ds-badge--success\">Finished</span></td><td class=\"ds-table__num\">1.8</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#note\">The tannery bar</a></th><td>Menu boards</td><td><span class=\"ds-badge ds-badge--warning\">On the bench</span></td><td class=\"ds-table__num\">7.5</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#note\">Northgate dairy</a></th><td>Mural</td><td><span class=\"ds-badge ds-badge--danger\">Postponed</span></td><td class=\"ds-table__num\">12.0</td></tr>\n                <tr><th scope=\"row\"><a class=\"ds-link\" href=\"#note\">Harbour chandlery</a></th><td>Fascia lettering</td><td><span class=\"ds-badge ds-badge--success\">Finished</span></td><td class=\"ds-table__num\">5.6</td></tr>\n              </tbody>\n            </table>\n          </div>\n          <div class=\"ds-table__foot\">\n            <ul class=\"ds-pagination\" data-component=\"pagination\">\n              <li><a class=\"ds-pagination__link is-disabled\" href=\"#work\">‹ Newer</a></li>\n              <li><a class=\"ds-pagination__link is-current\" href=\"#work\">1</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#work\">2</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#work\">3</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#work\">Older ›</a></li>\n            </ul>\n          </div>\n        </div>\n        <div>\n          <h2 class=\"ds-sheet__title\">Waiting list</h2>\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <svg class=\"ds-empty__icon\" viewBox=\"0 0 48 48\" width=\"42\" height=\"42\" aria-hidden=\"true\"><path d=\"M8 12h32v28H8z M8 20h32 M16 6v10 M32 6v10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>\n            <h3 class=\"ds-empty__title\">Nobody is waiting</h3>\n            <p class=\"ds-empty__text\">The diary is open from June. The first to ask gets the first dry week.</p>\n            <a class=\"ds-button\" href=\"#contact\">Ask for a date</a>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"notes\">\n  <div class=\"ds-sheet\">\n    <header class=\"ds-page-header\">\n      <ol class=\"ds-breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">About</a></li>\n        <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Notes</li>\n      </ol>\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Notes</h1>\n          <p class=\"ds-page-header__text\">Short pieces from the workshop, two or three a month.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#contact\">Get them by email</a>\n        </div>\n      </div>\n    </header>\n    <div class=\"ds-sheet__cols\">\n      <div class=\"ds-sheet__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Subjects</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\"><span class=\"ds-sidebar__count\">41</span>All notes</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">17</span><a class=\"ds-link\" href=\"#notes\">Process</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">9</span><a class=\"ds-link\" href=\"#notes\">Tools</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">8</span><a class=\"ds-link\" href=\"#notes\">Letters</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">7</span><a class=\"ds-link\" href=\"#notes\">On the road</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Most read</h2>\n          <div class=\"ds-panel__body\">\n            <p>Gilding in a cold shop has been read 2,300 times since February.</p>\n            <a class=\"ds-link ds-link--more\" href=\"#note\">Read it</a>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">By email</h2>\n          <div class=\"ds-panel__body\">\n            <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">New notes</span></label>\n            <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Free weeks in the diary</span></label>\n            <p>Two or three letters a month, and none when there is nothing to say.</p>\n          </div>\n        </section>\n      </div>\n      <div class=\"ds-sheet__main\">\n        <ul class=\"ds-list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\"><span class=\"ds-list__day\">12</span>Mar</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#note\">Why the first coat is always grey</a>\n              <p class=\"ds-list__text\">A neutral ground shows every wobble before the colour hides it.</p>\n              <span class=\"ds-list__meta\">Process · 4 minutes · 6 comments</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\"><span class=\"ds-list__day\">2</span>Mar</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#note\">Three brushes that do most of the work</a>\n              <p class=\"ds-list__text\">A flat, a liner and a worn-out quill we cannot replace.</p>\n              <span class=\"ds-list__meta\">Tools · 3 minutes · 2 comments</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\"><span class=\"ds-list__day\">19</span>Feb</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#note\">Gilding in a cold shop</a>\n              <p class=\"ds-list__text\">What the size does below ten degrees, and how long to wait.</p>\n              <span class=\"ds-list__meta\">Process · 6 minutes · 9 comments</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\"><span class=\"ds-list__day\">4</span>Feb</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#note\">A capital R, drawn eleven times</a>\n              <p class=\"ds-list__text\">The leg is where a sign painter's hand shows first.</p>\n              <span class=\"ds-list__meta\">Letters · 5 minutes · 3 comments</span>\n            </div>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__date\"><span class=\"ds-list__day\">21</span>Jan</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#note\">Two days on a ladder in the rain</a>\n              <p class=\"ds-list__text\">What we pack now that we did not pack before.</p>\n              <span class=\"ds-list__meta\">On the road · 4 minutes · 1 comment</span>\n            </div>\n          </li>\n        </ul>\n        <ul class=\"ds-pagination\">\n          <li><a class=\"ds-pagination__link is-disabled\" href=\"#notes\">‹ Newer</a></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#notes\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#notes\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#notes\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#notes\">Older ›</a></li>\n        </ul>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"note\">\n  <div class=\"ds-sheet\">\n    <header class=\"ds-page-header\">\n      <ol class=\"ds-breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">About</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#notes\">Notes</a></li>\n        <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">12 March 2015</li>\n      </ol>\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Why the first coat is always grey <span class=\"ds-badge\">New</span></h1>\n          <p class=\"ds-page-header__text\">Process, a four minute read.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#notes\">All notes</a>\n        </div>\n      </div>\n    </header>\n    <div class=\"ds-sheet__cols\">\n      <div class=\"ds-sheet__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">In this note</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\">The ground</li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#note\">What it shows</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#note\">Mixing it</a></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Written by</h2>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-byline\">\n              <span class=\"ds-avatar\">MI</span>\n              <span class=\"ds-byline__text\"><span class=\"ds-byline__name\">Mila</span><span class=\"ds-byline__role\">One of the two of us</span></span>\n            </div>\n            <p>She does the drawing and most of the ladder work.</p>\n            <a class=\"ds-link ds-link--more\" href=\"#home\">About the workshop</a>\n          </div>\n        </section>\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Read next</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#note\">Three brushes</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#note\">Gilding in a cold shop</a></li>\n          </ul>\n        </aside>\n      </div>\n      <div class=\"ds-sheet__main\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>The ground comes first</h1>\n          <p class=\"ds-prose__lead\">Before any colour goes on, the whole board gets one thin coat of mid grey. It looks like a wasted morning and it saves the afternoon.</p>\n          <p>On white, a pencil line and a brush line look alike. On grey, the <span class=\"ds-tooltip\" tabindex=\"0\">layout<span class=\"ds-tooltip__tip\" role=\"tooltip\">The letters drawn on the board in pencil before any paint goes on.</span></span> stands out in graphite and <strong>every wobble in the first stroke</strong> shows as a lighter edge.</p>\n          <h2>What it shows</h2>\n          <ul>\n            <li>Letters that lean, before they are filled</li>\n            <li>Spacing that closes up when the colour goes on</li>\n            <li>Brush marks that would telegraph through enamel</li>\n          </ul>\n          <h3>Mixing it</h3>\n          <p>We keep the recipe on the tin as <code>3 white : 1 black : a little umber</code> so that either of us can make it without asking.</p>\n        </article>\n        <p class=\"ds-linkrow\" data-component=\"links\">\n          <a class=\"ds-link\" href=\"#notes\">More on process</a>\n          <a class=\"ds-link is-visited\" href=\"#note\">Three brushes</a>\n          <a class=\"ds-link is-hover\" href=\"#work\">The bakery it was for</a>\n          <a class=\"ds-link is-active\" href=\"#contact\">Write to us</a>\n          <a class=\"ds-link ds-link--quiet\" href=\"#notes\">6 comments</a>\n        </p>\n        <div class=\"ds-buttonrow\" data-component=\"buttons\">\n          <a class=\"ds-button\" href=\"#contact\">Get notes by email</a>\n          <a class=\"ds-button is-hover\" href=\"#note\">Leave a comment</a>\n          <a class=\"ds-button ds-button--secondary\" href=\"#notes\">Back to the notes</a>\n          <a class=\"ds-button ds-button--danger\" href=\"#note\">Delete my comment</a>\n          <button class=\"ds-button\" type=\"button\" disabled>Comments closed</button>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"contact\">\n  <div class=\"ds-sheet\">\n    <header class=\"ds-page-header\">\n      <ol class=\"ds-breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">About</a></li>\n        <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Contact</li>\n      </ol>\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Ask about a sign</h1>\n          <p class=\"ds-page-header__text\">Tell us where it goes and how big it is. We answer within two working days.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#work\">See the work first</a>\n        </div>\n      </div>\n    </header>\n    <div class=\"ds-sheet__cols\">\n      <div class=\"ds-sheet__side\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">The workshop</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">9 to 5</span>Monday to Thursday</li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__count\">On site</span>Friday</li>\n            <li class=\"ds-sidebar__item\">Unit 4, Tannery Yard</li>\n            <li class=\"ds-sidebar__item\">hello@chronoskin.example</li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Before you write</h2>\n          <div class=\"ds-panel__body\">\n            <p>A photograph of the shop front and its width in metres is all we need to quote.</p>\n            <a class=\"ds-link ds-link--more\" href=\"#notes\">How a job runs</a>\n          </div>\n        </section>\n        <div class=\"ds-accordion\">\n          <details class=\"ds-accordion__item\" open>\n            <summary class=\"ds-accordion__head\">How long is the wait?</summary>\n            <div class=\"ds-accordion__body\"><p>About three weeks from the day we agree the drawing.</p></div>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__head\">Do you work in winter?</summary>\n            <div class=\"ds-accordion__body\"><p>Indoors, yes. Outdoor paint needs a dry week above five degrees.</p></div>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__head\">Can you match an old sign?</summary>\n            <div class=\"ds-accordion__body\"><p>Usually. Send a photograph of what is left of it.</p></div>\n          </details>\n        </div>\n      </div>\n      <div class=\"ds-sheet__main\">\n        <div class=\"ds-noticerow\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">The diary is full until June.</span> Enquiries for the summer are welcome now.</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">Your message was not sent.</span> Check the highlighted field and try again.</p>\n        </div>\n        <form class=\"ds-form\" data-component=\"form\" action=\"#contact\">\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Your name</span><input class=\"ds-form__input\" type=\"text\" value=\"Marta Lind\"></label>\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Shop or business</span><input class=\"ds-form__input is-focus\" type=\"text\" placeholder=\"Name over the door\"></label>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Email</span><input class=\"ds-form__input is-error\" type=\"text\" value=\"marta@shop\"><span class=\"ds-form__error\">Enter a complete email address.</span></label>\n            <label class=\"ds-form__field\"><span class=\"ds-form__label\">Kind of sign</span>\n              <select class=\"ds-form__select\"><option>Fascia lettering</option><option>Window gilding</option><option>Menu boards</option><option>Mural</option></select>\n            </label>\n          </div>\n          <label class=\"ds-form__field\"><span class=\"ds-form__label\">About the job</span><textarea class=\"ds-form__textarea\" rows=\"3\" placeholder=\"Where it is, how wide, and when you open\"></textarea><span class=\"ds-form__hint\">A rough width in metres helps most.</span></label>\n          <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>Send me the workshop notes as well. <a class=\"ds-link\" href=\"#notes\">Read a few</a></span></label>\n          <div class=\"ds-form__actions\">\n            <button class=\"ds-button\" type=\"submit\">Send the enquiry</button>\n            <a class=\"ds-button ds-button--secondary\" href=\"#home\">Cancel</a>\n          </div>\n        </form>\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\">Send without a photograph?</h2>\n              <a class=\"ds-dialog__close\" href=\"#contact\" aria-label=\"Close\"></a>\n            </div>\n            <div class=\"ds-dialog__body\">\n              <p>We can quote from a description, but a picture of the shop front makes the first answer far more exact.</p>\n            </div>\n            <div class=\"ds-dialog__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#contact\">Go back</a>\n              <a class=\"ds-button\" href=\"#home\">Send anyway</a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <p class=\"ds-footer__name\">chronoskin</p>\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-footer__link\" href=\"#home\">About</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#work\">Work</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#notes\">Notes</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#contact\">Contact</a></li>\n    </ul>\n    <p class=\"ds-footer__base\">© 2015 chronoskin. Painted by hand, written by hand.</p>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.flat-design.blog.s08.p05.t03.u05\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"flat-design\",\n    \"years\": [\n      2013,\n      2016\n    ]\n  },\n  \"archetype\": \"blog\",\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-8535\",\n  \"short\": \"v1-fl-8535\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #f0e8e0;\n  --color-canvas: #f0e8e0;\n  --color-surface: #ffffff;\n  --color-surface-alt: #f8f0e8;\n  --color-surface-strong: #e0d8c0;\n  --color-bar: #ffffff;\n  --color-bar-text: #48484c;\n  --color-bar-alt: #333333;\n  --color-bar-alt-text: #ffffff;\n  --color-inverse: #1a1a1a;\n  --color-inverse-text: #ffffff;\n  --color-text: #48484c;\n  --color-text-muted: #848484;\n  --color-heading: #222222;\n  --color-heading-alt: #9a1616;\n  --color-link: #008080;\n  --color-link-quiet: #848484;\n  --color-link-visited: #5ba9ae;\n  --color-link-hover: #1e347b;\n  --color-link-active: #000000;\n  --color-border: #d8d8d8;\n  --color-border-strong: #333333;\n  --color-border-muted: #e8e0d0;\n  --color-accent: #fa6800;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #e3c800;\n  --color-fill-1: #9a1616;\n  --color-fill-2: #fa6800;\n  --color-fill-3: #e3c800;\n  --color-fill-4: #1e347b;\n  --color-button: #9a1616;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #333333;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #848484;\n  --color-disabled: #e8e0d0;\n  --color-disabled-text: #848484;\n  --color-danger: #dd1144;\n  --color-danger-surface: #f8f0e8;\n  --color-success: #60a917;\n  --color-warning: #f0a30a;\n  --color-notice: #e0d8c0;\n  --color-notice-text: #333333;\n  --color-focus: #008080;\n  --color-shadow: rgb(0 0 0 / 0.2);\n  --color-overlay: rgb(51 51 51 / 0.6);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Source Sans Pro\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Segoe UI\", Geneva, Tahoma, Arial, sans-serif;\n  --font-heading: \"Source Sans Pro\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Segoe UI\", Geneva, Tahoma, Arial, sans-serif;\n  --font-ui: \"Source Sans Pro\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Segoe UI\", Geneva, Tahoma, Arial, sans-serif;\n  --font-mono: Consolas, Menlo, \"Liberation Mono\", monospace;\n  --text-base: 14px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 16px;\n  --text-display: 38px;\n  --text-h1: 26px;\n  --text-h2: 20px;\n  --text-h3: 16px;\n  --line-body: 1.5;\n  --line-heading: 1.25;\n  --line-display: 1.3;\n  --weight-body: 400;\n  --weight-bold: 600;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 5px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: 0 -4px 0 0 var(--color-border-strong);\n  --shadow-control: none;\n  --shadow-control-hover: inset 0 0 0 2px var(--color-shadow);\n  --shadow-control-pressed: inset 0 0 0 4px var(--color-shadow);\n  --shadow-dialog: 0 -4px 0 0 var(--color-border-strong), 0 0 0 1px var(--color-border-strong);\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) 88%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px dashed var(--color-focus);\n  --transition: background-color 0.1s linear, box-shadow 0.1s linear;\n  --backdrop-blur: 0px;\n}\n"
  }
}
