{
  "id": "v1-fa-7228",
  "long_id": "v1.frutiger-aero.docs.s07.p02.t02.u08",
  "name": "Frutiger Aero developer guide",
  "era": {
    "slug": "frutiger-aero",
    "code": "fa",
    "name": "Frutiger Aero",
    "years": [
      2004,
      2010
    ],
    "description": "The glossy optimism of 2004 to 2010: sky blue and grass green, glass panels with a bright top highlight, bubbles and soft glows, rounded corners, humanist sans type and reflections under everything."
  },
  "archetype": "docs",
  "mode": "mix",
  "viewport": {
    "width": 1024,
    "fluid": false
  },
  "summary": "A fixed-width developer guide in the violet glass variety of the Frutiger Aero look: an amethyst page with an orchid and a lilac glow, a contents rail of frosted glass on the left, and one glass sheet beside it that opens with a dark band holding a small window of sample code. Guides of this kind were common from about 2006 to 2010, when desktops grew sidebars and every platform invited people to write gadgets and widgets for them. Bars, keys and labels are smooth gels lit along the top with no hard break, panels are translucent with a bright upper edge and a soft violet shadow, corners are rounded by 8 to 20px, and the type pairs a small humanist body with light, wide headings.",
  "url": "https://chrono.skin/s/v1-fa-7228",
  "preview_url": "https://chrono.skin/s/v1-fa-7228/specimen.html",
  "files": {
    "STYLE.md": "# Frutiger Aero developer guide\n\n## Summary\n\nA fixed-width developer guide in the violet glass variety of the Frutiger Aero look: an amethyst page with an orchid and a lilac glow, a contents rail of frosted glass on the left, and one glass sheet beside it that opens with a dark band holding a small window of sample code. Guides of this kind were common from about 2006 to 2010, when desktops grew sidebars and every platform invited people to write gadgets and widgets for them. Bars, keys and labels are smooth gels lit along the top with no hard break, panels are translucent with a bright upper edge and a soft violet shadow, corners are rounded by 8 to 20px, and the type pairs a small humanist body with light, wide headings.\n\n## Layout\n\n- Page width is fixed: `--size-page` = 960px, centred in a 1024px window. It does not stretch and does not reflow for phones.\n- `.ds-page__wrap` is a grid of two columns of equal height, `--space-5` (18px) apart: the contents rail (`.ds-nav`, `--size-rail` 196px) on the left and `.ds-page__content` (746px) with the glass sheet `.ds-page__sheet` (90% `--color-canvas`, `--radius-page` corners). The footer band runs under both, 18px lower.\n- The navigation is the rail, never a bar across the top. Top to bottom: the name on a bar of `--size-nav` (48px), the search field, the contents tree, a list of the kit's samples, and at the foot a pale strip with the kit version and its download button. The rail is as tall as the sheet.\n- The home page fills the sheet edge to edge with the hero; the rest sits in `.ds-page__body` (18px padding, 28px at the bottom): the row of four figures, the six topics in three columns under a `.ds-section__title`, then two columns.\n- Two columns in `.ds-page__columns`: main (462px) and a right column `.ds-page__aside` of `--size-side` (230px), 18px apart. With the rail that makes three columns on the screen; never more.\n- Spacing scale: `--space-1` 2px (hairline gaps, sub-link padding), `--space-2` 4px (inside controls, between a label and its field), `--space-3` 8px (gaps between buttons, row and cell padding), `--space-4` 12px (panel and cell padding, gaps between cells and figures), `--space-5` 18px (gutter, sheet padding, gap between stacked blocks), `--space-6` 28px (hero padding, gap between sections; the largest gap).\n- Fixed sizes: controls `--size-control` 26px tall, the hero buttons `--size-control-large` 36px, the brand tile `--size-mark` 26px, topic tiles `--size-tile` 34px, icons `--size-icon` 16px, the code window `--size-code` 290px, the dialog `--size-dialog` 430px.\n- Inner pages drop the hero and the figures; the rail stays. In `.ds-page__body`, top to bottom: `.ds-breadcrumb`, then `.ds-page-header` across the sheet (title and one line on the left, one or two buttons on the right, a 2px rule under it), then either the two columns or a full-width block. `.ds-tabs` sit directly above the text or table they switch; under a table `.ds-table__foot` holds the key to the labels on the left and the pagination on the right; notices sit above the form; a dialog follows the columns across the sheet on its dimmed strip. Further blocks are `.ds-section` blocks 28px apart.\n- Views: the specimen is one guide of four screens, each a `.ds-view` inside the sheet, with the rail and the footer written once around them. `home` is the overview (hero with the code window, figures, six topics, recent updates, the kit panel, most read). `guide` is one guide (tabs, long text with a code block, the contents of the page, the series, onward links). `reference` lists the objects (tabs, table with status labels, the key and pagination, a note on reading an entry, an empty bookmark list). `submit` is the gallery form (notices, the form with its buttons, the checks, the rules, the discarding dialog). Links are plain `href=\"#name\"`; the rail link of the showing view becomes a gel bar by a `.ds-page:has(#name:target)` rule, the Overview link also when no view is named.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Two families: `--font-body` and `--font-ui` are \"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Geneva, Verdana; `--font-heading` is \"Gill Sans\", \"Gill Sans MT\", \"Trebuchet MS\": system faces only, a humanist sans with Trebuchet MS where Gill Sans is not installed. `--font-mono` (Monaco) is for inline code.\n- `--text-base` 12px at `--line-body` 1.5. `--text-small` 10px for times, tools, stat labels and the footer. `--text-ui` 12px for buttons, fields and tabs; buttons and bar links are bold.\n- Headings are semibold (`--weight-heading`, `--weight-display` 600): `--text-display` 40px for the greeting in the search band, tightened by `--display-tracking` -0.5px; `--text-h1` 26px page titles and forecast figures; `--text-h2` 18px the brand name and empty-state titles; `--text-h3` 14px (bold) gadget titles, lead headlines, section titles. `--text-large` 16px for the lead and the search field. Nothing is uppercased.\n- Links are not underlined at rest and underline on hover; the scopes and suggestions in the search band are the exception and show where the search goes.\n- `--color-page` #060c1a with `--fill-page`: night blue with a cyan glow at the upper left and a violet one at the upper right.\n- `--color-bar` #181818 with `--fill-bar` (black glass: a lit upper half ending at 50%) and near-white `--color-bar-text` with a glowing `--shadow-text`: the bar, the current tab, the dialog frame, channel orbs.\n- `--color-bar-alt` #1b3d6b with `--fill-bar-alt` (blue glass lit from above): the small-print strip, gadget heads, table head, sidebar titles, the footer link strip.\n- `--color-inverse` #123c8f with `--fill-inverse` (aurora: cyan rising from the lower left, violet from the upper right): the search band and the last strip of the footer, white text.\n- `--color-text` #c9d6e6 on the dark surfaces `--color-canvas` #0b1526, `--color-surface` #101c33, `--color-surface-alt` #162740, `--color-surface-strong` #203552; `--color-heading` #ffffff; `--color-heading-alt` #62d8ff (cyan) section titles, prose h2, breadcrumb marks; `--color-text-muted` #989898.\n- `--color-link` #62c8ff, `--color-link-quiet` #a3b8cf, visited #b59cff, hover #a8ecff, active #ffffff.\n- `--color-button` #0f8fd0 with `--fill-button` (a gel capsule: a white sheen over the upper half, a faint second light at the foot) and a halo from `--shadow-control`: the primary button, the brand tile, arrow buttons, the current page number. `--color-button-secondary` #26374f with the same sheen: every other button.\n- `--color-accent` #19c2f0 with dark `--color-accent-text`: pill badges and list bullets. `--color-accent-alt` #c86bff (violet): the New marker.\n- `--color-fill-1` to `--color-fill-4` (deep blue, teal, violet, sea green): the lower end of forecast tiles and channel tiles.\n- Borders: `--color-border` #2a4466 around gadgets, `--color-border-muted` #1c2f4a between rows, `--color-border-strong` #4d7fb3 for the sheet and the 2px dialog frame, `--color-input-border` #35557d.\n- `--color-notice` #132c4a; `--color-danger` #e0483c on `--color-danger-surface` #3a1418; `--color-success` #2fa84a and `--color-warning` #f2b31c fill status badges.\n- Surface: `--radius-control` 13px (capsule buttons and fields), `--radius-panel` 10px, `--radius-page` 16px, `--radius-pill` 20px. `--shadow-panel` is a lit inner top edge and an 18px drop; `--shadow-control` adds an 8px halo in `--color-focus` that grows to 14px on hover; `--shadow-dialog` is a 40px drop inside a 30px glow. `--fill-panel` is translucent and `--backdrop-blur` 10px blurs what lies behind it. `--transition` none.\n- One-off shades are made with `color-mix()` over tokens: outlines of glossy fills (the fill's colour mixed with `--color-shadow`), the lit bar link (`--color-bar-text` with transparent), the sheet (90% `--color-canvas`), the halo of the search field (`--color-focus` with transparent), gloss on status fills (mixed with `--color-button-text`).\n- The era's conventions for which text sits on which fill, kept by every layout and every token set of the era:\n  - `--color-text`, `--color-text-muted`, `--color-heading`, `--color-heading-alt` and the link colours sit on `--color-canvas`, `--color-surface`, `--color-surface-alt`, `--color-surface-strong`, `--fill-panel` and the four `--color-fill-*` tints. A palette keeps page, canvas, surfaces and fills on one side (all light or all dark) so that these stay readable on every one of them.\n  - `--color-bar-text` only on `--fill-bar`; `--color-bar-alt-text` only on `--fill-bar-alt`; `--color-inverse-text` only on `--fill-inverse`. Links on a bar take the bar's text colour, never `--color-link`.\n  - `--color-button-text` on `--fill-button` and on any fill made from `--color-danger`, `--color-success` or `--color-accent-alt`; it is always the light colour and also supplies the gloss on those fills (mixed in with `color-mix()`).\n  - `--color-accent-text` on `--fill-accent` and on `--color-warning`; `--color-button-secondary-text` on `--fill-button-secondary`; `--color-notice-text` on `--color-notice`; `--color-danger` as text on `--color-danger-surface` and on the surfaces.\n  - Nothing but decoration sits on `--fill-page`: no text is set directly on the page.\n  - `--color-focus` is the glow colour: the focus ring, the halo of the search field and of a hovered button. `--color-inverse-text` draws the bubbles on the sky band. `--color-shadow` tints every shadow and darkens the outline of every glossy fill.\n\n## Components\n\n- `.ds-page`: on `<body>`. `.ds-page__wrap` is the 960px grid; `.ds-page__content` its right column; `.ds-page__sheet` the glass sheet; `.ds-page__body` its padded area; `.ds-page__columns` holds `.ds-page__main` and `.ds-page__aside`. `.ds-section` separates blocks by 28px, `.ds-section__title` (19px) heads one. `.ds-view` is one screen (`.ds-view--home` the first).\n- `.ds-nav`: the contents rail. `.ds-nav__head` is the bar with the `.ds-brand`; `.ds-nav__search` holds a capsule `.ds-nav__input`; `.ds-nav__links` is the tree: each `.ds-nav__item` has a `.ds-nav__link` with a `.ds-nav__icon` (current: `is-current`, a gel bar; hover: `is-hover`) and may hold a `.ds-nav__sub` list of `.ds-nav__sublink` pages on a hairline. A `.ds-nav__label` heads a further plain list of pages (`.ds-nav__sub--plain`). `.ds-nav__foot` at the bottom holds a `.ds-nav__note` with the `.ds-nav__version` and one `.ds-button--block`. Four to six top links.\n- `.ds-brand`: the site's mark and name on the rail's bar, linking home; one per page. `.ds-brand__mark` is a rounded tile dressed like the primary button; `.ds-brand__name` is the name at `--text-h2` in `--color-bar-text`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo: replace both, keep the tile.\n- `.ds-hero`: the overview's opening band on `--fill-inverse`, home page only. `.ds-hero__main` holds `.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__action` (a `.ds-button--large` and a secondary one) and a small `.ds-hero__note`. `.ds-hero__window` on the right is a glass window: `.ds-hero__window-bar` caption and a `.ds-hero__code` block of at most twelve short lines (`.ds-hero__code-key` for object names, `.ds-hero__code-note` for comments).\n- `.ds-page-header`: the head of an inner page instead of the hero: `.ds-page-header__main` with `.ds-page-header__title` (25px) and one grey `.ds-page-header__text` line; `.ds-page-header__actions` at the right; a 2px rule under the whole. One per inner page.\n- `.ds-stat`: one figure, a pale glass tile with a 25px `.ds-stat__number` over an 11px `.ds-stat__label`; four sit in a `.ds-stats` row at the top of the overview.\n- `.ds-grid`: topics in three columns, 12px apart. `.ds-grid__cell` (`--1` to `--4` choose the tint it fades into) holds a `.ds-grid__icon` tile (aqua by default, `--bar` violet, `--accent` orchid, `--alt` orange) beside `.ds-grid__body` with a `.ds-grid__title` and one grey `.ds-grid__text` line.\n- `.ds-prose`: long text: h1, h2 (teal), h3 (bold 14px), p, ul, ol, code, strong and links inside it are styled. `.ds-code` is a block of sample code inside or beside it.\n- `.ds-link`: any link. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--title` bold, `.ds-link--quiet` for minor links, `.ds-link--code` for object names. `.ds-links` lays several out in a row.\n- `.ds-button`: the primary action: aqua gel, white bold 12px, 26px tall, 8px corners; may end with a `.ds-button__icon`. Variants: `.ds-button--secondary` (lavender glass, the usual button), `.ds-button--danger` (red gel, only for an action that removes), `.ds-button--large` (36px, the hero), `.ds-button--block` (full width, the rail). States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttons` is a row. One primary button per form, panel or dialog.\n- `.ds-form`: labels above their fields. `.ds-form__row` holds a bold `.ds-form__label` and a `.ds-form__input`, `.ds-form__select` or `.ds-form__textarea`; `.ds-form__pair` sets two short rows side by side; `.ds-form__hint` and `.ds-form__error` under a control; `is-error`, `is-focus`, `is-disabled` on the control; `.ds-form__check` with `.ds-form__checkbox`; `.ds-form__actions` for the buttons over a hairline.\n- `.ds-table`: data table in a rounded border with the panel shadow: `.ds-table__head` cells are a strip of `--fill-bar`; `.ds-table__row` with `is-alt` on alternate rows; `.ds-table__cell` with a hairline above; `is-numeric` right-aligns; `.ds-table__note` is a second grey line. `.ds-table__foot` under it holds the key and the pagination.\n- `.ds-list`: list of updates. Each `.ds-list__item` is a `.ds-list__mark` dot beside `.ds-list__body`: a bold `.ds-list__title`, a `.ds-list__text` line and a grey `.ds-list__meta`. Rows are divided by hairlines.\n- `.ds-panel`: a glass box in the side column (`is-last` on the last block): teal `.ds-panel__title` over a hairline, `.ds-panel__body` with `.ds-panel__text`, a `.ds-panel__facts` list of `.ds-panel__fact` rows (name in `.ds-panel__fact-name`, value at the right) and `.ds-panel__actions`.\n- `.ds-tabs`: a pale toolbar strip of `.ds-tabs__tab` links; the current one `is-current` is a white raised plate. Two to five tabs.\n- `.ds-badge`: a small gel label, orchid by default. `.ds-badge--count` (flat pale), `.ds-badge--new` (orange). Status variants: `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`. `.ds-badges` lays several out in a row.\n- `.ds-sidebar`: an unboxed link block in the side column (`is-last` on the last): `.ds-sidebar__title` and a `.ds-sidebar__list` hanging from a 2px rule; each `.ds-sidebar__item` (current: `is-current`, marked in `--color-accent`) may end with a `.ds-sidebar__count`. For the contents of a page and short link lists.\n- `.ds-notice`: a rounded message with a square `.ds-notice__sign`, `.ds-notice__text` and a bold `.ds-notice__title`. Variant `.ds-notice--error`.\n- `.ds-pagination`: one segmented key: `.ds-pagination__item` holding `.ds-pagination__link`, `is-current` (aqua gel), `is-disabled`.\n- `.ds-breadcrumb`: 11px trail of `.ds-link` items with teal `.ds-breadcrumb__sep` marks and a bold `.ds-breadcrumb__current`.\n- `.ds-dialog`: a small window with a 2px rim: `.ds-dialog__title` on `--fill-bar` (with a round red `.ds-dialog__close`), `.ds-dialog__body` with `.ds-dialog__text`, and a pale `.ds-dialog__actions` strip with the buttons at the right. It casts `--shadow-dialog` and sits on `.ds-dialog__backdrop`, a dimmed rounded strip in the page flow.\n- `.ds-empty`: a pale well with a glass `.ds-empty__icon` tile, `.ds-empty__title`, `.ds-empty__text` and one button.\n- `.ds-footer`: a dark band under the rail and the sheet: a `.ds-footer__list` of `.ds-footer__link` items on the left, the `.ds-footer__legal` line on the right.\n- `.ds-progress`: the glossy accent progress bar, a native `<progress>` in a `.ds-progress__row` with label and value; for downloads, installs and storage.\n- `.ds-accordion`: expanding help sections, one `<details class=\"ds-accordion__item\">` per question with `__head` and `__body`.\n- `.ds-tooltip`: a round `?` hint that opens a pale balloon (`__trigger`, `__text`) on hover or focus, beside a label or title.\n\n## Never\n\n- `row-gap <= 24px`: rows are divided by a hairline, not by space.\n- `block-gap <= 28px`: sections are at most 28px apart.\n- `content-width <= 960px`: text stays inside the rail and the sheet.\n- `palette-colours <= 46`: night blues, cyan, violet, a green, amber, red and greys.\n- `font-size <= 40px`: the greeting is the largest text.\n- `font-size >= 10px`: nothing is smaller than the meta text.\n- `font-weight <= 700`: bold is the heaviest weight.\n- `font-families <= 3`: a body sans, a heading sans, a monospace for inline code.\n- `line-height <= 1.5`: body text is 12px on 18px.\n- `underlined-links <= 12%`: only the search band's scopes and suggestions are underlined at rest.\n- `letter-spacing <= 0.5px`: only the greeting is tightened, by half a pixel; nothing is spaced out.\n- `uppercase-text = 0%`: nothing is uppercased by CSS.\n- `border-radius <= 4px`: corners are 1, 2, 3 or 4px; only the round brand gel is rounder.\n- `border-width <= 3px`: hairlines, and 3px for the dialog's rim, notice strokes, the current tab and the blank print.\n- `box-shadow-blur <= 20px`: shadows are short contact shadows; only prints and the dialog reach 20px.\n- `gradient-fills <= 40%`: gloss belongs to the plate, keys, labels, cells and the drawn pictures; text areas stay plain.\n- `transition = none`: states change at once.\n- `animation = none`: nothing moves.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. A new bar is `--fill-bar`, a pale strip `--fill-bar-alt`, a dark band `--fill-inverse`; a new box is a `.ds-panel` if it explains and a `.ds-sidebar` if it lists links; a new entry in the rail is a `.ds-nav__item`, never a second bar. Keep to the conventions above for which text token sits on which fill, give gels an outline mixed from their colour and `--color-shadow`, take highlights from the surface tokens instead of drawing new ones, and make any extra shade with `color-mix()` over existing tokens.\n",
    "components.css": ":root {\n  --size-page: 960px;\n  --size-rail: 196px;\n  --size-side: 230px;\n  --size-nav: 48px;\n  --size-mark: 26px;\n  --size-control: 26px;\n  --size-control-large: 36px;\n  --size-icon: 16px;\n  --size-tile: 34px;\n  --size-code: 290px;\n  --size-glow: 8px;\n  --size-textarea: 84px;\n  --size-dialog: 430px;\n  --space-1: 2px;\n  --space-2: 4px;\n  --space-3: 8px;\n  --space-4: 12px;\n  --space-5: 18px;\n  --space-6: 28px;\n}\n\n/* shell: a contents rail on the left, one glass sheet beside it, a band across both to close */\n.ds-page {\n  margin: 0;\n  padding: 0;\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after { box-sizing: border-box; }\n.ds-page__wrap {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  gap: var(--space-5);\n  width: var(--size-page);\n  margin: 0 auto;\n  padding: var(--space-5) 0 var(--space-6);\n}\n.ds-page__content { min-width: 0; }\n.ds-page__sheet {\n  height: 100%;\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-border-strong) 70%, transparent);\n  border-radius: var(--radius-page);\n  background: color-mix(in srgb, var(--color-canvas) 90%, transparent);\n  -webkit-backdrop-filter: blur(calc(var(--backdrop-blur) * 2));\n  backdrop-filter: blur(calc(var(--backdrop-blur) * 2));\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-page__body { padding: var(--space-5) var(--space-5) var(--space-6); }\n.ds-page__columns {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-5);\n}\n.ds-page__main {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page__aside {\n  flex: 0 0 var(--size-side);\n  width: var(--size-side);\n}\n.ds-section { margin: var(--space-6) 0 0; }\n.ds-section__title {\n  margin: 0 0 var(--space-4);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n\n/* views: one screen of the example site shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* nav: the rail, a glass pane with the name on a bar, the search, the contents tree and the kit at its foot */\n.ds-nav {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-border-strong) 70%, transparent);\n  border-radius: var(--radius-page);\n  background-color: color-mix(in srgb, var(--color-canvas) 84%, transparent);\n  background-image: var(--fill-panel);\n  -webkit-backdrop-filter: blur(calc(var(--backdrop-blur) * 2));\n  backdrop-filter: blur(calc(var(--backdrop-blur) * 2));\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-nav__head {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  height: var(--size-nav);\n  padding: 0 var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar) 60%, var(--color-shadow));\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n}\n.ds-nav__search {\n  margin: 0;\n  padding: var(--space-4) var(--space-4) var(--space-3);\n}\n.ds-nav__input {\n  width: 100%;\n  height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-pill);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n}\n.ds-nav__input::placeholder { color: var(--color-text-muted); opacity: 1; }\n.ds-nav__input:focus,\n.ds-nav__input.is-focus {\n  outline: var(--focus-ring);\n  box-shadow: 0 0 var(--size-glow) color-mix(in srgb, var(--color-focus) 80%, transparent);\n}\n.ds-nav__links {\n  margin: 0;\n  padding: 0 var(--space-3) var(--space-4);\n  list-style: none;\n}\n.ds-nav__item { margin: var(--space-1) 0 0; }\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-height: var(--size-control);\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n}\n.ds-nav__icon {\n  display: block;\n  flex: 0 0 auto;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  border-color: var(--color-border);\n  background: var(--color-surface-strong);\n}\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(#guide:target) .ds-nav__link[href=\"#guide\"],\n.ds-page:has(#reference:target) .ds-nav__link[href=\"#reference\"],\n.ds-page:has(#submit:target) .ds-nav__link[href=\"#submit\"] {\n  border-color: color-mix(in srgb, var(--color-bar) 60%, var(--color-shadow));\n  background: var(--fill-bar);\n  box-shadow: var(--shadow-control);\n  color: var(--color-bar-text);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__sub {\n  margin: var(--space-1) 0 var(--space-3) calc(var(--space-3) + var(--size-icon) / 2);\n  padding: 0 0 0 var(--space-4);\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-nav__sublink {\n  display: block;\n  padding: var(--space-1) 0;\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__sublink:hover,\n.ds-nav__sublink.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-nav__label {\n  margin: 0;\n  padding: var(--space-3) var(--space-4) var(--space-2);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-nav__sub--plain {\n  margin: 0 var(--space-4) var(--space-4);\n  padding: 0;\n  border-left: 0;\n}\n.ds-nav__foot {\n  margin: auto 0 0;\n  padding: var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n}\n.ds-nav__note {\n  margin: 0 0 var(--space-3);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-nav__version {\n  display: block;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n\n/* brand: the mark on a rounded gel tile, the name on the rail's bar */\n.ds-brand {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  gap: var(--space-3);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-mark);\n  height: var(--size-mark);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button) 68%, var(--color-shadow));\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 70%;\n  height: 70%;\n}\n.ds-brand__name {\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-shadow: var(--shadow-text);\n}\n\n/* hero: a dark band at the head of the sheet, the claim on the left, a window of sample code on the right */\n.ds-hero {\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  padding: var(--space-6);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n}\n.ds-hero__main {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0 0 var(--space-3);\n  color: var(--color-inverse-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-shadow: var(--shadow-text);\n}\n.ds-hero__lead {\n  margin: 0 0 var(--space-5);\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-hero__action {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n.ds-hero__note {\n  margin: var(--space-4) 0 0;\n  font-size: var(--text-small);\n  opacity: 0.85;\n}\n.ds-hero__window {\n  flex: 0 0 var(--size-code);\n  width: var(--size-code);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 60%, transparent);\n  border-radius: var(--radius-panel);\n  background-color: color-mix(in srgb, var(--color-canvas) 88%, transparent);\n  background-image: var(--fill-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  box-shadow: var(--shadow-dialog);\n  color: var(--color-text);\n  overflow: hidden;\n}\n.ds-hero__window-bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-hero__code {\n  margin: 0;\n  padding: var(--space-4);\n  color: var(--color-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n  white-space: pre;\n  overflow: hidden;\n}\n.ds-hero__code-key { color: var(--color-heading); font-weight: var(--weight-bold); }\n.ds-hero__code-note { color: var(--color-text-muted); }\n\n/* page header: head of an inner page, action on the right, a rule under it */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-5);\n  margin: 0 0 var(--space-5);\n  padding: 0 0 var(--space-4);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border);\n}\n.ds-page-header__main {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-page-header__text {\n  margin: var(--space-2) 0 0;\n  color: var(--color-text-muted);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  gap: var(--space-3);\n}\n\n/* stats: four pale glass tiles, the figure over its label */\n.ds-stats {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: var(--space-4);\n  margin: 0 0 var(--space-6);\n  padding: 0;\n  list-style: none;\n}\n.ds-stat {\n  min-width: 0;\n  padding: var(--space-3) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--fill-bar-alt);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-bar-alt-text);\n}\n.ds-stat__number {\n  display: block;\n  white-space: nowrap;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-stat__label {\n  display: block;\n  font-size: var(--text-small);\n}\n\n/* grid: six topics in three columns, each beside a small gel tile */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: var(--space-4);\n  margin: 0;\n}\n.ds-grid__cell {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: linear-gradient(to right, var(--color-surface) 0, var(--color-surface-alt) 100%);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__cell--1 { background: linear-gradient(to right, var(--color-surface) 0, var(--color-fill-1) 100%); }\n.ds-grid__cell--2 { background: linear-gradient(to right, var(--color-surface) 0, var(--color-fill-2) 100%); }\n.ds-grid__cell--3 { background: linear-gradient(to right, var(--color-surface) 0, var(--color-fill-3) 100%); }\n.ds-grid__cell--4 { background: linear-gradient(to right, var(--color-surface) 0, var(--color-fill-4) 100%); }\n.ds-grid__icon {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-tile);\n  height: var(--size-tile);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button) 68%, var(--color-shadow));\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-grid__icon svg {\n  display: block;\n  width: 56%;\n  height: 56%;\n}\n.ds-grid__icon--bar {\n  border-color: color-mix(in srgb, var(--color-bar) 68%, var(--color-shadow));\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n}\n.ds-grid__icon--accent {\n  border-color: color-mix(in srgb, var(--color-accent) 68%, var(--color-shadow));\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n}\n.ds-grid__icon--alt {\n  border-color: color-mix(in srgb, var(--color-accent-alt) 68%, var(--color-shadow));\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-accent-alt), var(--color-button-text) 40%) 0, var(--color-accent-alt) 100%);\n}\n.ds-grid__body {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-grid__title {\n  margin: 0 0 var(--space-1);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-grid__text {\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* tabs: a pale toolbar strip, the current tab a raised plate on it */\n.ds-tabs {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-5);\n  padding: var(--space-2);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-bar-alt);\n  list-style: none;\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-2) var(--space-4);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: calc(var(--radius-control) - var(--space-1));\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover { border-color: var(--color-border); }\n.ds-tabs__tab.is-current {\n  border-color: var(--color-border-strong);\n  background: var(--color-surface);\n  box-shadow: var(--shadow-control);\n  color: var(--color-heading);\n}\n\n/* list: what changed in the documentation, a gel dot before each title */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  padding: var(--space-3) 0;\n}\n.ds-list__item + .ds-list__item { border-top: var(--border-width) var(--border-style) var(--color-border-muted); }\n.ds-list__mark {\n  flex: 0 0 auto;\n  width: var(--space-3);\n  height: var(--space-3);\n  margin-top: var(--space-2);\n  border-radius: 50%;\n  background: var(--fill-accent);\n}\n.ds-list__body {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-list__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-list__text { margin: var(--space-1) 0 0; }\n.ds-list__meta {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* panel: a glass box in the side column */\n.ds-panel {\n  margin: 0 0 var(--space-5);\n  padding: var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  -webkit-backdrop-filter: blur(var(--backdrop-blur));\n  backdrop-filter: blur(var(--backdrop-blur));\n  box-shadow: var(--shadow-panel);\n}\n.ds-panel.is-last { margin-bottom: 0; }\n.ds-panel__title {\n  margin: 0 0 var(--space-3);\n  padding: 0 0 var(--space-2);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-panel__body { margin: 0; }\n.ds-panel__text { margin: 0 0 var(--space-3); }\n.ds-panel__text.is-last { margin-bottom: 0; }\n.ds-panel__facts {\n  margin: 0 0 var(--space-3);\n  padding: 0;\n  list-style: none;\n}\n.ds-panel__fact {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n}\n.ds-panel__fact + .ds-panel__fact { border-top: var(--border-width) var(--border-style) var(--color-border-muted); }\n.ds-panel__fact-name { color: var(--color-text-muted); }\n.ds-panel__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n\n/* sidebar: an unboxed list of links hanging from a rule on its left */\n.ds-sidebar { margin: 0 0 var(--space-5); }\n.ds-sidebar.is-last { margin-bottom: 0; }\n.ds-sidebar__title {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  border-left: var(--border-width-strong) var(--border-style) var(--color-border);\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  margin-left: calc(0px - var(--border-width-strong));\n  padding: var(--space-1) 0 var(--space-1) var(--space-4);\n  border-left: var(--border-width-strong) var(--border-style) transparent;\n}\n.ds-sidebar__item.is-current {\n  border-left-color: var(--color-accent);\n  font-weight: var(--weight-bold);\n}\n.ds-sidebar__count {\n  margin-left: auto;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* code: a block of sample code */\n.ds-code {\n  margin: 0 0 var(--space-4);\n  padding: var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n  white-space: pre;\n  overflow: hidden;\n}\n\n/* footer: a dark band across the rail and the sheet */\n.ds-footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  grid-column: 1 / -1;\n  padding: var(--space-4) var(--space-5);\n  border-radius: var(--radius-page);\n  background: var(--fill-inverse);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-inverse-text);\n  font-size: var(--text-small);\n}\n.ds-footer__list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover { text-decoration: var(--link-decoration-hover); }\n.ds-footer__legal { margin: 0; }\n\n/* typography */\n.ds-prose { margin: 0; }\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-3);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-prose h1 { margin-top: 0; font-size: var(--text-h1); }\n.ds-prose h2 { color: var(--color-heading-alt); font-size: var(--text-h2); }\n.ds-prose h3 { font-size: var(--text-h3); font-weight: var(--weight-bold); }\n.ds-prose p { margin: 0 0 var(--space-4); }\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n  padding: 0 0 0 var(--space-6);\n}\n.ds-prose li { margin: 0 0 var(--space-2); }\n.ds-prose li::marker { color: var(--color-heading-alt); }\n.ds-prose strong { font-weight: var(--weight-bold); }\n.ds-prose code {\n  padding: 0 var(--space-2);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: calc(var(--radius-control) / 2);\n  background: var(--color-surface-alt);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n\n/* links */\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n}\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-link:visited,\n.ds-link.is-visited { color: var(--color-link-visited); }\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 { color: var(--color-link-active); }\n.ds-link:focus-visible,\n.ds-link.is-focus { outline: var(--focus-ring); }\n.ds-link--title {\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link--quiet:hover,\n.ds-link--quiet.is-hover { color: var(--color-link-hover); }\n.ds-link--code {\n  font-family: var(--font-mono);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n\n/* buttons: gel keys, lit along the top */\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-4);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button) 68%, var(--color-shadow));\n  border-radius: var(--radius-control);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n  cursor: pointer;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\n}\n.ds-button:active,\n.ds-button.is-active {\n  background: var(--color-button);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus { outline: var(--focus-ring); }\n.ds-button__icon {\n  display: block;\n  flex: 0 0 auto;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-button--large {\n  height: var(--size-control-large);\n  padding: 0 var(--space-5);\n  font-size: var(--text-large);\n}\n.ds-button--block { display: flex; }\n.ds-button--secondary {\n  border-color: color-mix(in srgb, var(--color-button-secondary) 60%, var(--color-shadow));\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  text-shadow: none;\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-button--secondary:active,\n.ds-button--secondary.is-active { background: var(--color-button-secondary); }\n.ds-button--danger {\n  border-color: color-mix(in srgb, var(--color-danger) 68%, var(--color-shadow));\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-danger), var(--color-button-text) 50%) 0, var(--color-danger) 45%, color-mix(in srgb, var(--color-danger), var(--color-shadow) 12%) 100%);\n  color: var(--color-button-text);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-danger), var(--color-button-text) 62%) 0, color-mix(in srgb, var(--color-danger), var(--color-button-text) 14%) 45%, var(--color-danger) 100%);\n  color: var(--color-button-text);\n}\n.ds-button--danger:active,\n.ds-button--danger.is-active { background: var(--color-danger); }\n.ds-button:disabled,\n.ds-button.is-disabled {\n  border-color: var(--color-border);\n  background: var(--color-disabled);\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  text-shadow: none;\n  cursor: default;\n}\n\n/* form: labels over their fields, short fields two to a row */\n.ds-form { margin: 0; }\n.ds-form__pair {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: var(--space-5);\n}\n.ds-form__row { margin: 0 0 var(--space-4); }\n.ds-form__label {\n  display: block;\n  margin: 0 0 var(--space-2);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  display: block;\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-form__input,\n.ds-form__select { height: var(--size-control); }\n.ds-form__select { padding: 0 var(--space-2); }\n.ds-form__textarea {\n  height: var(--size-textarea);\n  resize: vertical;\n}\n.ds-form__input:focus,\n.ds-form__input.is-focus,\n.ds-form__select:focus,\n.ds-form__select.is-focus,\n.ds-form__textarea:focus,\n.ds-form__textarea.is-focus {\n  outline: var(--focus-ring);\n  border-color: var(--color-focus);\n  box-shadow: 0 0 var(--size-glow) color-mix(in srgb, var(--color-focus) 80%, transparent);\n}\n.ds-form__input:disabled,\n.ds-form__input.is-disabled {\n  border-color: var(--color-border);\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n}\n.ds-form__error {\n  margin: var(--space-2) 0 0;\n  color: var(--color-danger);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  margin: var(--space-2) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-size: var(--text-ui);\n}\n.ds-form__checkbox { margin: 0; accent-color: var(--color-button); }\n.ds-form__actions {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: var(--space-5) 0 0;\n  padding: var(--space-4) 0 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* table: the head is a strip of the primary bar */\n.ds-table {\n  width: 100%;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-collapse: separate;\n  border-spacing: 0;\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  font-size: var(--text-base);\n  line-height: var(--line-body);\n  overflow: hidden;\n}\n.ds-table__head {\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  text-align: left;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n}\n.ds-table__cell {\n  padding: var(--space-3) var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  background: var(--color-surface);\n  color: var(--color-text);\n  vertical-align: top;\n}\n.ds-table__row.is-alt .ds-table__cell { background: var(--color-surface-alt); }\n.ds-table__head.is-numeric,\n.ds-table__cell.is-numeric { text-align: right; }\n.ds-table__cell.is-numeric { font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ds-table__note {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-table__foot {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  margin: var(--space-4) 0 0;\n}\n\n/* badge: a small gel label */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-3);\n  border-radius: var(--radius-pill);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: calc(var(--text-small) + var(--space-3));\n  text-decoration: none;\n  vertical-align: baseline;\n  white-space: nowrap;\n}\n.ds-badge--count {\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-weight: var(--weight-body);\n}\n.ds-badge--new {\n  background: var(--color-accent-alt);\n  color: var(--color-button-text);\n}\n.ds-badge--success {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-success), var(--color-button-text) 35%) 0, var(--color-success) 60%);\n  color: var(--color-button-text);\n}\n.ds-badge--warning {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-warning), var(--color-button-text) 45%) 0, var(--color-warning) 60%);\n  color: var(--color-accent-text);\n}\n.ds-badge--danger {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-danger), var(--color-button-text) 35%) 0, var(--color-danger) 60%);\n  color: var(--color-button-text);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n\n/* notice: a rounded line with a square sign */\n.ds-notice {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-notice-text) 35%, var(--color-notice));\n  border-radius: var(--radius-control);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n}\n.ds-notice__sign {\n  display: block;\n  flex: 0 0 auto;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-top: var(--space-1);\n  border-radius: calc(var(--radius-control) / 2);\n  background: var(--color-notice-text);\n  color: var(--color-notice);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  align-content: center;\n  text-align: center;\n  text-box: trim-both cap alphabetic;\n}\n.ds-notice__text { margin: 0; }\n.ds-notice__title { font-weight: var(--weight-bold); }\n.ds-notice--error {\n  border-color: var(--color-danger);\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n}\n.ds-notice--error .ds-notice__sign {\n  background: var(--color-danger);\n  color: var(--color-button-text);\n}\n\n/* pagination: one segmented key */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: 1;\n}\n.ds-pagination__item + .ds-pagination__item { margin-left: calc(0px - var(--border-width)); }\n.ds-pagination__link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control);\n  height: var(--size-control);\n  padding: 0 var(--space-3);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button-secondary) 60%, var(--color-shadow));\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n}\n.ds-pagination__item:first-child .ds-pagination__link { border-radius: var(--radius-control) 0 0 var(--radius-control); }\n.ds-pagination__item:last-child .ds-pagination__link { border-radius: 0 var(--radius-control) var(--radius-control) 0; }\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover { box-shadow: var(--shadow-control-hover); }\n.ds-pagination__link.is-current {\n  position: relative;\n  border-color: color-mix(in srgb, var(--color-button) 68%, var(--color-shadow));\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  text-shadow: var(--shadow-text);\n}\n.ds-pagination__link.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-4);\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n.ds-breadcrumb__sep { color: var(--color-heading-alt); }\n.ds-breadcrumb__current { color: var(--color-text); font-weight: var(--weight-bold); }\n\n/* dialog: a small window with a bar for its title, shown in the page flow on a dimmed strip */\n.ds-dialog__backdrop {\n  display: flex;\n  justify-content: center;\n  margin: var(--space-5) 0 0;\n  padding: var(--space-6) var(--space-5);\n  border-radius: var(--radius-panel);\n  background: var(--color-overlay);\n}\n.ds-dialog {\n  width: var(--size-dialog);\n  max-width: 100%;\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  background: var(--color-surface);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-dialog__title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-shadow: var(--shadow-text);\n}\n.ds-dialog__close {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  border-radius: 50%;\n  background: var(--color-danger);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  text-shadow: none;\n}\n.ds-dialog__close::before {\n  content: \"\";\n  display: inline-block;\n  width: calc(var(--text-small) * 0.9);\n  height: calc(var(--text-small) * 0.9);\n  background: currentColor;\n  clip-path: polygon(calc(50% - var(--space-3) / 8) 0, calc(50% + var(--space-3) / 8) 0, calc(50% + var(--space-3) / 8) calc(50% - var(--space-3) / 8), 100% calc(50% - var(--space-3) / 8), 100% calc(50% + var(--space-3) / 8), calc(50% + var(--space-3) / 8) calc(50% + var(--space-3) / 8), calc(50% + var(--space-3) / 8) 100%, calc(50% - var(--space-3) / 8) 100%, calc(50% - var(--space-3) / 8) calc(50% + var(--space-3) / 8), 0 calc(50% + var(--space-3) / 8), 0 calc(50% - var(--space-3) / 8), calc(50% - var(--space-3) / 8) calc(50% - var(--space-3) / 8));\n  rotate: 45deg;\n  vertical-align: middle;\n}\n.ds-dialog__body { padding: var(--space-5); }\n.ds-dialog__text { margin: 0; }\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n  background: var(--color-surface-alt);\n}\n\n/* empty state: a pale well with a glass tile */\n.ds-empty {\n  padding: var(--space-5) var(--space-4);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-panel);\n  background: var(--color-surface-alt);\n  text-align: center;\n}\n.ds-empty__icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-tile);\n  height: var(--size-tile);\n  margin: 0 auto var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  background: var(--fill-button-secondary);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n}\n.ds-empty__icon svg {\n  display: block;\n  width: 56%;\n  height: 56%;\n}\n.ds-empty__title {\n  margin: 0 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-4);\n  color: var(--color-text-muted);\n}\n\n/* Components of the period: menu, progress, carousel, accordion, tooltip, avatar */\n:root {\n  --size-progress: 14px;\n  --size-orb: 24px;\n  --size-slide: 96px;\n  --size-avatar: 44px;\n  --size-avatar-small: 28px;\n  --size-menu: 200px;\n  --size-tip: 220px;\n  --size-dot: 8px;\n}\n\n.ds-progress__row {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-2);\n  font-size: var(--text-small);\n}\n.ds-progress__label { flex: 0 0 auto; color: var(--color-text); }\n.ds-progress__value { flex: 0 0 auto; color: var(--color-text-muted); }\n.ds-progress__note { margin: 0 0 var(--space-3); color: var(--color-text-muted); font-size: var(--text-small); }\n.ds-progress {\n  -webkit-appearance: none;\n  appearance: none;\n  display: block;\n  flex: 1 1 0;\n  width: 100%;\n  height: var(--size-progress);\n  margin: 0;\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  background: var(--color-surface-strong);\n  overflow: hidden;\n}\n.ds-progress::-webkit-progress-bar { background: var(--color-surface-strong); }\n.ds-progress::-webkit-progress-value { background: var(--fill-accent); border-radius: var(--radius-pill); }\n.ds-progress::-moz-progress-bar { background: var(--fill-accent); border-radius: var(--radius-pill); }\n.ds-carousel__dot.is-current { background: var(--color-accent); }\n\n.ds-accordion { margin: 0 0 var(--space-3); border: var(--border-width) var(--border-style) var(--color-border); border-radius: var(--radius-panel); background: var(--color-surface); overflow: hidden; }\n.ds-accordion__item { border-top: var(--border-width) var(--border-style) var(--color-border-muted); }\n.ds-accordion__item:first-child { border-top: 0; }\n.ds-accordion__head {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  background: linear-gradient(to bottom, var(--color-surface) 0, var(--color-fill-1) 100%);\n  color: var(--color-heading);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  cursor: pointer;\n}\n.ds-accordion__head::marker { color: var(--color-accent-alt); }\n.ds-accordion__head:hover { color: var(--color-link-hover); }\n.ds-accordion__body { margin: 0; padding: var(--space-2) var(--space-3) var(--space-3); color: var(--color-text); font-size: var(--text-small); }\n.ds-accordion__body p { margin: 0; }\n\n.ds-tooltip { position: relative; display: inline-block; vertical-align: middle; }\n.ds-tooltip__trigger {\n  display: inline-block;\n  width: var(--size-orb);\n  height: var(--size-orb);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button) 68%, var(--color-shadow));\n  border-radius: var(--radius-pill);\n  background: var(--fill-button);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  cursor: help;\n  text-transform: none;\n  align-content: center;\n  text-align: center;\n  text-box: trim-both cap alphabetic;\n}\n.ds-tooltip__text {\n  display: none;\n  position: absolute;\n  top: calc(100% + var(--space-1));\n  left: 0;\n  z-index: 20;\n  width: max-content;\n  max-width: var(--size-tip);\n  padding: var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  background: var(--color-notice);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-notice-text);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  text-align: left;\n  text-transform: none;\n  text-shadow: none;\n}\n.ds-tooltip:hover .ds-tooltip__text,\n.ds-tooltip:focus-within .ds-tooltip__text { display: block; }\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>chronoskin: Frutiger Aero developer guide 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<div class=\"ds-page__wrap\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__head\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\"><span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M12 2.5a9.5 9.5 0 1 0 0 19a9.5 9.5 0 1 0 0-19zM12 4.6a5.6 3 0 1 0 0 6a5.6 3 0 1 0 0-6z\"/></svg></span><span class=\"ds-brand__name\">chronoskin</span></a>\n  </div>\n  <form class=\"ds-nav__search\" action=\"#\">\n    <input class=\"ds-nav__input\" type=\"text\" placeholder=\"Search the guide\" aria-label=\"Search the guide\">\n  </form>\n  <ul class=\"ds-nav__links\">\n    <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#home\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M2 8l6-5 6 5M4 7v6h8V7\"/></svg>Overview</a></li>\n    <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#guide\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 2.5h8a2 2 0 0 1 2 2v9H5a2 2 0 0 1-2-2zM6 6h4M6 9h4\"/></svg>Guides</a>\n      <ul class=\"ds-nav__sub\">\n        <li><a class=\"ds-nav__sublink\" href=\"#guide\">Your first gadget</a></li>\n        <li><a class=\"ds-nav__sublink\" href=\"#guide\">Settings and storage</a></li>\n        <li><a class=\"ds-nav__sublink\" href=\"#guide\">Drawing on glass</a></li>\n        <li><a class=\"ds-nav__sublink\" href=\"#guide\">Packing it up</a></li>\n      </ul>\n    </li>\n    <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#reference\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5.5 4L2 8l3.5 4M10.5 4L14 8l-3.5 4\"/></svg>Reference</a>\n      <ul class=\"ds-nav__sub\">\n        <li><a class=\"ds-nav__sublink\" href=\"#reference\">Objects</a></li>\n        <li><a class=\"ds-nav__sublink\" href=\"#reference\">Events</a></li>\n        <li><a class=\"ds-nav__sublink\" href=\"#reference\">Settings file</a></li>\n      </ul>\n    </li>\n    <li class=\"ds-nav__item\"><a class=\"ds-nav__link\" href=\"#submit\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 11V3M4.5 6L8 2.5 11.5 6M3 13h10\"/></svg>Submit a gadget</a>\n      <ul class=\"ds-nav__sub\">\n        <li><a class=\"ds-nav__sublink\" href=\"#submit\">Send a gadget</a></li>\n        <li><a class=\"ds-nav__sublink\" href=\"#submit\">Gallery rules</a></li>\n      </ul>\n    </li>\n  </ul>\n  <p class=\"ds-nav__label\">Samples in the kit</p>\n  <ul class=\"ds-nav__sub ds-nav__sub--plain\">\n    <li><a class=\"ds-nav__sublink\" href=\"#guide\">Hello clock</a></li>\n    <li><a class=\"ds-nav__sublink\" href=\"#guide\">Five day weather</a></li>\n    <li><a class=\"ds-nav__sublink\" href=\"#guide\">Sticky note</a></li>\n    <li><a class=\"ds-nav__sublink\" href=\"#guide\">Picture frame</a></li>\n    <li><a class=\"ds-nav__sublink\" href=\"#guide\">Feed reader</a></li>\n  </ul>\n  <div class=\"ds-nav__foot\">\n    <p class=\"ds-nav__note\"><span class=\"ds-nav__version\">Kit 2.1</span>Released 18 March, 6 MB, for every edition of chronoskin Desktop.</p>\n    <a class=\"ds-button ds-button--block\" href=\"#guide\">Download the kit</a>\n  </div>\n</header>\n\n<div class=\"ds-page__content\">\n<div class=\"ds-page__sheet\">\n\n  <section class=\"ds-view ds-view--home\" id=\"home\">\n\n    <div class=\"ds-hero\" data-component=\"hero\">\n      <div class=\"ds-hero__main\">\n        <h1 class=\"ds-hero__title\">Build a desktop gadget in an afternoon</h1>\n        <p class=\"ds-hero__lead\">A gadget is one small page and a settings file. The chronoskin Gadget Kit gives you the glass, the clock and the storage; you bring the idea.</p>\n        <p class=\"ds-hero__action\">\n          <a class=\"ds-button ds-button--large\" href=\"#guide\">Start the first guide <svg class=\"ds-button__icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 8h9M8.5 4l4 4-4 4\"/></svg></a>\n          <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#reference\">Browse the reference</a>\n        </p>\n        <p class=\"ds-hero__note\">Free to use. You need a text editor and twenty minutes.</p>\n      </div>\n      <div class=\"ds-hero__window\">\n        <p class=\"ds-hero__window-bar\"><span>hello.gadget</span><span class=\"ds-badge\">12 lines</span></p>\n<pre class=\"ds-hero__code\"><span class=\"ds-hero__code-note\">// a clock that says hello</span>\n<span class=\"ds-hero__code-key\">gadget</span>.title = \"Hello\";\n<span class=\"ds-hero__code-key\">gadget</span>.size(130, 130);\n\n<span class=\"ds-hero__code-key\">clock</span>.every(\"minute\", function () {\n  face.text = clock.time(\"HH:mm\");\n  face.glow = clock.isNight();\n});\n\n<span class=\"ds-hero__code-key\">gadget</span>.show();</pre>\n      </div>\n    </div>\n\n    <div class=\"ds-page__body\">\n\n      <ul class=\"ds-stats\" data-component=\"stats\">\n        <li class=\"ds-stat\"><span class=\"ds-stat__number\">3,840</span><span class=\"ds-stat__label\">gadgets in the gallery</span></li>\n        <li class=\"ds-stat\"><span class=\"ds-stat__number\">46</span><span class=\"ds-stat__label\">guides and samples</span></li>\n        <li class=\"ds-stat\"><span class=\"ds-stat__number\">212</span><span class=\"ds-stat__label\">members in the reference</span></li>\n        <li class=\"ds-stat\"><span class=\"ds-stat__number\">2 days</span><span class=\"ds-stat__label\">to review a submission</span></li>\n      </ul>\n\n      <h2 class=\"ds-section__title\">Start here</h2>\n      <div class=\"ds-grid\" data-component=\"grid\">\n        <div class=\"ds-grid__cell ds-grid__cell--1\">\n          <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\"/></svg></span>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--title\" href=\"#guide\">Your first gadget</a></h3>\n            <p class=\"ds-grid__text\">From an empty folder to a clock on the desktop.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <span class=\"ds-grid__icon ds-grid__icon--bar\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 7h16M4 12h16M4 17h16M9 5v4M15 10v4M7 15v4\"/></svg></span>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--title\" href=\"#guide\">Settings and storage</a></h3>\n            <p class=\"ds-grid__text\">Remember what the owner chose, between restarts.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--3\">\n          <span class=\"ds-grid__icon ds-grid__icon--accent\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"3\"/><path d=\"M4 10h16\"/></svg></span>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--title\" href=\"#guide\">Drawing on glass</a></h3>\n            <p class=\"ds-grid__text\">Blur, glow and reflection without a single picture.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--4\">\n          <span class=\"ds-grid__icon ds-grid__icon--alt\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3v4M12 17v4M3 12h4M17 12h4\"/><circle cx=\"12\" cy=\"12\" r=\"4\"/></svg></span>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--title\" href=\"#reference\">Clock and weather</a></h3>\n            <p class=\"ds-grid__text\">The two feeds every gadget may read for free.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--2\">\n          <span class=\"ds-grid__icon ds-grid__icon--accent\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 6L3 12l5 6M16 6l5 6-5 6\"/></svg></span>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--title\" href=\"#reference\">Objects and events</a></h3>\n            <p class=\"ds-grid__text\">Every member, with the version it arrived in.</p>\n          </div>\n        </div>\n        <div class=\"ds-grid__cell ds-grid__cell--1\">\n          <span class=\"ds-grid__icon ds-grid__icon--bar\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 16V5M7.5 9.5L12 5l4.5 4.5M5 19h14\"/></svg></span>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--title\" href=\"#submit\">Into the gallery</a></h3>\n            <p class=\"ds-grid__text\">Pack it, send it, and what the reviewers look for.</p>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-section\">\n        <div class=\"ds-page__columns\">\n          <main class=\"ds-page__main\">\n            <h2 class=\"ds-section__title\">Recently updated</h2>\n            <ul class=\"ds-list\" data-component=\"list\">\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__mark\" aria-hidden=\"true\"></span>\n                <div class=\"ds-list__body\">\n                  <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#guide\">Your first gadget, rewritten for kit 2.1</a> <span class=\"ds-badge ds-badge--new\">New</span></h3>\n                  <p class=\"ds-list__text\">Shorter by a third, and the sample now starts with a double click.</p>\n                  <p class=\"ds-list__meta\">Guide, updated 18 March, 9 minutes to read</p>\n                </div>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__mark\" aria-hidden=\"true\"></span>\n                <div class=\"ds-list__body\">\n                  <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#reference\">The storage object gains a size limit</a></h3>\n                  <p class=\"ds-list__text\">Each gadget may now keep 2 MB; older gadgets are not affected.</p>\n                  <p class=\"ds-list__meta\">Reference, updated 11 March, 3 minutes to read</p>\n                </div>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__mark\" aria-hidden=\"true\"></span>\n                <div class=\"ds-list__body\">\n                  <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title is-visited\" href=\"#guide\">Drawing a reflection under a picture</a></h3>\n                  <p class=\"ds-list__text\">Four lines that flip, fade and blur whatever stands above them.</p>\n                  <p class=\"ds-list__meta\">Guide, updated 2 March, 6 minutes to read</p>\n                </div>\n              </li>\n              <li class=\"ds-list__item\">\n                <span class=\"ds-list__mark\" aria-hidden=\"true\"></span>\n                <div class=\"ds-list__body\">\n                  <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#submit\">What the gallery reviewers check</a></h3>\n                  <p class=\"ds-list__text\">A plain list of the seven reasons a gadget is sent back.</p>\n                  <p class=\"ds-list__meta\">Gallery, updated 24 February, 4 minutes to read</p>\n                </div>\n              </li>\n            </ul>\n          </main>\n          <aside class=\"ds-page__aside\">\n<div class=\"ds-panel\">\n<h2 class=\"ds-panel__title\">Kit download</h2>\n<div class=\"ds-panel__body\">\n<div class=\"ds-progress__row\"><span class=\"ds-progress__label\">Gadget kit</span><progress class=\"ds-progress\" value=\"84\" max=\"100\">84%</progress><span class=\"ds-progress__value\">84%</span></div>\n<p class=\"ds-progress__note\">1.4 MB, nearly there.</p>\n</div>\n</div>\n\n            <div class=\"ds-panel\" data-component=\"panel\">\n              <h2 class=\"ds-panel__title\">What is in the kit</h2>\n              <div class=\"ds-panel__body\">\n                <ul class=\"ds-panel__facts\">\n                  <li class=\"ds-panel__fact\"><span class=\"ds-panel__fact-name\">Version</span><span>2.1</span></li>\n                  <li class=\"ds-panel__fact\"><span class=\"ds-panel__fact-name\">Samples</span><span>14 gadgets</span></li>\n                  <li class=\"ds-panel__fact\"><span class=\"ds-panel__fact-name\">Preview tool</span><span>Included</span></li>\n                  <li class=\"ds-panel__fact\"><span class=\"ds-panel__fact-name\">Size</span><span>6 MB</span></li>\n                </ul>\n                <p class=\"ds-panel__actions\"><a class=\"ds-button ds-button--secondary\" href=\"#guide\">Release notes</a></p>\n              </div>\n            </div>\n            <div class=\"ds-sidebar is-last\" data-component=\"sidebar\">\n              <h2 class=\"ds-sidebar__title\">Most read in the reference</h2>\n              <ul class=\"ds-sidebar__list\">\n                <li class=\"ds-sidebar__item is-current\"><a class=\"ds-link ds-link--quiet\" href=\"#reference\">gadget</a><span class=\"ds-sidebar__count\">31 members</span></li>\n                <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#reference\">clock</a><span class=\"ds-sidebar__count\">12</span></li>\n                <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#reference\">storage</a><span class=\"ds-sidebar__count\">9</span></li>\n                <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#reference\">weather</a><span class=\"ds-sidebar__count\">17</span></li>\n              </ul>\n            </div>\n          </aside>\n        </div>\n      </div>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"guide\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Overview</a></li>\n        <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&rsaquo;</li>\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Guides</a></li>\n        <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&rsaquo;</li>\n        <li class=\"ds-breadcrumb__current\">Your first gadget</li>\n      </ol>\n      <div class=\"ds-page-header\" data-component=\"page-header\">\n        <div class=\"ds-page-header__main\">\n          <p class=\"ds-page-header__title\">Guides: getting started</p>\n          <p class=\"ds-page-header__text\">Part 1 of 4. Written for kit 2.1, nine minutes to read.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#guide\">Download the sample</a>\n        </div>\n      </div>\n      <div class=\"ds-page__columns\">\n        <main class=\"ds-page__main\">\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#guide\">Guide</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#guide\">Sample code</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#guide\">Questions (12)</a></li>\n          </ul>\n          <div class=\"ds-prose\" data-component=\"typography\">\n            <h1>Your first gadget</h1>\n            <p>A gadget is a folder with two files in it: a page that draws the gadget and a settings file that tells the desktop its name and size. This guide builds a small clock and puts it on the desktop. Nothing has to be installed except the kit.</p>\n            <h2>Make the folder</h2>\n            <p>Create a folder called <code>hello.gadget</code> anywhere you like. The ending matters: the desktop treats every folder that ends in <code>.gadget</code> as one gadget.</p>\n            <ul>\n              <li><code>gadget.page</code> holds what the gadget shows.</li>\n              <li><code>gadget.settings</code> holds its name, its size and what it may read.</li>\n              <li>Anything else in the folder, such as sounds, is packed along with it.</li>\n            </ul>\n            <h2>Say hello</h2>\n            <p>Open <code>gadget.page</code> in a text editor and type the lines below. The <strong>clock</strong> object calls your function once a minute, so the gadget never has to ask for the time itself.</p>\n<pre class=\"ds-code\">gadget.title = \"Hello\";\ngadget.size(130, 130);\n\nclock.every(\"minute\", function () {\n  face.text = clock.time(\"HH:mm\");\n});\n\ngadget.show();</pre>\n            <h3>Try it</h3>\n            <p>Double click the folder. The preview tool opens the gadget on a sheet of glass and reloads it every time you save. When the clock looks right, read on in <a href=\"#guide\">Settings and storage</a>.</p>\n          </div>\n        </main>\n        <aside class=\"ds-page__aside\">\n          <div class=\"ds-sidebar\">\n            <h2 class=\"ds-sidebar__title\">On this page</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item is-current\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Make the folder</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Say hello</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Try it</a></li>\n            </ul>\n          </div>\n          <div class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">In this series</h2>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-panel__facts\">\n                <li class=\"ds-panel__fact\"><span>1. Your first gadget</span><span class=\"ds-badge\">Here</span></li>\n                <li class=\"ds-panel__fact\"><a class=\"ds-link\" href=\"#guide\">2. Settings and storage</a></li>\n                <li class=\"ds-panel__fact\"><a class=\"ds-link\" href=\"#guide\">3. Drawing on glass</a></li>\n                <li class=\"ds-panel__fact\"><a class=\"ds-link\" href=\"#guide\">4. Packing it up</a></li>\n              </ul>\n            </div>\n          </div>\n          <div class=\"ds-panel is-last\">\n            <h2 class=\"ds-panel__title\">See also</h2>\n            <div class=\"ds-panel__body\">\n              <p class=\"ds-panel__text\">How a link looks at rest, once followed, under the pointer and while pressed.</p>\n              <p class=\"ds-links\" data-component=\"links\">\n                <a class=\"ds-link\" href=\"#reference\">The clock object</a>\n                <a class=\"ds-link is-visited\" href=\"#reference\">The gadget object</a>\n                <a class=\"ds-link is-hover\" href=\"#submit\">Submitting</a>\n                <a class=\"ds-link is-active\" href=\"#home\">Overview</a>\n              </p>\n            </div>\n          </div>\n        </aside>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"reference\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\">\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Overview</a></li>\n        <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&rsaquo;</li>\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#reference\">Reference</a></li>\n        <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&rsaquo;</li>\n        <li class=\"ds-breadcrumb__current\">Objects</li>\n      </ol>\n      <div class=\"ds-page-header\">\n        <div class=\"ds-page-header__main\">\n          <h1 class=\"ds-page-header__title\">Reference</h1>\n          <p class=\"ds-page-header__text\">Every object a gadget may use, with the kit version it arrived in.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#reference\">Printable version</a>\n          <a class=\"ds-button\" href=\"#guide\">Download the kit</a>\n        </div>\n      </div>\n      <ul class=\"ds-tabs\">\n        <li><a class=\"ds-tabs__tab is-current\" href=\"#reference\">Objects</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#reference\">Events</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#reference\">Settings file</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#reference\">Removed</a></li>\n      </ul>\n      <table class=\"ds-table\" data-component=\"table\">\n        <thead>\n          <tr>\n            <th class=\"ds-table__head\" scope=\"col\">Object</th>\n            <th class=\"ds-table__head\" scope=\"col\">What it is for</th>\n            <th class=\"ds-table__head is-numeric\" scope=\"col\">Members</th>\n            <th class=\"ds-table__head is-numeric\" scope=\"col\">Since</th>\n            <th class=\"ds-table__head\" scope=\"col\">State</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr class=\"ds-table__row\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link ds-link--code\" href=\"#reference\">gadget</a></td>\n            <td class=\"ds-table__cell\">The gadget itself: title, size, showing and hiding.<span class=\"ds-table__note\">Every gadget uses it.</span></td>\n            <td class=\"ds-table__cell is-numeric\">31</td>\n            <td class=\"ds-table__cell is-numeric\">1.0</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">Stable</span></td>\n          </tr>\n          <tr class=\"ds-table__row is-alt\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link ds-link--code\" href=\"#reference\">clock</a></td>\n            <td class=\"ds-table__cell\">The time, the date and calls at a steady interval.</td>\n            <td class=\"ds-table__cell is-numeric\">12</td>\n            <td class=\"ds-table__cell is-numeric\">1.0</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">Stable</span></td>\n          </tr>\n          <tr class=\"ds-table__row\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link ds-link--code\" href=\"#reference\">storage</a></td>\n            <td class=\"ds-table__cell\">Small values kept between restarts.<span class=\"ds-table__note\">Limited to 2 MB from kit 2.1.</span></td>\n            <td class=\"ds-table__cell is-numeric\">9</td>\n            <td class=\"ds-table__cell is-numeric\">1.2</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--warning\">Changed</span></td>\n          </tr>\n          <tr class=\"ds-table__row is-alt\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link ds-link--code\" href=\"#reference\">weather</a></td>\n            <td class=\"ds-table__cell\">Today and four days ahead for the owner's town.</td>\n            <td class=\"ds-table__cell is-numeric\">17</td>\n            <td class=\"ds-table__cell is-numeric\">2.0</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">Stable</span></td>\n          </tr>\n          <tr class=\"ds-table__row\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link ds-link--code\" href=\"#reference\">glass</a></td>\n            <td class=\"ds-table__cell\">Blur, glow and reflection for any part of the page.</td>\n            <td class=\"ds-table__cell is-numeric\">8</td>\n            <td class=\"ds-table__cell is-numeric\">2.1</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge\">New in 2.1</span></td>\n          </tr>\n          <tr class=\"ds-table__row is-alt\">\n            <td class=\"ds-table__cell\"><a class=\"ds-link ds-link--code is-visited\" href=\"#reference\">ticker</a></td>\n            <td class=\"ds-table__cell\">Scrolling text along the lower edge.<span class=\"ds-table__note\">Use the clock and a text field instead.</span></td>\n            <td class=\"ds-table__cell is-numeric\">5</td>\n            <td class=\"ds-table__cell is-numeric\">1.0</td>\n            <td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--danger\">Removed</span></td>\n          </tr>\n        </tbody>\n      </table>\n      <div class=\"ds-table__foot\">\n        <p class=\"ds-badges\" data-component=\"badge\">\n          <span class=\"ds-badge\">New in 2.1</span>\n          <span class=\"ds-badge ds-badge--success\">Stable</span>\n          <span class=\"ds-badge ds-badge--warning\">Changed</span>\n          <span class=\"ds-badge ds-badge--danger\">Removed</span>\n          <span class=\"ds-badge ds-badge--count\">6 of 23 objects</span>\n        </p>\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li class=\"ds-pagination__item\"><span class=\"ds-pagination__link is-disabled\">Previous</span></li>\n          <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link is-current\" href=\"#reference\">1</a></li>\n          <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reference\">2</a></li>\n          <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reference\">3</a></li>\n          <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reference\">4</a></li>\n          <li class=\"ds-pagination__item\"><a class=\"ds-pagination__link\" href=\"#reference\">Next</a></li>\n        </ul>\n      </div>\n      <div class=\"ds-section\">\n        <div class=\"ds-page__columns\">\n          <main class=\"ds-page__main\">\n            <h2 class=\"ds-section__title\">Reading an entry <span class=\"ds-tooltip\"><span class=\"ds-tooltip__trigger\" tabindex=\"0\">?</span><span class=\"ds-tooltip__text\" role=\"tooltip\">Entries are listed in alphabetical order.</span></span></h2>\n            <div class=\"ds-prose\">\n              <p>Each object has a page of its own that lists its members in the order you are likely to need them. <strong>Since</strong> is the first kit version that had the object; a gadget that names a newer object will not start on an older desktop, so set <code>needs</code> in the settings file to match.</p>\n            </div>\n<div class=\"ds-section\">\n<h2 class=\"ds-section__title\">Common questions</h2>\n<div class=\"ds-accordion\">\n<details class=\"ds-accordion__item\" open><summary class=\"ds-accordion__head\">Which file draws the gadget?</summary><div class=\"ds-accordion__body\"><p>The page file named in the settings file.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">Can a gadget run in the background?</summary><div class=\"ds-accordion__body\"><p>No. It runs only while it is on the desktop.</p></div></details>\n</div>\n</div>\n          </main>\n          <aside class=\"ds-page__aside\">\n            <div class=\"ds-empty\" data-component=\"empty\">\n              <span class=\"ds-empty__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 4h10v16l-5-4-5 4z\"/></svg></span>\n              <h2 class=\"ds-empty__title\">No bookmarks yet</h2>\n              <p class=\"ds-empty__text\">Mark an object and it stays here for next time.</p>\n              <a class=\"ds-button ds-button--secondary\" href=\"#reference\">Bookmark this page</a>\n            </div>\n          </aside>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"submit\">\n    <div class=\"ds-page__body\">\n      <ol class=\"ds-breadcrumb\">\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#home\">Overview</a></li>\n        <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&rsaquo;</li>\n        <li><a class=\"ds-link ds-link--quiet\" href=\"#submit\">Gallery</a></li>\n        <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&rsaquo;</li>\n        <li class=\"ds-breadcrumb__current\">Submit a gadget</li>\n      </ol>\n      <div class=\"ds-page-header\">\n        <div class=\"ds-page-header__main\">\n          <h1 class=\"ds-page-header__title\">Submit a gadget</h1>\n          <p class=\"ds-page-header__text\">Send a packed gadget to the gallery. A reviewer answers within two working days.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#guide\">How to pack a gadget</a>\n        </div>\n      </div>\n      <div class=\"ds-page__columns\">\n        <main class=\"ds-page__main\">\n          <div data-component=\"notice\">\n            <div class=\"ds-notice\">\n              <span class=\"ds-notice__sign\" aria-hidden=\"true\">i</span>\n              <p class=\"ds-notice__text\"><span class=\"ds-notice__title\">Your draft is saved.</span> You can close this page and come back to it within thirty days.</p>\n            </div>\n            <div class=\"ds-notice ds-notice--error\">\n              <span class=\"ds-notice__sign\" aria-hidden=\"true\">!</span>\n              <p class=\"ds-notice__text\"><span class=\"ds-notice__title\">One field needs another look.</span> The version number below is not one the gallery can read.</p>\n            </div>\n          </div>\n          <form class=\"ds-form\" data-component=\"form\" action=\"#\">\n            <div class=\"ds-form__pair\">\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"s-name\">Name of the gadget</label>\n                <input class=\"ds-form__input\" id=\"s-name\" type=\"text\" value=\"Hello clock\">\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"s-version\">Version</label>\n                <input class=\"ds-form__input is-error\" id=\"s-version\" type=\"text\" value=\"one point two\">\n                <p class=\"ds-form__error\">Write the version as numbers, for example 1.2.</p>\n              </div>\n            </div>\n            <div class=\"ds-form__pair\">\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"s-shelf\">Shelf in the gallery</label>\n                <select class=\"ds-form__select\" id=\"s-shelf\">\n                  <option>Clocks and calendars</option>\n                  <option>Weather</option>\n                  <option>News and feeds</option>\n                  <option>Games</option>\n                </select>\n              </div>\n              <div class=\"ds-form__row\">\n                <label class=\"ds-form__label\" for=\"s-needs\">Needs kit</label>\n                <input class=\"ds-form__input is-disabled\" id=\"s-needs\" type=\"text\" value=\"2.1 (read from the file)\" disabled>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__label\" for=\"s-about\">What it does</label>\n              <textarea class=\"ds-form__textarea\" id=\"s-about\">A round clock that greets you by the time of day and glows after dark.</textarea>\n              <p class=\"ds-form__hint\">Two or three sentences. This is the text people see in the gallery.</p>\n            </div>\n            <div class=\"ds-form__row\">\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> I wrote this gadget, or I may share it on behalf of the people who did.</label>\n            </div>\n            <div class=\"ds-form__actions\" data-component=\"buttons\">\n              <button class=\"ds-button\" type=\"button\">Send for review</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Save the draft</button>\n              <button class=\"ds-button is-disabled\" type=\"button\" disabled>Preview</button>\n              <a class=\"ds-button ds-button--danger\" href=\"#submit\">Discard the draft</a>\n            </div>\n          </form>\n        </main>\n        <aside class=\"ds-page__aside\">\n          <div class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Before you send</h2>\n            <div class=\"ds-panel__body\">\n              <ul class=\"ds-panel__facts\">\n                <li class=\"ds-panel__fact\"><span>Starts without errors</span><span class=\"ds-badge ds-badge--success\">Yes</span></li>\n                <li class=\"ds-panel__fact\"><span>Under 2 MB packed</span><span class=\"ds-badge ds-badge--success\">Yes</span></li>\n                <li class=\"ds-panel__fact\"><span>Has a picture</span><span class=\"ds-badge ds-badge--warning\">Missing</span></li>\n              </ul>\n              <p class=\"ds-panel__text is-last\">The preview tool runs these checks each time you pack.</p>\n            </div>\n          </div>\n          <div class=\"ds-sidebar is-last\">\n            <h2 class=\"ds-sidebar__title\">Gallery rules</h2>\n            <ul class=\"ds-sidebar__list\">\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">What the reviewers check</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Names and pictures</a></li>\n              <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Sending an update</a></li>\n            </ul>\n          </div>\n        </aside>\n      </div>\n      <div class=\"ds-dialog__backdrop\">\n        <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"s-dialog-title\">\n          <h2 class=\"ds-dialog__title\" id=\"s-dialog-title\">Discard the draft? <a class=\"ds-dialog__close\" href=\"#submit\" aria-label=\"Close\"></a></h2>\n          <div class=\"ds-dialog__body\">\n            <p class=\"ds-dialog__text\">The packed gadget and everything you typed on this page will be removed from the gallery. The folder on your computer is not touched.</p>\n          </div>\n          <div class=\"ds-dialog__actions\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#submit\">Keep the draft</a>\n            <a class=\"ds-button ds-button--danger\" href=\"#home\">Discard</a>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n\n</div>\n</div>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\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=\"#guide\">Guides</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#reference\">Reference</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#submit\">Submit a gadget</a></li>\n  </ul>\n  <p class=\"ds-footer__legal\">chronoskin Gadget Kit 2.1. Samples may be copied into your own gadgets.</p>\n</footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.frutiger-aero.docs.s07.p02.t02.u08\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"frutiger-aero\",\n    \"years\": [\n      2004,\n      2010\n    ]\n  },\n  \"archetype\": \"docs\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1024,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-fa-7228\",\n  \"short\": \"v1-fa-7228\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #060c1a;\n  --color-canvas: #0b1526;\n  --color-surface: #101c33;\n  --color-surface-alt: #162740;\n  --color-surface-strong: #203552;\n  --color-bar: #181818;\n  --color-bar-text: #eef6ff;\n  --color-bar-alt: #1b3d6b;\n  --color-bar-alt-text: #d4e9ff;\n  --color-inverse: #123c8f;\n  --color-inverse-text: #ffffff;\n  --color-text: #c9d6e6;\n  --color-text-muted: #989898;\n  --color-heading: #ffffff;\n  --color-heading-alt: #62d8ff;\n  --color-link: #62c8ff;\n  --color-link-quiet: #a3b8cf;\n  --color-link-visited: #b59cff;\n  --color-link-hover: #a8ecff;\n  --color-link-active: #ffffff;\n  --color-border: #2a4466;\n  --color-border-strong: #4d7fb3;\n  --color-border-muted: #1c2f4a;\n  --color-accent: #19c2f0;\n  --color-accent-text: #03131f;\n  --color-accent-alt: #c86bff;\n  --color-fill-1: #10305e;\n  --color-fill-2: #0d3a55;\n  --color-fill-3: #2a1d5c;\n  --color-fill-4: #123f3a;\n  --color-button: #0f8fd0;\n  --color-button-text: #ffffff;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #26374f;\n  --color-button-secondary-text: #dcecff;\n  --color-input: #060d1a;\n  --color-input-text: #e6f1ff;\n  --color-input-border: #35557d;\n  --color-disabled: #1a2434;\n  --color-disabled-text: #5d6d82;\n  --color-danger: #e0483c;\n  --color-danger-surface: #3a1418;\n  --color-success: #2fa84a;\n  --color-warning: #f2b31c;\n  --color-notice: #132c4a;\n  --color-notice-text: #d4e9ff;\n  --color-focus: #5fe6ff;\n  --color-shadow: #000000;\n  --color-overlay: rgba(0, 0, 0, 0.6);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Geneva, Verdana, sans-serif;\n  --font-heading: \"Gill Sans\", \"Gill Sans MT\", \"Trebuchet MS\", sans-serif;\n  --font-ui: \"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Geneva, Verdana, sans-serif;\n  --font-mono: Monaco, \"Lucida Console\", monospace;\n  --text-base: 12px;\n  --text-small: 10px;\n  --text-ui: 12px;\n  --text-large: 16px;\n  --text-display: 40px;\n  --text-h1: 26px;\n  --text-h2: 18px;\n  --text-h3: 14px;\n  --line-body: 1.5;\n  --line-heading: 1.2;\n  --line-display: 1.1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 600;\n  --weight-display: 600;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: -0.5px;\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: 3px;\n  --border-style: solid;\n  --radius-control: 2px;\n  --radius-panel: 3px;\n  --radius-pill: 2px;\n  --radius-page: 4px;\n  --shadow-panel: inset 0 0 0 1px color-mix(in srgb, white 65%, transparent), 0 9px 7px -7px color-mix(in srgb, var(--color-shadow) 45%, transparent);\n  --shadow-control: inset 0 1px 0 color-mix(in srgb, white 75%, transparent), 0 2px 0 -1px color-mix(in srgb, var(--color-shadow) 35%, transparent);\n  --shadow-control-hover: inset 0 1px 0 color-mix(in srgb, white 90%, transparent), inset 0 0 0 1px color-mix(in srgb, var(--color-focus) 90%, transparent), 0 0 5px color-mix(in srgb, var(--color-focus) 70%, transparent);\n  --shadow-control-pressed: inset 0 1px 4px color-mix(in srgb, var(--color-shadow) 50%, transparent);\n  --shadow-dialog: 0 0 0 1px color-mix(in srgb, white 50%, transparent), 0 18px 16px -10px color-mix(in srgb, var(--color-shadow) 55%, transparent), 0 2px 20px color-mix(in srgb, var(--color-shadow) 30%, transparent);\n  --shadow-text: 1px 1px 0 color-mix(in srgb, var(--color-shadow) 45%, transparent);\n  --fill-page: linear-gradient(115deg, transparent 0, transparent 28%, color-mix(in srgb, white 11%, transparent) 28%, color-mix(in srgb, white 11%, transparent) 41%, transparent 41%, transparent 56%, color-mix(in srgb, white 7%, transparent) 56%, color-mix(in srgb, white 7%, transparent) 61%, transparent 61%) 0 0 / 100% 620px no-repeat, radial-gradient(ellipse 80% 340px at 50% 0, color-mix(in srgb, white 50%, transparent) 0, transparent 100%) 0 0 / 100% 340px no-repeat, linear-gradient(to bottom, var(--color-page) 0, color-mix(in srgb, var(--color-page), black 14%) 520px, color-mix(in srgb, var(--color-page), white 34%) 1300px) 0 0 / 100% 1300px no-repeat, color-mix(in srgb, var(--color-page), white 34%);\n  --fill-bar: linear-gradient(to bottom, color-mix(in srgb, white 45%, transparent) 0, transparent 2px), linear-gradient(to bottom, color-mix(in srgb, var(--color-bar), white 34%) 0, var(--color-bar) 46%, color-mix(in srgb, var(--color-bar), black 20%) 100%);\n  --fill-bar-alt: linear-gradient(to bottom, color-mix(in srgb, var(--color-bar-alt), white 70%) 0, var(--color-bar-alt) 100%);\n  --fill-inverse: linear-gradient(115deg, transparent 0, transparent 52%, color-mix(in srgb, white 10%, transparent) 52%, color-mix(in srgb, white 10%, transparent) 64%, transparent 64%, transparent 70%, color-mix(in srgb, white 6%, transparent) 70%, color-mix(in srgb, white 6%, transparent) 73%, transparent 73%), linear-gradient(to bottom, color-mix(in srgb, var(--color-inverse), white 16%) 0, var(--color-inverse) 55%, color-mix(in srgb, var(--color-inverse), black 25%) 100%);\n  --fill-accent: linear-gradient(to bottom, color-mix(in srgb, var(--color-accent), white 35%) 0, var(--color-accent) 50%, color-mix(in srgb, var(--color-accent), black 12%) 100%);\n  --fill-panel: linear-gradient(to bottom, var(--color-surface) 0, var(--color-surface) 60%, var(--color-surface-alt) 100%);\n  --fill-button: linear-gradient(to bottom, color-mix(in srgb, var(--color-button), white 45%) 0, color-mix(in srgb, var(--color-button), white 8%) 45%, color-mix(in srgb, var(--color-button), black 14%) 100%);\n  --fill-button-hover: linear-gradient(to bottom, color-mix(in srgb, var(--color-button), white 60%) 0, color-mix(in srgb, var(--color-button), white 22%) 45%, var(--color-button) 100%);\n  --fill-button-secondary: linear-gradient(to bottom, color-mix(in srgb, var(--color-button-secondary), white 85%) 0, var(--color-button-secondary) 55%, color-mix(in srgb, var(--color-button-secondary), black 8%) 100%);\n  --fill-input: linear-gradient(to bottom, var(--color-input) 0, var(--color-input) 60%, var(--color-surface-alt) 100%);\n  --focus-ring: 1px dotted var(--color-text);\n  --transition: none;\n  --backdrop-blur: 0px;\n}\n"
  }
}
