{
  "id": "v1-dd-2222",
  "long_id": "v1.dev-dark.app.s02.p02.t02.u02",
  "name": "Dark developer tools issue tracker",
  "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": "app",
  "mode": "pure",
  "viewport": {
    "width": 1440,
    "fluid": false
  },
  "summary": "This is the signed-in side of a developer tool from 2019 to 2026: an issue tracker on a blue-black page, with a rail of icon links down the left edge, a top bar whose search field is the entry to a command palette, and a work area of hairline boxes. Rows are dense and led by a status dot; ids, commits, counts and dates are set in monospace, and here the headings and controls are monospace too. The one accent colour marks the primary action and the progress of the running cycle, over a single faint glow in the first card.",
  "url": "https://chrono.skin/s/v1-dd-2222",
  "preview_url": "https://chrono.skin/s/v1-dd-2222/specimen.html",
  "files": {
    "STYLE.md": "# Dark developer tools issue tracker\n\n## Summary\n\nThis is the signed-in side of a developer tool from 2019 to 2026: an issue tracker on a blue-black page, with a rail of icon links down the left edge, a top bar whose search field is the entry to a command palette, and a work area of hairline boxes. Rows are dense and led by a status dot; ids, commits, counts and dates are set in monospace, and here the headings and controls are monospace too. The one accent colour marks the primary action and the progress of the running cycle, over a single faint glow in the first card.\n\n## Layout\n\n- Designed for a 1440px viewport, not fluid beyond it. `.ds-page` is a grid of two columns: the rail (`.ds-nav`, `--size-rail` 232px) for the whole height, and beside it `.ds-topbar` (`--size-top` 48px, sticky), the showing view and the footer line. `.ds-content` is centred in the work area, at most `--size-page` (1120px) wide, padded by `--space-5` and `--space-6`, and stacks its children `--space-5` (24px) apart.\n- Navigation is the rail on `--fill-bar-alt`: `.ds-nav__head` with the brand and a key cap, groups of links under mono group names, each link an icon or a team dot, a label and an optional count; the current link sits on a 14% wash of the rail's text colour. The account is at the foot. `.ds-topbar` on `--fill-bar` holds a mono location, `.ds-search` (the palette field with its `Ctrl K` key cap) in the middle and two small buttons at the right.\n- The home view stacks: `.ds-hero`, one card with the state of the cycle and a meter of small squares; `.ds-stat`, four figures in one ruled box; `.ds-cols` (2 to 1) with the issue list panel beside a panel of deployments and the inverted `.ds-tip`; and `.ds-grid`, four project cards under a `.ds-colhead`.\n- Inner pages have no hero. `.ds-content` opens with `.ds-page-header`: the breadcrumb, a `--text-h2` title and a meta line at the left, at most two buttons at the right, and a rule below. Then the work: `.ds-cols--side` puts a `--size-side` (300px) column of properties at the right, `.ds-cols--even` halves, `.ds-cols--menu` puts a `.ds-menu` of sections at the left of a settings page. Tabs are underlined and sit on the head of the panel that holds the table; the pagination is in its `.ds-table__foot`.\n- Views. The specimen has four. `issues` is the home view described above. `issue` is one issue: its description as prose, the activity list and the open delete dialog in the main column; the properties sidebar, the action buttons and linked items at the right. `deploys` is the table of deployments with tabs and pagination, then an empty state beside the environments. `settings` is the workspace form under its notices, beside the section menu, with the label key and the danger zone below.\n- Spacing scale: `--space-1` 4px (rail link and small button vertical padding, meter gaps), `--space-2` 8px (list row and button vertical padding, gaps between buttons and badges), `--space-3` 12px (panel head and table cell vertical padding), `--space-4` 16px (panel, stat and card padding), `--space-5` 24px (between blocks, hero padding), `--space-6` 32px (work area side padding, around a dialog), `--space-7` 48px (below the last block).\n- Other sizes: `--size-search` 420px, `--size-id` 68px (the id column of an issue row), `--size-icon` 16px, `--size-mark` 22px, `--size-dot` 8px, `--size-glow` 420px, `--size-dialog` 440px.\n- Below 1000px the rail becomes a block across the top with its links in one row that scrolls sideways, cards stand two across and column pairs stack. Below 640px everything is one column, an issue row wraps its labels under its title, and a wide table scrolls inside `.ds-table__wrap`.\n\n## Typography and colour roles\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` on the page, on `--fill-panel`, `--color-surface-alt` (list group rows, hovered rows, the dialog) and `--color-surface-strong` (key caps, quiet badges, avatars, empty meter cells). `--color-bar-text` on `--fill-bar` (the top bar). `--color-bar-alt-text` on `--fill-bar-alt` (the rail, table heads, code heads, the footer line), with `--color-heading` for the current link. `--color-inverse-text` on `--fill-inverse`, used once, for `.ds-tip`.\n- `--color-fill-1` to `--color-fill-4` never carry text: they tint the top of a project card at 12%, colour its progress bar at full strength, and `--color-fill-1` is the hero glow and the done cells of the meter. Blocked cells use `--color-warning`.\n- `--color-accent-alt` is a line and text colour: the mono label of the hero, the underline of the current tab, the marker of the current menu entry, a team dot.\n- Status is a dot before a word (`.ds-dot`, `.ds-table__state`) or a tinted badge; `--color-success`, `--color-warning` and `--color-danger` are never a solid fill. The destructive button is a 12% tint with a hairline and text in `--color-danger`.\n- Type in this set: `--font-body` is a humanist sans for descriptions and rows; `--font-heading`, `--font-ui` and `--font-mono` are one monospace family. `--text-base` 14px at `--line-body` 1.55, `--text-ui` 12px (rail, buttons, forms, tables, rows), `--text-small` 11px (mono data, badges, table heads). The hero title and prose h1 are `--text-h1` 28px, the page title, figures and prose h2 `--text-h2` 20px, panel and card titles `--text-h3` 14px bold. `--text-display` is not used by this layout. Links in running text are underlined in this set.\n- Surface in this set: almost square, `--radius-control` 2px, `--radius-panel` and `--radius-page` 4px, `--radius-pill` 2px so badges are tags. Buttons, the search field and the brand tile carry `--shadow-control`, a 2px inset lip; panels have no shadow; the dialog casts `--shadow-dialog`. `--fill-page` draws a faint grid. `--border-width-strong` 3px is the underline of the current tab and the ring of a status dot.\n- One-off values written with `calc()` and `color-mix()`: the washes behind a hovered and a current rail link (8% and 14% of `--color-bar-alt-text`), the hero glow (30% of `--color-fill-1`), in-progress meter cells (40% of `--color-fill-1` in `--color-surface-strong`), card tints (12%), status tints (12% and 32%), notice borders, key cap corners (half of `--radius-control`), mono label tracking. Bar widths are percentages. The empty state's outline is dashed.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the font, text colour and page fill and makes the two-column grid; `.ds-nav`, `.ds-topbar`, the views and `.ds-footer` are its direct children.\n- `.ds-content`, `.ds-cols` (`--side`, `--even`, `--menu`), `.ds-stack`: the padded column of a view, the column pairs and a vertical stack. `.ds-panel--grow` fills spare height.\n- `.ds-brand`: the mark on a 22px tile dressed like the primary button, and the name. Placeholders for the installing project's own name and logo.\n- `.ds-nav`: the rail. `.ds-nav__head`, `.ds-nav__group`, `.ds-nav__links` (`--main` for the links that follow the view) of `.ds-nav__link` with `.ds-nav__icon`, `.ds-nav__label` and an optional badge or mono code; `.ds-nav__foot` with an avatar and `.ds-nav__who`. A project sets `is-current` on the current link.\n- `.ds-topbar`: `.ds-topbar__where`, `.ds-search` (`.ds-search__icon`, `.ds-search__text`, a `.ds-kbd`) and `.ds-topbar__actions`.\n- `.ds-hero`: home view only, one card: `.ds-hero__copy` with a `.ds-eyebrow`, `.ds-hero__title`, `.ds-hero__lead` and `.ds-hero__actions`; `.ds-hero__art` holds `.ds-meter`, a grid of `.ds-meter__cell` (`--done`, `--doing`, `--late`) over `.ds-meter__key`.\n- `.ds-page-header`: `.ds-page-header__copy` (breadcrumb, `.ds-page-header__title`, `.ds-page-header__text`, which may start with a status badge) and `.ds-page-header__actions`.\n- `.ds-prose`: h1, h2, h3, p, lists, `code`, `strong`, inside a panel; `.ds-prose__lead`.\n- `.ds-code`: code block with `.ds-code__head`, `.ds-code__name`, `.ds-code__body` and the spans `__k`, `__s`, `__c`, `__n`.\n- `.ds-eyebrow`, `.ds-mono`, `.ds-kbd`, `.ds-dot` (`--success`, `--warning`, `--danger`, `--accent`, `--ring`), `.ds-avatar`: the small parts every row is made of.\n- `.ds-link`: `is-visited`, `is-hover`, `is-active`, `is-focus`; `--quiet`, `--more`. `.ds-linkrow`.\n- `.ds-button`: `--secondary`, `--danger`, `--inverse` (on `.ds-tip` only), `--small`, `--large`; `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttonrow`.\n- `.ds-form`: `.ds-form__row`, `.ds-form__field`, `.ds-form__label`, `.ds-form__input` (`--mono`), `.ds-form__select`, `.ds-form__textarea` (`--mono`), `is-error` with `.ds-form__error`, `.ds-form__hint`, `.ds-form__check`, `.ds-form__checkbox`, `.ds-form__actions`.\n- `.ds-table`: in a panel under the tabs: mono uppercase head on `--fill-bar-alt`, hairline rows, `.ds-table__num`, `.ds-table__state`. `.ds-table__wrap`, `.ds-table__foot`.\n- `.ds-list`: issue rows in a panel. `.ds-list__group` heads a state; `.ds-list__item` is a dot, the mono `.ds-list__id`, the `.ds-list__title` link and `.ds-list__meta` (label badge, avatar, date).\n- `.ds-panel`: `.ds-panel__head`, `.ds-panel__title`, `.ds-panel__body`, `.ds-panel__rows` of `.ds-panel__row` with `.ds-panel__key`.\n- `.ds-stat`: the ruled box of four `.ds-stat__item`: a mono `.ds-stat__label` led by a dot, the `.ds-stat__figure` and a `.ds-stat__delta` (`--down`).\n- `.ds-grid`: four project cards. `.ds-grid__cell` (`--2`, `--3`, `--4`) is a link holding a mono key, `.ds-grid__title`, `.ds-grid__text`, `.ds-grid__bar` (`--50`, `--75`, `--90`) and `.ds-grid__foot`. `.ds-colhead` with `.ds-colhead__title` names the row.\n- `.ds-tabs`: underlined `.ds-tabs__tab` row on a panel head, each with an optional mono count; `is-current`.\n- `.ds-badge`: `--quiet`, `--outline`, `--new`, `--mono`; status `--success`, `--warning`, `--danger`. `.ds-badgerow`.\n- `.ds-sidebar`: the properties box: `.ds-sidebar__title`, `.ds-sidebar__list` of `.ds-sidebar__item`, each a `.ds-sidebar__key` and a link or value.\n- `.ds-menu`: the sections of a settings page, `.ds-menu__link` along a rule; `is-current`.\n- `.ds-activity`: `.ds-activity__item` rows of avatar, `.ds-activity__text` and a mono time.\n- `.ds-tip`: the inverted card: `.ds-tip__title`, a paragraph, one `.ds-button--inverse`.\n- `.ds-notice`: `--error`, `.ds-notice__title`, `.ds-noticerow`.\n- `.ds-pagination`: `.ds-pagination__link`, `is-current`, `is-disabled`.\n- `.ds-breadcrumb`: `.ds-breadcrumb__item`, `.ds-breadcrumb__current`.\n- `.ds-dialog`: `.ds-dialog__box`, `.ds-dialog__head`, `.ds-dialog__title`, `.ds-dialog__close`, `.ds-dialog__body`, `.ds-dialog__actions`.\n- `.ds-empty`: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one small button, in a dashed box where a panel would be.\n- `.ds-footer`: one mono line on `--fill-bar-alt`: `.ds-footer__status`, the build, `.ds-footer__links` of `.ds-footer__link`.\n\n## Never\n\n- `block-gap <= 32px`: blocks are 24px apart.\n- `font-size >= 11px`: mono data and badges are the smallest text.\n- `font-size <= 28px`: the hero title is the largest text; an app screen has no display size.\n- `font-weight <= 700`: titles are semibold or bold, never black.\n- `font-families <= 2`: one sans-serif for running text, one monospace for everything else.\n- `line-height <= 1.6`: body text is set at 1.55.\n- `uppercase-text <= 5%`: only mono labels and table heads are uppercase.\n- `underlined-links <= 15%`: only links in running text and panels are underlined; rows, navigation and tabs are not.\n- `letter-spacing <= 1px`: only uppercase mono labels are tracked, by under 1px.\n- `border-width <= 3px`: rules are 1px; 3px marks the current tab and rings a status dot.\n- `border-radius <= 4px`: 2px on controls and tags, 4px on boxes.\n- `box-shadow-blur <= 25px`: only the dialog casts a blurred shadow.\n- `text-shadow = none`: text is flat on every fill.\n- `gradient-fills <= 3%`: gradients are the hero glow and the tint at the top of a project card.\n- `animation = none`: nothing moves by itself.\n- `transition = none`: states change at once.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything new in the work area is a `.ds-panel` with a `.ds-panel__head`, 24px from its neighbours; a new kind of record is a `.ds-list__item` or a table row led by a `.ds-dot`; a new destination is a `.ds-nav__link` with a 16px stroke icon; anything a developer would copy is `.ds-mono` or a `.ds-kbd`. Keep to the era's conventions for which text sits on which fill, tint with the fills and the status colours instead of filling with them, and use one glow and one inverted card per view. 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: 1120px;\n  --size-rail: 232px;\n  --size-top: 48px;\n  --size-side: 300px;\n  --size-search: 420px;\n  --size-mark: 22px;\n  --size-dot: 8px;\n  --size-icon: 16px;\n  --size-id: 68px;\n  --size-dialog: 440px;\n  --size-glow: 420px;\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}\n\n/* shell: a rail for the whole height at the left; the top bar, the view and a status line beside it */\n.ds-page {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  grid-template-rows: auto 1fr auto;\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.ds-view {\n  grid-column: 2;\n  grid-row: 2;\n  min-width: 0;\n}\n.ds-content {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  max-width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-5) var(--space-6) var(--space-7);\n}\n.ds-cols {\n  display: grid;\n  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);\n  gap: var(--space-5);\n  align-items: stretch;\n}\n.ds-cols--side {\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n}\n.ds-cols--menu {\n  grid-template-columns: calc(var(--size-rail) - var(--space-7)) minmax(0, 1fr);\n}\n.ds-cols--even {\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\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\n/* nav: the rail on the secondary bar; workspace on top, icon links in groups, the account at the foot */\n.ds-nav {\n  grid-column: 1;\n  grid-row: 1 / span 3;\n  position: sticky;\n  top: 0;\n  display: flex;\n  flex-direction: column;\n  align-self: start;\n  min-width: 0;\n  height: 100vh;\n  padding: 0 var(--space-2);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  min-height: var(--size-top);\n  padding: 0 var(--space-2);\n  color: var(--color-heading);\n}\n.ds-nav__group {\n  margin: var(--space-4) 0 var(--space-1);\n  padding: 0 var(--space-2);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  letter-spacing: calc(var(--text-small) * 0.06);\n  text-transform: uppercase;\n  opacity: 0.7;\n}\n.ds-nav__links {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-2);\n  color: inherit;\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  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 8%, transparent);\n  color: var(--color-heading);\n}\n.ds-nav__link.is-current {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  color: var(--color-heading);\n}\n.ds-page:not(:has(.ds-view:target)) .ds-nav__links--main .ds-nav__link[href=\"#issues\"],\n.ds-page:has(#issues:target) .ds-nav__links--main .ds-nav__link[href=\"#issues\"],\n.ds-page:has(#issue:target) .ds-nav__links--main .ds-nav__link[href=\"#issues\"],\n.ds-page:has(#deploys:target) .ds-nav__links--main .ds-nav__link[href=\"#deploys\"],\n.ds-page:has(#settings:target) .ds-nav__links--main .ds-nav__link[href=\"#settings\"] {\n  background: color-mix(in srgb, var(--color-bar-alt-text) 14%, transparent);\n  color: var(--color-heading);\n}\n.ds-nav__icon {\n  flex: 0 0 auto;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-nav__label {\n  flex: 1 1 0;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-nav__foot {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-top: auto;\n  padding: var(--space-3) var(--space-2);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n}\n.ds-nav__who {\n  display: block;\n  color: var(--color-heading);\n  font-size: var(--text-ui);\n}\n\n/* top bar: a search field in the form of a command palette, then the one primary action */\n.ds-topbar {\n  grid-column: 2;\n  grid-row: 1;\n  position: sticky;\n  top: 0;\n  z-index: 5;\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  min-width: 0;\n  min-height: var(--size-top);\n  padding: var(--space-2) var(--space-6);\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-topbar__where {\n  flex: 0 0 auto;\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  text-shadow: var(--shadow-text);\n  opacity: 0.7;\n}\n.ds-search {\n  display: flex;\n  align-items: center;\n  flex: 0 1 var(--size-search);\n  gap: var(--space-2);\n  min-width: 0;\n  margin: 0 auto;\n  padding: var(--space-1) var(--space-2) var(--space-1) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  line-height: var(--line-body);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-search:hover,\n.ds-search.is-hover {\n  border-color: var(--color-border-strong);\n}\n.ds-search:focus-visible,\n.ds-search.is-focus {\n  border-color: var(--color-focus);\n  outline: var(--focus-ring);\n}\n.ds-search__icon {\n  flex: 0 0 auto;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-search__text {\n  flex: 1 1 auto;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-topbar__actions {\n  display: flex;\n  align-items: center;\n  flex: 0 0 auto;\n  gap: var(--space-2);\n}\n\n/* hero: the state of the running cycle in one glowing card */\n.ds-hero {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  padding: var(--space-5) var(--space-6);\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-hero::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 70%;\n  height: var(--size-glow);\n  background: radial-gradient(ellipse 60% 50% at 80% 0, color-mix(in srgb, var(--color-fill-1) 30%, transparent), transparent 72%);\n  pointer-events: none;\n}\n.ds-hero__copy {\n  position: relative;\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: var(--space-2) 0;\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  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  max-width: 56ch;\n  margin: 0 0 var(--space-4);\n  color: var(--color-text-muted);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-hero__art {\n  position: relative;\n  flex: 0 0 34%;\n  min-width: 0;\n}\n.ds-meter {\n  display: grid;\n  grid-template-columns: repeat(12, minmax(0, 1fr));\n  gap: var(--space-1);\n  margin: 0 0 var(--space-3);\n}\n.ds-meter__cell {\n  aspect-ratio: 1;\n  background: var(--color-surface-strong);\n  border-radius: calc(var(--radius-control) * 0.5);\n}\n.ds-meter__cell--done {\n  background: var(--color-fill-1);\n}\n.ds-meter__cell--doing {\n  background: color-mix(in srgb, var(--color-fill-1) 40%, var(--color-surface-strong));\n}\n.ds-meter__cell--late {\n  background: var(--color-warning);\n}\n.ds-meter__key {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  gap: var(--space-1) var(--space-3);\n}\n\n/* page header: breadcrumb, title and a meta line at the left, actions at the right, a rule below */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-5);\n  padding-bottom: var(--space-5);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\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-2) 0 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  text-transform: var(--heading-transform);\n}\n.ds-page-header__text {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: var(--space-2) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\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/* stats: four figures in one ruled box */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--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-stat__item {\n  min-width: 0;\n  padding: var(--space-4);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__item:first-child {\n  border-left: 0;\n}\n.ds-stat__label {\n  display: flex;\n  align-items: center;\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-heading);\n}\n.ds-stat__figure {\n  display: block;\n  margin: var(--space-2) 0 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\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__delta {\n  display: block;\n  color: var(--color-success);\n  font-size: var(--text-small);\n}\n.ds-stat__delta--down {\n  color: var(--color-danger);\n}\n\n/* list: issue rows; a state mark, the id, the title, labels, who and when */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-list__group {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-2) var(--space-4);\n  background: var(--color-surface-alt);\n  color: var(--color-heading);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-weight: var(--weight-ui);\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:last-child {\n  border-bottom: 0;\n}\n.ds-list__item:hover,\n.ds-list__item.is-hover {\n  background: var(--color-surface-alt);\n}\n.ds-list__id {\n  flex: 0 0 var(--size-id);\n}\n.ds-list__title {\n  flex: 1 1 0;\n  min-width: 0;\n  overflow: hidden;\n  color: var(--color-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__meta {\n  display: flex;\n  align-items: center;\n  flex: 0 0 auto;\n  gap: var(--space-2);\n  color: var(--color-text-muted);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-list__text {\n  flex: 1 1 0;\n  min-width: 0;\n}\n\n/* grid: project cards; the key, the name, a thin bar of progress in the card's fill colour */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  min-width: 0;\n  padding: var(--space-4);\n  background: linear-gradient(180deg, color-mix(in srgb, var(--color-fill-1) 12%, transparent), transparent 60%), var(--color-surface);\n  color: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-grid__cell--2 {\n  background: linear-gradient(180deg, color-mix(in srgb, var(--color-fill-2) 12%, transparent), transparent 60%), var(--color-surface);\n  color: var(--color-fill-2);\n}\n.ds-grid__cell--3 {\n  background: linear-gradient(180deg, color-mix(in srgb, var(--color-fill-3) 12%, transparent), transparent 60%), var(--color-surface);\n  color: var(--color-fill-3);\n}\n.ds-grid__cell--4 {\n  background: linear-gradient(180deg, color-mix(in srgb, var(--color-fill-4) 12%, transparent), transparent 60%), var(--color-surface);\n  color: var(--color-fill-4);\n}\n.ds-grid__cell:hover,\n.ds-grid__cell.is-hover {\n  border-color: var(--color-border-strong);\n}\n.ds-grid__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-grid__text {\n  flex: 1 0 auto;\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n.ds-grid__bar {\n  display: block;\n  height: var(--space-1);\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n  overflow: hidden;\n}\n.ds-grid__bar span {\n  display: block;\n  width: 25%;\n  height: 100%;\n  background: currentColor;\n}\n.ds-grid__bar--50 span { width: 50%; }\n.ds-grid__bar--75 span { width: 75%; }\n.ds-grid__bar--90 span { width: 90%; }\n.ds-grid__foot {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-2);\n}\n.ds-colhead {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: var(--space-2) 0 calc(var(--space-2) * -1);\n}\n.ds-colhead__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n\n/* tabs: an underlined row on the head of a panel */\n.ds-tabs {\n  display: flex;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0 var(--space-4);\n  list-style: none;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-tabs__tab {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-bottom: calc(var(--border-width) * -1);\n  padding: var(--space-3) 0;\n  color: var(--color-text-muted);\n  border-bottom: var(--border-width-strong) var(--border-style) transparent;\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\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  color: var(--color-heading);\n  border-bottom-color: var(--color-accent-alt);\n}\n\n/* sidebar: the properties of the open item, a key and a value per row */\n.ds-sidebar {\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  font-size: var(--text-ui);\n}\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text-muted);\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  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: var(--space-2) var(--space-4);\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-2) 0;\n}\n.ds-sidebar__key {\n  flex: 0 0 38%;\n  color: var(--color-text-muted);\n}\n\n/* menu: the sections of a settings page */\n.ds-menu {\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-menu__link {\n  display: block;\n  padding: var(--space-1) var(--space-3);\n  color: var(--color-link-quiet);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n  line-height: var(--line-body);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  color: var(--color-heading);\n}\n.ds-menu__link.is-current {\n  color: var(--color-heading);\n  border-left-color: var(--color-accent-alt);\n}\n\n/* activity: who did what, newest last */\n.ds-activity {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-activity__item {\n  display: flex;\n  align-items: flex-start;\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-muted);\n}\n.ds-activity__item:last-child {\n  border-bottom: 0;\n}\n.ds-activity__text {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-activity__text strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-ui);\n}\n\n/* footer: one mono status line under the view */\n.ds-footer {\n  grid-column: 2;\n  grid-row: 3;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-5);\n  min-width: 0;\n  padding: var(--space-3) var(--space-6);\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-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}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  color: var(--color-heading);\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-dot--accent {\n  background: var(--color-accent-alt);\n}\n.ds-dot--ring {\n  background: transparent;\n  border: var(--border-width-strong) var(--border-style) var(--color-text-muted);\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__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/* the inverted card: the one place the palette turns over */\n.ds-tip {\n  padding: var(--space-4);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-ui);\n}\n.ds-tip__title {\n  display: block;\n  font-weight: var(--weight-bold);\n}\n.ds-tip .ds-mono {\n  color: inherit;\n}\n.ds-tip p {\n  margin: var(--space-1) 0 var(--space-3);\n  opacity: 0.75;\n}\n\n/* medium windows: the rail becomes a block across the top with its links in one row */\n@media (max-width: 1000px) {\n  .ds-page {\n    display: block;\n    min-height: 0;\n  }\n  .ds-nav {\n    position: static;\n    flex-direction: row;\n    align-items: center;\n    gap: var(--space-2);\n    height: auto;\n    overflow-x: auto;\n    border-right: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__group,\n  .ds-nav__foot,\n  .ds-nav__head .ds-kbd {\n    display: none;\n  }\n  .ds-nav__links {\n    display: flex;\n    gap: var(--space-1);\n  }\n  .ds-nav__link {\n    white-space: nowrap;\n  }\n  .ds-nav__label {\n    overflow: visible;\n  }\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-cols,\n  .ds-cols--side,\n  .ds-cols--even,\n  .ds-cols--menu {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-menu {\n    display: flex;\n    overflow-x: auto;\n  }\n  .ds-menu__link {\n    border-left: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n    white-space: nowrap;\n  }\n  .ds-menu__link.is-current {\n    border-bottom-color: var(--color-accent-alt);\n  }\n}\n\n/* narrow windows: everything in one column */\n@media (max-width: 640px) {\n  .ds-topbar {\n    padding: var(--space-2) var(--space-4);\n    gap: var(--space-2);\n  }\n  .ds-topbar__where,\n  .ds-search .ds-kbd {\n    display: none;\n  }\n  .ds-content {\n    gap: var(--space-4);\n    padding: var(--space-4) var(--space-4) var(--space-6);\n  }\n  .ds-hero {\n    flex-direction: column;\n    align-items: stretch;\n    gap: var(--space-4);\n    padding: var(--space-4);\n  }\n  .ds-hero__copy,\n  .ds-hero__art {\n    flex: 0 0 auto;\n  }\n  .ds-hero__title {\n    font-size: var(--text-h2);\n  }\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-stat__item:nth-child(odd) {\n    border-left: 0;\n  }\n  .ds-stat__item:nth-child(n + 3) {\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n    gap: var(--space-1) var(--space-2);\n    padding: var(--space-3) var(--space-4);\n  }\n  .ds-list__id {\n    flex: 0 0 auto;\n  }\n  .ds-list__title {\n    flex: 1 1 60%;\n    white-space: normal;\n  }\n  .ds-list__meta {\n    flex: 1 1 100%;\n    flex-wrap: wrap;\n  }\n  .ds-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-page-header {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-3);\n  }\n  .ds-page-header__copy {\n    flex: 0 0 auto;\n  }\n  .ds-tabs {\n    overflow-x: auto;\n  }\n  .ds-table {\n    min-width: 64ch;\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    padding: var(--space-3) var(--space-4);\n  }\n  .ds-footer__links {\n    justify-content: flex-start;\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 issue tracker 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__head\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#issues\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 3a9 9 0 1 1-9 9\"/><path d=\"M12 17a5 5 0 1 1 5-5\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <span class=\"ds-kbd\">G I</span>\n  </div>\n  <p class=\"ds-nav__group\">Workspace</p>\n  <ul class=\"ds-nav__links ds-nav__links--main\">\n    <li><a class=\"ds-nav__link\" href=\"#issues\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"5.5\"/><path d=\"M5.5 8l2 2 3-4\"/></svg><span class=\"ds-nav__label\">Issues</span><span class=\"ds-badge ds-badge--quiet\">23</span></a></li>\n    <li><a class=\"ds-nav__link\" href=\"#deploys\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" aria-hidden=\"true\"><path d=\"M8 2l5.5 10h-11z\"/></svg><span class=\"ds-nav__label\">Deployments</span></a></li>\n    <li><a class=\"ds-nav__link\" href=\"#settings\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" aria-hidden=\"true\"><path d=\"M2 5h12 M2 11h12\"/><circle cx=\"6\" cy=\"5\" r=\"1.8\" fill=\"currentColor\"/><circle cx=\"10\" cy=\"11\" r=\"1.8\" fill=\"currentColor\"/></svg><span class=\"ds-nav__label\">Settings</span></a></li>\n  </ul>\n  <p class=\"ds-nav__group\">Teams</p>\n  <ul class=\"ds-nav__links\">\n    <li><a class=\"ds-nav__link\" href=\"#issues\"><span class=\"ds-dot ds-dot--accent\"></span><span class=\"ds-nav__label\">Web</span><span class=\"ds-mono\">WEB</span></a></li>\n    <li><a class=\"ds-nav__link\" href=\"#issues\"><span class=\"ds-dot ds-dot--success\"></span><span class=\"ds-nav__label\">Platform</span><span class=\"ds-mono\">PLT</span></a></li>\n    <li><a class=\"ds-nav__link\" href=\"#issues\"><span class=\"ds-dot ds-dot--warning\"></span><span class=\"ds-nav__label\">Mobile</span><span class=\"ds-mono\">MOB</span></a></li>\n  </ul>\n  <div class=\"ds-nav__foot\">\n    <span class=\"ds-avatar\" aria-hidden=\"true\">RV</span>\n    <span><span class=\"ds-nav__who\">Runa Vestergaard</span>Northwind, admin</span>\n  </div>\n</header>\n\n<div class=\"ds-topbar\">\n  <span class=\"ds-topbar__where\">northwind / web</span>\n  <a class=\"ds-search\" href=\"#issues\" aria-label=\"Search or run a command\">\n    <svg class=\"ds-search__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" aria-hidden=\"true\"><circle cx=\"7\" cy=\"7\" r=\"4.5\"/><path d=\"M10.5 10.5L14 14\"/></svg>\n    <span class=\"ds-search__text\">Search issues or run a command</span>\n    <span class=\"ds-kbd\">Ctrl K</span>\n  </a>\n  <div class=\"ds-topbar__actions\">\n    <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#deploys\">Deploy</a>\n    <a class=\"ds-button ds-button--small\" href=\"#issue\">New issue</a>\n  </div>\n</div>\n\n<section class=\"ds-view ds-view--home\" id=\"issues\">\n  <div class=\"ds-content\">\n    <div class=\"ds-hero\" data-component=\"hero\">\n      <div class=\"ds-hero__copy\">\n        <span class=\"ds-eyebrow ds-eyebrow--accent\">Cycle 14 / ends Friday</span>\n        <h1 class=\"ds-hero__title\">9 of 23 issues done, 3 days left</h1>\n        <p class=\"ds-hero__lead\">The team closes about four issues a day, so this cycle lands on time if nothing new is pulled in.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button\" href=\"#issue\">New issue</a>\n          <a class=\"ds-button ds-button--secondary is-hover\" href=\"#deploys\">See what shipped</a>\n        </div>\n      </div>\n      <div class=\"ds-hero__art\" aria-hidden=\"true\">\n        <div class=\"ds-meter\">\n          <span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--done\"></span><span class=\"ds-meter__cell ds-meter__cell--doing\"></span><span class=\"ds-meter__cell ds-meter__cell--doing\"></span><span class=\"ds-meter__cell ds-meter__cell--doing\"></span>\n          <span class=\"ds-meter__cell ds-meter__cell--doing\"></span><span class=\"ds-meter__cell ds-meter__cell--doing\"></span><span class=\"ds-meter__cell ds-meter__cell--doing\"></span><span class=\"ds-meter__cell ds-meter__cell--late\"></span><span class=\"ds-meter__cell ds-meter__cell--late\"></span><span class=\"ds-meter__cell\"></span><span class=\"ds-meter__cell\"></span><span class=\"ds-meter__cell\"></span><span class=\"ds-meter__cell\"></span><span class=\"ds-meter__cell\"></span><span class=\"ds-meter__cell\"></span><span class=\"ds-meter__cell\"></span>\n        </div>\n        <div class=\"ds-meter__key\"><span class=\"ds-mono\">9 done</span><span class=\"ds-mono\">6 in progress</span><span class=\"ds-mono\">2 blocked</span><span class=\"ds-mono\">6 todo</span></div>\n      </div>\n    </div>\n\n    <ul class=\"ds-stat\" data-component=\"stats\">\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__label\"><span class=\"ds-dot ds-dot--ring\"></span>Open issues</span><span class=\"ds-stat__figure\">14</span><span class=\"ds-stat__delta\">3 fewer than Monday</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__label\"><span class=\"ds-dot ds-dot--warning\"></span>In review</span><span class=\"ds-stat__figure\">5</span><span class=\"ds-stat__delta\">2 waiting on you</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__label\"><span class=\"ds-dot ds-dot--success\"></span>Deployed this week</span><span class=\"ds-stat__figure\">31</span><span class=\"ds-stat__delta\">all healthy</span></li>\n      <li class=\"ds-stat__item\"><span class=\"ds-stat__label\"><span class=\"ds-dot ds-dot--danger\"></span>Median time to close</span><span class=\"ds-stat__figure\">2.4 d</span><span class=\"ds-stat__delta ds-stat__delta--down\">0.3 d slower</span></li>\n    </ul>\n\n    <div class=\"ds-cols\">\n      <section class=\"ds-panel\" data-component=\"panel\">\n        <div class=\"ds-panel__head\">\n          <h2 class=\"ds-panel__title\">Active issues</h2>\n          <a class=\"ds-link ds-link--more\" href=\"#issues\">All 23</a>\n        </div>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__group\"><span class=\"ds-dot ds-dot--warning\"></span>In progress <span class=\"ds-mono\">3</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-dot ds-dot--warning\"></span><span class=\"ds-mono ds-list__id\">WEB-142</span><a class=\"ds-list__title\" href=\"#issue\">Retry uploads that time out on slow connections</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--danger\">Bug</span><span class=\"ds-avatar\">RV</span>12 Mar</span></li>\n          <li class=\"ds-list__item is-hover\"><span class=\"ds-dot ds-dot--warning\"></span><span class=\"ds-mono ds-list__id\">WEB-139</span><a class=\"ds-list__title\" href=\"#issue\">Export usage as CSV from the billing page</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--quiet\">Feature</span><span class=\"ds-avatar\">IS</span>11 Mar</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-dot ds-dot--warning\"></span><span class=\"ds-mono ds-list__id\">PLT-88</span><a class=\"ds-list__title\" href=\"#issue\">Move session storage to the new cache cluster</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--warning\">Infra</span><span class=\"ds-avatar\">KO</span>10 Mar</span></li>\n          <li class=\"ds-list__group\"><span class=\"ds-dot ds-dot--ring\"></span>Todo <span class=\"ds-mono\">4</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-dot ds-dot--ring\"></span><span class=\"ds-mono ds-list__id\">WEB-147</span><a class=\"ds-list__title\" href=\"#issue\">Keyboard shortcut list does not open on Firefox</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--danger\">Bug</span><span class=\"ds-avatar\">AO</span>12 Mar</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-dot ds-dot--ring\"></span><span class=\"ds-mono ds-list__id\">WEB-145</span><a class=\"ds-list__title\" href=\"#issue\">Show the deploy that closed an issue on its page</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--quiet\">Feature</span><span class=\"ds-avatar\">RV</span>11 Mar</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-dot ds-dot--ring\"></span><span class=\"ds-mono ds-list__id\">MOB-31</span><a class=\"ds-list__title\" href=\"#issue\">Offline drafts lose their labels after a sync</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--danger\">Bug</span><span class=\"ds-avatar\">TN</span>9 Mar</span></li>\n          <li class=\"ds-list__item\"><span class=\"ds-dot ds-dot--ring\"></span><span class=\"ds-mono ds-list__id\">PLT-91</span><a class=\"ds-list__title\" href=\"#issue\">Rotate the signing keys before April</a><span class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--warning\">Infra</span><span class=\"ds-avatar\">KO</span>8 Mar</span></li>\n        </ul>\n      </section>\n\n      <div class=\"ds-stack\">\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Latest deployments</h2><a class=\"ds-link ds-link--more\" href=\"#deploys\">All</a></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>main</span><span class=\"ds-mono\">7be02d1 / 4m</span></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--warning\"></span>fix/retry-uploads</span><span class=\"ds-mono\">a41f9c2 / now</span></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>feat/usage-export</span><span class=\"ds-mono\">c93a771 / 26m</span></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--danger\"></span>chore/bump-runtime</span><span class=\"ds-mono\">19d4e0b / 1h</span></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>docs/shortcuts</span><span class=\"ds-mono\">52f8a36 / 3h</span></li>\n            </ul>\n          </div>\n        </section>\n        <div class=\"ds-tip\">\n          <span class=\"ds-tip__title\">Close issues from a commit</span>\n          <p>Write <span class=\"ds-mono\">fixes WEB-142</span> in the message and the issue closes when the commit is deployed.</p>\n          <a class=\"ds-button ds-button--inverse ds-button--small\" href=\"#settings\">Connect a repository</a>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"ds-colhead\"><h2 class=\"ds-colhead__title\">Projects</h2><span class=\"ds-mono\">4 active</span></div>\n    <div class=\"ds-grid\" data-component=\"grid\">\n      <a class=\"ds-grid__cell\" href=\"#issues\">\n        <span class=\"ds-mono\">WEB / Q1</span>\n        <h3 class=\"ds-grid__title\">Resilient uploads</h3>\n        <p class=\"ds-grid__text\">Uploads survive a dropped connection.</p>\n        <span class=\"ds-grid__bar ds-grid__bar--75\"><span></span></span>\n        <span class=\"ds-grid__foot\"><span class=\"ds-mono\">9 of 12</span><span class=\"ds-mono\">due 28 Mar</span></span>\n      </a>\n      <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#issues\">\n        <span class=\"ds-mono\">WEB / Q1</span>\n        <h3 class=\"ds-grid__title\">Billing exports</h3>\n        <p class=\"ds-grid__text\">Usage and invoices as files.</p>\n        <span class=\"ds-grid__bar ds-grid__bar--50\"><span></span></span>\n        <span class=\"ds-grid__foot\"><span class=\"ds-mono\">4 of 8</span><span class=\"ds-mono\">due 4 Apr</span></span>\n      </a>\n      <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#issues\">\n        <span class=\"ds-mono\">PLT / Q1</span>\n        <h3 class=\"ds-grid__title\">Cache migration</h3>\n        <p class=\"ds-grid__text\">Sessions move to the new cluster.</p>\n        <span class=\"ds-grid__bar ds-grid__bar--90\"><span></span></span>\n        <span class=\"ds-grid__foot\"><span class=\"ds-mono\">10 of 11</span><span class=\"ds-mono\">due 21 Mar</span></span>\n      </a>\n      <a class=\"ds-grid__cell ds-grid__cell--4\" href=\"#issues\">\n        <span class=\"ds-mono\">MOB / Q2</span>\n        <h3 class=\"ds-grid__title\">Offline mode</h3>\n        <p class=\"ds-grid__text\">Drafts and comments without a signal.</p>\n        <span class=\"ds-grid__bar\"><span></span></span>\n        <span class=\"ds-grid__foot\"><span class=\"ds-mono\">3 of 14</span><span class=\"ds-mono\">due 30 May</span></span>\n      </a>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"issue\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\" data-component=\"page-header\">\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=\"#issues\">Issues</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#issues\">Web</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">WEB-142</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Retry uploads that time out on slow connections</h1>\n        <p class=\"ds-page-header__text\"><span class=\"ds-badge ds-badge--warning\"><span class=\"ds-dot ds-dot--warning\"></span> In progress</span> Opened by Imre Solvang on 10 March 2025, 4 comments</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#issues\">Back to issues</a>\n        <a class=\"ds-button\" href=\"#issues\">Mark as done</a>\n      </div>\n    </header>\n\n    <div class=\"ds-cols ds-cols--side\">\n      <div class=\"ds-stack\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__body\">\n            <article class=\"ds-prose\" data-component=\"typography\">\n              <h1>What goes wrong</h1>\n              <p class=\"ds-prose__lead\">An upload over 20 MB fails for good when the connection stalls for more than ten seconds.</p>\n              <p>The client sends the file in one request. When that request times out the whole upload is <strong>thrown away</strong>, and the user starts again from zero.</p>\n              <h2>Proposed fix</h2>\n              <ul>\n                <li>Send the file in parts of 5 MB</li>\n                <li>Retry a failed part up to three times, waiting longer each time</li>\n                <li>Keep finished parts for an hour so a reload can resume</li>\n              </ul>\n              <h3>How to check it</h3>\n              <p>Throttle the network to 200 kbit/s, upload <code>fixtures/large.bin</code> and pull the cable for fifteen seconds.</p>\n            </article>\n          </div>\n        </section>\n\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Activity</h2><span class=\"ds-mono\">newest last</span></div>\n          <ul class=\"ds-activity\">\n            <li class=\"ds-activity__item\"><span class=\"ds-avatar\">IS</span><span class=\"ds-activity__text\"><strong>Imre Solvang</strong> opened the issue and added the label Bug</span><span class=\"ds-mono\">10 Mar</span></li>\n            <li class=\"ds-activity__item\"><span class=\"ds-avatar\">RV</span><span class=\"ds-activity__text\"><strong>Runa Vestergaard</strong> moved it from Todo to In progress</span><span class=\"ds-mono\">11 Mar</span></li>\n            <li class=\"ds-activity__item\"><span class=\"ds-avatar\">RV</span><span class=\"ds-activity__text\"><strong>Runa Vestergaard</strong> pushed <span class=\"ds-kbd\">a41f9c2</span> to fix/retry-uploads. The preview is building.</span><span class=\"ds-mono\">now</span></li>\n          </ul>\n        </section>\n\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\">Delete WEB-142?</h2>\n              <a class=\"ds-dialog__close\" href=\"#issue\" aria-label=\"Close\">&times;</a>\n            </div>\n            <div class=\"ds-dialog__body\">\n              <p>The issue, its 4 comments and its history are removed for everyone. The branch and its deployments stay.</p>\n            </div>\n            <div class=\"ds-dialog__actions\">\n              <a class=\"ds-button ds-button--secondary\" href=\"#issue\">Keep it</a>\n              <a class=\"ds-button ds-button--danger\" href=\"#issues\">Delete issue</a>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Properties</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__key\">Status</span><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--warning\"></span><a class=\"ds-link ds-link--quiet\" href=\"#issues\">In progress</a></span></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__key\">Assignee</span><a class=\"ds-link ds-link--quiet\" href=\"#issues\">Runa Vestergaard</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__key\">Priority</span><a class=\"ds-link ds-link--quiet\" href=\"#issues\">High</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__key\">Project</span><a class=\"ds-link\" href=\"#issues\">Resilient uploads</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__key\">Cycle</span><a class=\"ds-link\" href=\"#issues\">Cycle 14</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__key\">Branch</span><span class=\"ds-mono\">fix/retry-uploads</span></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Actions</h2></div>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-buttonrow\" data-component=\"buttons\">\n              <a class=\"ds-button\" href=\"#issues\">Mark as done</a>\n              <a class=\"ds-button ds-button--secondary\" href=\"#issue\">Assign</a>\n              <button class=\"ds-button\" type=\"button\" disabled>Merge</button>\n              <a class=\"ds-button ds-button--danger\" href=\"#issue\">Delete</a>\n            </div>\n          </div>\n        </section>\n        <section class=\"ds-panel ds-panel--grow\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Linked</h2></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-panel__rows\">\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--warning\"></span>Preview</span><a class=\"ds-link\" href=\"#deploys\">a41f9c2</a></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--ring\"></span>Blocks</span><a class=\"ds-link is-visited\" href=\"#issue\">WEB-145</a></li>\n              <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>Related</span><a class=\"ds-link\" href=\"#issue\">MOB-31</a></li>\n            </ul>\n          </div>\n        </section>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"deploys\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\">\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=\"#issues\">Northwind</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Deployments</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Deployments</h1>\n        <p class=\"ds-page-header__text\">Every build of every branch, and the issues each one closed.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#settings\">Environments</a>\n        <a class=\"ds-button\" href=\"#deploys\">Deploy main</a>\n      </div>\n    </header>\n\n    <section class=\"ds-panel\">\n      <ul class=\"ds-tabs\" data-component=\"tabs\">\n        <li><a class=\"ds-tabs__tab is-current\" href=\"#deploys\">All <span class=\"ds-mono\">128</span></a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#deploys\">Production <span class=\"ds-mono\">31</span></a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#deploys\">Preview <span class=\"ds-mono\">94</span></a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#deploys\">Failed <span class=\"ds-mono\">3</span></a></li>\n      </ul>\n      <div class=\"ds-table__wrap\">\n        <table class=\"ds-table\" data-component=\"table\">\n          <thead>\n            <tr><th scope=\"col\">Branch</th><th scope=\"col\">Commit</th><th scope=\"col\">State</th><th scope=\"col\">Closes</th><th scope=\"col\">By</th><th scope=\"col\" class=\"ds-table__num\">Build, s</th><th scope=\"col\" class=\"ds-table__num\">Size, kB</th></tr>\n          </thead>\n          <tbody>\n            <tr><th scope=\"row\">fix/retry-uploads</th><td><span class=\"ds-mono\">a41f9c2</span></td><td><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--warning\"></span>Building</span></td><td><a class=\"ds-link\" href=\"#issue\">WEB-142</a></td><td>Runa V.</td><td class=\"ds-table__num\">41</td><td class=\"ds-table__num\">812</td></tr>\n            <tr class=\"is-hover\"><th scope=\"row\">main</th><td><span class=\"ds-mono\">7be02d1</span></td><td><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>Production</span></td><td><a class=\"ds-link\" href=\"#issue\">WEB-136</a></td><td>Imre S.</td><td class=\"ds-table__num\">38</td><td class=\"ds-table__num\">806</td></tr>\n            <tr><th scope=\"row\">feat/usage-export</th><td><span class=\"ds-mono\">c93a771</span></td><td><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>Preview</span></td><td><a class=\"ds-link\" href=\"#issue\">WEB-139</a></td><td>Imre S.</td><td class=\"ds-table__num\">44</td><td class=\"ds-table__num\">831</td></tr>\n            <tr><th scope=\"row\">chore/bump-runtime</th><td><span class=\"ds-mono\">19d4e0b</span></td><td><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--danger\"></span>Failed</span></td><td>none</td><td>Kofi O.</td><td class=\"ds-table__num\">12</td><td class=\"ds-table__num\">0</td></tr>\n            <tr><th scope=\"row\">docs/shortcuts</th><td><span class=\"ds-mono\">52f8a36</span></td><td><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>Preview</span></td><td><a class=\"ds-link\" href=\"#issue\">WEB-147</a></td><td>Ada O.</td><td class=\"ds-table__num\">36</td><td class=\"ds-table__num\">806</td></tr>\n            <tr><th scope=\"row\">spike/edge-cache</th><td><span class=\"ds-mono\">e07b115</span></td><td><span class=\"ds-table__state\"><span class=\"ds-dot\"></span>Expired</span></td><td>none</td><td>Kofi O.</td><td class=\"ds-table__num\">52</td><td class=\"ds-table__num\">904</td></tr>\n          </tbody>\n        </table>\n      </div>\n      <div class=\"ds-table__foot\">\n        <span>Showing 6 of 128 deployments</span>\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><a class=\"ds-pagination__link is-disabled\" href=\"#deploys\">Previous</a></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#deploys\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#deploys\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#deploys\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#deploys\">22</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#deploys\">Next</a></li>\n        </ul>\n      </div>\n    </section>\n\n    <div class=\"ds-cols ds-cols--even\">\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 5l12 21H4z\"/><path d=\"M16 13v6 M16 22v1\"/></svg>\n        <h2 class=\"ds-empty__title\">No incidents this cycle</h2>\n        <p class=\"ds-empty__text\">A failed production deployment or a rollback would be listed here with the issue that caused it.</p>\n        <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#settings\">Set up alerts</a>\n      </div>\n      <section class=\"ds-panel\">\n        <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Environments</h2><a class=\"ds-link ds-link--more\" href=\"#settings\">Manage</a></div>\n        <div class=\"ds-panel__body\">\n          <ul class=\"ds-panel__rows\">\n            <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>Production</span><span class=\"ds-mono\">7be02d1 / 3 regions</span></li>\n            <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--success\"></span>Staging</span><span class=\"ds-mono\">c93a771 / 1 region</span></li>\n            <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot ds-dot--warning\"></span>Preview</span><span class=\"ds-mono\">12 live / expire in 14 d</span></li>\n            <li class=\"ds-panel__row\"><span class=\"ds-table__state\"><span class=\"ds-dot\"></span>Sandbox</span><span class=\"ds-mono\">paused</span></li>\n          </ul>\n        </div>\n      </section>\n    </div>\n  </div>\n</section>\n\n<section class=\"ds-view\" id=\"settings\">\n  <div class=\"ds-content\">\n    <header class=\"ds-page-header\">\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=\"#issues\">Northwind</a></li>\n          <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#settings\">Settings</a></li>\n          <li class=\"ds-breadcrumb__item ds-breadcrumb__current\">Workspace</li>\n        </ol>\n        <h1 class=\"ds-page-header__title\">Workspace settings</h1>\n        <p class=\"ds-page-header__text\">Name, address and defaults for everyone in Northwind.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#issues\">Discard changes</a>\n      </div>\n    </header>\n\n    <div class=\"ds-cols ds-cols--menu\">\n      <ul class=\"ds-menu\">\n        <li><a class=\"ds-menu__link is-current\" href=\"#settings\">Workspace</a></li>\n        <li><a class=\"ds-menu__link\" href=\"#settings\">Members</a></li>\n        <li><a class=\"ds-menu__link\" href=\"#settings\">Labels</a></li>\n        <li><a class=\"ds-menu__link\" href=\"#settings\">Repositories</a></li>\n        <li><a class=\"ds-menu__link\" href=\"#settings\">API keys</a></li>\n        <li><a class=\"ds-menu__link\" href=\"#settings\">Billing</a></li>\n      </ul>\n\n      <div class=\"ds-stack\">\n        <div class=\"ds-noticerow\" data-component=\"notice\">\n          <p class=\"ds-notice\"><span class=\"ds-notice__title\">Changes apply to all 14 members.</span> Their open tabs pick them up on the next reload.</p>\n          <p class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__title\">The settings were not saved.</span> Fix the highlighted field and save again.</p>\n        </div>\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">General</h2><span class=\"ds-mono\">id ws_8f2c41</span></div>\n          <div class=\"ds-panel__body\">\n            <form class=\"ds-form\" data-component=\"form\" action=\"#settings\">\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Workspace name</span><input class=\"ds-form__input\" type=\"text\" value=\"Northwind\"></label>\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Address</span><input class=\"ds-form__input ds-form__input--mono is-error\" type=\"text\" value=\"north wind\"><span class=\"ds-form__error\">Use lowercase letters, digits and hyphens only.</span></label>\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Issue prefix</span><input class=\"ds-form__input ds-form__input--mono is-focus\" type=\"text\" placeholder=\"WEB\"></label>\n                <label class=\"ds-form__field\"><span class=\"ds-form__label\">Cycle length</span>\n                  <select class=\"ds-form__select\"><option>Two weeks, starting Monday</option><option>One week, starting Monday</option><option>No cycles</option></select>\n                </label>\n              </div>\n              <label class=\"ds-form__field\"><span class=\"ds-form__label\">Template for new issues</span><textarea class=\"ds-form__textarea ds-form__textarea--mono\" rows=\"3\" placeholder=\"## What goes wrong&#10;## How to check it\"></textarea><span class=\"ds-form__hint\">Markdown. Shown when someone presses New issue.</span></label>\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> <span>Close an issue when the commit that fixes it reaches production</span></label>\n              <div class=\"ds-form__actions\">\n                <button class=\"ds-button\" type=\"submit\">Save changes</button>\n                <a class=\"ds-button ds-button--secondary\" href=\"#settings\">Reset</a>\n              </div>\n            </form>\n          </div>\n        </section>\n\n        <div class=\"ds-cols ds-cols--even\">\n          <section class=\"ds-panel\">\n            <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Labels</h2><a class=\"ds-link ds-link--more\" href=\"#settings\">Edit</a></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--quiet\">Feature</span>\n                <span class=\"ds-badge ds-badge--new\">Idea</span>\n                <span class=\"ds-badge ds-badge--success\">Shipped</span>\n                <span class=\"ds-badge ds-badge--warning\">Infra</span>\n                <span class=\"ds-badge ds-badge--danger\">Bug</span>\n              </div>\n              <p class=\"ds-linkrow\" data-component=\"links\">\n                <a class=\"ds-link\" href=\"#settings\">Import labels</a>\n                <a class=\"ds-link is-visited\" href=\"#settings\">Label guide</a>\n                <a class=\"ds-link is-hover\" href=\"#settings\">Archive unused</a>\n                <a class=\"ds-link is-active\" href=\"#settings\">Sort by use</a>\n              </p>\n            </div>\n          </section>\n          <section class=\"ds-panel\">\n            <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Danger zone</h2></div>\n            <div class=\"ds-panel__body\">\n              <p>Deleting the workspace removes 1,204 issues and every deployment record. This cannot be undone.</p>\n              <div class=\"ds-buttonrow\">\n                <a class=\"ds-button ds-button--secondary\" href=\"#settings\">Export everything</a>\n                <a class=\"ds-button ds-button--danger\" href=\"#settings\">Delete workspace</a>\n              </div>\n            </div>\n          </section>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <span class=\"ds-footer__status\"><span class=\"ds-dot ds-dot--success\"></span> chronoskin is up to date</span>\n  <span>&copy; 2025 chronoskin, build 7be02d1</span>\n  <ul class=\"ds-footer__links\">\n    <li><a class=\"ds-footer__link\" href=\"#settings\">Shortcuts</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#deploys\">Status</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#settings\">Help</a></li>\n  </ul>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.dev-dark.app.s02.p02.t02.u02\",\n  \"library\": \"2026.10.07-2111\",\n  \"era\": {\n    \"slug\": \"dev-dark\",\n    \"years\": [\n      2019,\n      2026\n    ]\n  },\n  \"archetype\": \"app\",\n  \"mode\": \"pure\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-dd-2222\",\n  \"short\": \"v1-dd-2222\"\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: \"IBM Plex Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: \"JetBrains Mono\", \"IBM Plex Mono\", ui-monospace, Menlo, Consolas, monospace;\n  --font-ui: \"JetBrains Mono\", \"IBM Plex Mono\", ui-monospace, Menlo, Consolas, monospace;\n  --font-mono: \"JetBrains Mono\", \"IBM Plex Mono\", ui-monospace, Menlo, Consolas, monospace;\n  --text-base: 14px;\n  --text-small: 11px;\n  --text-ui: 12px;\n  --text-large: 16px;\n  --text-display: 42px;\n  --text-h1: 28px;\n  --text-h2: 20px;\n  --text-h3: 14px;\n  --line-body: 1.55;\n  --line-heading: 1.3;\n  --line-display: 1.15;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 600;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: -1px;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 3px;\n  --border-style: solid;\n  --radius-control: 2px;\n  --radius-panel: 4px;\n  --radius-pill: 2px;\n  --radius-page: 4px;\n  --shadow-panel: none;\n  --shadow-control: inset 0 -2px 0 color-mix(in srgb, black 22%, transparent);\n  --shadow-control-hover: inset 0 -2px 0 color-mix(in srgb, black 40%, transparent);\n  --shadow-control-pressed: inset 0 2px 0 color-mix(in srgb, black 30%, transparent);\n  --shadow-dialog: 0 20px 25px var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: linear-gradient(color-mix(in srgb, var(--color-border) 45%, transparent) 1px, transparent 1px) 0 0 / 56px 56px, linear-gradient(90deg, color-mix(in srgb, var(--color-border) 45%, transparent) 1px, transparent 1px) 0 0 / 56px 56px, var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 82%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 1px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
