{
  "id": "v1-bg-6111",
  "long_id": "v1.bento-grids.shop.s06.p01.t01.u01",
  "name": "Product announcement bento, 2025",
  "era": {
    "slug": "bento-grids",
    "code": "bg",
    "name": "Bento grids",
    "years": [
      2022,
      2026
    ],
    "description": "Feature grids, 2022 to 2026: rounded cells of unequal size, each holding one idea, packed into a tight grid on a dark or very pale page."
  },
  "archetype": "shop",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": false,
    "responsive": true
  },
  "summary": "A product page in the manner of a hardware announcement: the thing itself, drawn in CSS, stands in a tall tile in the middle of a six-track bento, and its facts flank it as small tiles, each one large numeral with its unit or one icon with two words. The page is near-black, tiles are a shade lighter and lit from below with a faint top edge, a single coral accent colours units, icons and the closing price tile, and controls look like low keycaps. The form was common for device, operating-system and app launches from about 2022 to 2026.",
  "url": "https://chrono.skin/s/v1-bg-6111",
  "preview_url": "https://chrono.skin/s/v1-bg-6111/specimen.html",
  "files": {
    "STYLE.md": "# Product announcement bento, 2025\n\n## Summary\n\nA product page in the manner of a hardware announcement: the thing itself, drawn in CSS, stands in a tall tile in the middle of a six-track bento, and its facts flank it as small tiles, each one large numeral with its unit or one icon with two words. The page is near-black, tiles are a shade lighter and lit from below with a faint top edge, a single coral accent colours units, icons and the closing price tile, and controls look like low keycaps. The form was common for device, operating-system and app launches from about 2022 to 2026.\n\n## Layout\n\n- Fixed centred column: `--size-page` is 1180px, designed at a 1440px viewport, padded by `--space-5` (20px) at the sides. The navigation bar's hairline and the footer's hairline run the full width; everything else is a tile in the column.\n- `.ds-nav` is a thin product bar, `--size-nav` (52px) tall, sticky, translucent with a hairline under it: the `.ds-brand` at the left, and at the right the four page links, the price in grey and one small button. It is the product's own bar, not a company menu.\n- `.ds-grid` has six equal tracks (180px at full width) and rows of at least `--size-row` (196px). A tile takes one track by default; `--wide` takes two, `--half` three, `--wider` four, `--full` all six, `--tall` two rows. `--centre` places a tile on tracks three and four across the first three rows. `.ds-grid--auto` lets rows follow their content.\n- The home page has no band above the grid and no separate hero: the `.ds-hero` is the `--centre` tile. To its left and right the small tiles flow in three rows, two tracks a side, mirrored: a two-track figure tile opposite two one-track tiles in row one, the reverse in row two, and again a two-track tile opposite two one-track tiles in row three. Under them the `.ds-stats` strip takes a full row, then two `--half` tiles, then the full-width `--accent` tile with the price at the left and the order button at the right.\n- A one-track tile holds one icon, a title of one or two words and one short caption, centred; or one small figure. A two-track tile holds a title at the top and one large figure with its unit and a caption at the bottom. Never put two figures in one tile.\n- Tiles never touch. The gap is `--space-gap` (20px) in both directions and the padding inside a tile is `--space-cell` (28px).\n- Spacing scale: `--space-1` 4px (pill padding, title to caption, figure to unit), `--space-2` 8px (button gap, figure to label, the bezel of the device), `--space-3` 12px (control padding, table cell padding, nav actions gap), `--space-4` 16px (icon to title, form gap, list row padding), `--space-5` 20px (page gutter, stack gap inside a tile, panel padding), `--space-6` 28px (footer columns, split tile gap), `--space-7` 40px (above a view, under the page header), `--space-8` 56px (dialog stage), `--space-9` 88px (under a view, textarea height).\n- Controls are `--size-control` (38px) tall, `--size-control-large` (48px) in the hero and the price tile; icon tiles are `--size-icon` (44px) with a `--size-glyph` (22px) line icon; the device drawing is at most `--size-device` (248px) wide.\n- Inner pages (compare, support, order) keep the bar, the column, the six tracks and the gap, and have no hero and no centre tile. A view opens `--space-7` under the bar with the `.ds-breadcrumb`, then the `.ds-page-header` on the bare page (title at `--text-h1`, one line at `--text-large`, one button at the right on the baseline), `--space-7` above the tiles. An optional `.ds-toolbar` with the `.ds-tabs` at the left and a count at the right follows, `--space-gap` above a `.ds-grid--auto`. The comparison table takes a `--wider` tile with a two-track tile of panels beside it and three two-track tiles under it; prose takes a `--wider` `--tall` tile with a two-track `.ds-sidebar` and a two-track list beside it; the order form takes a `--wider` tile with the two-track bag summary beside it, and stock, messages and the dialog stage take two-track tiles in a row of three.\n- Views: `home` is the announcement (the clock in the centre, nine fact tiles, the figures strip, what is in the box, a week of charging, the price); `compare` is the two sizes side by side (tabs, the table, a panel per size, two figures, a short call to order); `support` is the guide (topics, prose, software updates with pagination, downloads, a terminal sample, an empty repairs record); `order` is the form with its buttons, the bag, stock by finish with status badges, the checkout's notices and the dialog that empties the bag. The bar marks Overview, Compare, Support or Order.\n- Below 1100px the large figures and the clock's time step down to `--text-h1`. Below 960px the grid has four tracks: the centre tile comes first across all four and the fact tiles follow in rows of four tracks; `--half` and `--wider` tiles take the full width; the bar's links move to a centred second line; the footer has two columns. Below 600px the grid has two tracks with a 12px gap: two-track tiles take both, one-track tiles stay side by side in pairs, the stats strip becomes two by two, the price in the bar hides, a split tile stacks and the page header's button goes under its text. A table hides the columns marked `.ds-table__extra` and scrolls sideways inside `.ds-table__scroll` if it still does not fit.\n- On a phone (600px and below) the bar keeps its second line of links; the price (`.ds-nav__price`) is not shown, the page padding drops to `--space-4`, and the Support drop-down opens as a full row under the links instead of under its own link. The current view's link stays a filled pill. Below 960px a tooltip opens as a full row under its line.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- One sans family everywhere: `--font-body`, `--font-heading` and `--font-ui` are the same Inter-first stack. The references used Inter or commercial grotesques of the same shape (a geometric sans and a custom UI sans); Inter with system fallbacks is the substitute. `--font-mono` is only for code.\n- Sizes: `--text-base` 16px at `--line-body` 1.5; `--text-small` and `--text-ui` 14px (captions in cells, navigation, buttons, table, form); `--text-large` 18px (hero lead, cell titles); `--text-display` 60px at `--line-display` 1.13 (hero title, big stat number); `--text-h1` 40px, `--text-h2` 30px, `--text-h3` 20px at `--line-heading` 1.2. The smallest text is 12px, written as `calc(var(--text-small) * 0.857)` because the vocabulary has no token for it: badges, hints, meta, the eyebrow. Code in a cell is 12.4px, `calc(var(--text-small) * 0.886)`.\n- Weights: `--weight-body` 400, `--weight-ui` 500, `--weight-heading` and `--weight-bold` 600, `--weight-display` 700. No tracking on headings. The only uppercase text is the 12px `.ds-section__eyebrow`, tracked by `calc(var(--text-small) * 0.2)`.\n- `--color-page` and `--color-canvas` `#111113`: the page. `--color-surface` `#1d1c20`: cells, lit by `--fill-panel` (a 5% lighter to 12% darker vertical gradient). `--color-surface-alt` `#29292b`: panels, dialog, current nav and sidebar item, secondary button. `--color-surface-strong` `#323238`: current tab and page, neutral badges, chart bars, inline code.\n- `--color-text` `#e0e0e0` body; `--color-text-muted` `#a9a9a9` for every caption, lead and meta line; `--color-heading` white; `--color-heading-alt` `#eeeeee` for panel, sidebar and footer titles.\n- `--color-accent` / `--color-button` `#5e69d1` periwinkle: primary button, accent badge, the highlighted chart bar, the closing call-to-action cell. `--color-link` `#768cff` is its lighter step for links, icons, the eyebrow and focus. `--color-accent-alt` `#3ecf8e` green marks \"new\", passed checks and switched-on toggles only.\n- Status colours: `--color-success` `#3ecf8e` (the same green as `--color-accent-alt`, the only green measured in the references), `--color-warning` `#f7be2b` (the one amber measured) and `--color-danger` `#f24822`. They appear only as small text, a dot, or a 14% tint with a 30% hairline on a status badge, never as a filled block.\n- `--color-fill-1` to `--color-fill-4` are dark tints (navy, green, plum, grey) for feature cells. Fills 1 to 3 are used as the top of a gradient that fades to `--color-surface`; fill 4 is flat. At most half the cells of a grid are tinted.\n- Borders: `--color-border` (white at 8%) on every cell, panel and bar; `--color-border-strong` (white at 16%) on secondary buttons, the dialog and the empty cell; `--color-border-muted` `#2b292e` for rows inside a box. All are `--border-width` 1px; `--border-width-strong` 2px is the focus ring only.\n- Links have no underline (`--link-decoration: none`) and gain one on hover; quiet links (`--color-link-quiet`) in navigation, sidebar and footer turn white on hover and never underline.\n- Radii: `--radius-page` 24px for grid cells, `--radius-panel` 12px for panels, tables, notices, code blocks and the dialog, `--radius-control` 8px for buttons, inputs, icon tiles and nav items (chart bars and inline code take half of it), `--radius-pill` for badges, tabs and switches.\n- Shadows: `--shadow-panel` is a 1px inset white highlight on the top edge plus a soft 12px drop; `--shadow-dialog` is the same idea with a 25px blur. Buttons have a 1px lighter hairline and a 2px shadow. No text shadow.\n- The hero glow and the `--glow` cell are a radial fade from `--color-fill-1` to transparent, so a glow is always the palette's own tint (navy here) and a palette with neutral fills simply has none; the accent colour is never used for it.\n- One-off mixes written in `components.css` because no token exists: the button hairline (25% button text in the button colour), the `--new` and status badges (the colour at 14% and 30% over transparent), the danger button's hairline (danger at 45%) and hover fill (20% danger in `--color-danger-surface`), notice borders.\n- `--color-notice` `#1a3045` with `--color-notice-text` `#bae6fd` is the information notice; `--color-danger` `#f24822` on `--color-danger-surface` `#201818` is the error. `--color-inverse` white is used only for the button on the accent cell.\n- `--transition` is a 0.15s colour fade on links, buttons and inputs. Nothing moves or scales.\n\n## Components\n\n- `.ds-page` on `<body>`: dark page, sets the family and body size. `.ds-page__inner` is the 1180px column; every view wraps its content in one.\n- `.ds-nav`: the thin sticky product bar. `.ds-nav__inner` holds the `.ds-brand` at the left, then `.ds-nav__links` of `.ds-nav__link` (the current view's link is filled with `--color-surface-alt`; `is-current` does the same by hand) and `.ds-nav__actions` with the `.ds-nav__price` and one `.ds-button--small`.\n- `.ds-brand`: the site's mark and name, at the left of the bar. `.ds-brand__mark` is a small tile dressed like the primary button (`--fill-button` over `--color-button`, `--color-button-text` for the drawing, a 1px hairline, `--radius-control`, `--shadow-control`), so it takes on every palette and surface; it holds the mark as inline SVG painted with `currentColor`. `.ds-brand__name` is the name in the heading family at 20px in `--color-bar-text`. The name `chronoskin` and its mark are placeholders: the installing project puts its own name and logo here.\n- `.ds-hero`: the `--centre` tile of the home grid, everything centred: a `.ds-badge--new` at the top, the `.ds-device`, then `.ds-hero__title` (the product's name at `--text-h1`) with `.ds-hero__lead`, then `.ds-hero__actions` with one primary and one secondary large button over a 12px `.ds-hero__note`. One per site, home page only.\n- `.ds-device`: the product drawn in CSS: `.ds-device__body` (the bezel, with the dialog's shadow) around `.ds-device__face` (the paper face in the inverse colours, with `.ds-device__time` at the display size and `.ds-device__date` in mono) over a `.ds-device__foot`. Redraw it for another product from the same parts: a body, a face in the inverse colours, one large reading.\n- `.ds-grid`: the bento. Children are `.ds-grid__cell` with span variants `--wide`, `--half`, `--wider`, `--full`, `--tall` and `--centre`; arrangement variants `--center` (for a one-track icon or figure tile), `--end`, `--between`, `--stack` (20px between children), `--split` (copy left in `.ds-grid__copy`, actions right); fill variants `--fill-1` to `--fill-4`, `--accent` (the price tile), `--bare` (outline only). Inside: `.ds-grid__icon` with a `.ds-grid__glyph`, `.ds-grid__title` (`--large` for the title of a `--half` or wider tile), `.ds-grid__text`, `.ds-grid__visual` and `.ds-grid__actions`. `.ds-grid--auto` is for tiles that hold components.\n- `.ds-figure`: one large numeral: `.ds-figure__value` (64px, weight 600, tabular) with its `.ds-figure__unit` in the accent colour at 24px, over a 14px `.ds-figure__label`. It sits at the bottom of a two-track tile under a `.ds-grid__title`. `.ds-figure--small` (44px) is for a one-track tile and for a total in a summary.\n- Other tile contents: `.ds-finishes` of round `.ds-finishes__dot` samples (`--2` to `--4`, `is-current` ringed), `.ds-chart` of `.ds-chart__bar` (`--2` to `--5`, `is-current`), `.ds-checks`, `.ds-chips`, `.ds-rows`, `.ds-code`, `.ds-switch`, and `.ds-facts` with `.ds-facts__row`, `.ds-facts__term` and `.ds-facts__value` for a two-column summary.\n- `.ds-page-header`: the head of an inner page, on the bare page. `.ds-page-header__copy` holds `.ds-page-header__title` (an `h1` at `--text-h1`) and one line of `.ds-page-header__text` at 20px; `.ds-page-header__actions` sits at the right with one button. Put a `.ds-breadcrumb` above it. Never together with a `.ds-hero`.\n- `.ds-stat`: one figure of the strip: `.ds-stat__value` (`--text-h1`, tabular, with a grey `.ds-stat__unit`) over `.ds-stat__label`, with an optional 12px `.ds-stat__note` (`--success`, `--warning`, `--danger`). `.ds-stats` is the row: a `--full` tile laid out as four centred columns parted by hairlines; use four.\n- `.ds-prose`: long-form text in a `--wider` tile; styles h1 to h3, paragraphs, lists, `strong`, `code` and links.\n- `.ds-link`: inline link with `is-visited`, `is-hover`, `is-active`, `is-focus`; `--quiet` for grey navigation links. `.ds-links` lays several out in a row.\n- `.ds-button`: the light keycap. `--secondary` is dark with a grey hairline, `--danger` is the destructive action (danger text on `--color-danger-surface` with a danger hairline, never a solid block; one per group, beside a secondary button), `--inverse` only on the price tile, `--large` in the hero and the price tile, `--small` in the bar. States `is-hover`, `is-active`, `is-focus`, `is-disabled`. Group with `.ds-buttons`.\n- `.ds-badge`: 12px label with 6px corners. `--accent` filled coral, `--new` a tint of `--color-accent-alt`, `--count` a number; optional `.ds-badge__dot`. Status labels are `--success` (ready to ship), `--warning` (two weeks) and `--danger` (sold out): coloured text on a 14% tint with a 30% hairline. Use them for stock and order state and nowhere decorative.\n- `.ds-form`: two-column grid of `.ds-form__field` (`--full` spans both) with `.ds-form__label` and `.ds-form__control` (`--area` for a textarea; `is-invalid`, `is-focus`, `is-disabled`), `.ds-form__hint`, `.ds-form__error`, `.ds-form__check` with `.ds-form__checkbox`, and `.ds-form__actions`. The buttons follow the form in a `.ds-buttons` row.\n- `.ds-table`: a rounded box with a grey head; rows are parted by the table's own `--color-border-muted` fill showing through a hairline gap. `.ds-table__num` right-aligns numbers (one column per model in a comparison), `.ds-table__muted` greys a column, `tr.is-current` lifts a row, `.ds-table__link` in the first cell leads to its explanation. Put it in a `--wider` tile inside `.ds-table__scroll`.\n- `.ds-list`: hairline-separated `.ds-list__item` with `.ds-list__title`, optional `.ds-list__text` and `.ds-list__meta`.\n- `.ds-panel`: a small card with `.ds-panel__title`, `.ds-panel__body` and `.ds-panel__meta`, one per model or note, inside a tile. `.ds-panels` puts two side by side.\n- `.ds-tabs`: a segmented strip of `.ds-tabs__tab`; `is-current` is the filled segment. `.ds-toolbar` puts tabs and a count on one line between the page header and the grid.\n- `.ds-sidebar`: a two-track tile with `.ds-sidebar__title` and a `.ds-sidebar__list` of `.ds-sidebar__link` (`is-current` filled).\n- `.ds-notice`: information box with `.ds-notice__title` and `.ds-notice__text`; `--error` is the dark red variant. `.ds-notices` stacks them.\n- `.ds-pagination`: `.ds-pagination__link` items under a list or table; `is-current` filled with a hairline, `is-disabled` greyed.\n- `.ds-breadcrumb`: 14px trail of `.ds-breadcrumb__item` separated by slashes; the last carries `is-current`. The first thing on an inner page.\n- `.ds-dialog`: 460px box with `.ds-dialog__bar` (`.ds-dialog__title`, `.ds-dialog__close` with a `.ds-dialog__glyph`), `.ds-dialog__body` and `.ds-dialog__actions`. Shown on a `.ds-stage`, a tile filled with `--color-overlay`.\n- `.ds-empty`: centred icon tile, `.ds-empty__title`, `.ds-empty__text` and one secondary button inside a `--bare` tile.\n- `.ds-footer`: hairline on top, then the small print first: `.ds-footer__notes` with numbered `.ds-footer__note` lines at 12px; then `.ds-footer__inner` with `.ds-footer__brand` and `.ds-footer__text` beside three columns of `.ds-footer__title` over a `.ds-footer__list` of `.ds-footer__link`.\n- `.ds-menu`: a drop-down under a navigation item, opened by hover or keyboard focus (`is-open` by hand). `.ds-menu__list` of `.ds-menu__item` with an optional `.ds-menu__hint`, parted by `.ds-menu__rule`; `.ds-menu__caret` in the trigger; `--end` aligns it to the right edge. Use it under the one navigation item that has sub-pages.\n- `.ds-accordion`: `<details>` as `.ds-accordion__item` with a `.ds-accordion__head` summary and `.ds-accordion__body`. Use it for questions at the end of a guide or inside a tile.\n- `.ds-tooltip`: a focusable term with `.ds-tooltip__mark` and `.ds-tooltip__tip`, shown on hover or focus (`is-open` by hand) on `--fill-inverse`. Use it for one sentence of explanation, never for an action.\n- `.ds-progress`: `.ds-progress__label` with `.ds-progress__value` over `.ds-progress__bar` with `.ds-progress__fill` (`--1` to `--5` set the width; `--success`, `--warning` the colour). Use it inside a tile for a quota or a share used.\n\n## Never\n\n- `content-width <= 1180px`: everything stays in the centred 1180px column.\n- `block-gap <= 56px`: tiles sit 20px apart; the largest gap between stacked blocks is the 40px under a page header.\n- `font-families <= 2`: one sans for everything plus the mono for code.\n- `font-size >= 12px`: the smallest measured text is 12px.\n- `font-size <= 72px`: the largest measured hero heading is 72px; this pack tops out at 60px.\n- `font-weight <= 700`: no black or heavy weights.\n- `underlined-links <= 1%`: links are told apart by colour; underline appears only on hover.\n- `uppercase-text <= 1%`: capitals are limited to a short eyebrow label.\n- `line-height <= 1.7`: body text sits between 1.5 and 1.7.\n- `border-width <= 2px`: every hairline is 1px; 2px exists only as the focus ring.\n- `border-radius >= 4px`: no box is square; the smallest measured radius is 4px.\n- `text-shadow = none`: no visible text shadows.\n- `box-shadow-blur <= 25px`: shadows are quiet; the largest measured blur is 25px.\n- `gradient-fills <= 30%`: gradients are faint cell lighting and glows, on at most about a third of boxes.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen. A new fact about the product is a new tile: one track for an icon with two words and a caption, two tracks for a title and one `.ds-figure`; keep the two sides of the centre tile mirrored and their rows unevenly split. A new drawing of the product is built like `.ds-device`, from a body, a face in the inverse colours and one large reading, with tokens only and never an image. A contained box inside a tile is a `.ds-panel`; a label is a `.ds-badge`. Use tokens only: fills are `--fill-panel`, a `--color-fill-*` tint fading into `--color-surface`, or `--fill-accent` with `--color-accent-text`; outlines are `--border-width` in `--color-border`; corners are `--radius-page` for tiles, `--radius-panel` inside them and `--radius-control` for controls; spacing comes from the `--space-*` scale. Keep one figure per tile, colour only its unit, separate tiles with the gap and never with a rule, and do not add a second accent colour, a light section, a centred hero band above the grid or a photograph.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 1180px;\n  --size-measure: 640px;\n  --size-nav: 52px;\n  --size-row: 196px;\n  --size-control: 38px;\n  --size-control-large: 48px;\n  --size-device: 248px;\n  --size-icon: 44px;\n  --size-glyph: 22px;\n  --size-check: 16px;\n  --size-dot: 8px;\n  --size-chart: 112px;\n  --size-switch: 32px;\n  --size-knob: 14px;\n  --size-dialog: 460px;\n  --size-blur: 16px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 20px;\n  --space-6: 28px;\n  --space-7: 40px;\n  --space-8: 56px;\n  --space-9: 88px;\n  --space-gap: 20px;\n  --space-cell: 28px;\n}\n\n/* shell */\n.ds-page {\n  margin: 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  -webkit-font-smoothing: antialiased;\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n.ds-page__inner {\n  width: 100%;\n  max-width: calc(var(--size-page) + var(--space-5) * 2);\n  margin: 0 auto;\n  padding: 0 var(--space-5);\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  padding: var(--space-7) 0 var(--space-9);\n}\n\n/* nav: a thin product bar. The name at the left, the pages, the price and the order button at the right */\n.ds-nav {\n  position: sticky;\n  top: 0;\n  z-index: 10;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  backdrop-filter: blur(var(--size-blur));\n}\n.ds-nav__inner {\n  display: flex;\n  align-items: center;\n  gap: var(--space-5);\n  max-width: calc(var(--size-page) + var(--space-5) * 2);\n  min-height: var(--size-nav);\n  margin: 0 auto;\n  padding: 0 var(--space-5);\n}\n/* brand: the mark on a small tile dressed like the primary button, then the name */\n.ds-brand {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin-right: auto;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: calc(var(--size-glyph) + var(--space-1));\n  height: calc(var(--size-glyph) + var(--space-1));\n  background: var(--color-button);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button-text) 25%, var(--color-button));\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 70%;\n  height: 70%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-bar-text);\n}\n.ds-nav__links {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.2;\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  white-space: nowrap;\n  color: var(--color-link-quiet);\n  transition: var(--transition);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  color: var(--color-bar-text);\n}\n/* the current view marks its item in the bar */\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#compare:target) .ds-nav__link[href=\"#compare\"],\n.ds-page:has(#order:target) .ds-nav__link[href=\"#order\"],\n.ds-page:has(#support:target) .ds-nav__link[href=\"#support\"] {\n  background: var(--color-surface-alt);\n  color: var(--color-bar-text);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-nav__actions {\n  display: flex;\n  flex: none;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-nav__price {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  color: var(--color-bar-alt-text);\n  white-space: nowrap;\n}\n\n/* grid: the bento. Six tracks on a fixed row; the product stands in the middle and the facts flank it */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(6, minmax(0, 1fr));\n  grid-auto-rows: minmax(var(--size-row), auto);\n  gap: var(--space-gap);\n}\n.ds-grid--auto {\n  grid-auto-rows: auto;\n}\n.ds-grid__cell {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  padding: var(--space-cell);\n  overflow: hidden;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__cell--wide {\n  grid-column: span 2;\n}\n.ds-grid__cell--half {\n  grid-column: span 3;\n}\n.ds-grid__cell--wider {\n  grid-column: span 4;\n}\n.ds-grid__cell--full {\n  grid-column: 1 / -1;\n}\n.ds-grid__cell--tall {\n  grid-row: span 2;\n}\n/* the centre tile: tracks three and four, three rows tall, placed first so the small tiles flow round it */\n.ds-grid__cell--centre {\n  grid-column: 3 / span 2;\n  grid-row: 1 / span 3;\n}\n.ds-grid__cell--between {\n  justify-content: space-between;\n}\n.ds-grid__cell--center {\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n}\n.ds-grid__cell--stack {\n  gap: var(--space-5);\n}\n.ds-grid__cell--fill-1 {\n  background: radial-gradient(120% 90% at 50% 0, var(--color-fill-1), var(--color-surface) 85%);\n}\n.ds-grid__cell--fill-2 {\n  background: radial-gradient(120% 90% at 50% 0, var(--color-fill-2), var(--color-surface) 85%);\n}\n.ds-grid__cell--fill-3 {\n  background: radial-gradient(120% 90% at 50% 0, var(--color-fill-3), var(--color-surface) 85%);\n}\n.ds-grid__cell--fill-4 {\n  background: var(--color-fill-4);\n}\n.ds-grid__cell--accent {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: transparent;\n}\n.ds-grid__cell--bare {\n  background: transparent;\n  box-shadow: none;\n  border-color: var(--color-border-strong);\n}\n.ds-grid__icon {\n  display: flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-bottom: var(--space-4);\n  background: var(--color-page);\n  color: var(--color-link);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-grid__glyph {\n  width: var(--size-glyph);\n  height: var(--size-glyph);\n}\n.ds-grid__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: 1.3;\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading);\n}\n.ds-grid__title--large {\n  font-size: var(--text-large);\n}\n.ds-grid__cell--accent .ds-grid__title {\n  font-size: var(--text-h2);\n  line-height: var(--line-heading);\n  color: var(--color-accent-text);\n}\n.ds-grid__text {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n  color: var(--color-text-muted);\n}\n.ds-grid__cell--accent .ds-grid__text {\n  color: var(--color-accent-text);\n  opacity: 0.8;\n}\n.ds-grid__visual {\n  width: 100%;\n  margin-top: auto;\n  padding-top: var(--space-5);\n}\n.ds-grid__cell--split {\n  flex-direction: row;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-6);\n}\n.ds-grid__copy {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  min-width: 0;\n}\n.ds-grid__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin-top: auto;\n  padding-top: var(--space-5);\n}\n.ds-grid__cell--split .ds-grid__actions {\n  flex: none;\n  margin-top: 0;\n  padding-top: 0;\n}\n\n/* hero: the centre tile. The product drawn in CSS, its name, one line and the order button, all centred */\n.ds-hero {\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  text-align: center;\n  background: radial-gradient(90% 60% at 50% 0, var(--color-fill-1), transparent 80%), var(--fill-panel);\n}\n.ds-hero__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  color: var(--color-heading);\n}\n.ds-hero__lead {\n  max-width: 30ch;\n  margin: var(--space-3) auto 0;\n  color: var(--color-text-muted);\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-2);\n}\n.ds-hero__note {\n  margin: var(--space-3) 0 0;\n  font-size: calc(var(--text-small) * 0.857);\n  color: var(--color-text-muted);\n}\n\n/* device: the clock itself. A bezel, a paper face in the inverse colours, a foot */\n.ds-device {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  width: 100%;\n  max-width: var(--size-device);\n  margin: auto 0;\n}\n.ds-device__body {\n  width: 100%;\n  padding: var(--space-2);\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-device__face {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  aspect-ratio: 4 / 3;\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-panel);\n}\n.ds-device__time {\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: 1;\n  letter-spacing: var(--display-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-device__date {\n  margin-top: var(--space-2);\n  font-family: var(--font-mono);\n  font-size: calc(var(--text-small) * 0.857);\n  line-height: 1.34;\n  opacity: 0.7;\n}\n.ds-device__foot {\n  width: 36%;\n  height: var(--space-2);\n  background: var(--color-surface-strong);\n  border-radius: 0 0 var(--radius-control) var(--radius-control);\n}\n\n/* figure: one large numeral with its unit and a line of what it measures */\n.ds-figure {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  margin: auto 0 0;\n}\n.ds-figure__value {\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: 1;\n  letter-spacing: var(--display-tracking);\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n  color: var(--color-heading);\n}\n.ds-figure__unit {\n  margin-left: var(--space-1);\n  font-size: var(--text-h2);\n  letter-spacing: 0;\n  color: var(--color-link);\n}\n.ds-figure__label {\n  font-size: var(--text-small);\n  line-height: 1.45;\n  color: var(--color-text-muted);\n}\n.ds-figure--small .ds-figure__value {\n  font-size: var(--text-h1);\n}\n.ds-figure--small .ds-figure__unit {\n  font-size: var(--text-h3);\n}\n.ds-grid__cell--center .ds-figure {\n  align-items: center;\n  margin: 0;\n}\n\n/* finishes: the colours the case comes in, as a row of round samples */\n.ds-finishes {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-finishes__dot {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  background: var(--fill-inverse);\n  border: var(--border-width-strong) solid var(--color-border-strong);\n  border-radius: 50%;\n}\n.ds-finishes__dot--2 {\n  background: var(--color-surface-strong);\n}\n.ds-finishes__dot--3 {\n  background: var(--color-fill-1);\n}\n.ds-finishes__dot--4 {\n  background: var(--fill-accent);\n}\n.ds-finishes__dot.is-current {\n  outline: var(--focus-ring);\n  outline-offset: calc(var(--space-1) / 2);\n}\n\n/* inner page: the trail, the page header on the bare page, then tiles */\n.ds-page-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4) var(--space-6);\n  margin: 0 0 var(--space-7);\n}\n.ds-page-header__copy {\n  flex: 1;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-page-header__text {\n  max-width: var(--size-measure);\n  margin: var(--space-3) 0 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex: none;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-toolbar {\n  margin-bottom: var(--space-gap);\n}\n\n/* small things that live inside tiles */\n.ds-chart {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-2);\n  height: var(--size-chart);\n}\n.ds-chart__bar {\n  flex: 1;\n  height: 30%;\n  background: var(--color-surface-strong);\n  border-radius: calc(var(--radius-control) / 2);\n}\n.ds-chart__bar--2 {\n  height: 45%;\n}\n.ds-chart__bar--5 {\n  height: 100%;\n}\n.ds-chart__bar.is-current {\n  background: var(--fill-accent);\n}\n.ds-stat {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  min-width: 0;\n  margin: 0;\n}\n.ds-stat__label {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-stat__value {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: 1;\n  letter-spacing: var(--display-tracking);\n  font-variant-numeric: tabular-nums;\n  color: var(--color-heading);\n}\n.ds-stat__unit {\n  font-size: var(--text-h3);\n  color: var(--color-text-muted);\n}\n.ds-stat__note {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  font-size: calc(var(--text-small) * 0.857);\n  line-height: 1.34;\n  color: var(--color-text-muted);\n}\n/* stats: one strip across the grid, four figures parted by hairlines */\n.ds-stats {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  align-items: center;\n  gap: 0;\n  margin: 0;\n  list-style: none;\n}\n.ds-stats .ds-stat {\n  align-items: center;\n  padding: 0 var(--space-4);\n  text-align: center;\n  border-left: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-stats .ds-stat:first-child {\n  border-left: 0;\n}\n.ds-stats .ds-stat__note {\n  justify-content: center;\n}\n.ds-facts {\n  display: grid;\n  margin: 0;\n  font-size: var(--text-small);\n}\n.ds-facts__row {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-facts__row:first-child {\n  padding-top: 0;\n  border-top: 0;\n}\n.ds-facts__term {\n  color: var(--color-text-muted);\n}\n.ds-facts__value {\n  margin: 0;\n  font-weight: var(--weight-bold);\n  text-align: right;\n  color: var(--color-heading);\n}\n.ds-code {\n  margin: 0;\n  padding: var(--space-4);\n  overflow: hidden;\n  background: var(--color-page);\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  font-family: var(--font-mono);\n  font-size: calc(var(--text-small) * 0.886);\n  line-height: 1.6;\n  white-space: pre;\n}\n.ds-code__key {\n  color: var(--color-accent-alt);\n}\n.ds-code__str {\n  color: var(--color-link);\n}\n.ds-checks {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n  color: var(--color-text);\n}\n.ds-checks__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-checks__mark {\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  color: var(--color-accent-alt);\n}\n.ds-chips {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n.ds-grid__cell--center .ds-chips {\n  justify-content: center;\n}\n.ds-rows {\n  display: grid;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n}\n.ds-rows__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-switch {\n  position: relative;\n  flex: none;\n  width: var(--size-switch);\n  height: calc(var(--size-knob) + var(--space-1));\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n}\n.ds-switch::after {\n  content: \"\";\n  position: absolute;\n  top: calc(var(--space-1) / 2);\n  left: calc(var(--space-1) / 2);\n  width: var(--size-knob);\n  height: var(--size-knob);\n  background: var(--color-text-muted);\n  border-radius: var(--radius-pill);\n}\n.ds-switch.is-on {\n  background: var(--color-accent-alt);\n}\n.ds-switch.is-on::after {\n  left: auto;\n  right: calc(var(--space-1) / 2);\n  background: var(--color-inverse);\n}\n\n/* typography */\n.ds-prose {\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: 0;\n  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  color: var(--color-heading);\n}\n.ds-prose h1 {\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\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  font-size: var(--text-h3);\n  color: var(--color-heading-alt);\n}\n.ds-prose p,\n.ds-prose ul {\n  margin: var(--space-3) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-prose ul {\n  padding-left: var(--space-5);\n}\n.ds-prose li + li {\n  margin-top: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n  color: var(--color-text);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border-radius: calc(var(--radius-control) / 2);\n  font-family: var(--font-mono);\n  font-size: 87.5%;\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\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  border-radius: calc(var(--radius-control) / 2);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  font-size: var(--text-small);\n}\n\n/* buttons: small, 8px corners, a hairline one step lighter than the fill */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  padding: 0 var(--space-4);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button-text) 25%, var(--color-button));\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: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  background: color-mix(in srgb, var(--color-button) 85%, var(--color-shadow));\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: calc(var(--space-1) / 2);\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}\n.ds-button--secondary:active,\n.ds-button--secondary.is-active {\n  background: var(--color-surface);\n}\n.ds-button--danger {\n  background: var(--color-danger-surface);\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) 20%, var(--color-danger-surface));\n  color: var(--color-danger);\n}\n.ds-button--danger:active,\n.ds-button--danger.is-active {\n  background: var(--color-danger-surface);\n}\n.ds-button--inverse {\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-color: transparent;\n}\n.ds-button--inverse:hover,\n.ds-button--inverse.is-hover {\n  background: color-mix(in srgb, var(--color-inverse) 86%, var(--color-inverse-text));\n  color: var(--color-inverse-text);\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-5);\n  font-size: var(--text-base);\n}\n.ds-button--small {\n  min-height: var(--space-6);\n  padding: 0 var(--space-3);\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);\n  box-shadow: none;\n  cursor: not-allowed;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-ui);\n  line-height: 1.34;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.ds-badge--accent {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: transparent;\n}\n.ds-badge--new {\n  background: color-mix(in srgb, var(--color-accent-alt) 14%, transparent);\n  color: var(--color-accent-alt);\n  border-color: color-mix(in srgb, var(--color-accent-alt) 30%, transparent);\n}\n.ds-badge--success {\n  background: color-mix(in srgb, var(--color-success) 14%, transparent);\n  color: var(--color-success);\n  border-color: color-mix(in srgb, var(--color-success) 30%, transparent);\n}\n.ds-badge--warning {\n  background: color-mix(in srgb, var(--color-warning) 14%, transparent);\n  color: var(--color-warning);\n  border-color: color-mix(in srgb, var(--color-warning) 30%, transparent);\n}\n.ds-badge--danger {\n  background: color-mix(in srgb, var(--color-danger) 14%, transparent);\n  color: var(--color-danger);\n  border-color: color-mix(in srgb, var(--color-danger) 30%, transparent);\n}\n.ds-badge--count {\n  padding: var(--space-1) var(--space-2);\n  border-radius: var(--radius-control);\n  font-weight: var(--weight-bold);\n}\n.ds-badge__dot {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  background: var(--color-accent-alt);\n  border-radius: var(--radius-pill);\n}\n.ds-badge--success .ds-badge__dot,\n.ds-badge--warning .ds-badge__dot,\n.ds-badge--danger .ds-badge__dot {\n  background: currentColor;\n}\n\n/* form */\n.ds-form {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: grid;\n  align-content: start;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-form__field--full {\n  grid-column: 1 / -1;\n}\n.ds-form__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.2;\n  color: var(--color-text);\n}\n.ds-form__control {\n  width: 100%;\n  min-height: var(--size-control);\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: 1.4;\n  transition: var(--transition);\n}\n.ds-form__control::placeholder {\n  color: var(--color-disabled-text);\n}\n.ds-form__control--area {\n  min-height: var(--space-9);\n  resize: vertical;\n}\n.ds-form__control:focus-visible,\n.ds-form__control.is-focus {\n  outline: var(--focus-ring);\n  border-color: var(--color-focus);\n}\n.ds-form__control.is-invalid {\n  border-color: var(--color-danger);\n}\n.ds-form__control:disabled,\n.ds-form__control.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__hint {\n  font-size: calc(var(--text-small) * 0.857);\n  color: var(--color-text-muted);\n}\n.ds-form__error {\n  font-size: calc(var(--text-small) * 0.857);\n  color: var(--color-danger);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-form__checkbox {\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  accent-color: var(--color-accent);\n}\n.ds-form__actions {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  grid-column: 1 / -1;\n}\n\n/* table: its own box inside a tile, hairline rows */\n.ds-table {\n  width: 100%;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  border-collapse: separate;\n  border-spacing: 0 var(--border-width);\n  overflow: hidden;\n  background: var(--color-border-muted);\n  font-size: var(--text-small);\n  text-align: left;\n}\n.ds-table th {\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-weight: var(--weight-ui);\n  white-space: nowrap;\n}\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-page);\n  color: var(--color-text);\n}\n.ds-table tr.is-current td {\n  background: var(--color-surface);\n}\n.ds-table__scroll {\n  max-width: 100%;\n  overflow-x: auto;\n}\n.ds-table .ds-table__link {\n  font-weight: var(--weight-bold);\n  color: var(--color-heading);\n  text-decoration: var(--link-decoration-quiet);\n  white-space: nowrap;\n}\n.ds-table .ds-table__link:hover,\n.ds-table .ds-table__link.is-hover {\n  color: var(--color-link);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table .ds-table__muted {\n  color: var(--color-text-muted);\n}\n\n/* list */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: grid;\n  gap: var(--space-1);\n  padding: var(--space-4) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:first-child {\n  padding-top: 0;\n  border-top: 0;\n}\n.ds-list__item:last-child {\n  padding-bottom: 0;\n}\n.ds-list__title {\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  color: var(--color-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link);\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-list__meta {\n  font-size: calc(var(--text-small) * 0.857);\n  color: var(--color-text-muted);\n}\n\n/* panel: the small card. 12px corners, sits inside a cell or in a row of its own */\n.ds-panel {\n  min-width: 0;\n  padding: var(--space-5);\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-panel__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: 1.4;\n  color: var(--color-heading-alt);\n}\n.ds-panel__body {\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-panel__meta {\n  display: block;\n  margin-top: var(--space-4);\n  font-size: calc(var(--text-small) * 0.857);\n  color: var(--color-text-muted);\n}\n.ds-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: var(--space-3);\n}\n\n/* tabs: a segmented pill */\n.ds-tabs {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--fill-bar-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-2) var(--space-4);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.2;\n  color: var(--color-bar-alt-text);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-heading);\n}\n.ds-tabs__tab.is-current {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n\n/* sidebar */\n.ds-sidebar {\n  font-size: var(--text-small);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-heading);\n  color: var(--color-heading-alt);\n}\n.ds-sidebar__list {\n  display: grid;\n  gap: var(--space-1);\n  margin: 0 calc(var(--space-3) * -1);\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--space-2) var(--space-3);\n  border-radius: var(--radius-control);\n  font-size: var(--text-small);\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  color: var(--color-link-hover);\n}\n.ds-sidebar__link.is-current {\n  background: var(--color-surface-alt);\n  color: var(--color-heading);\n}\n\n/* notice */\n.ds-notice {\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) 20%, transparent);\n  border-radius: var(--radius-panel);\n  font-size: var(--text-small);\n}\n.ds-notice__title {\n  display: block;\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  margin: 0;\n  opacity: 0.8;\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-text);\n  border-color: color-mix(in srgb, var(--color-danger) 45%, transparent);\n}\n.ds-notice--error .ds-notice__title {\n  color: var(--color-danger);\n}\n.ds-notices {\n  display: grid;\n  gap: var(--space-3);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--space-6);\n  min-height: var(--space-6);\n  padding: 0 var(--space-3);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  color: var(--color-link-quiet);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  color: var(--color-link-hover);\n  background: var(--color-surface-alt);\n}\n.ds-pagination__link.is-current {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  pointer-events: none;\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  color: var(--color-disabled-text);\n}\n.ds-breadcrumb__item.is-current {\n  color: var(--color-text);\n}\n\n/* dialog: a lifted 12px box on a dimmed stage */\n.ds-dialog {\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-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-4) var(--space-5);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  color: var(--color-heading);\n}\n.ds-dialog__close {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--space-6);\n  height: var(--space-6);\n  padding: 0;\n  background: transparent;\n  color: var(--color-text-muted);\n  border: 0;\n  border-radius: var(--radius-control);\n  cursor: pointer;\n}\n.ds-dialog__glyph {\n  width: var(--size-check);\n  height: var(--size-check);\n}\n.ds-dialog__close:hover,\n.ds-dialog__close.is-hover {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n.ds-dialog__body {\n  padding: var(--space-5);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-2);\n  padding: var(--space-4) var(--space-5);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stage {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--space-8) var(--space-5);\n  background: var(--color-overlay);\n}\n\n/* empty state: an empty tile with only an outline */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex: 1;\n  text-align: center;\n}\n.ds-empty__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  color: var(--color-heading);\n}\n.ds-empty__text {\n  max-width: 36ch;\n  margin: var(--space-1) 0 var(--space-5);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* footer: the small print first, then the link columns */\n.ds-footer {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n.ds-footer__notes {\n  max-width: calc(var(--size-page) + var(--space-5) * 2);\n  margin: 0 auto;\n  padding: var(--space-6) var(--space-5) 0;\n  font-size: calc(var(--text-small) * 0.857);\n  line-height: 1.5;\n}\n.ds-footer__note {\n  max-width: 96ch;\n  margin: 0 0 var(--space-2);\n}\n.ds-footer__inner {\n  display: grid;\n  grid-template-columns: 2fr 1fr 1fr 1fr;\n  gap: var(--space-6);\n  max-width: calc(var(--size-page) + var(--space-5) * 2);\n  margin: 0 auto;\n  padding: var(--space-6) var(--space-5) var(--space-7);\n}\n.ds-footer__brand {\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading);\n}\n.ds-footer__text {\n  max-width: 34ch;\n  margin: var(--space-2) 0 0;\n}\n.ds-footer__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  color: var(--color-heading-alt);\n}\n.ds-footer__list {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-link-quiet);\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-link-hover);\n}\n\n/* menu: a list that drops from a navigation item, on hover, focus or when opened */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__caret {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  margin-left: var(--space-1);\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 20;\n  display: none;\n  min-width: 24ch;\n  margin: 0;\n  padding: var(--space-2);\n  list-style: none;\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-panel);\n  box-shadow: var(--shadow-dialog);\n  text-align: left;\n}\n.ds-menu:hover > .ds-menu__list,\n.ds-menu:focus-within > .ds-menu__list,\n.ds-menu[open] > .ds-menu__list,\n.ds-menu.is-open > .ds-menu__list {\n  display: block;\n}\n.ds-menu__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) var(--space-3);\n  border-radius: var(--radius-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  color: var(--color-text);\n  text-decoration: none;\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-menu__item:hover,\n.ds-menu__item.is-hover,\n.ds-menu__item:focus-visible {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n}\n.ds-menu__hint {\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-body);\n  color: var(--color-text-muted);\n}\n.ds-menu__rule {\n  height: 0;\n  margin: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* accordion: sections that open and close */\n.ds-accordion {\n  display: grid;\n}\n.ds-accordion__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-accordion__item:first-child {\n  border-top: 0;\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) 0;\n  list-style: none;\n  font-family: var(--font-heading);\n  font-size: var(--text-base);\n  font-weight: var(--weight-heading);\n  line-height: 1.35;\n  color: var(--color-heading);\n  cursor: pointer;\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  flex: none;\n  align-self: center;\n  display: inline-block;\n  width: calc(var(--space-2) * 1.25);\n  height: calc(var(--space-2) * 1.25);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) 0, calc(50% + var(--space-2) / 8) calc(50% - var(--space-2) / 8), 100% calc(50% - var(--space-2) / 8), 100% calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) calc(50% + var(--space-2) / 8), calc(50% + var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) 100%, calc(50% - var(--space-2) / 8) calc(50% + var(--space-2) / 8), 0 calc(50% + var(--space-2) / 8), 0 calc(50% - var(--space-2) / 8), calc(50% - var(--space-2) / 8) calc(50% - var(--space-2) / 8));\n  color: var(--color-link);\n  transition: var(--transition);\n}\n.ds-accordion__item[open] > .ds-accordion__head::after,\n.ds-accordion__item.is-open > .ds-accordion__head::after {\n  transform: rotate(45deg);\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-link);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-accordion__body {\n  max-width: var(--size-measure);\n  margin: 0;\n  padding: 0 0 var(--space-4);\n  font-size: var(--text-small);\n  color: var(--color-text-muted);\n}\n\n/* tooltip: a hint over its trigger, on hover or focus */\n.ds-grid__cell:has(.ds-tooltip) {\n  position: relative;\n  overflow: visible;\n}\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-1);\n  cursor: help;\n}\n.ds-tooltip__mark {\n  display: inline-block;\n  width: var(--size-check);\n  height: var(--size-check);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  color: var(--color-text-muted);\n  align-content: center;\n  text-align: center;\n  text-box: trim-both cap alphabetic;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 50%;\n  z-index: 15;\n  width: max-content;\n  max-width: 28ch;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-dialog);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-body);\n  line-height: 1.4;\n  text-align: left;\n  text-transform: none;\n  letter-spacing: 0;\n  white-space: normal;\n  transform: translateX(-50%);\n  visibility: hidden;\n  opacity: 0;\n  transition: var(--transition);\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus-within .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  visibility: visible;\n  opacity: 1;\n}\n\n/* progress: how far something is, as a bar */\n.ds-progress {\n  display: grid;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-progress__label {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  font-size: var(--text-small);\n  color: var(--color-text);\n}\n.ds-progress__value {\n  font-size: calc(var(--text-small) * 0.857);\n  font-variant-numeric: tabular-nums;\n  color: var(--color-text-muted);\n}\n.ds-progress__bar {\n  display: block;\n  height: var(--space-2);\n  overflow: hidden;\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n}\n.ds-progress__fill {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-radius: var(--radius-pill);\n}\n.ds-progress__fill--3 {\n  width: 62%;\n}\n\n/* room above a component that follows text inside a tile */\n.ds-figure + .ds-progress,\n.ds-grid__text + .ds-switch {\n  margin-top: var(--space-3);\n}\n\n@media (max-width: 1100px) {\n  .ds-figure__value,\n  .ds-device__time {\n    font-size: var(--text-h1);\n  }\n  .ds-figure__unit {\n    font-size: var(--text-h3);\n  }\n}\n@media (max-width: 960px) {\n  .ds-grid {\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n  }\n  .ds-grid__cell--centre,\n  .ds-grid__cell--half,\n  .ds-grid__cell--wider {\n    grid-column: 1 / -1;\n    grid-row: auto;\n  }\n  .ds-nav__inner {\n    flex-wrap: wrap;\n    gap: 0 var(--space-4);\n  }\n  .ds-nav__links {\n    order: 3;\n    width: 100%;\n    padding-bottom: var(--space-2);\n    overflow-x: auto;\n  }\n  .ds-footer__inner {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n@media (max-width: 600px) {\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    grid-auto-rows: auto;\n    gap: var(--space-3);\n  }\n  .ds-grid__cell--wide,\n  .ds-grid__cell--half,\n  .ds-grid__cell--wider {\n    grid-column: 1 / -1;\n  }\n  .ds-grid__cell--tall {\n    grid-row: auto;\n  }\n  .ds-grid__cell {\n    padding: var(--space-5);\n  }\n  .ds-page__inner,\n  .ds-nav__inner {\n    padding-left: var(--space-4);\n    padding-right: var(--space-4);\n  }\n  .ds-view {\n    padding: var(--space-5) 0 var(--space-8);\n  }\n  .ds-nav__price,\n  .ds-table .ds-table__extra {\n    display: none;\n  }\n  .ds-page-header {\n    margin-bottom: var(--space-5);\n  }\n  .ds-page-header__title {\n    font-size: var(--text-h2);\n    letter-spacing: var(--heading-tracking);\n  }\n  .ds-page-header__text {\n    font-size: var(--text-base);\n  }\n  .ds-page-header__copy {\n    flex-basis: 100%;\n  }\n  .ds-grid__cell--split {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  .ds-form,\n  .ds-panels {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-stats {\n    grid-template-columns: 1fr 1fr;\n    gap: var(--space-5) 0;\n  }\n  .ds-stats .ds-stat:nth-child(odd) {\n    border-left: 0;\n  }\n  .ds-stat__value {\n    font-size: var(--text-h2);\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-2) var(--space-3);\n  }\n  .ds-tabs {\n    max-width: 100%;\n    overflow-x: auto;\n  }\n  .ds-tabs__tab {\n    padding: var(--space-2) var(--space-3);\n    white-space: nowrap;\n  }\n  .ds-pagination,\n  .ds-form__actions,\n  .ds-dialog__actions {\n    flex-wrap: wrap;\n  }\n  .ds-stage {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-footer__notes,\n  .ds-footer__inner {\n    padding-left: var(--space-4);\n    padding-right: var(--space-4);\n  }\n}\n@media (max-width: 960px) {\n  .ds-tooltip {\n    position: static;\n  }\n  .ds-tooltip__tip {\n    bottom: auto;\n    left: var(--space-4);\n    right: var(--space-4);\n    width: auto;\n    max-width: none;\n    margin-top: var(--space-6);\n    transform: none;\n  }\n}\n\n/* narrow navigation: the links sit as one centred row under the brand and never scroll, so the drop-down\n   can open; on a phone it takes the row's full width */\n@media (max-width: 960px) {\n  .ds-nav__links {\n    flex: 1 0 100%;\n    width: 100%;\n    justify-content: center;\n    overflow-x: visible;\n  }\n}\n@media (max-width: 600px) {\n  .ds-nav__links {\n    position: relative;\n  }\n  .ds-nav__links .ds-menu {\n    position: static;\n  }\n  .ds-nav__links .ds-menu__list {\n    left: 0;\n    right: 0;\n    min-width: 0;\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, product bento specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__inner\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"8\" rx=\"2.5\"/><rect x=\"15.5\" y=\"2.5\" width=\"6\" height=\"8\" rx=\"2.5\" opacity=\".5\"/><rect x=\"2.5\" y=\"12.5\" width=\"6\" height=\"9\" rx=\"2.5\" opacity=\".5\"/><rect x=\"10.5\" y=\"12.5\" width=\"11\" height=\"9\" rx=\"2.5\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Overview</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#compare\">Compare</a></li>\n      <li class=\"ds-menu\"><a class=\"ds-nav__link\" href=\"#support\">Support<svg class=\"ds-menu__caret\" viewBox=\"0 0 8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m1.5 3 2.5 2.5L6.5 3\"/></svg></a>\n        <ul class=\"ds-menu__list\">\n          <li><a class=\"ds-menu__item\" href=\"#support\">Setting up</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#support\">Charging</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#support\">Software updates <span class=\"ds-menu__hint\">2.3</span></a></li>\n          <li class=\"ds-menu__rule\"></li>\n          <li><a class=\"ds-menu__item\" href=\"#order\">Track an order</a></li>\n        </ul>\n      </li>\n      <li><a class=\"ds-nav__link\" href=\"#order\">Order</a></li>\n    </ul>\n    <div class=\"ds-nav__actions\">\n      <span class=\"ds-nav__price\">From 149</span>\n      <a class=\"ds-button ds-button--small\" href=\"#order\">Buy</a>\n    </div>\n  </div>\n</header>\n\n<main>\n  <section class=\"ds-view ds-view--home\" id=\"home\">\n    <div class=\"ds-page__inner\">\n      <div class=\"ds-grid\" data-component=\"grid\">\n        <section class=\"ds-grid__cell ds-grid__cell--centre ds-hero\" data-component=\"hero\">\n          <a class=\"ds-badge ds-badge--new\" href=\"#compare\"><span class=\"ds-badge__dot\"></span>New this spring</a>\n          <div class=\"ds-device\">\n            <div class=\"ds-device__body\">\n              <div class=\"ds-device__face\">\n                <span class=\"ds-device__time\">10:08</span>\n                <span class=\"ds-device__date\">Thursday 14 May</span>\n              </div>\n            </div>\n            <span class=\"ds-device__foot\"></span>\n          </div>\n          <div>\n            <h1 class=\"ds-hero__title\">chronoskin</h1>\n            <p class=\"ds-hero__lead\">A desk clock with a paper face. It tells the time and nothing else.</p>\n          </div>\n          <div>\n            <div class=\"ds-hero__actions\">\n              <a class=\"ds-button ds-button--large\" href=\"#order\">Order</a>\n              <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#compare\">Compare sizes</a>\n            </div>\n            <p class=\"ds-hero__note\">Ships from 2 June. Returns within 30 days.</p>\n          </div>\n        </section>\n\n        <article class=\"ds-grid__cell ds-grid__cell--wide\">\n          <h3 class=\"ds-grid__title\">Battery</h3>\n          <p class=\"ds-figure\"><span class=\"ds-figure__value\">21<span class=\"ds-figure__unit\">days</span></span><span class=\"ds-figure__label\">On one charge, with the face refreshed every minute.</span></p>\n          <div class=\"ds-progress\">\n            <span class=\"ds-progress__label\">A clock on day five <span class=\"ds-progress__value\">76% left</span></span>\n            <span class=\"ds-progress__bar\"><span class=\"ds-progress__fill ds-progress__fill--3\"></span></span>\n          </div>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--center\">\n          <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"3.5\"/><path d=\"M11 2.500v2M11 17.500v2M2.500 11h2M17.500 11h2M5 5l1.400 1.400M15.600 15.600 17 17M5 17l1.400-1.400M15.600 6.400 17 5\"/></svg></span>\n          <h3 class=\"ds-grid__title\">Reads in sunlight</h3>\n          <p class=\"ds-grid__text\">No glare, no <span class=\"ds-tooltip\" tabindex=\"0\">backlight<span class=\"ds-tooltip__mark\">?</span><span class=\"ds-tooltip__tip\">The face reflects the light of the room, like paper.</span></span></p>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--center ds-grid__cell--fill-3\">\n          <p class=\"ds-figure ds-figure--small\"><span class=\"ds-figure__value\">300<span class=\"ds-figure__unit\">ppi</span></span><span class=\"ds-figure__label\">Sharp as print</span></p>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--center ds-grid__cell--fill-2\">\n          <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 3v5M14 3v5M5.500 8h11v3a5.500 5.500 0 0 1-11 0zM11 16.500v3\"/></svg></span>\n          <h3 class=\"ds-grid__title\">USB-C</h3>\n          <p class=\"ds-grid__text\">Any charger you own</p>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--center\">\n          <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 9v4h3l4 3.500v-11L7 9zM15 8.500l4 5M19 8.500l-4 5\"/></svg></span>\n          <h3 class=\"ds-grid__title\">Silent</h3>\n          <p class=\"ds-grid__text\">No tick, no fan, no chime</p>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--fill-1\">\n          <h3 class=\"ds-grid__title\">Two sizes</h3>\n          <p class=\"ds-figure\"><span class=\"ds-figure__value\">7.8<span class=\"ds-figure__unit\">in</span></span><span class=\"ds-figure__label\">The large face. The small one is 6.0 inches.</span></p>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--between\">\n          <div>\n            <h3 class=\"ds-grid__title\">Four finishes</h3>\n            <p class=\"ds-grid__text\">Anodised aluminium, bead blasted by hand.</p>\n          </div>\n          <div class=\"ds-finishes\">\n            <span class=\"ds-finishes__dot is-current\"></span>\n            <span class=\"ds-finishes__dot ds-finishes__dot--2\"></span>\n            <span class=\"ds-finishes__dot ds-finishes__dot--3\"></span>\n            <span class=\"ds-finishes__dot ds-finishes__dot--4\"></span>\n          </div>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--center\">\n          <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M17.500 13A7 7 0 0 1 9 4.500a7 7 0 1 0 8.500 8.500z\"/></svg></span>\n          <h3 class=\"ds-grid__title\">Night face</h3>\n          <p class=\"ds-grid__text\">Dims the ink after ten</p>\n          <span class=\"ds-switch is-on\"></span>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--center ds-grid__cell--fill-4\">\n          <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M11 3s5.500 5.800 5.500 10a5.500 5.500 0 0 1-11 0C5.500 8.800 11 3 11 3z\"/></svg></span>\n          <h3 class=\"ds-grid__title\">Splash proof</h3>\n          <p class=\"ds-grid__text\">Rated IP54</p>\n        </article>\n\n        <ul class=\"ds-grid__cell ds-grid__cell--full ds-stats\" data-component=\"stats\">\n          <li class=\"ds-stat\">\n            <span class=\"ds-stat__value\">412<span class=\"ds-stat__unit\"> g</span></span>\n            <span class=\"ds-stat__label\">Weight, large</span>\n          </li>\n          <li class=\"ds-stat\">\n            <span class=\"ds-stat__value\">9.4<span class=\"ds-stat__unit\"> mm</span></span>\n            <span class=\"ds-stat__label\">Thickness</span>\n          </li>\n          <li class=\"ds-stat\">\n            <span class=\"ds-stat__value\">0.3<span class=\"ds-stat__unit\"> W</span></span>\n            <span class=\"ds-stat__label\">Power while charging</span>\n          </li>\n          <li class=\"ds-stat\">\n            <span class=\"ds-stat__value\">5<span class=\"ds-stat__unit\"> yrs</span></span>\n            <span class=\"ds-stat__label\">Of updates, promised</span>\n          </li>\n        </ul>\n\n        <article class=\"ds-grid__cell ds-grid__cell--half ds-grid__cell--stack\">\n          <div>\n            <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3.500 7 11 3l7.500 4v8L11 19l-7.500-4zM3.500 7 11 11l7.500-4M11 11v8\"/></svg></span>\n            <h3 class=\"ds-grid__title ds-grid__title--large\">In the box</h3>\n            <p class=\"ds-grid__text\">Everything it needs, and no plastic.</p>\n          </div>\n          <ul class=\"ds-checks\">\n            <li class=\"ds-checks__item\"><svg class=\"ds-checks__mark\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m3 8 3.500 3.500L13 5\"/></svg>The clock, charged to 60 percent</li>\n            <li class=\"ds-checks__item\"><svg class=\"ds-checks__mark\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m3 8 3.500 3.500L13 5\"/></svg>A one metre braided USB-C cable</li>\n            <li class=\"ds-checks__item\"><svg class=\"ds-checks__mark\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m3 8 3.500 3.500L13 5\"/></svg>A felt foot for stone and glass desks</li>\n            <li class=\"ds-checks__item\"><svg class=\"ds-checks__mark\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m3 8 3.500 3.500L13 5\"/></svg>A printed card with the two buttons explained</li>\n          </ul>\n        </article>\n\n        <article class=\"ds-grid__cell ds-grid__cell--half ds-grid__cell--stack ds-grid__cell--fill-2\">\n          <div>\n            <h3 class=\"ds-grid__title ds-grid__title--large\">A week on the desk</h3>\n            <p class=\"ds-grid__text\">Minutes of charging per day. Most days it needs none.</p>\n          </div>\n          <div class=\"ds-chart\">\n            <span class=\"ds-chart__bar\"></span>\n            <span class=\"ds-chart__bar\"></span>\n            <span class=\"ds-chart__bar ds-chart__bar--2\"></span>\n            <span class=\"ds-chart__bar\"></span>\n            <span class=\"ds-chart__bar ds-chart__bar--5 is-current\"></span>\n            <span class=\"ds-chart__bar\"></span>\n            <span class=\"ds-chart__bar\"></span>\n          </div>\n          <div class=\"ds-chips\">\n            <span class=\"ds-badge\">Mon to Sun</span>\n            <span class=\"ds-badge ds-badge--accent\">Charged on Friday</span>\n          </div>\n        </article>\n\n        <div class=\"ds-grid__cell ds-grid__cell--full ds-grid__cell--accent ds-grid__cell--split\">\n          <div class=\"ds-grid__copy\">\n            <h3 class=\"ds-grid__title\">From 149 for the small, 189 for the large</h3>\n            <p class=\"ds-grid__text\">Free delivery in fourteen countries. Engraving on the back costs nothing.</p>\n          </div>\n          <div class=\"ds-grid__actions\">\n            <a class=\"ds-button ds-button--inverse ds-button--large\" href=\"#order\">Order yours</a>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"compare\">\n    <div class=\"ds-page__inner\">\n      <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\" aria-label=\"Breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">chronoskin</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#compare\">Compare</a></li>\n        <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Small and large</li>\n      </ol>\n\n      <header class=\"ds-page-header\" data-component=\"page-header\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Which chronoskin?</h1>\n          <p class=\"ds-page-header__text\">The same clock in two sizes. The numbers that differ are below.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button\" href=\"#order\">Order</a>\n        </div>\n      </header>\n\n      <div class=\"ds-toolbar\">\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#compare\" aria-current=\"true\">Everything</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#compare\">Display</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#compare\">Power</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#compare\">Size</a></li>\n        </ul>\n        <span class=\"ds-badge\">2 models</span>\n      </div>\n\n      <div class=\"ds-grid ds-grid--auto\">\n        <div class=\"ds-grid__cell ds-grid__cell--wider ds-grid__cell--stack\">\n          <div class=\"ds-table__scroll\">\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr><th>Measure</th><th class=\"ds-table__extra\">Unit</th><th class=\"ds-table__num\">Small</th><th class=\"ds-table__num\">Large</th></tr>\n            </thead>\n            <tbody>\n              <tr><td><a class=\"ds-table__link\" href=\"#support\">Screen diagonal</a></td><td class=\"ds-table__muted ds-table__extra\">inches</td><td class=\"ds-table__num\">6.0</td><td class=\"ds-table__num\">7.8</td></tr>\n              <tr><td><a class=\"ds-table__link\" href=\"#support\">Resolution</a></td><td class=\"ds-table__muted ds-table__extra\">pixels per inch</td><td class=\"ds-table__num\">300</td><td class=\"ds-table__num\">300</td></tr>\n              <tr class=\"is-current\"><td><a class=\"ds-table__link\" href=\"#support\">Battery</a></td><td class=\"ds-table__muted ds-table__extra\">days per charge</td><td class=\"ds-table__num\">28</td><td class=\"ds-table__num\">21</td></tr>\n              <tr><td><a class=\"ds-table__link\" href=\"#support\">Weight</a></td><td class=\"ds-table__muted ds-table__extra\">grams</td><td class=\"ds-table__num\">268</td><td class=\"ds-table__num\">412</td></tr>\n              <tr><td><a class=\"ds-table__link\" href=\"#support\">Thickness</a></td><td class=\"ds-table__muted ds-table__extra\">millimetres</td><td class=\"ds-table__num\">9.4</td><td class=\"ds-table__num\">9.4</td></tr>\n              <tr><td><a class=\"ds-table__link\" href=\"#order\">Price</a></td><td class=\"ds-table__muted ds-table__extra\">with delivery</td><td class=\"ds-table__num\">149</td><td class=\"ds-table__num\">189</td></tr>\n            </tbody>\n          </table>\n          </div>\n          <p class=\"ds-grid__text\">Battery life measured with one refresh a minute at 21 degrees.</p>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack\">\n          <h3 class=\"ds-grid__title ds-grid__title--large\">In a sentence</h3>\n          <section class=\"ds-panel\" data-component=\"panel\">\n            <h4 class=\"ds-panel__title\">Small</h4>\n            <p class=\"ds-panel__body\">For a bedside table or a shelf. Lasts a week longer.</p>\n            <span class=\"ds-panel__meta\">6.0 inches &middot; 149</span>\n          </section>\n          <section class=\"ds-panel\">\n            <h4 class=\"ds-panel__title\">Large</h4>\n            <p class=\"ds-panel__body\">For a desk or a kitchen. Readable from across the room.</p>\n            <span class=\"ds-panel__meta\">7.8 inches &middot; 189</span>\n          </section>\n        </div>\n\n        <article class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--fill-2\">\n          <h3 class=\"ds-grid__title\">Longest between charges</h3>\n          <p class=\"ds-figure\"><span class=\"ds-figure__value\">28<span class=\"ds-figure__unit\">days</span></span><span class=\"ds-figure__label\">The small one, on one charge.</span></p>\n        </article>\n        <article class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--fill-3\">\n          <h3 class=\"ds-grid__title\">Reading distance</h3>\n          <p class=\"ds-figure\"><span class=\"ds-figure__value\">4<span class=\"ds-figure__unit\">m</span></span><span class=\"ds-figure__label\">How far away the large face still reads.</span></p>\n        </article>\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--between ds-grid__cell--accent\">\n          <div>\n            <h3 class=\"ds-grid__title\">Decided?</h3>\n            <p class=\"ds-grid__text\">Both ship from 2 June.</p>\n          </div>\n          <div class=\"ds-grid__actions\">\n            <a class=\"ds-button ds-button--inverse\" href=\"#order\">Order</a>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"support\">\n    <div class=\"ds-page__inner\">\n      <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">chronoskin</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#support\">Support</a></li>\n        <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Setting up</li>\n      </ol>\n\n      <header class=\"ds-page-header\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Support</h1>\n          <p class=\"ds-page-header__text\">Two buttons, one cable. Most answers fit on this page.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#order\">Track an order</a>\n        </div>\n      </header>\n\n      <div class=\"ds-grid ds-grid--auto\">\n        <aside class=\"ds-grid__cell ds-grid__cell--wide ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Topics</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link is-current\" href=\"#support\">Setting up</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#support\">Charging</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#support\">Night face</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#compare\">Sizes and weights</a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#order\">Returns <span class=\"ds-badge ds-badge--count\">30</span></a></li>\n          </ul>\n        </aside>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wider ds-grid__cell--tall\">\n          <article class=\"ds-prose\" data-component=\"typography\">\n            <h1>Setting up</h1>\n            <p>The clock arrives charged to 60 percent and <strong>already running</strong>. It sets itself from the time signal the first time it sees a window.</p>\n            <h2>The two buttons</h2>\n            <p>The left button changes the face. The right button, held for three seconds, opens the menu; the display shows <code>SET</code> while it is open.</p>\n            <h3>What the menu holds</h3>\n            <ul>\n              <li>Time zone and the 12 or 24 hour face</li>\n              <li>When the night face begins and ends</li>\n              <li>How often the paper refreshes</li>\n            </ul>\n            <h2>Charging</h2>\n            <p>Any USB-C charger works. A full charge takes about two hours; see <a href=\"#compare\">how long each size lasts</a> or <a href=\"#order\">order a spare cable</a>.</p>\n            <h2>Questions</h2>\n            <div class=\"ds-accordion\">\n              <details class=\"ds-accordion__item\" open>\n                <summary class=\"ds-accordion__head\">Does it need wireless?</summary>\n                <p class=\"ds-accordion__body\">No. It reads the time signal by radio and keeps time by itself between readings.</p>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__head\">Can the face be changed?</summary>\n                <p class=\"ds-accordion__body\">Yes, with the left button. Four faces come installed.</p>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__head\">What if the battery wears out?</summary>\n                <p class=\"ds-accordion__body\">The workshop replaces it. The back opens with two screws.</p>\n              </details>\n            </div>\n          </article>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack\">\n          <h3 class=\"ds-grid__title ds-grid__title--large\">Software updates</h3>\n          <ul class=\"ds-list\" data-component=\"list\">\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#support\">2.3 adds a seconds face</a>\n              <span class=\"ds-list__meta\">14 May &middot; 4 minutes to install</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#support\">2.2 refreshes less at night</a>\n              <span class=\"ds-list__meta\">2 April &middot; two more days of battery</span>\n            </li>\n            <li class=\"ds-list__item\">\n              <a class=\"ds-list__title\" href=\"#support\">2.1 fixes the leap day</a>\n              <span class=\"ds-list__meta\">20 February &middot; recommended</span>\n            </li>\n          </ul>\n          <ul class=\"ds-pagination\" data-component=\"pagination\" aria-label=\"Pages\">\n            <li><a class=\"ds-pagination__link is-disabled\" href=\"#support\">Newer</a></li>\n            <li><a class=\"ds-pagination__link is-current\" href=\"#support\" aria-current=\"page\">1</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#support\">2</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#support\">3</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#support\">Older</a></li>\n          </ul>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack ds-grid__cell--fill-3\">\n          <div>\n            <h3 class=\"ds-grid__title ds-grid__title--large\">Downloads</h3>\n            <p class=\"ds-grid__text\">A link as it looks new, visited, under the pointer and pressed.</p>\n          </div>\n          <p class=\"ds-links\" data-component=\"links\">\n            <a class=\"ds-link\" href=\"#support\">Printed guide</a>\n            <a class=\"ds-link is-visited\" href=\"#support\">Safety sheet</a>\n            <a class=\"ds-link is-hover\" href=\"#compare\">Dimensions</a>\n            <a class=\"ds-link is-active\" href=\"#order\">Spare parts</a>\n          </p>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack\">\n          <div>\n            <h3 class=\"ds-grid__title ds-grid__title--large\">From a computer</h3>\n            <p class=\"ds-grid__text\">Plugged in, the clock answers on a serial port.</p>\n          </div>\n<pre class=\"ds-code\"><span class=\"ds-code__key\">$</span> chronoskin status\n  battery  <span class=\"ds-code__str\">84%</span>\n  face     <span class=\"ds-code__str\">night</span></pre>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--bare\">\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <span class=\"ds-grid__icon\"><svg class=\"ds-grid__glyph\" viewBox=\"0 0 22 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3.500 7 11 3l7.500 4v8L11 19l-7.500-4zM3.500 7 11 11l7.500-4M11 11v8\"/></svg></span>\n            <h3 class=\"ds-empty__title\">No repairs on record</h3>\n            <p class=\"ds-empty__text\">If a clock of yours comes in for service, its progress shows here.</p>\n            <a class=\"ds-button ds-button--secondary\" href=\"#order\">Register a clock</a>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"order\">\n    <div class=\"ds-page__inner\">\n      <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">chronoskin</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#order\">Order</a></li>\n        <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Your clock</li>\n      </ol>\n\n      <header class=\"ds-page-header\">\n        <div class=\"ds-page-header__copy\">\n          <h1 class=\"ds-page-header__title\">Order</h1>\n          <p class=\"ds-page-header__text\">Pick a size and a finish. You pay when it ships.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#compare\">Compare sizes</a>\n        </div>\n      </header>\n\n      <div class=\"ds-grid ds-grid--auto\">\n        <div class=\"ds-grid__cell ds-grid__cell--wider ds-grid__cell--stack\">\n          <form class=\"ds-form\" data-component=\"form\">\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-size\">Size</label>\n              <select class=\"ds-form__control\" id=\"f-size\"><option>Large, 7.8 inches</option><option>Small, 6.0 inches</option></select>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-finish\">Finish</label>\n              <select class=\"ds-form__control\" id=\"f-finish\"><option>Chalk</option><option>Graphite</option><option>Clay</option><option>Signal</option></select>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-name\">Name</label>\n              <input class=\"ds-form__control\" id=\"f-name\" type=\"text\" value=\"Petra Lindahl\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-mail\">Email</label>\n              <input class=\"ds-form__control is-invalid\" id=\"f-mail\" type=\"text\" value=\"petra@lindahl\" aria-invalid=\"true\">\n              <span class=\"ds-form__error\">Enter a full address, such as name@home.example.</span>\n            </div>\n            <div class=\"ds-form__field ds-form__field--full\">\n              <label class=\"ds-form__label\" for=\"f-address\">Delivery address</label>\n              <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-address\" placeholder=\"Street, postcode, town and country\"></textarea>\n              <span class=\"ds-form__hint\">We deliver to fourteen countries; the list is under Support.</span>\n            </div>\n            <div class=\"ds-form__actions\">\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Engrave my initials on the back</label>\n            </div>\n          </form>\n          <div class=\"ds-buttons\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"button\">Place order</button>\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Save for later</button>\n            <button class=\"ds-button ds-button--danger\" type=\"button\">Empty the bag</button>\n            <button class=\"ds-button is-disabled\" type=\"button\" disabled>Add a second clock</button>\n          </div>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack ds-grid__cell--fill-1\">\n          <h3 class=\"ds-grid__title ds-grid__title--large\">Your bag</h3>\n          <dl class=\"ds-facts\">\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__term\">chronoskin, large</dt><dd class=\"ds-facts__value\">189</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__term\">Finish</dt><dd class=\"ds-facts__value\">Chalk</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__term\">Engraving</dt><dd class=\"ds-facts__value\">Free</dd></div>\n            <div class=\"ds-facts__row\"><dt class=\"ds-facts__term\">Delivery</dt><dd class=\"ds-facts__value\">Free</dd></div>\n          </dl>\n          <p class=\"ds-figure ds-figure--small\"><span class=\"ds-figure__value\">189<span class=\"ds-figure__unit\">total</span></span><span class=\"ds-figure__label\">Charged when the parcel leaves.</span></p>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack\" data-component=\"badge\">\n          <div>\n            <h3 class=\"ds-grid__title ds-grid__title--large\">In stock</h3>\n            <p class=\"ds-grid__text\">Counted this morning at the workshop.</p>\n          </div>\n          <ul class=\"ds-rows\">\n            <li class=\"ds-rows__item\">Chalk <span class=\"ds-badge ds-badge--success\"><span class=\"ds-badge__dot\"></span>Ready to ship</span></li>\n            <li class=\"ds-rows__item\">Graphite <span class=\"ds-badge ds-badge--success\">Ready to ship</span></li>\n            <li class=\"ds-rows__item\">Clay <span class=\"ds-badge ds-badge--warning\">Two weeks</span></li>\n            <li class=\"ds-rows__item\">Signal <span class=\"ds-badge ds-badge--danger\">Sold out</span></li>\n          </ul>\n          <div class=\"ds-chips\">\n            <span class=\"ds-badge\">Large</span>\n            <span class=\"ds-badge ds-badge--accent\">Limited run</span>\n            <span class=\"ds-badge ds-badge--count\">4</span>\n          </div>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-grid__cell--stack\">\n          <div>\n            <h3 class=\"ds-grid__title ds-grid__title--large\">About this order</h3>\n            <p class=\"ds-grid__text\">Messages from the checkout appear here.</p>\n          </div>\n          <div class=\"ds-notices\" data-component=\"notice\">\n            <div class=\"ds-notice\">\n              <strong class=\"ds-notice__title\">Engraving adds two days</strong>\n              <p class=\"ds-notice__text\">Your clock would leave on 4 June.</p>\n            </div>\n            <div class=\"ds-notice ds-notice--error\">\n              <strong class=\"ds-notice__title\">The order was not placed</strong>\n              <p class=\"ds-notice__text\">The email address is incomplete. Correct it and try again.</p>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"ds-grid__cell ds-grid__cell--wide ds-stage\">\n          <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"d-title\">\n            <div class=\"ds-dialog__bar\">\n              <h3 class=\"ds-dialog__title\" id=\"d-title\">Empty the bag?</h3>\n              <button class=\"ds-dialog__close\" type=\"button\" aria-label=\"Close\"><svg class=\"ds-dialog__glyph\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"m4 4 8 8m0-8-8 8\"/></svg></button>\n            </div>\n            <div class=\"ds-dialog__body\">\n              <p>The large clock in Chalk and its engraving will be removed.</p>\n            </div>\n            <div class=\"ds-dialog__actions\">\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Keep it</button>\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Empty</button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__notes\">\n    <p class=\"ds-footer__note\">1. Battery life depends on temperature and on how often the face refreshes. Figures are for one refresh a minute at 21 degrees.</p>\n    <p class=\"ds-footer__note\">2. chronoskin is a placeholder name for this specimen. Prices and dates are examples.</p>\n  </div>\n  <div class=\"ds-footer__inner\">\n    <div>\n      <span class=\"ds-footer__brand\">chronoskin</span>\n      <p class=\"ds-footer__text\">A desk clock with a paper face, made in small runs.</p>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">The clock</h2>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#home\">Overview</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#compare\">Compare sizes</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#order\">Order</a></li>\n      </ul>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Help</h2>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#support\">Setting up</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#support\">Updates</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#order\">Returns</a></li>\n      </ul>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Workshop</h2>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#home\">About</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#support\">Repairs</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#support\">Contact</a></li>\n      </ul>\n    </div>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.bento-grids.shop.s06.p01.t01.u01\",\n  \"library\": \"2026.10.09-1036\",\n  \"era\": {\n    \"slug\": \"bento-grids\",\n    \"years\": [\n      2022,\n      2026\n    ]\n  },\n  \"archetype\": \"shop\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": false,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-bg-6111\",\n  \"short\": \"v1-bg-6111\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #111113;\n  --color-canvas: #111113;\n  --color-surface: #1d1c20;\n  --color-surface-alt: #29292b;\n  --color-surface-strong: #323238;\n  --color-bar: #111113;\n  --color-bar-text: #ffffff;\n  --color-bar-alt: #1b1b1e;\n  --color-bar-alt-text: #a9a9a9;\n  --color-inverse: #ffffff;\n  --color-inverse-text: #111113;\n  --color-text: #e0e0e0;\n  --color-text-muted: #a9a9a9;\n  --color-heading: #ffffff;\n  --color-heading-alt: #eeeeee;\n  --color-link: #768cff;\n  --color-link-quiet: #a9a9a9;\n  --color-link-visited: #9292af;\n  --color-link-hover: #ffffff;\n  --color-link-active: #5871ff;\n  --color-border: rgb(255 255 255 / 0.08);\n  --color-border-strong: rgb(255 255 255 / 0.16);\n  --color-border-muted: #2b292e;\n  --color-accent: #5e69d1;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #3ecf8e;\n  --color-fill-1: #182030;\n  --color-fill-2: #283830;\n  --color-fill-3: #201820;\n  --color-fill-4: #2b292e;\n  --color-button: #5e69d1;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #29292b;\n  --color-button-secondary-text: #ffffff;\n  --color-input: #111113;\n  --color-input-text: #e0e0e0;\n  --color-input-border: #505051;\n  --color-disabled: #29292b;\n  --color-disabled-text: #838286;\n  --color-danger: #f24822;\n  --color-danger-surface: #201818;\n  --color-success: #3ecf8e;\n  --color-warning: #f7be2b;\n  --color-notice: #1a3045;\n  --color-notice-text: #bae6fd;\n  --color-focus: #768cff;\n  --color-shadow: #000000;\n  --color-overlay: rgb(17 17 19 / 0.8);\n}\n\n/* @part type */\n:root {\n  --font-body: Inter, \"Inter Variable\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  --font-heading: Inter, \"Inter Variable\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  --font-ui: Inter, \"Inter Variable\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  --font-mono: \"Source Code Pro\", ui-monospace, \"SF Mono\", Menlo, Consolas, monospace;\n  --text-base: 16px;\n  --text-small: 14px;\n  --text-ui: 14px;\n  --text-large: 18px;\n  --text-display: 60px;\n  --text-h1: 40px;\n  --text-h2: 30px;\n  --text-h3: 20px;\n  --line-body: 1.5;\n  --line-heading: 1.2;\n  --line-display: 1.13;\n  --weight-body: 400;\n  --weight-bold: 600;\n  --weight-heading: 600;\n  --weight-display: 700;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 8px;\n  --radius-panel: 12px;\n  --radius-pill: 9999px;\n  --radius-page: 24px;\n  --shadow-panel: inset 0 1px 1px color-mix(in srgb, white 8%, transparent), 0 12px 12px color-mix(in srgb, var(--color-shadow) 12%, transparent);\n  --shadow-control: 0 1px 2px color-mix(in srgb, var(--color-shadow) 16%, transparent);\n  --shadow-control-hover: 0 2px 4px color-mix(in srgb, var(--color-shadow) 16%, transparent);\n  --shadow-control-pressed: none;\n  --shadow-dialog: inset 0 1px 2px color-mix(in srgb, white 12%, transparent), 0 20px 25px color-mix(in srgb, var(--color-shadow) 50%, transparent);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: color-mix(in srgb, var(--color-bar) 80%, transparent);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: linear-gradient(180deg, color-mix(in srgb, var(--color-surface) 95%, white), color-mix(in srgb, var(--color-surface) 88%, black));\n  --fill-button: var(--color-button);\n  --fill-button-hover: color-mix(in srgb, var(--color-button) 85%, white);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
