{
  "id": "v1-fa-2222",
  "long_id": "v1.frutiger-aero.portal.s02.p02.t02.u02",
  "name": "Frutiger Aero start page",
  "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": "portal",
  "mode": "pure",
  "viewport": {
    "width": 1024,
    "fluid": false
  },
  "summary": "A fixed-width personal start page in the dark-glass variety of the Frutiger Aero look: a night-blue page lit by cyan and violet aurora glows, a black glass bar, a search band with one glowing field, and three columns of glass gadgets for news, mail, weather and markets. Portals and start pages of this kind were common from about 2005 to 2010, when every provider let visitors arrange small windows of content. The gadgets are translucent panels with a lit top edge and a deep soft shadow, buttons are capsule-shaped gels with a halo, and the type pairs a small Lucida body with heavier Gill Sans headings.",
  "url": "https://chrono.skin/s/v1-fa-2222",
  "preview_url": "https://chrono.skin/s/v1-fa-2222/specimen.html",
  "files": {
    "STYLE.md": "# Frutiger Aero start page\n\n## Summary\n\nA fixed-width personal start page in the dark-glass variety of the Frutiger Aero look: a night-blue page lit by cyan and violet aurora glows, a black glass bar, a search band with one glowing field, and three columns of glass gadgets for news, mail, weather and markets. Portals and start pages of this kind were common from about 2005 to 2010, when every provider let visitors arrange small windows of content. The gadgets are translucent panels with a lit top edge and a deep soft shadow, buttons are capsule-shaped gels with a halo, and the type pairs a small Lucida body with heavier Gill Sans headings.\n\n## Layout\n\n- Page width is fixed: `--size-page` = 980px, centred in a 1024px window. It does not stretch and does not reflow for phones.\n- The header and the footer span the window; their content sits in a centred `--size-page` box (`.ds-nav__inner`, `.ds-footer__legal-text`). The header is two strips: a small-print strip of `--size-top` (24px) and the glass bar of `--size-nav` (36px).\n- Everything else sits in `.ds-page__wrap`, one translucent sheet (90% `--color-canvas`) that hangs from the bar: no top border, `--radius-page` on the two lower corners, 14px padding. Inside it the content is 950px wide.\n- The home page is the search band (`.ds-hero`) and under it `.ds-page__gadgets`, three columns in the proportion 1.3 to 1 to 1 with `--space-5` (14px) between columns and between the gadgets of a column. Each `.ds-page__column` is a stack of `.ds-panel` gadgets; the last block of a column may be a `.ds-sidebar`.\n- Spacing scale (dense): `--space-1` 2px (hairline gaps), `--space-2` 4px (list row padding, gadget head padding), `--space-3` 6px (gaps between buttons, between grid tiles and forecast tiles), `--space-4` 10px (gadget body padding, control padding, cell padding), `--space-5` 14px (gutter, sheet padding, gap between stacked blocks), `--space-6` 20px (hero padding, gap between main and side column, gap between sections; the largest gap).\n- Fixed sizes: controls `--size-control` 22px tall, the search field and its button `--size-control-large` 32px, the search form `--size-search` 420px, channel orbs `--size-orb` 26px, rank chips `--size-rank` 18px, form labels `--size-label` 140px, the dialog `--size-dialog` 400px.\n- Inner pages drop the search band and the three columns. In the sheet, top to bottom: `.ds-breadcrumb`, then `.ds-page-header` as a glass strip across the full width (title and one line on the left, buttons on the right), then `.ds-page__columns`: a main column (630px) and a right column of `--size-sidebar` (300px), 20px apart. `.ds-tabs` sit at the top of the main column above the list or table they switch; notices sit above the form; a dialog follows its table on a dimmed strip; the side column holds `.ds-sidebar` blocks, gadgets and at most one empty state.\n- Views: the specimen is one start page of five screens, each a `.ds-view` inside the sheet, with header and footer written once around them. `home` is the start page (search band, the News, Channels, Mail, Today, Weather and Markets gadgets, a block of gadgets to add). `news` is the news front (tabs, a roomy list, pagination, most read). `story` is one story (long text, onward links, a traffic gadget with status badges). `mail` is the inbox (the button row in the page header, folder tabs, the table, the deleting dialog, folders, the key to the states, an empty state for drafts). `settings` changes the start page (notices, the form, gadgets to add). Links are plain `href=\"#name\"`; the bar link of the showing view is lit by a `.ds-page:has(#name:target)` rule, the Start link also when no view is named, and the News link also on a story.\n\n## Typography and colour roles\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>`. Sets the page fill, base font and colour. `.ds-page__wrap` is the sheet; `.ds-page__gadgets` the three-column grid of the start page with `.ds-page__column` stacks; `.ds-page__columns` holds `.ds-page__main` and `.ds-page__aside` on inner pages. `.ds-section` with a cyan `.ds-section__title` separates blocks by 20px. `.ds-view` is one screen of the example site (`.ds-view--home` the first).\n- `.ds-nav`: the header, full window width. `.ds-nav__top` is the small-print strip (`.ds-nav__date`, right-aligned `.ds-nav__tools` of bold `.ds-nav__tool` links); `.ds-nav__bar` the glass bar; each wraps a `.ds-nav__inner`. The bar holds the `.ds-brand`, `.ds-nav__links` of bold `.ds-nav__link` pills (current: `is-current`, a lit translucent pill; hover: `is-hover`) and a right-aligned `.ds-nav__more` line with a `.ds-nav__more-link`.\n- `.ds-brand`: the site's mark and name at the left end of the bar, linking home; one per page. `.ds-brand__mark` is a round tile dressed like the primary button (`--fill-button`, a darker outline, `--shadow-control`) with the mark in `--color-button-text`; `.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 search band at the top of the start page: a rounded block in `--fill-inverse`. `.ds-hero__main` holds the greeting as `.ds-hero__title` (40px) and one `.ds-hero__lead` line; `.ds-hero__search` on the right holds `.ds-hero__scopes` (links `.ds-hero__scope`, current `is-current`), `.ds-hero__action` (the glowing `.ds-hero__field` and a `.ds-button--large`), and a `.ds-hero__note` of suggestions (`.ds-hero__note-link`). One per site, on the start page only.\n- `.ds-page-header`: the head of an inner page instead of the hero: a glass strip with `.ds-page-header__main` (`.ds-page-header__title`, 26px, the page's h1, and a grey `.ds-page-header__text` line) and `.ds-page-header__actions` at the right. One per inner page.\n- `.ds-panel`: the gadget (`is-last` on the last of a column): `.ds-panel__head` is a glass strip with `.ds-panel__title`, an optional badge and right-aligned `.ds-panel__tools` (small `.ds-panel__tool` links such as Edit and x); `.ds-panel__body` holds the content, `.ds-panel__text`, a `.ds-panel__actions` row of buttons, a `.ds-panel__go` row (a field and its button) or a `.ds-panel__more` link.\n- `.ds-stat`: one forecast tile; four sit in a `.ds-stats` row inside the Weather gadget. Each has a small `.ds-stat__label` (the day) over a 26px `.ds-stat__number` and a `.ds-stat__note`. `.ds-stats__place` above the row names the place, with `.ds-stats__now` for the current reading. Use the row for any three to five figures of one kind inside a gadget.\n- `.ds-grid`: channel tiles, four to a row (`.ds-grid--wide` for a single row in a side column). Each `.ds-grid__cell` is a link (`--1` to `--4` choose the tint it fades into; hover: `is-hover`) with a `.ds-orb` over its name. `.ds-orb` is a 26px glossy ball with a line icon: `--fill-bar` by default, `.ds-orb--accent`, `.ds-orb--button`.\n- `.ds-tabs`: a row of small pills over a hairline: `.ds-tabs__tab`, the current one `is-current` (a piece of the glass bar), `.ds-tabs__count` for a number. Inside a gadget or at the top of the main column.\n- `.ds-list`: tight headline list. Each `.ds-list__item` (first: `is-first`) starts with a round bullet, then `.ds-list__body` with `.ds-list__title` and an optional `.ds-list__text`, then a right-aligned `.ds-list__meta` (a time or a badge). `is-lead` makes the first headline a heading; `.ds-list--roomy` is the full-page form with heading-size titles and 10px rows.\n- `.ds-button`: the primary action: a blue gel capsule with a halo, white bold 12px, 22px tall. Variants: `.ds-button--secondary` (dark glass, the usual button), `.ds-button--danger` (red gel, only for deleting), `.ds-button--large` (32px, the search button), `.ds-button--arrow` (a round button holding only a `.ds-button__icon` arrow, before the link or after the field it belongs to). States `is-hover`, `is-active`, `is-focus`, `is-disabled`. `.ds-buttons` is a row; `.ds-buttons--bar` a toolbar. One primary button per gadget, form or dialog.\n- `.ds-sidebar`: a link block (`is-last` on the last of a column): `.ds-sidebar__title` on a glass strip, `.ds-sidebar__list` of `.ds-sidebar__item` rows (first: `is-first`) divided by hairlines, each with an optional `.ds-sidebar__rank` chip before the link and a right-aligned `.ds-sidebar__count`.\n- `.ds-prose`: long text: h1, h2 (in `--color-heading-alt` over a hairline), h3 (bold), p, ul, ol, code, strong and links inside it are styled. For articles and guides.\n- `.ds-link`: any link. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--title` is bold, for titles; `.ds-link--quiet` for minor links. `.ds-links` lays several out in a row.\n- `.ds-form`: label-left form: `.ds-form__row` with a right-aligned bold `.ds-form__label` and a `.ds-form__field` holding `.ds-form__input` (`--short` for half width), `.ds-form__select` or `.ds-form__textarea`; `.ds-form__hint` and `.ds-form__error` under a control; `is-error`, `is-focus` (a glow in `--color-focus`), `is-disabled` on the control; `.ds-form__check` with `.ds-form__checkbox`; `.ds-form__actions` for the buttons, under a hairline and aligned with the fields.\n- `.ds-table`: data table in a rounded 1px border with the panel shadow: `.ds-table__head` cells form a strip in `--fill-bar-alt`; `.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 in a cell.\n- `.ds-badge`: a small gel pill in `--fill-accent`. `.ds-badge--count` (flat, a number), `.ds-badge--new` (`--color-accent-alt`). Status variants: `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger`, one per row. `.ds-badges` lays several out in a row.\n- `.ds-notice`: a rounded one-line message with a round `.ds-notice__sign`, `.ds-notice__text` and a bold `.ds-notice__title`. Variant `.ds-notice--error`. Notices sit above the form or list they report on.\n- `.ds-pagination`: a row of small glass keys: `.ds-pagination__link`, `is-current` (the primary button's gel), `is-disabled`, `.ds-pagination__gap` for an ellipsis.\n- `.ds-breadcrumb`: a small trail of `.ds-link` items with `.ds-breadcrumb__sep` guillemets in `--color-heading-alt` and a bold `.ds-breadcrumb__current`.\n- `.ds-dialog`: a window: a glass frame in `--fill-bar` holding `.ds-dialog__title` (with a red `.ds-dialog__close`), a `.ds-dialog__body` in `--color-surface` with `.ds-dialog__text`, and a `.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, directly under the table or form that opened it.\n- `.ds-empty`: a pale well with a round glass `.ds-empty__orb` icon, `.ds-empty__title`, `.ds-empty__text` and one button.\n- `.ds-footer`: full window width: `.ds-footer__links`, a glass strip of centred small links (`.ds-footer__item`, first `is-first`, hairlines between, `.ds-footer__link`), then `.ds-footer__legal`, an aurora strip holding `.ds-footer__legal-text`, one centred page-width line of small print.\n\n## Never\n\n- `row-gap <= 20px`: list rows are divided by a hairline, not by space.\n- `block-gap <= 20px`: gadgets are 14px apart, sections at most 20px.\n- `content-width <= 980px`: text stays inside the fixed column.\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 <= 16px`: corners are 10, 13 or 16px; only orbs, bullets and pills are rounder.\n- `border-width <= 2px`: hairlines everywhere, 2px only around the dialog.\n- `box-shadow-blur <= 40px`: glows and drops are soft, the dialog's 40px is the deepest.\n- `gradient-fills <= 28%`: gloss belongs to bars, gadget heads, buttons, orbs, pills and tiles; 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. Anything that shows live content is a gadget: a `.ds-panel` with a head strip, tools and a body, placed in a column. A new bar is `--fill-bar`, a strip `--fill-bar-alt`, a band `--fill-inverse`; anything round and pressable is dressed like `.ds-orb` or `.ds-button--arrow`. Keep to the conventions above for which text token sits on which fill, give glossy fills an outline mixed from their colour and `--color-shadow`, take glows from `--color-focus`, and make any extra shade with `color-mix()` over existing tokens.\n",
    "components.css": ":root {\n  --size-page: 980px;\n  --size-sidebar: 300px;\n  --size-top: 24px;\n  --size-nav: 36px;\n  --size-search: 420px;\n  --size-mark: 22px;\n  --size-control: 22px;\n  --size-control-large: 32px;\n  --size-icon: 14px;\n  --size-orb: 26px;\n  --size-rank: 18px;\n  --size-glow: 10px;\n  --size-label: 140px;\n  --size-textarea: 64px;\n  --size-dialog: 400px;\n  --space-1: 2px;\n  --space-2: 4px;\n  --space-3: 6px;\n  --space-4: 10px;\n  --space-5: 14px;\n  --space-6: 20px;\n}\n\n/* shell: two full-width strips, then one sheet hanging from them, three columns of gadgets */\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  width: var(--size-page);\n  margin: 0 auto var(--space-6);\n  padding: var(--space-5) var(--space-5) var(--space-6);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-border-strong) 70%, transparent);\n  border-top: 0;\n  border-radius: 0 0 var(--radius-page) 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}\n.ds-page__gadgets {\n  display: grid;\n  grid-template-columns: 1.3fr 1fr 1fr;\n  align-items: start;\n  gap: var(--space-5);\n}\n.ds-page__column { min-width: 0; }\n.ds-page__columns {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-6);\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-sidebar);\n  width: var(--size-sidebar);\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-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\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: a pale strip of small print, then the glass bar with the brand and the channels */\n.ds-nav { margin: 0; }\n.ds-nav__top {\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-size: var(--text-small);\n}\n.ds-nav__bar {\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  box-shadow: var(--shadow-panel);\n  color: var(--color-bar-text);\n}\n.ds-nav__inner {\n  display: flex;\n  align-items: center;\n  gap: var(--space-5);\n  width: var(--size-page);\n  margin: 0 auto;\n  padding: 0 var(--space-5);\n}\n.ds-nav__top .ds-nav__inner { height: var(--size-top); }\n.ds-nav__bar .ds-nav__inner { height: var(--size-nav); }\n.ds-nav__date { margin: 0; }\n.ds-nav__tools {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  margin: 0 0 0 auto;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__tool {\n  color: var(--color-bar-alt-text);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-nav__tool:hover,\n.ds-nav__tool.is-hover { text-decoration: var(--link-decoration-hover); }\n.ds-nav__links {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-2) var(--space-4);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-pill);\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  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover { border-color: color-mix(in srgb, var(--color-bar-text) 45%, transparent); }\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(#news:target) .ds-nav__link[href=\"#news\"],\n.ds-page:has(#story:target) .ds-nav__link[href=\"#news\"],\n.ds-page:has(#mail:target) .ds-nav__link[href=\"#mail\"],\n.ds-page:has(#settings:target) .ds-nav__link[href=\"#settings\"] {\n  border-color: color-mix(in srgb, var(--color-bar-text) 45%, transparent);\n  background: color-mix(in srgb, var(--color-bar-text) 22%, transparent);\n  box-shadow: var(--shadow-control);\n}\n.ds-nav__more {\n  margin: 0 0 0 auto;\n  color: var(--color-bar-text);\n  font-size: var(--text-small);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__more-link {\n  color: var(--color-bar-text);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n\n/* hero: the search band; a greeting on the left, scopes and one glowing field on the right */\n.ds-hero {\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  margin: 0 0 var(--space-5);\n  padding: var(--space-5) var(--space-6);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse) 60%, var(--color-shadow));\n  border-radius: var(--radius-page);\n  background: var(--fill-inverse);\n  box-shadow: var(--shadow-panel);\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-2);\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;\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-hero__search {\n  flex: 0 0 var(--size-search);\n  width: var(--size-search);\n  margin: 0;\n}\n.ds-hero__scopes {\n  display: flex;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-3);\n  padding: 0 var(--space-4);\n  list-style: none;\n  font-size: var(--text-ui);\n}\n.ds-hero__scope {\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-hero__scope:hover,\n.ds-hero__scope.is-hover { text-decoration: var(--link-decoration-hover); }\n.ds-hero__scope.is-current { font-weight: var(--weight-bold); text-decoration: underline; }\n.ds-hero__action {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n}\n.ds-hero__field {\n  flex: 1 1 0;\n  min-width: 0;\n  height: var(--size-control-large);\n  margin: 0;\n  padding: 0 var(--space-5);\n  border: var(--border-width) var(--border-style) var(--color-focus);\n  border-radius: var(--radius-pill);\n  background: var(--fill-input);\n  box-shadow: 0 0 var(--size-glow) color-mix(in srgb, var(--color-focus) 90%, transparent), 0 0 calc(var(--size-glow) * 3) color-mix(in srgb, var(--color-focus) 45%, transparent);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-large);\n}\n.ds-hero__field:focus,\n.ds-hero__field.is-focus { outline: var(--focus-ring); }\n.ds-hero__note {\n  margin: var(--space-3) 0 0;\n  padding: 0 var(--space-4);\n  font-size: var(--text-small);\n  opacity: 0.9;\n}\n.ds-hero__note-link {\n  color: var(--color-inverse-text);\n  text-decoration: underline;\n}\n\n/* page header: head of an inner page, a glass strip across the sheet */\n.ds-page-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  margin: 0 0 var(--space-5);\n  padding: var(--space-4) var(--space-5);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--fill-panel);\n  box-shadow: var(--shadow-panel);\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-1) 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/* panel: the gadget; a glass title strip with small tools, then the body */\n.ds-panel {\n  margin: 0 0 var(--space-5);\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  overflow: hidden;\n}\n.ds-panel.is-last { margin-bottom: 0; }\n.ds-panel__head {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n}\n.ds-panel__title {\n  margin: 0;\n  color: var(--color-bar-alt-text);\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__tools {\n  display: flex;\n  gap: var(--space-3);\n  margin: 0 0 0 auto;\n  font-size: var(--text-small);\n}\n.ds-panel__tool {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-panel__tool:hover,\n.ds-panel__tool.is-hover { text-decoration: var(--link-decoration-hover); }\n.ds-panel__body { padding: var(--space-4); }\n.ds-panel__text { margin: 0 0 var(--space-3); }\n.ds-panel__text.is-last { margin-bottom: 0; }\n.ds-panel__actions {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: var(--space-4) 0 0;\n}\n.ds-panel__go {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: var(--space-4) 0 0;\n}\n.ds-panel__go .ds-form__input { flex: 1 1 0; min-width: 0; }\n.ds-panel__more { margin-left: auto; font-size: var(--text-small); }\n\n/* stats: the forecast; a row of small glass tiles, the day over a large figure */\n.ds-stats {\n  display: flex;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat {\n  flex: 1 1 0;\n  min-width: 0;\n  padding: var(--space-3) var(--space-2);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-control);\n  background: linear-gradient(to bottom, var(--color-fill-1) 0, var(--color-surface) 100%);\n  text-align: center;\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-stat__number {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-stat__note {\n  display: block;\n  font-size: var(--text-small);\n}\n.ds-stats__place {\n  margin: 0 0 var(--space-3);\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n.ds-stats__now { font-weight: var(--weight-body); color: var(--color-text); }\n\n/* grid: channel tiles, two rows of four, a small orb beside each name */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: var(--space-3);\n  margin: 0;\n}\n.ds-grid--wide { gap: var(--space-4); }\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-4) var(--space-2) var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border-muted);\n  border-radius: var(--radius-control);\n  background: var(--color-surface-alt);\n  color: var(--color-link);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-align: center;\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-grid__cell:hover,\n.ds-grid__cell.is-hover { border-color: var(--color-focus); text-decoration: var(--link-decoration-hover); }\n.ds-grid__cell--1 { background: linear-gradient(to bottom, var(--color-surface) 0, var(--color-fill-1) 100%); }\n.ds-grid__cell--2 { background: linear-gradient(to bottom, var(--color-surface) 0, var(--color-fill-2) 100%); }\n.ds-grid__cell--3 { background: linear-gradient(to bottom, var(--color-surface) 0, var(--color-fill-3) 100%); }\n.ds-grid__cell--4 { background: linear-gradient(to bottom, var(--color-surface) 0, var(--color-fill-4) 100%); }\n.ds-orb {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-orb);\n  height: var(--size-orb);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar) 68%, var(--color-shadow));\n  border-radius: 50%;\n  background: var(--fill-bar);\n  box-shadow: var(--shadow-control);\n  color: var(--color-bar-text);\n}\n.ds-orb svg {\n  display: block;\n  width: 54%;\n  height: 54%;\n}\n.ds-orb--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-orb--button {\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}\n\n/* tabs: a row of small pills; the current one is a piece of the glass bar */\n.ds-tabs {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-4);\n  padding: 0 0 var(--space-3);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  list-style: none;\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-1) var(--space-4);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-pill);\n  color: var(--color-link-quiet);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover { border-color: var(--color-border); color: var(--color-link-hover); }\n.ds-tabs__tab.is-current {\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  font-weight: var(--weight-bold);\n  text-shadow: var(--shadow-text);\n}\n.ds-tabs__count { font-weight: var(--weight-body); }\n\n/* list: tight headlines after a small round bullet; the first may carry a line of text */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item.is-first { border-top: 0; padding-top: 0; }\n.ds-list__item::before {\n  content: \"\";\n  flex: 0 0 auto;\n  width: var(--space-3);\n  height: var(--space-3);\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-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-list__item.is-lead .ds-list__title {\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  flex: 0 0 auto;\n  margin: 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  white-space: nowrap;\n}\n.ds-list--roomy .ds-list__item { padding: var(--space-4) 0; }\n.ds-list--roomy .ds-list__title {\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\n/* sidebar: a ranked link block; a number chip, the link, a count */\n.ds-sidebar {\n  margin: 0 0 var(--space-5);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  background: var(--color-surface);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-sidebar.is-last { margin-bottom: 0; }\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-2) 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-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: var(--space-2) var(--space-4);\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-sidebar__item.is-first { border-top: 0; }\n.ds-sidebar__rank {\n  flex: 0 0 var(--size-rank);\n  width: var(--size-rank);\n  border-radius: var(--radius-control);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-align: center;\n}\n.ds-sidebar__count {\n  margin-left: auto;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  white-space: nowrap;\n}\n\n/* footer: a pale strip of links across the window, then the sky band of small print */\n.ds-footer { margin: 0; }\n.ds-footer__links {\n  display: flex;\n  justify-content: center;\n  margin: 0;\n  padding: var(--space-4) 0;\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  font-size: var(--text-small);\n  list-style: none;\n}\n.ds-footer__item {\n  padding: 0 var(--space-4);\n  border-left: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar-alt-text) 40%, transparent);\n  line-height: 1;\n}\n.ds-footer__item.is-first { border-left: 0; }\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover { text-decoration: var(--link-decoration-hover); }\n.ds-footer__legal {\n  margin: 0;\n  padding: var(--space-5) 0;\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n}\n.ds-footer__legal-text {\n  width: var(--size-page);\n  margin: 0 auto;\n  font-size: var(--text-small);\n  text-align: center;\n}\n\n/* brand: the mark on a glossy tile dressed like the primary button, the name on the glass 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) 70%, var(--color-shadow));\n  border-radius: 50%;\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: 68%;\n  height: 68%;\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/* 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 {\n  padding-bottom: var(--space-2);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  color: var(--color-heading-alt);\n  font-size: var(--text-h2);\n}\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: var(--radius-control);\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\n/* buttons: gel buttons with a bright upper half; the arrow button is a round one */\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-buttons--bar { margin: var(--space-4) 0; }\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--arrow {\n  flex: 0 0 auto;\n  width: var(--size-control);\n  padding: 0;\n  border-radius: 50%;\n}\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  font-weight: var(--weight-ui);\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) 55%) 0, color-mix(in srgb, var(--color-danger), var(--color-button-text) 18%) 48%, var(--color-danger) 52%, color-mix(in srgb, var(--color-danger), var(--color-button-text) 20%) 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) 66%) 0, color-mix(in srgb, var(--color-danger), var(--color-button-text) 28%) 48%, color-mix(in srgb, var(--color-danger), var(--color-button-text) 8%) 52%, color-mix(in srgb, var(--color-danger), var(--color-button-text) 32%) 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 */\n.ds-form { margin: 0; }\n.ds-form__row {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-4);\n  margin: 0 0 var(--space-3);\n}\n.ds-form__label {\n  flex: 0 0 var(--size-label);\n  padding-top: 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  text-align: right;\n}\n.ds-form__field {\n  flex: 1 1 0;\n  min-width: 0;\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  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 { width: auto; padding: 0 var(--space-2); }\n.ds-form__input--short { width: 50%; }\n.ds-form__textarea {\n  display: block;\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  padding-top: var(--space-2);\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 calc(var(--size-label) + var(--space-4));\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* table: pale glass head, hairlines between rows */\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-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  text-align: left;\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: middle;\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\n/* badge: a small gel pill */\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) 55%);\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) 55%);\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) 55%);\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 bar with a round 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-warning) 55%, var(--color-notice));\n  border-radius: var(--radius-panel);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n}\n.ds-notice__sign {\n  display: flex;\n  flex: 0 0 auto;\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-warning);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n}\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: small glass keys */\n.ds-pagination {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: var(--space-5) 0 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__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  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  text-decoration: none;\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover { box-shadow: var(--shadow-control-hover); }\n.ds-pagination__link.is-current {\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  font-weight: var(--weight-bold);\n  text-shadow: var(--shadow-text);\n}\n.ds-pagination__link.is-disabled {\n  border-color: var(--color-border);\n  background: var(--color-disabled);\n  box-shadow: none;\n  color: var(--color-disabled-text);\n}\n.ds-pagination__gap { padding: 0 var(--space-2); color: var(--color-text-muted); }\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 glass window with a title bar, set 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  padding: var(--space-2);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  background: var(--fill-bar);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-dialog__title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin: 0;\n  padding: var(--space-2) var(--space-3) var(--space-3);\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: calc(var(--size-icon) * 2);\n  height: var(--size-icon);\n  border-radius: var(--radius-control);\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__body {\n  padding: var(--space-5);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-bottom: 0;\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n  background: var(--color-surface);\n}\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: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-top-color: var(--color-border-muted);\n  border-radius: 0 0 var(--radius-control) var(--radius-control);\n  background: var(--color-surface-strong);\n}\n\n/* empty state: a pale well with a glass bubble */\n.ds-empty {\n  padding: var(--space-6) var(--space-5);\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__orb {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-large);\n  height: var(--size-control-large);\n  margin: 0 auto var(--space-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n  background: var(--fill-button-secondary);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n}\n.ds-empty__orb svg {\n  display: block;\n  width: 55%;\n  height: 55%;\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-h2);\n  font-weight: var(--weight-heading);\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",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>chronoskin: Frutiger Aero start page 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<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__top\">\n    <div class=\"ds-nav__inner\">\n      <p class=\"ds-nav__date\">Tuesday, 18 March</p>\n      <ul class=\"ds-nav__tools\">\n        <li><a class=\"ds-nav__tool\" href=\"#settings\">Make this my start page</a></li>\n        <li><a class=\"ds-nav__tool\" href=\"#settings\">Change this page</a></li>\n        <li><a class=\"ds-nav__tool\" href=\"#mail\">Sign out</a></li>\n      </ul>\n    </div>\n  </div>\n  <div class=\"ds-nav__bar\">\n    <div class=\"ds-nav__inner\">\n      <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\"><span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 3a9 9 0 1 1-9 9\"/><path d=\"M12 17a5 5 0 1 1 5-5\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/></svg></span><span class=\"ds-brand__name\">chronoskin</span></a>\n      <ul class=\"ds-nav__links\">\n        <li><a class=\"ds-nav__link\" href=\"#home\">Start</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#news\">News</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#mail\">Mail</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#settings\">My page</a></li>\n      </ul>\n      <p class=\"ds-nav__more\">Signed in as <a class=\"ds-nav__more-link\" href=\"#settings\">odalys.brandt</a></p>\n    </div>\n  </div>\n</header>\n\n<div class=\"ds-page__wrap\">\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\">Good morning, Odalys</h1>\n        <p class=\"ds-hero__lead\">Two new messages, light rain until noon, and the headlines you follow.</p>\n      </div>\n      <form class=\"ds-hero__search\" action=\"#\">\n        <ul class=\"ds-hero__scopes\">\n          <li><a class=\"ds-hero__scope is-current\" href=\"#home\">Web</a></li>\n          <li><a class=\"ds-hero__scope\" href=\"#home\">Pictures</a></li>\n          <li><a class=\"ds-hero__scope\" href=\"#news\">News</a></li>\n          <li><a class=\"ds-hero__scope\" href=\"#home\">Maps</a></li>\n          <li><a class=\"ds-hero__scope\" href=\"#home\">Shopping</a></li>\n        </ul>\n        <p class=\"ds-hero__action\">\n          <input class=\"ds-hero__field\" type=\"text\" value=\"ferry times to the islands\" aria-label=\"Search the web\">\n          <button class=\"ds-button ds-button--large\" type=\"button\">Search</button>\n        </p>\n        <p class=\"ds-hero__note\">Popular now: <a class=\"ds-hero__note-link\" href=\"#news\">harbour bridge</a>, <a class=\"ds-hero__note-link\" href=\"#news\">spring timetable</a>, <a class=\"ds-hero__note-link\" href=\"#news\">cup draw</a></p>\n      </form>\n    </div>\n\n    <div class=\"ds-page__gadgets\">\n      <div class=\"ds-page__column\">\n        <div class=\"ds-panel\" data-component=\"panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">News</h2><p class=\"ds-panel__tools\"><a class=\"ds-panel__tool\" href=\"#settings\">Edit</a><a class=\"ds-panel__tool\" href=\"#home\" aria-label=\"Close\">x</a></p></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-tabs\" data-component=\"tabs\">\n              <li><a class=\"ds-tabs__tab is-current\" href=\"#home\">Top stories</a></li>\n              <li><a class=\"ds-tabs__tab\" href=\"#home\">Local</a></li>\n              <li><a class=\"ds-tabs__tab\" href=\"#home\">Sport</a></li>\n              <li><a class=\"ds-tabs__tab\" href=\"#home\">Money</a></li>\n            </ul>\n            <ul class=\"ds-list\" data-component=\"list\">\n              <li class=\"ds-list__item is-first is-lead\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#story\">Harbour bridge to reopen a month early</a></h3><p class=\"ds-list__text\">Engineers finished the deck ahead of plan; the first buses cross on Monday.</p></div><p class=\"ds-list__meta\">9:40</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link\" href=\"#story\">Spring ferry timetable adds two late sailings</a></h3></div><p class=\"ds-list__meta\">9:12</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link is-visited\" href=\"#story\">Town library puts its map room online</a></h3></div><p class=\"ds-list__meta\">8:55</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link\" href=\"#story\">Cup draw sends the Rovers north again</a></h3></div><p class=\"ds-list__meta\">8:31</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link\" href=\"#story\">Broadband reaches the last two valleys</a> <span class=\"ds-badge ds-badge--new\">New</span></h3></div><p class=\"ds-list__meta\">8:02</p></li>\n            </ul>\n            <p class=\"ds-panel__actions\"><a class=\"ds-button ds-button--arrow\" href=\"#news\" aria-label=\"All news\"><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><a class=\"ds-link\" href=\"#news\">All of today's news</a></p>\n          </div>\n        </div>\n        <div class=\"ds-panel is-last\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Channels</h2><p class=\"ds-panel__tools\"><a class=\"ds-panel__tool\" href=\"#settings\">Edit</a></p></div>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-grid\" data-component=\"grid\">\n              <a class=\"ds-grid__cell ds-grid__cell--1\" href=\"#news\"><span class=\"ds-orb\"><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 5h13v14H6a2 2 0 0 1-2-2zM17 9h3v8a2 2 0 0 1-2 2M8 9h5M8 13h5\"/></svg></span>News</a>\n              <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#home\"><span class=\"ds-orb ds-orb--accent\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"8\"/><path d=\"M12 4l2.5 5 5 .5-4 3.5 1.5 5-5-3-5 3 1.5-5\"/></svg></span>Sport</a>\n              <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#home\"><span class=\"ds-orb ds-orb--button\"><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 19V9M10 19V5M16 19v-7M21 19H3\"/></svg></span>Money</a>\n              <a class=\"ds-grid__cell ds-grid__cell--4\" href=\"#home\"><span class=\"ds-orb\"><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=\"M3 17l5-8 4 6 3-4 6 6z\"/></svg></span>Travel</a>\n              <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#home\"><span class=\"ds-orb ds-orb--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=\"M9 18V6l10-2v12\"/><circle cx=\"6.5\" cy=\"18\" r=\"2.5\"/><circle cx=\"16.5\" cy=\"16\" r=\"2.5\"/></svg></span>Music</a>\n              <a class=\"ds-grid__cell ds-grid__cell--4\" href=\"#home\"><span class=\"ds-orb ds-orb--button\"><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=\"3\" y=\"5\" width=\"18\" height=\"13\" rx=\"2\"/><path d=\"M10 9l5 2.5-5 2.5z\"/></svg></span>Video</a>\n              <a class=\"ds-grid__cell ds-grid__cell--1\" href=\"#home\"><span class=\"ds-orb\"><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 7h16l-1.5 9h-13zM9 20h.01M16 20h.01\"/></svg></span>Shopping</a>\n              <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#home\"><span class=\"ds-orb ds-orb--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=\"M12 21s-7-6-7-11a7 7 0 0 1 14 0c0 5-7 11-7 11z\"/><circle cx=\"12\" cy=\"10\" r=\"2.5\"/></svg></span>Maps</a>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-page__column\">\n        <div class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Mail</h2><span class=\"ds-badge\">2 new</span><p class=\"ds-panel__tools\"><a class=\"ds-panel__tool\" href=\"#settings\">Edit</a><a class=\"ds-panel__tool\" href=\"#home\" aria-label=\"Close\">x</a></p></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item is-first\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Tilde Marchetti: Saturday at the allotment</a></h3></div><p class=\"ds-list__meta\">9:02</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Rowing club: spring fixtures</a></h3></div><p class=\"ds-list__meta\">8:47</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link is-visited\" href=\"#mail\">Your parcel is at the depot</a></h3></div><p class=\"ds-list__meta\">Mon</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h3 class=\"ds-list__title\"><a class=\"ds-link is-visited\" href=\"#mail\">Bram Oyelaran: photos from the coast</a></h3></div><p class=\"ds-list__meta\">Sun</p></li>\n            </ul>\n            <p class=\"ds-panel__actions\"><a class=\"ds-button\" href=\"#mail\">Open the inbox</a><a class=\"ds-button ds-button--secondary\" href=\"#mail\">Write</a></p>\n          </div>\n        </div>\n        <div class=\"ds-panel is-last\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Today</h2><p class=\"ds-panel__tools\"><a class=\"ds-panel__tool\" href=\"#settings\">Edit</a></p></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item is-first\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Dentist, Quay Street</p></div><p class=\"ds-list__meta\">11:30</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Lunch with Tilde</p></div><p class=\"ds-list__meta\">13:00</p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Return library books</p></div><p class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--warning\">Due today</span></p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Rowing club committee</p></div><p class=\"ds-list__meta\">19:00</p></li>\n            </ul>\n            <p class=\"ds-panel__go\"><input class=\"ds-form__input\" type=\"text\" value=\"Add something for today\" aria-label=\"New entry\"><button class=\"ds-button ds-button--secondary\" type=\"button\">Add</button></p>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"ds-page__column\">\n        <div class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Weather</h2><p class=\"ds-panel__tools\"><a class=\"ds-panel__tool\" href=\"#settings\">Edit</a><a class=\"ds-panel__tool\" href=\"#home\" aria-label=\"Close\">x</a></p></div>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-stats__place\">Port Ansel <span class=\"ds-stats__now\">light rain, 9 degrees</span></p>\n            <ul class=\"ds-stats\" data-component=\"stats\">\n              <li class=\"ds-stat\"><span class=\"ds-stat__label\">Today</span><span class=\"ds-stat__number\">11&deg;</span><span class=\"ds-stat__note\">Rain</span></li>\n              <li class=\"ds-stat\"><span class=\"ds-stat__label\">Wed</span><span class=\"ds-stat__number\">14&deg;</span><span class=\"ds-stat__note\">Cloud</span></li>\n              <li class=\"ds-stat\"><span class=\"ds-stat__label\">Thu</span><span class=\"ds-stat__number\">16&deg;</span><span class=\"ds-stat__note\">Sun</span></li>\n              <li class=\"ds-stat\"><span class=\"ds-stat__label\">Fri</span><span class=\"ds-stat__number\">15&deg;</span><span class=\"ds-stat__note\">Sun</span></li>\n            </ul>\n            <p class=\"ds-panel__go\"><input class=\"ds-form__input\" type=\"text\" value=\"Town or postcode\" aria-label=\"Town or postcode\"><button class=\"ds-button ds-button--arrow\" type=\"button\" aria-label=\"Show the forecast\"><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></button></p>\n          </div>\n        </div>\n        <div class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Markets</h2><p class=\"ds-panel__tools\"><a class=\"ds-panel__tool\" href=\"#settings\">Edit</a></p></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item is-first\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Harbour 100</p></div><p class=\"ds-list__meta\">5,412.30 <span class=\"ds-badge ds-badge--success\">+0.8%</span></p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Northern Tech</p></div><p class=\"ds-list__meta\">2,315.63 <span class=\"ds-badge ds-badge--danger\">-1.2%</span></p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Small Caps</p></div><p class=\"ds-list__meta\">1,278.38 <span class=\"ds-badge ds-badge--success\">+0.1%</span></p></li>\n            </ul>\n          </div>\n        </div>\n        <div class=\"ds-sidebar is-last\">\n          <h2 class=\"ds-sidebar__title\">Add to this page</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-first\"><a class=\"ds-link\" href=\"#settings\">Tide tables</a><span class=\"ds-sidebar__count\">gadget</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Train departures</a><span class=\"ds-sidebar__count\">gadget</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Word of the day</a><span class=\"ds-sidebar__count\">gadget</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">See all 140</a></li>\n          </ul>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"news\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li><a class=\"ds-link\" href=\"#home\">Start</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&raquo;</li>\n      <li><a class=\"ds-link\" href=\"#news\">News</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&raquo;</li>\n      <li class=\"ds-breadcrumb__current\">Top stories</li>\n    </ol>\n    <div class=\"ds-page-header\" data-component=\"page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">News</h1>\n        <p class=\"ds-page-header__text\">Top stories this morning, chosen by chronoskin editors and updated through the day.</p>\n      </div>\n      <div class=\"ds-page-header__actions\"><a class=\"ds-button ds-button--secondary\" href=\"#settings\">Choose my topics</a></div>\n    </div>\n    <div class=\"ds-page__columns\">\n      <main class=\"ds-page__main\">\n        <ul class=\"ds-tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#news\">Top stories</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Local <span class=\"ds-tabs__count\">(12)</span></a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Sport</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Money</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#news\">Science</a></li>\n        </ul>\n        <ul class=\"ds-list ds-list--roomy\">\n          <li class=\"ds-list__item is-first\"><div class=\"ds-list__body\"><h2 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#story\">Harbour bridge to reopen a month early</a></h2><p class=\"ds-list__text\">Engineers finished the deck ahead of plan; the first buses cross on Monday and cars follow a week later.</p></div><p class=\"ds-list__meta\">9:40, Local</p></li>\n          <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h2 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#story\">Spring ferry timetable adds two late sailings</a></h2><p class=\"ds-list__text\">The last boat from the islands now leaves at a quarter past eleven on Fridays and Saturdays.</p></div><p class=\"ds-list__meta\">9:12, Travel</p></li>\n          <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h2 class=\"ds-list__title\"><a class=\"ds-link ds-link--title is-visited\" href=\"#story\">Town library puts its map room online</a></h2><p class=\"ds-list__text\">Four thousand survey sheets, some more than a century old, can be browsed as one atlas.</p></div><p class=\"ds-list__meta\">8:55, Culture</p></li>\n          <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h2 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#story\">Cup draw sends the Rovers north again</a></h2><p class=\"ds-list__text\">A third away tie in a row, and the longest trip of the season.</p></div><p class=\"ds-list__meta\">8:31, Sport</p></li>\n          <li class=\"ds-list__item\"><div class=\"ds-list__body\"><h2 class=\"ds-list__title\"><a class=\"ds-link ds-link--title\" href=\"#story\">Broadband reaches the last two valleys</a></h2><p class=\"ds-list__text\">The final exchanges were switched over at the weekend, a year behind the first promise.</p></div><p class=\"ds-list__meta\">8:02, Technology</p></li>\n        </ul>\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><span class=\"ds-pagination__link is-disabled\">Previous</span></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#news\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#news\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#news\">3</a></li>\n          <li class=\"ds-pagination__gap\">...</li>\n          <li><a class=\"ds-pagination__link\" href=\"#news\">12</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#news\">Next</a></li>\n        </ul>\n      </main>\n      <aside class=\"ds-page__aside\">\n        <div class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">Most read</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-first\"><span class=\"ds-sidebar__rank\">1</span><a class=\"ds-link\" href=\"#story\">Harbour bridge to reopen early</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__rank\">2</span><a class=\"ds-link\" href=\"#story\">The quietest decks on every ferry</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__rank\">3</span><a class=\"ds-link\" href=\"#story\">Cup draw in full</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__rank\">4</span><a class=\"ds-link\" href=\"#story\">Where the new buses will stop</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__rank\">5</span><a class=\"ds-link\" href=\"#story\">Ten walks for a dry weekend</a></li>\n          </ul>\n        </div>\n        <div class=\"ds-panel is-last\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">News on your start page</h2></div>\n          <div class=\"ds-panel__body\">\n            <p class=\"ds-panel__text is-last\">Pick the topics you follow and the News gadget shows those first.</p>\n            <p class=\"ds-panel__actions\"><a class=\"ds-button\" href=\"#settings\">Choose topics</a></p>\n          </div>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"story\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link\" href=\"#home\">Start</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&raquo;</li>\n      <li><a class=\"ds-link\" href=\"#news\">News</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&raquo;</li>\n      <li class=\"ds-breadcrumb__current\">Local</li>\n    </ol>\n    <div class=\"ds-page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Local news</h1>\n        <p class=\"ds-page-header__text\">Tuesday, 18 March, 9:40. By the chronoskin news desk.</p>\n      </div>\n      <div class=\"ds-page-header__actions\"><a class=\"ds-button ds-button--secondary\" href=\"#mail\">Mail this story</a><a class=\"ds-button ds-button--secondary\" href=\"#story\">Print</a></div>\n    </div>\n    <div class=\"ds-page__columns\">\n      <main class=\"ds-page__main\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Harbour bridge to reopen a month early</h1>\n          <p>The harbour bridge will carry traffic again from Monday, four weeks sooner than planned, after engineers finished replacing the deck during a run of dry weather. Buses cross first; cars and lorries follow on 31 March.</p>\n          <h2>What changes on Monday</h2>\n          <p>Routes 4, 11 and 19 return to their usual stops on both banks. The temporary shuttle from Quay Street ends on Sunday night, and the footbridge stays open as before.</p>\n          <ul>\n            <li>Buses only from Monday 24 March</li>\n            <li>All traffic from Monday 31 March</li>\n            <li>A limit of 20 miles an hour until the summer</li>\n          </ul>\n          <h3>Why it took less time</h3>\n          <p>The old deck came away in larger sections than expected, the council said, which saved <strong>nineteen working days</strong>. Readers can follow the remaining work under the tag <code>harbour-bridge</code>.</p>\n          <h3>What is still to do</h3>\n          <ol>\n            <li>Lighting on the north approach</li>\n            <li>Repainting the railings, one side at a time</li>\n          </ol>\n        </article>\n        <div class=\"ds-section\">\n          <h2 class=\"ds-section__title\">More on this story</h2>\n          <p class=\"ds-links\" data-component=\"links\">\n            <a class=\"ds-link\" href=\"#story\">Where the new buses will stop</a>\n            <a class=\"ds-link is-visited\" href=\"#story\">A year of the closure in pictures</a>\n            <a class=\"ds-link is-hover\" href=\"#story\">What the shops on Quay Street say</a>\n            <a class=\"ds-link is-active\" href=\"#news\">All local news</a>\n          </p>\n        </div>\n      </main>\n      <aside class=\"ds-page__aside\">\n        <div class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">On the roads now</h2></div>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-list\">\n              <li class=\"ds-list__item is-first\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Harbour bridge</p></div><p class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--danger\">Closed</span></p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Quay Street shuttle</p></div><p class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--success\">Running</span></p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">North ring road</p></div><p class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--warning\">Slow</span></p></li>\n              <li class=\"ds-list__item\"><div class=\"ds-list__body\"><p class=\"ds-list__title\">Island ferry</p></div><p class=\"ds-list__meta\"><span class=\"ds-badge ds-badge--success\">On time</span></p></li>\n            </ul>\n          </div>\n        </div>\n        <div class=\"ds-sidebar is-last\">\n          <h2 class=\"ds-sidebar__title\">Most read</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-first\"><span class=\"ds-sidebar__rank\">1</span><a class=\"ds-link\" href=\"#story\">The quietest decks on every ferry</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__rank\">2</span><a class=\"ds-link\" href=\"#story\">Cup draw in full</a></li>\n            <li class=\"ds-sidebar__item\"><span class=\"ds-sidebar__rank\">3</span><a class=\"ds-link\" href=\"#story\">Ten walks for a dry weekend</a></li>\n          </ul>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"mail\">\n    <div class=\"ds-page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Mail</h1>\n        <p class=\"ds-page-header__text\">odalys.brandt, 2 unread of 148 messages, 12% of your space used.</p>\n      </div>\n      <div class=\"ds-page-header__actions\" data-component=\"buttons\">\n        <a class=\"ds-button\" href=\"#mail\">Write a message</a>\n        <a class=\"ds-button ds-button--secondary\" href=\"#mail\">Reply</a>\n        <a class=\"ds-button ds-button--danger\" href=\"#mail\">Delete</a>\n        <button class=\"ds-button is-disabled\" type=\"button\" disabled>Move to</button>\n      </div>\n    </div>\n    <div class=\"ds-page__columns\">\n      <main class=\"ds-page__main\">\n        <ul class=\"ds-tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#mail\">Inbox <span class=\"ds-tabs__count\">(2)</span></a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#mail\">Sent</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#mail\">Drafts</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#mail\">Junk</a></li>\n        </ul>\n        <table class=\"ds-table\" data-component=\"table\">\n          <thead>\n            <tr><th class=\"ds-table__head\"></th><th class=\"ds-table__head\">From</th><th class=\"ds-table__head\">Subject</th><th class=\"ds-table__head\">State</th><th class=\"ds-table__head is-numeric\">Size</th><th class=\"ds-table__head is-numeric\">Received</th></tr>\n          </thead>\n          <tbody>\n            <tr class=\"ds-table__row\"><td class=\"ds-table__cell\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked aria-label=\"Select\"></td><td class=\"ds-table__cell\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Tilde Marchetti</a></td><td class=\"ds-table__cell\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Saturday at the allotment</a></td><td class=\"ds-table__cell\"><span class=\"ds-badge\">New</span></td><td class=\"ds-table__cell is-numeric\">4 KB</td><td class=\"ds-table__cell is-numeric\">9:02</td></tr>\n            <tr class=\"ds-table__row is-alt\"><td class=\"ds-table__cell\"><input class=\"ds-form__checkbox\" type=\"checkbox\" aria-label=\"Select\"></td><td class=\"ds-table__cell\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Rowing club</a></td><td class=\"ds-table__cell\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Spring fixtures and the boat rota</a></td><td class=\"ds-table__cell\"><span class=\"ds-badge\">New</span></td><td class=\"ds-table__cell is-numeric\">212 KB</td><td class=\"ds-table__cell is-numeric\">8:47</td></tr>\n            <tr class=\"ds-table__row\"><td class=\"ds-table__cell\"><input class=\"ds-form__checkbox\" type=\"checkbox\" aria-label=\"Select\"></td><td class=\"ds-table__cell\">Parcel depot</td><td class=\"ds-table__cell\"><a class=\"ds-link is-visited\" href=\"#mail\">Your parcel is at the depot</a></td><td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--warning\">Reply by Friday</span></td><td class=\"ds-table__cell is-numeric\">9 KB</td><td class=\"ds-table__cell is-numeric\">Mon</td></tr>\n            <tr class=\"ds-table__row is-alt\"><td class=\"ds-table__cell\"><input class=\"ds-form__checkbox\" type=\"checkbox\" aria-label=\"Select\"></td><td class=\"ds-table__cell\">Bram Oyelaran</td><td class=\"ds-table__cell\"><a class=\"ds-link is-visited\" href=\"#mail\">Photos from the coast</a></td><td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--success\">Answered</span></td><td class=\"ds-table__cell is-numeric\">1,840 KB</td><td class=\"ds-table__cell is-numeric\">Sun</td></tr>\n            <tr class=\"ds-table__row\"><td class=\"ds-table__cell\"><input class=\"ds-form__checkbox\" type=\"checkbox\" aria-label=\"Select\"></td><td class=\"ds-table__cell\">Mail system</td><td class=\"ds-table__cell\"><a class=\"ds-link is-visited\" href=\"#mail\">Not delivered: allotment rota</a></td><td class=\"ds-table__cell\"><span class=\"ds-badge ds-badge--danger\">Returned</span></td><td class=\"ds-table__cell is-numeric\">3 KB</td><td class=\"ds-table__cell is-numeric\">Sat</td></tr>\n          </tbody>\n        </table>\n        <div class=\"ds-dialog__backdrop\">\n          <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"mail-dialog-title\">\n            <h2 class=\"ds-dialog__title\" id=\"mail-dialog-title\"><span>Delete 1 message?</span><a class=\"ds-dialog__close\" href=\"#mail\" aria-label=\"Close\">x</a></h2>\n            <div class=\"ds-dialog__body\">\n              <p class=\"ds-dialog__text\">\"Saturday at the allotment\" will move to Deleted and be removed for good after 30 days.</p>\n            </div>\n            <div class=\"ds-dialog__actions\">\n              <a class=\"ds-button ds-button--danger\" href=\"#mail\">Delete</a>\n              <a class=\"ds-button ds-button--secondary\" href=\"#mail\">Keep it</a>\n            </div>\n          </div>\n        </div>\n      </main>\n      <aside class=\"ds-page__aside\">\n        <div class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Folders</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-first\"><a class=\"ds-link ds-link--title\" href=\"#mail\">Inbox</a><span class=\"ds-sidebar__count\">2 new</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#mail\">Sent</a><span class=\"ds-sidebar__count\">61</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#mail\">Drafts</a><span class=\"ds-sidebar__count\">0</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#mail\">Rowing club</a><span class=\"ds-sidebar__count\">34</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#mail\">Deleted</a><span class=\"ds-sidebar__count\">5</span></li>\n          </ul>\n        </div>\n        <div class=\"ds-section__title\">What the states mean</div>\n        <p class=\"ds-badges\" data-component=\"badge\">\n          <span class=\"ds-badge\">New</span>\n          <span class=\"ds-badge ds-badge--count\">148</span>\n          <span class=\"ds-badge ds-badge--success\">Answered</span>\n          <span class=\"ds-badge ds-badge--warning\">Reply by</span>\n          <span class=\"ds-badge ds-badge--danger\">Returned</span>\n        </p>\n        <div class=\"ds-section\">\n          <div class=\"ds-empty\" data-component=\"empty\">\n            <span class=\"ds-empty__orb\"><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 6h16v12H4zM4 7l8 6 8-6\"/></svg></span>\n            <h2 class=\"ds-empty__title\">No drafts</h2>\n            <p class=\"ds-empty__text\">Messages you start and do not send are kept here.</p>\n            <a class=\"ds-button ds-button--secondary\" href=\"#mail\">Write a message</a>\n          </div>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"settings\">\n    <ol class=\"ds-breadcrumb\">\n      <li><a class=\"ds-link\" href=\"#home\">Start</a></li>\n      <li class=\"ds-breadcrumb__sep\" aria-hidden=\"true\">&raquo;</li>\n      <li class=\"ds-breadcrumb__current\">My page</li>\n    </ol>\n    <div class=\"ds-page-header\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Change this page</h1>\n        <p class=\"ds-page-header__text\">Choose what your start page shows and where it thinks you are.</p>\n      </div>\n      <div class=\"ds-page-header__actions\"><a class=\"ds-button ds-button--secondary\" href=\"#home\">Back to the start page</a></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\"><span class=\"ds-notice__sign\" aria-hidden=\"true\">i</span><p class=\"ds-notice__text\"><span class=\"ds-notice__title\">Changes show at once.</span> Other people who use this computer keep their own page.</p></div>\n          <div class=\"ds-notice ds-notice--error\"><span class=\"ds-notice__sign\" aria-hidden=\"true\">!</span><p class=\"ds-notice__text\"><span class=\"ds-notice__title\">The page was not saved.</span> We could not find the town you typed.</p></div>\n        </div>\n        <form class=\"ds-form\" data-component=\"form\" action=\"#\">\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"set-name\">Greet me as</label>\n            <div class=\"ds-form__field\"><input class=\"ds-form__input ds-form__input--short\" id=\"set-name\" type=\"text\" value=\"Odalys\"></div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"set-town\">Town for weather</label>\n            <div class=\"ds-form__field\">\n              <input class=\"ds-form__input ds-form__input--short is-error\" id=\"set-town\" type=\"text\" value=\"Port Ansle\">\n              <p class=\"ds-form__error\">No town of that name. Did you mean Port Ansel?</p>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"set-news\">News edition</label>\n            <div class=\"ds-form__field\">\n              <select class=\"ds-form__select\" id=\"set-news\"><option>Coast and islands</option><option>The north</option><option>National only</option></select>\n              <p class=\"ds-form__hint\">Decides which local stories the News gadget shows first.</p>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"set-search\">Search opens in</label>\n            <div class=\"ds-form__field\"><input class=\"ds-form__input ds-form__input--short is-focus\" id=\"set-search\" type=\"text\" value=\"The same window\"></div>\n          </div>\n          <div class=\"ds-form__row\">\n            <span class=\"ds-form__label\">Gadgets</span>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> News</label>\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Mail and Today</label>\n              <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\"> Tide tables</label>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <label class=\"ds-form__label\" for=\"set-note\">Note on the page</label>\n            <div class=\"ds-form__field\"><textarea class=\"ds-form__textarea\" id=\"set-note\">Bins go out on Wednesday night.</textarea></div>\n          </div>\n          <div class=\"ds-form__actions\">\n            <button class=\"ds-button\" type=\"button\">Save my page</button>\n            <a class=\"ds-button ds-button--secondary\" href=\"#home\">Cancel</a>\n          </div>\n        </form>\n      </main>\n      <aside class=\"ds-page__aside\">\n        <div class=\"ds-panel\">\n          <div class=\"ds-panel__head\"><h2 class=\"ds-panel__title\">Gadgets you could add</h2></div>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-grid ds-grid--wide\">\n              <a class=\"ds-grid__cell ds-grid__cell--1\" href=\"#settings\"><span class=\"ds-orb\"><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=\"M3 15c3-4 6 4 9 0s6 4 9 0\"/></svg></span>Tides</a>\n              <a class=\"ds-grid__cell ds-grid__cell--2\" href=\"#settings\"><span class=\"ds-orb ds-orb--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=\"6\" y=\"3\" width=\"12\" height=\"14\" rx=\"2\"/><path d=\"M8 21l2-4M16 21l-2-4M9 12h6\"/></svg></span>Trains</a>\n              <a class=\"ds-grid__cell ds-grid__cell--3\" href=\"#settings\"><span class=\"ds-orb ds-orb--button\"><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 4h14v16H5zM9 9h6M9 13h6\"/></svg></span>Words</a>\n              <a class=\"ds-grid__cell ds-grid__cell--4\" href=\"#settings\"><span class=\"ds-orb\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"8\"/><path d=\"M12 7v5l3 2\"/></svg></span>Clocks</a>\n            </div>\n          </div>\n        </div>\n        <div class=\"ds-sidebar is-last\">\n          <h2 class=\"ds-sidebar__title\">Help with this page</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item is-first\"><a class=\"ds-link\" href=\"#settings\">Move a gadget</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Use it as my start page</a></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Put everything back</a></li>\n          </ul>\n        </div>\n      </aside>\n    </div>\n  </section>\n\n</div>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <ul class=\"ds-footer__links\">\n    <li class=\"ds-footer__item is-first\"><a class=\"ds-footer__link\" href=\"#home\">Start</a></li>\n    <li class=\"ds-footer__item\"><a class=\"ds-footer__link\" href=\"#news\">News</a></li>\n    <li class=\"ds-footer__item\"><a class=\"ds-footer__link\" href=\"#mail\">Mail</a></li>\n    <li class=\"ds-footer__item\"><a class=\"ds-footer__link\" href=\"#settings\">Change this page</a></li>\n    <li class=\"ds-footer__item\"><a class=\"ds-footer__link\" href=\"#home\">Privacy</a></li>\n    <li class=\"ds-footer__item\"><a class=\"ds-footer__link\" href=\"#home\">Terms of use</a></li>\n    <li class=\"ds-footer__item\"><a class=\"ds-footer__link\" href=\"#home\">Help</a></li>\n  </ul>\n  <div class=\"ds-footer__legal\">\n    <p class=\"ds-footer__legal-text\">chronoskin is a placeholder start page in a design specimen. Headlines, names and figures are invented.</p>\n  </div>\n</footer>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.frutiger-aero.portal.s02.p02.t02.u02\",\n  \"library\": \"2026.10.07-2111\",\n  \"era\": {\n    \"slug\": \"frutiger-aero\",\n    \"years\": [\n      2004,\n      2010\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"pure\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1024,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-fa-2222\",\n  \"short\": \"v1-fa-2222\"\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  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 13px;\n  --radius-panel: 10px;\n  --radius-pill: 20px;\n  --radius-page: 16px;\n  --shadow-panel: inset 0 1px 0 color-mix(in srgb, white 24%, transparent), inset 0 0 0 1px color-mix(in srgb, white 6%, transparent), 0 6px 18px color-mix(in srgb, var(--color-shadow) 55%, transparent);\n  --shadow-control: inset 0 1px 0 color-mix(in srgb, white 45%, transparent), 0 0 8px color-mix(in srgb, var(--color-focus) 40%, transparent), 0 2px 4px color-mix(in srgb, var(--color-shadow) 60%, transparent);\n  --shadow-control-hover: inset 0 1px 0 color-mix(in srgb, white 60%, transparent), 0 0 14px color-mix(in srgb, var(--color-focus) 85%, transparent), 0 2px 4px color-mix(in srgb, var(--color-shadow) 60%, transparent);\n  --shadow-control-pressed: inset 0 2px 6px color-mix(in srgb, var(--color-shadow) 70%, transparent);\n  --shadow-dialog: 0 0 0 1px color-mix(in srgb, white 12%, transparent), 0 0 30px color-mix(in srgb, var(--color-focus) 35%, transparent), 0 16px 40px color-mix(in srgb, var(--color-shadow) 80%, transparent);\n  --shadow-text: 0 0 6px color-mix(in srgb, var(--color-focus) 55%, transparent), 0 -1px 0 color-mix(in srgb, var(--color-shadow) 50%, transparent);\n  --fill-page: radial-gradient(ellipse 70% 420px at 18% 0, color-mix(in srgb, var(--color-accent) 42%, transparent) 0, transparent 100%) 0 0 / 100% 420px no-repeat, radial-gradient(ellipse 55% 380px at 86% 40px, color-mix(in srgb, var(--color-accent-alt) 40%, transparent) 0, transparent 100%) 0 0 / 100% 420px no-repeat, linear-gradient(to bottom, color-mix(in srgb, var(--color-page), black 35%) 0, var(--color-page) 640px) 0 0 / 100% 640px no-repeat, var(--color-page);\n  --fill-bar: linear-gradient(to bottom, color-mix(in srgb, white 30%, transparent) 0, color-mix(in srgb, white 8%, transparent) 50%, transparent 50%), linear-gradient(to bottom, color-mix(in srgb, var(--color-bar), white 14%) 0, color-mix(in srgb, var(--color-bar), black 35%) 100%);\n  --fill-bar-alt: linear-gradient(to bottom, color-mix(in srgb, white 20%, transparent) 0, transparent 60%), linear-gradient(to bottom, color-mix(in srgb, var(--color-bar-alt), white 10%) 0, color-mix(in srgb, var(--color-bar-alt), black 25%) 100%);\n  --fill-inverse: radial-gradient(ellipse 50% 110% at 22% 100%, color-mix(in srgb, var(--color-accent) 55%, transparent) 0, transparent 100%), radial-gradient(ellipse 45% 120% at 80% 0, color-mix(in srgb, var(--color-accent-alt) 50%, transparent) 0, transparent 100%), linear-gradient(to bottom, color-mix(in srgb, var(--color-inverse), black 55%) 0, var(--color-inverse) 100%);\n  --fill-accent: linear-gradient(to bottom, color-mix(in srgb, white 55%, transparent) 0, transparent 55%), linear-gradient(to bottom, var(--color-accent) 0, color-mix(in srgb, var(--color-accent), black 22%) 100%);\n  --fill-panel: linear-gradient(to bottom, color-mix(in srgb, white 10%, transparent) 0, transparent 34px), linear-gradient(to bottom, color-mix(in srgb, var(--color-surface-alt) 78%, transparent) 0, color-mix(in srgb, var(--color-surface) 72%, transparent) 100%);\n  --fill-button: linear-gradient(to bottom, color-mix(in srgb, white 60%, transparent) 0, color-mix(in srgb, white 14%, transparent) 46%, transparent 50%, color-mix(in srgb, white 22%, transparent) 100%), var(--color-button);\n  --fill-button-hover: linear-gradient(to bottom, color-mix(in srgb, white 72%, transparent) 0, color-mix(in srgb, white 24%, transparent) 46%, color-mix(in srgb, white 8%, transparent) 50%, color-mix(in srgb, white 34%, transparent) 100%), var(--color-button);\n  --fill-button-secondary: linear-gradient(to bottom, color-mix(in srgb, white 34%, transparent) 0, color-mix(in srgb, white 8%, transparent) 46%, transparent 50%, color-mix(in srgb, white 10%, transparent) 100%), var(--color-button-secondary);\n  --fill-input: linear-gradient(to bottom, color-mix(in srgb, var(--color-input), black 40%) 0, var(--color-input) 8px);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: none;\n  --backdrop-blur: 10px;\n}\n"
  }
}
