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