{
  "id": "v1-cl-2134",
  "long_id": "v1.claymorphism.app.s02.p01.t03.u04",
  "name": "Claymorphism app",
  "era": {
    "slug": "claymorphism",
    "code": "cl",
    "name": "Claymorphism",
    "years": [
      2021,
      2025
    ],
    "description": "Soft 3D of 2021 to 2025: thick rounded shapes like modelling clay, pastel fills with a light inner glow on top and a dark inner shadow below, big floating drop shadows, round friendly type and playful blobs."
  },
  "archetype": "app",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "Claymorphism is the soft 3D look of 2021 to 2025: thick, very round shapes that seem modelled from coloured clay, each with a light inner glow from the upper left, a darker inner shadow at the lower right and a soft drop shadow in a tint of the palette. It was the look of playful learning, habit and money apps, where chunky keys, fat progress bars and a round mascot made a daily task feel like a toy. This pack is such an app: a clay rail at the left, a greeting block with a clay character, tiles with one big figure each, lesson cards and thick rings and bars, set in a heavy geometric display face over a plain sans.",
  "url": "https://chrono.skin/s/v1-cl-2134",
  "preview_url": "https://chrono.skin/s/v1-cl-2134/specimen.html",
  "files": {
    "STYLE.md": "# Claymorphism app\n\n## Summary\n\nClaymorphism is the soft 3D look of 2021 to 2025: thick, very round shapes that seem modelled from coloured clay, each with a light inner glow from the upper left, a darker inner shadow at the lower right and a soft drop shadow in a tint of the palette. It was the look of playful learning, habit and money apps, where chunky keys, fat progress bars and a round mascot made a daily task feel like a toy. This pack is such an app: a clay rail at the left, a greeting block with a clay character, tiles with one big figure each, lesson cards and thick rings and bars, set in a heavy geometric display face over a plain sans.\n\n## Layout\n\n- The window is two columns: the rail `--size-rail` (264px) at the left, sticking to the top, and the working column, capped at `--size-page` (1080px) with `--space-6` (28px) side padding and centred in what remains. The layout is fluid below that width.\n- Navigation: `.ds-nav` is the rail, one tall clay card: the brand, four chunky links with icons, each `--size-control-large` (56px) high, and a small streak card at its foot. Over every view the working column starts with `.ds-page__top`: the search well at the left, the streak badge and the account `.ds-menu` at the right.\n- Home page: a `.ds-page__stack` at 28px gaps: the hero (one inverted clay block, greeting left, clay character right), the `.ds-grid` of four figure tiles, then `.ds-page__cols`: the list of lesson cards under a `.ds-page__heading` in the wide column and a `--size-aside` (340px) column with the weekly panel and the `.ds-sidebar` of courses.\n- Inner pages have no hero. They start with the `.ds-breadcrumb` and the `.ds-page-header` (title at `--text-h1`, one lead line, one action at the right) on the bare page. A list page stacks the `.ds-stat` row, the `.ds-tabs` and `.ds-page__cols`: table and pagination in the wide column, the empty state and a small panel in the aside. A practice page uses `.ds-page__cols`: the progress bar, the card carousel, the answer keys and the action row at the left, a prose panel and the dialog at the right. A settings page uses `.ds-page__cols`: the form in a `.ds-panel`, notices, a panel of switches and the accordion in the aside. Keep the two columns about equally long.\n- Views. The specimen is one app with four views, each `<section class=\"ds-view\" id=\"...\">` inside `.ds-page__inner`; the rail, the top strip and the footer stand outside them. `today` is the home view, `lessons` the list, `lesson` the practice screen, `settings` the form. The rail link of the current view is pressed in by one `:has()` rule per view.\n- Spacing scale: `--space-1` 4px, `--space-2` 8px (between rail links, label to control), `--space-3` 12px (icon to text, between list cards), `--space-4` 16px (between buttons, card padding of a list item), `--space-5` 20px (tile and panel padding, grid gap), `--space-6` 28px (between blocks and columns), `--space-7` 40px (hero padding), `--space-8` 56px (above the footer).\n- `--size-rule` (2px) is the weight of the rules between table rows.\n- Below 1100px the aside drops under the working column and the tiles go two across. Below 900px the rail becomes a block at the top of the page: the brand over a chunky tab bar of four equal keys with the icon above the label; `.ds-nav__card` is not shown there and the current key stays pressed in. Below 560px the hero stacks, stats are one column, form rows and answer keys stack, the tabs fill the width and table columns marked `.ds-table__opt` are hidden, so nothing scrolls sideways.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- `--font-heading` and `--font-ui` are one geometric sans with round bowls (Outfit, then Lexend, Futura) for titles, prices, buttons and navigation; `--font-body` is a rounded sans (Quicksand, then Hiragino Maru Gothic, Varela Round). `--font-mono` is for code only. These are open stand-ins for the commercial rounded faces of the references.\n- Sizes: `--text-base` 18px, `--text-ui` 17px for controls and navigation, `--text-small` 14px for meta text and badges, `--text-large` 22px for lead text and large buttons, `--text-h3` 21px, `--text-h2` 26px (prices on cards), `--text-h1` 36px, `--text-display` 58px for the hero title only.\n- Weights: 400 body, 500 for buttons and navigation, 600 for headings and bold text, 700 for the hero title and the large price. Headings are tracked at 0.01em.\n- Text tokens sit on fills as the era's first layout sets out: body, muted, heading and link colours only on the page and the three surface colours; `--color-accent-text` on the accent and on every `--color-fill-*` clay (badges on trays, avatars, faces), with nothing else set on a fill; `--color-bar-text` on `--fill-bar` (the top bar); `--color-bar-alt-text` on `--fill-bar-alt` (the footer) and on `--color-bar-alt` (table head); `--color-inverse-text` on `--fill-inverse` (code, tooltips); `--color-button-text` on `--fill-button`; `--color-button-secondary-text` on `--fill-button-secondary` (secondary buttons, round keys, pagination, switch thumbs); `--color-input-text` on `--fill-input` (controls, the search well, the hero tray, tab and progress tracks, the empty state); `--color-notice-text` on `--color-notice`; `--color-danger` on `--color-danger-surface`. Status colours never carry text.\n- The palette is dark: the page is deep indigo, the surfaces are lighter indigo clays, and the fills, the accent and the button are candy colours light enough to carry the dark ink `--color-accent-text`.\n- The clay comes from the surface part: panels have a dark drop shadow and two insets mixed from black and white; controls throw a glow in `--color-button` instead of a dark shadow, and the dialog and the hero card add a halo in `--color-accent`. `--shadow-text` is a faint glow on the text of primary buttons. Clay objects add a drop shadow in their own fill through `color-mix()` with `transparent`, written in the component.\n- One-off values with no token: circles use `border-radius: 50%`, the cube 28%, checkboxes 34%; a tray takes the card's radius less its inset, by `calc()`; list bars, notices and accordion bars take the smaller of `--radius-panel` and `--radius-control`; placeholders are `--color-input-text` at opacity 0.55.\n\n## Components\n\n- `.ds-page`: on `<body>`; the two-column frame, painted with `--fill-page`. `.ds-page__inner` is the working column, `.ds-page__top` the strip over every view with `.ds-page__search` and `.ds-page__top-end`, `.ds-page__account` the account pill (`.ds-page__account-name` is hidden on a phone), `.ds-page__stack` a vertical stack, `.ds-page__cols` the wide column with an aside, `.ds-page__heading` a section heading with a link at its right end. `.ds-view` is one screen of the specimen; an application with one document per page does not need it.\n- `.ds-brand`: the mark and name at the top of the rail: `.ds-brand__mark` is a clay key `--size-brand` (42px) dressed like the primary button, holding the mark as inline SVG; `.ds-brand__name` is the name in the heading font, in the colour of the bar. The name `chronoskin` and its mark are placeholders: replace them with the installing project's own and keep the key.\n- `.ds-nav`: the rail. `.ds-nav__inner` is the clay card, `.ds-nav__list` the links, `.ds-nav__link` one chunky link with an icon (pressed in when `is-current`, raised on `is-hover`), `.ds-nav__card` with `.ds-nav__card-title` the streak card at its foot.\n- `.ds-menu`: the account drop-down, a `<details>`: `.ds-menu__toggle` on the summary, `.ds-menu__list` the clay card, `.ds-menu__link` with an optional `.ds-menu__note`; `--end` aligns it right, `--up` opens it upwards.\n- `.ds-hero`: the greeting on one inverted clay block: `.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__actions`, and `.ds-hero__art` holding `.ds-clay` objects. Once per app, on the home view.\n- `.ds-clay`: a clay object drawn in CSS: a ball; `--1` to `--4` pick the fill, `--tiny`, `--small`, `--large` the size, `--cube`, `--pill`, `--ring` the shape; a face holds two `.ds-clay__eye`, a `.ds-clay__smile` and two `.ds-clay__cheek`. Decorative only.\n- `.ds-page-header`: head of an inner page: `.ds-page-header__text` with `.ds-page-header__title` and `.ds-page-header__lead`, `.ds-page-header__actions` at the right.\n- `.ds-prose`: running text inside a panel: h1 to h3, paragraphs, lists, inline `code`; `.ds-prose__lead`, `.ds-prose__code`.\n- `.ds-link`: link in running text, underlined; states `is-visited`, `is-hover`, `is-active`, `is-focus`; `.ds-link--quiet` for table links; `.ds-link__sample` lays out a row of links.\n- `.ds-button`: a fat clay key 46px high with uppercase text. `is-hover` lifts it, `is-active` squashes it into a dent. `.ds-button--secondary` in the surface colour, `.ds-button--danger` on `--color-danger-surface`, `.ds-button--large` (56px), `.ds-button--wide`; `disabled` or `is-disabled` is flat. `.ds-button__row` spaces a group.\n- `.ds-form`: vertical form in a panel: `.ds-form__field`, `.ds-form__label`, `.ds-form__input`, `.ds-form__textarea`, `.ds-form__select` (in `.ds-form__select-wrap` with `.ds-form__chevron`), `.ds-form__check` with `.ds-form__checkbox`, `.ds-form__error` after an `is-error` control, `.ds-form__hint`, `.ds-form__actions`, `.ds-form__row`. Controls are dents.\n- `.ds-switch`: a fat clay toggle over a checkbox: `.ds-switch__input`, `.ds-switch__track`, `.ds-switch__label`, `.ds-switch__hint`; `--end` puts the track at the right. Use it for settings that apply at once.\n- `.ds-table`: one clay sheet with a head in `--color-bar-alt`: `.ds-table__num`, `.ds-table__meta`, `.ds-table__strong`, `.ds-table__opt`, `is-hover` on a row.\n- `.ds-list`: lesson cards 12px apart. `.ds-list__item` is a clay card holding a `.ds-list__step` ball with the lesson number (`--2` to `--4` pick a fill), a `.ds-list__body` (`.ds-list__title`, `.ds-list__meta`) and a badge or button; `is-locked` presses the card in. `.ds-list__aside` is a figure at the right.\n- `.ds-panel`: the basic clay card: `.ds-panel__title`, `.ds-panel__body`, `.ds-panel__note`, `.ds-panel__line`; `.ds-panel--accent` in the accent clay. `.ds-panel__goal` sets a ring beside `.ds-panel__bars`; `.ds-panel__rank` and `.ds-panel__points` are a row of a board.\n- `.ds-grid`: four figure tiles. `.ds-grid__cell` with `--1` to `--4` takes a `--color-fill-*` clay and its own coloured drop shadow; inside, a `.ds-grid__icon` tile, a `.ds-grid__value` (44px), a `.ds-grid__label` and a `.ds-grid__meta`.\n- `.ds-stat`: the row of three; each `.ds-stat__item` is a clay card with a `.ds-stat__label` over a `.ds-stat__value` and an optional `.ds-stat__meta`. Used on inner pages; the grid is the home view's form of it.\n- `.ds-tabs`: a dented track of `.ds-tabs__tab` pills; `is-current` is raised, in the accent.\n- `.ds-badge`: a pill in the accent; `.ds-badge--quiet` neutral; `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger` tinted with a status dot.\n- `.ds-sidebar`: a clay card of courses in the aside: `.ds-sidebar__heading`, `.ds-sidebar__list`, `.ds-sidebar__link` (a pill, dented when `is-current`).\n- `.ds-notice`: a raised bar in `--color-notice` with `.ds-notice__icon` and `.ds-notice__title`; `.ds-notice--error`; `.ds-notice__stack`.\n- `.ds-pagination`: clay keys, `.ds-pagination__link`, the current one `is-current` in the accent.\n- `.ds-breadcrumb`: small bold trail above the page header: `.ds-breadcrumb__item`, `.ds-breadcrumb__link`.\n- `.ds-dialog`: a tinted sheet with a centred `.ds-dialog__box`: `.ds-dialog__title`, `.ds-dialog__body`, `.ds-dialog__actions`.\n- `.ds-empty`: a dent holding a clay ball `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one primary button.\n- `.ds-tooltip`: wraps a trigger; `.ds-tooltip__tip` shows on hover or focus.\n- `.ds-progress`: a thick dented track with a puffy `.ds-progress__bar` (`--10` to `--90`), `.ds-progress__legend` above it; `.ds-progress--ring` is a ring around a clay ball `.ds-progress__face`.\n- `.ds-avatar`: initials on a clay ball `.ds-avatar__pic`, with optional `.ds-avatar__text` (`.ds-avatar__name`, `.ds-avatar__meta`); `--1` to `--4` pick a fill.\n- `.ds-accordion`: `<details>` sections as separate clay bars: `.ds-accordion__item`, `.ds-accordion__head`, `.ds-accordion__chevron`, `.ds-accordion__body`.\n- `.ds-carousel`: `.ds-carousel__track` with one `.ds-carousel__slide` showing, `.ds-carousel__foot` with two `.ds-carousel__arrow` keys around `.ds-carousel__dots` (`.ds-carousel__dot`). `.ds-card` is the flashcard used as a slide (`--2`, `--4` pick a fill): a `.ds-card__sign` ball, `.ds-card__title`, `.ds-card__text`; `.ds-card__answers` is the grid of answer keys under it.\n- `.ds-footer`: one flat clay strip in `--fill-bar-alt` at the end of the working column: `.ds-footer__inner`, `.ds-footer__links`, `.ds-footer__link`.\n\n## Never\n\n- `block-gap <= 56px`: blocks sit 28px apart; 56px above the footer is the largest gap.\n- `content-width <= 1140px`: the working column is capped.\n- `font-size <= 58px`: the hero title is the largest text.\n- `font-size >= 14px`: meta text and badges are the smallest text.\n- `font-weight <= 700`: the type is round, not heavy.\n- `font-families <= 3`: one display face, one rounded sans and one monospace.\n- `line-height <= 1.55`: body text is set at 1.5.\n- `uppercase-text <= 5%`: nothing is set in capitals.\n- `underlined-links <= 10%`: links are marked by colour alone.\n- `box-shadow != none`: nothing raised is flat; a block without its inner glow and drop shadow is not clay.\n- `border-width <= 2px`: clay has no outlines; the only lines are 2px rules and the 2px focus or error ring.\n- `box-shadow-blur <= 72px`: the deepest shadow, under the dialog, blurs over 72px.\n- `text-shadow = none`: the text is flat; only shapes are modelled.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen. A container starts from `.ds-panel`, something pressed or filled in from `.ds-form__input`, something the user presses from `.ds-button--secondary`. For a coloured tile take a `--color-fill-*` background, `--color-accent-text` for everything on it, and add the coloured drop shadow as `.ds-grid__cell` does. Never draw a shadow in a raw colour and never flatten a shape. Use tokens only; for a size with no token use `calc()` over `--space-*` or `--size-*`. Keep each text token on the fill it belongs to, as the list above says.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 1080px;\n  --size-rail: 264px;\n  --size-aside: 340px;\n  --size-dialog: 400px;\n  --size-control: 46px;\n  --size-control-large: 56px;\n  --size-icon: 20px;\n  --size-dot: 10px;\n  --size-thumb: 28px;\n  --size-track: 18px;\n  --size-check: 26px;\n  --size-avatar: 42px;\n  --size-ring: 104px;\n  --size-rule: 2px;\n  --size-brand: 42px;\n  --size-clay: 96px;\n  --size-search: 320px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 20px;\n  --space-6: 28px;\n  --space-7: 40px;\n  --space-8: 56px;\n}\n\n/* shell */\n.ds-page {\n  margin: 0;\n  min-height: 100vh;\n  overflow-x: clip;\n  background: var(--fill-page);\n  background-color: var(--color-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* views: one screen of the example site shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* clay objects: a sphere, a ring, a cube, a pill and a face, shaped by the shadow tokens */\n.ds-clay {\n  position: relative;\n  display: block;\n  flex: none;\n  width: var(--size-clay);\n  height: var(--size-clay);\n  background-color: var(--color-fill-1);\n  border-radius: 50%;\n  box-shadow: var(--shadow-panel), 0 var(--space-5) var(--space-7) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-1) 75%, transparent);\n}\n.ds-clay--1 {\n  background-color: var(--color-fill-1);\n}\n.ds-clay--3 {\n  background-color: var(--color-fill-3);\n  box-shadow: var(--shadow-panel), 0 var(--space-5) var(--space-7) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-3) 75%, transparent);\n}\n.ds-clay--4 {\n  background-color: var(--color-fill-4);\n  box-shadow: var(--shadow-panel), 0 var(--space-5) var(--space-7) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-4) 75%, transparent);\n}\n.ds-clay--small {\n  width: calc(var(--size-clay) * 0.5);\n  height: calc(var(--size-clay) * 0.5);\n}\n.ds-clay--tiny {\n  width: calc(var(--size-clay) * 0.28);\n  height: calc(var(--size-clay) * 0.28);\n  box-shadow: var(--shadow-control);\n}\n.ds-clay--large {\n  width: calc(var(--size-clay) * 1.6);\n  height: calc(var(--size-clay) * 1.6);\n}\n.ds-clay--cube {\n  border-radius: 28%;\n  transform: rotate(-14deg);\n}\n.ds-clay__eye {\n  position: absolute;\n  top: 36%;\n  left: 28%;\n  width: 11%;\n  height: 15%;\n  background: var(--color-accent-text);\n  border-radius: 50%;\n}\n.ds-clay__eye + .ds-clay__eye {\n  left: auto;\n  right: 28%;\n}\n.ds-clay__smile {\n  position: absolute;\n  top: 44%;\n  left: 37%;\n  width: 26%;\n  height: 22%;\n  border: var(--border-width-strong) var(--border-style) transparent;\n  border-bottom-color: var(--color-accent-text);\n  border-radius: 50%;\n}\n.ds-clay__cheek {\n  position: absolute;\n  top: 54%;\n  left: 14%;\n  width: 14%;\n  height: 10%;\n  background: var(--color-accent-alt);\n  border-radius: 50%;\n  opacity: 0.7;\n}\n.ds-clay__cheek + .ds-clay__cheek {\n  left: auto;\n  right: 14%;\n}\n\n/* brand: the mark on a small clay key in the primary button's dress, then the name */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: inherit;\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: var(--size-brand);\n  height: var(--size-brand);\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-text);\n}\n.ds-brand__mark svg {\n  width: 58%;\n  height: 58%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n\n/* page header (inner pages) */\n.ds-page-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-4) var(--space-6);\n  margin: var(--space-3) 0 var(--space-6);\n}\n.ds-page-header__text {\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__lead {\n  max-width: 60ch;\n  margin: var(--space-2) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* prose */\n.ds-prose {\n  max-width: 72ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-6) 0 var(--space-2);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-prose h1 {\n  margin-top: 0;\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  color: var(--color-heading-alt);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-5);\n}\n.ds-prose li + li {\n  margin-top: var(--space-1);\n}\n.ds-prose li::marker {\n  color: var(--color-heading-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-2);\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  white-space: nowrap;\n}\n.ds-prose__lead {\n  color: var(--color-text-muted);\n  font-size: var(--text-large);\n}\n.ds-prose__code {\n  margin: 0 0 var(--space-4);\n  padding: var(--space-4) var(--space-5);\n  overflow: auto;\n  background-color: var(--color-inverse);\n  background: var(--fill-inverse);\n  border-radius: min(var(--radius-control), var(--radius-panel));\n  box-shadow: var(--shadow-control);\n  color: var(--color-inverse-text);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: var(--line-body);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  border-radius: var(--radius-pill);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link__sample {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n}\n\n/* buttons: fat clay keys that lift on hover and squash when pressed */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  background-color: var(--color-button);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\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-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  color: var(--color-button-hover-text);\n  transform: translateY(calc(var(--space-1) * -0.5));\n}\n/* the lift leaves a strip under the pointer; it stays part of the element, so the hover holds at the lower edge */\n.ds-button:hover::after,\n.ds-button.is-hover::after {\n  content: \"\";\n  position: absolute;\n  top: 100%;\n  right: 0;\n  left: 0;\n  height: calc(var(--space-1) * 0.5);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: scale(0.97, 0.93);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-color: var(--color-border);\n  color: var(--color-button-secondary-text);\n  text-shadow: none;\n}\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--color-danger-surface);\n  border-color: var(--color-danger);\n  color: var(--color-danger);\n  text-shadow: none;\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-size: var(--text-large);\n}\n.ds-button--wide {\n  width: 100%;\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  border-color: transparent;\n  box-shadow: none;\n  color: var(--color-disabled-text);\n  text-shadow: none;\n  transform: none;\n  cursor: default;\n}\n.ds-button__row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n}\n\n/* form: controls are wells pressed into the clay */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-5);\n  align-items: start;\n}\n.ds-form__label {\n  display: flex;\n  justify-content: space-between;\n  padding: 0 var(--space-2);\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  background-color: var(--color-input);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-pressed);\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-heading);\n  transition: var(--transition);\n}\n.ds-form__textarea {\n  min-height: calc(2 * var(--size-control) + var(--space-4));\n  padding: var(--space-4) var(--space-5);\n  border-radius: min(var(--radius-control), var(--radius-panel));\n  line-height: var(--line-body);\n  resize: vertical;\n}\n.ds-form__input::placeholder,\n.ds-form__textarea::placeholder {\n  color: var(--color-input-text);\n  opacity: 0.55;\n}\n.ds-form__select {\n  padding-right: var(--space-7);\n  appearance: none;\n  -webkit-appearance: none;\n}\n.ds-form__select-wrap {\n  position: relative;\n  display: block;\n}\n.ds-form__chevron {\n  position: absolute;\n  top: 50%;\n  right: var(--space-4);\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin-top: calc(var(--size-icon) / -2);\n  color: var(--color-input-text);\n  pointer-events: none;\n}\n.ds-form__input:focus-visible,\n.ds-form__select:focus-visible,\n.ds-form__textarea:focus-visible,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-form__input.is-error {\n  box-shadow: var(--shadow-control-pressed), 0 0 0 var(--border-width-strong) var(--color-danger);\n}\n.ds-form__error {\n  padding: 0 var(--space-2);\n  color: var(--color-danger);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  padding: 0 var(--space-2);\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  color: var(--color-text);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n}\n.ds-form__checkbox {\n  position: relative;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: 34%;\n  box-shadow: var(--shadow-control);\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n}\n.ds-form__checkbox:checked::after,\n.ds-form__checkbox.is-checked::after {\n  content: \"\";\n  position: absolute;\n  top: 16%;\n  left: 34%;\n  width: 30%;\n  height: 52%;\n  border: var(--border-width-strong) var(--border-style) var(--color-accent-text);\n  border-top-color: transparent;\n  border-left-color: transparent;\n  transform: rotate(45deg);\n}\n.ds-form__checkbox:focus-visible {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n}\n\n/* table: one clay sheet with a coloured head, rows divided by a soft rule */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 0;\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-text);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-4) var(--space-5);\n  text-align: left;\n  vertical-align: middle;\n}\n.ds-table th {\n  background: var(--color-bar-alt);\n  color: var(--color-bar-alt-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n}\n.ds-table th:first-child {\n  border-top-left-radius: var(--radius-panel);\n}\n.ds-table th:last-child {\n  border-top-right-radius: var(--radius-panel);\n}\n.ds-table td {\n  border-top: var(--size-rule) var(--border-style) var(--color-border-muted);\n}\n.ds-table tbody tr:hover td,\n.ds-table tbody tr.is-hover td {\n  background: var(--color-surface-alt);\n}\n.ds-table tbody tr:last-child td:first-child {\n  border-bottom-left-radius: var(--radius-panel);\n}\n.ds-table tbody tr:last-child td:last-child {\n  border-bottom-right-radius: var(--radius-panel);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table .ds-table__meta {\n  color: var(--color-text-muted);\n}\n.ds-table .ds-table__strong {\n  color: var(--color-heading);\n  font-weight: var(--weight-bold);\n}\n\n/* list: every item is its own clay bar */\n.ds-list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-panel), var(--radius-control));\n  box-shadow: var(--shadow-control);\n  color: var(--color-text);\n}\n.ds-list__body {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  display: block;\n  color: var(--color-link-quiet);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n}\n.ds-list__aside {\n  flex: none;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  font-variant-numeric: tabular-nums;\n}\n\n/* panel: the basic clay card */\n.ds-panel {\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-text);\n}\n.ds-panel__title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-5) var(--space-5) 0;\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\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-panel__body {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  padding: var(--space-5);\n}\n.ds-panel__title + .ds-panel__body {\n  padding-top: var(--space-3);\n}\n.ds-panel__body p {\n  margin: 0;\n}\n.ds-panel__note {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-panel__line {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n/* a panel in the accent clay: all of its text takes the ink of the fills */\n.ds-panel--accent {\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n}\n.ds-panel--accent .ds-panel__title,\n.ds-panel--accent .ds-panel__note {\n  color: var(--color-accent-text);\n}\n\n/* stats: figures in the heading face on clay tiles */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-5);\n  margin: 0;\n}\n.ds-stat__item {\n  padding: var(--space-4) var(--space-5);\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-stat__label {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-stat__value {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: 0 var(--space-2);\n  margin: var(--space-1) 0 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-stat__meta {\n  color: var(--color-text-muted);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n}\n\n/* tabs: a pressed track, the current tab a clay pill in the accent */\n.ds-tabs {\n  display: inline-flex;\n  align-self: flex-start;\n  gap: var(--space-2);\n  margin: 0;\n  padding: var(--space-2);\n  list-style: none;\n  background-color: var(--color-input);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-2) var(--space-5);\n  border-radius: var(--radius-pill);\n  color: var(--color-input-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  transition: var(--transition);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n}\n.ds-tabs__tab.is-current {\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control);\n  color: var(--color-accent-text);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-1);\n  padding: 0 var(--space-3);\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  border-radius: var(--radius-pill);\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: var(--line-body);\n  text-decoration: none;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.ds-badge--quiet {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n}\n/* status badges: the surface tinted with the status colour, a dot of the full colour in front */\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger {\n  gap: var(--space-2);\n  color: var(--color-text);\n}\n.ds-badge--success {\n  background: color-mix(in srgb, var(--color-success) 22%, var(--color-surface));\n}\n.ds-badge--warning {\n  background: color-mix(in srgb, var(--color-warning) 22%, var(--color-surface));\n}\n.ds-badge--danger {\n  background: color-mix(in srgb, var(--color-danger) 20%, var(--color-surface));\n}\n.ds-badge--success::before,\n.ds-badge--warning::before,\n.ds-badge--danger::before {\n  content: \"\";\n  width: var(--size-dot);\n  height: var(--size-dot);\n  flex: none;\n  border-radius: 50%;\n}\n.ds-badge--success::before {\n  background: var(--color-success);\n}\n.ds-badge--warning::before {\n  background: var(--color-warning);\n}\n.ds-badge--danger::before {\n  background: var(--color-danger);\n}\n\n/* notice: a raised clay bar in the notice colour */\n.ds-notice {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  padding: var(--space-4) var(--space-5);\n  background: var(--color-notice);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-panel), var(--radius-control));\n  box-shadow: var(--shadow-control);\n  color: var(--color-notice-text);\n  font-size: var(--text-ui);\n  line-height: var(--line-body);\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  border-color: var(--color-danger);\n  color: var(--color-danger);\n}\n.ds-notice__icon {\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  flex: none;\n  margin-top: calc((var(--text-ui) * var(--line-body) - var(--size-thumb)) / 2);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-notice__stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n}\n\n/* pagination: round clay keys, the current one in the accent */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control);\n  min-height: var(--size-control);\n  padding: 0 var(--space-4);\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: none;\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-pagination__link.is-current {\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  border-color: transparent;\n  color: var(--color-accent-text);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin: 0 var(--space-2);\n  opacity: 0.6;\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover,\n.ds-breadcrumb__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* dialog, shown open in the page flow */\n.ds-dialog {\n  display: flex;\n  justify-content: center;\n  padding: var(--space-7) var(--space-5);\n  background: var(--color-overlay);\n  border-radius: var(--radius-page);\n}\n.ds-dialog__box {\n  width: 100%;\n  max-width: var(--size-dialog);\n  padding: var(--space-6);\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n  color: var(--color-text);\n}\n.ds-dialog__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  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-dialog__body {\n  color: var(--color-text-muted);\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  margin-top: var(--space-6);\n}\n\n/* empty state: a pressed well with a clay ball in it */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: var(--space-6) var(--space-5);\n  background-color: var(--color-input);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control-pressed);\n  color: var(--color-input-text);\n  text-align: center;\n}\n.ds-empty__icon {\n  width: var(--size-control-large);\n  height: var(--size-control-large);\n  margin-bottom: var(--space-4);\n  padding: var(--space-3);\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n}\n.ds-empty__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\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-empty__text {\n  max-width: 40ch;\n  margin: var(--space-2) 0 var(--space-5);\n  font-size: var(--text-ui);\n}\n\n/* menu: a drop-down clay card under a navigation item */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  list-style: none;\n  cursor: pointer;\n}\n.ds-menu__toggle::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__toggle svg {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  transition: var(--transition);\n}\n.ds-menu[open] .ds-menu__toggle svg {\n  transform: rotate(180deg);\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-3));\n  left: 0;\n  z-index: 8;\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  min-width: 24ch;\n  margin: 0;\n  padding: var(--space-3);\n  list-style: none;\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-panel), var(--radius-control));\n  box-shadow: var(--shadow-dialog);\n}\n.ds-menu--end .ds-menu__list {\n  left: auto;\n  right: 0;\n}\n.ds-menu__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) var(--space-4);\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-heading);\n  text-decoration: var(--link-decoration-quiet);\n  transition: var(--transition);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  background: var(--color-surface-alt);\n  color: var(--color-link-hover);\n}\n.ds-menu__note {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n\n/* tooltip: a small inverted pill over its trigger, on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n}\n.ds-tooltip__tip {\n  display: none;\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  left: 50%;\n  z-index: 9;\n  padding: var(--space-1) var(--space-3);\n  transform: translateX(-50%);\n  background-color: var(--color-inverse);\n  background: var(--fill-inverse);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control);\n  color: var(--color-inverse-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n  text-transform: none;\n  white-space: nowrap;\n  pointer-events: none;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus-within .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n\n/* switch: a fat clay toggle over a checkbox */\n.ds-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  line-height: var(--line-heading);\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n.ds-switch__track {\n  position: relative;\n  flex: none;\n  width: calc(2 * var(--size-thumb) + 3 * var(--space-1));\n  height: calc(var(--size-thumb) + 2 * var(--space-1));\n  background-color: var(--color-input);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control-pressed);\n  transition: var(--transition);\n}\n.ds-switch__track::before {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  left: var(--space-1);\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  margin-top: calc(var(--size-thumb) / -2);\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch.is-on .ds-switch__track {\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n}\n.ds-switch__input:checked + .ds-switch__track::before,\n.ds-switch.is-on .ds-switch__track::before {\n  left: auto;\n  right: var(--space-1);\n}\n.ds-switch__input:focus-visible + .ds-switch__track {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-1);\n}\n.ds-switch--end {\n  display: flex;\n  flex-direction: row-reverse;\n  justify-content: space-between;\n}\n.ds-switch__label {\n  min-width: 0;\n}\n.ds-switch__hint {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n\n/* progress: a thick pressed track with a puffy bar, or a ring around a clay ball */\n.ds-progress {\n  display: block;\n  height: var(--size-track);\n  background-color: var(--color-input);\n  background: var(--fill-input);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control);\n}\n.ds-progress--40 .ds-progress__bar {\n  width: 40%;\n}\n.ds-progress--60 .ds-progress__bar {\n  width: 60%;\n}\n.ds-progress--75 .ds-progress__bar {\n  width: 75%;\n}\n.ds-progress--ring {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: var(--size-ring);\n  height: var(--size-ring);\n  background: conic-gradient(var(--color-accent) 50%, var(--color-surface-strong) 0);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n}\n.ds-progress--ring.ds-progress--40 {\n  background: conic-gradient(var(--color-accent) 40%, var(--color-surface-strong) 0);\n}\n.ds-progress--ring.ds-progress--60 {\n  background: conic-gradient(var(--color-accent) 60%, var(--color-surface-strong) 0);\n}\n.ds-progress--ring.ds-progress--75 {\n  background: conic-gradient(var(--color-accent) 75%, var(--color-surface-strong) 0);\n}\n.ds-progress__face {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  width: 66%;\n  height: 66%;\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  font-variant-numeric: tabular-nums;\n}\n.ds-progress__legend {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n  font-variant-numeric: tabular-nums;\n}\n\n/* avatar: initials on a clay ball, alone or beside a name */\n.ds-avatar {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-width: 0;\n  color: inherit;\n  text-decoration: none;\n}\n.ds-avatar__pic {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\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-avatar--3 .ds-avatar__pic {\n  background: var(--color-fill-3);\n}\n.ds-avatar__text {\n  min-width: 0;\n}\n.ds-avatar__name {\n  display: block;\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-avatar__meta {\n  display: block;\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  opacity: 0.75;\n}\n\n/* accordion: every section its own clay bar that opens */\n.ds-accordion {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\n}\n.ds-accordion__item {\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-panel), var(--radius-control));\n  box-shadow: var(--shadow-control);\n  color: var(--color-text);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-3) var(--space-3) var(--space-5);\n  color: var(--color-heading-alt);\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  list-style: none;\n  cursor: pointer;\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head:focus-visible {\n  outline: var(--focus-ring);\n}\n.ds-accordion__chevron {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: calc(var(--size-icon) + var(--space-4));\n  height: calc(var(--size-icon) + var(--space-4));\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n  transition: var(--transition);\n}\n.ds-accordion__chevron svg {\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-accordion__item[open] .ds-accordion__chevron {\n  box-shadow: var(--shadow-control-pressed);\n  transform: rotate(180deg);\n}\n.ds-accordion__body {\n  padding: 0 var(--space-5) var(--space-4);\n  color: var(--color-text-muted);\n  font-size: var(--text-ui);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* carousel: one slide showing, round clay arrows and dots under it */\n.ds-carousel {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  min-width: 0;\n}\n.ds-carousel__track {\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scrollbar-width: none;\n  border-radius: var(--radius-panel);\n}\n.ds-carousel__slide {\n  flex: 0 0 100%;\n  min-width: 0;\n  scroll-snap-align: start;\n}\n.ds-carousel__foot {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-4);\n}\n.ds-carousel__arrow {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control);\n  height: var(--size-control);\n  margin: 0;\n  padding: 0;\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-carousel__arrow svg {\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-carousel__arrow:hover,\n.ds-carousel__arrow.is-hover {\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-carousel__arrow:active,\n.ds-carousel__arrow.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: scale(0.94);\n}\n.ds-carousel__dots {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n}\n.ds-carousel__dot {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  background: var(--color-surface-strong);\n  border-radius: var(--radius-pill);\n}\n.ds-carousel__dot.is-current {\n  width: calc(3 * var(--size-dot));\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n}\n\n@media (max-width: 560px) {\n  .ds-pagination {\n    gap: var(--space-2);\n  }\n  .ds-pagination__link {\n    min-width: calc(var(--size-control) - var(--space-2));\n    min-height: calc(var(--size-control) - var(--space-2));\n    padding: 0 var(--space-3);\n  }\n}\n\n/* the app frame: a clay rail at the left, the working column beside it */\n.ds-page {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  align-items: start;\n}\n.ds-page__inner {\n  width: 100%;\n  max-width: calc(var(--size-page) + 2 * var(--space-6));\n  margin: 0 auto;\n  padding: var(--space-5) var(--space-6) var(--space-6);\n}\n/* the strip over every view: search at the left, streak and account at the right */\n.ds-page__top {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  margin-bottom: var(--space-6);\n}\n.ds-page__search {\n  flex: 1;\n  max-width: var(--size-search);\n}\n.ds-page__top-end {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  margin-left: auto;\n}\n.ds-page__account {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-3) var(--space-1) var(--space-1);\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n}\n.ds-page__stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-6);\n  min-width: 0;\n}\n/* the working column and a narrower column at the right */\n.ds-page__cols {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-aside);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-page__heading {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0 0 var(--space-4);\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n\n.ds-page__heading .ds-link {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  letter-spacing: 0;\n}\n\n/* nav: the rail, one tall clay card with chunky items */\n.ds-nav {\n  position: sticky;\n  top: 0;\n  padding: var(--space-5) 0 var(--space-5) var(--space-5);\n}\n.ds-nav__inner {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  padding: var(--space-5) var(--space-4);\n  background-color: var(--color-bar);\n  background: var(--fill-bar);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-bar-text);\n}\n.ds-nav__inner > .ds-brand {\n  padding: 0 var(--space-2);\n}\n.ds-nav__list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-4);\n  border-radius: min(var(--radius-control), var(--radius-panel));\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-heading);\n  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--ui-transform);\n  transition: var(--transition);\n}\n.ds-nav__link svg {\n  flex: none;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  box-shadow: var(--shadow-control);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#today\"],\n.ds-page:has(#today:target) .ds-nav__link[href=\"#today\"],\n.ds-page:has(#lessons:target) .ds-nav__link[href=\"#lessons\"],\n.ds-page:has(#lesson:target) .ds-nav__link[href=\"#lesson\"],\n.ds-page:has(#settings:target) .ds-nav__link[href=\"#settings\"] {\n  background-color: var(--color-accent);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n}\n/* the streak card at the foot of the rail */\n.ds-nav__card {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  padding: var(--space-4);\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control);\n  color: var(--color-text);\n  font-size: var(--text-small);\n}\n.ds-nav__card-title {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n\n/* hero: the greeting on one inverted clay block, a clay character at the right */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) auto;\n  gap: var(--space-6);\n  align-items: center;\n  padding: var(--space-7);\n  background-color: var(--color-inverse);\n  background: var(--fill-inverse);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n  color: var(--color-inverse-text);\n}\n.ds-hero__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  max-width: 44ch;\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-large);\n  opacity: 0.85;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-5);\n}\n.ds-hero__art {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  padding-right: var(--space-4);\n}\n.ds-hero__art .ds-clay--tiny {\n  align-self: flex-start;\n}\n.ds-hero__art .ds-clay--small {\n  align-self: flex-end;\n}\n\n/* grid: four clay tiles with one figure each */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  padding: var(--space-5);\n  background-color: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel), 0 var(--space-4) var(--space-6) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-1) 80%, transparent);\n  color: var(--color-accent-text);\n}\n.ds-grid__cell--1 {\n  background-color: var(--color-fill-1);\n}\n.ds-grid__cell--2 {\n  background-color: var(--color-fill-2);\n  box-shadow: var(--shadow-panel), 0 var(--space-4) var(--space-6) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-2) 80%, transparent);\n}\n.ds-grid__cell--3 {\n  background-color: var(--color-fill-3);\n  box-shadow: var(--shadow-panel), 0 var(--space-4) var(--space-6) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-3) 80%, transparent);\n}\n.ds-grid__cell--4 {\n  background-color: var(--color-fill-4);\n  box-shadow: var(--shadow-panel), 0 var(--space-4) var(--space-6) calc(-1 * var(--space-3)) color-mix(in srgb, var(--color-fill-4) 80%, transparent);\n}\n.ds-grid__icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control);\n  height: var(--size-control);\n  margin-bottom: var(--space-3);\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-radius: 34%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-button-secondary-text);\n}\n.ds-grid__icon svg {\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-grid__value {\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  font-variant-numeric: tabular-nums;\n}\n.ds-grid__label {\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-heading);\n}\n.ds-grid__meta {\n  margin-top: var(--space-1);\n  font-size: var(--text-small);\n  line-height: var(--line-heading);\n  opacity: 0.8;\n}\n\n/* list: lesson cards, a numbered clay ball in front of each */\n.ds-list__item {\n  padding: var(--space-4);\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-list__step {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: none;\n  width: var(--size-control-large);\n  height: var(--size-control-large);\n  background-color: var(--color-fill-1);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  color: var(--color-accent-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n}\n.ds-list__step--2 {\n  background-color: var(--color-fill-2);\n}\n.ds-list__step--3 {\n  background-color: var(--color-fill-3);\n}\n.ds-list__step--4 {\n  background-color: var(--color-fill-4);\n}\n.ds-list__item.is-locked {\n  background: var(--color-surface-alt);\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* the weekly goal: a ring beside its bars */\n.ds-panel__goal {\n  display: flex;\n  align-items: center;\n  gap: var(--space-5);\n}\n.ds-panel__bars {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  gap: var(--space-3);\n  min-width: 0;\n}\n.ds-panel__rank {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-panel__points {\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  font-variant-numeric: tabular-nums;\n}\n\n/* sidebar: the courses, a flat block of chunky links inside a clay card */\n.ds-sidebar {\n  padding: var(--space-5) var(--space-4);\n  background-color: var(--color-surface);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-sidebar__heading {\n  margin: 0 var(--space-2) var(--space-3);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-sidebar__list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-2) var(--space-4);\n  background: var(--color-surface-alt);\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  transition: var(--transition);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  box-shadow: var(--shadow-control);\n}\n.ds-sidebar__link.is-current {\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* the flashcard: the slide of the lesson's carousel */\n.ds-card {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-4);\n  height: 100%;\n  padding: var(--space-7) var(--space-5);\n  background-color: var(--color-fill-3);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  color: var(--color-accent-text);\n  text-align: center;\n}\n.ds-card--2 {\n  background-color: var(--color-fill-2);\n}\n.ds-card--4 {\n  background-color: var(--color-fill-4);\n}\n.ds-card__sign {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: calc(var(--size-clay) * 1.5);\n  height: calc(var(--size-clay) * 1.5);\n  background-color: var(--color-button-secondary);\n  background: var(--fill-button-secondary);\n  border-radius: 50%;\n  box-shadow: var(--shadow-panel);\n  color: var(--color-button-secondary-text);\n}\n.ds-card__sign svg {\n  width: 54%;\n  height: 54%;\n}\n.ds-card__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-card__text {\n  max-width: 40ch;\n  margin: 0;\n}\n.ds-carousel__track {\n  margin: calc(var(--space-5) * -1);\n  padding: var(--space-5);\n  scroll-padding: var(--space-5);\n  gap: var(--space-7);\n}\n/* the answers: a grid of fat keys under the card */\n.ds-card__answers {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: var(--space-4);\n}\n\n/* stats sit three across, each with a clay dot in its own fill */\n.ds-stat__item {\n  display: flex;\n  flex-direction: column;\n}\n\n/* footer: one flat clay strip at the end of the working column */\n.ds-footer {\n  margin-top: var(--space-8);\n  font-size: var(--text-small);\n}\n.ds-footer__inner {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-5);\n  padding: var(--space-4) var(--space-5);\n  background-color: var(--color-bar-alt);\n  background: var(--fill-bar-alt);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control);\n  color: var(--color-bar-alt-text);\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: underline;\n}\n\n@media (max-width: 1100px) {\n  .ds-page__cols {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n}\n@media (max-width: 900px) {\n  .ds-page {\n    display: block;\n  }\n  /* the rail turns into the brand over a chunky tab bar */\n  .ds-nav {\n    position: static;\n    padding: var(--space-4) var(--space-4) 0;\n  }\n  .ds-nav__inner {\n    gap: var(--space-3);\n    padding: var(--space-3);\n    border-radius: var(--radius-panel);\n  }\n  .ds-nav__list {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: var(--space-1);\n  }\n  .ds-nav__link {\n    flex-direction: column;\n    justify-content: center;\n    gap: var(--space-1);\n    padding: var(--space-2) var(--space-1);\n    font-size: var(--text-small);\n    text-align: center;\n    text-transform: none;\n  }\n  .ds-nav__card {\n    display: none;\n  }\n  .ds-page__inner {\n    padding: var(--space-4);\n  }\n  /* the track bleeds no further than the page's padding */\n  .ds-carousel__track {\n    margin: calc(var(--space-4) * -1);\n    padding: var(--space-4);\n    scroll-padding: var(--space-4);\n  }\n}\n@media (max-width: 560px) {\n  .ds-carousel__track {\n    margin: calc(var(--space-4) * -1);\n    padding: var(--space-4);\n    scroll-padding: var(--space-4);\n  }\n  .ds-page__top {\n    margin-bottom: var(--space-5);\n  }\n  .ds-page__account-name {\n    display: none;\n  }\n  .ds-page__account {\n    padding: var(--space-1);\n  }\n  .ds-hero {\n    grid-template-columns: minmax(0, 1fr);\n    padding: var(--space-6) var(--space-5);\n    border-radius: var(--radius-panel);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h2);\n  }\n  .ds-hero__lead {\n    font-size: var(--text-base);\n  }\n  .ds-hero__actions .ds-button {\n    flex: 1 1 auto;\n  }\n  .ds-hero__art {\n    justify-content: center;\n    padding: 0;\n  }\n  .ds-grid {\n    gap: var(--space-4);\n  }\n  .ds-grid__cell {\n    padding: var(--space-4);\n  }\n  .ds-grid__value {\n    font-size: var(--text-h2);\n  }\n  .ds-stat {\n    grid-template-columns: minmax(0, 1fr);\n    gap: var(--space-4);\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n  }\n  .ds-list__item .ds-button {\n    flex: 1 1 100%;\n  }\n  .ds-panel__goal {\n    flex-direction: column;\n    align-items: stretch;\n  }\n  .ds-panel__goal .ds-progress--ring {\n    align-self: center;\n  }\n  .ds-form__row,\n  .ds-card__answers {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-tabs {\n    display: flex;\n    align-self: stretch;\n    flex-wrap: wrap;\n    gap: var(--space-1);\n    border-radius: var(--radius-panel);\n  }\n  .ds-tabs > * {\n    flex: 1 1 auto;\n  }\n  .ds-tabs__tab {\n    padding: var(--space-2) var(--space-3);\n    text-align: center;\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-3) var(--space-3);\n  }\n  .ds-table .ds-table__opt {\n    display: none;\n  }\n  .ds-page-header__title {\n    font-size: var(--text-h2);\n  }\n  .ds-page-header__lead {\n    font-size: var(--text-base);\n  }\n  .ds-card {\n    padding: var(--space-6) var(--space-4);\n    border-radius: var(--radius-panel);\n  }\n  .ds-dialog {\n    padding: var(--space-5) var(--space-4);\n  }\n  .ds-dialog__box {\n    padding: var(--space-5);\n    border-radius: var(--radius-panel);\n  }\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: read music in ten minutes a day</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__inner\">\n    <a class=\"ds-brand\" data-component=\"brand\" href=\"#today\">\n      <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"8.6\" cy=\"8.8\" r=\"6\"/><circle cx=\"15.4\" cy=\"9.6\" r=\"5.2\"/><circle cx=\"11\" cy=\"15.2\" r=\"6\"/><circle cx=\"19.2\" cy=\"18.8\" r=\"2.6\"/></svg></span>\n      <span class=\"ds-brand__name\">chronoskin</span>\n    </a>\n    <ul class=\"ds-nav__list\">\n      <li><a class=\"ds-nav__link\" href=\"#today\"><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 11 12 4l8 7v8a1 1 0 0 1-1 1h-4v-6H9v6H5a1 1 0 0 1-1-1z\"/></svg>Today</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#lessons\"><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 5h14v14H5zM5 10h14M10 10v9\"/></svg>Lessons</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#lesson\"><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.500\" cy=\"18\" r=\"2.500\"/><circle cx=\"16.500\" cy=\"16\" r=\"2.500\"/></svg>Practice</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#settings\"><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 7h9M18 7h1M5 12h2M11 12h8M5 17h7M16 17h3\"/><circle cx=\"16\" cy=\"7\" r=\"2\"/><circle cx=\"9\" cy=\"12\" r=\"2\"/><circle cx=\"14\" cy=\"17\" r=\"2\"/></svg>Settings</a></li>\n    </ul>\n    <div class=\"ds-nav__card\">\n      <span class=\"ds-nav__card-title\">14 day streak</span>\n      <span class=\"ds-progress ds-progress--60\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Today's goal\"><span class=\"ds-progress__bar\"></span></span>\n      <span>6 of 10 minutes today</span>\n    </div>\n  </div>\n</header>\n\n<div class=\"ds-page__inner\">\n\n  <div class=\"ds-page__top\">\n    <input class=\"ds-form__input ds-page__search\" type=\"search\" placeholder=\"Find a lesson or a sign\" aria-label=\"Search\">\n    <div class=\"ds-page__top-end\">\n      <span class=\"ds-tooltip\" data-component=\"tooltip\"><a class=\"ds-badge\" href=\"#today\">14 days</a><span class=\"ds-tooltip__tip\" role=\"tooltip\">Your streak, one freeze left</span></span>\n      <details class=\"ds-menu ds-menu--end\" data-component=\"menu\">\n        <summary class=\"ds-menu__toggle ds-page__account\"><span class=\"ds-avatar ds-avatar--3\" data-component=\"avatar\"><span class=\"ds-avatar__pic\">MV</span></span><span class=\"ds-page__account-name\">Mira</span><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m4 6 4 4 4-4\"/></svg></summary>\n        <ul class=\"ds-menu__list\">\n          <li><a class=\"ds-menu__link\" href=\"#settings\">Profile</a></li>\n          <li><a class=\"ds-menu__link\" href=\"#settings\">Reminders <span class=\"ds-menu__note\">18:30</span></a></li>\n          <li><a class=\"ds-menu__link\" href=\"#lessons\">Saved signs <span class=\"ds-menu__note\">0</span></a></li>\n          <li><a class=\"ds-menu__link\" href=\"#today\">Log out</a></li>\n        </ul>\n      </details>\n    </div>\n  </div>\n\n  <section class=\"ds-view ds-view--home\" id=\"today\">\n  <div class=\"ds-page__stack\">\n\n    <section class=\"ds-hero\" data-component=\"hero\">\n      <div>\n        <h1 class=\"ds-hero__title\">Good afternoon, Mira</h1>\n        <p class=\"ds-hero__lead\">Lesson 12 is ten minutes of quarter rests. Do it today and the streak reaches fifteen days.</p>\n        <div class=\"ds-hero__actions\">\n          <a class=\"ds-button ds-button--large\" href=\"#lesson\">Continue lesson 12</a>\n          <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#lessons\">Pick another</a>\n        </div>\n      </div>\n      <div class=\"ds-hero__art\" aria-hidden=\"true\">\n        <span class=\"ds-clay ds-clay--3 ds-clay--tiny\"></span>\n        <span class=\"ds-clay ds-clay--1 ds-clay--large\"><span class=\"ds-clay__eye\"></span><span class=\"ds-clay__eye\"></span><span class=\"ds-clay__smile\"></span><span class=\"ds-clay__cheek\"></span><span class=\"ds-clay__cheek\"></span></span>\n        <span class=\"ds-clay ds-clay--4 ds-clay--small ds-clay--cube\"></span>\n      </div>\n    </section>\n\n    <section class=\"ds-grid\" data-component=\"grid\">\n      <div class=\"ds-grid__cell ds-grid__cell--1\">\n        <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3c1 4 5 5 5 10a5 5 0 0 1-10 0c0-2 1-3 2-4 0 2 1 3 2 3 0-3-1-5 1-9z\"/></svg></span>\n        <span class=\"ds-grid__value\">14</span>\n        <span class=\"ds-grid__label\">day streak</span>\n        <span class=\"ds-grid__meta\">Best so far: 21 days</span>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--2\">\n        <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 18V6l10-2v12\"/><circle cx=\"6.500\" cy=\"18\" r=\"2.500\"/><circle cx=\"16.500\" cy=\"16\" r=\"2.500\"/></svg></span>\n        <span class=\"ds-grid__value\">86</span>\n        <span class=\"ds-grid__label\">signs learned</span>\n        <span class=\"ds-grid__meta\">Seven new this week</span>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--3\">\n        <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"13\" r=\"7\"/><path d=\"M12 9v4l2.500 2M9 3h6\"/></svg></span>\n        <span class=\"ds-grid__value\">42</span>\n        <span class=\"ds-grid__label\">minutes this week</span>\n        <span class=\"ds-grid__meta\">Goal: 70 minutes</span>\n      </div>\n      <div class=\"ds-grid__cell ds-grid__cell--4\">\n        <span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m12 4 2.400 5 5.600.800-4 3.900 1 5.500-5-2.700-5 2.700 1-5.500-4-3.900 5.600-.800z\"/></svg></span>\n        <span class=\"ds-grid__value\">92%</span>\n        <span class=\"ds-grid__label\">right first time</span>\n        <span class=\"ds-grid__meta\">Up from 88% last week</span>\n      </div>\n    </section>\n\n    <div class=\"ds-page__cols\">\n\n      <div>\n        <h2 class=\"ds-page__heading\">Today's path <a class=\"ds-link\" href=\"#lessons\">All lessons</a></h2>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__step\">11</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#lesson\">Half notes and half rests</a>\n              <span class=\"ds-list__meta\">Done yesterday · 10 of 10 right</span>\n            </div>\n            <span class=\"ds-badge ds-badge--success\">Done</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__step ds-list__step--2\">12</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#lesson\">Quarter rests</a>\n              <span class=\"ds-list__meta\">10 minutes · 8 new signs · step 4 of 10</span>\n            </div>\n            <a class=\"ds-button\" href=\"#lesson\">Continue</a>\n          </li>\n          <li class=\"ds-list__item\">\n            <span class=\"ds-list__step ds-list__step--3\">13</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#lessons\">Counting in three</a>\n              <span class=\"ds-list__meta\">12 minutes · opens after lesson 12</span>\n            </div>\n            <a class=\"ds-button ds-button--secondary\" href=\"#lessons\">Peek</a>\n          </li>\n          <li class=\"ds-list__item is-locked\">\n            <span class=\"ds-list__step ds-list__step--4\">14</span>\n            <div class=\"ds-list__body\">\n              <a class=\"ds-list__title\" href=\"#lessons\">The dotted half note</a>\n              <span class=\"ds-list__meta\">9 minutes · locked until Thursday</span>\n            </div>\n            <span class=\"ds-badge ds-badge--quiet\">Locked</span>\n          </li>\n        </ul>\n      </div>\n\n      <div class=\"ds-page__stack\">\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h2 class=\"ds-panel__title\">This week <span class=\"ds-badge ds-badge--quiet\">day 4 of 7</span></h2>\n          <div class=\"ds-panel__body\">\n            <div class=\"ds-panel__goal\">\n              <span class=\"ds-progress ds-progress--ring ds-progress--60\" data-component=\"progress\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Weekly goal\"><span class=\"ds-progress__face\">60%</span></span>\n              <div class=\"ds-panel__bars\">\n                <div>\n                  <div class=\"ds-progress__legend\"><span>Notes</span><span>18 of 24</span></div>\n                  <span class=\"ds-progress ds-progress--75\" role=\"progressbar\" aria-valuenow=\"75\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Notes\"><span class=\"ds-progress__bar\"></span></span>\n                </div>\n                <div>\n                  <div class=\"ds-progress__legend\"><span>Rests</span><span>4 of 10</span></div>\n                  <span class=\"ds-progress ds-progress--40\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Rests\"><span class=\"ds-progress__bar\"></span></span>\n                </div>\n              </div>\n            </div>\n          </div>\n        </section>\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__heading\">Your courses</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li><a class=\"ds-sidebar__link is-current\" href=\"#lessons\">Rhythm <span class=\"ds-badge\" data-component=\"badge\">11 of 40</span></a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#lessons\">The treble clef <span class=\"ds-badge ds-badge--quiet\">3 of 24</span></a></li>\n            <li><a class=\"ds-sidebar__link\" href=\"#lessons\">Keys and scales <span class=\"ds-badge ds-badge--quiet\">new</span></a></li>\n          </ul>\n        </aside>\n      </div>\n\n    </div>\n\n  </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"lessons\">\n\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#today\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#lessons\">Lessons</a></li>\n      <li class=\"ds-breadcrumb__item\" aria-current=\"page\">Rhythm</li>\n    </ol>\n\n    <header class=\"ds-page-header\" data-component=\"page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Rhythm</h1>\n        <p class=\"ds-page-header__lead\">Forty short lessons, from the whole note to counting in six.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#lesson\">Continue lesson 12</a>\n      </div>\n    </header>\n\n    <div class=\"ds-page__stack\">\n\n      <dl class=\"ds-stat\" data-component=\"stats\">\n        <div class=\"ds-stat__item\">\n          <dt class=\"ds-stat__label\">Lessons done</dt>\n          <dd class=\"ds-stat__value\">11 <span class=\"ds-stat__meta\">of 40</span></dd>\n        </div>\n        <div class=\"ds-stat__item\">\n          <dt class=\"ds-stat__label\">Right first time</dt>\n          <dd class=\"ds-stat__value\">92% <span class=\"ds-stat__meta\">this course</span></dd>\n        </div>\n        <div class=\"ds-stat__item\">\n          <dt class=\"ds-stat__label\">Time spent</dt>\n          <dd class=\"ds-stat__value\">118 <span class=\"ds-stat__meta\">minutes</span></dd>\n        </div>\n      </dl>\n\n      <ul class=\"ds-tabs\" data-component=\"tabs\">\n        <li><a class=\"ds-tabs__tab is-current\" href=\"#lessons\" aria-current=\"true\">All</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#lessons\">In progress</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#lessons\">Done</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#lessons\">Saved</a></li>\n      </ul>\n\n      <div class=\"ds-page__cols\">\n\n        <div class=\"ds-page__stack\">\n          <table class=\"ds-table\" data-component=\"table\">\n            <thead>\n              <tr>\n                <th scope=\"col\">Lesson</th>\n                <th scope=\"col\">Status</th>\n                <th scope=\"col\" class=\"ds-table__num ds-table__opt\">Signs</th>\n                <th scope=\"col\" class=\"ds-table__num ds-table__opt\">Minutes</th>\n                <th scope=\"col\" class=\"ds-table__num\">Score</th>\n              </tr>\n            </thead>\n            <tbody>\n              <tr>\n                <td><a class=\"ds-link ds-link--quiet\" href=\"#lesson\">9 Whole notes</a></td>\n                <td><span class=\"ds-badge ds-badge--success\">Done</span></td>\n                <td class=\"ds-table__num ds-table__opt\">6</td>\n                <td class=\"ds-table__num ds-table__opt\">8</td>\n                <td class=\"ds-table__num\">100</td>\n              </tr>\n              <tr>\n                <td><a class=\"ds-link ds-link--quiet\" href=\"#lesson\">10 Whole rests</a></td>\n                <td><span class=\"ds-badge ds-badge--success\">Done</span></td>\n                <td class=\"ds-table__num ds-table__opt\">5</td>\n                <td class=\"ds-table__num ds-table__opt\">7</td>\n                <td class=\"ds-table__num\">90</td>\n              </tr>\n              <tr>\n                <td><a class=\"ds-link ds-link--quiet\" href=\"#lesson\">11 Half notes and rests</a></td>\n                <td><span class=\"ds-badge ds-badge--success\">Done</span></td>\n                <td class=\"ds-table__num ds-table__opt\">9</td>\n                <td class=\"ds-table__num ds-table__opt\">10</td>\n                <td class=\"ds-table__num\">100</td>\n              </tr>\n              <tr class=\"is-hover\">\n                <td><a class=\"ds-link ds-link--quiet\" href=\"#lesson\">12 Quarter rests</a></td>\n                <td><span class=\"ds-badge ds-badge--warning\">Step 4 of 10</span></td>\n                <td class=\"ds-table__num ds-table__opt\">8</td>\n                <td class=\"ds-table__num ds-table__opt\">10</td>\n                <td class=\"ds-table__num\">40</td>\n              </tr>\n              <tr>\n                <td><a class=\"ds-link ds-link--quiet\" href=\"#lesson\">13 Counting in three</a></td>\n                <td><span class=\"ds-badge ds-badge--quiet\">Next</span></td>\n                <td class=\"ds-table__num ds-table__opt\">7</td>\n                <td class=\"ds-table__num ds-table__opt\">12</td>\n                <td class=\"ds-table__num\">0</td>\n              </tr>\n              <tr>\n                <td><a class=\"ds-link ds-link--quiet\" href=\"#lesson\">14 The dotted half note</a></td>\n                <td><span class=\"ds-badge ds-badge--danger\">Locked</span></td>\n                <td class=\"ds-table__num ds-table__opt\">6</td>\n                <td class=\"ds-table__num ds-table__opt\">9</td>\n                <td class=\"ds-table__num\">0</td>\n              </tr>\n            </tbody>\n          </table>\n\n          <nav aria-label=\"Pages\">\n            <ul class=\"ds-pagination\" data-component=\"pagination\">\n              <li><a class=\"ds-pagination__link\" href=\"#lessons\">Previous</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#lessons\">1</a></li>\n              <li><a class=\"ds-pagination__link is-current\" href=\"#lessons\" aria-current=\"page\">2</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#lessons\">3</a></li>\n              <li><a class=\"ds-pagination__link\" href=\"#lessons\">Next</a></li>\n            </ul>\n          </nav>\n        </div>\n\n        <div class=\"ds-page__stack\">\n          <section class=\"ds-empty\" data-component=\"empty\">\n            <svg class=\"ds-empty__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.200\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 4h10v16l-5-4-5 4z\"/></svg>\n            <h2 class=\"ds-empty__title\">No saved signs yet</h2>\n            <p class=\"ds-empty__text\">Tap the ribbon on a card and it waits here for another go.</p>\n            <a class=\"ds-button\" href=\"#lesson\">Open a lesson</a>\n          </section>\n          <section class=\"ds-panel\">\n            <h2 class=\"ds-panel__title\">Unit 3 opens soon</h2>\n            <div class=\"ds-panel__body\">\n              <div>\n                <div class=\"ds-progress__legend\"><span>Lessons done</span><span>11 of 15</span></div>\n                <span class=\"ds-progress ds-progress--75\" role=\"progressbar\" aria-valuenow=\"73\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Unit 3\"><span class=\"ds-progress__bar\"></span></span>\n              </div>\n              <p class=\"ds-panel__note\">Four more lessons and counting in six unlocks.</p>\n            </div>\n          </section>\n        </div>\n\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"lesson\">\n\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#today\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#lessons\">Rhythm</a></li>\n      <li class=\"ds-breadcrumb__item\" aria-current=\"page\">Lesson 12</li>\n    </ol>\n\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Quarter rests</h1>\n        <p class=\"ds-page-header__lead\">Card 4 of 10. Which sign means one beat of silence?</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#lessons\">All lessons</a>\n      </div>\n    </header>\n\n    <div class=\"ds-page__cols\">\n\n      <div class=\"ds-page__stack\">\n        <div>\n          <div class=\"ds-progress__legend\"><span>Card 4 of 10</span><span>3 right, 0 wrong</span></div>\n          <span class=\"ds-progress ds-progress--40\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"Lesson progress\"><span class=\"ds-progress__bar\"></span></span>\n        </div>\n\n        <div class=\"ds-carousel\" data-component=\"carousel\" aria-roledescription=\"carousel\" aria-label=\"Cards of lesson 12\">\n          <div class=\"ds-carousel__track\">\n            <div class=\"ds-carousel__slide ds-card\">\n              <span class=\"ds-card__sign\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.600\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m9 3 5 6-4 4 5 5c-3-1-6 0-5 3\"/></svg></span>\n              <h2 class=\"ds-card__title\">One beat of silence</h2>\n              <p class=\"ds-card__text\">It sits in the middle of the staff and lasts as long as a quarter note.</p>\n            </div>\n            <div class=\"ds-carousel__slide ds-card ds-card--2\">\n              <span class=\"ds-card__sign\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.600\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 12h16M8 12V9h8v3\"/></svg></span>\n              <h2 class=\"ds-card__title\">Two beats of silence</h2>\n              <p class=\"ds-card__text\">A small hat that sits on the middle line.</p>\n            </div>\n            <div class=\"ds-carousel__slide ds-card ds-card--4\">\n              <span class=\"ds-card__sign\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.600\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 10h16M8 10v3h8v-3\"/></svg></span>\n              <h2 class=\"ds-card__title\">Four beats of silence</h2>\n              <p class=\"ds-card__text\">The same hat, hanging under the line.</p>\n            </div>\n          </div>\n          <div class=\"ds-carousel__foot\">\n            <button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Previous card\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.400\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 4 6 8l4 4\"/></svg></button>\n            <div class=\"ds-carousel__dots\" aria-hidden=\"true\"><span class=\"ds-carousel__dot is-current\"></span><span class=\"ds-carousel__dot\"></span><span class=\"ds-carousel__dot\"></span></div>\n            <button class=\"ds-carousel__arrow is-hover\" type=\"button\" aria-label=\"Next card\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.400\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 4 4 4-4 4\"/></svg></button>\n          </div>\n        </div>\n\n        <div class=\"ds-card__answers\">\n          <button class=\"ds-button ds-button--secondary ds-button--large is-active\" type=\"button\">Quarter rest</button>\n          <button class=\"ds-button ds-button--secondary ds-button--large\" type=\"button\">Half rest</button>\n          <button class=\"ds-button ds-button--secondary ds-button--large\" type=\"button\">Whole rest</button>\n          <button class=\"ds-button ds-button--secondary ds-button--large\" type=\"button\">Eighth rest</button>\n        </div>\n\n        <div class=\"ds-button__row\" data-component=\"buttons\">\n          <button class=\"ds-button\" type=\"button\">Check</button>\n          <button class=\"ds-button ds-button--secondary\" type=\"button\">Skip this card</button>\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Leave the lesson</button>\n          <button class=\"ds-button\" type=\"button\" disabled>Next card</button>\n        </div>\n      </div>\n\n      <div class=\"ds-page__stack\">\n        <section class=\"ds-panel\">\n          <div class=\"ds-panel__body\">\n            <article class=\"ds-prose\" data-component=\"typography\">\n              <h1>About rests</h1>\n              <p>A rest is silence that is <strong>counted</strong>. In <code>4/4</code> time a quarter rest takes one of the four beats.</p>\n              <h2>How to count it</h2>\n              <p>Say the number in your head and keep your hands still.</p>\n              <h3>Easy to mix up</h3>\n              <ul>\n                <li>The half rest sits on the line.</li>\n                <li>The whole rest hangs under it.</li>\n                <li>The quarter rest looks like a small bolt.</li>\n              </ul>\n              <p class=\"ds-link__sample\" data-component=\"links\">\n                <a class=\"ds-link\" href=\"#lessons\">Whole rests</a>\n                <a class=\"ds-link is-visited\" href=\"#lessons\">Half rests</a>\n                <a class=\"ds-link is-hover\" href=\"#lessons\">Counting in three</a>\n                <a class=\"ds-link is-active\" href=\"#lesson\">This card</a>\n                <a class=\"ds-link ds-link--quiet\" href=\"#settings\">Sound</a>\n              </p>\n            </article>\n          </div>\n        </section>\n        <section class=\"ds-dialog\" data-component=\"dialog\">\n          <div class=\"ds-dialog__box\" role=\"dialog\" aria-labelledby=\"d-title\">\n            <h2 class=\"ds-dialog__title\" id=\"d-title\">Leave the lesson?</h2>\n            <div class=\"ds-dialog__body\">Your three right answers are kept, and the streak waits until midnight.</div>\n            <div class=\"ds-dialog__actions\">\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Stay</button>\n              <button class=\"ds-button ds-button--danger\" type=\"button\">Leave</button>\n            </div>\n          </div>\n        </section>\n      </div>\n\n    </div>\n  </section>\n\n  <section class=\"ds-view\" id=\"settings\">\n\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#today\">chronoskin</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-breadcrumb__link\" href=\"#settings\">Settings</a></li>\n      <li class=\"ds-breadcrumb__item\" aria-current=\"page\">Profile and reminders</li>\n    </ol>\n\n    <header class=\"ds-page-header\">\n      <div class=\"ds-page-header__text\">\n        <h1 class=\"ds-page-header__title\">Settings</h1>\n        <p class=\"ds-page-header__lead\">Your name, your daily goal and when to nudge you.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#today\">Back to today</a>\n      </div>\n    </header>\n\n    <div class=\"ds-page__cols\">\n\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Profile</h2>\n        <div class=\"ds-panel__body\">\n          <form class=\"ds-form\" data-component=\"form\">\n            <div class=\"ds-form__row\">\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-name\">Name</label>\n                <input class=\"ds-form__input\" id=\"f-name\" type=\"text\" value=\"Mira Voss\">\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-mail\">Email</label>\n                <input class=\"ds-form__input is-error\" id=\"f-mail\" type=\"text\" value=\"mira@\" aria-invalid=\"true\" aria-describedby=\"f-mail-error\">\n                <span class=\"ds-form__error\" id=\"f-mail-error\">Enter a complete email address.</span>\n              </div>\n            </div>\n            <div class=\"ds-form__row\">\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-goal\">Daily goal</label>\n                <span class=\"ds-form__select-wrap\">\n                  <select class=\"ds-form__select\" id=\"f-goal\">\n                    <option>10 minutes</option>\n                    <option>5 minutes</option>\n                    <option>15 minutes</option>\n                    <option>20 minutes</option>\n                  </select>\n                  <svg class=\"ds-form__chevron\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.200\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m4 6 4 4 4-4\"/></svg>\n                </span>\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-time\">Remind me at</label>\n                <input class=\"ds-form__input\" id=\"f-time\" type=\"text\" value=\"18:30\">\n              </div>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-why\">What do you want to play?</label>\n              <textarea class=\"ds-form__textarea\" id=\"f-why\" placeholder=\"A song, an instrument, a choir part\"></textarea>\n              <span class=\"ds-form__hint\">We pick the examples in your lessons from this.</span>\n            </div>\n            <label class=\"ds-form__check\">\n              <input class=\"ds-form__checkbox\" type=\"checkbox\" checked>\n              Show me on the weekly board\n            </label>\n            <div class=\"ds-form__actions\">\n              <button class=\"ds-button\" type=\"button\">Save</button>\n              <button class=\"ds-button ds-button--secondary\" type=\"button\">Cancel</button>\n            </div>\n          </form>\n        </div>\n      </section>\n\n      <div class=\"ds-page__stack\">\n        <div class=\"ds-notice__stack\" data-component=\"notice\">\n          <div class=\"ds-notice\" role=\"status\">\n            <svg class=\"ds-notice__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"8\"/><path d=\"M10 9v5M10 6v.500\"/></svg>\n            <div><span class=\"ds-notice__title\">One streak freeze left.</span> It is used by itself on a missed day.</div>\n          </div>\n          <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n            <svg class=\"ds-notice__icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 2.500 18 17H2z\"/><path d=\"M10 8v4M10 14v.500\"/></svg>\n            <div><span class=\"ds-notice__title\">Yesterday's reminder was not sent.</span> Check the email address.</div>\n          </div>\n        </div>\n        <section class=\"ds-panel\">\n          <h2 class=\"ds-panel__title\">Reminders</h2>\n          <div class=\"ds-panel__body\">\n            <label class=\"ds-switch ds-switch--end\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Daily nudge <span class=\"ds-switch__hint\">At 18:30, if the goal is open</span></span></label>\n            <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Sounds in lessons</span></label>\n            <label class=\"ds-switch ds-switch--end\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span class=\"ds-switch__label\">Weekly summary by email</span></label>\n          </div>\n        </section>\n        <div class=\"ds-accordion\" data-component=\"accordion\">\n          <details class=\"ds-accordion__item\" open>\n            <summary class=\"ds-accordion__head\">What is a streak freeze? <span class=\"ds-accordion__chevron\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.200\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m4 6 4 4 4-4\"/></svg></span></summary>\n            <div class=\"ds-accordion__body\"><p>A day off that does not break the streak. You earn one for every seven days in a row.</p></div>\n          </details>\n          <details class=\"ds-accordion__item\">\n            <summary class=\"ds-accordion__head\">Can I change the course? <span class=\"ds-accordion__chevron\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.200\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m4 6 4 4 4-4\"/></svg></span></summary>\n            <div class=\"ds-accordion__body\"><p>Yes, from the list of courses on the Today page. Progress is kept in each.</p></div>\n          </details>\n        </div>\n      </div>\n\n    </div>\n  </section>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <div class=\"ds-footer__inner\">\n      <span>chronoskin · read music in ten minutes a day</span>\n      <ul class=\"ds-footer__links\">\n        <li><a class=\"ds-footer__link\" href=\"#lessons\">Lessons</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#settings\">Settings</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#today\">Help</a></li>\n      </ul>\n    </div>\n  </footer>\n\n</div>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.claymorphism.app.s02.p01.t03.u04\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"claymorphism\",\n    \"years\": [\n      2021,\n      2025\n    ]\n  },\n  \"archetype\": \"app\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-cl-2134\",\n  \"short\": \"v1-cl-2134\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: rgb(236 230 251);\n  --color-canvas: rgb(243 238 253);\n  --color-surface: rgb(252 250 255);\n  --color-surface-alt: rgb(243 237 254);\n  --color-surface-strong: rgb(226 216 248);\n  --color-bar: rgb(252 250 255);\n  --color-bar-text: rgb(58 45 107);\n  --color-bar-alt: rgb(214 200 250);\n  --color-bar-alt-text: rgb(50 36 100);\n  --color-inverse: rgb(58 45 107);\n  --color-inverse-text: rgb(246 241 255);\n  --color-text: rgb(63 53 100);\n  --color-text-muted: rgb(105 95 142);\n  --color-heading: rgb(44 33 86);\n  --color-heading-alt: rgb(84 62 168);\n  --color-link: rgb(101 60 220);\n  --color-link-quiet: rgb(58 45 107);\n  --color-link-visited: rgb(138 72 170);\n  --color-link-hover: rgb(70 32 178);\n  --color-link-active: rgb(200 62 110);\n  --color-border: rgb(217 207 242);\n  --color-border-strong: rgb(185 168 232);\n  --color-border-muted: rgb(235 228 250);\n  --color-accent: rgb(255 184 156);\n  --color-accent-text: rgb(59 34 89);\n  --color-accent-alt: rgb(255 143 177);\n  --color-fill-1: rgb(203 187 255);\n  --color-fill-2: rgb(255 202 178);\n  --color-fill-3: rgb(170 236 208);\n  --color-fill-4: rgb(255 227 156);\n  --color-button: rgb(124 92 255);\n  --color-button-text: rgb(255 255 255);\n  --color-button-hover-text: rgb(255 255 255);\n  --color-button-secondary: rgb(252 250 255);\n  --color-button-secondary-text: rgb(74 53 176);\n  --color-input: rgb(240 234 252);\n  --color-input-text: rgb(63 53 100);\n  --color-input-border: rgb(207 195 238);\n  --color-disabled: rgb(228 222 242);\n  --color-disabled-text: rgb(150 142 182);\n  --color-danger: rgb(196 46 88);\n  --color-danger-surface: rgb(255 224 232);\n  --color-success: rgb(31 157 110);\n  --color-warning: rgb(214 138 24);\n  --color-notice: rgb(220 240 255);\n  --color-notice-text: rgb(36 71 107);\n  --color-focus: rgb(90 54 224);\n  --color-shadow: rgb(116 92 200 / 0.38);\n  --color-overlay: rgb(58 45 107 / 0.32);\n}\n\n/* @part type */\n:root {\n  --font-body: Quicksand, \"Hiragino Maru Gothic ProN\", \"Varela Round\", \"Avenir Next\", \"Segoe UI\", sans-serif;\n  --font-heading: Outfit, Lexend, Futura, \"Century Gothic\", \"Avenir Next\", sans-serif;\n  --font-ui: Outfit, Lexend, Futura, \"Century Gothic\", \"Avenir Next\", sans-serif;\n  --font-mono: \"JetBrains Mono\", \"Fira Code\", Menlo, Consolas, monospace;\n  --text-base: 18px;\n  --text-small: 14px;\n  --text-ui: 17px;\n  --text-large: 22px;\n  --text-display: 58px;\n  --text-h1: 36px;\n  --text-h2: 26px;\n  --text-h3: 21px;\n  --line-body: 1.5;\n  --line-heading: 1.2;\n  --line-display: 1.1;\n  --weight-body: 400;\n  --weight-bold: 600;\n  --weight-heading: 600;\n  --weight-display: 700;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0.01em;\n  --display-tracking: -0.01em;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: none;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 0;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 18px;\n  --radius-panel: 30px;\n  --radius-pill: 999px;\n  --radius-page: 42px;\n  --shadow-panel: 0 26px 44px -14px var(--color-shadow), inset 0 -12px 22px color-mix(in srgb, black 30%, transparent), inset 0 2px 0 color-mix(in srgb, white 20%, transparent), inset 0 12px 20px color-mix(in srgb, white 10%, transparent);\n  --shadow-control: 0 12px 20px -8px var(--color-shadow), inset 0 -7px 12px color-mix(in srgb, black 28%, transparent), inset 0 2px 0 color-mix(in srgb, white 26%, transparent), inset 0 7px 10px color-mix(in srgb, white 14%, transparent);\n  --shadow-control-hover: 0 18px 28px -8px var(--color-shadow), inset 0 -7px 12px color-mix(in srgb, black 28%, transparent), inset 0 2px 0 color-mix(in srgb, white 36%, transparent), inset 0 7px 10px color-mix(in srgb, white 22%, transparent);\n  --shadow-control-pressed: inset 0 7px 12px color-mix(in srgb, black 38%, transparent), inset 0 -2px 0 color-mix(in srgb, white 12%, transparent), inset 0 -6px 10px color-mix(in srgb, white 6%, transparent);\n  --shadow-dialog: 0 40px 72px -20px var(--color-shadow), 0 0 0 1px color-mix(in srgb, white 8%, transparent), inset 0 -14px 26px color-mix(in srgb, black 30%, transparent), inset 0 2px 0 color-mix(in srgb, white 24%, transparent), inset 0 14px 24px color-mix(in srgb, white 12%, transparent);\n  --shadow-text: none;\n  --fill-page: radial-gradient(50% 36% at 0% 0%, color-mix(in srgb, var(--color-fill-2) 18%, transparent), transparent 70%), radial-gradient(46% 34% at 100% 100%, color-mix(in srgb, var(--color-accent) 14%, transparent), transparent 70%), linear-gradient(160deg, var(--color-canvas), var(--color-page) 60%);\n  --fill-bar: linear-gradient(180deg, color-mix(in srgb, var(--color-bar) 90%, white), var(--color-bar) 50%);\n  --fill-bar-alt: linear-gradient(180deg, color-mix(in srgb, var(--color-bar-alt) 92%, white), var(--color-bar-alt) 50%);\n  --fill-inverse: linear-gradient(180deg, var(--color-inverse), color-mix(in srgb, var(--color-inverse) 88%, black));\n  --fill-accent: linear-gradient(180deg, color-mix(in srgb, var(--color-accent) 80%, white), var(--color-accent) 50%, color-mix(in srgb, var(--color-accent) 90%, black)), var(--color-accent);\n  --fill-panel: linear-gradient(180deg, color-mix(in srgb, var(--color-surface) 91%, white), var(--color-surface) 46%);\n  --fill-button: linear-gradient(180deg, color-mix(in srgb, var(--color-button) 78%, white), var(--color-button) 50%, color-mix(in srgb, var(--color-button) 88%, black)), var(--color-button);\n  --fill-button-hover: linear-gradient(180deg, color-mix(in srgb, var(--color-button) 64%, white), var(--color-button) 60%), var(--color-button);\n  --fill-button-secondary: linear-gradient(180deg, color-mix(in srgb, var(--color-button-secondary) 90%, white), var(--color-button-secondary) 50%), var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: transform 0.18s ease-out, box-shadow 0.18s ease-out, background-color 0.18s ease-out, color 0.18s ease-out;\n  --backdrop-blur: 0px;\n}\n"
  }
}
