{
  "id": "v1-nb-7486",
  "long_id": "v1.neubrutalism.shop.s07.p04.t08.u06",
  "name": "Neubrutalism shop, small press shelves (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": "shop",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "A shop front in the neubrutalist look: a two-row header with a search field and a filled department strip, then one boxed column of shelves on a loud flat page, every box with a 3px outline and a hard, unblurred shadow in a second colour. It was common from about 2021 to 2026 for marketplaces of digital and printed goods, creator shops and the storefronts of small presses. Products sit in square cards with a flat colour picture and a price sticker stuck on at an angle, and the page sells through a window box that pairs the pitch with a carousel of the week's picks.",
  "url": "https://chrono.skin/s/v1-nb-7486",
  "preview_url": "https://chrono.skin/s/v1-nb-7486/specimen.html",
  "files": {
    "STYLE.md": "# Neubrutalism shop, small press shelves (2021 to 2026)\n\n## Summary\n\nA shop front in the neubrutalist look: a two-row header with a search field and a filled department strip, then one boxed column of shelves on a loud flat page, every box with a 3px outline and a hard, unblurred shadow in a second colour. It was common from about 2021 to 2026 for marketplaces of digital and printed goods, creator shops and the storefronts of small presses. Products sit in square cards with a flat colour picture and a price sticker stuck on at an angle, and the page sells through a window box that pairs the pitch with a carousel of the week's picks.\n\n## Layout\n\n- The page is fluid: `--size-page` is 100%. The header and the footer are full-bleed; everything between them sits in one centred column of `--size-content` (1280px) with `--space-gutter` (32px) at the sides. Designed at a 1440px viewport.\n- Navigation is two rows, closed by a `--border-width-strong` rule. The first, on `--fill-bar`, holds the `.ds-brand`, a `--size-search` (440px, growing to 616px) search field with its button, the account avatar and a small basket button. The second is a full-width strip on `--fill-bar-alt` with the view links at the left (the current one is a `--fill-bar` chip with an outline and a small shadow), a `.ds-menu` of departments, and a one-line note at the right.\n- Order of the home page: the shop window (`.ds-hero`, two halves in one box: pitch on the left, `.ds-carousel` on the right), the `.ds-stat` strip of four figures, a shelf (`.ds-row` with a `.ds-label` and a link, then the `.ds-grid` of four product cards), and a `.ds-split` with the `.ds-list` of new arrivals beside a `.ds-panel`.\n- Inner pages keep the header and footer and drop the shop window. They start with a `.ds-page-header`: the breadcrumb, then the `--text-h1` title and one line of lead on the left with the page's action bottom-aligned on the right, all standing directly on the page colour and closed by a `--border-width-strong` rule. Below it comes one `.ds-split`: `.ds-split--aisle` puts a `--size-side` (300px) column of filters on the left of a shelf (sidebar and switches left; tabs, table, pagination right); `.ds-split--even` is two halves (picture and buy box; basket and delivery form); the plain `.ds-split` is a main column with a 390px side column on the right (article and questions). Tabs are the first row of the main column, above the table.\n- Blocks in the column are `--space-7` (48px) apart; blocks in a `.ds-stack` are `--space-5` (24px) apart. Boxes never touch each other: the page colour and its ruled lines show between them.\n- Spacing scale: `--space-1` 4px (inline code, underline offset, gap between a title and its text), `--space-2` 8px (badge padding, gaps between pagination squares and tab chips, label to control), `--space-3` 12px (row and control padding, small button sides), `--space-4` 16px (panel, table cell and card padding, gap between buttons), `--space-5` 24px (gap between stacked blocks and cards, button side padding), `--space-6` 32px (gap between split columns, sheet padding, large button sides), `--space-7` 48px (gap between the blocks of a page, shop window padding), `--space-8` 64px (space above the footer, label column of a rating row).\n- Movement tokens: `--space-nudge` 2px (hover offset, focus offset) and `--space-press` 4px (pressed offset, the red shadow of an invalid field). A control sinks straight down, never sideways, so it is right whichever way the surface set throws its shadows.\n- Fixed sizes: `--size-control` 46px (buttons, inputs), `--size-control-large` 56px (shop window and buy buttons), `--size-control-small` 36px (strip links, tab chips, pagination squares, carousel arrows), `--size-logo` 40px, `--size-avatar` 40px, `--size-check` 22px (checkbox, tooltip trigger, switch knob), `--size-switch` 48px, `--size-bar` 16px (progress track), `--size-art` 172px (picture of a product card), `--size-stage` 300px (carousel picture; the item picture is one and a half times that), `--size-cover` 168px (a drawn cover), `--size-thumb` 72px, `--size-menu` 240px, `--size-tip` 220px, `--size-dialog` 460px.\n- Below 1000px the shop window, every split and the footer columns stack, the grid and the stat strip go to two columns and the search field takes a row of its own under the brand; the departments `.ds-menu` of the strip opens from the strip's right edge. Below 600px the gutters shrink to `--space-4`, the grid and form rows are one column, titles step down (`calc()` over `--text-h1` and `--text-h2`), the account name and the strip note are hidden, hero and page header buttons fill the width, list rows wrap their meta line, and table columns marked `.ds-table__extra` are hidden so that a table never scrolls sideways. On a phone (600px and below) the links `.ds-nav__links` are not shown; the \"Menu\" button `.ds-nav__fold` beside the brand opens a full-width list of every view as `.ds-menu__link--view` rows, the current one filled with the accent and barred on the left, then the search field takes the rest of the row; the strip above the bar (`.ds-nav__strip`) is not shown.\n- Views: the specimen is one example shop for zines and prints with five views, switched by plain `#name` links. `home` is the front window (shop window with carousel, stat strip, the shelf of four cards, new arrivals beside the maker of the week). `shelf` is a department: page header with the breadcrumb, the department sidebar and filter switches in the aisle column, then tabs, the price table, pagination and the key of stock labels. `item` is one title: its picture and thumbnails beside the buy panel and an accordion, then the readers' ratings beside their notes. `basket` is the basket: notices, the basket table with its progress bar, buttons and the confirmation dialog on the left, the delivery form and an empty \"saved for later\" box on the right. `help` is an article for makers on a sheet with further links, beside the questions accordion and a sidebar. The strip 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-heading` is a rounded display sans (Fredoka, then Baloo 2 and Arial Rounded) for the brand, titles, figures and dates, weight 600. `--font-body` and `--font-ui` are a soft grotesque (Rubik, then Karla and Trebuchet MS). `--font-mono` (Space Mono) is for inline code, times in the week and the signs on notices and accordions.\n- `--text-base` 16px at `--line-body` 1.55. `--text-small` 13px for meta, labels, table heads, the week's events and the footer. `--text-ui` 15px for tabs, buttons and inputs. `--text-large` 19px for leads and large buttons.\n- `--text-display` 64px at `--line-display` 1.06: the hero title and the day number on the ticket. `--text-h1` 42px: page titles, prose h1, stat values. `--text-h2` 28px: the brand, `.ds-label`, the ticket title, the date of a day cell, prose h2. `--text-h3` 19px: panel, sidebar, dialog and empty-state titles. Headings are sentence case.\n- Weights: 400 body, 500 (`--weight-ui`) tabs, links and inputs, 700 (`--weight-bold`) buttons, badges, labels and list titles, 600 headings. Badges and avatar initials are `calc(var(--text-small) * 0.87)`, about 11px; the vocabulary has no token for it.\n- Text on a fill follows one rule: `--color-text` on `--color-fill-1` to `--color-fill-4`, `--color-surface-alt`, `--color-surface-strong`, `--color-accent-alt`, `--color-success`, `--color-warning`, `--color-danger` and `--color-danger-surface`; `--color-accent-text` on `--fill-accent`; `--color-bar-text` on `--fill-bar`; `--color-bar-alt-text` on `--fill-bar-alt`; `--color-inverse-text` on `--fill-inverse`; `--color-notice-text` on `--color-notice`; the button text tokens on the two buttons. Titles on `--color-surface-strong` strips use `--color-heading-alt`. The brand name stands on the page and takes `--color-heading`.\n- The set is dark. `--color-page` and `--color-canvas` #14163f (night indigo): the page, which `--fill-page` crosses with faint diagonal lines, and the sheet, which is flat. `--color-surface` #1f2260: cards, panels, tables, list rows, inputs. `--color-surface-alt` #2d3184: the page header, the current table row, busy days of the month, the empty state, an open accordion head, inline code. `--color-surface-strong` #3d43b8: panel and dialog title strips, a hovered link.\n- Text and outlines are one cream, #fff6dc (`--color-text`, `--color-heading`, `--color-border`, `--color-input-border`). Every hard shadow is sky blue (`--color-shadow` #5ecbff), as is the dashed focus ring.\n- `--color-bar` #14163f with cream text: the folder tabs, the table head, a plain panel title. `--color-bar-alt` #ffe14d (lemon) with indigo text: the ticker line. `--color-inverse` #fff6dc with indigo text: the stat strip, the footer card and the tooltip.\n- `--color-button` #ffe14d (lemon) with indigo text is the primary button and the brand tile; `--color-button-secondary` is cream with indigo text.\n- `--color-accent` #ff7a59 (coral) with indigo text: the current folder tab, tab segment, page and day, the default badge, the progress bar, a switch that is on. `--color-accent-alt` #16755e (deep green) with cream text: the \"week of\" badge, the date square of a list row, the first avatar.\n- `--color-fill-1` to `--color-fill-4` (cobalt #2b59e0, brick #c2402c, green #16755e, violet #7a3fd6) carry cream text, so they are deep, never pastel: the heads of the day cells, the ticket's stub, avatars.\n- Links in running text are lemon (`--color-link` #ffe14d) and underlined; titles, breadcrumbs and tabs are cream and not underlined (`--color-link-quiet`). Hover removes the underline and puts a `--color-surface-strong` highlight behind the text, active a `--fill-accent` one with `--color-link-active` (indigo) text. `--color-heading-alt` is lemon, for titles on the strong strip.\n- Status, all with cream text: `--color-success` #19803f, `--color-warning` #a35f00 (a dark amber; a bright one cannot carry cream text) and `--color-danger` #e8492f, which is also the error text under a field, that field's border and shadow, and the destructive button. `--color-danger-surface` #a32a1c backs an error notice; `--color-notice` #2d3184 an information notice.\n- `--color-text-muted` #b4b6e0 for times, counts and hints; `--color-border-muted` #5a5da8 for the faint rules between table rows, between the events of a day and above a form's buttons; `--color-disabled` #2d3184 with `--color-disabled-text` #9a9cc8; `--color-overlay` is a darker indigo at 86%.\n- Surface: `--border-width` 2px on every box; `--border-width-strong` 4px on the sheet. Everything is rounded: `--radius-control` 12px (buttons, inputs, list rows, accordion bars, notices), `--radius-panel` 16px (panels, tables, day cells, the ticket, the page header), `--radius-page` 28px (the sheet, the footer card, the dialog's backdrop), `--radius-pill` for badges, avatars, the switch and the progress track. Shadows are hard, unblurred and fall more down than right: `--shadow-panel` 4px 7px, `--shadow-control` 3px 5px, `--shadow-control-hover` 1px 2px (also list rows, notices and closed accordion bars), `--shadow-control-pressed` zero, `--shadow-dialog` 6px 10px (the sheet, the ticket, the dialog). No text shadow, no gradient on any component.\n- `--transition` moves `transform` and `box-shadow` over 0.18s with a slight overshoot.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the ruled page fill, the base font and colour. The header, `.ds-main` and the footer are its children; `.ds-column` inside `.ds-main` is the 1280px column.\n- `.ds-brand`: the site's mark and name, first in the header and a link to the home view. `.ds-brand__mark` is a `--size-logo` tile dressed like the primary button (`--fill-button`, `--color-button-text`, the outline, `--radius-control`, a small hard shadow); the mark is drawn with square caps and a 3 stroke. `.ds-brand__name` is the name in the heading face at `--text-h2`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the header. `.ds-nav__bar` holds the brand, `.ds-nav__search` (a `.ds-nav__field` and a `.ds-nav__go` button in one outlined box) and `.ds-nav__actions` (a `.ds-nav__account` with an avatar, a small basket button with a plain badge). `.ds-nav__strip` is the filled strip: `.ds-nav__strip-inner` holds `.ds-nav__links` of `.ds-nav__link` (`is-current`, `is-hover`, `is-focus`) and a `.ds-nav__note`.\n- `.ds-menu`: a drop-down under a strip item, a `<details>` whose `<summary>` is a `.ds-nav__link` with `.ds-menu__trigger`. `.ds-menu__list` is an outlined, shadowed white box of `.ds-menu__item` rows divided by rules, each a `.ds-menu__link` that may end in a plain badge. Use it for a list of departments or account pages that would not fit the strip.\n- `.ds-hero`: the shop window, one outlined box with the dialog shadow, in two halves. `.ds-hero__text` holds an optional tilted badge, `.ds-hero__title` at display size with one phrase in `.ds-hero__mark` (a mint outlined block turned 2 degrees), `.ds-hero__lead` and `.ds-hero__actions` with one primary and one secondary large button. The other half is a `.ds-carousel`. One per site, on the home view.\n- `.ds-carousel`: a row of slides of which one shows. `.ds-carousel__track` scrolls sideways with scroll snap; each `.ds-carousel__slide` (`--2`, `--3` change the fill) has a `.ds-carousel__art` picture and a `.ds-carousel__caption` with a `.ds-carousel__title` and a small button. `.ds-carousel__controls` is the strip below with two `.ds-carousel__arrow` buttons and `.ds-carousel__dots` of `.ds-carousel__dot` (`is-current` is wider and filled with the accent).\n- `.ds-cover`: a drawn zine or print for pictures: a white outlined card turned 4 degrees (`.ds-cover--right` turns the other way, `.ds-cover--large` is one and a half times the size) with a `.ds-cover__title`, a `.ds-cover__art` drawing and a `.ds-cover__foot` in the monospace face. `.ds-tag` is the price sticker, a pill turned 6 degrees; `.ds-tag--corner` sticks it to the top right of a picture. Only covers, stickers, the marked phrase and a `.ds-badge--tilt` are turned; never turn a whole card or a block of text.\n- `.ds-stat`: the row of summary figures, one outlined strip on `--color-surface-alt` cut into four `.ds-stat__cell` by rules; each puts the `.ds-stat__value` (`--text-h2`, slab) and its `.ds-stat__label` on one line. Use under the shop window.\n- `.ds-grid`: the shelf, four product cards. Each `.ds-grid__cell` (`--1` to `--4` set the picture's fill) has a `.ds-grid__art` with a line drawing and a corner sticker, a `.ds-grid__body` with `.ds-grid__title` and `.ds-grid__text`, and a `.ds-grid__foot` over a rule with a stock badge and a small button. `.ds-price` is a price in the slab face (`.ds-price--large` for the buy panel).\n- `.ds-stage`: the large picture of one item, a filled outlined box holding a cover and a corner sticker. `.ds-thumbs` is the row of `.ds-thumbs__item` squares under it (`is-current` has a shadow).\n- `.ds-page-header`: the head of an inner page: the `.ds-breadcrumb`, then `.ds-page-header__row` with `.ds-page-header__main` (`.ds-page-header__title`, `.ds-page-header__lead`) and `.ds-page-header__actions`, closed by the thick rule. One per inner view.\n- `.ds-split`, `.ds-stack`, `.ds-row`, `.ds-label`, `.ds-note`: layout helpers. `.ds-split` (main and side), `.ds-split--aisle` (filters left), `.ds-split--even` (halves); `.ds-stack` stacks blocks; `.ds-row` puts a heading and a link, or tabs and a count, on one line; `.ds-label` is a section heading (`.ds-label--small` at `--text-h3`); `.ds-note` is a muted line.\n- `.ds-prose`: long text: h1, h2, h3, p, ul, ol, strong, inline code (pale blue, outlined) and links are styled. `.ds-sheet` is the white outlined box an article sits on.\n- `.ds-link`: a link in content: near-black, weight 600, 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`: tomato, near-black text, 3px outline, hard shadow, 46px tall. `.ds-button--secondary` is white. `.ds-button--danger` is the destructive action, flat red with the same text and outline; use it once per view. `.ds-button--large` for the shop window and the buy panel, `.ds-button--small` for cards, the header and empty states, `.ds-button--wide` fills its box. `is-hover` sinks it 2px, `is-active` 4px with no shadow left, `is-disabled` is flat and greyed, `is-focus` adds the focus ring. `.ds-buttons` is a row of them.\n- `.ds-badge`: a small pill label, cobalt with white text by default. `.ds-badge--alt` mint (\"new\", signed), `.ds-badge--plain` white (counts). Status labels: `.ds-badge--success` (in stock), `.ds-badge--warning` (few left), `.ds-badge--danger` (sold out), all with `--color-text` and the outline. `.ds-badge--tilt` turns one 3 degrees. `.ds-badges` is a row of them.\n- `.ds-avatar`: a maker or reader as initials on a filled circle (`--2`, `--3`, `--4` change the fill; `--small` for the header, `--large` with a shadow for a profile). `.ds-person` puts one beside a `.ds-person__name` and a `.ds-person__role`.\n- `.ds-progress`: how far something is: a `.ds-progress__label` line (what, and the figures) over a `.ds-progress__track` pill holding a `.ds-progress__bar` whose width is set by `--10`, `--25`, `--70` or `--85` (50% without one). `.ds-progress--row` is a rating row: label, track and count on one line. Use for a print run, a basket's way to free postage, ratings.\n- `.ds-switch`: an on and off control: a `<label>` holding a hidden `.ds-switch__input` checkbox, the `.ds-switch__track` pill and the text. On, the track is filled with the accent and takes a small shadow, and the knob moves right. Use for filters that apply at once; a choice that is sent with a form is a `.ds-form__check`.\n- `.ds-tooltip`: a hint. `.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). Keep the text to one or two lines.\n- `.ds-accordion`: sections that open and close, one outlined, shadowed box of `<details class=\"ds-accordion__item\">` divided by rules. `.ds-accordion__head` is the `<summary>` in the slab face with a round plus sign; open, it becomes a `--color-surface-strong` strip with a minus sign over `.ds-accordion__body`. Use for product details and questions.\n- `.ds-form`: stacked fields: `.ds-form__field` with a bold small `.ds-form__label` over a `.ds-form__control` (input, select; `.ds-form__control--area` for a textarea), then `.ds-form__hint` or `.ds-form__error`. `.ds-form__row` puts two fields side by side. Controls are white with the outline and no shadow at rest; `is-focus` adds the focus ring and a small shadow, `is-invalid` turns the border red with a red shadow below, `is-disabled` greys it. `.ds-form__check` wraps a `.ds-form__checkbox` and its text.\n- `.ds-table`: one outlined, shadowed box. The head row is a `--color-surface-strong` strip with bold small text; rows are divided by rules; `is-current` on a row makes it pale blue and bold; a `<tfoot>` is a pale blue totals strip. `.ds-table__num` right-aligns numbers; a cell with `.ds-table__extra` is dropped below 600px.\n- `.ds-list`: one outlined, shadowed box of `.ds-list__item` rows divided by rules, each led by a `.ds-avatar`, then `.ds-list__main` (`.ds-list__title`, `.ds-list__text`) and a muted `.ds-list__meta` at the right.\n- `.ds-panel`: outlined, shadowed box with a `--color-surface-strong` `.ds-panel__title` strip over a rule and a `.ds-panel__body` that spaces its children. `.ds-panel--plain` makes the strip `--fill-bar` with `--color-bar-text`.\n- `.ds-tabs`: a row of separate pill chips (`.ds-tabs__tab`); the current one (`is-current`) is filled with the accent and has a small shadow, `is-hover` is pale blue. Use for two to five cuts of one shelf, above its table.\n- `.ds-sidebar`: the aisle list: an outlined, shadowed box with a `.ds-sidebar__title` strip on `--fill-bar-alt` and a `.ds-sidebar__list` of `.ds-sidebar__item` rows divided by faint rules, each a quiet link and a count badge.\n- `.ds-notice`: a one-line message in an outlined box with a thick left edge and a hard shadow: a bold `.ds-notice__title` and `.ds-notice__text`. Pale blue by default; `.ds-notice--error` is `--color-danger-surface`.\n- `.ds-pagination`: a row of small white outlined squares (`.ds-pagination__link`) with a small shadow; the current page (`is-current`) is filled with the accent, `is-disabled` is grey and flat, `is-hover` sinks.\n- `.ds-breadcrumb`: a small trail of `.ds-breadcrumb__item` separated by a bold angle bracket; the last has `is-current`. The first line of a page header.\n- `.ds-dialog`: a `--size-dialog` outlined box with the dialog shadow: a `--color-surface-strong` `.ds-dialog__bar` (holding `.ds-dialog__title` and a square `.ds-dialog__close`), `.ds-dialog__body`, and a page-coloured `.ds-dialog__actions` strip over a rule with the buttons right-aligned. It sits on `.ds-overlay`, an outlined block filled with `--color-overlay`.\n- `.ds-empty`: a pale blue outlined, shadowed box, centred: `.ds-empty__title`, `.ds-empty__text` and one small button.\n- `.ds-footer`: one inverted full-bleed block. `.ds-footer__inner` is a 2:1:1:1 grid: `.ds-footer__about` with `.ds-footer__brand` and `.ds-footer__text`, then three columns with a `.ds-footer__title` and a `.ds-footer__list` of `.ds-footer__link`; `.ds-footer__legal` is the last line over a rule.\n- `.ds-nav__fold`: the `.ds-menu` that stands in for the bar's links at 600px and below: a \"Menu\" button beside the brand that lists every view as a `.ds-menu__link--view` (the current one filled with the accent and barred on the left) and the actions the phone bar has no room for. It is hidden on wider screens, where the links show.\n\n## Never\n\n- `row-gap <= 8px`: table and list rows touch and are divided by rules.\n- `block-gap <= 64px`: stacked blocks are 24px apart, the blocks of a page 48px.\n- `content-width >= 80%`: the column is 1280px of a 1440px viewport; never a narrow centred column.\n- `palette-colours <= 20`: black, white, aqua, pink, periwinkle, yellow, two mints, pale cyan, amber, red, salmon, the dark footer and the greys; no tints or shades beyond these.\n- `font-size <= 64px`: the hero title and the ticket's day number are the largest text.\n- `font-size >= 11px`: badges and avatar initials are the smallest text.\n- `font-weight >= 400`: no light or thin weights.\n- `font-families <= 3`: a rounded display face, a text sans and a monospace.\n- `line-height <= 1.55`: body text is set at 1.55; leads at 1.45, headings at 1.18.\n- `uppercase-text <= 0%`: nothing is set in capitals.\n- `box-shadow-blur <= 0px`: every shadow is a hard offset block; a blurred shadow breaks the style at once.\n- `border-radius <= 22px`: boxes are square; only controls are rounded, as pills of at most 22px.\n- `border-width >= 3px`: every outline and rule is 3px or the 5px thick rule; no hairlines.\n- `border-width <= 5px`: nothing heavier than the 5px rule.\n- `text-shadow = none`: no text shadow in any reference.\n- `gradient-fills <= 0%`: every fill is flat, including the page.\n- `animation = none`: nothing moves on its own; only hover and press shift a control.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything new is a free-standing box in the column: a `--border-width` `--color-border` outline, the `--radius-panel` corner and the `--shadow-panel` hard shadow; the one most important box of a view takes `--shadow-dialog`, and small things (chips, arrows, small buttons, stickers) take `--shadow-control-hover`. Anything clickable sinks `--space-nudge` on hover and `--space-press` when pressed, straight down. Small round things (labels, chips, people, tracks) take `--radius-pill`; everything they sit in stays on `--radius-panel`. Colour a box with one flat `--color-fill-*` or surface token and put `--color-text` on it; never tint, fade or blur. A new product is another `.ds-grid__cell` with a line drawing in `currentColor` and a `.ds-tag`; a new department page is a `.ds-split--aisle` with its filters in the left column. Inside a box, divide with a rule rather than nesting shadowed cards. For a size the vocabulary lacks, use `calc()` over an existing token, as the badge text does.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 100%;\n  --size-content: 1280px;\n  --size-side: 300px;\n  --size-measure: 620px;\n  --size-search: 440px;\n  --size-menu: 240px;\n  --size-tip: 220px;\n  --size-control: 46px;\n  --size-control-large: 56px;\n  --size-control-small: 36px;\n  --size-logo: 40px;\n  --size-avatar: 40px;\n  --size-check: 22px;\n  --size-switch: 48px;\n  --size-bar: 16px;\n  --size-art: 172px;\n  --size-stage: 300px;\n  --size-cover: 168px;\n  --size-thumb: 72px;\n  --size-dialog: 460px;\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-gutter: 32px;\n  --space-nudge: 2px;\n  --space-press: 4px;\n}\n\n/* shell: a two-row shop header, one boxed column of shelves, an inverted footer */\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: the counter row (brand, search, account, basket) over a filled department strip */\n.ds-nav {\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4) var(--space-6);\n  max-width: calc(var(--size-content) + 2 * var(--space-gutter));\n  margin: 0 auto;\n  padding: var(--space-4) var(--space-gutter);\n}\n.ds-brand {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  gap: var(--space-3);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-logo);\n  height: var(--size-logo);\n  padding: var(--space-1);\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-hover);\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-h2);\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__search {\n  display: flex;\n  flex: 1 1 var(--size-search);\n  min-width: 0;\n  max-width: calc(var(--size-search) * 1.4);\n  margin: 0 auto;\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  overflow: hidden;\n}\n.ds-nav__field {\n  flex: 1;\n  min-width: 0;\n  min-height: var(--size-control-small);\n  margin: 0;\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  color: var(--color-input-text);\n  background: var(--fill-input);\n  border: 0;\n  border-radius: 0;\n}\n.ds-nav__field:focus,\n.ds-nav__field.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-press));\n}\n.ds-nav__go {\n  flex: none;\n  margin: 0;\n  padding: 0 var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-transform: var(--ui-transform);\n  cursor: pointer;\n  color: var(--color-text);\n  background: var(--color-surface-strong);\n  border: 0;\n  border-left: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: 0;\n}\n.ds-nav__actions {\n  display: flex;\n  flex: none;\n  align-items: center;\n  gap: var(--space-4);\n  margin-left: auto;\n}\n.ds-nav__account {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration-quiet);\n  color: var(--color-bar-text);\n}\n.ds-nav__strip {\n  color: var(--color-bar-alt-text);\n  background: var(--fill-bar-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-nav__strip-inner {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2) var(--space-5);\n  max-width: calc(var(--size-content) + 2 * var(--space-gutter));\n  margin: 0 auto;\n  padding: var(--space-2) var(--space-gutter);\n}\n.ds-nav__links {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-1) 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  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  cursor: pointer;\n  color: var(--color-bar-alt-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  border-color: currentColor;\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(#shelf:target) .ds-nav__link[href=\"#shelf\"],\n.ds-page:has(#item:target) .ds-nav__link[href=\"#item\"],\n.ds-page:has(#basket:target) .ds-nav__link[href=\"#basket\"],\n.ds-page:has(#help:target) .ds-nav__link[href=\"#help\"] {\n  font-weight: var(--weight-bold);\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n  border-color: var(--color-border);\n  box-shadow: var(--shadow-control-hover);\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__note {\n  margin: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n\n/* menu: a drop-down under a strip item, a details element */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__trigger {\n  list-style: none;\n}\n.ds-menu__trigger::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__trigger::after {\n  content: \"+\";\n  font-weight: var(--weight-bold);\n}\n.ds-menu[open] .ds-menu__trigger::after {\n  content: \"-\";\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 3;\n  width: var(--size-menu);\n  max-width: 80vw;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-menu__item + .ds-menu__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-menu__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  color: var(--color-text);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  background: var(--color-surface-alt);\n}\n\n/* column: everything below the header sits in one boxed column */\n.ds-main {\n  display: block;\n  padding: var(--space-7) var(--space-gutter) var(--space-8);\n}\n.ds-column {\n  display: grid;\n  gap: var(--space-7);\n  align-content: start;\n  max-width: var(--size-content);\n  margin: 0 auto;\n}\n.ds-split {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) calc(var(--size-side) * 1.3);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-split--aisle {\n  grid-template-columns: var(--size-side) minmax(0, 1fr);\n}\n.ds-split--even {\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n}\n.ds-stack {\n  display: grid;\n  gap: var(--space-5);\n  align-content: start;\n  min-width: 0;\n}\n.ds-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-4);\n}\n.ds-label {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-label--small {\n  font-size: var(--text-h3);\n}\n.ds-note {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* hero: the shop window. The pitch on the left, the carousel of this week's picks on the right */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\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-page);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-hero__text {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: var(--space-7);\n}\n.ds-hero__title {\n  margin: 0;\n  max-width: 100%;\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  overflow-wrap: break-word;\n  color: var(--color-heading);\n}\n.ds-hero__mark {\n  display: inline-block;\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  transform: rotate(-2deg);\n}\n.ds-hero__lead {\n  max-width: var(--size-measure);\n  margin: 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n}\n\n/* carousel: one slide showing, arrows and dots in a strip below */\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}\n.ds-hero .ds-carousel {\n  border-left: var(--border-width) var(--border-style) var(--color-border);\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  min-width: 0;\n  scroll-snap-align: start;\n}\n.ds-carousel__art {\n  position: relative;\n  display: flex;\n  flex: 1;\n  align-items: center;\n  justify-content: center;\n  min-height: var(--size-stage);\n  padding: var(--space-5);\n  color: var(--color-text);\n  background: var(--color-fill-1);\n}\n.ds-carousel__slide--2 .ds-carousel__art {\n  background: var(--color-fill-3);\n}\n.ds-carousel__caption {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2) var(--space-4);\n  padding: var(--space-3) var(--space-5);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-carousel__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading-alt);\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-5);\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\n/* cover: a drawn zine or print, tilted like something pinned up */\n.ds-cover {\n  position: relative;\n  display: flex;\n  flex: none;\n  flex-direction: column;\n  justify-content: space-between;\n  width: var(--size-cover);\n  height: calc(var(--size-cover) * 1.36);\n  padding: var(--space-3);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-2));\n  box-shadow: var(--shadow-control);\n  transform: rotate(-4deg);\n}\n.ds-cover--right {\n  transform: rotate(3deg);\n}\n.ds-cover--large {\n  width: calc(var(--size-cover) * 1.5);\n  height: calc(var(--size-cover) * 2.04);\n}\n.ds-cover__title {\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-display);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n  overflow-wrap: break-word;\n}\n.ds-cover__art {\n  display: block;\n  width: 100%;\n  height: 46%;\n}\n.ds-cover__art svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-cover__foot {\n  font-family: var(--font-mono);\n  font-size: calc(var(--text-small) * 0.8);\n  line-height: 1.2;\n}\n\n/* tag: a price sticker, stuck on at an angle */\n.ds-tag {\n  display: inline-block;\n  padding: calc(var(--space-1) + var(--text-h3) * 0.25) var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: 1.2;\n  white-space: nowrap;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control-hover);\n  transform: rotate(6deg);\n  text-box: trim-both cap alphabetic;\n}\n.ds-tag--corner {\n  position: absolute;\n  top: var(--space-3);\n  right: var(--space-3);\n}\n\n/* stats: one filled strip of four figures, number beside label */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  margin: 0;\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-stat__cell {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: 0 var(--space-3);\n  min-width: 0;\n  padding: var(--space-3) var(--space-5);\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  order: -1;\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-text);\n}\n.ds-stat__label {\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n\n/* grid: the shelf. Product cards with a filled picture, a price sticker and a foot row */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-6) 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  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-grid__art {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: var(--size-art);\n  padding: var(--space-5);\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-grid__art svg {\n  display: block;\n  height: 100%;\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__body {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  gap: var(--space-1);\n  padding: var(--space-4);\n}\n.ds-grid__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  overflow-wrap: break-word;\n  color: var(--color-heading-alt);\n}\n.ds-grid__title .ds-link {\n  font-weight: inherit;\n}\n.ds-grid__text {\n  flex: 1;\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n.ds-grid__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-3) var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-price {\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: 1.2;\n  white-space: nowrap;\n}\n.ds-price--large {\n  font-size: var(--text-h1);\n  line-height: 1;\n}\n\n/* stage: the big picture of one item, with its other views as small squares */\n.ds-stage {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: calc(var(--size-stage) * 1.5);\n  padding: var(--space-6);\n  color: var(--color-text);\n  background: var(--color-fill-3);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-thumbs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-thumbs__item {\n  display: block;\n  width: var(--size-thumb);\n  height: var(--size-thumb);\n  background: var(--color-fill-1);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n}\n.ds-thumbs__item--2 {\n  background: var(--color-fill-2);\n}\n.ds-thumbs__item--3 {\n  background: var(--color-fill-4);\n}\n.ds-thumbs__item.is-current {\n  background: var(--color-fill-3);\n  box-shadow: var(--shadow-control-hover);\n}\n\n/* typography */\n.ds-prose {\n  max-width: 66ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  overflow-wrap: break-word;\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  margin: 0 0 var(--space-4);\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin: var(--space-6) 0 var(--space-3);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-2);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-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  white-space: nowrap;\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-1));\n}\n.ds-prose a {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n.ds-sheet {\n  padding: var(--space-6);\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-decoration-thickness: var(--space-nudge);\n  text-underline-offset: var(--space-1);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-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-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* buttons: flat fill, outline, hard shadow; a pressed button sinks straight down */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  white-space: nowrap;\n  cursor: pointer;\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n\n/* a block that moves down onto its shadow carries a strip above itself, so a pointer at its top edge stays on it */\n.ds-button {\n  position: relative;\n}\n.ds-button::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 100%;\n  height: calc(2 * var(--space-press));\n}\n.ds-button--secondary {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-size: var(--text-large);\n}\n.ds-button--small {\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-size: var(--text-small);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button--wide {\n  width: 100%;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  color: var(--color-button-hover-text);\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  transform: translateY(var(--space-nudge));\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: translateY(var(--space-press));\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n  transform: none;\n  cursor: not-allowed;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  padding: 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.87);\n  font-weight: var(--weight-bold);\n  line-height: 1.6;\n  white-space: nowrap;\n  vertical-align: middle;\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-badge--alt {\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n}\n.ds-badge--plain {\n  color: var(--color-text);\n  background: var(--color-surface);\n}\n.ds-badge--success {\n  color: var(--color-text);\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-text);\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-badge--tilt {\n  transform: rotate(-3deg);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* avatar: a person or maker, drawn as initials on a fill */\n.ds-avatar {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.87);\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.ds-avatar--4 {\n  background: var(--color-fill-1);\n}\n.ds-avatar--small {\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n}\n.ds-avatar--large {\n  width: calc(var(--size-avatar) * 1.6);\n  height: calc(var(--size-avatar) * 1.6);\n  font-size: var(--text-large);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-person {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-width: 0;\n}\n.ds-person__name {\n  display: block;\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-person__role {\n  display: block;\n  font-size: var(--text-small);\n  line-height: 1.3;\n  color: var(--color-text-muted);\n}\n\n/* progress: an 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  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\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--10 {\n  width: 10%;\n}\n.ds-progress__bar--25 {\n  width: 25%;\n}\n.ds-progress__bar--70 {\n  width: 70%;\n}\n.ds-progress__bar--85 {\n  width: 85%;\n}\n.ds-progress--row {\n  grid-template-columns: var(--space-8) minmax(0, 1fr) var(--space-6);\n  align-items: center;\n  gap: var(--space-3);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n\n/* switch: an on and off control drawn over a checkbox */\n.ds-switch {\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\n/* tooltip: 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}\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\n/* accordion: sections that open and close, one outlined box */\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-pill);\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/* form */\n.ds-form {\n  display: grid;\n  gap: var(--space-4);\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-form__field {\n  display: grid;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-form__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-form__control {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n  color: var(--color-input-text);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: min(var(--radius-control), calc(var(--size-control) / 2));\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-hover);\n}\n.ds-form__control:disabled,\n.ds-form__control.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n}\n.ds-form__control.is-invalid {\n  border-color: var(--color-danger);\n  box-shadow: 0 var(--space-press) 0 0 var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  color: var(--color-danger);\n}\n.ds-form__hint {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n}\n.ds-form__checkbox {\n  appearance: none;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: min(var(--radius-control), var(--space-1));\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background: var(--color-text);\n  box-shadow: inset 0 0 0 var(--space-nudge) var(--color-input);\n}\n.ds-form__checkbox:focus-visible,\n.ds-form__checkbox.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\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-left-width: var(--border-width-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control);\n}\n.ds-notice__title {\n  flex: none;\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  margin: 0;\n}\n.ds-notice--error {\n  color: var(--color-text);\n  background: var(--color-danger-surface);\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control-small);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-pagination__link.is-current {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \">\";\n  margin-right: var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-breadcrumb__item.is-current {\n  font-weight: var(--weight-bold);\n}\n\n/* page header: the head of an inner page. Title and lead on the left, actions on the right, over a thick rule */\n.ds-page-header {\n  display: grid;\n  gap: var(--space-3);\n  padding-bottom: var(--space-5);\n  color: var(--color-text);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\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-4) var(--space-6);\n}\n.ds-page-header__main {\n  min-width: 0;\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  overflow-wrap: break-word;\n  color: var(--color-heading);\n}\n.ds-page-header__lead {\n  max-width: var(--size-measure);\n  margin: var(--space-2) 0 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n}\n\n/* empty state */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  padding: var(--space-6) var(--space-4);\n  text-align: center;\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  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-text);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n\n/* table: one outlined, shadowed box; a filled head, 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-heading-alt);\n  background: var(--color-surface-strong);\n}\n.ds-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.ds-table tbody tr.is-current td {\n  background: var(--color-surface-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-table tfoot td {\n  font-weight: var(--weight-bold);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: 0;\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n}\n\n/* list: one outlined box of rows divided by rules, each led by an avatar */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-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__main {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-list__title .ds-link {\n  font-weight: inherit;\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n.ds-list__meta {\n  flex: none;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* panel: outlined box with a filled title strip */\n.ds-panel {\n  min-width: 0;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-panel__title {\n  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  letter-spacing: var(--heading-tracking);\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  display: grid;\n  gap: var(--space-4);\n  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0;\n}\n.ds-panel--plain .ds-panel__title {\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n\n/* tabs: a row of free-standing chips on a rule; the current one is filled */\n.ds-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-tabs__tab {\n  display: 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  white-space: nowrap;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n}\n.ds-tabs__tab.is-current {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control-hover);\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: the aisle list beside a shelf, departments with their counts */\n.ds-sidebar {\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-sidebar__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  letter-spacing: var(--heading-tracking);\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-sidebar__list {\n  margin: 0;\n  padding: var(--space-1) var(--space-4);\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}\n.ds-sidebar__item + .ds-sidebar__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* dialog: an outlined box with a title strip, on a filled backdrop block */\n.ds-overlay {\n  padding: var(--space-7) var(--space-5);\n  background: var(--color-overlay);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n}\n.ds-dialog {\n  max-width: var(--size-dialog);\n  margin: 0 auto;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-dialog__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading-alt);\n}\n.ds-dialog__close {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  cursor: pointer;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-dialog__body {\n  padding: var(--space-5) var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  padding: var(--space-4);\n  color: var(--color-text);\n  background: var(--color-canvas);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* footer: one inverted block. The brand line and three columns of links over a legal line */\n.ds-footer {\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-footer__inner {\n  display: grid;\n  grid-template-columns: minmax(0, 2fr) repeat(3, minmax(0, 1fr));\n  gap: var(--space-5) var(--space-6);\n  max-width: calc(var(--size-content) + 2 * var(--space-gutter));\n  margin: 0 auto;\n  padding: var(--space-7) var(--space-gutter) var(--space-5);\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n.ds-footer__brand {\n  margin: 0 0 var(--space-2);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n}\n.ds-footer__text {\n  max-width: 40ch;\n  margin: 0;\n}\n.ds-footer__title {\n  margin: 0 0 var(--space-2);\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-footer__list {\n  display: grid;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  font-weight: var(--weight-ui);\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration);\n}\n.ds-footer__legal {\n  grid-column: 1 / -1;\n  margin: 0;\n  padding-top: var(--space-4);\n  border-top: var(--border-width) var(--border-style) currentColor;\n}\n\n/* nav fold: on a phone the bar's links fold into a menu behind one button */\n.ds-nav__fold {\n  display: none;\n}\n.ds-menu__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-menu__link--view[href=\"#home\"],\n.ds-page:has(#home:target) .ds-menu__link--view[href=\"#home\"],\n.ds-page:has(#shelf:target) .ds-menu__link--view[href=\"#shelf\"],\n.ds-page:has(#item:target) .ds-menu__link--view[href=\"#item\"],\n.ds-page:has(#basket:target) .ds-menu__link--view[href=\"#basket\"],\n.ds-page:has(#help:target) .ds-menu__link--view[href=\"#help\"] {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border-left: var(--space-2) var(--border-style) var(--color-border);\n}\n\n@media (max-width: 1000px) {\n  .ds-hero,\n  .ds-split,\n  .ds-split--aisle,\n  .ds-split--even {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-hero .ds-carousel {\n    border-left: 0;\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-grid,\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-stat__cell:nth-child(3) {\n    border-left: 0;\n  }\n  .ds-stat__cell:nth-child(n + 3) {\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__search {\n    order: 3;\n    flex-basis: 100%;\n    max-width: none;\n  }\n  .ds-footer__inner {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n  .ds-footer__about {\n    grid-column: 1 / -1;\n  }\n  /* the strip's drop-down may stand at the end of the row or, wrapped, at its start:\n     it hangs from the strip's right edge so it stays in the window either way */\n  .ds-nav__strip-inner {\n    position: relative;\n  }\n  .ds-nav__links .ds-menu {\n    position: static;\n  }\n  .ds-nav__links .ds-menu__list {\n    top: 100%;\n    left: auto;\n    right: var(--space-gutter);\n  }\n}\n\n@media (max-width: 600px) {\n  .ds-nav__bar,\n  .ds-nav__strip-inner {\n    padding-left: var(--space-4);\n    padding-right: var(--space-4);\n  }\n  .ds-nav__bar {\n    gap: var(--space-3);\n  }\n  .ds-brand__name {\n    font-size: var(--text-h3);\n  }\n  .ds-nav__account-name,\n  .ds-nav__note {\n    display: none;\n  }\n  .ds-nav__link {\n    padding: 0 var(--space-2);\n    font-size: var(--text-small);\n  }\n  .ds-main {\n    padding: var(--space-5) var(--space-4) var(--space-7);\n  }\n  .ds-column {\n    gap: var(--space-6);\n  }\n  .ds-hero__text {\n    padding: var(--space-5) var(--space-4);\n  }\n  .ds-hero__title {\n    font-size: calc(var(--text-h1) * 0.8);\n  }\n  .ds-page-header__title,\n  .ds-prose h1 {\n    font-size: calc(var(--text-h1) * 0.72);\n  }\n  .ds-label,\n  .ds-prose h2 {\n    font-size: calc(var(--text-h2) * 0.8);\n  }\n  .ds-hero__lead,\n  .ds-page-header__lead {\n    font-size: var(--text-base);\n  }\n  .ds-hero__actions,\n  .ds-hero__actions .ds-button,\n  .ds-page-header__actions,\n  .ds-page-header__actions .ds-button {\n    width: 100%;\n  }\n  .ds-carousel__art {\n    min-height: calc(var(--size-stage) * 0.8);\n  }\n  .ds-stage {\n    min-height: var(--size-stage);\n    padding: var(--space-4);\n  }\n  .ds-cover--large {\n    width: var(--size-cover);\n    height: calc(var(--size-cover) * 1.36);\n  }\n  .ds-grid,\n  .ds-form__row {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-stat__cell {\n    padding: var(--space-3);\n  }\n  .ds-stat__value {\n    font-size: var(--text-h3);\n  }\n  .ds-sheet {\n    padding: var(--space-4);\n  }\n  .ds-tabs__tab {\n    padding: 0 var(--space-3);\n    font-size: var(--text-small);\n  }\n  .ds-table {\n    font-size: var(--text-small);\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-2);\n  }\n  .ds-table .ds-table__extra {\n    display: none;\n  }\n  .ds-notice {\n    flex-direction: column;\n    gap: var(--space-1);\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n    gap: var(--space-2) var(--space-3);\n  }\n  .ds-list__meta {\n    flex-basis: 100%;\n  }\n  .ds-overlay {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-dialog__actions .ds-button {\n    flex: 1;\n  }\n  .ds-footer__inner {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    padding: var(--space-6) var(--space-4) var(--space-5);\n  }\n}\n@media (max-width: 600px) {\n  .ds-nav {\n    position: relative;\n  }\n  .ds-nav .ds-nav__links {\n    display: none;\n  }\n  .ds-nav__fold {\n    display: block;\n    position: static;\n    margin-left: auto;\n  }\n  .ds-nav__fold .ds-menu__list {\n    top: 100%;\n    left: var(--space-3);\n    right: var(--space-3);\n    width: auto;\n    max-width: none;\n  }\n  .ds-nav__strip {\n    display: none;\n  }\n  .ds-nav__fold {\n    order: 3;\n    margin-left: 0;\n  }\n  .ds-nav__search {\n    order: 4;\n    flex: 1 1 0;\n    min-width: 0;\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 shop specimen, small press shelves</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <div class=\"ds-nav__bar\">\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<details class=\"ds-menu ds-nav__fold\" data-component=\"menu\">\n<summary class=\"ds-button ds-button--secondary ds-button--small ds-menu__trigger\">Menu</summary>\n<ul class=\"ds-menu__list\">\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#home\">Front window</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#shelf\">Shelves</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#item\">Pick of the week</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#basket\">Basket</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link ds-menu__link--view\" href=\"#help\">Help</a></li>\n<li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#shelf\">Departments</a></li>\n</ul>\n</details>\n    <form class=\"ds-nav__search\" role=\"search\">\n      <input class=\"ds-nav__field\" type=\"search\" placeholder=\"Search zines, prints, makers\" aria-label=\"Search the shop\">\n      <button class=\"ds-nav__go\" type=\"button\">Search</button>\n    </form>\n    <div class=\"ds-nav__actions\">\n      <a class=\"ds-nav__account\" href=\"#help\"><span class=\"ds-avatar ds-avatar--small ds-avatar--3\">MO</span><span class=\"ds-nav__account-name\">Mira</span></a>\n      <a class=\"ds-button ds-button--small\" href=\"#basket\">Basket <span class=\"ds-badge ds-badge--plain\">3</span></a>\n    </div>\n  </div>\n  <nav class=\"ds-nav__strip\" aria-label=\"Main\">\n    <div class=\"ds-nav__strip-inner\">\n      <ul class=\"ds-nav__links\">\n        <li><a class=\"ds-nav__link\" href=\"#home\">Front window</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#shelf\">Shelves</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#item\">Pick of the week</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#basket\">Basket</a></li>\n        <li><a class=\"ds-nav__link\" href=\"#help\">Help</a></li>\n        <li>\n          <details class=\"ds-menu\" data-component=\"menu\">\n            <summary class=\"ds-nav__link ds-menu__trigger\">Departments</summary>\n            <ul class=\"ds-menu__list\">\n              <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#shelf\">Zines <span class=\"ds-badge ds-badge--plain\">212</span></a></li>\n              <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#shelf\">Riso prints <span class=\"ds-badge ds-badge--plain\">96</span></a></li>\n              <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#shelf\">Sticker sheets <span class=\"ds-badge ds-badge--plain\">58</span></a></li>\n              <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#shelf\">Tote bags <span class=\"ds-badge ds-badge--plain\">14</span></a></li>\n            </ul>\n          </details>\n        </li>\n      </ul>\n      <p class=\"ds-nav__note\">Free postage on orders over 40</p>\n    </div>\n  </nav>\n</header>\n\n<main class=\"ds-main\">\n<section class=\"ds-view ds-view--home\" id=\"home\">\n<div class=\"ds-column\">\n  <section class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-hero__text\">\n      <span class=\"ds-badge ds-badge--alt ds-badge--tilt\">New shelf every Friday</span>\n      <h1 class=\"ds-hero__title\">Small press, <span class=\"ds-hero__mark\">loud paper.</span></h1>\n      <p class=\"ds-hero__lead\">chronoskin is a shop for zines, riso prints and sticker sheets, sold by the people who stapled them.</p>\n      <div class=\"ds-hero__actions\">\n        <a class=\"ds-button ds-button--large\" href=\"#shelf\">Browse the shelves</a>\n        <a class=\"ds-button ds-button--large ds-button--secondary\" href=\"#help\">Sell your own</a>\n      </div>\n    </div>\n    <div class=\"ds-carousel\" data-component=\"carousel\" aria-label=\"Picks of the week\">\n      <ul class=\"ds-carousel__track\">\n        <li class=\"ds-carousel__slide\">\n          <div class=\"ds-carousel__art\">\n            <span class=\"ds-cover\">\n              <span class=\"ds-cover__title\">Night bus atlas</span>\n              <span class=\"ds-cover__art\"><svg viewBox=\"0 0 80 40\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M2 30h76M8 30V12h52l12 8v10\"/><circle cx=\"22\" cy=\"32\" r=\"5\"/><circle cx=\"58\" cy=\"32\" r=\"5\"/><path d=\"M18 12v10h36V12\"/></svg></span>\n              <span class=\"ds-cover__foot\">No. 4 / 32 pages</span>\n            </span>\n            <span class=\"ds-cover ds-cover--right\">\n              <span class=\"ds-cover__title\">Soft machines</span>\n              <span class=\"ds-cover__art\"><svg viewBox=\"0 0 80 40\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><circle cx=\"20\" cy=\"20\" r=\"14\"/><path d=\"M44 34L58 6l14 28z\"/><path d=\"M20 6v28M6 20h28\"/></svg></span>\n              <span class=\"ds-cover__foot\">A3 riso / 2 inks</span>\n            </span>\n            <span class=\"ds-tag ds-tag--corner\">from 6</span>\n          </div>\n          <div class=\"ds-carousel__caption\">\n            <h2 class=\"ds-carousel__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Night bus atlas, number 4</a></h2>\n            <a class=\"ds-button ds-button--small ds-button--secondary\" href=\"#item\">Look inside</a>\n          </div>\n        </li>\n        <li class=\"ds-carousel__slide ds-carousel__slide--2\">\n          <div class=\"ds-carousel__art\">\n            <span class=\"ds-cover\">\n              <span class=\"ds-cover__title\">Allotment year</span>\n              <span class=\"ds-cover__art\"><svg viewBox=\"0 0 80 40\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M4 36h72M16 36V18M16 18c-8 0-10-8-10-12 8 0 10 6 10 12zM40 36V10M64 36V20\"/></svg></span>\n              <span class=\"ds-cover__foot\">Calendar / 12 prints</span>\n            </span>\n          </div>\n          <div class=\"ds-carousel__caption\">\n            <h2 class=\"ds-carousel__title\">Allotment year</h2>\n            <a class=\"ds-button ds-button--small ds-button--secondary\" href=\"#shelf\">See it</a>\n          </div>\n        </li>\n      </ul>\n      <div class=\"ds-carousel__controls\">\n        <button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Previous pick\">&larr;</button>\n        <ol class=\"ds-carousel__dots\" aria-label=\"Pick 1 of 3\">\n          <li class=\"ds-carousel__dot is-current\"></li>\n          <li class=\"ds-carousel__dot\"></li>\n          <li class=\"ds-carousel__dot\"></li>\n        </ol>\n        <button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Next pick\">&rarr;</button>\n      </div>\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\">titles on the shelves</dt>\n      <dd class=\"ds-stat__value\">380</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">makers selling</dt>\n      <dd class=\"ds-stat__value\">64</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">of each sale goes to the maker</dt>\n      <dd class=\"ds-stat__value\">85%</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">days to pack an order</dt>\n      <dd class=\"ds-stat__value\">2</dd>\n    </div>\n  </dl>\n\n  <div class=\"ds-stack\">\n    <div class=\"ds-row\">\n      <h2 class=\"ds-label\">Fresh off the stapler</h2>\n      <a class=\"ds-link\" href=\"#shelf\">All 380 titles</a>\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\">\n          <svg viewBox=\"0 0 64 64\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M14 8h30l8 8v40H14z\"/><path d=\"M44 8v8h8M22 26h22M22 34h22M22 42h14\"/></svg>\n          <span class=\"ds-tag ds-tag--corner\">6</span>\n        </div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Night bus atlas no. 4</a></h3>\n          <p class=\"ds-grid__text\">Thirty-two pages of routes drawn from the top deck.</p>\n        </div>\n        <div class=\"ds-grid__foot\"><span class=\"ds-badge ds-badge--success\">In stock</span><a class=\"ds-button ds-button--small\" href=\"#basket\">Add</a></div>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--2\">\n        <div class=\"ds-grid__art\">\n          <svg viewBox=\"0 0 64 64\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M10 6h44v52H10z\"/><circle cx=\"26\" cy=\"26\" r=\"10\"/><path d=\"M30 50l10-22 10 22z\"/></svg>\n          <span class=\"ds-tag ds-tag--corner\">18</span>\n        </div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Soft machines, A3</a></h3>\n          <p class=\"ds-grid__text\">Two-ink riso print on heavy sugar paper, run of 150.</p>\n        </div>\n        <div class=\"ds-grid__foot\"><span class=\"ds-badge ds-badge--warning\">9 left</span><a class=\"ds-button ds-button--small\" href=\"#basket\">Add</a></div>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--3\">\n        <div class=\"ds-grid__art\">\n          <svg viewBox=\"0 0 64 64\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M8 8h48v48H8z\"/><circle cx=\"22\" cy=\"22\" r=\"7\"/><circle cx=\"42\" cy=\"22\" r=\"7\"/><circle cx=\"22\" cy=\"42\" r=\"7\"/><path d=\"M36 36h12v12H36z\"/></svg>\n          <span class=\"ds-tag ds-tag--corner\">4</span>\n        </div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Weather stickers</a></h3>\n          <p class=\"ds-grid__text\">One sheet, fourteen moods of sky, cut by hand.</p>\n        </div>\n        <div class=\"ds-grid__foot\"><span class=\"ds-badge ds-badge--success\">In stock</span><a class=\"ds-button ds-button--small\" href=\"#basket\">Add</a></div>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--4\">\n        <div class=\"ds-grid__art\">\n          <svg viewBox=\"0 0 64 64\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M12 22h40l-4 36H16z\"/><path d=\"M22 22v-6a10 10 0 0 1 20 0v6\"/><path d=\"M24 36h16\"/></svg>\n          <span class=\"ds-tag ds-tag--corner\">12</span>\n        </div>\n        <div class=\"ds-grid__body\">\n          <h3 class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Reading room tote</a></h3>\n          <p class=\"ds-grid__text\">Screen printed canvas that holds nine zines and a loaf.</p>\n        </div>\n        <div class=\"ds-grid__foot\"><span class=\"ds-badge ds-badge--danger\">Sold out</span><a class=\"ds-button ds-button--small is-disabled\" aria-disabled=\"true\">Add</a></div>\n      </li>\n    </ul>\n  </div>\n\n  <div class=\"ds-split\">\n    <div class=\"ds-stack\">\n      <h2 class=\"ds-label\">Just put out</h2>\n      <ul class=\"ds-list\" data-component=\"list\">\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar\" data-component=\"avatar\">TB</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Twelve doors on Mill Lane</a></h3>\n            <p class=\"ds-list__text\">A fold-out zine by Tove Brandt, one door a page.</p>\n          </div>\n          <span class=\"ds-list__meta\">Zine, today</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--2\">OA</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Tram wires, three colours</a></h3>\n            <p class=\"ds-list__text\">Omar Adeyemi's A2 print, signed and numbered.</p>\n          </div>\n          <span class=\"ds-list__meta\">Print, yesterday</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--3\">LK</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">How to fix a zip</a></h3>\n            <p class=\"ds-list__text\">Lena Kowal's mending manual, second printing.</p>\n          </div>\n          <span class=\"ds-list__meta\">Zine, 2 days ago</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--4\">RS</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#item\">Pigeon post stickers</a></h3>\n            <p class=\"ds-list__text\">Twenty birds on one sheet by Rui Sato.</p>\n          </div>\n          <span class=\"ds-list__meta\">Stickers, 4 days ago</span>\n        </li>\n      </ul>\n    </div>\n    <section class=\"ds-panel\" data-component=\"panel\">\n      <h2 class=\"ds-panel__title\">Maker of the week</h2>\n      <div class=\"ds-panel__body\">\n        <div class=\"ds-person\">\n          <span class=\"ds-avatar ds-avatar--large\">TB</span>\n          <span><span class=\"ds-person__name\">Tove Brandt</span><span class=\"ds-person__role\">11 titles, selling since 2022</span></span>\n        </div>\n        <p>Tove draws streets one building at a time and prints them in a shed on a machine older than she is.</p>\n        <div class=\"ds-progress\" data-component=\"progress\">\n          <p class=\"ds-progress__label\"><span>Print run of the new zine</span><span>170 of 200 sold</span></p>\n          <span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--85\"></span></span>\n        </div>\n        <a class=\"ds-button ds-button--secondary ds-button--wide\" href=\"#shelf\">See her shelf</a>\n      </div>\n    </section>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"shelf\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front window</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#shelf\">Shelves</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">Zines</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Zines</h1>\n        <p class=\"ds-page-header__lead\">212 titles, stapled, folded or sewn. Sorted by newest.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#help\">Sell your own</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-split ds-split--aisle\">\n    <div class=\"ds-stack\">\n      <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n        <h2 class=\"ds-sidebar__title\">Departments</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#shelf\">Zines</a><span class=\"ds-badge\">212</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#shelf\">Riso prints</a><span class=\"ds-badge ds-badge--plain\">96</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#shelf\">Sticker sheets</a><span class=\"ds-badge ds-badge--plain\">58</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#shelf\">Tote bags</a><span class=\"ds-badge ds-badge--plain\">14</span></li>\n        </ul>\n      </aside>\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">Narrow it down</h2>\n        <div class=\"ds-panel__body\">\n          <label class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>In stock only</span></label>\n          <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span>Signed copies</span></label>\n          <div class=\"ds-row\">\n            <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>Under 10</span></label>\n            <span class=\"ds-tooltip\" data-component=\"tooltip\"><button class=\"ds-tooltip__trigger\" type=\"button\" aria-describedby=\"tip-price\">?</button><span class=\"ds-tooltip__tip\" id=\"tip-price\" role=\"tooltip\">Prices include tax. Postage is added in the basket.</span></span>\n          </div>\n        </div>\n      </section>\n    </div>\n\n    <div class=\"ds-stack\">\n      <div class=\"ds-row\">\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li><a class=\"ds-tabs__tab is-current\" href=\"#shelf\">All <span class=\"ds-badge ds-badge--plain\">212</span></a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#shelf\">Comics</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#shelf\">Manuals</a></li>\n          <li><a class=\"ds-tabs__tab\" href=\"#shelf\">Poetry</a></li>\n        </ul>\n        <span class=\"ds-note\">Showing 1 to 6 of 212</span>\n      </div>\n      <table class=\"ds-table\" data-component=\"table\">\n        <thead>\n          <tr><th>Title</th><th class=\"ds-table__extra\">Maker</th><th class=\"ds-table__extra\">Pages</th><th>Stock</th><th class=\"ds-table__num\">Price</th></tr>\n        </thead>\n        <tbody>\n          <tr class=\"is-current\"><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Night bus atlas no. 4</a></td><td class=\"ds-table__extra\">Tove Brandt</td><td class=\"ds-table__extra\">32</td><td><span class=\"ds-badge ds-badge--success\">In stock</span></td><td class=\"ds-table__num\">6.00</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">How to fix a zip</a></td><td class=\"ds-table__extra\">Lena Kowal</td><td class=\"ds-table__extra\">16</td><td><span class=\"ds-badge ds-badge--success\">In stock</span></td><td class=\"ds-table__num\">4.50</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Twelve doors on Mill Lane</a></td><td class=\"ds-table__extra\">Tove Brandt</td><td class=\"ds-table__extra\">12</td><td><span class=\"ds-badge ds-badge--warning\">3 left</span></td><td class=\"ds-table__num\">7.00</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Bread diary, winter</a></td><td class=\"ds-table__extra\">Ana Reis</td><td class=\"ds-table__extra\">24</td><td><span class=\"ds-badge ds-badge--success\">In stock</span></td><td class=\"ds-table__num\">5.00</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Low tide letters</a></td><td class=\"ds-table__extra\">Rui Sato</td><td class=\"ds-table__extra\">40</td><td><span class=\"ds-badge ds-badge--danger\">Sold out</span></td><td class=\"ds-table__num\">9.00</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Small engines</a></td><td class=\"ds-table__extra\">Omar Adeyemi</td><td class=\"ds-table__extra\">20</td><td><span class=\"ds-badge ds-badge--warning\">5 left</span></td><td class=\"ds-table__num\">6.50</td></tr>\n        </tbody>\n      </table>\n      <div class=\"ds-row\">\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><span class=\"ds-pagination__link is-disabled\">Previous</span></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#shelf\" aria-current=\"page\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#shelf\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#shelf\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#shelf\">Next</a></li>\n        </ul>\n        <div class=\"ds-badges\" data-component=\"badge\">\n          <span class=\"ds-badge\">New</span>\n          <span class=\"ds-badge ds-badge--success\">In stock</span>\n          <span class=\"ds-badge ds-badge--warning\">Few left</span>\n          <span class=\"ds-badge ds-badge--danger\">Sold out</span>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"item\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front window</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#shelf\">Zines</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">Night bus atlas no. 4</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Night bus atlas no. 4</h1>\n        <p class=\"ds-page-header__lead\">Thirty-two pages of routes drawn from the top deck, by Tove Brandt.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#shelf\">Back to the shelf</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-split ds-split--even\">\n    <div class=\"ds-stack\">\n      <div class=\"ds-stage\">\n        <span class=\"ds-cover ds-cover--large\">\n          <span class=\"ds-cover__title\">Night bus atlas</span>\n          <span class=\"ds-cover__art\"><svg viewBox=\"0 0 80 40\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path d=\"M2 30h76M8 30V12h52l12 8v10\"/><circle cx=\"22\" cy=\"32\" r=\"5\"/><circle cx=\"58\" cy=\"32\" r=\"5\"/><path d=\"M18 12v10h36V12\"/></svg></span>\n          <span class=\"ds-cover__foot\">No. 4 / 32 pages</span>\n        </span>\n        <span class=\"ds-tag ds-tag--corner\">6.00</span>\n      </div>\n      <ul class=\"ds-thumbs\" aria-label=\"More pictures\">\n        <li class=\"ds-thumbs__item is-current\"></li>\n        <li class=\"ds-thumbs__item\"></li>\n        <li class=\"ds-thumbs__item ds-thumbs__item--2\"></li>\n        <li class=\"ds-thumbs__item ds-thumbs__item--3\"></li>\n      </ul>\n    </div>\n\n    <div class=\"ds-stack\">\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Take one home</h2>\n        <div class=\"ds-panel__body\">\n          <div class=\"ds-row\">\n            <span class=\"ds-price ds-price--large\">6.00</span>\n            <div class=\"ds-badges\"><span class=\"ds-badge ds-badge--success\">In stock</span><span class=\"ds-badge ds-badge--alt\">Signed</span></div>\n          </div>\n          <div class=\"ds-progress\">\n            <p class=\"ds-progress__label\"><span>Second printing</span><span>140 of 200 sold</span></p>\n            <span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--70\"></span></span>\n          </div>\n          <div class=\"ds-buttons\">\n            <a class=\"ds-button ds-button--large\" href=\"#basket\">Add to basket</a>\n            <a class=\"ds-button ds-button--large ds-button--secondary\" href=\"#basket\">Save for later</a>\n          </div>\n          <div class=\"ds-person\">\n            <span class=\"ds-avatar\">TB</span>\n            <span><span class=\"ds-person__name\">Tove Brandt</span><span class=\"ds-person__role\">Posts within 2 days from her shed</span></span>\n          </div>\n        </div>\n      </section>\n      <div class=\"ds-accordion\" data-component=\"accordion\">\n        <details class=\"ds-accordion__item\" open>\n          <summary class=\"ds-accordion__head\">What you get</summary>\n          <div class=\"ds-accordion__body\"><p>An A5 zine of 32 pages, two-colour riso on recycled stock, stapled twice, with a fold-out map of the last route in the back.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Postage</summary>\n          <div class=\"ds-accordion__body\"><p>Sent flat in a board envelope. Free over 40.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Returns</summary>\n          <div class=\"ds-accordion__body\"><p>Send it back within 14 days if it arrives bent.</p></div>\n        </details>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"ds-split ds-split--aisle\">\n    <section class=\"ds-panel ds-panel--plain\">\n      <h2 class=\"ds-panel__title\">38 readers say</h2>\n      <div class=\"ds-panel__body\">\n        <div class=\"ds-progress ds-progress--row\"><span>Loved it</span><span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--70\"></span></span><span>27</span></div>\n        <div class=\"ds-progress ds-progress--row\"><span>Liked it</span><span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--25\"></span></span><span>9</span></div>\n        <div class=\"ds-progress ds-progress--row\"><span>Not for me</span><span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--10\"></span></span><span>2</span></div>\n      </div>\n    </section>\n    <ul class=\"ds-list\">\n      <li class=\"ds-list__item\">\n        <span class=\"ds-avatar ds-avatar--2\">IN</span>\n        <div class=\"ds-list__main\">\n          <h3 class=\"ds-list__title\">Read it on the 43 and missed my stop</h3>\n          <p class=\"ds-list__text\">The fold-out at the back is worth the price alone.</p>\n        </div>\n        <span class=\"ds-list__meta\">Ilse N., 3 days ago</span>\n      </li>\n      <li class=\"ds-list__item\">\n        <span class=\"ds-avatar ds-avatar--3\">DP</span>\n        <div class=\"ds-list__main\">\n          <h3 class=\"ds-list__title\">Came flat, smelled of ink</h3>\n          <p class=\"ds-list__text\">Bought two more for people who also cannot sleep.</p>\n        </div>\n        <span class=\"ds-list__meta\">Dario P., last week</span>\n      </li>\n      <li class=\"ds-list__item\">\n        <span class=\"ds-avatar ds-avatar--4\">SW</span>\n        <div class=\"ds-list__main\">\n          <h3 class=\"ds-list__title\">Number 3 was better, still good</h3>\n          <p class=\"ds-list__text\">Fewer routes this time, more drawings of drivers.</p>\n        </div>\n        <span class=\"ds-list__meta\">Sam W., 2 weeks ago</span>\n      </li>\n    </ul>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"basket\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front window</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">Basket</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Your basket</h1>\n        <p class=\"ds-page-header__lead\">Three things from two makers. Packed by Friday.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#shelf\">Keep browsing</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-stack\" data-component=\"notice\">\n    <div class=\"ds-notice\" role=\"status\"><strong class=\"ds-notice__title\">Nearly there.</strong><p class=\"ds-notice__text\">Add 9.50 more and the postage is on us.</p></div>\n    <div class=\"ds-notice ds-notice--error\" role=\"alert\"><strong class=\"ds-notice__title\">One thing changed.</strong><p class=\"ds-notice__text\">Low tide letters sold out while it sat here, so we took it off the list.</p></div>\n  </div>\n\n  <div class=\"ds-split ds-split--even\">\n    <div class=\"ds-stack\">\n      <table class=\"ds-table\">\n        <thead>\n          <tr><th>Item</th><th class=\"ds-table__extra\">Maker</th><th class=\"ds-table__num\">Qty</th><th class=\"ds-table__num\">Price</th></tr>\n        </thead>\n        <tbody>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Night bus atlas no. 4</a></td><td class=\"ds-table__extra\">Tove Brandt</td><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">6.00</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Soft machines, A3</a></td><td class=\"ds-table__extra\">Omar Adeyemi</td><td class=\"ds-table__num\">1</td><td class=\"ds-table__num\">18.00</td></tr>\n          <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#item\">Weather stickers</a></td><td class=\"ds-table__extra\">Tove Brandt</td><td class=\"ds-table__num\">2</td><td class=\"ds-table__num\">8.00</td></tr>\n        </tbody>\n        <tfoot>\n          <tr><td>Postage</td><td class=\"ds-table__extra\"></td><td class=\"ds-table__num\"></td><td class=\"ds-table__num\">3.50</td></tr>\n          <tr><td>To pay</td><td class=\"ds-table__extra\"></td><td class=\"ds-table__num\">4</td><td class=\"ds-table__num\">35.50</td></tr>\n        </tfoot>\n      </table>\n      <div class=\"ds-progress\">\n        <p class=\"ds-progress__label\"><span>Towards free postage</span><span>30.50 of 40</span></p>\n        <span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--70\"></span></span>\n      </div>\n      <div class=\"ds-buttons\" data-component=\"buttons\">\n        <a class=\"ds-button\" href=\"#basket\">Pay 35.50</a>\n        <a class=\"ds-button ds-button--secondary\" href=\"#shelf\">Add more</a>\n        <a class=\"ds-button ds-button--danger\" href=\"#basket\">Empty basket</a>\n        <button class=\"ds-button is-disabled\" type=\"button\" disabled>Use a voucher</button>\n      </div>\n      <div class=\"ds-overlay\">\n        <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n          <div class=\"ds-dialog__bar\">\n            <h2 class=\"ds-dialog__title\" id=\"dlg-title\">Empty the basket?</h2>\n            <a class=\"ds-dialog__close\" href=\"#basket\" aria-label=\"Close\">&times;</a>\n          </div>\n          <div class=\"ds-dialog__body\"><p>All three things go back on the shelves. The signed print may be gone when you return.</p></div>\n          <div class=\"ds-dialog__actions\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#basket\">Keep them</a>\n            <a class=\"ds-button ds-button--danger\" href=\"#shelf\">Empty it</a>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"ds-stack\">\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Where is it going?</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\">Name on the envelope</label>\n              <input class=\"ds-form__control\" id=\"f-name\" type=\"text\" value=\"Mira Okafor\">\n            </div>\n            <div class=\"ds-form__row\">\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-post\">Postcode</label>\n                <input class=\"ds-form__control is-invalid\" id=\"f-post\" type=\"text\" value=\"12\" aria-invalid=\"true\" aria-describedby=\"f-post-err\">\n                <p class=\"ds-form__error\" id=\"f-post-err\">That postcode is too short.</p>\n              </div>\n              <div class=\"ds-form__field\">\n                <label class=\"ds-form__label\" for=\"f-ship\">Postage</label>\n                <select class=\"ds-form__control\" id=\"f-ship\">\n                  <option>Flat envelope, 3.50</option>\n                  <option>Tracked tube, 6.00</option>\n                </select>\n              </div>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-note\">Note for the maker</label>\n              <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-note\">Please sign the atlas to Ben.</textarea>\n              <p class=\"ds-form__hint\">Makers read every note before they pack.</p>\n            </div>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Tell me when Tove prints something new</label>\n          </form>\n        </div>\n      </section>\n      <div class=\"ds-empty\" data-component=\"empty\">\n        <h2 class=\"ds-empty__title\">Nothing saved for later</h2>\n        <p class=\"ds-empty__text\">Things you set aside wait here until they sell out.</p>\n        <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#shelf\">Find something</a>\n      </div>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"help\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Front window</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#help\">Help</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">Selling</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Help for makers</h1>\n        <p class=\"ds-page-header__lead\">How a title gets from your stapler onto a shelf.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#shelf\">Open a shelf</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-split\">\n    <article class=\"ds-sheet\">\n      <div class=\"ds-prose\" data-component=\"typography\">\n        <h1>Selling on chronoskin</h1>\n        <p>Anyone who makes printed things in small runs can open a shelf. You set the price, we list it, and <strong>85% of every sale</strong> goes straight to you.</p>\n        <h2>Before you list</h2>\n        <p>Photograph the cover flat and in daylight. Give each title a short code such as <code>NBA-04</code> so that orders are easy to pick.</p>\n        <ul>\n          <li>Runs of 20 to 500 copies</li>\n          <li>Printed, stapled, sewn or folded by you or a local press</li>\n          <li>Nothing that is only a download</li>\n        </ul>\n        <h3>When an order comes in</h3>\n        <p>You get a note with the address and any message. Pack it within two working days and mark it sent. See <a href=\"#basket\">how postage is worked out</a>.</p>\n      </div>\n      <ul class=\"ds-links\" data-component=\"links\">\n        <li><a class=\"ds-link\" href=\"#help\">Pricing a first zine</a></li>\n        <li><a class=\"ds-link is-visited\" href=\"#help\">Packing flat</a></li>\n        <li><a class=\"ds-link is-hover\" href=\"#help\">Printing a second run</a></li>\n        <li><a class=\"ds-link is-active\" href=\"#shelf\">Open a shelf</a></li>\n      </ul>\n    </article>\n    <div class=\"ds-stack\">\n      <h2 class=\"ds-label ds-label--small\">Asked most</h2>\n      <div class=\"ds-accordion\">\n        <details class=\"ds-accordion__item\" open>\n          <summary class=\"ds-accordion__head\">When do I get paid?</summary>\n          <div class=\"ds-accordion__body\"><p>Every Monday, for everything marked sent the week before.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Can I sell seconds?</summary>\n          <div class=\"ds-accordion__body\"><p>Yes, marked as seconds and priced lower.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Who pays for postage?</summary>\n          <div class=\"ds-accordion__body\"><p>The reader does, unless the order is over 40.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">What if a parcel goes missing?</summary>\n          <div class=\"ds-accordion__body\"><p>We refund the reader and you keep your share.</p></div>\n        </details>\n      </div>\n      <aside class=\"ds-sidebar\">\n        <h2 class=\"ds-sidebar__title\">More help</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#help\">Buying</a><span class=\"ds-badge ds-badge--plain\">8</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#help\">Selling</a><span class=\"ds-badge\">12</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#help\">Postage</a><span class=\"ds-badge ds-badge--plain\">5</span></li>\n        </ul>\n      </aside>\n    </div>\n  </div>\n</div>\n</section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <div class=\"ds-footer__about\">\n      <p class=\"ds-footer__brand\">chronoskin</p>\n      <p class=\"ds-footer__text\">A shop for things printed in small runs, run by four people and a label printer.</p>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Shop</h2>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#shelf\">Zines</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#shelf\">Riso prints</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#shelf\">Sticker sheets</a></li>\n      </ul>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Makers</h2>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#help\">Open a shelf</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#help\">Fees</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#help\">Packing guide</a></li>\n      </ul>\n    </div>\n    <div>\n      <h2 class=\"ds-footer__title\">Orders</h2>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#basket\">Basket</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#help\">Postage</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#help\">Returns</a></li>\n      </ul>\n    </div>\n    <p class=\"ds-footer__legal\">chronoskin, 2025. Every title belongs to its maker.</p>\n  </div>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.neubrutalism.shop.s07.p04.t08.u06\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"neubrutalism\",\n    \"years\": [\n      2021,\n      2026\n    ]\n  },\n  \"archetype\": \"shop\",\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-7486\",\n  \"short\": \"v1-nb-7486\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #99f6e4;\n  --color-canvas: #99f6e4;\n  --color-surface: #ffffff;\n  --color-surface-alt: #fff59f;\n  --color-surface-strong: #a5b4fb;\n  --color-bar: #ffffff;\n  --color-bar-text: #000000;\n  --color-bar-alt: #ffa6f6;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #17171c;\n  --color-inverse-text: #fafaf9;\n  --color-text: #000000;\n  --color-text-muted: #5c5c66;\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: #b8b8b8;\n  --color-accent: #ffa6f6;\n  --color-accent-text: #000000;\n  --color-accent-alt: #b8ff9f;\n  --color-fill-1: #ffa6f6;\n  --color-fill-2: #a5b4fb;\n  --color-fill-3: #fff59f;\n  --color-fill-4: #c6fab4;\n  --color-button: #fff59f;\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: #d8d8d8;\n  --color-disabled-text: #5c5c66;\n  --color-danger: #fb2c36;\n  --color-danger-surface: #f37777;\n  --color-success: #b8ff9f;\n  --color-warning: #f0b100;\n  --color-notice: #a6faff;\n  --color-notice-text: #000000;\n  --color-focus: #000000;\n  --color-shadow: #000000;\n  --color-overlay: rgb(23 23 28 / 0.75);\n}\n\n/* @part type */\n:root {\n  --font-body: Rubik, Karla, \"Trebuchet MS\", \"Lucida Grande\", Tahoma, sans-serif;\n  --font-heading: Fredoka, \"Baloo 2\", \"Arial Rounded MT Bold\", \"Varela Round\", \"Trebuchet MS\", sans-serif;\n  --font-ui: Rubik, Karla, \"Trebuchet MS\", \"Lucida Grande\", Tahoma, sans-serif;\n  --font-mono: \"Space Mono\", \"Courier Prime\", ui-monospace, Menlo, Monaco, monospace;\n  --text-base: 16px;\n  --text-small: 13px;\n  --text-ui: 15px;\n  --text-large: 19px;\n  --text-display: 64px;\n  --text-h1: 42px;\n  --text-h2: 28px;\n  --text-h3: 19px;\n  --line-body: 1.55;\n  --line-heading: 1.18;\n  --line-display: 1.06;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 600;\n  --weight-display: 600;\n  --weight-ui: 500;\n  --heading-transform: none;\n  --heading-tracking: 0.005em;\n  --display-tracking: -0.01em;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 3px;\n  --border-width-strong: 5px;\n  --border-style: solid;\n  --radius-control: 9999px;\n  --radius-panel: 0;\n  --radius-pill: 9999px;\n  --radius-page: 0;\n  --shadow-panel: 5px 5px 0 0 var(--color-shadow);\n  --shadow-control: 3px 3px 0 0 var(--color-shadow);\n  --shadow-control-hover: 1px 1px 0 0 var(--color-shadow);\n  --shadow-control-pressed: 0 0 0 0 var(--color-shadow);\n  --shadow-dialog: 12px 12px 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: 3px solid var(--color-focus);\n  --transition: transform 0.1s ease-out, box-shadow 0.1s ease-out;\n  --backdrop-blur: 0px;\n}\n"
  }
}
