{
  "id": "v1-nb-514b-dr",
  "long_id": "v1.neubrutalism.app.s05.p01.t04.u11.dr",
  "name": "Neubrutalism dashboard (2021 to 2026)",
  "era": {
    "slug": "neubrutalism",
    "code": "nb",
    "name": "Neubrutalism",
    "years": [
      2021,
      2026
    ],
    "description": "Loud and flat, 2021 to 2026: thick black outlines, hard offset shadows with no blur, saturated colour blocks and bold type."
  },
  "archetype": "app",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "density": "roomy",
  "summary": "An application screen in the neubrutalist look: a white rail of navigation on the left, a filled strip across the top and a working area of outlined cards on a dotted page, every card standing on a hard, unblurred shadow. It was common from about 2021 to 2026 in admin templates, dashboards of small software products and the component kits that fed them. Figures sit in chunky filled cards, tables and tabs are closed by thick rules, and nothing is shaded, blurred or faded.",
  "url": "https://chrono.skin/s/v1-nb-514b-dr",
  "preview_url": "https://chrono.skin/s/v1-nb-514b-dr/specimen.html",
  "files": {
    "STYLE.md": "# Neubrutalism dashboard (2021 to 2026)\n\n## Summary\n\nAn application screen in the neubrutalist look: a white rail of navigation on the left, a filled strip across the top and a working area of outlined cards on a dotted page, every card standing on a hard, unblurred shadow. It was common from about 2021 to 2026 in admin templates, dashboards of small software products and the component kits that fed them. Figures sit in chunky filled cards, tables and tabs are closed by thick rules, and nothing is shaded, blurred or faded.\n\n## Layout\n\n- The page is fluid: `--size-page` is 100%. `.ds-page` is a grid of two columns, a `--size-rail` (248px) rail on the left that runs the full height of the page and the rest for the top bar, the screen and the footer. Designed at a 1440px viewport, where the screen is 1128px of content; the content is capped at `--size-content` (1180px) and centred beyond that.\n- The rail (`.ds-nav`) is the only navigation: the brand, a label, a column of links with icons and counts (the current one a filled, outlined, shadowed block), then a storage card on the inverse fill. It is closed on its right by a `--border-width-strong` rule.\n- The top bar (`.ds-topbar`) is a `--size-topbar` (64px) strip on `--fill-bar-alt`, closed by a `--border-width-strong` rule: a `--size-search` (300px) search field, a line of status text, one small primary button and the signed-in person.\n- The screen (`.ds-main`, then one `.ds-screen` per view) stacks its blocks `--space-6` (24px) apart with `--space-gutter` (32px) at the sides. The home screen is: the hero card, a row of four stat cards, then two rows split 2:1 (`.ds-split--wide`). There are no full-bleed bands and no rules between blocks; every block is a card on the page fill.\n- Inner pages keep the rail, the top bar and the footer and drop the hero and the stat cards. The screen starts with the `.ds-breadcrumb`, then a `.ds-page-header` (34px title and one line of description on the left, at most two buttons on the right, bottom-aligned, no rule), then the working components. A list screen is a `.ds-split`: the main column holds the `.ds-tabs` standing on their thick rule, the table and a `.ds-row` with the pagination and a count; the `--size-side` (304px) side column holds a `.ds-sidebar` and plain panels. A board screen is one `.ds-grid` of four columns across the whole width. A form screen puts notices first, then a `.ds-split` with the form in a panel and a side column, then the dialog on its `.ds-overlay` block.\n- Spacing scale: `--space-1` 4px (gap between wave bars, underline offset, inline code padding), `--space-2` 8px (badge padding, gap between rail links, label to control, pagination gaps), `--space-3` 12px (row and strip padding, gaps inside a card, gap between board cards), `--space-4` 16px (panel body padding, side padding of rows, gap between buttons and fields), `--space-5` 20px (gap inside a stack, gap between board columns, stat card side padding), `--space-6` 24px (gap between the blocks of a screen and between columns), `--space-7` 32px (hero padding, screen top padding, sheet padding), `--space-8` 48px (screen bottom padding, overlay padding). `--space-gutter` 32px is the side padding of the top bar, the screen and the footer.\n- Movement tokens: `--space-nudge` 2px (hover offset, focus outline offset) and `--space-press` 4px (pressed offset, offset of the red shadow under an invalid field). Hover and press move a control straight down, never sideways, so the movement is right whichever way the surface set throws its shadows.\n- Fixed sizes: `--size-control` 40px (buttons, inputs, rail links, tabs), `--size-control-large` 48px (hero buttons), `--size-control-small` 32px (small buttons, pagination squares, the dialog's close button), `--size-logo` 32px, `--size-icon` 20px (rail icons), `--size-avatar` 32px, `--size-check` 20px, `--size-chart` 184px (height of the bar chart), `--size-wave` 64px, `--size-player` 340px (the card in the hero), `--size-meter` 14px, `--size-dialog` 460px, `--size-measure` 620px (lead text).\n- Below 1100px the hero stacks, and the stat row and the board drop to two columns. Below 900px the rail becomes a block across the top (brand, then the links in a wrapping row; the labels, counts and storage card are hidden), and every split stacks. Below 600px the status line and the person's name are hidden, the search field fills the top bar, the board and the form rows are one column, hero buttons fill the width, titles step down, the tabs scroll sideways inside their own row, notices stack and table columns marked `.ds-table__extra` are hidden so a table never scrolls sideways. On a phone `.ds-nav__links` is a bar of five equal cells fixed to the bottom edge of the window, each `.ds-nav__link` an icon (`.ds-nav__icon`, shown again here) above its label and separated by rules, the current one without a shadow and in the heavier weight; the rest of the rail is not shown.\n- Views: the specimen is one example application, a podcast studio, with five views switched by plain `#name` links. `home` is the overview (hero with the latest cut, stat cards, the plays chart beside the most-played ranking, recent activity beside an empty release slot). `episodes` is a list screen (breadcrumb, page header, tabs, table, pagination, the shows sidebar and the key of status labels). `board` is the production board (four columns of task cards, one of them empty, and a notice). `settings` is a form screen (notices, the show form with its buttons, who can edit, and the delete dialog). `guide` is a handbook article on a sheet with further links. The rail marks the current view through `:has()` rules in `components.css`, one per view; `is-current` on a link does the same by hand.\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- `--color-page` and `--color-canvas` are aqua #99f6e4; `--fill-page` adds a 24px grid of 1px dots (`--color-border` at 16%). `--color-surface` is white for the navigation bar, stickers, stat cards, plan bodies, sheets, tables, lists and inputs. Toolbar strips inside a box and even table rows take the page colour.\n- Text, headings, every link colour, borders, focus and shadow are #000000. `--color-text-muted` is #5c5c66 (dates, hints, counts, a feature a plan does not include), `--color-border-muted` #b8b8b8 (dividers of the sidebar list, the box of a missing feature), disabled is #d8d8d8 with #5c5c66 text.\n- `--color-button` and `--color-surface-alt` are pale yellow #fff59f with black text: the primary button, the brand tile, every second stat card, the page header box, the empty state, the current table row, inline code, a hovered tab. The secondary button is white.\n- `--color-accent` is pink #ffa6f6 with black text: the current navigation item, tab and page, the default badge, the stamp, the bullet of an included feature, the flag on the recommended plan. `--color-accent-alt` is bright mint #b8ff9f: the marked phrase of the hero title and \"new\" badges.\n- `--color-surface-strong` is periwinkle #a5b4fb: panel and dialog title strips and the highlight behind a hovered link.\n- `--color-fill-1` to `--color-fill-4` are pink #ffa6f6, periwinkle #a5b4fb, yellow #fff59f and mint #c6fab4, always with black text: the heads of the four plan cards, the stickers and the call to action box. Use each once before repeating.\n- Status, all with black text and a black outline: `--color-success` mint #b8ff9f, `--color-warning` amber #f0b100, `--color-danger` red #fb2c36 (error text, the invalid field, the destructive button, the danger badge), `--color-danger-surface` salmon #f37777 behind an error notice, `--color-notice` pale cyan #a6faff.\n- `--color-inverse` is near-black #17171c with `--color-inverse-text` #fafaf9: the footer. `--color-overlay` is the same dark at 75%, behind a dialog. `--color-bar` is white (navigation bar, table head, plain panel title); `--color-bar-alt` is pink.\n- Two families. `--font-heading` is a heavy condensed display face (Big Shoulders Display, then Barlow Condensed, Avenir Next Condensed, Arial Narrow) for every title, price and figure and for the brand name. `--font-body` and `--font-ui` are the system sans for text, buttons, navigation and inputs. One of the references used a commercial-looking caps-only condensed face; the openly licensed Big Shoulders Display, measured in another, stands in for both. `--font-mono` is for inline code.\n- `--text-display` 72px at `--line-display` 1, weight `--weight-display` 900: the hero title only. `--text-h1` 60px (the inner page title, prose h1, stat figures, plan prices, the figure on a sticker), `--text-h2` 48px (section and call to action titles, prose h2), `--text-h3` 30px (plan, sticker, panel, sidebar, dialog, empty-state and label titles), all weight 700 at `--line-heading` 1. Condensed type runs narrow, so these sizes read about a third smaller than they measure. No tracking, no uppercase headings.\n- `--text-base` 16px at `--line-body` 1.5; `--text-small` 14px (labels, meta, table heads, plan text and features, sticker text, the footer); `--text-ui` 16px (navigation, buttons, inputs, tabs); `--text-large` 20px at 1.4 (leads, large buttons, the brand name).\n- Weights: 400 body, 500 (`--weight-ui`) navigation, links, inputs, leads and plan features, 700 (`--weight-bold`) buttons, badges, labels, 900 only on the hero title.\n- Uppercase is used only for 12px bold labels (`.ds-badge`, `.ds-footer__title`) and the 14px stamp. The 12px size is `calc(var(--text-small) * 0.857)`; the vocabulary has no token for it.\n- Links in running text are underlined (`--link-decoration`); navigation, titles and breadcrumbs are not (`--link-decoration-quiet`). Visited links are not marked. Hover puts a flat `--color-surface-strong` highlight behind the text, active a `--fill-accent` one.\n- `--border-width` is 3px on every box and rule; `--border-width-strong` 4px on the navigation bar and the call to action box.\n- Corners: `--radius-control` 24px, which makes buttons, inputs and navigation items pills and gives a textarea soft corners; `--radius-panel` 8px (stickers, stat cards, panels, tables, lists, dialogs, tabs, the marked phrase); `--radius-page` 12px (the navigation bar, plan cards, sheets, the page header, the call to action, the footer); `--radius-pill` 9999px, so badges are full pills.\n- Shadows are hard and black: `--shadow-panel` and `--shadow-dialog` `8px 8px 0 0`, `--shadow-control` `4px 4px 0 0` (buttons, the brand tile, the stamp), `--shadow-control-hover` `2px 2px 0 0` (a hovered button, pagination squares, the dialog close box), `--shadow-control-pressed` zero offset. Inputs have no shadow at rest. The footer and the dialog backdrop have an outline but no shadow.\n- `--focus-ring` is `3px solid` black; `--transition` animates only `transform` and `box-shadow` over 0.15s.\n\n- Outlines are the heaviest of the era: `--border-width` and `--border-width-strong` are both 4px, on every box and every rule.\n- Every radius token is 0: all boxes, controls and badges are square.\n- Shadows are large, hard and black: `--shadow-panel` and `--shadow-dialog` `8px 8px 0 0`, `--shadow-control` `6px 6px 0 0`, `--shadow-control-hover` `4px 4px 0 0`, `--shadow-control-pressed` `2px 2px 0 0`.\n- Three fills are hatched with thin diagonal lines, 2px in every 10px at 45 degrees: the page (`--fill-page`, `--color-border` at 9%), the secondary bar (`--fill-bar-alt`, its text colour at 22%) and the inverted block (`--fill-inverse`, its text colour at 14%). Every other fill is flat, and no box that holds running text is hatched.\n- `--focus-ring` is `4px solid` in `--color-focus`; `--transition` animates only `transform` and `box-shadow` over 0.15s.\n\nSpacing is roomy: every `--space-*` token of the layout was multiplied by 1.25. Where the Layout section names a spacing in pixels, the tokens are right.\n\n## Components\n\n- `.ds-page`: on `<body>`. The two-column grid, the page fill with its dots, the base font and colour. Its children are the `.ds-nav` rail, the `.ds-topbar`, `<main class=\"ds-main\">` and the `.ds-footer`.\n- `.ds-brand`: the site's mark and name at the top of the rail, a link to the overview. `.ds-brand__mark` is a `--size-logo` tile dressed like the primary button (`--fill-button`, mark in `--color-button-text`, outline, `--radius-control`, `--shadow-control`), so every palette and surface set reskins it. `.ds-brand__name` is the name in the heading font at `--text-large`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the rail. `.ds-nav__label` is a small uppercase label over `.ds-nav__links`, a column of `.ds-nav__link` rows, each with a `.ds-nav__icon` (inline SVG in `currentColor`) and optionally a plain badge with `.ds-nav__count` pushed to the right. The current link (`is-current`) is filled with the accent, outlined and shadowed; `is-hover` shows the outline only. `.ds-nav__card` is the inverse card at the foot, with `.ds-nav__card-title`, `.ds-nav__card-text`, a meter and one small secondary button.\n- `.ds-topbar`: the filled strip over the screen. `.ds-topbar__search` is a `.ds-form__control` of fixed width, `.ds-topbar__note` one line of status text that takes the free space, then one small button and `.ds-topbar__user` (a `.ds-avatar` and `.ds-topbar__name`).\n- `.ds-avatar`: a 32px outlined circle with two initials on `--color-accent-alt`; `.ds-avatar--2` and `.ds-avatar--3` use `--color-fill-2` and `--color-fill-3`. For people in lists, cards and the top bar.\n- `.ds-main`, `.ds-screen`: the working area and its stack of blocks. `.ds-split` is a main column plus the 304px side column; `.ds-split--wide` is two columns 2:1 of equal height. `.ds-stack` stacks blocks 20px apart, `.ds-row` puts two things at the ends of one line, `.ds-label` is a 24px heading over a block without a title strip, `.ds-note` a muted small line.\n- `.ds-hero`: the welcome card of the overview, on `--color-fill-1` with the largest radius and `--shadow-dialog`: `.ds-hero__text` (a plain badge, `.ds-hero__title` at display size and at most 18ch, `.ds-hero__lead`, `.ds-hero__actions` with one primary and one secondary large button) beside a `.ds-player`. One per application, on the overview only.\n- `.ds-player`: a white card for one recording: a `.ds-row` with a badge and a note, `.ds-player__title`, a `.ds-wave` (24 empty `.ds-wave__bar` spans drawn in `currentColor` on `--color-surface-alt`) and a row with a small button and a link. Use it for one highlighted item, not for lists.\n- `.ds-page-header`: the head of an inner screen: a block with `.ds-page-header__title` and one `.ds-page-header__lead` line on the left, `.ds-page-header__actions` on the right. It follows the breadcrumb and has no fill and no rule.\n- `.ds-stat`: the row of summary figures, four `.ds-stat__card` in a grid. Each card is outlined, shadowed and filled by `.ds-stat__card--1` to `--4` (white without a modifier) and holds a bold `.ds-stat__label`, a 34px `.ds-stat__value` and a `.ds-stat__note` line of comparison.\n- `.ds-chart`: a bar chart for up to twelve values: `.ds-chart__col` items, each a `.ds-chart__bar` over its label. The bar's height is set by `.ds-chart__bar--30`, `--45`, `--60`, `--75`, `--90` or `--100` (percent of `--size-chart`); `is-current` on a column turns its bar yellow, shadowed and its label bold. Put it in a panel body.\n- `.ds-meter`: an outlined pill track with a `.ds-meter__fill` whose width is `.ds-meter__fill--20`, `--35`, `--62`, `--80` or `--95`. `.ds-rank` is a list of `.ds-rank__item`, each a `.ds-rank__head` (a title and a `.ds-rank__num`) over a meter.\n- `.ds-grid`: the board, four columns. Each `.ds-grid__cell` is an outlined, shadowed column on `--color-canvas`: a `.ds-grid__head` (filled by `.ds-grid__cell--1` to `--4`, holding `.ds-grid__title` and a plain count badge) over a thick rule, then `.ds-grid__body` with a stack of `.ds-card`. An empty column holds a `.ds-empty` instead.\n- `.ds-card`: a task card: white, outlined, on `--shadow-control`, with `.ds-card__title`, one `.ds-card__text` line and a `.ds-card__foot` holding a status badge and an avatar.\n- `.ds-prose`: long text: h1, h2, h3, p, ul, ol, strong, inline code (outlined, on `--color-surface-alt`) and links inside it are styled. On a handbook page it sits in a `.ds-sheet`, a white card with the largest radius.\n- `.ds-link`: any link in content: `--color-link`, medium weight, underlined. `.ds-link--quiet` removes the underline for titles, breadcrumbs and row links. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-links` stacks several in a column.\n- `.ds-button`: the primary button, 40px tall, outlined, on `--shadow-control`. `.ds-button--secondary` is white. `.ds-button--danger` is the destructive action (delete a show): flat `--color-danger` with `--color-text`; use it once per view, at the end of a form's button row or as the confirming button of a dialog. `.ds-button--large` (48px, 18px text) for the hero, `.ds-button--small` (32px, 13px text) for the top bar, cards and panels. `is-hover` sinks it 2px toward its shadow, `is-active` 4px with the pressed shadow, `is-disabled` is flat grey, `is-focus` adds the focus ring 2px away. `.ds-buttons` is a row of them.\n- `.ds-badge`: a small bold label in an outlined pill, on the accent by default. `.ds-badge--alt` yellow (new), `.ds-badge--plain` white (counts, neutral states). Status labels, in table rows and on task cards: `.ds-badge--success` (published), `.ds-badge--warning` (in review), `.ds-badge--danger` (late, taken down), all with `--color-text`. No shadow. `.ds-badges` is a wrapping row of them.\n- `.ds-form`: stacked fields 16px apart; `.ds-form__row` puts two fields side by side. A `.ds-form__field` is a bold 13px `.ds-form__label` above a `.ds-form__control` (input, select; `.ds-form__control--area` for a textarea), then `.ds-form__hint` or `.ds-form__error`. Controls have the outline and no shadow at rest; `is-focus` adds `--shadow-control` and the focus ring, `is-invalid` turns the border to `--color-danger` and puts a red shadow straight under the field, `is-disabled` greys it. `.ds-form__check` wraps a `.ds-form__checkbox` and its text. `.ds-form__foot` is the button row over a rule.\n- `.ds-table`: one outlined, shadowed box. The head row is on `--color-surface-strong` with bold 13px text and closed by a `--border-width-strong` rule; rows are divided by 2px rules; `is-current` on a row makes it pale and bold. `.ds-table__title` is the bold cell that names the row, `.ds-table__num` right-aligns numbers, and a cell with `.ds-table__extra` is dropped below 600px. A status column holds one badge per row.\n- `.ds-list`: one outlined, shadowed box of `.ds-list__item` rows divided by rules, each with an optional avatar, a `.ds-list__main` block (bold `.ds-list__title`, a `.ds-list__text` line) and a muted `.ds-list__meta` on the right.\n- `.ds-panel`: an outlined, shadowed box with a `.ds-panel__title` strip on `--color-surface-strong` over a rule (it may end with a plain badge) and a `.ds-panel__body`. `.ds-panel--plain` puts the strip on `--fill-bar` with `--color-bar-text`, for side columns.\n- `.ds-tabs`: a row of `.ds-tabs__tab` blocks with rounded top corners standing on a `--border-width-strong` rule; the current one (`is-current`) is on the accent and bold, `is-hover` is pale. Use for two to five views of one list; it is the first thing in the main column, directly over the table.\n- `.ds-sidebar`: an outlined, shadowed white block in the side column: a `.ds-sidebar__title` and a `.ds-sidebar__list` of `.ds-sidebar__item` rows divided by faint rules, each a link or a name with a badge at the right. It may hold a `.ds-links` column instead.\n- `.ds-notice`: a one-line message in an outlined box on `--shadow-control`, with a bold `.ds-notice__title` and `.ds-notice__text`, on `--color-notice`. `.ds-notice--error` is on `--color-danger-surface` with `--color-text`.\n- `.ds-pagination`: a row of 32px outlined squares (`.ds-pagination__link`) on `--shadow-control-hover`; the current page (`is-current`) is on the accent, `is-disabled` is grey and flat, `is-hover` sinks into its shadow. It shares a `.ds-row` with a count.\n- `.ds-breadcrumb`: a 13px trail of `.ds-breadcrumb__item` separated by a muted slash; the last has `is-current` and is bold. It is the first line of every inner screen.\n- `.ds-dialog`: a 460px outlined box on `--shadow-dialog`, with a `.ds-dialog__bar` on `--color-surface-strong` (holding `.ds-dialog__title` and a square `.ds-dialog__close`), a `.ds-dialog__body`, and a `.ds-dialog__actions` strip on `--color-canvas` over a rule with the buttons right-aligned. In the page flow it sits on a `.ds-overlay` block, an outlined area filled with `--color-overlay`.\n- `.ds-empty`: an outlined box on `--color-surface-alt`, centred: `.ds-empty__title`, `.ds-empty__text` and one small button. It has no shadow, so it can stand inside a board column as well as in a split.\n- `.ds-footer`: one inverse strip under the screen, closed above by a thick rule: `.ds-footer__brand`, a `.ds-footer__list` of `.ds-footer__link` in a line and `.ds-footer__legal` at the right.\n- `.ds-menu`: a chunky drop-down, a `<details>` whose `<summary>` is the `.ds-menu__trigger` (a small secondary button that ends in a plus sign). `.ds-menu__list` is an outlined, shadowed box of `.ds-menu__item` rows divided by rules, each a `.ds-menu__link`. Use it for a short list of pages under one button.\n- `.ds-progress`: how far something is: a `.ds-progress__label` line (what, and the figures) over a thick outlined `.ds-progress__track` holding a `.ds-progress__bar` (50% wide; `--25` and `--70` set other widths).\n- `.ds-switch`: an on and off control: a `<label>` holding a hidden `.ds-switch__input` checkbox, the `.ds-switch__track` and the text. On, the track is filled with the accent and takes a small hard shadow. `.ds-switch-row` puts a `.ds-tooltip` at the end of its line. Use it for a setting that applies at once.\n- `.ds-tooltip`: a hint like a sticker. `.ds-tooltip__trigger` is a small round button with a question mark; `.ds-tooltip__tip` is an inverted, outlined box that shows above it on hover or focus (`is-open` on the wrapper shows it by hand). One or two lines of text.\n- `.ds-accordion`: questions that open and close, one outlined, shadowed box of `<details class=\"ds-accordion__item\">` divided by rules. `.ds-accordion__head` is the `<summary>` with a square plus sign; open, it becomes a `--color-surface-strong` strip with a minus sign over `.ds-accordion__body`. Use it for frequently asked questions.\n- `.ds-follow`: on a block that comes after another in a column that has no gap of its own; it adds the space above.\n\n## Never\n\n- `row-gap <= 20px`: table and list rows touch and are divided by rules; rail links sit 8px apart and ranking rows 16px.\n- `palette-colours <= 15`: black, white, the warm off-white, two yellows, coral, green, sky, amber, red, the dark footer and the warm greys; no tints or shades beyond these.\n- `font-size <= 72px`: the hero title is the largest text.\n- `font-size >= 12px`: badges and footer labels are the smallest text.\n- `font-weight >= 400`: no light or thin weights.\n- `font-families <= 3`: a condensed display face, the system sans and a monospace for code.\n- `line-height <= 1.5`: body text is set at 1.5; leads at 1.4, headings and the hero title at 1.\n- `letter-spacing = 0px`: neither headings nor uppercase labels are tracked.\n- `uppercase-text <= 5%`: uppercase is limited to badges, the stamp and footer labels; headings are sentence case.\n- `underlined-links <= 20%`: only links in running text are underlined; navigation, titles, tabs and footer links are not.\n- `border-radius <= 0px`: every corner is square; no rounding and no pills.\n- `border-width >= 4px`: every outline and rule is 4px; no hairlines.\n- `border-width <= 4px`: nothing heavier than 4px.\n- `box-shadow-blur <= 0px`: every shadow is a hard offset block.\n- `text-shadow = none`: no text shadow.\n- `gradient-fills <= 5%`: only the page, the secondary bar and the inverted block carry the diagonal hatch; cards, buttons and panels are flat.\n- `animation = none`: nothing moves on its own.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything new on a screen is a card on the page fill: a `--border-width` `--color-border` outline, a `--radius-panel` corner (`--radius-page` for the largest blocks) and the `--shadow-panel` hard shadow; things inside a card (task cards, notices, the empty state) get the outline and at most `--shadow-control`, so deep shadows never stack. Anything clickable that is a box sinks `--space-nudge` on hover and `--space-press` when pressed, straight down. Colour a block with one flat `--color-fill-*` or surface token and put `--color-text` on it; never tint, fade or blur. Close a group of tabs, a table head or a column head with the `--border-width-strong` rule, and divide rows with the ordinary one. A new figure is another `.ds-stat__card`, a new share a `.ds-meter`, a new series a `.ds-chart`; do not draw charts with gradients. A new screen keeps the rail and the top bar, starts with the breadcrumb and the page header and stacks its blocks `--space-6` apart. For a size the vocabulary lacks, use `calc()` over an existing token, as the badge text does.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 100%;\n  --size-rail: 248px;\n  --size-content: 1180px;\n  --size-side: 304px;\n  --size-measure: 620px;\n  --size-topbar: 64px;\n  --size-search: 300px;\n  --size-control: 40px;\n  --size-control-large: 48px;\n  --size-control-small: 32px;\n  --size-logo: 32px;\n  --size-icon: 20px;\n  --size-avatar: 32px;\n  --size-check: 20px;\n  --size-menu: 240px;\n  --size-tip: 220px;\n  --size-switch: 44px;\n  --size-bar: 16px;\n  --size-chart: 184px;\n  --size-wave: 64px;\n  --size-player: 340px;\n  --size-meter: 14px;\n  --size-dialog: 460px;\n  --space-1: 5px;\n  --space-2: 10px;\n  --space-3: 15px;\n  --space-4: 20px;\n  --space-5: 25px;\n  --space-6: 30px;\n  --space-7: 40px;\n  --space-8: 60px;\n  --space-gutter: 40px;\n  --space-nudge: 3px;\n  --space-press: 5px;\n}\n\n/* shell: a rail on the left, a top bar and the screen on the right */\n.ds-page {\n  display: grid;\n  grid-template-columns: var(--size-rail) minmax(0, 1fr);\n  grid-template-rows: auto 1fr auto;\n  grid-template-areas:\n    \"nav top\"\n    \"nav main\"\n    \"nav foot\";\n  margin: 0;\n  width: var(--size-page);\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* views: one screen shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* nav: the rail. Brand, a column of links with icons, a storage card */\n.ds-nav {\n  grid-area: nav;\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-6);\n  min-width: 0;\n  padding: var(--space-5) var(--space-4) var(--space-6);\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n  border-right: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: 0 var(--space-2);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-logo);\n  height: var(--size-logo);\n  padding: var(--space-nudge);\n  color: var(--color-button-text);\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}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-bar-text);\n}\n.ds-nav__label {\n  margin: 0 0 var(--space-2);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.9);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  text-transform: uppercase;\n  color: var(--color-bar-text);\n}\n.ds-nav__links {\n  display: grid;\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);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.2;\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  color: var(--color-bar-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n  transition: var(--transition);\n}\n.ds-nav__icon {\n  display: block;\n  flex: none;\n  width: var(--size-icon);\n  height: var(--size-icon);\n}\n.ds-nav__count {\n  margin-left: auto;\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  border-color: var(--color-border);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#episodes:target) .ds-nav__link[href=\"#episodes\"],\n.ds-page:has(#board:target) .ds-nav__link[href=\"#board\"],\n.ds-page:has(#settings:target) .ds-nav__link[href=\"#settings\"],\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border-color: var(--color-border);\n  box-shadow: var(--shadow-control);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-nav__card {\n  display: grid;\n  gap: var(--space-3);\n  padding: var(--space-4);\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n}\n.ds-nav__card-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}\n.ds-nav__card-text {\n  margin: 0;\n}\n\n/* top bar: a filled strip over the screen with search and the account */\n.ds-topbar {\n  grid-area: top;\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  min-height: var(--size-topbar);\n  padding: var(--space-3) var(--space-gutter);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  color: var(--color-bar-alt-text);\n  background: var(--fill-bar-alt);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-topbar__search {\n  flex: 0 1 var(--size-search);\n  min-width: 0;\n}\n.ds-topbar__note {\n  margin: 0 auto 0 0;\n  line-height: 1.3;\n}\n.ds-topbar__user {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  font-weight: var(--weight-bold);\n  line-height: 1.2;\n}\n.ds-avatar {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.9);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: 50%;\n}\n.ds-avatar--2 {\n  background: var(--color-fill-2);\n}\n.ds-avatar--3 {\n  background: var(--color-fill-3);\n}\n\n/* screen: the working area of a view */\n.ds-main {\n  grid-area: main;\n  min-width: 0;\n  padding: var(--space-7) var(--space-gutter) var(--space-8);\n}\n.ds-screen {\n  display: grid;\n  gap: var(--space-6);\n  align-content: start;\n  max-width: var(--size-content);\n  margin: 0 auto;\n}\n.ds-split {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-split--wide {\n  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);\n  align-items: stretch;\n}\n.ds-stack {\n  display: grid;\n  gap: var(--space-5);\n  align-content: start;\n  min-width: 0;\n}\n.ds-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n.ds-label {\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  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-note {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* hero: the welcome card of the overview, text beside a player card */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-player);\n  gap: var(--space-7);\n  align-items: center;\n  padding: var(--space-7);\n  color: var(--color-text);\n  background: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-hero__text {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-3);\n  min-width: 0;\n}\n.ds-hero__title {\n  max-width: 18ch;\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-text);\n}\n.ds-hero__lead {\n  max-width: var(--size-measure);\n  margin: 0;\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-3);\n}\n.ds-player {\n  display: grid;\n  gap: var(--space-3);\n  min-width: 0;\n  padding: var(--space-4);\n  color: var(--color-text);\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-player__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  color: var(--color-heading-alt);\n}\n.ds-wave {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  height: var(--size-wave);\n  padding: var(--space-2);\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-wave__bar {\n  flex: 1;\n  height: 45%;\n  background: currentColor;\n  border-radius: var(--radius-pill);\n}\n.ds-wave__bar:nth-child(3n + 2) {\n  height: 80%;\n}\n.ds-wave__bar:nth-child(4n) {\n  height: 60%;\n}\n.ds-wave__bar:nth-child(5n) {\n  height: 100%;\n}\n.ds-wave__bar:nth-child(7n) {\n  height: 25%;\n}\n\n/* page header: the head of an inner screen */\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-5);\n  color: var(--color-text);\n}\n.ds-page-header__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-page-header__lead {\n  max-width: var(--size-measure);\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\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/* stats: a row of chunky filled cards */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-6);\n  margin: 0;\n}\n.ds-stat__card {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-1);\n  min-width: 0;\n  padding: var(--space-4) var(--space-5) var(--space-5);\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-stat__card--1 {\n  background: var(--color-fill-1);\n}\n.ds-stat__card--2 {\n  background: var(--color-fill-2);\n}\n.ds-stat__card--3 {\n  background: var(--color-fill-3);\n}\n.ds-stat__card--4 {\n  background: var(--color-fill-4);\n}\n.ds-stat__label {\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-stat__value {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-text);\n}\n.ds-stat__note {\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n\n/* chart: outlined bars standing on a rule */\n.ds-chart {\n  display: grid;\n  grid-auto-flow: column;\n  grid-auto-columns: minmax(0, 1fr);\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-chart__col {\n  display: grid;\n  grid-template-rows: var(--size-chart) auto;\n  gap: var(--space-2);\n  min-width: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  text-align: center;\n}\n.ds-chart__bar {\n  align-self: end;\n  height: 50%;\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n}\n.ds-chart__bar--30 {\n  height: 30%;\n}\n.ds-chart__bar--45 {\n  height: 45%;\n}\n.ds-chart__bar--60 {\n  height: 60%;\n}\n.ds-chart__bar--75 {\n  height: 75%;\n}\n.ds-chart__bar--90 {\n  height: 90%;\n}\n.ds-chart__bar--100 {\n  height: 100%;\n}\n.ds-chart__col.is-current .ds-chart__bar {\n  background: var(--color-accent-alt);\n  box-shadow: var(--shadow-control);\n}\n.ds-chart__col.is-current {\n  font-weight: var(--weight-bold);\n}\n\n/* meter: a filled track for a share of something */\n.ds-meter {\n  display: block;\n  height: var(--size-meter);\n  background: var(--color-canvas);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  overflow: hidden;\n}\n.ds-meter__fill {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-meter__fill--20 {\n  width: 20%;\n}\n.ds-meter__fill--35 {\n  width: 35%;\n}\n.ds-meter__fill--62 {\n  width: 62%;\n}\n.ds-meter__fill--80 {\n  width: 80%;\n}\n.ds-meter__fill--95 {\n  width: 95%;\n}\n.ds-rank {\n  display: grid;\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-rank__item {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-rank__head {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n.ds-rank__num {\n  flex: none;\n  font-weight: var(--weight-bold);\n  font-variant-numeric: tabular-nums;\n}\n\n/* grid: the board. Columns with a filled head and a stack of task cards */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n  align-items: start;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  color: var(--color-text);\n  background: var(--color-canvas);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-grid__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-grid__cell--1 .ds-grid__head {\n  background: var(--color-fill-1);\n}\n.ds-grid__cell--2 .ds-grid__head {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 .ds-grid__head {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 .ds-grid__head {\n  background: var(--color-fill-4);\n}\n.ds-grid__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  color: var(--color-text);\n}\n.ds-grid__body {\n  display: grid;\n  gap: var(--space-3);\n  align-content: start;\n  padding: var(--space-3);\n}\n.ds-card {\n  display: grid;\n  gap: var(--space-2);\n  padding: var(--space-3);\n  color: var(--color-text);\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-control);\n}\n.ds-card__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-card__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n.ds-card__foot {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  margin-top: var(--space-1);\n}\n\n/* typography */\n.ds-prose {\n  max-width: 66ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  margin: 0 0 var(--space-4);\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin: var(--space-6) 0 var(--space-3);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-2);\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-6);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  white-space: nowrap;\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-prose a {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n.ds-sheet {\n  padding: var(--space-7);\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-decoration-thickness: var(--border-width);\n  text-underline-offset: var(--space-1);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\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  background: var(--color-surface-strong);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-links {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* buttons: flat fill, outline, hard shadow; a pressed button sinks straight down */\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  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  white-space: nowrap;\n  cursor: pointer;\n  color: var(--color-button-text);\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  transition: var(--transition);\n}\n\n/* a block that moves down onto its shadow carries a strip above itself, so a pointer at its top edge stays on it */\n.ds-button {\n  position: relative;\n}\n.ds-button::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 100%;\n  height: calc(2 * var(--space-press));\n}\n.ds-button--secondary {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\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--small {\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-size: var(--text-small);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  color: var(--color-button-hover-text);\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  transform: translateY(var(--space-nudge));\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: translateY(var(--space-press));\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n  transform: none;\n  cursor: not-allowed;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  padding: 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.9);\n  font-weight: var(--weight-bold);\n  line-height: 1.6;\n  white-space: nowrap;\n  vertical-align: middle;\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-badge--alt {\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n}\n.ds-badge--plain {\n  color: var(--color-text);\n  background: var(--color-surface);\n}\n.ds-badge--success {\n  color: var(--color-text);\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-text);\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form */\n.ds-form {\n  display: grid;\n  gap: var(--space-4);\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-form__field {\n  display: grid;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-form__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-form__control {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n  color: var(--color-input-text);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  transition: var(--transition);\n}\n.ds-form__control--area {\n  min-height: calc(var(--size-control) * 2.2);\n  resize: vertical;\n}\n.ds-form__control:focus,\n.ds-form__control.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n  box-shadow: var(--shadow-control);\n}\n.ds-form__control:disabled,\n.ds-form__control.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n}\n.ds-form__control.is-invalid {\n  border-color: var(--color-danger);\n  box-shadow: 0 var(--space-press) 0 0 var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  color: var(--color-danger);\n}\n.ds-form__hint {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n}\n.ds-form__checkbox {\n  appearance: none;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: min(var(--radius-control), var(--space-1));\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background: var(--color-text);\n  box-shadow: inset 0 0 0 var(--space-nudge) var(--color-input);\n}\n.ds-form__checkbox:focus-visible,\n.ds-form__checkbox.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-form__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n  padding-top: var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* table: one outlined box; a thick rule under the head, thinner ones between rows */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 0;\n  font-size: var(--text-base);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  text-align: left;\n  vertical-align: middle;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table th {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  color: var(--color-text);\n  background: var(--color-surface-strong);\n  border-bottom-width: var(--border-width-strong);\n  border-bottom-color: var(--color-border-strong);\n}\n.ds-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.ds-table tbody tr.is-current td {\n  background: var(--color-surface-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table__title {\n  font-weight: var(--weight-bold);\n}\n\n/* list: one outlined box of ruled rows */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n}\n.ds-list__item + .ds-list__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__main {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-list__title .ds-link,\n.ds-table__title .ds-link {\n  font-weight: inherit;\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n.ds-list__meta {\n  flex: none;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* panel: outlined box with a filled title strip */\n.ds-panel {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\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-3) var(--space-4);\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  color: var(--color-heading-alt);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__body {\n  flex: 1;\n  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__body p:last-child {\n  margin-bottom: 0;\n}\n.ds-panel--plain .ds-panel__title {\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n\n/* tabs: blocks standing on a thick rule */\n.ds-tabs {\n  display: flex;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0 var(--space-3);\n  list-style: none;\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-tabs__tab {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  padding: 0 var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  white-space: nowrap;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: 0;\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n}\n.ds-tabs__tab.is-current {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\n/* sidebar: an outlined block of links with counts */\n.ds-sidebar {\n  padding: var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface);\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__title {\n  margin: 0 0 var(--space-2);\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  color: var(--color-heading-alt);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* notice */\n.ds-notice {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-notice-text);\n  background: var(--color-notice);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control);\n}\n.ds-notice__title {\n  flex: none;\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  margin: 0;\n}\n.ds-notice--error {\n  color: var(--color-text);\n  background: var(--color-danger-surface);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control-small);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  color: var(--color-button-secondary-text);\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-hover);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-pagination__link.is-current {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__item.is-current {\n  font-weight: var(--weight-bold);\n}\n\n/* dialog: an outlined box with a title strip, on a filled backdrop block */\n.ds-overlay {\n  padding: var(--space-8) var(--space-5);\n  background: var(--color-overlay);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n}\n.ds-dialog {\n  max-width: var(--size-dialog);\n  margin: 0 auto;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-dialog__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading-alt);\n}\n.ds-dialog__close {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  cursor: pointer;\n  color: var(--color-button-secondary-text);\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-hover);\n}\n.ds-dialog__body {\n  padding: var(--space-5) var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  padding: var(--space-4);\n  background: var(--color-canvas);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* empty state */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  padding: var(--space-6) var(--space-4);\n  text-align: center;\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\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  color: var(--color-text);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n\n/* footer: one inverted strip under the screen */\n.ds-footer {\n  grid-area: foot;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2) var(--space-6);\n  padding: var(--space-4) var(--space-gutter);\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-footer__brand {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n}\n.ds-footer__list {\n  display: flex;\n  flex: 1;\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  font-weight: var(--weight-ui);\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-footer__legal {\n  margin: 0;\n}\n\n/* menu: a chunky drop-down, a details element whose summary is the trigger */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__trigger {\n  list-style: none;\n  cursor: pointer;\n}\n.ds-menu__trigger::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__trigger::after {\n  content: \"+\";\n  margin-left: var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-menu[open] .ds-menu__trigger::after {\n  content: \"-\";\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 3;\n  width: var(--size-menu);\n  max-width: 80vw;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\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  overflow: hidden;\n}\n.ds-menu__item + .ds-menu__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-menu__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  color: var(--color-text);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  background: var(--color-surface-alt);\n}\n\n/* follow: a block that comes after another in a plain column */\n.ds-follow {\n  margin-top: var(--space-5);\n}\n/* progress: a thick outlined track with a filled bar */\n.ds-progress {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n.ds-progress__track {\n  display: block;\n  height: var(--size-bar);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  overflow: hidden;\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-progress__bar--70 {\n  width: 70%;\n}\n/* switch: an on and off control drawn over a checkbox */\n.ds-switch-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-switch {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  opacity: 0;\n}\n.ds-switch__track {\n  position: relative;\n  display: block;\n  flex: none;\n  width: var(--size-switch);\n  height: calc(var(--size-check) + 2 * var(--border-width));\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: var(--size-check);\n  height: var(--size-check);\n  background: var(--color-text);\n  border-radius: var(--radius-pill);\n  transform: scale(0.64);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch__track.is-on {\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-switch__input:checked + .ds-switch__track::before,\n.ds-switch__track.is-on::before {\n  left: calc(100% - var(--size-check));\n  background: var(--color-accent-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch__track.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n/* tooltip: a sticker of a hint over its trigger, on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n.ds-tooltip__trigger {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  cursor: help;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  box-sizing: content-box;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  right: 0;\n  z-index: 2;\n  width: var(--size-tip);\n  max-width: 70vw;\n  padding: var(--space-2) var(--space-3);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.35;\n  text-align: left;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n  box-shadow: var(--shadow-control-hover);\n  visibility: hidden;\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  visibility: visible;\n}\n/* accordion: questions that open and close, one outlined box, a big plus sign */\n.ds-accordion {\n  color: var(--color-text);\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  overflow: hidden;\n}\n.ds-accordion__item + .ds-accordion__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\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-4);\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  list-style: none;\n  cursor: pointer;\n  color: var(--color-heading-alt);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  display: block;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  color: var(--color-button-secondary-text);\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 2.5) calc(var(--space-1) / 2) no-repeat,\n    linear-gradient(currentColor, currentColor) center / calc(var(--space-1) / 2) calc(var(--space-1) * 2.5) no-repeat,\n    var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-sizing: content-box;\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-press));\n}\n.ds-accordion__item[open] .ds-accordion__head {\n  color: var(--color-heading-alt);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item[open] .ds-accordion__head::after {\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 2.5) calc(var(--space-1) / 2) no-repeat,\n    var(--fill-button-secondary);\n}\n.ds-accordion__body {\n  padding: var(--space-4);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n@media (max-width: 1100px) {\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-hero {\n    grid-template-columns: minmax(0, 1fr);\n  }\n}\n\n@media (max-width: 900px) {\n  .ds-page {\n    grid-template-columns: minmax(0, 1fr);\n    grid-template-rows: auto;\n    grid-template-areas:\n      \"nav\"\n      \"top\"\n      \"main\"\n      \"foot\";\n  }\n  .ds-nav {\n    gap: var(--space-3);\n    padding: var(--space-3) var(--space-4);\n    border-right: 0;\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__label,\n  .ds-nav__card,\n  .ds-nav__count {\n    display: none;\n  }\n  .ds-nav__links {\n    display: flex;\n    flex-wrap: wrap;\n    gap: var(--space-1);\n  }\n  .ds-nav__link {\n    min-height: var(--size-control-small);\n    padding: 0 var(--space-2);\n    gap: var(--space-2);\n  }\n  .ds-topbar {\n    padding: var(--space-2) var(--space-4);\n  }\n  .ds-main {\n    padding: var(--space-6) var(--space-4) var(--space-7);\n  }\n  .ds-split,\n  .ds-split--wide {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-footer {\n    padding: var(--space-4);\n  }\n}\n\n@media (max-width: 600px) {\n  .ds-nav__icon,\n  .ds-topbar__note,\n  .ds-topbar__name,\n  .ds-table .ds-table__extra {\n    display: none;\n  }\n  .ds-nav__link {\n    font-size: var(--text-small);\n  }\n  .ds-topbar__search {\n    flex: 1 1 auto;\n  }\n  .ds-hero {\n    padding: var(--space-5);\n    gap: var(--space-5);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h1);\n  }\n  .ds-hero__actions,\n  .ds-hero__actions .ds-button {\n    width: 100%;\n  }\n  .ds-page-header__title,\n  .ds-prose h1 {\n    font-size: calc(var(--text-h1) * 0.85);\n  }\n  .ds-page-header__actions .ds-button {\n    flex: 1 1 auto;\n  }\n  .ds-stat {\n    gap: var(--space-4);\n  }\n  .ds-stat__card {\n    padding: var(--space-3) var(--space-4) var(--space-4);\n  }\n  .ds-stat__value {\n    font-size: calc(var(--text-h1) * 0.8);\n  }\n  .ds-grid,\n  .ds-form__row {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-chart {\n    gap: var(--space-2);\n  }\n  .ds-sheet {\n    padding: var(--space-5) var(--space-4);\n  }\n  .ds-tabs {\n    padding: 0;\n    overflow-x: auto;\n  }\n  .ds-tabs__tab {\n    padding: 0 var(--space-3);\n  }\n  .ds-table {\n    font-size: var(--text-small);\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-2) var(--space-2);\n  }\n  .ds-notice {\n    flex-direction: column;\n    gap: var(--space-1);\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n  }\n  .ds-overlay {\n    padding: var(--space-6) var(--space-3);\n  }\n}\n/* phone: the bar keeps the brand; the five views are a dock of equal cells at the foot of the window */\n@media (max-width: 600px) {\n  .ds-page {\n    padding-bottom: calc(var(--size-control) + var(--space-6));\n  }\n  .ds-nav .ds-nav__links {\n    position: fixed;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    z-index: 6;\n    display: grid;\n    grid-template-columns: repeat(5, minmax(0, 1fr));\n    gap: 0;\n    color: var(--color-bar-text);\n    background: var(--fill-bar);\n    border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  }\n  .ds-nav__links li {\n    display: flex;\n    min-width: 0;\n  }\n  .ds-nav__links li + li {\n    border-left: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__link {\n    flex: 1;\n    flex-direction: column;\n    justify-content: center;\n    gap: var(--space-1);\n    min-width: 0;\n    min-height: calc(var(--size-control) + var(--space-4));\n    padding: var(--space-1);\n    text-align: center;\n    overflow-wrap: anywhere;\n    border: 0;\n    border-radius: 0;\n  }\n  .ds-nav__icon {\n    display: block;\n  }\n  .ds-nav__link.is-current,\n  .ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n  .ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n  .ds-page:has(#episodes:target) .ds-nav__link[href=\"#episodes\"],\n  .ds-page:has(#board:target) .ds-nav__link[href=\"#board\"],\n  .ds-page:has(#settings:target) .ds-nav__link[href=\"#settings\"],\n  .ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n    font-weight: var(--weight-ui);\n    box-shadow: none;\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: neubrutalism app specimen, dashboard layout</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  <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n    <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linejoin=\"miter\" aria-hidden=\"true\"><polygon points=\"16.9,6.85 20,6.5 21.5,20 8,21.5 7.6,17.65 18,16.5\" fill=\"currentColor\" stroke=\"none\"/><polygon points=\"3,4.5 16.5,3 18,16.5 4.5,18\"/><circle cx=\"10.5\" cy=\"10.7\" r=\"2.5\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n    <span class=\"ds-brand__name\">chronoskin</span>\n  </a>\n  <nav aria-label=\"Main\">\n    <p class=\"ds-nav__label\">Studio</p>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"8\" height=\"8\"/><rect x=\"13\" y=\"3\" width=\"8\" height=\"5\"/><rect x=\"13\" y=\"12\" width=\"8\" height=\"9\"/><rect x=\"3\" y=\"15\" width=\"8\" height=\"6\"/></svg>Overview</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#episodes\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" aria-hidden=\"true\"><path d=\"M8 6h13M8 12h13M8 18h13\"/><path d=\"M3 5v2M3 11v2M3 17v2\"/></svg>Episodes <span class=\"ds-badge ds-badge--plain ds-nav__count\">48</span></a></li>\n      <li><a class=\"ds-nav__link\" href=\"#board\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"5\" height=\"18\"/><rect x=\"10\" y=\"3\" width=\"5\" height=\"11\"/><rect x=\"17\" y=\"3\" width=\"4\" height=\"15\"/></svg>Board <span class=\"ds-badge ds-badge--plain ds-nav__count\">9</span></a></li>\n      <li><a class=\"ds-nav__link\" href=\"#settings\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" aria-hidden=\"true\"><path d=\"M3 7h10M17 7h4M3 17h4M11 17h10\"/><circle cx=\"15\" cy=\"7\" r=\"2.4\"/><circle cx=\"9\" cy=\"17\" r=\"2.4\"/></svg>Show settings</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#guide\"><svg class=\"ds-nav__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" aria-hidden=\"true\"><path d=\"M5 3h11l3 3v15H5z\"/><path d=\"M9 10h6M9 14h6\"/></svg>Handbook</a></li>\n    </ul>\n  </nav>\n  <div class=\"ds-nav__card\">\n    <p class=\"ds-nav__card-title\">Storage</p>\n    <span class=\"ds-meter\"><span class=\"ds-meter__fill ds-meter__fill--62\"></span></span>\n    <p class=\"ds-nav__card-text\">6.2 of 10 GB of audio used. Old drafts count too.</p>\n    <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#settings\">Make room</a>\n  </div>\n</header>\n\n<div class=\"ds-topbar\">\n  <input class=\"ds-form__control ds-topbar__search\" type=\"search\" placeholder=\"Search episodes and guests\" aria-label=\"Search\">\n  <p class=\"ds-topbar__note\">Week 14, three recordings booked</p>\n  <a class=\"ds-button ds-button--small\" href=\"#board\">New episode</a>\n  <span class=\"ds-topbar__user\"><span class=\"ds-avatar\">MK</span><span class=\"ds-topbar__name\">Mira K.</span></span>\n</div>\n\n<main class=\"ds-main\">\n<section class=\"ds-view ds-view--home\" id=\"home\">\n<div class=\"ds-screen\">\n  <section class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-hero__text\">\n      <span class=\"ds-badge ds-badge--plain\">Tuesday morning</span>\n      <h1 class=\"ds-hero__title\">Three episodes are waiting for you.</h1>\n      <p class=\"ds-hero__lead\">chronoskin keeps the recordings, the edit notes and the release dates of your show in one place. Two cuts need your ears today.</p>\n      <div class=\"ds-hero__actions\">\n        <a class=\"ds-button ds-button--large\" href=\"#board\">Open the board &rarr;</a>\n        <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#episodes\">All episodes</a>\n      </div>\n    </div>\n    <div class=\"ds-player\">\n      <div class=\"ds-row\">\n        <span class=\"ds-badge ds-badge--alt\">Latest cut</span>\n        <span class=\"ds-note\">41 min</span>\n      </div>\n      <h2 class=\"ds-player__title\">48. The ferry that never left</h2>\n      <div class=\"ds-wave\" aria-hidden=\"true\">\n        <span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span><span class=\"ds-wave__bar\"></span>\n      </div>\n      <div class=\"ds-row\">\n        <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#episodes\">Listen to the cut</a>\n        <a class=\"ds-link\" href=\"#board\">Edit notes</a>\n      </div>\n    </div>\n  </section>\n\n  <dl class=\"ds-stat\" data-component=\"stats\">\n    <div class=\"ds-stat__card ds-stat__card--1\">\n      <dt class=\"ds-stat__label\">Plays this week</dt>\n      <dd class=\"ds-stat__value\">48,210</dd>\n      <dd class=\"ds-stat__note\">4,100 more than last week</dd>\n    </div>\n    <div class=\"ds-stat__card ds-stat__card--2\">\n      <dt class=\"ds-stat__label\">Followers</dt>\n      <dd class=\"ds-stat__value\">9,634</dd>\n      <dd class=\"ds-stat__note\">212 new since Monday</dd>\n    </div>\n    <div class=\"ds-stat__card ds-stat__card--3\">\n      <dt class=\"ds-stat__label\">Listened to the end</dt>\n      <dd class=\"ds-stat__value\">71%</dd>\n      <dd class=\"ds-stat__note\">Best: episode 44, 83%</dd>\n    </div>\n    <div class=\"ds-stat__card ds-stat__card--4\">\n      <dt class=\"ds-stat__label\">Episodes in the works</dt>\n      <dd class=\"ds-stat__value\">9</dd>\n      <dd class=\"ds-stat__note\">Two are past their date</dd>\n    </div>\n  </dl>\n\n  <div class=\"ds-split ds-split--wide\">\n    <section class=\"ds-panel\" data-component=\"panel\">\n      <h2 class=\"ds-panel__title\">Plays, last seven days <span class=\"ds-badge ds-badge--plain\">All shows</span></h2>\n      <div class=\"ds-panel__body\">\n        <ul class=\"ds-chart\" aria-label=\"Plays per day\">\n          <li class=\"ds-chart__col\"><span class=\"ds-chart__bar ds-chart__bar--45\"></span>Wed</li>\n          <li class=\"ds-chart__col\"><span class=\"ds-chart__bar ds-chart__bar--60\"></span>Thu</li>\n          <li class=\"ds-chart__col\"><span class=\"ds-chart__bar ds-chart__bar--100\"></span>Fri</li>\n          <li class=\"ds-chart__col\"><span class=\"ds-chart__bar ds-chart__bar--75\"></span>Sat</li>\n          <li class=\"ds-chart__col\"><span class=\"ds-chart__bar ds-chart__bar--30\"></span>Sun</li>\n          <li class=\"ds-chart__col\"><span class=\"ds-chart__bar ds-chart__bar--60\"></span>Mon</li>\n          <li class=\"ds-chart__col is-current\"><span class=\"ds-chart__bar ds-chart__bar--90\"></span>Today</li>\n        </ul>\n      </div>\n    </section>\n    <section class=\"ds-panel ds-panel--plain\">\n      <h2 class=\"ds-panel__title\">Most played this month</h2>\n      <div class=\"ds-panel__body\">\n        <ol class=\"ds-rank\">\n          <li class=\"ds-rank__item\">\n            <div class=\"ds-rank__head\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">44. Salt in the tea</a><span class=\"ds-rank__num\">12,480</span></div>\n            <span class=\"ds-meter\"><span class=\"ds-meter__fill ds-meter__fill--95\"></span></span>\n          </li>\n          <li class=\"ds-rank__item\">\n            <div class=\"ds-rank__head\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">47. A map with no north</a><span class=\"ds-rank__num\">10,912</span></div>\n            <span class=\"ds-meter\"><span class=\"ds-meter__fill ds-meter__fill--80\"></span></span>\n          </li>\n          <li class=\"ds-rank__item\">\n            <div class=\"ds-rank__head\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">45. The night bus choir</a><span class=\"ds-rank__num\">8,077</span></div>\n            <span class=\"ds-meter\"><span class=\"ds-meter__fill ds-meter__fill--62\"></span></span>\n          </li>\n          <li class=\"ds-rank__item\">\n            <div class=\"ds-rank__head\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">46. Borrowed umbrellas</a><span class=\"ds-rank__num\">4,530</span></div>\n            <span class=\"ds-meter\"><span class=\"ds-meter__fill ds-meter__fill--35\"></span></span>\n          </li>\n        </ol>\n      </div>\n    </section>\n  </div>\n\n  <div class=\"ds-split ds-split--wide\">\n    <div class=\"ds-stack\">\n      <div class=\"ds-row\">\n        <h2 class=\"ds-label\">Since you were last here</h2>\n        <a class=\"ds-link\" href=\"#episodes\">See every episode</a>\n      </div>\n      <ul class=\"ds-list\" data-component=\"list\">\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--2\">JO</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#board\">Jonas uploaded the second cut of episode 48</a></h3>\n            <p class=\"ds-list__text\">Six minutes shorter, the intro music is back.</p>\n          </div>\n          <span class=\"ds-list__meta\">20 minutes ago</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--3\">AL</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#board\">Alba booked a guest for episode 51</a></h3>\n            <p class=\"ds-list__text\">Recording on Thursday at ten, in the small room.</p>\n          </div>\n          <span class=\"ds-list__meta\">Yesterday</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar\">MK</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">You published episode 47</a></h3>\n            <p class=\"ds-list__text\">It reached 5,000 plays in its first two days.</p>\n          </div>\n          <span class=\"ds-list__meta\">Friday</span>\n        </li>\n      </ul>\n    </div>\n    <div class=\"ds-empty\">\n      <h3 class=\"ds-empty__title\">Nothing goes out this week</h3>\n      <p class=\"ds-empty__text\">Episode 48 has no release date yet. Pick one and it shows up here.</p>\n      <a class=\"ds-button ds-button--small\" href=\"#board\">Set a date</a>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"episodes\">\n<div class=\"ds-screen\">\n  <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\" aria-label=\"Breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Studio</a></li>\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Harbour Stories</a></li>\n    <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Episodes</li>\n  </ol>\n  <section class=\"ds-page-header\" data-component=\"page-header\">\n    <div>\n      <h1 class=\"ds-page-header__title\">Episodes</h1>\n      <p class=\"ds-page-header__lead\">Every episode of Harbour Stories, newest first.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#episodes\">Export list</a>\n      <a class=\"ds-button\" href=\"#board\">New episode</a>\n    </div>\n  </section>\n  <div class=\"ds-split\">\n    <div class=\"ds-stack\">\n      <ul class=\"ds-tabs\" data-component=\"tabs\" role=\"tablist\">\n        <li><a class=\"ds-tabs__tab is-current\" href=\"#episodes\" role=\"tab\" aria-selected=\"true\">All <span class=\"ds-badge ds-badge--plain\">48</span></a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#episodes\" role=\"tab\">Published</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#episodes\" role=\"tab\">Scheduled</a></li>\n        <li><a class=\"ds-tabs__tab\" href=\"#board\" role=\"tab\">Drafts</a></li>\n      </ul>\n      <table class=\"ds-table\" data-component=\"table\">\n        <thead>\n          <tr><th>No.</th><th>Title</th><th>Status</th><th class=\"ds-table__extra\">Released</th><th class=\"ds-table__num ds-table__extra\">Length</th><th class=\"ds-table__num\">Plays</th></tr>\n        </thead>\n        <tbody>\n          <tr><td>49</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#board\">The lighthouse keeper's radio</a></td><td><span class=\"ds-badge ds-badge--plain\">Draft</span></td><td class=\"ds-table__extra\">Not set</td><td class=\"ds-table__num ds-table__extra\">0:00</td><td class=\"ds-table__num\">0</td></tr>\n          <tr class=\"is-current\"><td>48</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#board\">The ferry that never left</a></td><td><span class=\"ds-badge ds-badge--warning\">In review</span></td><td class=\"ds-table__extra\">Not set</td><td class=\"ds-table__num ds-table__extra\">41:12</td><td class=\"ds-table__num\">0</td></tr>\n          <tr><td>47</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">A map with no north</a></td><td><span class=\"ds-badge ds-badge--success\">Published</span></td><td class=\"ds-table__extra\">4 April</td><td class=\"ds-table__num ds-table__extra\">38:40</td><td class=\"ds-table__num\">10,912</td></tr>\n          <tr><td>46</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Borrowed umbrellas</a></td><td><span class=\"ds-badge ds-badge--success\">Published</span></td><td class=\"ds-table__extra\">28 March</td><td class=\"ds-table__num ds-table__extra\">29:05</td><td class=\"ds-table__num\">4,530</td></tr>\n          <tr><td>45</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">The night bus choir</a></td><td><span class=\"ds-badge ds-badge--success\">Published</span></td><td class=\"ds-table__extra\">21 March</td><td class=\"ds-table__num ds-table__extra\">44:18</td><td class=\"ds-table__num\">8,077</td></tr>\n          <tr><td>44</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Salt in the tea</a></td><td><span class=\"ds-badge ds-badge--success\">Published</span></td><td class=\"ds-table__extra\">14 March</td><td class=\"ds-table__num ds-table__extra\">36:51</td><td class=\"ds-table__num\">12,480</td></tr>\n          <tr><td>43</td><td class=\"ds-table__title\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Two keys, one door</a></td><td><span class=\"ds-badge ds-badge--danger\">Taken down</span></td><td class=\"ds-table__extra\">7 March</td><td class=\"ds-table__num ds-table__extra\">33:27</td><td class=\"ds-table__num\">2,204</td></tr>\n        </tbody>\n      </table>\n      <div class=\"ds-row\">\n        <ul class=\"ds-pagination\" data-component=\"pagination\" aria-label=\"Pages\">\n          <li><a class=\"ds-pagination__link is-disabled\" href=\"#episodes\" aria-disabled=\"true\">&larr; Newer</a></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#episodes\" aria-current=\"page\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#episodes\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#episodes\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#episodes\">7</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#episodes\">Older &rarr;</a></li>\n        </ul>\n        <p class=\"ds-note\">Showing 1 to 7 of 48</p>\n      </div>\n    </div>\n    <div class=\"ds-stack\">\n      <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n        <h2 class=\"ds-sidebar__title\">Your shows</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Harbour Stories</a><span class=\"ds-badge ds-badge--plain\">48</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">The Short Walk</a><span class=\"ds-badge ds-badge--plain\">21</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Kitchen Table Maths</a><span class=\"ds-badge ds-badge--plain\">6</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Show settings</a></li>\n        </ul>\n      </aside>\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">What the labels mean</h2>\n        <div class=\"ds-panel__body\">\n          <div class=\"ds-badges\" data-component=\"badge\">\n            <span class=\"ds-badge\">Recording</span>\n            <span class=\"ds-badge ds-badge--alt\">New</span>\n            <span class=\"ds-badge ds-badge--plain\">Draft</span>\n            <span class=\"ds-badge ds-badge--success\">Published</span>\n            <span class=\"ds-badge ds-badge--warning\">In review</span>\n            <span class=\"ds-badge ds-badge--danger\">Taken down</span>\n          </div>\n        </div>\n      </section>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"board\">\n<div class=\"ds-screen\">\n  <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Studio</a></li>\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Harbour Stories</a></li>\n    <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Board</li>\n  </ol>\n  <section class=\"ds-page-header\">\n    <div>\n      <h1 class=\"ds-page-header__title\">Production board</h1>\n      <p class=\"ds-page-header__lead\">Nine episodes between an idea and a release date.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#episodes\">View as a list</a>\n      <a class=\"ds-button\" href=\"#board\">Add a card</a>\n    </div>\n  </section>\n  <ul class=\"ds-grid\" data-component=\"grid\">\n    <li class=\"ds-grid__cell ds-grid__cell--1\">\n      <div class=\"ds-grid__head\"><h2 class=\"ds-grid__title\">Ideas</h2><span class=\"ds-badge ds-badge--plain\">3</span></div>\n      <div class=\"ds-grid__body\">\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">52. The clock repair shop</h3>\n          <p class=\"ds-card__text\">Ask about the tower clock that runs backwards.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--alt\">New</span><span class=\"ds-avatar ds-avatar--3\">AL</span></div>\n        </article>\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">53. Letters from the pier</h3>\n          <p class=\"ds-card__text\">Needs a second voice. Maybe the postmaster.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--plain\">No date</span><span class=\"ds-avatar\">MK</span></div>\n        </article>\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">54. Winter swimmers</h3>\n          <p class=\"ds-card__text\">Record outside, bring the wind shield.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--plain\">No date</span><span class=\"ds-avatar ds-avatar--2\">JO</span></div>\n        </article>\n      </div>\n    </li>\n    <li class=\"ds-grid__cell ds-grid__cell--2\">\n      <div class=\"ds-grid__head\"><h2 class=\"ds-grid__title\">Recording</h2><span class=\"ds-badge ds-badge--plain\">2</span></div>\n      <div class=\"ds-grid__body\">\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">51. The bridge painter</h3>\n          <p class=\"ds-card__text\">Guest booked for Thursday at ten.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge\">Recording</span><span class=\"ds-avatar ds-avatar--3\">AL</span></div>\n        </article>\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">50. Fog signals</h3>\n          <p class=\"ds-card__text\">Second half still to record.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--danger\">Late</span><span class=\"ds-avatar\">MK</span></div>\n        </article>\n      </div>\n    </li>\n    <li class=\"ds-grid__cell ds-grid__cell--3\">\n      <div class=\"ds-grid__head\"><h2 class=\"ds-grid__title\">Editing</h2><span class=\"ds-badge ds-badge--plain\">4</span></div>\n      <div class=\"ds-grid__body\">\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">48. The ferry that never left</h3>\n          <p class=\"ds-card__text\">Second cut is up. Waiting for your ears.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--warning\">In review</span><span class=\"ds-avatar ds-avatar--2\">JO</span></div>\n        </article>\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">49. The lighthouse keeper's radio</h3>\n          <p class=\"ds-card__text\">Rough cut, 58 minutes. Aim for 40.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--plain\">Draft</span><span class=\"ds-avatar ds-avatar--2\">JO</span></div>\n        </article>\n        <article class=\"ds-card\">\n          <h3 class=\"ds-card__title\">Trailer for the spring season</h3>\n          <p class=\"ds-card__text\">Ninety seconds, three clips.</p>\n          <div class=\"ds-card__foot\"><span class=\"ds-badge ds-badge--danger\">Late</span><span class=\"ds-avatar\">MK</span></div>\n        </article>\n      </div>\n    </li>\n    <li class=\"ds-grid__cell ds-grid__cell--4\">\n      <div class=\"ds-grid__head\"><h2 class=\"ds-grid__title\">Scheduled</h2><span class=\"ds-badge ds-badge--plain\">0</span></div>\n      <div class=\"ds-grid__body\">\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <h3 class=\"ds-empty__title\">Nothing scheduled</h3>\n          <p class=\"ds-empty__text\">An episode lands here when it has a release date.</p>\n          <a class=\"ds-button ds-button--small\" href=\"#episodes\">Pick an episode</a>\n        </div>\n      </div>\n    </li>\n  </ul>\n  <div class=\"ds-notice\" role=\"status\">\n    <strong class=\"ds-notice__title\">Two cards are late</strong>\n    <p class=\"ds-notice__text\">Fog signals and the spring trailer are past the dates you set. Move the dates or move the cards.</p>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"settings\">\n<div class=\"ds-screen\">\n  <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Studio</a></li>\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#episodes\">Harbour Stories</a></li>\n    <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Settings</li>\n  </ol>\n  <section class=\"ds-page-header\">\n    <div>\n      <h1 class=\"ds-page-header__title\">Show settings</h1>\n      <p class=\"ds-page-header__lead\">What listeners see and where the feed lives.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button ds-button--secondary\" href=\"#guide\">How feeds work</a>\n    </div>\n  </section>\n  <div class=\"ds-stack\" data-component=\"notice\">\n    <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n      <strong class=\"ds-notice__title\">Not saved</strong>\n      <p class=\"ds-notice__text\">The feed address is already taken by another show. Choose a different one below.</p>\n    </div>\n    <div class=\"ds-notice\" role=\"status\">\n      <strong class=\"ds-notice__title\">Good to know</strong>\n      <p class=\"ds-notice__text\">Changes reach the podcast apps within a day of saving.</p>\n    </div>\n  </div>\n  <div class=\"ds-split\">\n    <section class=\"ds-panel\">\n      <h2 class=\"ds-panel__title\">About the show</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\">Show name</label>\n              <input class=\"ds-form__control\" id=\"f-name\" type=\"text\" value=\"Harbour Stories\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-feed\">Feed address</label>\n              <input class=\"ds-form__control is-invalid\" id=\"f-feed\" type=\"text\" value=\"harbour\" aria-invalid=\"true\" aria-describedby=\"f-feed-err\">\n              <p class=\"ds-form__error\" id=\"f-feed-err\">This address is taken. Try harbour-stories.</p>\n            </div>\n          </div>\n          <div class=\"ds-form__row\">\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-lang\">Language</label>\n              <select class=\"ds-form__control\" id=\"f-lang\">\n                <option>English</option>\n                <option>Portuguese</option>\n                <option>German</option>\n              </select>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-day\">Release day</label>\n              <select class=\"ds-form__control\" id=\"f-day\">\n                <option>Friday</option>\n                <option>Tuesday</option>\n                <option>No fixed day</option>\n              </select>\n            </div>\n          </div>\n          <div class=\"ds-form__field\">\n            <label class=\"ds-form__label\" for=\"f-about\">Description</label>\n            <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-about\">Short true stories from a small port town, told by the people who were there.</textarea>\n            <p class=\"ds-form__hint\">Shown under the title in every podcast app. Two sentences are plenty.</p>\n          </div>\n          <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Email me when an episode passes 5,000 plays</label>\n<div class=\"ds-switch-row\"><label class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>Show play counts to guests</span></label><span class=\"ds-tooltip\" data-component=\"tooltip\"><button class=\"ds-tooltip__trigger\" type=\"button\" aria-describedby=\"tip-1\">?</button><span class=\"ds-tooltip__tip\" id=\"tip-1\" role=\"tooltip\">Guests see totals only, never who listened.</span></span></div>\n          <div class=\"ds-form__foot\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"button\">Save changes</button>\n            <a class=\"ds-button ds-button--secondary\" href=\"#episodes\">Discard</a>\n            <a class=\"ds-button ds-button--danger\" href=\"#settings\">Delete show</a>\n            <button class=\"ds-button\" type=\"button\" disabled>Publish feed</button>\n          </div>\n        </form>\n      </div>\n    </section>\n    <div class=\"ds-stack\">\n      <aside class=\"ds-sidebar\">\n        <h2 class=\"ds-sidebar__title\">Who can edit</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\">Mira K. <span class=\"ds-badge\">Owner</span></li>\n          <li class=\"ds-sidebar__item\">Jonas O. <span class=\"ds-badge ds-badge--plain\">Editor</span></li>\n          <li class=\"ds-sidebar__item\">Alba L. <span class=\"ds-badge ds-badge--plain\">Producer</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link\" href=\"#settings\">Invite someone</a></li>\n        </ul>\n      </aside>\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">Feed</h2>\n        <div class=\"ds-panel__body\">\n          <p>The feed is paused until the address is fixed. Listeners keep the episodes they already have.</p>\n          <a class=\"ds-link\" href=\"#guide\">Moving a feed</a>\n        </div>\n      </section>\n<section class=\"ds-panel\"><h2 class=\"ds-panel__title\">Feed check</h2><div class=\"ds-panel__body\"><div class=\"ds-progress\" data-component=\"progress\"><p class=\"ds-progress__label\"><span>Apps that follow the feed</span><span>3 of 4</span></p><span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--70\"></span></span></div></div></section>\n    </div>\n  </div>\n  <div class=\"ds-overlay\">\n    <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n      <div class=\"ds-dialog__bar\">\n        <h2 class=\"ds-dialog__title\" id=\"dlg-title\">Delete Harbour Stories?</h2>\n        <a class=\"ds-dialog__close\" href=\"#settings\" aria-label=\"Close\">&times;</a>\n      </div>\n      <div class=\"ds-dialog__body\">\n        <p>All 48 episodes, their notes and the feed go with it. Listeners lose the show within a day. This cannot be undone.</p>\n      </div>\n      <div class=\"ds-dialog__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#settings\">Keep the show</a>\n        <button class=\"ds-button ds-button--danger\" type=\"button\">Delete show</button>\n      </div>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"guide\">\n<div class=\"ds-screen\">\n  <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Studio</a></li>\n    <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Handbook</a></li>\n    <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Moving a feed</li>\n  </ol>\n  <section class=\"ds-page-header\">\n    <div>\n      <h1 class=\"ds-page-header__title\">Handbook</h1>\n      <p class=\"ds-page-header__lead\">Short answers for the days when something has to go out.</p>\n    </div>\n    <div class=\"ds-page-header__actions\">\n      <a class=\"ds-button\" href=\"#settings\">Open show settings</a>\n    </div>\n  </section>\n  <div class=\"ds-split\">\n    <div class=\"ds-sheet\">\n      <article class=\"ds-prose\" data-component=\"typography\">\n        <h1>Moving a feed</h1>\n        <p>A feed is the address podcast apps ask for new episodes. Move it carefully and no listener notices; move it carelessly and they all have to follow again.</p>\n        <h2>Before you change the address</h2>\n        <p>Set the old address to forward for at least a month. In the feed file this is the line <code>new-feed-url</code>, and chronoskin writes it for you.</p>\n        <ul>\n          <li>Keep the episode numbers exactly as they were</li>\n          <li>Publish nothing on the day you move</li>\n          <li>Check one app on a phone, not only the website</li>\n        </ul>\n        <h3>If plays drop afterwards</h3>\n        <p>Give it a week. Apps fetch on their own schedule, and <strong>a quiet weekend is not a broken feed</strong>.</p>\n      </article>\n    </div>\n    <div class=\"ds-stack\">\n      <aside class=\"ds-sidebar\">\n        <h2 class=\"ds-sidebar__title\">More in the handbook</h2>\n        <ul class=\"ds-links\" data-component=\"links\">\n          <li><a class=\"ds-link\" href=\"#guide\">Recording with a guest</a></li>\n          <li><a class=\"ds-link is-visited\" href=\"#guide\">Loudness, in plain words</a></li>\n          <li><a class=\"ds-link is-hover\" href=\"#board\">Using the board</a></li>\n          <li><a class=\"ds-link is-active\" href=\"#settings\">Show settings</a></li>\n        </ul>\n      </aside>\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Still stuck?</h2>\n        <div class=\"ds-panel__body\">\n          <p>Write to the studio desk with the name of your show. A person answers on weekdays.</p>\n          <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#settings\">Write to the desk</a>\n        </div>\n      </section>\n<div class=\"ds-accordion\" data-component=\"accordion\">\n<details class=\"ds-accordion__item\" open><summary class=\"ds-accordion__head\">Will I lose listeners?</summary><div class=\"ds-accordion__body\"><p>Not if the old address forwards for a month.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">How long does a move take?</summary><div class=\"ds-accordion__body\"><p>Most apps follow within a day.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">Can I move back?</summary><div class=\"ds-accordion__body\"><p>Yes, the same way, with the addresses swapped.</p></div></details>\n</div>\n    </div>\n  </div>\n</div>\n</section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <p class=\"ds-footer__brand\">chronoskin</p>\n  <ul class=\"ds-footer__list\">\n    <li><a class=\"ds-footer__link\" href=\"#home\">Overview</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#episodes\">Episodes</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#board\">Board</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#guide\">Handbook</a></li>\n  </ul>\n  <p class=\"ds-footer__legal\">Specimen page. All names and figures are placeholders.</p>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.neubrutalism.app.s05.p01.t04.u11.dr\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"neubrutalism\",\n    \"years\": [\n      2021,\n      2026\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-nb-514b-dr\",\n  \"short\": \"v1-nb-514b-dr\",\n  \"density\": \"roomy\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #f5f0e6;\n  --color-canvas: #f5f0e6;\n  --color-surface: #ffffff;\n  --color-surface-alt: #ffe7a3;\n  --color-surface-strong: #ffdc58;\n  --color-bar: #ffffff;\n  --color-bar-text: #000000;\n  --color-bar-alt: #ffdc58;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #1a1815;\n  --color-inverse-text: #f5f0e6;\n  --color-text: #000000;\n  --color-text-muted: #6f675a;\n  --color-heading: #000000;\n  --color-heading-alt: #000000;\n  --color-link: #000000;\n  --color-link-quiet: #000000;\n  --color-link-visited: #000000;\n  --color-link-hover: #000000;\n  --color-link-active: #000000;\n  --color-border: #000000;\n  --color-border-strong: #000000;\n  --color-border-muted: #b3ac9e;\n  --color-accent: #ff6b6b;\n  --color-accent-text: #000000;\n  --color-accent-alt: #97ee88;\n  --color-fill-1: #ffdc58;\n  --color-fill-2: #ff6b6b;\n  --color-fill-3: #97ee88;\n  --color-fill-4: #88c5ee;\n  --color-button: #ffdc58;\n  --color-button-text: #000000;\n  --color-button-hover-text: #000000;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #000000;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #000000;\n  --color-disabled: #aeaeae;\n  --color-disabled-text: #4a443c;\n  --color-danger: #dc341e;\n  --color-danger-surface: #ff6b6b;\n  --color-success: #97ee88;\n  --color-warning: #f8a828;\n  --color-notice: #88c5ee;\n  --color-notice-text: #000000;\n  --color-focus: #000000;\n  --color-shadow: #000000;\n  --color-overlay: rgb(26 24 21 / 0.75);\n}\n\n/* @part type */\n:root {\n  --font-body: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n  --font-heading: \"Big Shoulders Display\", \"Barlow Condensed\", \"Avenir Next Condensed\", \"Arial Narrow\", \"Roboto Condensed\", sans-serif;\n  --font-ui: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n  --font-mono: \"DM Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n  --text-base: 16px;\n  --text-small: 14px;\n  --text-ui: 16px;\n  --text-large: 20px;\n  --text-display: 72px;\n  --text-h1: 60px;\n  --text-h2: 48px;\n  --text-h3: 30px;\n  --line-body: 1.5;\n  --line-heading: 1;\n  --line-display: 1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 900;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 4px;\n  --border-width-strong: 4px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 0;\n  --radius-page: 0;\n  --shadow-panel: 8px 8px 0 0 var(--color-shadow);\n  --shadow-control: 6px 6px 0 0 var(--color-shadow);\n  --shadow-control-hover: 4px 4px 0 0 var(--color-shadow);\n  --shadow-control-pressed: 2px 2px 0 0 var(--color-shadow);\n  --shadow-dialog: 8px 8px 0 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: \n    repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-border) 9%, transparent) 0 2px, transparent 2px 10px),\n    var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: \n    repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-bar-alt-text) 22%, transparent) 0 2px, transparent 2px 10px),\n    var(--color-bar-alt);\n  --fill-inverse: \n    repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-inverse-text) 14%, transparent) 0 2px, transparent 2px 10px),\n    var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 4px solid var(--color-focus);\n  --transition: transform 0.15s ease, box-shadow 0.15s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
