{
  "id": "v1-gl-81bb",
  "long_id": "v1.glassmorphism.landing.s08.p01.t11.u11",
  "name": "Glassmorphism onboarding flow",
  "era": {
    "slug": "glassmorphism",
    "code": "gl",
    "name": "Glassmorphism",
    "years": [
      2020,
      2026
    ],
    "description": "Frosted glass, 2020 to 2026: translucent panels with a blurred backdrop, a thin light border and a soft shadow, floating over a colourful gradient."
  },
  "archetype": "landing",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": false,
    "responsive": true
  },
  "summary": "Glassmorphism is the frosted-glass interface style of 2020 to 2026: translucent cards with a blurred backdrop, a light hairline edge and a long soft shadow, floating over a full-bleed gradient. Sign-in and setup screens of those years were its showpiece: the pitch written straight on the gradient at one side and a single tall card of glass holding the form at the other, with the steps of the flow as numbered discs across the top. This pack is that onboarding flow in its light form: white glass over a peach and rose dawn with gold and lilac light, aubergine text and buttons, a vermilion accent and a wide grotesque for headings.",
  "url": "https://chrono.skin/s/v1-gl-81bb",
  "preview_url": "https://chrono.skin/s/v1-gl-81bb/specimen.html",
  "files": {
    "STYLE.md": "# Glassmorphism onboarding flow\n\n## Summary\n\nGlassmorphism is the frosted-glass interface style of 2020 to 2026: translucent cards with a blurred backdrop, a light hairline edge and a long soft shadow, floating over a full-bleed gradient. Sign-in and setup screens of those years were its showpiece: the pitch written straight on the gradient at one side and a single tall card of glass holding the form at the other, with the steps of the flow as numbered discs across the top. This pack is that onboarding flow in its light form: white glass over a peach and rose dawn with gold and lilac light, aubergine text and buttons, a vermilion accent and a wide grotesque for headings.\n\n## Layout\n\n- Content column: `--size-page` (1160px), centred, with `--space-4` (24px) side padding below that width. The backdrop (`--fill-page` on `.ds-page`) fills the viewport.\n- Navigation: `.ds-nav` is one row on the backdrop, with no bar: the brand at the left, the steps of the flow in the middle as numbered discs joined by short lines (the current step's disc takes the accent fill and its label is bold), and at the right a Help link that opens a `.ds-menu`, and the account avatar. The row and the footer are written once, around the views.\n- Every screen is split by `.ds-page__split`: a free column on the left and a `--size-card` (480px) column on the right, `--space-6` (52px) apart. The right column holds the work card (`.ds-panel--card`), a tall sheet of glass with the form of that step; the left column holds what explains or accompanies it.\n- Home page: the split is centred vertically. On the left, on the backdrop: the hero (a badge, the title, the lead, two buttons), the row of three figures (`.ds-stat`) and the quotation `.ds-carousel`. On the right the sign-in card, which ends in an inverted band.\n- Inner pages have no hero. Under the navigation come the `.ds-breadcrumb` and, 10px below it, the `.ds-page-header` on the backdrop: title at `--text-h1` and one muted line on the left, at most two buttons on the right. Then the split: panels, notices, lists or an accordion in a `.ds-page__col` on the left, the work card (and, where a step has one, the dialog) on the right. A step that has to show a choice across the whole width (templates) uses one `.ds-page__col`: `.ds-tabs`, the `.ds-grid` of four cards, then `.ds-page__split--wide` with the table and its pagination beside a narrower summary panel.\n- Views: the specimen is one flow with five screens, one showing at a time. `welcome` is the home view (hero, figures, quotations, the sign-in card). `profile` is step 2: the picture, the notification switches and three questions beside the profile form. `workspace` is step 3: tabs, the four template cards, the table of what the chosen template creates, pagination and the summary. `team` is step 4: notices, the list of invited people and the empty list of requests beside the invitation card and the open dialog that withdrawing an invitation raises. `help` is the reading page: running text with the link states beside the contents sidebar and an accordion of questions. Each view is a `.ds-view` section; the step discs and the Help link are marked current from the address.\n- Spacing scale: `--space-1` 4px (inside template cards, between pagination cells), `--space-2` 10px (label to control, disc to label, badge padding), `--space-3` 16px (row padding, gaps between buttons and notices, title to lead), `--space-4` 24px (panel padding, the gap between neighbouring panels, form field gap), `--space-5` 32px (work card padding, gap above the figures and the carousel), `--space-6` 52px (the gap between the two halves, dialog padding, gap above the footer), `--space-7` 88px (textarea height only).\n- Glass: cards use `backdrop-filter: blur(var(--backdrop-blur))` (28px in this pack's surface set); menus, dialogs and the error notice use three times that with `saturate(180%)`. Never put a blurred element inside another; controls inside a card are plain translucent fills.\n- Below 1000px the two halves stack (text first, card second), the step labels are dropped so that only the numbered discs remain, and the template cards go two by two. Below 720px the navigation wraps: brand, Help and avatar on the first row and the discs spread across the second with their lines stretched between them; the hero title drops to `--text-h1`, columns marked `.ds-table__opt` are hidden and the page header's buttons move under its text. Nothing scrolls sideways at 390px except the carousel's own track.\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- Two families: Inter for body and headings, and a monospace (`--font-ui`: Geist Mono, JetBrains Mono, then the system monospace) for buttons, inputs, navigation, tabs and table cells as well as code.\n- Sizes: `--text-base` 16px, `--text-ui` and `--text-small` 13px, `--text-large` 18px, `--text-h3` 18px, `--text-h2` 24px, `--text-h1` 36px, `--text-display` 56px.\n- Body is airy and headings are light: `--line-body` 1.6, `--line-heading` 1.33, `--line-display` 1.14; `--weight-heading`, `--weight-display` and `--weight-ui` 500, `--weight-bold` 600.\n- No uppercase and no tracking from tokens; links are marked by colour and underlined on hover only.\n\n- `--fill-page` layers a 24px grid of 1px dots over the ember glow (an oval 760px wide at the top centre, 620px ovals at alternating edges below) on the page colour.\n- Corners are tight: `--radius-control` 3px, `--radius-panel` 6px, `--radius-page` 10px; only `--radius-pill` (30px) stays round.\n- `--border-width` and `--border-width-strong` are both 2px: the outline is the surface. Glass is smoked, `--fill-panel` being `--color-surface` mixed with 35% black, so a panel is a darker pane inside a pale 2px frame.\n- Nothing floats: `--shadow-panel` and `--shadow-control` are `none`. Only the dialog casts a shadow (`--shadow-dialog`, 0 24px 48px in black). A hovered button gains a 2px bright ring, and `--focus-ring` is a 2px dashed line.\n- `--shadow-text` is `none`.\n- `--backdrop-blur` is 3px, the lightest of the era: the dot grid and the glow stay readable through a pane, only softened. The strongest glass of a layout blurs three times that, 9px.\n- Every fill is flat; transitions run 0.15s.\n\n## Components\n\n- `.ds-page`: on `<body>`; paints the backdrop and sets the base type. `.ds-page__inner` is the width container; `.ds-page__split` the two halves (`--home` centres them vertically, `--wide` gives the right half less width, for a table beside a summary); `.ds-page__col` a vertical stack; `.ds-page__text` the free left half of the home view; `.ds-page__heading` a small heading on the backdrop with an optional badge; `.ds-page__note` a small muted line. `.ds-view` is one screen of the specimen; in an application each is its own document.\n- `.ds-nav`: the row on the backdrop. `.ds-nav__list` is the ordered list of steps; each `.ds-nav__item` holds a `.ds-nav__link` with a `.ds-nav__num` disc and a `.ds-nav__label`; the current one is `is-current` (the specimen sets it from the address). `.ds-nav__tools` holds `.ds-nav__help` (the trigger of the menu) and the account `.ds-avatar`. In an application without steps the discs can carry icons or be left out of the links.\n- `.ds-brand`: the site's mark and name at the left of the navigation: `.ds-brand__mark` is a small tile dressed like the primary button (`--fill-button`, `--color-button-text`, a 1px `--color-border` edge, `--radius-control`, `--shadow-control`) holding the mark as inline SVG, `.ds-brand__name` the name in the heading font at `--text-h3`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-hero`: the home page's introduction on the backdrop: a `.ds-badge`, `.ds-hero__title` at the display size, `.ds-hero__lead`, `.ds-hero__actions`. It has no art; the work card beside it is the picture.\n- `.ds-page-header`: head of an inner page: `.ds-page-header__text` with `.ds-page-header__title` and `.ds-page-header__lead`, and `.ds-page-header__actions` at the right. No fill of its own. The breadcrumb goes directly above it.\n- `.ds-prose`: running text: h1 to h3, paragraphs, lists, inline `code`; `.ds-prose__lead` for a lead paragraph, `.ds-prose__code` for a code block. Put it inside a `.ds-panel`.\n- `.ds-link`: link in running text; states `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` for undecorated links. `.ds-link__sample` lays several out in a row.\n- `.ds-button`: primary, a dark solid 44px high with an 8px radius. `.ds-button--secondary` is white glass; `.ds-button--danger` is the destructive action, tinted with `--color-danger`, used once at the end of a group or as the confirming button of a dialog; `.ds-button--large` for the hero and the main action of a card; `.ds-button--block` fills the width of a card; `is-disabled` or `disabled` for the disabled state. `.ds-button__row` lays buttons out. One primary button per group.\n- `.ds-form`: vertical form inside the work card. `.ds-form__field` wraps a `.ds-form__label` and a control: `.ds-form__input`, `.ds-form__textarea`, `.ds-form__select` (in `.ds-form__select-wrap` with a `.ds-form__chevron`), `.ds-form__range`, `.ds-form__check` with `.ds-form__checkbox`. An invalid input takes `is-error` and is followed by `.ds-form__error`; `.ds-form__hint` is help text; `.ds-form__row` puts two fields side by side; `.ds-form__label-row` sets a tooltip beside a label; `.ds-form__actions` holds the buttons.\n- `.ds-table`: one sheet of glass with a `--fill-bar` head and hairline rows. `.ds-table__num` right-aligns figures, `.ds-table__opt` marks a column hidden on a phone, `.ds-table__meta` is muted text.\n- `.ds-list`: rows in one sheet of glass. `.ds-list__item` holds an optional `.ds-avatar`, a `.ds-list__body` (`.ds-list__title`, `.ds-list__meta`) and a badge or action at the right. `.ds-list__dot` is a status dot.\n- `.ds-panel`: the basic sheet of glass: `.ds-panel__title` strip, `.ds-panel__body`. `.ds-panel--card` is the work card: the largest radius, the dialog shadow, more padding, with a `.ds-panel__heading` (h2 size) and a muted `.ds-panel__text` line at the top (`--after` for one at the foot) and optionally a `.ds-panel__band` at its foot, an inverted strip with a `.ds-panel__band-link`. `.ds-panel--dark` is the bar-coloured variant. `.ds-panel__pair` with `.ds-panel__pair-value` is a label and its value on one line.\n- `.ds-grid`: four template cards of tinted glass. `.ds-grid__cell` with `--1` to `--4` takes its tint from `--color-fill-*` and is a link; the chosen one is `is-current` and wears the focus ring. Inside: `.ds-grid__mock` (a small drawing of the layout from `.ds-grid__bar` blocks; `--rows` stacks them, `.ds-grid__bar--short` shortens one), `.ds-grid__label`, `.ds-grid__value`, `.ds-grid__meta`.\n- `.ds-stat`: the row of three figures on the backdrop; `.ds-stat` is the row and each `.ds-stat__item` a figure behind a 2px rule in the accent colour: `.ds-stat__value` above `.ds-stat__label`. It has no glass.\n- `.ds-tabs`: text tabs on a hairline; `.ds-tabs__tab` with `is-current` carrying a 2px rule in the accent colour. For switching what a page shows.\n- `.ds-badge`: pill for counts and markers in the accent; `.ds-badge--alt` for \"new\", `.ds-badge--glass` for quiet labels, and the status labels `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`: a `--fill-bar-alt` pill with a 1px ring and a dot in the status colour.\n- `.ds-sidebar`: glass block of links in a column: `.ds-sidebar__heading`, `.ds-sidebar__list`, `.ds-sidebar__link` with `is-current`.\n- `.ds-notice`: information notice on `--color-notice`; `.ds-notice--error` on `--color-danger-surface` with a danger border, icon and title. `.ds-notice__icon`, `.ds-notice__title`; `.ds-notice__stack` stacks several. Notices sit beside the work card, not inside it.\n- `.ds-pagination`: left-aligned row of small glass cells, `.ds-pagination__link`; the current page is `is-current` and takes the primary button fill, `is-disabled` greys an end.\n- `.ds-breadcrumb`: small trail above the page header, `.ds-breadcrumb__item` separated by slashes, `.ds-breadcrumb__link` for the linked levels. In the flow it names the step.\n- `.ds-dialog`: a dimmed sheet (`--color-overlay`) with a centred `.ds-dialog__box` of the strongest glass: `.ds-dialog__title`, `.ds-dialog__body`, `.ds-dialog__actions`.\n- `.ds-empty`: empty state on a glass panel: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one secondary button.\n- `.ds-footer`: a full-width strip of faint glass over a hairline, `.ds-footer__inner` with `.ds-footer__links` and `.ds-footer__link`.\n- `.ds-menu`: a drop-down under a navigation item, shown on hover or focus (or with `is-open`): `.ds-menu__trigger` with a `.ds-menu__caret`, `.ds-menu__list` of the strongest glass, `.ds-menu__link` rows with an optional `.ds-menu__meta` at the right.\n- `.ds-accordion`: one sheet of glass of `<details>` sections: `.ds-accordion__item`, `.ds-accordion__summary` with a chevron that turns when open, `.ds-accordion__body`. For the questions a step raises.\n- `.ds-tooltip`: a round hint mark beside a label; `.ds-tooltip__tip` is an inverted block above it, shown on hover or focus (or with `is-open`). Keep the tip to one sentence.\n- `.ds-carousel`: one slide showing in a sheet of glass: `.ds-carousel__track` of `.ds-carousel__slide` items that snap as they scroll, `.ds-carousel__dots` with `.ds-carousel__dot` (the current one `is-current`), and optionally a `.ds-carousel__head` strip with `.ds-carousel__arrows` of `.ds-carousel__arrow` buttons. `.ds-carousel--quotes` is the home page's form: each slide a `.ds-carousel__quote` and an `.ds-avatar__row`.\n- `.ds-switch`: an on/off row: `.ds-switch__text` with a `.ds-switch__hint`, the hidden `.ds-switch__input` checkbox and the drawn `.ds-switch__track`, which takes the accent fill when on. Consecutive switches are divided by a hairline.\n- `.ds-progress`: a thin track with a `.ds-progress__bar` in the accent fill; width classes `--15`, `--25`, `--40`, `--65`, `--75`, `--90`. `.ds-progress__label` is a line above it with the name at the left and the figure at the right. Use it for how far the flow has come.\n- `.ds-avatar`: a round account picture drawn from initials, in the accent fill; `--2` to `--4` take a tint from `--color-fill-*`, `--large` is the profile size. `.ds-avatar__row` sets it beside `.ds-avatar__name` and `.ds-avatar__meta`.\n\n## Never\n\n- `row-gap <= 4px`: rows of a table or list touch and are divided by a hairline.\n- `block-gap <= 52px`: neighbouring panels sit 24px apart; 52px is the largest gap on the page.\n- `content-width <= 1160px`: the column is capped while the backdrop fills the viewport.\n- `font-size <= 56px`: the hero title is the largest text.\n- `font-size >= 13px`: controls and meta text are the smallest text.\n- `font-weight <= 600`: headings are medium; 600 is for bold only.\n- `font-families <= 2`: one sans and one monospace.\n- `line-height <= 1.6`: body text is set at 1.6.\n- `letter-spacing = 0`: no tracking on any text.\n- `underlined-links <= 25%`: underline is a hover state.\n- `uppercase-text <= 10%`: uppercase is for small labels only.\n- `border-width <= 2px`: every border is 2px, never heavier.\n- `border-radius <= 30px`: panels are 6px, large containers 10px, pills 30px.\n- `box-shadow-blur <= 48px`: only the dialog casts a shadow, blurred 48px.\n- `text-shadow = none`: no text shadow anywhere.\n- `gradient-fills <= 10%`: glass is a flat translucent fill.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen: a new step is a `.ds-page__split` with its explanation on the left and a `.ds-panel--card` on the right; a new container starts from `.ds-panel` (fill, 1px edge, radius, shadow and blur together, never one without the others), a new control from `.ds-button--secondary` or `.ds-form__input`, a new overlay from `.ds-menu__list` or `.ds-dialog__box`. Use tokens only; for a shade or size with no token use `color-mix()` over tokens with `transparent`, or `calc()` over `--space-*` and `--size-*`. Keep one work card per screen and one primary button per card, keep the navigation free of any bar, and place glass only where the backdrop behind it has colour to show through.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 1160px;\n  --size-card: 480px;\n  --size-dialog: 420px;\n  --size-control: 44px;\n  --size-step: 34px;\n  --size-mock: 72px;\n  --size-icon: 18px;\n  --size-dot: 8px;\n  --size-thumb: 22px;\n  --size-track: 4px;\n  --space-1: 4px;\n  --space-2: 10px;\n  --space-3: 16px;\n  --space-4: 24px;\n  --space-5: 32px;\n  --space-6: 52px;\n  --space-7: 88px;\n}\n\n/* shell: a full-bleed gradient; every screen is split into a text column on the backdrop and one tall card of glass */\n.ds-page {\n  margin: 0;\n  min-height: 100vh;\n  background: var(--fill-page);\n  background-color: var(--color-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n.ds-page__inner {\n  width: 100%;\n  max-width: calc(var(--size-page) + 2 * var(--space-4));\n  margin: 0 auto;\n  padding: 0 var(--space-4);\n}\n.ds-page__split {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-card);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-page__split--home {\n  align-items: center;\n  padding: var(--space-5) 0 0;\n}\n.ds-page__split--wide {\n  grid-template-columns: minmax(0, 1fr) calc(var(--size-card) - var(--space-7));\n  gap: var(--space-4);\n}\n.ds-page__text {\n  min-width: 0;\n}\n.ds-page__col {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  min-width: 0;\n}\n.ds-page__heading {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: var(--space-2) 0 calc(-1 * var(--space-2));\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  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page__note {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\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: the steps of the flow as numbered discs joined by a line, on the backdrop between the brand and the help menu */\n.ds-nav {\n  position: relative;\n  z-index: 4;\n  color: var(--color-text);\n}\n.ds-nav__inner {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  max-width: calc(var(--size-page) + 2 * var(--space-4));\n  min-height: calc(var(--size-control) + 2 * var(--space-4));\n  margin: 0 auto;\n  padding: 0 var(--space-4);\n}\n.ds-brand {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  color: var(--color-heading);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-step);\n  height: var(--size-step);\n  flex: none;\n  padding: var(--space-1);\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__list {\n  display: flex;\n  align-items: center;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__item {\n  display: flex;\n  align-items: center;\n}\n.ds-nav__item + .ds-nav__item::before {\n  content: \"\";\n  width: var(--space-5);\n  margin: 0 var(--space-2);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\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}\n.ds-nav__num {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-step);\n  height: var(--size-step);\n  flex: none;\n  background: var(--fill-bar);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n  color: var(--color-bar-text);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-shadow: none;\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  transition: var(--transition);\n}\n.ds-nav__link:hover .ds-nav__num,\n.ds-nav__link.is-hover .ds-nav__num {\n  border-color: var(--color-border-strong);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-nav__link.is-current .ds-nav__num,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#welcome\"] .ds-nav__num,\n.ds-page:has(#welcome:target) .ds-nav__link[href=\"#welcome\"] .ds-nav__num,\n.ds-page:has(#profile:target) .ds-nav__link[href=\"#profile\"] .ds-nav__num,\n.ds-page:has(#workspace:target) .ds-nav__link[href=\"#workspace\"] .ds-nav__num,\n.ds-page:has(#team:target) .ds-nav__link[href=\"#team\"] .ds-nav__num {\n  background: var(--fill-accent);\n  border-color: transparent;\n  box-shadow: var(--shadow-control);\n  color: var(--color-accent-text);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#welcome\"],\n.ds-page:has(#welcome:target) .ds-nav__link[href=\"#welcome\"],\n.ds-page:has(#profile:target) .ds-nav__link[href=\"#profile\"],\n.ds-page:has(#workspace:target) .ds-nav__link[href=\"#workspace\"],\n.ds-page:has(#team:target) .ds-nav__link[href=\"#team\"],\n.ds-page:has(#help:target) .ds-nav__help {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-nav__tools {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-nav__help {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-2) 0;\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\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}\n\n/* hero: badge, title, lead and actions on the backdrop, in the left half of the home screen */\n.ds-hero {\n  padding: 0;\n}\n.ds-hero__title {\n  margin: var(--space-3) 0 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-shadow: var(--shadow-text);\n}\n.ds-hero__lead {\n  max-width: 46ch;\n  margin: var(--space-3) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin-top: var(--space-4);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: var(--space-4) 0 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: \"/\";\n  margin-right: var(--space-2);\n  opacity: 0.6;\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* page header: head of an inner page, set on the backdrop like the hero, one size down */\n.ds-page-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-5);\n  padding: var(--space-2) 0 var(--space-4);\n}\n.ds-page-header__text {\n  flex: 1;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  text-shadow: var(--shadow-text);\n}\n.ds-page-header__lead {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-base);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex: none;\n  align-items: center;\n  gap: var(--space-3);\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;\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  margin-top: var(--space-5);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin-top: var(--space-4);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: var(--space-3) 0 0;\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-4);\n}\n.ds-prose li + li {\n  margin-top: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-bar-alt);\n  border-radius: var(--radius-control);\n  color: var(--color-accent);\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n}\n.ds-prose__lead {\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n.ds-prose__code {\n  margin: var(--space-3) 0 0;\n  padding: var(--space-3) var(--space-4);\n  overflow-x: auto;\n  background: var(--color-bar);\n  border-radius: var(--radius-control);\n  color: var(--color-bar-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\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  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link__sample {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-3);\n}\n\n/* buttons */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  text-transform: var(--ui-transform);\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-button--secondary {\n  background: var(--fill-button-secondary);\n  border-color: var(--color-border-strong);\n  color: var(--color-button-secondary-text);\n  text-shadow: var(--shadow-text);\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: linear-gradient(var(--color-surface-strong), var(--color-surface-strong)), var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--danger {\n  background: color-mix(in srgb, var(--color-danger) 70%, transparent);\n  border-color: var(--color-danger);\n  color: var(--color-button-secondary-text);\n  text-shadow: var(--shadow-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--color-danger);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--large {\n  padding: var(--space-3) var(--space-5);\n  font-size: var(--text-base);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  border-color: transparent;\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  text-shadow: none;\n  cursor: not-allowed;\n}\n.ds-button__row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n  margin-top: var(--space-3);\n}\n\n/* panel: the basic sheet of glass */\n.ds-panel {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n}\n.ds-panel__title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-transform: uppercase;\n}\n.ds-panel__body {\n  padding: var(--space-4);\n}\n.ds-panel__body > :first-child {\n  margin-top: 0;\n}\n.ds-panel--dark {\n  background: var(--fill-bar);\n  border-color: var(--color-border-muted);\n  -webkit-backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n  backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n}\n\n/* form */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n.ds-form__label {\n  display: flex;\n  justify-content: space-between;\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-transform: uppercase;\n}\n.ds-form__input,\n.ds-form__textarea,\n.ds-form__select {\n  width: 100%;\n  min-height: var(--size-control);\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n  transition: var(--transition);\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-disabled-text);\n  opacity: 1;\n}\n.ds-form__textarea {\n  min-height: var(--space-7);\n  resize: vertical;\n}\n.ds-form__select {\n  appearance: none;\n  -webkit-appearance: none;\n  padding-right: var(--space-5);\n}\n.ds-form__select-wrap {\n  position: relative;\n  display: block;\n}\n.ds-form__chevron {\n  position: absolute;\n  top: 50%;\n  right: var(--space-3);\n  width: var(--size-icon);\n  height: var(--size-icon);\n  transform: translateY(-50%);\n  color: var(--color-input-text);\n  pointer-events: none;\n}\n.ds-form__input:focus,\n.ds-form__textarea:focus,\n.ds-form__select:focus,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: 0;\n  border-color: var(--color-focus);\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  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  font-size: var(--text-ui);\n}\n.ds-form__checkbox {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  margin: 0;\n  accent-color: var(--color-accent);\n}\n.ds-form__range {\n  width: 100%;\n  height: var(--size-thumb);\n  margin: 0;\n  background: transparent;\n  appearance: none;\n  -webkit-appearance: none;\n}\n.ds-form__range::-webkit-slider-runnable-track {\n  height: var(--size-track);\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n}\n.ds-form__range::-webkit-slider-thumb {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  margin-top: calc((var(--size-track) - var(--size-thumb)) / 2);\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-text);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  -webkit-appearance: none;\n}\n.ds-form__range::-moz-range-track {\n  height: var(--size-track);\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n}\n.ds-form__range::-moz-range-thumb {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-text);\n  border-radius: 50%;\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n}\n\n/* table: glass sheet, dark glass head, hairline rows */\n.ds-table {\n  width: 100%;\n  overflow: hidden;\n  border-collapse: separate;\n  border-spacing: 0;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  text-align: left;\n  vertical-align: middle;\n}\n.ds-table th {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-weight: var(--weight-bold);\n  text-transform: uppercase;\n}\n.ds-table td {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-table tbody tr:hover td,\n.ds-table tr.is-hover td {\n  background: var(--color-border-muted);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__meta {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* list: rows inside a sheet of glass, divided by hairlines */\n.ds-list {\n  margin: 0;\n  padding: 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-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n}\n.ds-list__item + .ds-list__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__body {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  display: block;\n  color: var(--color-link-quiet);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-list__meta {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-list__dot {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  border-radius: 50%;\n  background: var(--color-accent-alt);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-2);\n  background: var(--fill-accent);\n  border-radius: var(--radius-pill);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  text-transform: none;\n  vertical-align: middle;\n}\n.ds-badge--alt {\n  background: var(--color-accent-alt);\n  color: var(--color-text);\n}\n.ds-badge--glass {\n  background: var(--color-surface-alt);\n  box-shadow: inset 0 0 0 var(--border-width) var(--color-border-strong);\n  color: var(--color-text);\n}\n/* status badges: a dark glass pill with a 1px ring and a dot in the status colour, like the error notice */\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-1);\n  background: var(--fill-bar-alt);\n  color: var(--color-text);\n}\n.ds-badge--success::before,\n.ds-badge--warning::before,\n.ds-badge--danger::before {\n  content: \"\";\n  width: var(--size-dot);\n  height: var(--size-dot);\n  flex: none;\n  border-radius: 50%;\n}\n.ds-badge--success {\n  box-shadow: inset 0 0 0 var(--border-width) var(--color-success);\n}\n.ds-badge--success::before {\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  box-shadow: inset 0 0 0 var(--border-width) var(--color-warning);\n}\n.ds-badge--warning::before {\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  box-shadow: inset 0 0 0 var(--border-width) var(--color-danger);\n}\n.ds-badge--danger::before {\n  background: var(--color-danger);\n}\n\n/* notice */\n.ds-notice {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  color: var(--color-notice-text);\n  font-size: var(--text-ui);\n}\n.ds-notice__icon {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  flex: none;\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  border-color: var(--color-danger);\n  color: var(--color-text);\n  -webkit-backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n  backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n}\n.ds-notice--error .ds-notice__icon,\n.ds-notice--error .ds-notice__title {\n  color: var(--color-danger);\n}\n.ds-notice__stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control);\n  min-height: var(--size-control);\n  padding: 0 var(--space-3);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  color: var(--color-link-quiet);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-button);\n  border-color: transparent;\n  color: var(--color-button-text);\n}\n.ds-pagination__link.is-disabled {\n  background: transparent;\n  color: var(--color-disabled-text);\n}\n\n/* dialog: strongly blurred glass box on a dimmed sheet, shown in the page flow */\n.ds-dialog {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--space-6) var(--space-4);\n  background: var(--color-overlay);\n  border-radius: var(--radius-page);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  background: linear-gradient(var(--color-surface-alt), var(--color-surface-alt)), color-mix(in srgb, var(--color-canvas) 82%, transparent);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n  -webkit-backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n  backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n}\n.ds-dialog__title {\n  margin: 0;\n  padding: var(--space-4) var(--space-4) 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  text-align: center;\n}\n.ds-dialog__body {\n  padding: var(--space-2) var(--space-4) var(--space-4);\n  color: var(--color-text-muted);\n  text-align: center;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-3);\n  padding: 0 var(--space-4) var(--space-4);\n}\n\n/* empty state */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  padding: var(--space-6) var(--space-4);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  text-align: center;\n}\n.ds-empty__icon {\n  width: var(--space-6);\n  height: var(--space-6);\n  color: var(--color-text-muted);\n}\n.ds-empty__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n}\n.ds-empty__text {\n  max-width: 44ch;\n  margin: 0 0 var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n\n/* sidebar */\n.ds-sidebar {\n  padding: var(--space-4);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n}\n.ds-sidebar__heading {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-transform: uppercase;\n}\n.ds-sidebar__heading + .ds-sidebar__list + .ds-sidebar__heading {\n  margin-top: var(--space-4);\n}\n.ds-sidebar__list {\n  margin: 0 calc(-1 * var(--space-2));\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-2);\n  border-radius: var(--radius-control);\n  color: var(--color-link-quiet);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  background: var(--color-border-muted);\n}\n.ds-sidebar__link.is-current {\n  background: var(--color-surface-alt);\n}\n\n/* menu: a drop-down of strong glass under a navigation item, shown on hover or focus */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__trigger {\n  cursor: pointer;\n}\n.ds-menu__caret {\n  width: var(--space-2);\n  height: var(--space-2);\n  flex: none;\n  margin-bottom: var(--space-1);\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__list {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  min-width: 24ch;\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: linear-gradient(var(--color-surface-alt), var(--color-surface-alt)), color-mix(in srgb, var(--color-canvas) 82%, transparent);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  -webkit-backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n  backdrop-filter: blur(calc(var(--backdrop-blur) * 3)) saturate(180%);\n}\n.ds-menu:hover .ds-menu__list,\n.ds-menu:focus-within .ds-menu__list,\n.ds-menu.is-open .ds-menu__list {\n  display: block;\n}\n.ds-menu__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-3);\n  border-radius: var(--radius-control);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  background: var(--color-border-muted);\n}\n.ds-menu__meta {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n\n/* accordion: one sheet of glass, sections that open and close */\n.ds-accordion {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n}\n.ds-accordion__item + .ds-accordion__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-accordion__summary {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  list-style: none;\n  cursor: pointer;\n}\n.ds-accordion__summary::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__summary::after {\n  content: \"\";\n  width: var(--space-2);\n  height: var(--space-2);\n  flex: none;\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  transition: var(--transition);\n}\n.ds-accordion__item[open] > .ds-accordion__summary::after {\n  transform: rotate(-135deg);\n}\n.ds-accordion__summary:focus-visible,\n.ds-accordion__summary.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-1));\n}\n.ds-accordion__body {\n  margin: 0;\n  padding: 0 var(--space-4) var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n\n/* tooltip: a round hint mark; the tip is an inverted block above it, shown on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  flex: none;\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: 50%;\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-transform: none;\n  cursor: help;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 50%;\n  z-index: 6;\n  display: none;\n  width: max-content;\n  max-width: 26ch;\n  padding: var(--space-2) var(--space-3);\n  transform: translateX(-50%);\n  background: var(--fill-inverse);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  color: var(--color-inverse-text);\n  font-family: var(--font-body);\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}\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.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n\n/* carousel: one slide showing in a sheet of glass, the rest reached by scrolling sideways; dots under it */\n.ds-carousel {\n  overflow: hidden;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n}\n.ds-carousel__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-bar);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n}\n.ds-carousel__arrows {\n  display: flex;\n  gap: var(--space-1);\n}\n.ds-carousel__arrow {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: calc(var(--size-control) - var(--space-2));\n  height: calc(var(--size-control) - var(--space-2));\n  padding: 0;\n  background: var(--color-border-muted);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n  color: var(--color-bar-text);\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-carousel__arrow:hover,\n.ds-carousel__arrow.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-carousel__arrow.is-disabled {\n  opacity: 0.45;\n  cursor: default;\n}\n.ds-carousel__track {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  overflow-x: auto;\n  list-style: none;\n  scroll-snap-type: x mandatory;\n  scrollbar-width: none;\n}\n.ds-carousel__track::-webkit-scrollbar {\n  display: none;\n}\n.ds-carousel__slide {\n  flex: 0 0 100%;\n  min-width: 0;\n  padding: var(--space-4);\n  scroll-snap-align: start;\n}\n.ds-carousel__dots {\n  display: flex;\n  justify-content: center;\n  gap: var(--space-2);\n  padding: 0 0 var(--space-3);\n}\n.ds-carousel__dot {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  border-radius: var(--radius-pill);\n  background: color-mix(in srgb, var(--color-text) 28%, transparent);\n}\n.ds-carousel__dot.is-current {\n  width: calc(var(--size-dot) * 3);\n  background: var(--color-accent);\n}\n\n/* switch: an on/off control drawn over a checkbox */\n.ds-switch {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-size: var(--text-ui);\n  cursor: pointer;\n}\n.ds-switch + .ds-switch {\n  margin-top: var(--space-3);\n  padding-top: var(--space-3);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-switch__text {\n  min-width: 0;\n}\n.ds-switch__hint {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-switch__input {\n  position: absolute;\n  right: 0;\n  width: calc(var(--size-thumb) * 2);\n  height: var(--size-thumb);\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  width: calc(var(--size-thumb) * 2);\n  height: calc(var(--size-thumb) + var(--space-1));\n  flex: none;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  left: var(--space-1);\n  width: calc(var(--size-thumb) - var(--space-1));\n  height: calc(var(--size-thumb) - var(--space-1));\n  transform: translateY(-50%);\n  background: var(--color-input-text);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch__track.is-on {\n  background: var(--fill-accent);\n  border-color: transparent;\n}\n.ds-switch__input:checked + .ds-switch__track::after,\n.ds-switch__track.is-on::after {\n  left: calc(100% - var(--size-thumb));\n  background: var(--color-accent-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch__track.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-switch__input:disabled + .ds-switch__track,\n.ds-switch__track.is-disabled {\n  background: var(--color-disabled);\n  border-color: transparent;\n}\n\n/* progress: a thin track with the accent fill */\n.ds-progress {\n  display: block;\n  height: calc(var(--size-track) * 2);\n  overflow: hidden;\n  background: color-mix(in srgb, var(--color-text) 18%, transparent);\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar--25 { width: 25%; }\n.ds-progress__bar--75 { width: 75%; }\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin-bottom: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* avatar: a round account picture drawn from initials */\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control);\n  height: var(--size-control);\n  flex: none;\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n}\n.ds-avatar--2,\n.ds-avatar--3,\n.ds-avatar--4 {\n  color: var(--color-text);\n}\n.ds-avatar--2 {\n  background: color-mix(in srgb, var(--color-fill-2) 55%, transparent);\n}\n.ds-avatar--3 {\n  background: color-mix(in srgb, var(--color-fill-3) 55%, transparent);\n}\n.ds-avatar--4 {\n  background: color-mix(in srgb, var(--color-fill-4) 55%, transparent);\n}\n.ds-avatar--large {\n  width: calc(var(--size-control) * 1.6);\n  height: calc(var(--size-control) * 1.6);\n  font-size: var(--text-h3);\n}\n.ds-avatar__row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-avatar__name {\n  display: block;\n  color: var(--color-text);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n}\n.ds-avatar__meta {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* the work card: the tall sheet of glass in the right half of a screen */\n.ds-panel--card {\n  border-color: var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-panel--card .ds-panel__body {\n  padding: var(--space-5);\n}\n.ds-panel__heading {\n  margin: 0 0 var(--space-1);\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-panel__text {\n  margin: 0 0 var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n.ds-panel__text--after {\n  margin: var(--space-3) 0 0;\n}\n.ds-panel__band {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-5);\n  background: var(--fill-inverse);\n  border-radius: 0 0 var(--radius-page) var(--radius-page);\n  color: var(--color-inverse-text);\n  font-size: var(--text-ui);\n}\n.ds-panel__band-link {\n  color: var(--color-inverse-text);\n  font-weight: var(--weight-bold);\n  text-decoration: underline;\n}\n.ds-panel__pair {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-2);\n  font-size: var(--text-ui);\n}\n.ds-panel__pair-value {\n  font-weight: var(--weight-bold);\n}\n.ds-button--block {\n  width: 100%;\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-3);\n}\n.ds-form__label-row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* stats: figures set straight on the backdrop, each behind a short accent rule */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-4);\n  margin: var(--space-5) 0 0;\n}\n.ds-stat__item {\n  padding-left: var(--space-3);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-accent);\n}\n.ds-stat__value {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  font-variant-numeric: tabular-nums;\n  text-shadow: var(--shadow-text);\n}\n.ds-stat__label {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* carousel slide of this layout: a short quotation and who said it */\n.ds-carousel--quotes {\n  margin-top: var(--space-5);\n}\n.ds-carousel__quote {\n  margin: 0 0 var(--space-3);\n  color: var(--color-text);\n  font-size: var(--text-large);\n  line-height: var(--line-heading);\n}\n\n/* tabs: text tabs on a hairline; the current one carries a rule in the accent colour */\n.ds-tabs {\n  display: flex;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-tabs__tab {\n  display: block;\n  margin-bottom: calc(-1 * var(--border-width));\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-text);\n}\n.ds-tabs__tab.is-current {\n  border-bottom-color: var(--color-accent);\n  color: var(--color-heading);\n}\n\n/* grid: template cards of tinted glass, each with a small drawing of its layout */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  padding: var(--space-3);\n  background: linear-gradient(180deg, var(--color-surface-alt), transparent), var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-text);\n  text-decoration: none;\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  transition: var(--transition);\n}\n.ds-grid__cell--1 {\n  background-color: color-mix(in srgb, var(--color-fill-1) 55%, transparent);\n}\n.ds-grid__cell--2 {\n  background-color: color-mix(in srgb, var(--color-fill-2) 55%, transparent);\n}\n.ds-grid__cell--3 {\n  background-color: color-mix(in srgb, var(--color-fill-3) 55%, transparent);\n}\n.ds-grid__cell--4 {\n  background-color: color-mix(in srgb, var(--color-fill-4) 55%, transparent);\n}\n.ds-grid__cell:hover,\n.ds-grid__cell.is-hover {\n  box-shadow: var(--shadow-dialog);\n}\n.ds-grid__cell.is-current {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-grid__mock {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-1);\n  height: var(--size-mock);\n  margin-bottom: var(--space-2);\n  padding: var(--space-2);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-control);\n}\n.ds-grid__mock--rows {\n  grid-template-columns: minmax(0, 1fr);\n}\n.ds-grid__bar {\n  background: color-mix(in srgb, var(--color-text) 22%, transparent);\n  border-radius: var(--radius-control);\n}\n.ds-grid__bar--short {\n  align-self: start;\n  height: 55%;\n}\n.ds-grid__label {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-grid__value {\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-grid__meta {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* footer: one line on the backdrop over a hairline */\n.ds-footer {\n  margin-top: var(--space-6);\n  background: var(--fill-bar-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  color: var(--color-bar-alt-text);\n  font-size: var(--text-small);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n}\n.ds-footer__inner {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  max-width: calc(var(--size-page) + 2 * var(--space-4));\n  margin: 0 auto;\n  padding: var(--space-3) var(--space-4);\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: underline;\n}\n\n/* adjustments to the shared parts for this layout */\n.ds-breadcrumb {\n  margin-top: var(--space-2);\n}\n.ds-page-header {\n  padding-bottom: var(--space-5);\n}\n.ds-panel__title,\n.ds-form__label,\n.ds-table th,\n.ds-sidebar__heading {\n  text-transform: none;\n}\n.ds-nav .ds-menu__list {\n  right: 0;\n}\n.ds-notice .ds-link--quiet {\n  color: inherit;\n  text-decoration: underline;\n}\n.ds-list__item .ds-avatar {\n  margin-right: var(--space-1);\n}\n.ds-pagination {\n  justify-content: flex-start;\n}\n.ds-list__meta {\n  display: block;\n  overflow-wrap: anywhere;\n}\n\n@media (max-width: 1000px) {\n  .ds-page__split {\n    grid-template-columns: minmax(0, 1fr);\n    gap: var(--space-4);\n  }\n  .ds-nav__label {\n    display: none;\n  }\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n}\n@media (max-width: 720px) {\n  .ds-nav__inner {\n    flex-wrap: wrap;\n    gap: var(--space-2) var(--space-3);\n    padding-top: var(--space-3);\n  }\n  .ds-nav__list {\n    order: 3;\n    flex-basis: 100%;\n    justify-content: space-between;\n  }\n  .ds-nav__item + .ds-nav__item {\n    flex: 1;\n  }\n  .ds-nav__item + .ds-nav__item::before {\n    flex: 1;\n    width: auto;\n  }\n  .ds-page__split--home {\n    padding-top: var(--space-3);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-hero__lead {\n    font-size: var(--text-base);\n  }\n  .ds-stat {\n    gap: var(--space-3);\n  }\n  .ds-stat__value {\n    font-size: var(--text-h2);\n  }\n  .ds-panel--card .ds-panel__body {\n    padding: var(--space-4);\n  }\n  .ds-panel__band {\n    padding: var(--space-3) var(--space-4);\n  }\n  .ds-form__row {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-grid {\n    gap: var(--space-3);\n  }\n  .ds-tabs {\n    gap: var(--space-3);\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-3) var(--space-2);\n  }\n  .ds-table .ds-table__opt {\n    display: none;\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n  }\n  .ds-page-header__text {\n    flex-basis: 100%;\n  }\n  .ds-dialog {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-dialog__actions,\n  .ds-pagination {\n    flex-wrap: wrap;\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: set up your account</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=\"#welcome\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"2.5\" width=\"13\" height=\"13\" rx=\"4\" fill=\"currentColor\" opacity=\".5\"/><rect x=\"8.5\" y=\"8.5\" width=\"12.5\" height=\"12.5\" rx=\"4\" fill=\"currentColor\" fill-opacity=\".25\" stroke=\"currentColor\" stroke-width=\"1.8\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ol class=\"ds-nav__list\">\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#welcome\"><span class=\"ds-nav__num\">1</span><span class=\"ds-nav__label\">Sign in</span></a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#profile\"><span class=\"ds-nav__num\">2</span><span class=\"ds-nav__label\">Profile</span></a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#workspace\"><span class=\"ds-nav__num\">3</span><span class=\"ds-nav__label\">Workspace</span></a></li>\n      <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#team\"><span class=\"ds-nav__num\">4</span><span class=\"ds-nav__label\">Team</span></a></li>\n    </ol>\n    <div class=\"ds-nav__tools\">\n      <div class=\"ds-menu\" data-component=\"menu\">\n        <a class=\"ds-nav__help ds-menu__trigger\" href=\"#help\">Help <span class=\"ds-menu__caret\"></span></a>\n        <ul class=\"ds-menu__list\">\n          <li><a class=\"ds-menu__link\" href=\"#help\">Setup guide</a></li>\n          <li><a class=\"ds-menu__link\" href=\"#help\">Questions <span class=\"ds-menu__meta\">4</span></a></li>\n          <li><a class=\"ds-menu__link\" href=\"#team\">Ask your team</a></li>\n          <li><a class=\"ds-menu__link\" href=\"#welcome\">Start again</a></li>\n        </ul>\n      </div>\n      <a class=\"ds-avatar\" href=\"#profile\" aria-label=\"Your profile\">ME</a>\n    </div>\n  </div>\n</header>\n\n<main class=\"ds-page__inner\">\n\n  <section class=\"ds-view ds-view--home\" id=\"welcome\">\n    <div class=\"ds-page__split ds-page__split--home\">\n      <div class=\"ds-page__text\">\n        <section class=\"ds-hero\" data-component=\"hero\">\n          <span class=\"ds-badge\">New: bring a spreadsheet with you</span>\n          <h1 class=\"ds-hero__title\">Four short steps and your team is in</h1>\n          <p class=\"ds-hero__lead\">Sign in, say who you are, pick a workspace and invite the others. Nothing is charged and every step can be changed later.</p>\n          <div class=\"ds-hero__actions\">\n            <a class=\"ds-button ds-button--large\" href=\"#profile\">Create an account</a>\n            <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#help\">Read the guide</a>\n          </div>\n        </section>\n        <dl class=\"ds-stat\" data-component=\"stats\">\n          <div class=\"ds-stat__item\"><dd class=\"ds-stat__value\">4</dd><dt class=\"ds-stat__label\">steps, one screen each</dt></div>\n          <div class=\"ds-stat__item\"><dd class=\"ds-stat__value\">6 min</dd><dt class=\"ds-stat__label\">for most people</dt></div>\n          <div class=\"ds-stat__item\"><dd class=\"ds-stat__value\">0</dd><dt class=\"ds-stat__label\">card details asked</dt></div>\n        </dl>\n        <section class=\"ds-carousel ds-carousel--quotes\" data-component=\"carousel\" aria-label=\"What people set up first\">\n          <ul class=\"ds-carousel__track\">\n            <li class=\"ds-carousel__slide\">\n              <p class=\"ds-carousel__quote\">We imported the rota on a Friday and ran Monday from the board. Nobody asked where the spreadsheet had gone.</p>\n              <div class=\"ds-avatar__row\"><span class=\"ds-avatar ds-avatar--2\">DW</span><span><span class=\"ds-avatar__name\">Dana Whitlow</span><span class=\"ds-avatar__meta\">Harbour Point boat club</span></span></div>\n            </li>\n            <li class=\"ds-carousel__slide\">\n              <p class=\"ds-carousel__quote\">The blank workspace was enough. Two lists and we were away.</p>\n              <div class=\"ds-avatar__row\"><span class=\"ds-avatar ds-avatar--3\">KO</span><span><span class=\"ds-avatar__name\">Kofi Osei</span><span class=\"ds-avatar__meta\">Saltmarsh allotments</span></span></div>\n            </li>\n          </ul>\n          <div class=\"ds-carousel__dots\"><span class=\"ds-carousel__dot is-current\"></span><span class=\"ds-carousel__dot\"></span><span class=\"ds-carousel__dot\"></span></div>\n        </section>\n      </div>\n      <section class=\"ds-panel ds-panel--card\">\n        <div class=\"ds-panel__body\">\n          <h2 class=\"ds-panel__heading\">Sign in</h2>\n          <p class=\"ds-panel__text\">Step 1 of 4. New here? The same form creates your account.</p>\n          <div class=\"ds-form\">\n            <div data-component=\"progress\">\n              <span class=\"ds-progress__label\"><span>Setup</span><span>25%</span></span>\n              <span class=\"ds-progress\"><span class=\"ds-progress__bar ds-progress__bar--25\"></span></span>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"w-mail\">Email</label>\n              <input class=\"ds-form__input\" id=\"w-mail\" type=\"email\" value=\"mara@harbourpoint.example\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"w-pass\">Password</label>\n              <input class=\"ds-form__input\" id=\"w-pass\" type=\"password\" placeholder=\"At least 12 characters\">\n            </div>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Keep me signed in on this device</label>\n            <a class=\"ds-button ds-button--large ds-button--block\" href=\"#profile\">Continue</a>\n            <a class=\"ds-button ds-button--secondary ds-button--block\" href=\"#profile\">Email me a sign-in link</a>\n          </div>\n          <p class=\"ds-panel__text ds-panel__text--after\">By continuing you accept the <a class=\"ds-link\" href=\"#help\">terms of use</a>.</p>\n        </div>\n        <div class=\"ds-panel__band\">\n          <span>Invited by a team?</span>\n          <a class=\"ds-panel__band-link\" href=\"#team\">Enter your code</a>\n        </div>\n      </section>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"profile\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#welcome\">Setup</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#profile\">Step 2 of 4</a></li>\n      <li class=\"ds-breadcrumb__item\">Profile</li>\n    </ol>\n    <header class=\"ds-page-header\" data-component=\"page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Say who you are</h1>\n        <p class=\"ds-page-header__lead\">Your team sees this beside everything you add.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#workspace\">Skip this step</a>\n      </div>\n    </header>\n    <div class=\"ds-page__split\">\n      <div class=\"ds-page__col\">\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h2 class=\"ds-panel__title\">Your picture</h2>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-avatar__row\" data-component=\"avatar\">\n              <span class=\"ds-avatar ds-avatar--large\">ME</span>\n              <span><span class=\"ds-avatar__name\">Mara Ellison</span><span class=\"ds-avatar__meta\">Drawn from your initials until you upload a photo</span></span>\n            </div>\n            <div class=\"ds-button__row\">\n              <span class=\"ds-avatar\">ME</span><span class=\"ds-avatar ds-avatar--2\">ME</span><span class=\"ds-avatar ds-avatar--3\">ME</span><span class=\"ds-avatar ds-avatar--4\">ME</span>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Upload a photo</button>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Tell me about</h2>\n          <div class=\"ds-panel__body\">\n            <label class=\"ds-switch\" data-component=\"switch\">\n              <span class=\"ds-switch__text\">Mentions and replies<span class=\"ds-switch__hint\">By email, at once</span></span>\n              <input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span>\n            </label>\n            <label class=\"ds-switch\">\n              <span class=\"ds-switch__text\">A weekly summary<span class=\"ds-switch__hint\">Mondays at 08:00</span></span>\n              <input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span>\n            </label>\n            <label class=\"ds-switch\">\n              <span class=\"ds-switch__text\">Product news<span class=\"ds-switch__hint\">About once a month</span></span>\n              <input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span>\n            </label>\n          </div>\n        </section>\n        <div class=\"ds-accordion\" data-component=\"accordion\">\n          <details class=\"ds-accordion__item\" open>\n            <summary class=\"ds-accordion__summary\">Why do you ask for my role?</summary>\n            <p class=\"ds-accordion__body\">It decides which workspace templates are offered in the next step. Nobody else sees it.</p>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__summary\">Can I change my handle later?</summary>\n            <p class=\"ds-accordion__body\">Once every 30 days, from your profile.</p>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__summary\">Who can see my email address?</summary>\n            <p class=\"ds-accordion__body\">Only the owners of workspaces you join.</p>\n          </details>\n        </div>\n      </div>\n      <section class=\"ds-panel ds-panel--card\">\n        <div class=\"ds-panel__body\">\n          <h2 class=\"ds-panel__heading\">Profile</h2>\n          <p class=\"ds-panel__text\">Step 2 of 4. Two fields are required.</p>\n          <form class=\"ds-form\" data-component=\"form\">\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-name\">Full name</label>\n              <input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"Mara Ellison\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-handle\">Handle</label>\n              <input class=\"ds-form__input is-error\" id=\"f-handle\" type=\"text\" value=\"mara ellison\">\n              <span class=\"ds-form__error\">A handle has no spaces. Try mara-ellison.</span>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-role\">Role</label>\n              <span class=\"ds-form__select-wrap\">\n                <select class=\"ds-form__select\" id=\"f-role\"><option>Organiser</option><option>Member</option><option>Just looking</option></select>\n                <svg class=\"ds-form__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 9l6 6 6-6\"/></svg>\n              </span>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-bio\">About you</label>\n              <textarea class=\"ds-form__textarea\" id=\"f-bio\">Keeps the rota for the Harbour Point boat club.</textarea>\n              <span class=\"ds-form__hint\">One or two lines. Optional.</span>\n            </div>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Show my role to people I invite</label>\n            <div class=\"ds-form__actions\" data-component=\"buttons\">\n              <a class=\"ds-button\" href=\"#workspace\">Continue</a>\n              <a class=\"ds-button ds-button--secondary\" href=\"#welcome\">Back</a>\n              <button class=\"ds-button is-disabled\" type=\"button\" disabled>Import</button>\n              <a class=\"ds-button ds-button--danger\" href=\"#welcome\">Discard</a>\n            </div>\n          </form>\n        </div>\n      </section>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"workspace\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#welcome\">Setup</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#workspace\">Step 3 of 4</a></li>\n      <li class=\"ds-breadcrumb__item\">Workspace</li>\n    </ol>\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Pick a workspace to start from</h1>\n        <p class=\"ds-page-header__lead\">A template is only a first arrangement. Everything in it can be renamed or removed.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#profile\">Back</a>\n        <a class=\"ds-button\" href=\"#team\">Use Club rota</a>\n      </div>\n    </header>\n    <div class=\"ds-page__col\">\n      <ul class=\"ds-tabs\" data-component=\"tabs\">\n        <li><a class=\"ds-tabs__tab is-current\" href=\"#workspace\">For organisers</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#workspace\">For small teams</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#workspace\">Personal</a></li>\n      </ul>\n      <section class=\"ds-grid\" data-component=\"grid\">\n        <a class=\"ds-grid__cell ds-grid__cell--1 is-current\" href=\"#workspace\"><span class=\"ds-grid__mock\"><span class=\"ds-grid__bar\"></span><span class=\"ds-grid__bar ds-grid__bar--short\"></span><span class=\"ds-grid__bar\"></span></span><span class=\"ds-grid__label\">Selected</span><span class=\"ds-grid__value\">Club rota</span><span class=\"ds-grid__meta\">3 boards, 12 lists, a calendar</span></a>\n        <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#workspace\"><span class=\"ds-grid__mock ds-grid__mock--rows\"><span class=\"ds-grid__bar\"></span><span class=\"ds-grid__bar\"></span><span class=\"ds-grid__bar\"></span></span><span class=\"ds-grid__label\">Most used</span><span class=\"ds-grid__value\">Event plan</span><span class=\"ds-grid__meta\">1 board, a timeline, a budget</span></a>\n        <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#workspace\"><span class=\"ds-grid__mock\"><span class=\"ds-grid__bar ds-grid__bar--short\"></span><span class=\"ds-grid__bar\"></span><span class=\"ds-grid__bar ds-grid__bar--short\"></span></span><span class=\"ds-grid__label\">For committees</span><span class=\"ds-grid__value\">Minutes and actions</span><span class=\"ds-grid__meta\">2 boards, 6 lists</span></a>\n        <a class=\"ds-grid__cell ds-grid__cell--4\" href=\"#workspace\"><span class=\"ds-grid__mock ds-grid__mock--rows\"><span class=\"ds-grid__bar\"></span></span><span class=\"ds-grid__label\">Start empty</span><span class=\"ds-grid__value\">Blank</span><span class=\"ds-grid__meta\">1 board, nothing on it</span></a>\n      </section>\n      <div class=\"ds-page__split ds-page__split--wide\">\n        <div class=\"ds-page__col\">\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr><th>Club rota creates</th><th class=\"ds-table__opt\">Holds</th><th class=\"ds-table__num\">Items</th><th class=\"ds-table__num\">Sample rows</th></tr>\n            </thead>\n            <tbody>\n              <tr><td>Boards</td><td class=\"ds-table__opt\">Duties, boats, members</td><td class=\"ds-table__num\">3</td><td class=\"ds-table__num\">24</td></tr>\n              <tr><td>Lists</td><td class=\"ds-table__opt\">One per week and per boat</td><td class=\"ds-table__num\">12</td><td class=\"ds-table__num\">96</td></tr>\n              <tr><td>Calendar</td><td class=\"ds-table__opt\">Tides and race days</td><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">18</td></tr>\n              <tr><td>Roles</td><td class=\"ds-table__opt\">Owner, editor, viewer</td><td class=\"ds-table__num\">3</td><td class=\"ds-table__num\">0</td></tr>\n              <tr><td>Reminders</td><td class=\"ds-table__opt\">The evening before a duty</td><td class=\"ds-table__num\">2</td><td class=\"ds-table__num\">0</td></tr>\n            </tbody>\n          </table>\n          <ul class=\"ds-pagination\" data-component=\"pagination\">\n            <li><a class=\"ds-pagination__link is-disabled\" href=\"#workspace\">Previous</a></li>\n            <li><a class=\"ds-pagination__link is-current\" href=\"#workspace\">1</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#workspace\">2</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#workspace\">3</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#workspace\">Next</a></li>\n          </ul>\n        </div>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Your choice</h2>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__pair\"><span>Template</span> <span class=\"ds-panel__pair-value\">Club rota</span></p>\n            <p class=\"ds-panel__pair\"><span>Sample rows</span> <span class=\"ds-panel__pair-value\">138</span></p>\n            <p class=\"ds-panel__pair\"><span>Step</span> <span class=\"ds-panel__pair-value\">3 of 4</span></p>\n            <span class=\"ds-progress\"><span class=\"ds-progress__bar ds-progress__bar--75\"></span></span>\n            <p class=\"ds-panel__text ds-panel__text--after\">Sample rows are marked and can be cleared in one go from <a class=\"ds-link\" href=\"#help\">workspace settings</a>.</p>\n          </div>\n        </section>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"team\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#welcome\">Setup</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#team\">Step 4 of 4</a></li>\n      <li class=\"ds-breadcrumb__item\">Team</li>\n    </ol>\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Invite the others</h1>\n        <p class=\"ds-page-header__lead\">Four invitations sent, one accepted, one came back.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#workspace\">Back</a>\n        <a class=\"ds-button\" href=\"#help\">Finish setup</a>\n      </div>\n    </header>\n    <div class=\"ds-page__split\">\n      <div class=\"ds-page__col\">\n        <div class=\"ds-notice__stack\" data-component=\"notice\">\n          <div class=\"ds-notice\">\n            <svg class=\"ds-notice__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n            <div><span class=\"ds-notice__title\">Invitations last seven days.</span> After that the link stops working and you can send a new one.</div>\n          </div>\n          <div class=\"ds-notice ds-notice--error\">\n            <svg class=\"ds-notice__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 4l9 15H3z\"/><path d=\"M12 10v4M12 17h.01\"/></svg>\n            <div><span class=\"ds-notice__title\">One address bounced.</span> kofi@saltmarsh.example does not accept mail.</div>\n          </div>\n        </div>\n        <h2 class=\"ds-page__heading\">Invited <span class=\"ds-badge\" data-component=\"badge\">4</span></h2>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar \">DW</span>\n            <div class=\"ds-list__body\"><a class=\"ds-list__title\" href=\"#team\">Dana Whitlow</a><span class=\"ds-list__meta\">dana@harbourpoint.example, editor</span></div>\n            <span class=\"ds-badge ds-badge--success\">Joined</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar ds-avatar--2\">TR</span>\n            <div class=\"ds-list__body\"><a class=\"ds-list__title\" href=\"#team\">Tobias Renn</a><span class=\"ds-list__meta\">tobias@harbourpoint.example, editor</span></div>\n            <span class=\"ds-badge ds-badge--warning\">Invited</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar ds-avatar--3\">IV</span>\n            <div class=\"ds-list__body\"><a class=\"ds-list__title\" href=\"#team\">Ines Varga</a><span class=\"ds-list__meta\">ines@wrenhill.example, viewer</span></div>\n            <span class=\"ds-badge ds-badge--warning\">Invited</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-avatar ds-avatar--4\">KO</span>\n            <div class=\"ds-list__body\"><a class=\"ds-list__title\" href=\"#team\">Kofi Osei</a><span class=\"ds-list__meta\">kofi@saltmarsh.example, editor</span></div>\n            <span class=\"ds-badge ds-badge--danger\">Bounced</span>\n          </li>\n        </ul>\n        <section class=\"ds-empty\" data-component=\"empty\">\n          <svg class=\"ds-empty__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M3 7l9 6 9-6\"/></svg>\n          <h2 class=\"ds-empty__title\">Nobody has asked to join</h2>\n          <p class=\"ds-empty__text\">People who open your workspace link without an invitation appear here for you to approve.</p>\n          <a class=\"ds-button ds-button--secondary\" href=\"#team\">Copy the workspace link</a>\n        </section>\n      </div>\n      <div class=\"ds-page__col\">\n        <section class=\"ds-panel ds-panel--card\">\n          <div class=\"ds-panel__body\">\n            <h2 class=\"ds-panel__heading\">Send an invitation</h2>\n            <p class=\"ds-panel__text\">Step 4 of 4. One address at a time, or paste a list.</p>\n            <div class=\"ds-form\">\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"t-mail\">Email</label>\n                <input class=\"ds-form__input\" id=\"t-mail\" type=\"email\" placeholder=\"name@example.org\">\n              </div>\n              <div class=\"ds-form__field\">\n                <span class=\"ds-form__label-row\"><label class=\"ds-form__label\" for=\"t-role\">Role</label> <span class=\"ds-tooltip\" data-component=\"tooltip\" tabindex=\"0\">?<span class=\"ds-tooltip__tip\" role=\"tooltip\">Editors change rows. Viewers read and comment.</span></span></span>\n                <span class=\"ds-form__select-wrap\">\n                  <select class=\"ds-form__select\" id=\"t-role\"><option>Editor</option><option>Viewer</option><option>Owner</option></select>\n                  <svg class=\"ds-form__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 9l6 6 6-6\"/></svg>\n                </span>\n              </div>\n              <a class=\"ds-button ds-button--block\" href=\"#team\">Send invitation</a>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-dialog\" data-component=\"dialog\">\n          <div class=\"ds-dialog__box\" role=\"dialog\" aria-label=\"Withdraw invitation\">\n            <h2 class=\"ds-dialog__title\">Withdraw Kofi's invitation?</h2>\n            <p class=\"ds-dialog__body\">The address bounced. Withdrawing frees the seat; you can invite him again at another address.</p>\n            <div class=\"ds-dialog__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#team\">Keep</a>\n              <a class=\"ds-button ds-button--danger\" href=\"#team\">Withdraw</a>\n            </div>\n          </div>\n        </section>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"help\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#welcome\">Setup</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#help\">Help</a></li>\n      <li class=\"ds-breadcrumb__item\">Setup guide</li>\n    </ol>\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Setup guide</h1>\n        <p class=\"ds-page-header__lead\">What each step does and what you can leave for later.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#welcome\">Back to setup</a>\n      </div>\n    </header>\n    <div class=\"ds-page__split\">\n      <section class=\"ds-panel\">\n        <div class=\"ds-panel__body\">\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>From sign-in to a working board</h1>\n            <p class=\"ds-prose__lead\">Setup has four screens. Only the first is required; the rest fill in sensible defaults if you skip them.</p>\n            <h2>What is saved, and when</h2>\n            <p>Each step is saved when you press <strong>Continue</strong>. Leaving half way keeps what you entered for seven days under your email address.</p>\n            <h3>What you can skip</h3>\n            <ul>\n              <li>Profile: your name is taken from your email address.</li>\n              <li>Workspace: you get the blank template.</li>\n              <li>Team: you can invite people at any time.</li>\n            </ul>\n            <h3>Coming back to a step</h3>\n            <p>The numbered steps at the top are links. To reopen one from elsewhere, add <code>#profile</code> or <code>#team</code> to the setup address.</p>\n            <p class=\"ds-link__sample\" data-component=\"links\">\n              <a class=\"ds-link\" href=\"#workspace\">Workspace templates</a>\n              <a class=\"ds-link is-visited\" href=\"#profile\">Visited: profile</a>\n              <a class=\"ds-link is-hover\" href=\"#help\">Hovered link</a>\n              <a class=\"ds-link is-active\" href=\"#help\">Active link</a>\n            </p>\n          </article>\n        </div>\n      </section>\n      <div class=\"ds-page__col\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__heading\">In this guide</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link is-current\" href=\"#help\">From sign-in to a working board</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#workspace\">Choosing a template</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#team\">Roles and invitations <span class=\"ds-badge ds-badge--alt\">New</span></a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#profile\">Your profile</a></li>\n          </ul>\n        </aside>\n        <div class=\"ds-accordion\">\n          <details class=\"ds-accordion__item\" open>\n            <summary class=\"ds-accordion__summary\">Is there anything to pay?</summary>\n            <p class=\"ds-accordion__body\">No. Setup never asks for card details, and a workspace of up to ten people stays free.</p>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__summary\">Can two people own a workspace?</summary>\n            <p class=\"ds-accordion__body\">Yes. Give a second person the owner role in step 4.</p>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__summary\">How do I bring a spreadsheet?</summary>\n            <p class=\"ds-accordion__body\">Choose any template, then use Import on its first board.</p>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__summary\">What if I picked the wrong template?</summary>\n            <p class=\"ds-accordion__body\">Clear the sample rows and apply another from workspace settings.</p>\n          </details>\n        </div>\n      </div>\n    </div>\n  </section>\n\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <span>chronoskin setup. Your progress is kept for seven days.</span>\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-footer__link\" href=\"#help\">Help</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#welcome\">Sign in</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#team\">Invitations</a></li>\n    </ul>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.glassmorphism.landing.s08.p01.t11.u11\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"glassmorphism\",\n    \"years\": [\n      2020,\n      2026\n    ]\n  },\n  \"archetype\": \"landing\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": false,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-gl-81bb\",\n  \"short\": \"v1-gl-81bb\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: rgb(17 25 39);\n  --color-canvas: rgb(17 25 39);\n  --color-surface: rgb(255 255 255 / 0.2);\n  --color-surface-alt: rgb(255 255 255 / 0.25);\n  --color-surface-strong: rgb(255 255 255 / 0.4);\n  --color-bar: rgb(17 25 40 / 0.75);\n  --color-bar-text: rgb(255 255 255);\n  --color-bar-alt: rgb(17 25 40 / 0.6);\n  --color-bar-alt-text: rgb(228 231 235);\n  --color-inverse: rgb(241 247 255);\n  --color-inverse-text: rgb(39 55 76);\n  --color-text: rgb(255 255 255);\n  --color-text-muted: rgb(209 213 219);\n  --color-heading: rgb(255 255 255);\n  --color-heading-alt: rgb(228 231 235);\n  --color-link: rgb(38 230 255);\n  --color-link-quiet: rgb(255 255 255);\n  --color-link-visited: rgb(128 175 231);\n  --color-link-hover: rgb(255 255 255);\n  --color-link-active: rgb(79 229 255);\n  --color-border: rgb(255 255 255 / 0.18);\n  --color-border-strong: rgb(255 255 255 / 0.3);\n  --color-border-muted: rgb(255 255 255 / 0.125);\n  --color-accent: rgb(79 229 255);\n  --color-accent-text: rgb(17 25 39);\n  --color-accent-alt: rgb(19 169 135);\n  --color-fill-1: rgb(46 29 125);\n  --color-fill-2: rgb(47 110 211);\n  --color-fill-3: rgb(138 35 135);\n  --color-fill-4: rgb(80 149 228);\n  --color-button: rgb(241 247 255);\n  --color-button-text: rgb(31 57 88);\n  --color-button-hover-text: rgb(17 25 39);\n  --color-button-secondary: rgb(255 255 255 / 0.25);\n  --color-button-secondary-text: rgb(255 255 255);\n  --color-input: rgb(17 25 40 / 0.6);\n  --color-input-text: rgb(255 255 255);\n  --color-input-border: rgb(255 255 255 / 0.3);\n  --color-disabled: rgb(75 86 99);\n  --color-disabled-text: rgb(156 163 175);\n  --color-danger: rgb(242 84 91);\n  --color-danger-surface: rgb(17 25 40 / 0.75);\n  --color-success: rgb(19 169 135);\n  --color-warning: rgb(242 113 33);\n  --color-notice: rgb(225 236 244 / 0.6);\n  --color-notice-text: rgb(39 55 76);\n  --color-focus: rgb(38 230 255);\n  --color-shadow: rgb(31 38 135 / 0.37);\n  --color-overlay: rgb(0 0 0 / 0.61);\n}\n\n/* @part type */\n:root {\n  --font-body: Inter, \"SF Pro Text\", system-ui, -apple-system, \"Segoe UI\", sans-serif;\n  --font-heading: Inter, \"SF Pro Text\", system-ui, -apple-system, \"Segoe UI\", sans-serif;\n  --font-ui: \"Geist Mono\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, \"Roboto Mono\", Menlo, monospace;\n  --font-mono: \"Geist Mono\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, \"Roboto Mono\", Menlo, monospace;\n  --text-base: 16px;\n  --text-small: 13px;\n  --text-ui: 13px;\n  --text-large: 18px;\n  --text-display: 56px;\n  --text-h1: 36px;\n  --text-h2: 24px;\n  --text-h3: 18px;\n  --line-body: 1.6;\n  --line-heading: 1.33;\n  --line-display: 1.14;\n  --weight-body: 400;\n  --weight-bold: 600;\n  --weight-heading: 500;\n  --weight-display: 500;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 3px;\n  --radius-panel: 6px;\n  --radius-pill: 30px;\n  --radius-page: 10px;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 0 0 0 2px var(--color-border-strong);\n  --shadow-control-pressed: none;\n  --shadow-dialog: 0 24px 48px 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page:\n    radial-gradient(circle, color-mix(in srgb, var(--color-text) 16%, transparent) 1px, transparent 1px) 0 0 / 24px 24px,\n    radial-gradient(ellipse 760px 420px at 50% 0, var(--color-fill-1), transparent),\n    radial-gradient(ellipse 620px 480px at 100% 1500px, var(--color-fill-1), transparent),\n    radial-gradient(ellipse 620px 480px at 0 2700px, var(--color-fill-1), transparent),\n    radial-gradient(ellipse 620px 480px at 100% 3900px, var(--color-fill-1), transparent),\n    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: color-mix(in srgb, var(--color-surface), black 35%);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button), white 60%);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px dashed var(--color-focus);\n  --transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;\n  --backdrop-blur: 3px;\n}\n"
  }
}
