{
  "id": "v1-nb-1192",
  "long_id": "v1.neubrutalism.landing.s01.p01.t09.u02",
  "name": "Neubrutalism landing page (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": "landing",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "A fluid marketing page in the neubrutalist look: every box has a 2px black outline and a hard black shadow offset 4px down and right with no blur, fills are flat and saturated, and type is a bold geometric sans in black. It was common from about 2021 to 2026 on landing pages for small software products, creator tools and component kits. Sections run the full width of the viewport and are divided by black rules instead of gaps, while the content inside them sits in a centred 1216px column on a pale warm page with a faint grid.",
  "url": "https://chrono.skin/s/v1-nb-1192",
  "preview_url": "https://chrono.skin/s/v1-nb-1192/specimen.html",
  "files": {
    "STYLE.md": "# Neubrutalism landing page (2021 to 2026)\n\n## Summary\n\nA fluid marketing page in the neubrutalist look: every box has a 2px black outline and a hard black shadow offset 4px down and right with no blur, fills are flat and saturated, and type is a bold geometric sans in black. It was common from about 2021 to 2026 on landing pages for small software products, creator tools and component kits. Sections run the full width of the viewport and are divided by black rules instead of gaps, while the content inside them sits in a centred 1216px column on a pale warm page with a faint grid.\n\n## Layout\n\n- The page is fluid: `--size-page` is 100% and every section (`.ds-nav`, `.ds-hero`, `.ds-stat`, `.ds-page-header`, `.ds-band`, `.ds-footer`) is full-bleed. Content inside a section is centred in `--size-content` (1216px) with `--space-gutter` (32px) at the sides. Designed at a 1440px viewport.\n- Order of a page: a 14px announcement strip, a white `--size-nav` (64px) navigation bar closed by a 3px rule, a centred hero, a row of three stat cells, then bands, a coloured call-to-action band and one dark footer.\n- Inner pages keep the announcement strip, navigation and footer and drop the hero and the stat row. In their place comes a `.ds-page-header`: a white full-bleed section closed by a 2px rule, holding the breadcrumb, then the 48px page title and one line of description on the left with the page's actions on the right, bottom-aligned, in the same 1216px column. Its padding is `--space-7` above and `--space-6` below, half the hero's. Below it the working area is one `.ds-band` on the page grid with a `.ds-split`: the main column is a `.ds-stack` that starts with a `.ds-row` (the `.ds-tabs` tray on the left, a count on the right), then the table and its pagination; the 320px side column holds a form panel or a `.ds-sidebar`. Inner pages are left-aligned throughout; only the home page centres text.\n- Sections touch. They are separated by a 2px `--color-border` rule and a change of flat fill, never by a vertical gap.\n- Columns inside a band: `.ds-grid` is four equal columns with a `--space-5` gap; `.ds-split` is a main column plus a `--size-sidebar` (320px) column with a `--space-8` gap; `.ds-split--even` is two equal columns.\n- Text columns: hero lead and band heads are capped at `--size-measure` (672px) and centred; prose at 68ch, left-aligned.\n- Spacing scale: `--space-1` 4px (inline code and tab tray padding, underline offset), `--space-2` 8px (badge padding, gaps between pagination squares, label to control), `--space-3` 12px (control and row padding, list row padding), `--space-4` 16px (panel body padding, gap between buttons, table cell padding), `--space-5` 24px (gap between cards and stacked blocks, button side padding), `--space-6` 32px (stat cell padding, footer column gap, page header bottom padding), `--space-7` 48px (tight band padding, band head to content, page header top padding), `--space-8` 64px (band padding top and bottom, split gap), `--space-9` 96px (hero padding top and bottom).\n- Movement tokens: `--space-nudge` 2px (hover offset, focus outline offset) and `--space-press` 4px (pressed offset, equal to the shadow offset). Hover and press move a control straight down, never sideways, and the red shadow of an invalid field falls straight down, so the movement is right whichever way the surface set throws its shadows (lower right, lower left or straight down).\n- Fixed sizes: `--size-control` 44px (buttons, inputs), `--size-control-large` 52px (hero buttons), `--size-control-small` 36px (navigation buttons, tabs, pagination squares), `--size-logo` 32px (the brand tile), `--size-check` 20px, `--size-icon` 48px, `--size-art` 112px (colour block of a grid card), `--size-dialog` 480px.\n- Below 900px the grid drops to two columns, splits and stats stack, and the navigation links wrap onto a second row under the brand and the two buttons. Below 600px the gutters shrink to `--space-4`, the grid is one column, the hero buttons fill the width, display and h1 text step down to `--text-h2`, list rows and notices stack, and table columns marked `.ds-table__extra` are hidden so a table never scrolls sideways. On a phone (600px and below) the `.ds-nav__links` stay a wrapping row of small `.ds-nav__link` pills under the brand and the two buttons, the `.ds-badge` inside a link is hidden and the current link keeps its mark; `.ds-tabs` scrolls sideways.\n- Views: the specimen is one example site with four views, switched by plain `#name` links. `home` is the product page (hero, stat row, the four tool cards, the changelog list beside the import panel, the call to action). `guide` is an article: page header, the prose with its further links, and a side column with the contents sidebar and a panel. `invoices` is a client's invoice list: page header with the breadcrumb, tabs, table, pagination with the status key, and the edit form in the side column. `invoice` is one invoice: page header with the action buttons, notices, the line table, a summary sidebar, the empty payments box, and the confirmation dialog on its overlay band. The navigation 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- Two families: `--font-body` is the system sans (system-ui, Segoe UI, Roboto) for running text; `--font-heading` and `--font-ui` are Space Grotesk (then Archivo, then the system sans) for headings, buttons, navigation and inputs. `--font-mono` (Geist Mono, then the system monospace) for inline code.\n- Headings are uppercase: `--heading-transform: uppercase` on the hero title, band titles, the page title and prose headings, weight 700 (`--weight-heading`, `--weight-display`), `--line-heading` 1 and `--line-display` 1.1, no tracking. Buttons and navigation stay in sentence case (`--ui-transform: none`).\n- Text is small and dense: `--text-base` 14px at `--line-body` 1.625, `--text-small` 12px (badges come out at about 10px), `--text-ui` 14px, `--text-large` 18px for leads and large buttons.\n- `--text-display` 60px for the hero title; `--text-h1` 48px, `--text-h2` 30px, `--text-h3` 18px.\n- Weights: 400 body, 500 (`--weight-ui`) navigation, links, inputs and leads, 700 (`--weight-bold`) buttons, labels and badges.\n- Links in running text are underlined; navigation, titles and breadcrumbs are not.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the page fill with its grid, the base font and colour. Sections are its direct children (inside `<main>`); there is no wrapper column.\n- `.ds-brand`: the site's mark and name, the first thing in the header and a link to the home page. `.ds-brand__mark` is a `--size-logo` (32px) tile dressed like the primary button: `--fill-button` with the mark drawn in `--color-button-text`, a `--border-width` `--color-border` outline, `--radius-control` corners and the `--shadow-control` hard shadow, so every palette and surface set reskins it. The mark is inline SVG with square line caps and a 2.8 stroke. `.ds-brand__name` is the name in the heading font at `--text-large`, weight `--weight-heading`, with the heading tracking and transform, in `--color-bar-text`. One per page. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: site header. `.ds-nav__strip` is the optional yellow announcement line with a `.ds-nav__strip-link`. `.ds-nav__bar` holds the `.ds-brand`, `.ds-nav__links` of `.ds-nav__link` (the current one has `is-current`: a coral outlined block) and `.ds-nav__actions` with small buttons. A `.ds-badge` may sit inside a link.\n- `.ds-hero`: centred introduction on the page grid: an optional `.ds-badge`, `.ds-hero__title` at display size with one phrase wrapped in `.ds-hero__mark` (green outlined highlight), `.ds-hero__lead`, and `.ds-hero__actions` with one primary and at most one secondary large button. One per page. The marked phrase is an inline block with `--space-1` above and below, so its outline never touches the neighbouring lines whatever the display line height of the type set; keep it short enough to fit one line.\n- `.ds-stat`: the row of summary figures: a white full-bleed strip of three `.ds-stat__cell` divided by vertical 2px rules, each with a `.ds-stat__value` (48px bold) over a `.ds-stat__label` (20px). Use directly under the hero on the home page; no outline or shadow of its own, the section rules close it.\n- `.ds-page-header`: the head of an inner page, used instead of `.ds-hero`: white, full-bleed, closed by a 2px rule. `.ds-page-header__inner` is the 1216px column; put the `.ds-breadcrumb` first, then `.ds-page-header__row` with a block holding `.ds-page-header__title` (48px) and one `.ds-page-header__lead` line (20px) on the left and `.ds-page-header__actions` (one primary button, at most one secondary) on the right. One per page.\n- `.ds-band`: any full-width section. Variants set the fill: none (page grid), `.ds-band--surface` (white), `.ds-band--alt` (pale yellow), `.ds-band--fill-1` to `.ds-band--fill-4`, `.ds-band--overlay` (dialog backdrop), and `.ds-band--tight` for less padding. `.ds-band__inner` is the 1216px column. `.ds-band__head` centres a `.ds-band__title` and `.ds-band__lead` (add `.ds-band__head--flush` when it is the whole band, as in a call to action). `.ds-band__label` is a 20px heading over a small block.\n- `.ds-split`: main column plus a 320px side column; `.ds-split--even` for two halves. `.ds-stack` stacks blocks with a 24px gap (`.ds-stack--wide` 48px). `.ds-row` puts a title and a control on one line.\n- `.ds-grid`: four cards. Each `.ds-grid__cell` is an outlined, shadowed box: `.ds-grid__art` is the flat colour block (set by `.ds-grid__cell--1` to `--4`) holding a white `.ds-grid__icon` with an inline SVG, then a rule, then `.ds-grid__body` with `.ds-grid__title` and `.ds-grid__text`.\n- `.ds-prose`: long text: h1, h2, h3, p, ul, ol, strong, inline code (pale yellow outlined) and links inside it are styled.\n- `.ds-link`: any link in content: black, medium weight, underlined. `.ds-link--quiet` removes the underline for titles, breadcrumbs and sidebar lists. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-links` lays several out in a row.\n- `.ds-button`: yellow, black bold text, 2px outline, 4px hard shadow, 44px tall. `.ds-button--secondary` is white. `.ds-button--danger` is the destructive action (delete, void): flat red `--color-danger` with the same black text, outline and shadow; use it once per view, as the confirming button of a dialog or beside a secondary button. `.ds-button--large` (52px, 20px text) for the hero and call to action, `.ds-button--small` (36px, 14px text) for the navigation. `is-hover` sinks it 2px toward its shadow, `is-active` 4px with no shadow left, `is-disabled` is flat grey with no shadow, `is-focus` adds a black outline 2px away. `.ds-buttons` is a row of them.\n- `.ds-badge`: 12px bold uppercase label in a 2px outlined box with 5px corners, coral by default. `.ds-badge--alt` green (positive, \"new\"), `.ds-badge--strong` yellow, `.ds-badge--plain` white (counts, neutral tags). Status labels, in table rows and lists: `.ds-badge--success` green (paid, done), `.ds-badge--warning` amber (due soon, pending), `.ds-badge--danger` red (overdue, failed), all with black text and the same outline. No shadow. `.ds-badges` is a row of them. The alt and strong variants carry `--color-text`, like every other filled block; only the default badge uses `--color-accent-text`.\n- `.ds-form`: stacked fields: `.ds-form__field` with a bold 14px `.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 are white with a 2px outline and no shadow at rest; `is-focus` adds the hard shadow and an outline, `is-invalid` turns the border and shadow red, `is-disabled` greys it. `.ds-form__check` wraps a `.ds-form__checkbox` and its text.\n- `.ds-table`: one outlined, shadowed box. A cell with `.ds-table__extra` is dropped below 600px; mark the columns a phone can do without. The head row is white with bold 14px text; rows are divided by 2px black rules and alternate white and page colour; `is-current` on a row makes it pale yellow and bold. A status column holds one badge per row. `.ds-table__num` right-aligns numbers.\n- `.ds-list`: one outlined, shadowed box of `.ds-list__item` rows divided by black rules, each with a bold `.ds-list__title`, a `.ds-list__text` line and a muted `.ds-list__meta` on the right.\n- `.ds-panel`: outlined, shadowed box with a yellow `.ds-panel__title` strip over a rule and a `.ds-panel__body`. `.ds-panel--plain` makes the strip white. The plain title strip is filled with `--fill-bar` and takes `--color-bar-text`, so a dark bar works as well as a light one.\n- `.ds-tabs`: a white outlined tray of `.ds-tabs__tab`; the current one (`is-current`) is a coral outlined block with bold text, `is-hover` is pale yellow. Use for two to four views of one block; on an inner page it is the first row of the main column, above the table.\n- `.ds-sidebar`: outlined, shadowed white block with a `.ds-sidebar__title` and a `.ds-sidebar__list` of `.ds-sidebar__item` rows divided by faint `--color-border-muted` rules; an item may end with a plain badge.\n- `.ds-notice`: one-line message in an outlined, shadowed sky-blue box with a bold `.ds-notice__title` and `.ds-notice__text`. `.ds-notice--error` is coral with black text.\n- `.ds-pagination`: row of 36px white outlined squares (`.ds-pagination__link`) with a 2px shadow; the current page (`is-current`) is coral, `is-disabled` is grey and flat, `is-hover` moves into the shadow.\n- `.ds-breadcrumb`: 14px trail of `.ds-breadcrumb__item` separated by a muted slash; the last has `is-current` and is bold. On an inner page it is the first line of the page header.\n- `.ds-dialog`: a 480px outlined box with the same 4px hard shadow, a yellow `.ds-dialog__bar` (holding `.ds-dialog__title` and a square `.ds-dialog__close`, a button or a link back to the list), `.ds-dialog__body`, and a page-coloured `.ds-dialog__actions` strip over a rule with the buttons right-aligned. It sits on `.ds-band--overlay`.\n- `.ds-empty`: pale yellow outlined, shadowed box, centred: `.ds-empty__title`, `.ds-empty__text` and one button.\n- `.ds-footer`: one dark block: `.ds-footer__inner` is a 2:1:1:1 grid with `.ds-footer__brand` and `.ds-footer__text`, then columns with an uppercase `.ds-footer__title` in `--color-inverse-text` and a `.ds-footer__list` of `.ds-footer__link`; `.ds-footer__legal` is a last line over a faint rule.\n- `.ds-carousel`: a row of quotes of which one shows, in one outlined, shadowed box. `.ds-carousel__track` scrolls sideways with scroll snap; each `.ds-carousel__slide` holds a `.ds-carousel__quote` and a `.ds-carousel__who` line with a `.ds-avatar`. `.ds-carousel__controls` is the strip below with two `.ds-carousel__arrow` buttons and the `.ds-carousel__dots` (the current `.ds-carousel__dot` is wider and filled). Use it for what customers say, on the home page.\n- `.ds-avatar`: a person as initials on a filled, outlined circle (`--2`, `--3` change the fill). Use it beside a name.\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 <= 8px`: table and list rows touch and are divided by 2px rules; plain link lists without rules sit at most 8px apart.\n- `block-gap <= 64px`: stacked blocks are 24px apart, columns at most 64px; sections themselves touch.\n- `content-width >= 80%`: sections are full-bleed and their text column is 1216px of a 1440px viewport; never a narrow centred column.\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 <= 60px`: the hero title is the largest text.\n- `font-size >= 10px`: badge and footer labels, at about 10px, are the smallest text.\n- `font-weight >= 400`: no light weights.\n- `font-weight <= 700`: emphasis stops at 700.\n- `font-families <= 3`: a system sans for text, one grotesque for headings and controls, a monospace for code.\n- `line-height <= 1.63`: body text is set at 1.625.\n- `letter-spacing = 0px`: neither uppercase headings nor labels are tracked.\n- `uppercase-text <= 15%`: headings, badges and footer labels are uppercase; running text, buttons and navigation are not.\n- `underlined-links <= 20%`: only links in running text are underlined.\n- `border-width <= 2px`: rules are 1px hairlines, 2px only under the navigation; heavy outlines belong to other variants.\n- `border-radius <= 4px`: controls have 4px corners and every larger box is square; badges are pills, which are shapes.\n- `box-shadow-blur <= 0px`: the few shadows are hard offset blocks.\n- `text-shadow = none`: no text shadow.\n- `gradient-fills <= 0%`: every fill is flat, including the page.\n- `animation = none`: nothing moves on its own; the tag strip stands still.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything that is a box gets the same three things: a `--border-width` `--color-border` outline, a `--radius-panel` or `--radius-control` corner and the `--shadow-panel` hard shadow; anything clickable also moves `--space-nudge` into its shadow on hover and `--space-press` when pressed. Colour a new block with one flat `--color-fill-*` or surface token and keep its text black; never tint, fade or blur. Inside a box, divide with a 2px rule (or a `--color-border-muted` one for quiet lists) rather than nesting more shadowed cards. A new section is a `.ds-band` with a variant, touching its neighbours. For a size the vocabulary lacks, use `calc()` over an existing token, as the 12px badge text does.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 100%;\n  --size-content: 1216px;\n  --size-measure: 672px;\n  --size-nav: 64px;\n  --size-control: 44px;\n  --size-control-large: 52px;\n  --size-control-small: 36px;\n  --size-logo: 32px;\n  --size-check: 20px;\n  --size-avatar: 40px;\n  --size-tip: 220px;\n  --size-switch: 44px;\n  --size-bar: 16px;\n  --size-icon: 48px;\n  --size-art: 112px;\n  --size-sidebar: 320px;\n  --size-dialog: 480px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 24px;\n  --space-6: 32px;\n  --space-7: 48px;\n  --space-8: 64px;\n  --space-9: 96px;\n  --space-gutter: 32px;\n  --space-nudge: 2px;\n  --space-press: 4px;\n}\n\n/* shell */\n.ds-page {\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: announcement strip, then a white bar closed by a heavy rule */\n.ds-nav {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__strip {\n  margin: 0;\n  padding: var(--space-2) var(--space-gutter);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  text-align: center;\n  color: var(--color-bar-alt-text);\n  background: var(--fill-bar-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-nav__strip-link {\n  color: inherit;\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-nav__bar {\n  display: flex;\n  align-items: center;\n  gap: var(--space-6);\n  max-width: calc(var(--size-content) + 2 * var(--space-gutter));\n  min-height: var(--size-nav);\n  margin: 0 auto;\n  padding: 0 var(--space-gutter);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  text-decoration: none;\n  gap: var(--space-3);\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__links {\n  display: flex;\n  flex: 1;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-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}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n  text-underline-offset: var(--space-1);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"],\n.ds-page:has(#invoices:target) .ds-nav__link[href=\"#invoices\"],\n.ds-page:has(#invoice:target) .ds-nav__link[href=\"#invoice\"] {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-border);\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__actions {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* bands: full-bleed sections divided by rules, never by gaps */\n.ds-band {\n  padding: var(--space-8) var(--space-gutter);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-band--tight {\n  padding: var(--space-7) var(--space-gutter);\n}\n.ds-band--surface {\n  background: var(--color-surface);\n}\n.ds-band--alt {\n  background: var(--color-surface-alt);\n}\n.ds-band--fill-1 {\n  background: var(--color-fill-1);\n}\n.ds-band--fill-4 {\n  background: var(--color-fill-4);\n}\n.ds-band--overlay {\n  background: var(--color-overlay);\n}\n.ds-band__inner {\n  max-width: var(--size-content);\n  margin: 0 auto;\n}\n.ds-band__head {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-4);\n  max-width: var(--size-measure);\n  margin: 0 auto var(--space-7);\n  text-align: center;\n}\n.ds-band__head--flush {\n  margin-bottom: 0;\n}\n.ds-band__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-band__lead {\n  margin: 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n}\n.ds-band__label {\n  margin: 0 0 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}\n.ds-stack {\n  display: grid;\n  gap: var(--space-5);\n  align-content: start;\n  min-width: 0;\n}\n.ds-stack--wide {\n  gap: var(--space-7);\n}\n.ds-split {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-sidebar);\n  gap: var(--space-8);\n  align-items: start;\n}\n.ds-split--even {\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\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\n/* hero: centred on the page grid */\n.ds-hero {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-5);\n  padding: var(--space-9) var(--space-gutter);\n  text-align: center;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\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-heading);\n}\n.ds-hero__mark {\n  display: inline-block;\n  max-width: 100%;\n  margin: var(--space-1) 0;\n  padding: 0 var(--space-2);\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-control);\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  justify-content: center;\n  gap: var(--space-4);\n  margin-top: var(--space-3);\n}\n\n/* page header: the head of an inner page; white, left-aligned, closed by a rule */\n.ds-page-header {\n  padding: var(--space-7) var(--space-gutter) var(--space-6);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-page-header__inner {\n  max-width: var(--size-content);\n  margin: 0 auto;\n}\n.ds-page-header__row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-5);\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-3) 0 0;\n  font-size: var(--text-large);\n  font-weight: var(--weight-ui);\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 cells divided by rules */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  margin: 0;\n  background: var(--color-surface);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat__cell {\n  display: flex;\n  flex-direction: column-reverse;\n  align-items: center;\n  padding: var(--space-6) var(--space-5);\n  text-align: center;\n}\n.ds-stat__cell + .ds-stat__cell {\n  border-left: var(--border-width) var(--border-style) var(--color-border);\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-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading);\n}\n.ds-stat__label {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n}\n\n/* grid: bordered cards, a flat colour block over a white label strip */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\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  overflow: hidden;\n}\n.ds-grid__art {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: var(--size-art);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-grid__cell--1 .ds-grid__art {\n  background: var(--color-fill-1);\n}\n.ds-grid__cell--2 .ds-grid__art {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 .ds-grid__art {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 .ds-grid__art {\n  background: var(--color-fill-4);\n}\n.ds-grid__icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  padding: var(--space-2);\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-control);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-grid__icon svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-grid__body {\n  flex: 1;\n  padding: var(--space-4) var(--space-5) var(--space-5);\n}\n.ds-grid__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-grid__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n\n/* typography */\n.ds-prose {\n  max-width: 68ch;\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-5);\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin: var(--space-6) 0 var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-3);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-5);\n}\n.ds-prose li {\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  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\n/* links: black on everything; hover is a flat highlight behind the text */\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  text-decoration-thickness: var(--border-width);\n  background: var(--color-surface-strong);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\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: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* buttons: flat fill, black outline, hard shadow; the button moves into its shadow */\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-4);\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: small bold uppercase label in an outlined box */\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.857);\n  font-weight: var(--weight-bold);\n  line-height: 1.5;\n  text-transform: uppercase;\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--strong {\n  color: var(--color-text);\n  background: var(--color-surface-strong);\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__field {\n  display: grid;\n  gap: var(--space-2);\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: var(--line-body);\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);\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-size: var(--text-base);\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: var(--radius-control);\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-surface-strong);\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\n/* table: one outlined, shadowed box; rows divided by rules */\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-bar-text);\n  background: var(--fill-bar);\n}\n.ds-table tbody tr:nth-child(even) td {\n  background: var(--color-canvas);\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\n/* list: one outlined box of ruled rows */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\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  justify-content: space-between;\n  gap: var(--space-4);\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__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\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 coloured title strip */\n.ds-panel {\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  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  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel--plain .ds-panel__title {\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n\n/* tabs: an outlined tray; the current tab is a filled, outlined block */\n.ds-tabs {\n  display: inline-flex;\n  gap: var(--space-1);\n  margin: 0;\n  padding: var(--space-1);\n  list-style: none;\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-tabs__tab {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-control-small);\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  color: var(--color-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\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  border-color: var(--color-border);\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 */\n.ds-sidebar {\n  padding: var(--space-5);\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-3);\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-panel);\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: small outlined squares */\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 0 var(--space-5);\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 flat dark backdrop */\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  align-items: center;\n  justify-content: center;\n  width: var(--space-6);\n  height: var(--space-6);\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  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  gap: var(--space-3);\n  padding: var(--space-7) var(--space-5);\n  text-align: center;\n  background: var(--color-surface-alt);\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-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-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n}\n\n/* footer: one inverted block */\n.ds-footer {\n  padding: var(--space-8) var(--space-gutter) var(--space-6);\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n}\n.ds-footer__inner {\n  display: grid;\n  grid-template-columns: 2fr 1fr 1fr 1fr;\n  gap: var(--space-6);\n  max-width: var(--size-content);\n  margin: 0 auto;\n}\n.ds-footer__brand {\n  margin: 0 0 var(--space-3);\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-footer__text {\n  max-width: 36ch;\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n.ds-footer__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-bold);\n  line-height: 1.5;\n  text-transform: uppercase;\n  color: var(--color-inverse-text);\n}\n.ds-footer__list {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.45;\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-hover);\n  text-underline-offset: var(--space-1);\n}\n.ds-footer__legal {\n  max-width: var(--size-content);\n  margin: var(--space-7) auto 0;\n  padding-top: var(--space-5);\n  font-size: var(--text-small);\n  line-height: 1.45;\n  border-top: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 35%, transparent);\n}\n\n/* avatar: a person as initials on a filled, outlined circle */\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: var(--text-small);\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: var(--radius-pill);\n}\n.ds-avatar--2 {\n  background: var(--color-fill-2);\n}\n.ds-avatar--3 {\n  background: var(--color-fill-4);\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/* carousel: one quote showing, the rest a swipe away */\n.ds-carousel {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\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-carousel__track {\n  display: flex;\n  flex: 1;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scrollbar-width: none;\n}\n.ds-carousel__slide {\n  display: flex;\n  flex: 0 0 100%;\n  flex-direction: column;\n  justify-content: space-between;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: var(--space-5);\n  scroll-snap-align: start;\n}\n.ds-carousel__quote {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading-alt);\n}\n.ds-carousel__who {\n  display: flex;\n  align-items: center;\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-carousel__controls {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-carousel__arrow {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  margin: 0;\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  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  transition: var(--transition);\n}\n.ds-carousel__arrow:hover,\n.ds-carousel__arrow.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-carousel__dots {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-carousel__dot {\n  display: block;\n  width: var(--space-4);\n  height: var(--space-4);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-carousel__dot.is-current {\n  width: var(--space-6);\n  background: var(--fill-accent);\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--25 {\n  width: 25%;\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: 900px) {\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-split,\n  .ds-split--even,\n  .ds-stat {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-split {\n    gap: var(--space-7);\n  }\n  .ds-stat__cell + .ds-stat__cell {\n    border-left: 0;\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-footer__inner {\n    grid-template-columns: 1fr 1fr;\n  }\n  .ds-nav__bar {\n    flex-wrap: wrap;\n    justify-content: space-between;\n    gap: var(--space-2) var(--space-4);\n    padding: var(--space-3) var(--space-4);\n  }\n  .ds-nav__links {\n    order: 3;\n    flex: 0 0 100%;\n    flex-wrap: wrap;\n    gap: var(--space-1);\n  }\n  .ds-hero {\n    padding: var(--space-8) var(--space-4);\n  }\n}\n\n@media (max-width: 600px) {\n  .ds-band,\n  .ds-band--tight {\n    padding: var(--space-7) var(--space-4);\n  }\n  .ds-page-header {\n    padding: var(--space-6) var(--space-4) var(--space-5);\n  }\n  .ds-page-header__actions .ds-button,\n  .ds-page-header__row .ds-buttons .ds-button {\n    flex: 1 1 auto;\n  }\n  .ds-nav__strip {\n    padding: var(--space-2) var(--space-4);\n  }\n  .ds-nav__link {\n    padding: var(--space-1) var(--space-2);\n    font-size: var(--text-small);\n  }\n  .ds-nav__link .ds-badge {\n    display: none;\n  }\n  .ds-nav__actions {\n    gap: var(--space-3);\n  }\n  .ds-hero {\n    padding: var(--space-7) var(--space-4);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h2);\n  }\n  .ds-hero__actions,\n  .ds-hero__actions .ds-button {\n    width: 100%;\n  }\n  .ds-page-header__title,\n  .ds-stat__value,\n  .ds-prose h1 {\n    font-size: var(--text-h2);\n  }\n  .ds-band__title,\n  .ds-prose h2 {\n    font-size: calc(var(--text-h2) * 0.78);\n  }\n  .ds-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-tabs {\n    display: flex;\n    overflow-x: auto;\n    max-width: 100%;\n  }\n  .ds-tabs__tab {\n    padding: 0 var(--space-3);\n    white-space: nowrap;\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-1);\n  }\n  .ds-table .ds-table__extra {\n    display: none;\n  }\n  .ds-table th:first-child,\n  .ds-table td:first-child {\n    padding-left: var(--space-3);\n  }\n  .ds-table th:last-child,\n  .ds-table td:last-child {\n    padding-right: var(--space-3);\n  }\n  .ds-notice {\n    flex-direction: column;\n    gap: var(--space-1);\n  }\n  .ds-list__item {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-1);\n  }\n  .ds-dialog__actions {\n    flex-wrap: wrap;\n  }\n  .ds-footer {\n    padding: var(--space-7) var(--space-4) var(--space-5);\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 landing specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <p class=\"ds-nav__strip\">Version 3 is out: recurring invoices and a new ledger. <a class=\"ds-nav__strip-link\" href=\"#guide\">Read the notes</a></p>\n  <nav class=\"ds-nav__bar\" aria-label=\"Main\">\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    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Product</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#guide\">Guides <span class=\"ds-badge ds-badge--strong\">New</span></a></li>\n      <li><a class=\"ds-nav__link\" href=\"#invoices\">Invoices</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#invoice\">Sample invoice</a></li>\n    </ul>\n    <div class=\"ds-nav__actions\">\n      <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#invoices\">Sign in</a>\n      <a class=\"ds-button ds-button--small\" href=\"#invoices\">Start free</a>\n    </div>\n  </nav>\n</header>\n\n<main>\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <section class=\"ds-hero\" data-component=\"hero\">\n    <span class=\"ds-badge ds-badge--plain\">For studios of one to ten</span>\n    <h1 class=\"ds-hero__title\">Send the invoice <span class=\"ds-hero__mark\">before lunch.</span></h1>\n    <p class=\"ds-hero__lead\">chronoskin turns tracked hours into a finished invoice in three clicks. No setup call, no accounting course, no surprises at the end of the month.</p>\n    <div class=\"ds-hero__actions\">\n      <a class=\"ds-button ds-button--large\" href=\"#invoices\">Start free &rarr;</a>\n      <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#invoice\">See a sample invoice</a>\n    </div>\n  </section>\n\n  <dl class=\"ds-stat\" data-component=\"stats\">\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">Invoices sent last year</dt>\n      <dd class=\"ds-stat__value\">41,200</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">Median time to paid</dt>\n      <dd class=\"ds-stat__value\">6 days</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">Flat monthly price</dt>\n      <dd class=\"ds-stat__value\">9.00</dd>\n    </div>\n  </dl>\n\n  <section class=\"ds-band\">\n    <div class=\"ds-band__inner\">\n      <div class=\"ds-band__head\">\n        <h2 class=\"ds-band__title\">Four tools, one ledger</h2>\n        <p class=\"ds-band__lead\">Each one works alone. Together they close the month for you.</p>\n      </div>\n      <ul class=\"ds-grid\" data-component=\"grid\">\n        <li class=\"ds-grid__cell ds-grid__cell--1\">\n          <div class=\"ds-grid__art\"><span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3 3\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Timer</h3>\n            <p class=\"ds-grid__text\">Start it from the menu bar. Hours land on the right client.</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--2\">\n          <div class=\"ds-grid__art\"><span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-3-2-3 2-3-2-3 2z\"/><path d=\"M9 8h6M9 12h6\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#invoices\">Invoices</a></h3>\n            <p class=\"ds-grid__text\">Numbered, dated and totalled. Send as a link or a file.</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--3\">\n          <div class=\"ds-grid__art\"><span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><path d=\"M4 12l5 5L20 6\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Reminders</h3>\n            <p class=\"ds-grid__text\">A polite nudge on day 7 and day 14, then it stops.</p>\n          </div>\n        </li>\n        <li class=\"ds-grid__cell ds-grid__cell--4\">\n          <div class=\"ds-grid__art\"><span class=\"ds-grid__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" aria-hidden=\"true\"><path d=\"M4 20V10M10 20V4M16 20v-7M22 20H2\"/></svg></span></div>\n          <div class=\"ds-grid__body\">\n            <h3 class=\"ds-grid__title\">Reports</h3>\n            <p class=\"ds-grid__text\">Income by client and by month, ready for your accountant.</p>\n          </div>\n        </li>\n      </ul>\n    </div>\n  </section>\n\n  <section class=\"ds-band ds-band--surface\">\n    <div class=\"ds-band__inner ds-split ds-split--even\">\n      <div>\n        <h2 class=\"ds-band__label\">From the changelog</h2>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Recurring invoices</a></h3>\n              <p class=\"ds-list__text\">Set a schedule once and review before each send.</p>\n            </div>\n            <span class=\"ds-list__meta\">3 March</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Two currencies per client</a></h3>\n              <p class=\"ds-list__text\">Bill in one, report in another.</p>\n            </div>\n            <span class=\"ds-list__meta\">17 February</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#invoices\">Faster ledger search</a></h3>\n              <p class=\"ds-list__text\">Find any line by client, month or amount.</p>\n            </div>\n            <span class=\"ds-list__meta\">29 January</span>\n          </li>\n        </ul>\n<div class=\"ds-carousel ds-follow\" data-component=\"carousel\">\n<ul class=\"ds-carousel__track\">\n<li class=\"ds-carousel__slide\"><blockquote class=\"ds-carousel__quote\">\"I sent four invoices before my coffee went cold.\"</blockquote><p class=\"ds-carousel__who\"><span class=\"ds-avatar\" data-component=\"avatar\">NA</span> Noor A., two-person print studio</p></li>\n<li class=\"ds-carousel__slide\"><blockquote class=\"ds-carousel__quote\">\"The reminder did the awkward part for me.\"</blockquote><p class=\"ds-carousel__who\"><span class=\"ds-avatar ds-avatar--2\" data-component=\"avatar\">JB</span> Jonas B., illustrator</p></li>\n<li class=\"ds-carousel__slide\"><blockquote class=\"ds-carousel__quote\">\"My accountant asked what changed. Nothing, it is just tidy.\"</blockquote><p class=\"ds-carousel__who\"><span class=\"ds-avatar ds-avatar--3\" data-component=\"avatar\">PC</span> Petra C., sign painter</p></li>\n</ul>\n<div class=\"ds-carousel__controls\"><button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Previous\">&larr;</button><ol class=\"ds-carousel__dots\" aria-label=\"Quote 1 of 3\"><li class=\"ds-carousel__dot is-current\"></li><li class=\"ds-carousel__dot\"></li><li class=\"ds-carousel__dot\"></li></ol><button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Next\">&rarr;</button></div>\n</div>\n      </div>\n      <div>\n        <h2 class=\"ds-band__label\">Moving in</h2>\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h3 class=\"ds-panel__title\">Bring your old invoices</h3>\n          <div class=\"ds-panel__body\">\n            <p>Upload a spreadsheet and the ledger is filled in for you, client by client. Numbers, dates and totals are kept as they were, and nothing is sent to anyone until you say so.</p>\n            <p>Most studios are moved in before the kettle has boiled.</p>\n            <a class=\"ds-link\" href=\"#guide\">How the import works</a>\n          </div>\n        </section>\n<div class=\"ds-accordion ds-follow\" data-component=\"accordion\">\n<details class=\"ds-accordion__item\" open><summary class=\"ds-accordion__head\">Is there a contract?</summary><div class=\"ds-accordion__body\"><p>No. You pay by the month and stop when you like.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">Can I bring old invoices?</summary><div class=\"ds-accordion__body\"><p>Yes, as a spreadsheet. Numbers and dates stay as they were.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">What does it cost?</summary><div class=\"ds-accordion__body\"><p>A flat 9.00 a month for the whole studio.</p></div></details>\n</div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-band ds-band--fill-4\">\n    <div class=\"ds-band__head ds-band__head--flush\">\n      <h2 class=\"ds-band__title\">Close the month on a Friday</h2>\n      <p class=\"ds-band__lead\">Thirty free days, every feature, and an export button that always works.</p>\n      <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#invoices\">Start free</a>\n    </div>\n  </section>\n</section>\n\n<section class=\"ds-view\" id=\"guide\">\n  <section class=\"ds-page-header\">\n    <div class=\"ds-page-header__inner\">\n      <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Guides</a></li>\n        <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Your first invoice</li>\n      </ol>\n      <div class=\"ds-page-header__row\">\n        <div>\n          <h1 class=\"ds-page-header__title\">Guides</h1>\n          <p class=\"ds-page-header__lead\">Short reads on billing, for people who would rather be working.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button\" href=\"#invoices\">Try it on your ledger</a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-band ds-band--surface\">\n    <div class=\"ds-band__inner ds-split\">\n      <div class=\"ds-stack ds-stack--wide\">\n        <article class=\"ds-prose\" data-component=\"typography\">\n          <h1>Your first invoice</h1>\n          <p>An invoice is a client, a list of lines and a due date. Everything else is optional, and most of it can wait until somebody has paid.</p>\n          <h2>What a good invoice has</h2>\n          <p>Keep each line to what the client received. Set the term in the field named <code>due_in_days</code> and leave the rest at its default.</p>\n          <ul>\n            <li>One line per piece of work, in plain words</li>\n            <li>A due date that is a real date, not \"on receipt\"</li>\n            <li>Bank details where nobody has to look for them</li>\n          </ul>\n          <h3>After it is paid</h3>\n          <p>Mark it as paid, send a <strong>one-line thank you</strong>, and reuse the invoice as next month's template.</p>\n        </article>\n        <div>\n          <h2 class=\"ds-band__label\">Keep reading</h2>\n          <ul class=\"ds-links\" data-component=\"links\">\n            <li><a class=\"ds-link\" href=\"#guide\">Read the fees</a></li>\n            <li><a class=\"ds-link is-visited\" href=\"#guide\">Adding a client</a></li>\n            <li><a class=\"ds-link is-hover\" href=\"#invoice\">A sample invoice</a></li>\n            <li><a class=\"ds-link is-active\" href=\"#invoices\">Your ledger</a></li>\n          </ul>\n        </div>\n      </div>\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">In this guide</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Adding a client</a><span class=\"ds-badge ds-badge--plain\">2 min</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Writing the lines</a><span class=\"ds-badge ds-badge--plain\">4 min</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Tax and totals</a><span class=\"ds-badge ds-badge--plain\">3 min</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Sending and chasing</a><span class=\"ds-badge ds-badge--plain\">5 min</span></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h3 class=\"ds-panel__title\">See one finished</h3>\n          <div class=\"ds-panel__body\">\n            <p>The sample invoice has four lines, a due date and one overdue reminder.</p>\n            <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#invoice\">Open the sample</a>\n          </div>\n        </section>\n<section class=\"ds-panel\"><h2 class=\"ds-panel__title\">Your reading</h2><div class=\"ds-panel__body\"><div class=\"ds-progress\" data-component=\"progress\"><p class=\"ds-progress__label\"><span>Guides read</span><span>1 of 4</span></p><span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--25\"></span></span></div></div></section>\n      </div>\n    </div>\n  </section>\n</section>\n\n<section class=\"ds-view\" id=\"invoices\">\n  <section class=\"ds-page-header\" data-component=\"page-header\">\n    <div class=\"ds-page-header__inner\">\n      <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\" aria-label=\"Breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#invoices\">Clients</a></li>\n        <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Harbour &amp; Pine</li>\n      </ol>\n      <div class=\"ds-page-header__row\">\n        <div>\n          <h1 class=\"ds-page-header__title\">Harbour &amp; Pine</h1>\n          <p class=\"ds-page-header__lead\">Every invoice sent to this client, newest first.</p>\n        </div>\n        <div class=\"ds-page-header__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#invoices\">Export</a>\n          <a class=\"ds-button\" href=\"#invoice\">New invoice</a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-band\">\n    <div class=\"ds-band__inner ds-split\">\n      <div class=\"ds-stack\">\n        <div class=\"ds-row\">\n          <ul class=\"ds-tabs\" data-component=\"tabs\" role=\"tablist\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#invoices\" role=\"tab\" aria-selected=\"true\">All</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#invoices\" role=\"tab\">Unpaid <span class=\"ds-badge ds-badge--plain\">3</span></a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#invoices\" role=\"tab\">Paid</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#invoices\" role=\"tab\">Drafts</a></li>\n          </ul>\n          <span class=\"ds-list__meta\">Showing 8 to 14 of 21</span>\n        </div>\n        <table class=\"ds-table\" data-component=\"table\">\n          <thead>\n            <tr><th>Number</th><th>For</th><th>Status</th><th class=\"ds-table__extra\">Due</th><th class=\"ds-table__num\">Amount</th></tr>\n          </thead>\n          <tbody>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0114</a></td><td>Poster series</td><td><span class=\"ds-badge ds-badge--strong\">Draft</span></td><td class=\"ds-table__extra\">Not sent</td><td class=\"ds-table__num\">1,250.00</td></tr>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0113</a></td><td>Brand guide, part two</td><td><span class=\"ds-badge ds-badge--warning\">Due soon</span></td><td class=\"ds-table__extra\">12 March</td><td class=\"ds-table__num\">2,400.00</td></tr>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0109</a></td><td>Brand guide, part one</td><td><span class=\"ds-badge ds-badge--danger\">Overdue</span></td><td class=\"ds-table__extra\">20 February</td><td class=\"ds-table__num\">2,400.00</td></tr>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0102</a></td><td>Signage survey</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__extra\">30 January</td><td class=\"ds-table__num\">640.00</td></tr>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0097</a></td><td>Workshop day</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__extra\">9 January</td><td class=\"ds-table__num\">900.00</td></tr>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0091</a></td><td>Shop window lettering</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__extra\">12 December</td><td class=\"ds-table__num\">1,120.00</td></tr>\n            <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#invoice\">0088</a></td><td>Menu reprint</td><td><span class=\"ds-badge ds-badge--success\">Paid</span></td><td class=\"ds-table__extra\">28 November</td><td class=\"ds-table__num\">380.00</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\" href=\"#invoices\">&larr; Previous</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#invoices\">1</a></li>\n            <li><a class=\"ds-pagination__link is-current\" href=\"#invoices\" aria-current=\"page\">2</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#invoices\">3</a></li>\n            <li><a class=\"ds-pagination__link\" href=\"#invoices\">Next &rarr;</a></li>\n          </ul>\n          <div class=\"ds-badges\" data-component=\"badge\">\n            <span class=\"ds-badge\">Popular</span>\n            <span class=\"ds-badge ds-badge--alt\">New</span>\n            <span class=\"ds-badge ds-badge--strong\">Draft</span>\n            <span class=\"ds-badge ds-badge--success\">Paid</span>\n            <span class=\"ds-badge ds-badge--warning\">Due soon</span>\n            <span class=\"ds-badge ds-badge--danger\">Overdue</span>\n          </div>\n        </div>\n      </div>\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">Edit client</h2>\n        <div class=\"ds-panel__body\">\n          <form class=\"ds-form\" data-component=\"form\">\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-name\">Client name</label>\n              <input class=\"ds-form__control\" id=\"f-name\" type=\"text\" value=\"Harbour &amp; Pine\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-mail\">Billing email</label>\n              <input class=\"ds-form__control is-invalid\" id=\"f-mail\" type=\"email\" value=\"ida@example\" aria-invalid=\"true\" aria-describedby=\"f-mail-err\">\n              <p class=\"ds-form__error\" id=\"f-mail-err\">Enter a full address, such as name@example.org.</p>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-kind\">Payment term</label>\n              <select class=\"ds-form__control\" id=\"f-kind\">\n                <option>14 days</option>\n                <option>30 days</option>\n                <option>60 days</option>\n              </select>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-note\">Note on the invoice</label>\n              <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-note\">Thank you. Bank details are at the foot of the page.</textarea>\n              <p class=\"ds-form__hint\">One sentence is enough.</p>\n            </div>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Send payment reminders</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>Add a late fee after 30 days</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\">The fee is 2% and shows as its own line.</span></span></div>\n            <div class=\"ds-buttons\">\n              <button class=\"ds-button\" type=\"button\">Save client</button>\n              <a class=\"ds-button ds-button--secondary\" href=\"#invoices\">Cancel</a>\n            </div>\n          </form>\n        </div>\n      </section>\n    </div>\n  </section>\n</section>\n\n<section class=\"ds-view\" id=\"invoice\">\n  <section class=\"ds-page-header\">\n    <div class=\"ds-page-header__inner\">\n      <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#invoices\">Clients</a></li>\n        <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#invoices\">Harbour &amp; Pine</a></li>\n        <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Invoice 0109</li>\n      </ol>\n      <div class=\"ds-page-header__row\">\n        <div>\n          <h1 class=\"ds-page-header__title\">Invoice 0109</h1>\n          <p class=\"ds-page-header__lead\">Brand guide, part one. Sent 6 February, due 20 February.</p>\n        </div>\n        <div class=\"ds-buttons\" data-component=\"buttons\">\n          <button class=\"ds-button\" type=\"button\">Send reminder</button>\n          <button class=\"ds-button ds-button--secondary\" type=\"button\">Download</button>\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Void invoice</button>\n          <button class=\"ds-button\" type=\"button\" disabled>Mark as paid</button>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-band\">\n    <div class=\"ds-band__inner ds-split\">\n      <div class=\"ds-stack\">\n        <div class=\"ds-stack\" data-component=\"notice\">\n          <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n            <strong class=\"ds-notice__title\">Overdue</strong>\n            <p class=\"ds-notice__text\">This invoice is 15 days past its due date. Marking it as paid needs a payment first.</p>\n          </div>\n          <div class=\"ds-notice\" role=\"status\">\n            <strong class=\"ds-notice__title\">Heads up</strong>\n            <p class=\"ds-notice__text\">The second reminder goes out on day 14 unless you stop it.</p>\n          </div>\n        </div>\n        <table class=\"ds-table\">\n          <thead>\n            <tr><th>Line</th><th class=\"ds-table__num\">Hours</th><th class=\"ds-table__num ds-table__extra\">Rate</th><th class=\"ds-table__num\">Amount</th></tr>\n          </thead>\n          <tbody>\n            <tr><td>Research and interviews</td><td class=\"ds-table__num\">6</td><td class=\"ds-table__num ds-table__extra\">80.00</td><td class=\"ds-table__num\">480.00</td></tr>\n            <tr><td>Logo and colour system</td><td class=\"ds-table__num\">12</td><td class=\"ds-table__num ds-table__extra\">80.00</td><td class=\"ds-table__num\">960.00</td></tr>\n            <tr><td>Type and layout rules</td><td class=\"ds-table__num\">8</td><td class=\"ds-table__num ds-table__extra\">80.00</td><td class=\"ds-table__num\">640.00</td></tr>\n            <tr><td>Printed guide, 12 pages</td><td class=\"ds-table__num\">4</td><td class=\"ds-table__num ds-table__extra\">80.00</td><td class=\"ds-table__num\">320.00</td></tr>\n            <tr class=\"is-current\"><td>Total due</td><td class=\"ds-table__num\">30</td><td class=\"ds-table__num ds-table__extra\"></td><td class=\"ds-table__num\">2,400.00</td></tr>\n          </tbody>\n        </table>\n      </div>\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\">\n          <h2 class=\"ds-sidebar__title\">Summary</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\">Status <span class=\"ds-badge ds-badge--danger\">Overdue</span></li>\n            <li class=\"ds-sidebar__item\">Client <a class=\"ds-link ds-link--quiet\" href=\"#invoices\">Harbour &amp; Pine</a></li>\n            <li class=\"ds-sidebar__item\">Term <span>14 days</span></li>\n            <li class=\"ds-sidebar__item\">Reminders <span class=\"ds-badge ds-badge--plain\">1 sent</span></li>\n          </ul>\n        </aside>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <h3 class=\"ds-empty__title\">No payments yet</h3>\n          <p class=\"ds-empty__text\">Payments appear here as soon as the client pays or you record one.</p>\n          <a class=\"ds-button ds-button--small\" href=\"#invoices\">Record a payment</a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-band ds-band--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\">Void this invoice?</h2>\n        <a class=\"ds-dialog__close\" href=\"#invoices\" aria-label=\"Close\">&times;</a>\n      </div>\n      <div class=\"ds-dialog__body\">\n        <p>The client will see it as cancelled. The number stays in your ledger and cannot be reused.</p>\n      </div>\n      <div class=\"ds-dialog__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#invoices\">Keep it</a>\n        <button class=\"ds-button ds-button--danger\" type=\"button\">Void invoice</button>\n      </div>\n    </div>\n  </section>\n</section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <div>\n      <p class=\"ds-footer__brand\">chronoskin</p>\n      <p class=\"ds-footer__text\">Invoicing for small studios. Placeholder company, placeholder address.</p>\n    </div>\n    <div>\n      <p class=\"ds-footer__title\">Product</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=\"#invoices\">Invoices</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#invoice\">Sample invoice</a></li>\n      </ul>\n    </div>\n    <div>\n      <p class=\"ds-footer__title\">Learn</p>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#guide\">Guides</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#guide\">Your first invoice</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#guide\">Changelog</a></li>\n      </ul>\n    </div>\n    <div>\n      <p class=\"ds-footer__title\">Account</p>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#invoices\">Sign in</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#invoices\">Start free</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Contact</a></li>\n      </ul>\n    </div>\n  </div>\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.landing.s01.p01.t09.u02\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"neubrutalism\",\n    \"years\": [\n      2021,\n      2026\n    ]\n  },\n  \"archetype\": \"landing\",\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-1192\",\n  \"short\": \"v1-nb-1192\"\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: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial, sans-serif;\n  --font-heading: \"Space Grotesk\", \"Archivo\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n  --font-ui: \"Space Grotesk\", \"Archivo\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n  --font-mono: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n  --text-base: 14px;\n  --text-small: 12px;\n  --text-ui: 14px;\n  --text-large: 18px;\n  --text-display: 60px;\n  --text-h1: 48px;\n  --text-h2: 30px;\n  --text-h3: 18px;\n  --line-body: 1.625;\n  --line-heading: 1;\n  --line-display: 1.1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 700;\n  --weight-display: 700;\n  --weight-ui: 500;\n  --heading-transform: uppercase;\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: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 4px;\n  --radius-panel: 0;\n  --radius-pill: 9999px;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 2px 2px 0 0 var(--color-shadow);\n  --shadow-control-pressed: none;\n  --shadow-dialog: 4px 4px 0 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: 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: 2px solid var(--color-focus);\n  --transition: transform 0.14s ease-out, box-shadow 0.14s ease-out;\n  --backdrop-blur: 0px;\n}\n"
  }
}
