{
  "id": "v1-dd-1241",
  "long_id": "v1.dev-dark.landing.s01.p02.t04.u01",
  "name": "Dark developer tools landing page",
  "era": {
    "slug": "dev-dark",
    "code": "dd",
    "name": "Dark developer tools",
    "years": [
      2019,
      2026
    ],
    "description": "Developer products of 2019 to 2026: a near-black page, hairline borders in translucent white, small precise sans type, subtle glows and gradients behind a hero, monospace details and one bright accent."
  },
  "archetype": "landing",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": false,
    "responsive": true
  },
  "summary": "This is the product page of a developer tool as it looked from 2019 to 2026: a near-black page, hairline borders in translucent white, small precise sans-serif type and one soft glow of colour behind the hero. The claim is centred over the glow, the product is shown as a window with a status list and a build log, and below it come customer names set as text, a ruled strip of figures and a grid of bordered cards that each hold a small line drawing. Monospace is used for every detail that a developer would read as data: commands, dates, ids, labels above sections and the heads of tables.",
  "url": "https://chrono.skin/s/v1-dd-1241",
  "preview_url": "https://chrono.skin/s/v1-dd-1241/specimen.html",
  "files": {
    "STYLE.md": "# Dark developer tools landing page\n\n## Summary\n\nThis is the product page of a developer tool as it looked from 2019 to 2026: a near-black page, hairline borders in translucent white, small precise sans-serif type and one soft glow of colour behind the hero. The claim is centred over the glow, the product is shown as a window with a status list and a build log, and below it come customer names set as text, a ruled strip of figures and a grid of bordered cards that each hold a small line drawing. Monospace is used for every detail that a developer would read as data: commands, dates, ids, labels above sections and the heads of tables.\n\n## Layout\n\n- The page is designed for a 1440px viewport and is not fluid: content sits in one centred column, `.ds-wrap`, at most `--size-page` (1200px) wide with `--space-5` (24px) of side padding. Running text is kept to `--size-narrow` (720px).\n- Navigation is `.ds-nav`, a bar `--size-top` (56px) tall that stays at the top of the window on the translucent `--fill-bar`, blurred by `--backdrop-blur`, with a hairline below. Brand at the left, four links after it, a secondary and a primary small button at the right. There is no sidebar on the home view.\n- The home view stacks, top to bottom: `.ds-hero` (announcement pill, title, lead, two large buttons, a mono command line, then `.ds-frame`, the product window); `.ds-logos`; `.ds-stat`, four figures in one ruled strip; a band with `.ds-section__head` and `.ds-grid` (three columns, the first card two columns wide); a band with `.ds-cols`, a code panel beside the dated `.ds-list`; and `.ds-cta`, the one inverted block. Bands are `.ds-band`, padded by `--space-8` (88px) and parted by a hairline in `--color-border-muted`.\n- Inner pages have no hero. They open with `.ds-page-header`: breadcrumb, a `--text-h1` title and one muted line at the left, at most two buttons at the right, over a small glow. Below it the work sits in `.ds-wrap`: a `.ds-stack` (24px apart) or `.ds-cols`. `.ds-cols` is two equal columns; `--wide` is 2 to 1 and `--side` is a main column beside a `--size-side` (300px) column. Tabs are a segmented control in a `.ds-toolbar` directly under the page header.\n- Views. The specimen is a deployment service with four views. `home` is the landing page described above. `pricing` has the tabs for the billing period, three `.ds-plan` cards, the comparison table beside the panel of the current plan with its buttons, and the open dialog that cancels the plan. `changelog` has two `.ds-entry` articles and the pagination in the main column; the releases sidebar, the label key, an empty state and a row of links at the right. `start` is the sign-up form under its notices, beside the steps, a terminal block and the limits of the free plan.\n- Spacing scale: `--space-1` 4px (inside pills and key caps, between pagination links), `--space-2` 8px (button vertical padding, between adjacent buttons and badges), `--space-3` 12px (panel head and table cell vertical padding), `--space-4` 16px (panel padding, between grid cards, between form rows), `--space-5` 24px (between stacked blocks, side padding, plan padding), `--space-6` 32px (between columns, around a dialog and an empty state), `--space-7` 48px (page header top, hero to frame, inverted block padding), `--space-8` 88px (band and hero padding, above the footer).\n- Other sizes: `--size-art` 168px (the drawing area of a card), `--size-glow` 560px (height of the hero glow), `--size-date` 120px (the date column of lists and entries), `--size-mark` 24px, `--size-dot` 8px, `--size-dialog` 440px.\n- Below 980px cards stand two across and every column pair stacks. Below 640px everything is one column, the links of the bar move to a second row that scrolls sideways, and a wide table scrolls inside `.ds-table__wrap`; the page itself never scrolls sideways.\n- On a phone (640px and below) `.ds-nav__inner` wraps: the brand and `.ds-nav__actions` stay on the first row, `.ds-nav__links` take a second row of their own that scrolls sideways, each link sharing the width equally with centred text; the secondary button of the actions is not shown. The `.ds-menu` stays in the actions and lists every view as `.ds-menu__item--view` rows, the current one with the accent line. A tooltip in a panel title opens under its line with a capped width.\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\nThe conventions for which text sits on which fill are those of the era's first layout and are kept here.\n\n- `--color-text`, `--color-heading` and `--color-text-muted` sit on the page, on `--fill-panel`, `--color-surface-alt` (the stat band, a hovered row, the dialog) and `--color-surface-strong` (the current chip, key caps, quiet badges, empty tally cells). `--color-bar-text` sits on `--fill-bar` (the top bar). `--color-bar-alt-text` sits on `--fill-bar-alt` (the ticker, the head of the release card, code heads, table heads, the footer), with `--color-heading` for a link or the brand on that fill. `--color-input-text` sits on `--fill-input` (form controls and every code block). `--color-inverse-text` sits on `--fill-inverse`, used once per view, for `.ds-callout`.\n- `--color-fill-1` to `--color-fill-4` never carry text. They tint the cover of a card (a gradient from 30% to 6% of the fill over transparent) and colour its drawing (70% of the fill mixed into `--color-heading`); `--color-fill-1` is the hero glow.\n- `--color-accent` marks the current link of the bar and fills the default badge through `--fill-accent`. `--color-accent-alt` is a line and text colour: the mono label of the hero, the node of each timeline entry, the dot of the current sidebar row, the \"changed\" cells of a tally, keywords in code.\n- `--color-success`, `--color-warning` and `--color-danger` are a dot, text, the lit cells of a tally, or a 12% tint with a 32% hairline and the colour as text. Added and removed lines of a diff are a 13% tint with text mixed 55% into `--color-input-text`. Nothing else is filled with them; the destructive button is a tint too.\n- Borders: `--color-border` on boxes and bars, `--color-border-strong` on the release card, secondary buttons, the timeline rule, the current chip and the dialog, `--color-border-muted` between rows inside a box. All `--border-width`; `--border-width-strong` is the line under the current link and the focus offset.\n- Type. One family for body, headings and controls, `--font-mono` for versions, dates, counts, the ticker and code. `--text-base` 15px at `--line-body` 1.5; `--text-ui` 14px for navigation, buttons, forms, tables and card text; `--text-small` 12px for badges, mono labels and dates; `--text-large` 18px for the hero lead and timeline titles. `--text-display` 64px is the hero title only; `--text-h1` 38px page titles, figures and the version on the release card; `--text-h2` 26px column heads and the lead card; `--text-h3` 16px panel and card titles. Headings are `--weight-heading` 700 with negative tracking.\n- Uppercase appears only on mono labels (`.ds-eyebrow`, table heads, sidebar titles), tracked by 6% of the font size. Links are `--color-link` without underline and gain one on hover; quiet links are `--color-link-quiet` and turn `--color-heading`.\n- Surface. `--radius-control` 8px for buttons, inputs and the brand tile, `--radius-panel` 12px for panels, code, notices, the callout and the pager, `--radius-page` 18px for the release card, grid cards and the dialog box, `--radius-pill` 4px for badges and chips. `--shadow-panel` is on panels and grid cards, `--shadow-control` (a glow in the button colour) on buttons and the brand tile, `--shadow-dialog` on the release card and the dialog.\n- One-off values written with `calc()` and `color-mix()`: the glow (24% of a fill), cover tints (30% and 6%), drawing colours (70%), status tints (12% and 32%), diff lines (13% and 55%), the notice border (22% and 40%), key cap corners (half of `--radius-control`), tally cell corners (half of `--radius-pill`), mono label tracking, the left column of `.ds-cols--menu` (72% of `--size-side`). Navigation links are at `opacity` 0.62 until current, callout text at 0.78. The empty state's outline is dashed.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, text colour and `--fill-page`. `.ds-nav`, the views and `.ds-footer` are its direct children.\n- `.ds-wrap`, `.ds-band`, `.ds-stack`, `.ds-cols`: the centred column, a padded section with a rule above (`--tight`, `--flush`), a vertical stack, and the column pairs (`--wide`, `--side`). `.ds-panel--grow` in a stack takes up spare height.\n- `.ds-brand`: the site's mark and name. `.ds-brand__mark` is a 24px tile dressed like the primary button holding the mark as inline SVG; `.ds-brand__name` is the name. Both are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the top bar. `.ds-nav__inner` holds the brand, `.ds-nav__links` of `.ds-nav__link` (current: `is-current`) and `.ds-nav__actions`. In the specimen the showing view marks its link with one `:has()` rule per view; a project sets `is-current`.\n- `.ds-hero`: home view only. `.ds-hero__pill`, `.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__actions`, `.ds-hero__cmd`, then `.ds-frame`. The glow is its `::before`.\n- `.ds-frame`: the product drawn as a window: `.ds-frame__bar` (lights, path, a status badge), `.ds-frame__body` with `.ds-frame__rows` of `.ds-frame__row` and the mono `.ds-frame__log`.\n- `.ds-logos`: `.ds-logos__row` of `.ds-logos__name` (`--mono`, `--light`, `--italic`) and a mono caption. Text only, never an image.\n- `.ds-page-header`: head of an inner page: `.ds-page-header__inner` with `.ds-page-header__copy` (breadcrumb, `.ds-page-header__title`, `.ds-page-header__text`) and `.ds-page-header__actions`.\n- `.ds-prose`: running text: h1, h2, h3, p, lists, `code`, `strong`; `.ds-prose__lead` for the first paragraph.\n- `.ds-code`: a code block on `--fill-input`: optional `.ds-code__head` with `.ds-code__name`, then `.ds-code__body` (a `pre`). Spans `.ds-code__k`, `__s`, `__c`, `__n` colour keywords, strings, comments and names.\n- `.ds-eyebrow`, `.ds-mono`, `.ds-kbd`, `.ds-dot`, `.ds-avatar`: the mono label (`--accent`), mono data text, a key cap, a status dot (`--success`, `--warning`, `--danger`, `--accent`, `--ring`) and an initials disc.\n- `.ds-link`: text link with `is-visited`, `is-hover`, `is-active`, `is-focus`; `--quiet`, `--more` (appends an arrow). `.ds-linkrow` lays links in a row.\n- `.ds-button`: 13px medium text, 6px corners. `--secondary` (translucent fill, strong hairline), `--danger` (tint, hairline and text in the danger colour), `--inverse` (on the inverted block only), `--small`, `--large`. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow` spaces them 8px apart.\n- `.ds-form`: labels above fields. `.ds-form__row`, `.ds-form__field`, `.ds-form__label`, `.ds-form__input` (`--mono`), `.ds-form__select`, `.ds-form__textarea`, `is-error` plus `.ds-form__error`, `.ds-form__hint`, `.ds-form__check` with `.ds-form__checkbox`, `.ds-form__actions`.\n- `.ds-table`: inside a panel, edge to edge: a mono uppercase head on `--fill-bar-alt`, hairline rows, `is-hover` rows on `--color-surface-alt`, `.ds-table__num` for right-aligned mono numbers, `.ds-table__state` for a dot with a word. Wrap in `.ds-table__wrap`; `.ds-table__foot` closes the panel.\n- `.ds-list`: dated rows: `.ds-list__item` is `.ds-list__meta` (mono date) beside a `.ds-list__title` link and `.ds-list__text`.\n- `.ds-panel`: hairline box on `--fill-panel`: `.ds-panel__head` with `.ds-panel__title`, `.ds-panel__body`; `.ds-panel__rows` of `.ds-panel__row` (`.ds-panel__key`) for facts. A `.ds-code` directly inside loses its own border.\n- `.ds-stat`: the row of figures. Each `.ds-stat__item` is a `.ds-stat__figure` over a mono `.ds-stat__label`, parted by vertical hairlines.\n- `.ds-section__head`: `.ds-eyebrow` and `.ds-section__title`, whose `strong` part is bright and the rest muted.\n- `.ds-grid`: feature cards. `.ds-grid__cell` (`--wide`) holds `.ds-grid__art` (`--2`, `--3`, `--4` for the other fills) with one inline SVG drawn in strokes, and `.ds-grid__body` with `.ds-grid__title` and `.ds-grid__text`.\n- `.ds-cta`: the inverted block: `.ds-cta__title`, `.ds-cta__text` and one `.ds-button--inverse`.\n- `.ds-tabs`: a segmented control of `.ds-tabs__tab`; the current one (`is-current`) is on `--color-surface-strong`. `.ds-toolbar` puts it in a row with a `.ds-toolbar__note`.\n- `.ds-plans`: three `.ds-plan` cards (`--featured` carries the glow): `.ds-plan__name`, `.ds-plan__price` with `.ds-plan__per`, `.ds-plan__text`, a button, `.ds-plan__items` of `.ds-plan__item`.\n- `.ds-entry`: a changelog entry: `.ds-entry__meta` (date and badge) beside a `.ds-prose`.\n- `.ds-badge`: small pill on `--fill-accent`. `--quiet`, `--outline`, `--new` (accent-alt tint), `--mono`. Status variants: `--success`, `--warning`, `--danger`. `.ds-badgerow` for several.\n- `.ds-sidebar`: a mono `.ds-sidebar__title` over `.ds-sidebar__list` along a rule; `.ds-sidebar__item`, current with `is-current`.\n- `.ds-steps`: numbered `.ds-steps__item` rows with a `.ds-steps__title`.\n- `.ds-notice`: message strip on `--color-notice`; `--error` in the danger colours. `.ds-notice__title`; `.ds-noticerow` stacks notices.\n- `.ds-pagination`: `.ds-pagination__link`; `is-current` on `--color-surface-strong`, `is-disabled` grey.\n- `.ds-breadcrumb`: `.ds-breadcrumb__item` parted by slashes; the last is `.ds-breadcrumb__current`.\n- `.ds-dialog`: a block in `--color-overlay` centring `.ds-dialog__box` with `--shadow-dialog`: `.ds-dialog__head` (`.ds-dialog__title`, `.ds-dialog__close`), `.ds-dialog__body`, `.ds-dialog__actions`.\n- `.ds-empty`: a dashed box: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one small button.\n- `.ds-footer`: on `--fill-bar-alt`: `.ds-footer__inner` with `.ds-footer__brand` (`.ds-footer__about`) and three columns of `.ds-footer__title` and `.ds-footer__links` of `.ds-footer__link`; `.ds-footer__line` is the mono last line with `.ds-footer__status`.\n- `.ds-menu`: a drop-down behind a button in the bar (`.ds-menu__button`, `.ds-menu__list`); it lists every view, so on a phone it is the full navigation.\n- `.ds-menu__item`: one link of the drop-down; the current view carries the accent line and the stronger fill.\n- `.ds-menu__item--view`: an item of the menu that names a view of the site; the current view's item is marked by one `:has()` rule per view, like the bar links, so the menu is a second way to every view on a phone.\n- `.ds-menu__title`: a small mono label over a group of links in the drop-down.\n- `.ds-carousel`: customer quotes in a row that scrolls and snaps (`.ds-carousel__track`, `.ds-carousel__slide`); the dots only count and are not links.\n- `.ds-avatar`: initials in a circle for a person, in the account menu, quotes and lists.\n- `.ds-tooltip`: a small question mark beside a title; `.ds-tooltip__tip` opens on hover or focus, never by default.\n- `.ds-progress`: a thin bar for a build, a rollout or a quota, with a mono line above (`.ds-progress__head`, `.ds-progress__value`, `.ds-progress__bar`).\n- `.ds-switch`: an on or off setting that takes effect at once, drawn over a checkbox (`.ds-switch__input`, `.ds-switch__track`, `.ds-switch__label`).\n- `.ds-accordion`: questions as `details` items (`.ds-accordion__item`, `.ds-accordion__summary`, `.ds-accordion__body`); the first is open.\n\n## Never\n\n- `block-gap <= 88px`: bands are 88px apart at most, blocks inside them 24px.\n- `font-size >= 12px`: badges, mono labels and dates are the smallest text.\n- `font-size <= 64px`: the hero title is the largest text.\n- `font-weight <= 700`: headings are bold; nothing is heavier.\n- `font-families <= 2`: one grotesque and one monospace.\n- `line-height <= 1.5`: body text is set at 1.5.\n- `uppercase-text <= 5%`: only mono labels are uppercase.\n- `underlined-links <= 5%`: links are told apart by colour and underline on hover only.\n- `letter-spacing <= 3px`: the hero title is pulled together by 2.4px; nothing is spaced wider than that.\n- `border-width <= 2px`: every rule and outline is a 1px hairline; 2px is the most any palette's emphasis takes.\n- `border-radius <= 12px`: 6px on controls, 8px on panels, 12px on the largest boxes; pills are shapes.\n- `box-shadow-blur <= 32px`: only the dialog and the product window cast a wide shadow.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 5%`: gradients are the glows behind the hero, the page header and the card drawings, never a filled box.\n- `animation = none`: nothing moves by itself.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new block on the page is a `.ds-panel` or a `.ds-grid__cell` with a 1px border in `--color-border`, placed in `.ds-wrap` inside a `.ds-band`; a new feature gets a card with one stroke drawing in the next fill colour; data a developer would copy is set in `--font-mono`. Keep to the conventions above for which text sits on which fill: never put text on a full-strength `--color-fill-*` or status colour, tint it instead. Use one glow per view, always from `--color-fill-1`, and one inverted block. Spacing comes from the `--space-*` scale, and any one-off shade is a `color-mix()` of tokens noted next to the rule.\n",
    "components.css": ":root {\n  --size-page: 1200px;\n  --size-narrow: 720px;\n  --size-top: 56px;\n  --size-side: 300px;\n  --size-mark: 24px;\n  --size-dot: 8px;\n  --size-dialog: 440px;\n  --size-art: 168px;\n  --size-glow: 560px;\n  --size-date: 120px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 24px;\n  --space-6: 32px;\n  --space-7: 48px;\n  --space-8: 88px;\n}\n\n/* shell: one centred column under a bar that stays at the top of the window */\n.ds-page {\n  min-height: 100vh;\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* views: one screen of the example site shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n.ds-wrap {\n  max-width: var(--size-page);\n  margin: 0 auto;\n  padding: 0 var(--space-5);\n}\n.ds-band {\n  padding: var(--space-8) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-band--flush {\n  padding-top: var(--space-7);\n  border-top: 0;\n}\n.ds-stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-stack > .ds-panel--grow {\n  flex: 1 0 auto;\n}\n.ds-cols {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-6);\n  align-items: stretch;\n}\n.ds-cols--side {\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n}\n.ds-cols--wide {\n  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);\n}\n\n/* nav: a translucent bar; brand at the left, links in the middle, sign-in at the right */\n.ds-nav {\n  position: sticky;\n  top: 0;\n  z-index: 5;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__inner {\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  max-width: var(--size-page);\n  min-height: var(--size-top);\n  margin: 0 auto;\n  padding: 0 var(--space-5);\n}\n.ds-nav__links {\n  display: flex;\n  flex: 1 1 auto;\n  gap: var(--space-1);\n  min-width: 0;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-1) var(--space-3);\n  color: var(--color-bar-text);\n  border-radius: var(--radius-control);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  opacity: 0.66;\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  opacity: 1;\n}\n.ds-nav__link.is-current {\n  background: color-mix(in srgb, var(--color-bar-text) 9%, transparent);\n  opacity: 1;\n}\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#pricing:target) .ds-nav__link[href=\"#pricing\"],\n.ds-page:has(#changelog:target) .ds-nav__link[href=\"#changelog\"],\n.ds-page:has(#start:target) .ds-nav__link[href=\"#start\"] {\n  background: color-mix(in srgb, var(--color-bar-text) 9%, transparent);\n  opacity: 1;\n}\n.ds-nav__actions {\n  display: flex;\n  align-items: center;\n  flex: 0 0 auto;\n  gap: var(--space-2);\n}\n\n/* hero: centred claim over a glow in the first fill colour, then the product in a window */\n.ds-hero {\n  position: relative;\n  padding: var(--space-8) 0 var(--space-7);\n  overflow: hidden;\n  text-align: center;\n}\n.ds-hero::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: var(--size-glow);\n  background: radial-gradient(ellipse 46% 78% at 50% 0, color-mix(in srgb, var(--color-fill-1) 34%, transparent), transparent 72%);\n  pointer-events: none;\n}\n.ds-hero > .ds-wrap {\n  position: relative;\n}\n.ds-hero__pill {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-bottom: var(--space-5);\n  padding: var(--space-1) var(--space-3) var(--space-1) var(--space-1);\n  background: var(--color-surface);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-hero__pill:hover,\n.ds-hero__pill.is-hover {\n  color: var(--color-heading);\n  border-color: var(--color-text-muted);\n}\n.ds-hero__title {\n  max-width: 18ch;\n  margin: 0 auto var(--space-4);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  max-width: 54ch;\n  margin: 0 auto var(--space-5);\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  align-items: center;\n  justify-content: center;\n  gap: var(--space-3);\n}\n.ds-hero__cmd {\n  display: block;\n  margin: var(--space-4) 0 0;\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-hero__cmd b {\n  color: var(--color-accent-alt);\n  font-weight: var(--weight-body);\n}\n\n/* frame: the product drawn as a window; the largest shadow and the page radius show here */\n.ds-frame {\n  margin-top: var(--space-7);\n  background: var(--fill-panel);\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  overflow: hidden;\n  text-align: left;\n}\n.ds-frame__bar {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-frame__lights {\n  display: flex;\n  gap: var(--space-1);\n}\n.ds-frame__lights span {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  background: var(--color-border-strong);\n  border-radius: 50%;\n}\n.ds-frame__path {\n  flex: 1 1 auto;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-frame__body {\n  display: grid;\n  grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);\n}\n.ds-frame__rows {\n  margin: 0;\n  padding: var(--space-2) 0;\n  list-style: none;\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-ui);\n}\n.ds-frame__row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n}\n.ds-frame__row.is-current {\n  background: var(--color-surface-alt);\n  color: var(--color-heading);\n}\n.ds-frame__name {\n  flex: 1 1 auto;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-frame__log {\n  margin: 0;\n  padding: var(--space-4);\n  overflow: hidden;\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: 1.9;\n  white-space: pre;\n}\n\n/* logos: customer names set as text, each in its own cut of the type set */\n.ds-logos {\n  padding: var(--space-6) 0 var(--space-7);\n}\n.ds-logos__row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4) var(--space-6);\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n  color: var(--color-heading);\n}\n.ds-logos__name {\n  font-family: var(--font-heading);\n  font-size: calc(var(--text-h2) * 0.92);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  letter-spacing: calc(var(--text-h2) * -0.03);\n  opacity: 0.82;\n}\n.ds-logos__name--mono {\n  font-family: var(--font-mono);\n  font-size: var(--text-large);\n  font-weight: var(--weight-body);\n  letter-spacing: calc(var(--text-large) * 0.12);\n  text-transform: uppercase;\n}\n.ds-logos__name--light {\n  font-family: var(--font-body);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n}\n.ds-logos__name--italic {\n  font-style: italic;\n}\n\n/* stats: figures in one ruled strip */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__item {\n  min-width: 0;\n  padding: var(--space-5) var(--space-5);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__item:first-child {\n  padding-left: 0;\n  border-left: 0;\n}\n.ds-stat__figure {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__label {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n}\n\n/* section head: a mono label, then a two-tone statement */\n.ds-section__head {\n  max-width: var(--size-narrow);\n  margin: 0 0 var(--space-7);\n}\n.ds-section__title {\n  margin: var(--space-3) 0 0;\n  color: var(--color-text-muted);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-section__title strong {\n  color: var(--color-heading);\n  font-weight: inherit;\n}\n\n/* grid: bordered feature cards; a drawing in the fill colour over a glow, the text below */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-grid__cell--wide {\n  grid-column: span 2;\n}\n.ds-grid__art {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: var(--size-art);\n  background: radial-gradient(ellipse 70% 90% at 50% 110%, color-mix(in srgb, var(--color-fill-1) 26%, transparent), transparent 72%);\n  color: color-mix(in srgb, var(--color-fill-1) 72%, var(--color-heading));\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-grid__art--2 {\n  background: radial-gradient(ellipse 70% 90% at 50% 110%, color-mix(in srgb, var(--color-fill-2) 26%, transparent), transparent 72%);\n  color: color-mix(in srgb, var(--color-fill-2) 72%, var(--color-heading));\n}\n.ds-grid__art--3 {\n  background: radial-gradient(ellipse 70% 90% at 50% 110%, color-mix(in srgb, var(--color-fill-3) 26%, transparent), transparent 72%);\n  color: color-mix(in srgb, var(--color-fill-3) 72%, var(--color-heading));\n}\n.ds-grid__art--4 {\n  background: radial-gradient(ellipse 70% 90% at 50% 110%, color-mix(in srgb, var(--color-fill-4) 26%, transparent), transparent 72%);\n  color: color-mix(in srgb, var(--color-fill-4) 72%, var(--color-heading));\n}\n.ds-grid__art svg {\n  display: block;\n  width: auto;\n  max-width: 86%;\n  height: 76%;\n}\n.ds-grid__body {\n  padding: var(--space-4) var(--space-5) var(--space-5);\n}\n.ds-grid__title {\n  margin: 0 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-grid__text {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n\n/* list: dated rows under a rule */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: grid;\n  grid-template-columns: var(--size-date) minmax(0, 1fr);\n  gap: var(--space-4);\n  padding: var(--space-4) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:first-child {\n  border-top: 0;\n  padding-top: 0;\n}\n.ds-list__title {\n  color: var(--color-heading);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__text {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n.ds-list__meta {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-2);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-colhead {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-5);\n}\n.ds-colhead__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n\n/* call to action: the one inverted block */\n.ds-cta {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  padding: var(--space-7);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-page);\n}\n.ds-cta__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-cta__text {\n  margin: var(--space-2) 0 0;\n  opacity: 0.7;\n}\n\n/* page header: breadcrumb, title and one line over a small glow; the action at the right */\n.ds-page-header {\n  position: relative;\n  padding: var(--space-7) 0 var(--space-6);\n  overflow: hidden;\n}\n.ds-page-header::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 100%;\n  background: radial-gradient(ellipse 40% 100% at 30% 0, color-mix(in srgb, var(--color-fill-1) 18%, transparent), transparent 70%);\n  pointer-events: none;\n}\n.ds-page-header__inner {\n  position: relative;\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-5);\n}\n.ds-page-header__copy {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: var(--space-3) 0 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}\n.ds-page-header__text {\n  max-width: 62ch;\n  margin: var(--space-2) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 0 0 auto;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* tabs: a segmented control */\n.ds-tabs {\n  display: inline-flex;\n  gap: var(--space-1);\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: calc(var(--radius-control) + var(--space-1));\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-1) var(--space-4);\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-heading);\n}\n.ds-tabs__tab.is-current {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-color: var(--color-border);\n}\n.ds-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-toolbar__note {\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n\n/* plans: three priced cards; the middle one carries the glow */\n.ds-plans {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-plan {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: var(--space-5);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-plan--featured {\n  background: radial-gradient(ellipse 90% 60% at 50% 0, color-mix(in srgb, var(--color-fill-1) 22%, transparent), transparent 75%), var(--color-surface);\n  border-color: color-mix(in srgb, var(--color-fill-1) 55%, var(--color-border-strong));\n}\n.ds-plan__name {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-plan__name .ds-badge {\n  line-height: var(--line-heading);\n}\n.ds-plan__price {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-plan__per {\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n}\n.ds-plan__text {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n.ds-plan__items {\n  flex: 1 0 auto;\n  margin: 0;\n  padding: var(--space-4) 0 0;\n  list-style: none;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-size: var(--text-ui);\n}\n.ds-plan__item {\n  display: flex;\n  gap: var(--space-2);\n  padding: var(--space-1) 0;\n}\n.ds-plan__item::before {\n  content: \"\\2713\";\n  color: var(--color-success);\n}\n\n/* changelog entry: the date in a mono column, the text beside it */\n.ds-entry {\n  display: grid;\n  grid-template-columns: var(--size-date) minmax(0, 1fr);\n  gap: var(--space-5);\n  padding: 0 0 var(--space-6);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-entry__meta {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-2);\n  padding-top: var(--space-2);\n}\n.ds-entry .ds-code {\n  margin: 0 0 var(--space-4);\n}\n\n/* sidebar: a labelled list of links along a rule */\n.ds-sidebar {\n  font-size: var(--text-ui);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  letter-spacing: calc(var(--text-small) * 0.06);\n  text-transform: uppercase;\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin-left: calc(var(--border-width) * -1);\n  padding: var(--space-1) 0 var(--space-1) var(--space-4);\n  border-left: var(--border-width) var(--border-style) transparent;\n}\n.ds-sidebar__item.is-current {\n  color: var(--color-heading);\n  border-left-color: var(--color-accent-alt);\n}\n\n/* steps: a numbered run of what happens next */\n.ds-steps {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  counter-reset: step;\n  font-size: var(--text-ui);\n}\n.ds-steps__item {\n  display: flex;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  counter-increment: step;\n}\n.ds-steps__item:last-child {\n  border-bottom: 0;\n}\n.ds-steps__item::before {\n  content: \"0\" counter(step);\n  color: var(--color-accent-alt);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: calc(var(--line-body) * 1.1);\n}\n.ds-steps__title {\n  display: block;\n  color: var(--color-heading);\n  font-weight: var(--weight-ui);\n}\n\n/* footer: link columns on the secondary bar, a mono line under them */\n.ds-footer {\n  margin-top: var(--space-8);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-footer__inner {\n  display: grid;\n  grid-template-columns: minmax(0, 2fr) repeat(3, minmax(0, 1fr));\n  gap: var(--space-6);\n  max-width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-7) var(--space-5) var(--space-6);\n}\n.ds-footer__about {\n  max-width: 34ch;\n  margin: var(--space-3) 0 0;\n}\n.ds-footer__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: calc(var(--text-small) * 0.06);\n  text-transform: uppercase;\n  opacity: 0.7;\n}\n.ds-footer__links {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  display: inline-block;\n  padding: var(--space-1) 0;\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  color: var(--color-heading);\n}\n.ds-footer__line {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-4);\n  max-width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-4) var(--space-5);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-footer__status {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-left: auto;\n}\n\n/* brand: the mark on a tile dressed like the primary button, the name beside it */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  flex: 0 0 auto;\n  gap: var(--space-2);\n  color: inherit;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--size-mark);\n  height: var(--size-mark);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 72%;\n  height: 72%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n\n/* small parts used everywhere: the mono label, the key cap, the status dot, the avatar */\n.ds-eyebrow {\n  display: block;\n  margin: 0;\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  letter-spacing: calc(var(--text-small) * 0.06);\n  text-transform: uppercase;\n}\n.ds-eyebrow--accent {\n  color: var(--color-accent-alt);\n}\n.ds-kbd {\n  display: inline-block;\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: calc(var(--radius-control) * 0.5);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  white-space: nowrap;\n}\n.ds-dot {\n  display: inline-block;\n  flex: 0 0 auto;\n  width: var(--size-dot);\n  height: var(--size-dot);\n  background: var(--color-text-muted);\n  border-radius: 50%;\n}\n.ds-dot--success {\n  background: var(--color-success);\n  box-shadow: 0 0 0 var(--border-width-strong) color-mix(in srgb, var(--color-success) 22%, transparent);\n}\n.ds-dot--warning {\n  background: var(--color-warning);\n  box-shadow: 0 0 0 var(--border-width-strong) color-mix(in srgb, var(--color-warning) 22%, transparent);\n}\n.ds-dot--danger {\n  background: var(--color-danger);\n  box-shadow: 0 0 0 var(--border-width-strong) color-mix(in srgb, var(--color-danger) 22%, transparent);\n}\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  width: var(--size-mark);\n  height: var(--size-mark);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n}\n.ds-mono {\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n}\n\n/* typography */\n.ds-prose {\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin-top: var(--space-6);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin-top: var(--space-5);\n  color: var(--color-heading-alt);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n}\n.ds-prose > :first-child {\n  margin-top: 0;\n}\n.ds-prose p {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n  padding-left: var(--space-5);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose li::marker {\n  color: var(--color-text-muted);\n}\n.ds-prose strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: calc(var(--radius-control) * 0.5);\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose > :last-child {\n  margin-bottom: 0;\n}\n.ds-prose__lead {\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n\n/* code block: a title strip on the secondary bar, lines in the mono font on the input fill */\n.ds-code {\n  min-width: 0;\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  overflow: hidden;\n}\n.ds-code__head {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n}\n.ds-code__name {\n  flex: 1 1 auto;\n  min-width: 0;\n}\n.ds-code__body {\n  display: block;\n  margin: 0;\n  padding: var(--space-4);\n  overflow-x: auto;\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n  white-space: pre;\n}\n.ds-code__k {\n  color: var(--color-accent-alt);\n}\n.ds-code__s {\n  color: var(--color-success);\n}\n.ds-code__c {\n  color: var(--color-text-muted);\n}\n.ds-code__n {\n  color: var(--color-link);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width-strong);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover {\n  color: var(--color-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--more::after {\n  content: \" \\2192\";\n}\n.ds-linkrow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  font-size: var(--text-ui);\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  margin: 0;\n  padding: var(--space-2) var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--border-width-strong);\n}\n.ds-button--secondary {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: var(--color-border-strong);\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--color-surface-strong);\n  color: var(--color-button-secondary-text);\n  border-color: var(--color-text-muted);\n}\n.ds-button--danger {\n  background: color-mix(in srgb, var(--color-danger) 12%, transparent);\n  color: var(--color-danger);\n  border-color: color-mix(in srgb, var(--color-danger) 45%, transparent);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: color-mix(in srgb, var(--color-danger) 22%, transparent);\n  color: var(--color-danger);\n  border-color: var(--color-danger);\n}\n.ds-button--inverse {\n  background: var(--color-inverse-text);\n  color: var(--color-inverse);\n  box-shadow: none;\n}\n.ds-button--inverse:hover,\n.ds-button--inverse.is-hover {\n  background: color-mix(in srgb, var(--color-inverse-text) 82%, var(--color-inverse));\n  color: var(--color-inverse);\n  box-shadow: none;\n}\n.ds-button--small {\n  padding: var(--space-1) var(--space-3);\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  color: var(--color-disabled-text);\n  border-color: var(--color-border-muted);\n  box-shadow: none;\n  cursor: default;\n}\n.ds-buttonrow {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-form__row {\n  display: flex;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-form__label {\n  color: var(--color-heading);\n  font-weight: var(--weight-ui);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-heading);\n  transition: var(--transition);\n}\n.ds-form__input--mono,\n.ds-form__textarea--mono {\n  font-family: var(--font-mono);\n}\n.ds-form__textarea {\n  min-height: calc(var(--space-7) * 2);\n  line-height: var(--line-body);\n  resize: vertical;\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-text-muted);\n  opacity: 1;\n}\n.ds-form__input:hover,\n.ds-form__select:hover,\n.ds-form__textarea:hover {\n  border-color: var(--color-border-strong);\n}\n.ds-form__input:focus,\n.ds-form__select:focus,\n.ds-form__textarea:focus,\n.ds-form__input.is-focus {\n  border-color: var(--color-focus);\n  outline: var(--focus-ring);\n  outline-offset: 0;\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-form__checkbox {\n  margin: 0;\n  accent-color: var(--color-button);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* badge: a small label; the status variants are a tint of their colour with a hairline */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-1);\n  padding: 0 var(--space-2);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  letter-spacing: 0;\n  text-transform: var(--ui-transform);\n  vertical-align: middle;\n  white-space: nowrap;\n}\n.ds-badge--quiet {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border-color: var(--color-border);\n}\n.ds-badge--outline {\n  background: transparent;\n  color: var(--color-text-muted);\n  border-color: var(--color-border-strong);\n}\n.ds-badge--new {\n  background: color-mix(in srgb, var(--color-accent-alt) 12%, transparent);\n  color: var(--color-accent-alt);\n  border-color: color-mix(in srgb, var(--color-accent-alt) 32%, transparent);\n}\n.ds-badge--success {\n  background: color-mix(in srgb, var(--color-success) 12%, transparent);\n  color: var(--color-success);\n  border-color: color-mix(in srgb, var(--color-success) 32%, transparent);\n}\n.ds-badge--warning {\n  background: color-mix(in srgb, var(--color-warning) 12%, transparent);\n  color: var(--color-warning);\n  border-color: color-mix(in srgb, var(--color-warning) 32%, transparent);\n}\n.ds-badge--danger {\n  background: color-mix(in srgb, var(--color-danger) 12%, transparent);\n  color: var(--color-danger);\n  border-color: color-mix(in srgb, var(--color-danger) 32%, transparent);\n}\n.ds-badge--mono {\n  font-family: var(--font-mono);\n}\n.ds-badgerow {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  color: var(--color-border-strong);\n}\n.ds-breadcrumb__current {\n  color: var(--color-heading);\n}\n\n/* table: hairline rows; the head is a strip of small mono labels on the secondary bar */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  color: var(--color-text);\n  font-size: var(--text-ui);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  text-align: left;\n  vertical-align: middle;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-table thead th {\n  padding-top: var(--space-2);\n  padding-bottom: var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: calc(var(--text-small) * 0.04);\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n.ds-table tbody tr:last-child th,\n.ds-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.ds-table tbody th {\n  color: var(--color-heading);\n  font-weight: var(--weight-ui);\n}\n.ds-table tbody tr:hover td,\n.ds-table tbody tr:hover th,\n.ds-table tbody tr.is-hover td,\n.ds-table tbody tr.is-hover th {\n  background: var(--color-surface-alt);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-family: var(--font-mono);\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__state {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  white-space: nowrap;\n}\n.ds-table__wrap {\n  overflow-x: auto;\n}\n.ds-table__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text-muted);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n}\n\n/* panel: a hairline box on the surface fill */\n.ds-panel {\n  min-width: 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}\n.ds-panel__head {\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  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__title {\n  margin: 0;\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__body {\n  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__body > :last-child {\n  margin-bottom: 0;\n}\n.ds-panel > .ds-code {\n  border: 0;\n  border-radius: 0 0 calc(var(--radius-panel) - var(--border-width)) calc(var(--radius-panel) - var(--border-width));\n}\n.ds-panel__rows {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-panel__row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-panel__row:last-child {\n  border-bottom: 0;\n}\n.ds-panel__key {\n  color: var(--color-text-muted);\n}\n\n/* notice */\n.ds-notice {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-notice-text) 22%, transparent);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border-color: color-mix(in srgb, var(--color-danger) 40%, transparent);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-noticerow {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-pagination__link {\n  display: block;\n  min-width: calc(var(--space-6) - var(--space-1));\n  padding: var(--space-1) var(--space-2);\n  color: var(--color-link-quiet);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  line-height: var(--line-heading);\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n  font-variant-numeric: tabular-nums;\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  color: var(--color-heading);\n  border-color: var(--color-border);\n}\n.ds-pagination__link.is-current {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-color: var(--color-border-strong);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n}\n\n/* dialog: a dimmed block with the box in its middle */\n.ds-dialog {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-6) var(--space-4);\n  background: var(--color-overlay);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-panel);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  background: var(--color-surface-alt);\n  color: var(--color-text);\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}\n.ds-dialog__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-4) var(--space-4) 0;\n}\n.ds-dialog__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-dialog__close {\n  color: var(--color-text-muted);\n  text-decoration: none;\n}\n.ds-dialog__close::before {\n  content: \"\";\n  display: inline-block;\n  width: calc(var(--text-base) * 0.75);\n  height: calc(var(--text-base) * 0.75);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  rotate: 45deg;\n  vertical-align: middle;\n}\n.ds-dialog__body {\n  padding: var(--space-2) var(--space-4) var(--space-4);\n  font-size: var(--text-ui);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* empty state */\n.ds-empty {\n  padding: var(--space-6) var(--space-4);\n  border: var(--border-width) dashed var(--color-border-strong);\n  border-radius: var(--radius-panel);\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: var(--space-2) 0 var(--space-1);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-empty__text {\n  margin: 0 auto var(--space-4);\n  max-width: 44ch;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n.ds-panel__body > .ds-linkrow {\n  margin-top: var(--space-4);\n}\n.ds-panel__body > .ds-badgerow + p {\n  margin-top: var(--space-3);\n}\n\n/* medium windows: two cards across, the side column goes under */\n@media (max-width: 980px) {\n  .ds-grid,\n  .ds-plans {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-cols,\n  .ds-cols--side,\n  .ds-cols--wide {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-footer__inner {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n  .ds-footer__brand {\n    grid-column: 1 / -1;\n  }\n}\n\n/* narrow windows: one column; the links of the bar move to a second row that scrolls sideways */\n@media (max-width: 640px) {\n  .ds-wrap {\n    padding: 0 var(--space-4);\n  }\n  .ds-band {\n    padding: var(--space-7) 0;\n  }\n  .ds-nav__inner {\n    flex-wrap: wrap;\n    gap: 0 var(--space-3);\n    padding: var(--space-2) var(--space-4) 0;\n  }\n  .ds-nav__actions {\n    margin-left: auto;\n  }\n  .ds-nav__links {\n    order: 3;\n    flex: 0 0 100%;\n    padding: var(--space-2) 0;\n    overflow-x: auto;\n  }\n  .ds-hero {\n    padding: var(--space-7) 0 var(--space-6);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n    letter-spacing: var(--heading-tracking);\n  }\n  .ds-hero__lead {\n    font-size: var(--text-base);\n  }\n  .ds-frame {\n    margin-top: var(--space-6);\n  }\n  .ds-frame__body {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-frame__rows {\n    border-right: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-logos__row {\n    justify-content: flex-start;\n  }\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    border-bottom: 0;\n  }\n  .ds-stat__item,\n  .ds-stat__item:first-child {\n    padding: var(--space-4);\n    border-left: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-stat__item:nth-child(even) {\n    border-left: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-stat__figure {\n    font-size: var(--text-h2);\n  }\n  .ds-section__head {\n    margin-bottom: var(--space-6);\n  }\n  .ds-section__title,\n  .ds-cta__title,\n  .ds-page-header__title,\n  .ds-prose h1 {\n    font-size: var(--text-h2);\n  }\n  .ds-grid,\n  .ds-plans {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-grid__cell--wide {\n    grid-column: auto;\n  }\n  .ds-list__item,\n  .ds-entry {\n    grid-template-columns: minmax(0, 1fr);\n    gap: var(--space-2);\n  }\n  .ds-list__meta,\n  .ds-entry__meta {\n    flex-direction: row;\n    align-items: center;\n  }\n  .ds-cta {\n    padding: var(--space-5);\n  }\n  .ds-page-header {\n    padding: var(--space-6) 0 var(--space-5);\n  }\n  .ds-page-header__inner {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-4);\n  }\n  .ds-page-header__copy {\n    flex: 0 0 auto;\n  }\n  .ds-tabs {\n    max-width: 100%;\n    overflow-x: auto;\n  }\n  .ds-table {\n    min-width: 58ch;\n  }\n  .ds-form__row {\n    flex-direction: column;\n  }\n  .ds-dialog {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-footer {\n    margin-top: var(--space-7);\n  }\n  .ds-footer__inner {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    padding: var(--space-6) var(--space-4) var(--space-5);\n  }\n  .ds-footer__line {\n    padding: var(--space-4);\n  }\n  .ds-footer__status {\n    margin-left: 0;\n  }\n}\n\n/* menu: a drop-down behind a button in the bar; on a phone it is the way to every view */\n.ds-menu {\n  position: relative;\n  display: inline-block;\n  flex: 0 0 auto;\n}\n.ds-menu__button {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-2);\n  color: var(--color-bar-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  white-space: nowrap;\n  list-style: none;\n  cursor: pointer;\n}\n.ds-menu__button::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__button::after {\n  content: \"\";\n  width: var(--space-1);\n  height: var(--space-1);\n  margin-left: 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__button .ds-avatar {\n  margin: calc(var(--space-1) * -1) 0;\n}\n.ds-menu__button:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-menu[open] > .ds-menu__button {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  right: 0;\n  z-index: 30;\n  min-width: calc(var(--size-mark) * 9);\n  margin: var(--space-1) 0 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface);\n  color: var(--color-text);\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  text-align: left;\n}\n.ds-menu__title {\n  padding: var(--space-2) var(--space-2) var(--space-1);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  white-space: nowrap;\n}\n.ds-menu__title--rule {\n  margin-top: var(--space-1);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-menu__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-1) var(--space-2);\n  color: var(--color-text);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-surface);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  text-decoration: var(--link-decoration-quiet);\n  white-space: nowrap;\n}\n.ds-menu__item:hover,\n.ds-menu__item:focus-visible {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-left-color: var(--color-surface-strong);\n}\n\n/* carousel: customer quotes in a row that scrolls and snaps; the dots only count */\n.ds-carousel {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  min-width: 0;\n}\n.ds-carousel__track {\n  display: flex;\n  gap: var(--space-4);\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__slide {\n  display: flex;\n  flex: 0 0 calc(50% - var(--space-2));\n  flex-direction: column;\n  justify-content: space-between;\n  gap: var(--space-5);\n  min-width: 0;\n  padding: var(--space-5);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  scroll-snap-align: start;\n}\n.ds-carousel__quote {\n  margin: 0;\n  color: var(--color-heading);\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-carousel__person {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-carousel__name {\n  display: block;\n  color: var(--color-heading);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n}\n.ds-carousel__role {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-carousel__nav {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-carousel__dots {\n  display: flex;\n  flex: 1 1 auto;\n  gap: var(--space-1);\n}\n.ds-carousel__dot {\n  width: var(--space-5);\n  height: var(--border-width-strong);\n  background: var(--color-border-strong);\n}\n.ds-carousel__dot.is-current {\n  background: var(--color-accent);\n}\n.ds-carousel__arrow {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--space-6);\n  height: var(--space-6);\n  color: var(--color-heading);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n  line-height: 1;\n}\n.ds-carousel__arrow::before {\n  content: \"\";\n  flex: none;\n  width: calc(var(--text-ui) * 0.5);\n  height: calc(var(--text-ui) * 0.5);\n  border-left: calc(var(--space-2) / 4) solid currentColor;\n  border-bottom: calc(var(--space-2) / 4) solid currentColor;\n  rotate: 45deg;\n  translate: 25% 0;\n}\n.ds-carousel__arrow + .ds-carousel__arrow::before {\n  rotate: -135deg;\n  translate: -25% 0;\n}\n.ds-carousel__arrow.is-disabled {\n  color: var(--color-disabled-text);\n  border-color: var(--color-border);\n}\n@media (max-width: 640px) {\n  .ds-carousel__slide {\n    flex-basis: 100%;\n  }\n}\n\n/* tooltip: a hint that opens 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(--space-4);\n  height: var(--space-4);\n  margin-left: var(--space-1);\n  vertical-align: middle;\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  letter-spacing: 0;\n  text-transform: none;\n  cursor: help;\n}\n.ds-tooltip:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: 100%;\n  left: 0;\n  z-index: 20;\n  display: none;\n  width: max-content;\n  max-width: calc(var(--size-mark) * 10);\n  margin-bottom: var(--space-2);\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  text-align: left;\n  white-space: normal;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip {\n  display: block;\n}\n\n/* progress: a thin bar for a build, a rollout or a quota */\n.ds-progress {\n  display: block;\n  min-width: 0;\n}\n.ds-progress__head {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-2);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n}\n.ds-progress__value {\n  color: var(--color-heading);\n  font-variant-numeric: tabular-nums;\n}\n.ds-progress__bar {\n  display: block;\n  width: 100%;\n  height: var(--size-dot);\n  overflow: hidden;\n  appearance: none;\n  -webkit-appearance: none;\n  background: var(--color-surface-strong);\n  color: var(--color-accent);\n  border: 0;\n  border-radius: var(--radius-pill);\n}\n.ds-progress__bar::-webkit-progress-bar {\n  background: var(--color-surface-strong);\n}\n.ds-progress__bar::-webkit-progress-value {\n  background: var(--color-accent);\n}\n.ds-progress__bar::-moz-progress-bar {\n  background: var(--color-accent);\n}\n\n/* switch: an on and off setting drawn over a checkbox */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  flex: 0 0 auto;\n  width: calc(var(--space-4) * 2 + var(--space-1));\n  height: calc(var(--space-4) + var(--space-1));\n  background: var(--color-surface-strong);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::after {\n  content: \"\";\n  position: absolute;\n  top: var(--border-width-strong);\n  bottom: var(--border-width-strong);\n  left: var(--border-width-strong);\n  width: 40%;\n  background: var(--color-text-muted);\n  border-radius: var(--radius-pill);\n}\n.ds-switch__input:checked + .ds-switch__track {\n  background: var(--color-accent);\n  border-color: var(--color-accent);\n}\n.ds-switch__input:checked + .ds-switch__track::after {\n  left: auto;\n  right: var(--border-width-strong);\n  background: var(--color-accent-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track {\n  outline: var(--focus-ring);\n}\n.ds-switch__label {\n  font-size: var(--text-ui);\n}\n\n/* accordion: questions that open one by one */\n.ds-accordion {\n  display: block;\n  min-width: 0;\n}\n.ds-accordion__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item:first-child {\n  border-top: 0;\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) 0;\n  color: var(--color-heading);\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  flex: none;\n  align-self: center;\n  display: inline-block;\n  width: calc(var(--space-2) * 1.25);\n  height: calc(var(--space-2) * 1.25);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  color: var(--color-text-muted);\n}\n.ds-accordion__item[open] > .ds-accordion__summary::after {\n  clip-path: inset(calc(50% - var(--space-2) / 8) 0);\n}\n.ds-accordion__summary:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  margin: 0;\n  padding: 0 0 var(--space-3);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-page:not(:has(.ds-view:target)) .ds-menu__item--view[href=\"#home\"],\n.ds-page:has(#home:target) .ds-menu__item--view[href=\"#home\"],\n.ds-page:has(#pricing:target) .ds-menu__item--view[href=\"#pricing\"],\n.ds-page:has(#changelog:target) .ds-menu__item--view[href=\"#changelog\"],\n.ds-page:has(#start:target) .ds-menu__item--view[href=\"#start\"] {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border-left-color: var(--color-accent);\n  font-weight: var(--weight-bold);\n}\n@media (max-width: 640px) {\n  .ds-nav__actions > .ds-button--secondary {\n    display: none;\n  }\n}\n\n/* phones: the tooltip stays inside the window; the links are a row of equal cells */\n@media (max-width: 640px) {\n  .ds-panel__title {\n    position: relative;\n  }\n  .ds-panel__title .ds-tooltip {\n    position: static;\n  }\n  .ds-panel__title .ds-tooltip__tip {\n    max-width: min(calc(var(--size-mark) * 10), calc(100vw - var(--space-4) * 4));\n  }\n  .ds-nav__links > li {\n    flex: 1 1 0;\n    min-width: max-content;\n  }\n  .ds-nav__link {\n    text-align: center;\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: dark developer tools landing specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__inner\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><polygon points=\"20,3 8,3 3,12 8,21 20,21 20,16.5 10.6,16.5 8.1,12 10.6,7.5 20,7.5\"/><polygon points=\"16,9.6 18.4,12 16,14.4 13.6,12\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Product</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#pricing\">Pricing</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#changelog\">Changelog</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#start\">Start</a></li>\n    </ul>\n    <div class=\"ds-nav__actions\">\n      <details class=\"ds-menu\"><summary class=\"ds-menu__button\">Docs</summary><ul class=\"ds-menu__list\"><li class=\"ds-menu__title\">Product</li><li><a class=\"ds-menu__item ds-menu__item--view\" href=\"#home\">Overview</a></li><li><a class=\"ds-menu__item ds-menu__item--view\" href=\"#pricing\">Pricing</a></li><li><a class=\"ds-menu__item ds-menu__item--view\" href=\"#changelog\">Changelog</a></li><li><a class=\"ds-menu__item ds-menu__item--view\" href=\"#start\">Get started</a></li><li class=\"ds-menu__title ds-menu__title--rule\">Developers</li><li><a class=\"ds-menu__item\" href=\"#start\">Quickstart</a></li><li><a class=\"ds-menu__item\" href=\"#start\">Command line</a></li><li><a class=\"ds-menu__item\" href=\"#changelog\">Release notes</a></li><li><a class=\"ds-menu__item\" href=\"#start\">Log in</a></li></ul></details>\n      <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#start\">Log in</a>\n      <a class=\"ds-button ds-button--small\" href=\"#start\">Sign up</a>\n    </div>\n  </div>\n</header>\n\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <div class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-wrap\">\n      <a class=\"ds-hero__pill\" href=\"#changelog\"><span class=\"ds-badge\">New</span> Instant rollbacks are out of beta <span aria-hidden=\"true\">&rarr;</span></a>\n      <h1 class=\"ds-hero__title\">Ship every branch the moment it is pushed</h1>\n      <p class=\"ds-hero__lead\">chronoskin builds each commit, gives it its own address and puts it in front of your team in under a minute. Production is one more push.</p>\n      <div class=\"ds-hero__actions\">\n        <a class=\"ds-button ds-button--large\" href=\"#start\">Start deploying</a>\n        <a class=\"ds-button ds-button--secondary ds-button--large is-hover\" href=\"#pricing\">See pricing</a>\n      </div>\n      <code class=\"ds-hero__cmd\"><b>$</b> npx chronoskin deploy --prod</code>\n\n      <div class=\"ds-frame\" aria-label=\"A drawing of the deployments screen\">\n        <div class=\"ds-frame__bar\">\n          <span class=\"ds-frame__lights\" aria-hidden=\"true\"><span></span><span></span><span></span></span>\n          <span class=\"ds-frame__path\">harbour-api / deployments</span>\n          <span class=\"ds-badge ds-badge--success\"><span class=\"ds-dot ds-dot--success\"></span> Production healthy</span>\n        </div>\n        <div class=\"ds-frame__body\">\n          <ul class=\"ds-frame__rows\">\n            <li class=\"ds-frame__row is-current\"><span class=\"ds-dot ds-dot--warning\"></span><span class=\"ds-frame__name\">fix/retry-on-timeout</span><span class=\"ds-mono\">a41f9c2</span><span class=\"ds-mono\">now</span></li>\n            <li class=\"ds-frame__row\"><span class=\"ds-dot ds-dot--success\"></span><span class=\"ds-frame__name\">main</span><span class=\"ds-mono\">7be02d1</span><span class=\"ds-mono\">4m</span></li>\n            <li class=\"ds-frame__row\"><span class=\"ds-dot ds-dot--success\"></span><span class=\"ds-frame__name\">feat/usage-export</span><span class=\"ds-mono\">c93a771</span><span class=\"ds-mono\">26m</span></li>\n            <li class=\"ds-frame__row\"><span class=\"ds-dot ds-dot--danger\"></span><span class=\"ds-frame__name\">chore/bump-runtime</span><span class=\"ds-mono\">19d4e0b</span><span class=\"ds-mono\">1h</span></li>\n            <li class=\"ds-frame__row\"><span class=\"ds-dot ds-dot--success\"></span><span class=\"ds-frame__name\">docs/webhooks</span><span class=\"ds-mono\">52f8a36</span><span class=\"ds-mono\">3h</span></li>\n            <li class=\"ds-frame__row\"><span class=\"ds-dot\"></span><span class=\"ds-frame__name\">spike/edge-cache</span><span class=\"ds-mono\">e07b115</span><span class=\"ds-mono\">1d</span></li>\n          </ul>\n<pre class=\"ds-frame__log\"><span class=\"ds-code__c\">12:04:31</span>  Cloning harbour-api at a41f9c2\n<span class=\"ds-code__c\">12:04:33</span>  Restored build cache (212 MB)\n<span class=\"ds-code__c\">12:04:41</span>  <span class=\"ds-code__k\">build</span>   compiled 148 modules in 7.6 s\n<span class=\"ds-code__c\">12:04:44</span>  <span class=\"ds-code__k\">test</span>    312 passed, 0 failed\n<span class=\"ds-code__c\">12:04:52</span>  <span class=\"ds-code__k\">deploy</span>  fra1, iad1, syd1\n<span class=\"ds-code__c\">12:04:58</span>  <span class=\"ds-code__s\">ready</span>   fix-retry-on-timeout.chronoskin.app</pre>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-logos\">\n    <div class=\"ds-wrap\">\n      <ul class=\"ds-logos__row\" aria-label=\"Teams that deploy with chronoskin\">\n        <li class=\"ds-logos__name\">Northwind</li>\n        <li class=\"ds-logos__name ds-logos__name--mono\">tidal/io</li>\n        <li class=\"ds-logos__name ds-logos__name--light\">Larkspur</li>\n        <li class=\"ds-logos__name ds-logos__name--italic\">quanta</li>\n        <li class=\"ds-logos__name ds-logos__name--mono\">OBERON</li>\n        <li class=\"ds-logos__name\">Fieldnote</li>\n        <li class=\"ds-logos__name ds-logos__name--light\">hello.kiln</li>\n      </ul>\n      <span class=\"ds-eyebrow\">Trusted by 4,200 teams that ship every day</span>\n    </div>\n  </div>\n\n  <div class=\"ds-wrap\">\n    <ul class=\"ds-stat\" data-component=\"stats\">\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">38 s</span><span class=\"ds-stat__label\">median build, cold cache</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">19</span><span class=\"ds-stat__label\">regions, one command</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">99.99%</span><span class=\"ds-stat__label\">uptime over 12 months</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__figure\">1.4 M</span><span class=\"ds-stat__label\">deployments last month</span></li>\n    </ul>\n  </div>\n\n  <div class=\"ds-band ds-band--flush\">\n    <div class=\"ds-wrap\">\n      <div class=\"ds-section__head\">\n        <span class=\"ds-eyebrow ds-eyebrow--accent\">Fig. 01 / the pipeline</span>\n        <h2 class=\"ds-section__title\"><strong>One pipeline from push to production.</strong> Previews, checks, regions and rollbacks are the same few lines of configuration.</h2>\n      </div>\n      <div class=\"ds-grid\" data-component=\"grid\">\n        <div class=\"ds-grid__cell ds-grid__cell--wide\">\n          <div class=\"ds-grid__art\" aria-hidden=\"true\"><svg viewBox=\"0 0 360 120\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M10 90h340\"/><path d=\"M70 90c30 0 30-50 60-50h90c30 0 30 50 60 50\" stroke-dasharray=\"4 4\"/><circle cx=\"40\" cy=\"90\" r=\"5\" fill=\"currentColor\"/><circle cx=\"130\" cy=\"40\" r=\"5\"/><circle cx=\"175\" cy=\"40\" r=\"5\"/><circle cx=\"220\" cy=\"40\" r=\"5\" fill=\"currentColor\"/><circle cx=\"310\" cy=\"90\" r=\"5\" fill=\"currentColor\"/><circle cx=\"175\" cy=\"90\" r=\"5\"/><path d=\"M118 18h114v10H118z\" opacity=\"0.5\"/></svg></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">A preview for every branch</h3>\n            <p class=\"ds-grid__text\">Each push gets its own address with its own environment. Reviewers open a link, not a terminal.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <div class=\"ds-grid__art ds-grid__art--2\" aria-hidden=\"true\"><svg viewBox=\"0 0 160 120\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"80\" cy=\"60\" r=\"46\"/><ellipse cx=\"80\" cy=\"60\" rx=\"20\" ry=\"46\"/><path d=\"M34 60h92 M42 36h76 M42 84h76\"/><circle cx=\"62\" cy=\"36\" r=\"4\" fill=\"currentColor\"/><circle cx=\"110\" cy=\"60\" r=\"4\" fill=\"currentColor\"/><circle cx=\"74\" cy=\"84\" r=\"4\" fill=\"currentColor\"/></svg></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Nineteen regions</h3>\n            <p class=\"ds-grid__text\">Name the regions in one line. Traffic goes to the nearest healthy one.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <div class=\"ds-grid__art ds-grid__art--3\" aria-hidden=\"true\"><svg viewBox=\"0 0 160 120\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M20 30h120v60H20z\"/><path d=\"M34 48l10 8 16-16\" stroke-width=\"2\"/><path d=\"M72 48h54 M34 72h40 M84 72h42\" opacity=\"0.6\"/></svg></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Checks that block</h3>\n            <p class=\"ds-grid__text\">Tests, type checks and your own scripts run before anything is promoted.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <div class=\"ds-grid__art ds-grid__art--4\" aria-hidden=\"true\"><svg viewBox=\"0 0 160 120\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M16 100V20 M16 100h132\"/><path d=\"M28 100V70h14v30 M52 100V52h14v48 M76 100V62h14v38 M100 100V34h14v66 M124 100V44h14v56\"/></svg></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Logs and timings</h3>\n            <p class=\"ds-grid__text\">Every request, build step and cold start, kept for thirty days and searchable.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell\">\n          <div class=\"ds-grid__art\" aria-hidden=\"true\"><svg viewBox=\"0 0 160 120\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M24 60h112\"/><circle cx=\"40\" cy=\"60\" r=\"6\"/><circle cx=\"80\" cy=\"60\" r=\"6\" fill=\"currentColor\"/><circle cx=\"120\" cy=\"60\" r=\"6\"/><path d=\"M120 44c-10-18-34-18-40 2\" stroke-dasharray=\"4 4\"/><path d=\"M76 38l4 9 9-5\"/></svg></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Rollback in one step</h3>\n            <p class=\"ds-grid__text\">Any earlier deployment is still there. Point production back at it in a second.</p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-band\">\n    <div class=\"ds-wrap\">\n      <div class=\"ds-cols\">\n        <div>\n          <div class=\"ds-colhead\"><h2 class=\"ds-colhead__title\">Configured in one file</h2><a class=\"ds-link ds-link--more\" href=\"#start\">Read the guide</a></div>\n          <section class=\"ds-panel\" data-component=\"panel\">\n            <div class=\"ds-panel__head\">\n              <h3 class=\"ds-panel__title\">chronoskin.json</h3>\n              <span class=\"ds-badge ds-badge--outline ds-badge--mono\">v3</span>\n            </div>\n            <div class=\"ds-code\">\n<pre class=\"ds-code__body\">{\n  <span class=\"ds-code__k\">\"build\"</span>:   <span class=\"ds-code__s\">\"npm run build\"</span>,\n  <span class=\"ds-code__k\">\"output\"</span>:  <span class=\"ds-code__s\">\"dist\"</span>,\n  <span class=\"ds-code__k\">\"regions\"</span>: [<span class=\"ds-code__s\">\"fra1\"</span>, <span class=\"ds-code__s\">\"iad1\"</span>, <span class=\"ds-code__s\">\"syd1\"</span>],\n  <span class=\"ds-code__k\">\"checks\"</span>:  [<span class=\"ds-code__s\">\"npm test\"</span>, <span class=\"ds-code__s\">\"npm run types\"</span>],\n  <span class=\"ds-code__k\">\"preview\"</span>: { <span class=\"ds-code__k\">\"branches\"</span>: <span class=\"ds-code__s\">\"*\"</span>, <span class=\"ds-code__k\">\"expires\"</span>: <span class=\"ds-code__s\">\"14d\"</span> },\n  <span class=\"ds-code__k\">\"rollback\"</span>: { <span class=\"ds-code__k\">\"onErrorRate\"</span>: <span class=\"ds-code__n\">0.02</span> }\n}</pre>\n            </div>\n          </section>\n        </div>\n        <div>\n          <div class=\"ds-colhead\"><h2 class=\"ds-colhead__title\">Latest changes</h2><a class=\"ds-link ds-link--more\" href=\"#changelog\">Changelog</a></div>\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__meta\">12 Mar 2025</span>\n              <div><a class=\"ds-list__title\" href=\"#changelog\">Instant rollbacks</a> <span class=\"ds-badge ds-badge--new\">New</span><p class=\"ds-list__text\">Promote any earlier deployment without a rebuild.</p></div>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__meta\">27 Feb 2025</span>\n              <div><a class=\"ds-list__title\" href=\"#changelog\">Build cache is shared across branches</a><p class=\"ds-list__text\">Cold builds are 40% faster on average.</p></div>\n            </li>\n            <li class=\"ds-list__item\">\n              <span class=\"ds-list__meta\">11 Feb 2025</span>\n              <div><a class=\"ds-list__title\" href=\"#changelog\">Two new regions: Osaka and Cape Town</a><p class=\"ds-list__text\">Add <span class=\"ds-kbd\">kix1</span> or <span class=\"ds-kbd\">cpt1</span> to your regions.</p></div>\n            </li>\n          </ul>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-band\">\n    <div class=\"ds-wrap\">\n      <div class=\"ds-section__head\">\n        <span class=\"ds-eyebrow ds-eyebrow--accent\">Fig. 02 / the teams</span>\n        <h2 class=\"ds-section__title\"><strong>What teams say after a month.</strong> Three of the 4,200 that ship every day.</h2>\n      </div>\n      <div class=\"ds-carousel\" data-component=\"carousel\">\n        <ul class=\"ds-carousel__track\">\n          <li class=\"ds-carousel__slide\"><p class=\"ds-carousel__quote\">We stopped keeping a release calendar. A branch is pushed, the preview is there, and production is one more push.</p><div class=\"ds-carousel__person\"><span class=\"ds-avatar\" aria-hidden=\"true\">IH</span><span><span class=\"ds-carousel__name\">Ingrid Halvorsen</span><span class=\"ds-carousel__role\">Head of platform, parcel carrier</span></span></div></li>\n          <li class=\"ds-carousel__slide\"><p class=\"ds-carousel__quote\">The rollback took one second on the day we needed it. Nobody had to remember how it works.</p><div class=\"ds-carousel__person\"><span class=\"ds-avatar\" aria-hidden=\"true\">KO</span><span><span class=\"ds-carousel__name\">Kofi Osei</span><span class=\"ds-carousel__role\">Staff engineer, regional bank</span></span></div></li>\n          <li class=\"ds-carousel__slide\"><p class=\"ds-carousel__quote\">Reviewers open a link instead of a terminal. Our review time fell by half in the first month.</p><div class=\"ds-carousel__person\"><span class=\"ds-avatar\" aria-hidden=\"true\">MK</span><span><span class=\"ds-carousel__name\">Mira Kessler</span><span class=\"ds-carousel__role\">Engineering lead, course platform</span></span></div></li>\n        </ul>\n        <div class=\"ds-carousel__nav\"><span class=\"ds-carousel__dots\"><span class=\"ds-carousel__dot is-current\"></span><span class=\"ds-carousel__dot\"></span><span class=\"ds-carousel__dot\"></span></span><span>01 / 03</span><span class=\"ds-carousel__arrow is-disabled\" aria-hidden=\"true\"></span><span class=\"ds-carousel__arrow\" aria-hidden=\"true\"></span></div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-wrap\">\n    <div class=\"ds-cta\">\n      <div>\n        <h2 class=\"ds-cta__title\">Your next push could already be live.</h2>\n        <p class=\"ds-cta__text\">Free for personal projects. No card, no sales call.</p>\n      </div>\n      <a class=\"ds-button ds-button--inverse ds-button--large\" href=\"#start\">Start deploying</a>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"pricing\">\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <div class=\"ds-wrap\">\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">chronoskin</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#pricing\">Pricing</a></li>\n            <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Plans</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">Pay for what you deploy</h1>\n          <p class=\"ds-page-header__text\">Every plan has previews, rollbacks and all regions. You pay for seats and build minutes, nothing else.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#start\">Talk to us</a>\n          <a class=\"ds-button\" href=\"#start\">Start free</a>\n        </div>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-wrap\">\n    <div class=\"ds-stack\">\n      <div class=\"ds-toolbar\">\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#pricing\">Yearly</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#pricing\">Monthly</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#pricing\">Open source</a></li>\n        </ul>\n        <span class=\"ds-toolbar__note\">Prices in US dollars, two months free when billed yearly.</span>\n      </div>\n\n      <div class=\"ds-plans\">\n        <div class=\"ds-plan\">\n          <h2 class=\"ds-plan__name\">Hobby</h2>\n          <div><span class=\"ds-plan__price\">$0</span><span class=\"ds-plan__per\">forever, one seat</span></div>\n          <p class=\"ds-plan__text\">For side projects and trying things out.</p>\n          <a class=\"ds-button ds-button--secondary\" href=\"#start\">Start free</a>\n          <ul class=\"ds-plan__items\">\n            <li class=\"ds-plan__item\">400 build minutes a month</li>\n            <li class=\"ds-plan__item\">Previews for every branch</li>\n            <li class=\"ds-plan__item\">3 regions</li>\n            <li class=\"ds-plan__item\">Logs kept for 1 day</li>\n          </ul>\n        </div>\n        <div class=\"ds-plan ds-plan--featured\">\n          <h2 class=\"ds-plan__name\">Team <span class=\"ds-badge\">Most teams</span></h2>\n          <div><span class=\"ds-plan__price\">$20</span><span class=\"ds-plan__per\">per seat, per month</span></div>\n          <p class=\"ds-plan__text\">For teams that ship to production every day.</p>\n          <a class=\"ds-button\" href=\"#start\">Start a 14 day trial</a>\n          <ul class=\"ds-plan__items\">\n            <li class=\"ds-plan__item\">6,000 build minutes a month</li>\n            <li class=\"ds-plan__item\">All 19 regions</li>\n            <li class=\"ds-plan__item\">Instant rollbacks and blocking checks</li>\n            <li class=\"ds-plan__item\">Logs kept for 30 days</li>\n          </ul>\n        </div>\n        <div class=\"ds-plan\">\n          <h2 class=\"ds-plan__name\">Scale</h2>\n          <div><span class=\"ds-plan__price\">Custom</span><span class=\"ds-plan__per\">from 50 seats</span></div>\n          <p class=\"ds-plan__text\">For companies with compliance and uptime terms.</p>\n          <a class=\"ds-button ds-button--secondary\" href=\"#start\">Talk to us</a>\n          <ul class=\"ds-plan__items\">\n            <li class=\"ds-plan__item\">Unmetered build minutes</li>\n            <li class=\"ds-plan__item\">Single sign-on and audit log</li>\n            <li class=\"ds-plan__item\">99.99% uptime agreement</li>\n            <li class=\"ds-plan__item\">A named engineer on call</li>\n          </ul>\n        </div>\n      </div>\n\n      <div class=\"ds-cols ds-cols--wide\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">What each plan includes <span class=\"ds-tooltip\" tabindex=\"0\">?<span class=\"ds-tooltip__tip\" role=\"tooltip\">Limits are per workspace and reset on the first of the month.</span></span></h2><span class=\"ds-mono\">per month</span></div>\n          <div class=\"ds-table__wrap\">\n            <table class=\"ds-table\" data-component=\"table\">\n              <thead>\n                <tr><th scope=\"col\">Limit</th><th scope=\"col\" class=\"ds-table__num\">Hobby</th><th scope=\"col\" class=\"ds-table__num\">Team</th><th scope=\"col\" class=\"ds-table__num\">Scale</th></tr>\n              </thead>\n              <tbody>\n                <tr><th scope=\"row\">Build minutes</th><td class=\"ds-table__num\">400</td><td class=\"ds-table__num\">6,000</td><td class=\"ds-table__num\">unmetered</td></tr>\n                <tr class=\"is-hover\"><th scope=\"row\">Concurrent builds</th><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">12</td><td class=\"ds-table__num\">64</td></tr>\n                <tr><th scope=\"row\">Bandwidth, GB</th><td class=\"ds-table__num\">100</td><td class=\"ds-table__num\">1,000</td><td class=\"ds-table__num\">10,000</td></tr>\n                <tr><th scope=\"row\">Regions</th><td class=\"ds-table__num\">3</td><td class=\"ds-table__num\">19</td><td class=\"ds-table__num\">19</td></tr>\n                <tr><th scope=\"row\">Log retention, days</th><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">30</td><td class=\"ds-table__num\">365</td></tr>\n                <tr><th scope=\"row\">Preview lifetime, days</th><td class=\"ds-table__num\">7</td><td class=\"ds-table__num\">14</td><td class=\"ds-table__num\">90</td></tr>\n                <tr><th scope=\"row\">Team seats</th><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">50</td><td class=\"ds-table__num\">unmetered</td></tr>\n                <tr><th scope=\"row\">Extra build minute</th><td class=\"ds-table__num\">none</td><td class=\"ds-table__num\">$0.004</td><td class=\"ds-table__num\">$0.002</td></tr>\n              </tbody>\n            </table>\n          </div>\n          <div class=\"ds-table__foot\"><span>Usage resets on the first of the month.</span><a class=\"ds-link ds-link--more\" href=\"#changelog\">Limits changed in February</a></div>\n        </section>\n\n        <div class=\"ds-stack\">\n          <section class=\"ds-panel\">\n            <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Your plan</h2><span class=\"ds-badge ds-badge--success\">Team, 8 seats</span></div>\n            <div class=\"ds-panel__body\">\n              <p>Renews on 1 April 2025 for $1,600 a year. You have used 2,140 of 6,000 build minutes.</p>\n              <div class=\"ds-progress\"><div class=\"ds-progress__head\"><span>Build minutes, March</span><span class=\"ds-progress__value\">2,140 / 6,000</span></div><progress class=\"ds-progress__bar\" value=\"36\" max=\"100\">36%</progress></div>\n              <div class=\"ds-buttonrow\" data-component=\"buttons\">\n                <a class=\"ds-button\" href=\"#pricing\">Add seats</a>\n                <a class=\"ds-button ds-button--secondary\" href=\"#pricing\">Invoices</a>\n                <button class=\"ds-button\" type=\"button\" disabled>Upgrade</button>\n                <a class=\"ds-button ds-button--danger\" href=\"#pricing\">Cancel plan</a>\n              </div>\n            </div>\n          </section>\n          <div class=\"ds-dialog\" data-component=\"dialog\">\n            <div class=\"ds-dialog__box\" role=\"dialog\" aria-labelledby=\"dialog-title\">\n              <div class=\"ds-dialog__head\">\n                <h2 class=\"ds-dialog__title\" id=\"dialog-title\">Cancel the Team plan?</h2>\n                <a class=\"ds-dialog__close\" href=\"#pricing\" aria-label=\"Close\"></a>\n              </div>\n              <div class=\"ds-dialog__body\">\n                <p>Your projects move to Hobby on 1 April. Deployments in 16 regions will be stopped.</p>\n              </div>\n              <div class=\"ds-dialog__actions\">\n                <a class=\"ds-button ds-button--secondary\" href=\"#pricing\">Keep the plan</a>\n                <a class=\"ds-button ds-button--danger\" href=\"#pricing\">Cancel plan</a>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"changelog\">\n  <header class=\"ds-page-header\">\n    <div class=\"ds-wrap\">\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">chronoskin</a></li>\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#changelog\">Changelog</a></li>\n            <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">2025</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">Changelog</h1>\n          <p class=\"ds-page-header__text\">What shipped, in the order it shipped. New entries most weeks.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#start\">Subscribe by e-mail</a>\n        </div>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-wrap\">\n    <div class=\"ds-cols ds-cols--side\">\n      <div class=\"ds-stack\">\n        <article class=\"ds-entry\">\n          <div class=\"ds-entry__meta\"><span class=\"ds-mono\">12 Mar 2025</span><span class=\"ds-badge ds-badge--new\">New</span></div>\n          <div class=\"ds-prose\" data-component=\"typography\">\n            <h1>Instant rollbacks</h1>\n            <p class=\"ds-prose__lead\">Production can now point at any earlier deployment without a rebuild.</p>\n            <p>Every deployment is kept as built. A rollback only moves the production address, so it takes <strong>about one second</strong> in every region.</p>\n            <h2>What changed</h2>\n            <ul>\n              <li>A rollback button on every deployment that was once in production</li>\n              <li>Automatic rollback when the error rate passes a limit you set</li>\n              <li>The audit log records who rolled back, and from where</li>\n            </ul>\n            <h3>From the command line</h3>\n            <p>Run <code>chronoskin rollback</code> to go back one step, or pass a deployment id to pick one.</p>\n          </div>\n        </article>\n        <article class=\"ds-entry\">\n          <div class=\"ds-entry__meta\"><span class=\"ds-mono\">27 Feb 2025</span><span class=\"ds-badge ds-badge--success\">Faster</span></div>\n          <div class=\"ds-prose\">\n            <h2>Build cache is shared across branches</h2>\n            <p>A new branch starts from the cache of the branch it was cut from. Cold builds are 40% faster on average.</p>\n            <div class=\"ds-code\">\n              <div class=\"ds-code__head\"><span class=\"ds-code__name\">terminal</span><span>before / after</span></div>\n<pre class=\"ds-code__body\"><span class=\"ds-code__c\"># feat/usage-export, first build</span>\n<span class=\"ds-code__k\">build</span>  1m 04s   <span class=\"ds-code__c\">cache miss</span>\n<span class=\"ds-code__k\">build</span>     38s   <span class=\"ds-code__s\">cache from main</span></pre>\n            </div>\n            <p>Nothing to switch on. To opt a branch out, set <code>cache: false</code>.</p>\n          </div>\n        </article>\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><a class=\"ds-pagination__link is-disabled\" href=\"#changelog\">Newer</a></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#changelog\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#changelog\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#changelog\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#changelog\">4</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#changelog\">Older</a></li>\n        </ul>\n      </div>\n\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Releases</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-current\">Instant rollbacks <span class=\"ds-mono\">12 Mar</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#changelog\">Shared build cache</a> <span class=\"ds-mono\">27 Feb</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#changelog\">Osaka and Cape Town</a> <span class=\"ds-mono\">11 Feb</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#changelog\">Blocking checks</a> <span class=\"ds-mono\">29 Jan</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#changelog\">Log search</a> <span class=\"ds-mono\">14 Jan</span></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Labels</h2></div>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-badgerow\" data-component=\"badge\">\n              <span class=\"ds-badge\">Release</span>\n              <span class=\"ds-badge ds-badge--new\">New</span>\n              <span class=\"ds-badge ds-badge--quiet\">Docs</span>\n              <span class=\"ds-badge ds-badge--success\">Faster</span>\n              <span class=\"ds-badge ds-badge--warning\">Deprecated</span>\n              <span class=\"ds-badge ds-badge--danger\">Breaking</span>\n            </div>\n          </div>\n        </section>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <svg class=\"ds-empty__icon\" viewBox=\"0 0 32 32\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><path d=\"M16 4l11 5v7c0 6-4.5 10-11 12C9.5 26 5 22 5 16V9z\"/><path d=\"M11 16l4 4 6-7\"/></svg>\n          <h2 class=\"ds-empty__title\">No breaking changes in 2025</h2>\n          <p class=\"ds-empty__text\">Nothing you deployed last year needs editing to run today.</p>\n          <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#changelog\">See 2024</a>\n        </div>\n        <p class=\"ds-linkrow\" data-component=\"links\">\n          <a class=\"ds-link\" href=\"#changelog\">RSS feed</a>\n          <a class=\"ds-link is-visited\" href=\"#changelog\">Roadmap</a>\n          <a class=\"ds-link is-hover\" href=\"#changelog\">Status page</a>\n          <a class=\"ds-link is-active\" href=\"#changelog\">Release notes</a>\n        </p>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"start\">\n  <header class=\"ds-page-header\">\n    <div class=\"ds-wrap\">\n      <div class=\"ds-page-header__inner\">\n        <div class=\"ds-page-header__copy\">\n          <ol class=\"ds-breadcrumb\">\n            <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">chronoskin</a></li>\n            <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Start</li>\n          </ol>\n          <h1 class=\"ds-page-header__title\">Create your workspace</h1>\n          <p class=\"ds-page-header__text\">Two minutes from here to your first deployment. Free while you try it.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#pricing\">Compare plans</a>\n        </div>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-wrap\">\n    <div class=\"ds-cols\">\n      <div class=\"ds-stack\">\n        <div class=\"ds-noticerow\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">You were invited by Imre Solvang.</span> Joining adds you to the Northwind workspace.</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">That workspace address is taken.</span> Choose another one below.</p>\n        </div>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Workspace</h2><span class=\"ds-mono\">step 1 of 2</span></div>\n          <div class=\"ds-panel__body\">\n            <form class=\"ds-form\" data-component=\"form\" action=\"#start\">\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Your name</span><input class=\"ds-form__input\" type=\"text\" value=\"Ada Okonkwo\"></label>\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Work e-mail</span><input class=\"ds-form__input is-focus\" type=\"email\" placeholder=\"you@company.dev\"></label>\n              </div>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Workspace address</span><input class=\"ds-form__input ds-form__input--mono is-error\" type=\"text\" value=\"northwind.chronoskin.app\"><span class=\"ds-form__error\">This address already belongs to another workspace.</span></label>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Where is your code?</span>\n                <select class=\"ds-form__select\"><option>A Git host, connect in the next step</option><option>On this computer, deploy from the terminal</option><option>Nowhere yet, start from a template</option></select>\n              </label>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">What are you deploying?</span><textarea class=\"ds-form__textarea\" rows=\"3\" placeholder=\"An API, a site, workers. A sentence is enough.\"></textarea><span class=\"ds-form__hint\">Only used to pick sensible defaults for your first project.</span></label>\n              <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Send me the changelog, about twice a month</span></label>\n              <div class=\"ds-form__actions\">\n                <button class=\"ds-button\" type=\"submit\">Create workspace</button>\n                <a class=\"ds-button ds-button--secondary\" href=\"#home\">Cancel</a>\n              </div>\n            </form>\n          </div>\n        </section>\n      </div>\n\n      <div class=\"ds-stack\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">What happens next</h2></div>\n          <div class=\"ds-panel__body\">\n            <ol class=\"ds-steps\">\n              <li class=\"ds-steps__item\"><span><span class=\"ds-steps__title\">Connect a repository</span>Pick the branches that get previews.</span></li>\n              <li class=\"ds-steps__item\"><span><span class=\"ds-steps__title\">Push a commit</span>The first build takes about a minute.</span></li>\n              <li class=\"ds-steps__item\"><span><span class=\"ds-steps__title\">Open the preview</span>Share its address with your team.</span></li>\n              <li class=\"ds-steps__item\"><span><span class=\"ds-steps__title\">Promote to production</span>One command, or merge to main.</span></li>\n            </ol>\n          </div>\n        </section>\n        <div class=\"ds-code\">\n          <div class=\"ds-code__head\"><span class=\"ds-code__name\">Prefer the terminal?</span><span class=\"ds-kbd\">zsh</span></div>\n<pre class=\"ds-code__body\"><span class=\"ds-code__c\"># install, sign in, deploy the folder you are in</span>\n<span class=\"ds-code__k\">$</span> npm install --global chronoskin\n<span class=\"ds-code__k\">$</span> chronoskin login\n<span class=\"ds-code__k\">$</span> chronoskin deploy\n<span class=\"ds-code__s\">ready</span>  first-project.chronoskin.app</pre>\n        </div>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">On the free plan</h2><a class=\"ds-link ds-link--more\" href=\"#pricing\">All limits</a></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span class=\"ds-panel__key\">Build minutes</span><span class=\"ds-mono\">400 / month</span></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-panel__key\">Regions</span><span class=\"ds-mono\">3</span></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-panel__key\">Previews</span><span class=\"ds-mono\">every branch</span></li>\n            </ul>\n          </div>\n          <div class=\"ds-panel__body\"><div class=\"ds-accordion\" data-component=\"accordion\"><details class=\"ds-accordion__item\" open><summary class=\"ds-accordion__summary\">Do I need a card to start?</summary><p class=\"ds-accordion__body\">No. The free plan asks for a card only when you move to a paid one.</p></details><details class=\"ds-accordion__item\"><summary class=\"ds-accordion__summary\">What happens at 400 build minutes?</summary><p class=\"ds-accordion__body\">Builds wait until the first of the month, or you move to Team and they continue at once.</p></details><details class=\"ds-accordion__item\"><summary class=\"ds-accordion__summary\">Can I keep my own domain?</summary><p class=\"ds-accordion__body\">Yes, on every plan. Point the record at us and the certificate is issued in a minute.</p></details></div></div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <div class=\"ds-footer__brand\">\n      <a class=\"ds-brand\" href=\"#home\">\n        <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><polygon points=\"20,3 8,3 3,12 8,21 20,21 20,16.5 10.6,16.5 8.1,12 10.6,7.5 20,7.5\"/><polygon points=\"16,9.6 18.4,12 16,14.4 13.6,12\"/></svg></span>\n        <span class=\"ds-brand__name\">chronoskin</span>\n      </a>\n      <p class=\"ds-footer__about\">Deployments for teams that would rather be writing code.</p>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Product</h2>\n      <ul class=\"ds-footer__links\">\n        <li><a class=\"ds-footer__link\" href=\"#home\">Overview</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#pricing\">Pricing</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#changelog\">Changelog</a></li>\n      </ul>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Developers</h2>\n      <ul class=\"ds-footer__links\">\n        <li><a class=\"ds-footer__link\" href=\"#start\">Quickstart</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#start\">Command line</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#changelog\">Release notes</a></li>\n      </ul>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Company</h2>\n      <ul class=\"ds-footer__links\">\n        <li><a class=\"ds-footer__link\" href=\"#home\">About</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Security</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Privacy</a></li>\n      </ul>\n    </div>\n  </div>\n  <div class=\"ds-footer__line\">\n    <span>&copy; 2025 chronoskin</span>\n    <span>Built and served from 19 regions</span>\n    <span class=\"ds-footer__status\"><span class=\"ds-dot ds-dot--success\"></span> All systems normal</span>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.dev-dark.landing.s01.p02.t04.u01\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"dev-dark\",\n    \"years\": [\n      2019,\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-dd-1241\",\n  \"short\": \"v1-dd-1241\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #0b0e14;\n  --color-canvas: #0b0e14;\n  --color-surface: #11141b;\n  --color-surface-alt: #171b24;\n  --color-surface-strong: #282c33;\n  --color-bar: #0b0e14;\n  --color-bar-text: #dce0e5;\n  --color-bar-alt: #11141b;\n  --color-bar-alt-text: #a9afbc;\n  --color-inverse: #dce0e5;\n  --color-inverse-text: #0b0e14;\n  --color-text: #b4bac6;\n  --color-text-muted: #7d8696;\n  --color-heading: #eef1f5;\n  --color-heading-alt: #dce0e5;\n  --color-link: #3ecf8e;\n  --color-link-quiet: #a9afbc;\n  --color-link-visited: #86c2a4;\n  --color-link-hover: #74e8b4;\n  --color-link-active: #2aa872;\n  --color-border: #232831;\n  --color-border-strong: #464b57;\n  --color-border-muted: #1a1e26;\n  --color-accent: #3ecf8e;\n  --color-accent-text: #06130d;\n  --color-accent-alt: #47b7f8;\n  --color-fill-1: #3ecf8e;\n  --color-fill-2: #47b7f8;\n  --color-fill-3: #fbca00;\n  --color-fill-4: #464b57;\n  --color-button: #3ecf8e;\n  --color-button-text: #06130d;\n  --color-button-hover-text: #06130d;\n  --color-button-secondary: #171b24;\n  --color-button-secondary-text: #dce0e5;\n  --color-input: #0b0e14;\n  --color-input-text: #dce0e5;\n  --color-input-border: #343a45;\n  --color-disabled: #171b24;\n  --color-disabled-text: #5c6370;\n  --color-danger: #ff6465;\n  --color-danger-surface: #1e1318;\n  --color-success: #3ecf8e;\n  --color-warning: #fbca00;\n  --color-notice: #0e1d2c;\n  --color-notice-text: #9cd4fb;\n  --color-focus: #47b7f8;\n  --color-shadow: rgb(0 0 0 / 0.4);\n  --color-overlay: rgb(5 7 10 / 0.72);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Space Grotesk\", \"Familjen Grotesk\", \"Helvetica Neue\", Arial, sans-serif;\n  --font-heading: \"Space Grotesk\", \"Familjen Grotesk\", \"Helvetica Neue\", Arial, sans-serif;\n  --font-ui: \"Space Grotesk\", \"Familjen Grotesk\", \"Helvetica Neue\", Arial, sans-serif;\n  --font-mono: \"Space Mono\", \"Fira Code\", Menlo, Consolas, monospace;\n  --text-base: 15px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 18px;\n  --text-display: 64px;\n  --text-h1: 38px;\n  --text-h2: 26px;\n  --text-h3: 16px;\n  --line-body: 1.5;\n  --line-heading: 1.15;\n  --line-display: 1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: -0.6px;\n  --display-tracking: -2.4px;\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: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 6px;\n  --radius-panel: 8px;\n  --radius-pill: 9999px;\n  --radius-page: 12px;\n  --shadow-panel: inset 0 1px 0 color-mix(in srgb, white 4%, transparent);\n  --shadow-control: 0 1px 2px var(--color-shadow);\n  --shadow-control-hover: 0 0 0 3px color-mix(in srgb, white 8%, transparent);\n  --shadow-control-pressed: inset 0 1px 2px var(--color-shadow);\n  --shadow-dialog: 0 0 0 1px color-mix(in srgb, white 5%, transparent), 0 2px 32px var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: color-mix(in srgb, var(--color-bar) 78%, transparent);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 55%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;\n  --backdrop-blur: 12px;\n}\n"
  }
}
