{
  "id": "v1-nb-4331-dc",
  "long_id": "v1.neubrutalism.landing.s04.p03.t03.u01.dc",
  "name": "Neubrutalism landing page, sticker board layout (2021 to 2026)",
  "era": {
    "slug": "neubrutalism",
    "code": "nb",
    "name": "Neubrutalism",
    "years": [
      2021,
      2026
    ],
    "description": "Loud and flat, 2021 to 2026: thick black outlines, hard offset shadows with no blur, saturated colour blocks and bold type."
  },
  "archetype": "landing",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "density": "compact",
  "summary": "A plans page in the playful strand of neubrutalism: a centred column of free-standing boxes, each with a thick black outline and a hard black shadow, on one loud flat page colour, with small cards set at a slight angle like stickers on a board. It was common from about 2021 to 2026 on the pricing and landing pages of creator tools, booking and membership products and component kits. Nothing is full-bleed and nothing touches: the navigation is a floating bar, the hero is a claim beside a collage of tilted cards, and the page sells through a row of plan cards with flat colour heads.",
  "url": "https://chrono.skin/s/v1-nb-4331-dc",
  "preview_url": "https://chrono.skin/s/v1-nb-4331-dc/specimen.html",
  "files": {
    "STYLE.md": "# Neubrutalism landing page, sticker board layout (2021 to 2026)\n\n## Summary\n\nA plans page in the playful strand of neubrutalism: a centred column of free-standing boxes, each with a thick black outline and a hard black shadow, on one loud flat page colour, with small cards set at a slight angle like stickers on a board. It was common from about 2021 to 2026 on the pricing and landing pages of creator tools, booking and membership products and component kits. Nothing is full-bleed and nothing touches: the navigation is a floating bar, the hero is a claim beside a collage of tilted cards, and the page sells through a row of plan cards with flat colour heads.\n\n## Layout\n\n- The page is fluid but the content is not: `--size-page` is 100% and every block sits in one centred column of `--size-content` (1120px), with `--space-gutter` (32px) kept free at the sides on narrow screens. Designed at a 1440px viewport. No block is full-bleed; the page colour shows around everything.\n- Blocks are separated by gaps, never by rules: `--space-8` (80px) between sections, `--space-6` (32px) between the boxes of one section and between the page header and the working area, `--space-5` (24px) between plan cards and stacked blocks.\n- Navigation is one floating `--size-nav` (64px) bar, `--space-5` below the top of the window, with a `--border-width-strong` outline, `--radius-page` corners and the panel shadow. It is a three-part grid: the `.ds-brand` at the left, the links centred (the current one an outlined accent block), two small buttons at the right. There is no announcement line.\n- The hero is two equal columns with a `--space-7` gap, vertically centred. Left: a small tag, the display title, a lead capped at `--size-measure` (520px) and one or two large buttons, all left-aligned. Right: a collage `--size-collage` (420px) tall of four `.ds-sticker` cards, `--size-sticker` (270px) wide, placed at the four corners so that neighbours overlap by a few pixels, each rotated 3 or 4 degrees, plus one round `.ds-stamp` of `--size-stamp` (132px) rotated 12 degrees. One phrase of the title sits in a tilted outlined block (`.ds-hero__mark`).\n- Directly under the hero: three stat cards in a row, `--space-6` apart, alternately rotated 1.5 degrees left and right.\n- A section (`.ds-section`) starts with a centred head (tag, 48px title, lead) or with none. Inside it boxes are laid out with `.ds-cols`: two equal columns, or `.ds-cols--side` for a main column plus a `--size-sidebar` (344px) column; `.ds-cols--stretch` makes both the same height. The plans are `.ds-grid`: four equal cards, `--space-5` apart, the recommended one raised by `--space-4`.\n- Tilt is decoration for small things only: stickers, the stamp, stat cards, the marked phrase and the flag on the recommended plan. Rotation never exceeds 4 degrees on anything that holds a sentence (12 on the stamp, 6 on the flag), and nothing that holds a form, a table or running text is rotated.\n- Inner pages keep the floating navigation and the footer and drop the hero, the stat cards and the plans. They start with the `.ds-breadcrumb` on the page colour, then the `.ds-page-header`: one outlined, shadowed `--color-surface-alt` box with the 60px title and one line of description on the left and the actions on the right, vertically centred. `--space-6` below it comes one `.ds-cols--side` row: the main column is a `.ds-folder` (the `.ds-tabs` standing on the top edge of an outlined box that holds a toolbar strip, the flush table and a pagination strip); the `--size-sidebar` column holds a form panel. Inner pages are left-aligned throughout.\n- The footer is one inverted, outlined box in the same column, `--space-8` below the last block, with `--space-6` of page colour under it.\n- Spacing scale: `--space-1` 4px (underline offset, link padding in the navigation, margins of the marked phrase), `--space-2` 8px (badge padding, gaps inside a sticker, label to control, gap between tabs and pagination squares), `--space-3` 12px (row padding in lists, tables and strips, gap between navigation buttons, brand gap), `--space-4` 16px (sticker and panel padding, gap between buttons, lift of the recommended plan), `--space-5` 24px (stat card and plan card padding, gap between plan cards and stacked blocks), `--space-6` 32px (sheet and page header padding, gap between columns and stat cards), `--space-7` 48px (hero column gap, section head to content, call to action and footer padding), `--space-8` 80px (gap between sections, hero top padding). `--space-gutter` 32px is the side padding of the page.\n- Movement tokens: `--space-nudge` 2px (hover offset, focus outline offset) and `--space-press` 4px (pressed offset). Hover and press move a control straight down, never sideways, and the red shadow of an invalid field falls straight down, so the movement is right whichever way the surface set throws its shadows (lower right, lower left or straight down).\n- Fixed sizes: `--size-control` 44px (buttons, inputs, the current tab), `--size-control-large` 52px (hero and call to action buttons), `--size-control-small` 36px (navigation buttons, tabs, pagination squares), `--size-logo` 32px (the brand tile), `--size-check` 20px, `--size-dialog` 460px.\n- Below 900px the hero, the columns and the stat cards stack, the plans drop to two columns and the navigation links move to a second row inside the floating bar. Below 600px the page padding is `--space-3`, the plans are one column, the stickers stack in one column at 1.5 degrees and the stamp is hidden, stat cards and the recommended plan lose their tilt and lift, sections are `--space-7` apart, display and h1 text step down to `--text-h2`, notices and list rows stack, and table columns marked `.ds-table__extra` are hidden. On a phone `.ds-nav__links` is a ruled strip of four equal cells under the brand (the labels wrap inside their cell, the current link keeps its mark) and `.ds-nav__actions` is a full-width row below it with both buttons side by side.\n- Views: the specimen is one example site with four views, switched by plain `#name` links. `home` is the product page (hero with the sticker collage, stat cards, the four plans, the notebook list beside the import panel, the call to action). `guide` is an article: page header, the prose on a sheet, and a side column with the contents sidebar and a panel of further links. `timetable` is a studio's week: page header, notices, the folder with tabs, table and pagination, and the form panel in the side column. `class` is one class: page header with its action buttons, the list of people booked under the status key, the empty waiting list in the side column, and the confirmation dialog on its backdrop. The navigation marks the current view through `:has()` rules in `components.css`, one per view; `is-current` on a link does the same by hand.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- `--color-page` and `--color-canvas` are pale blue #dcebfe; `--color-surface` is white #ffffff for the rail, cards, stat tiles, tables, lists and the sheet. A plain card stage and even table rows take the pale blue.\n- `--color-button`, `--color-surface-strong` and `--color-bar-alt` are blue #5294ff with black text: the primary button, the brand mark, the title strips of cards and dialogs, the highlight behind a hovered link.\n- `--color-accent` is green #05e17a with black text: the current navigation item, rail link, filter chip and page, and the default badge. `--color-accent-alt` is yellow #facc00: the marked words of the intro title and \"new\" badges.\n- `--color-surface-alt` is sky #88c5ee: a hovered rail link, the empty state, the current table row, inline code.\n- `--color-fill-1` to `--color-fill-4` are blue #5294ff, green #05e17a, yellow #facc00 and lavender #b6ace4: the stages of demo cards whose content brings its own surface. Use each once before repeating.\n- Text, headings, every link colour, borders, focus and shadow are #000000; `--color-text-muted` #666666 (section notes, list meta, hints), `--color-border-muted` #b3b3b3 (the page grid). The navigation bar, the table head and the panel title (`--color-bar`) are white. The footer (`--color-inverse`) is black with white text.\n- Status: `--color-success` green #05e17a, `--color-warning` yellow #facc00, `--color-danger` red #dc341e, `--color-danger-surface` salmon #ee8888 behind an error notice, `--color-notice` lavender #b6ace4. All carry black text.\n- One grotesque sans for everything (`--font-body`, `--font-heading`, `--font-ui`: Public Sans, then DM Sans, Helvetica Neue); `--font-mono` for inline code, the command chip and class names in a table.\n- The whole page is heavy: `--weight-body` 500, `--weight-ui` 600 (navigation, rail links, chips, inputs, leads), `--weight-bold` 700 (buttons, labels, badges, the current rail link), `--weight-heading` 800 and `--weight-display` 900. Nothing is lighter than 500.\n- `--text-base` 16px at `--line-body` 1.5; `--text-small` 14px (rail headings, counts, notes, stat labels, table heads, list text, the footer); `--text-ui` 16px (navigation, rail links, chips, buttons, inputs); `--text-large` 24px for leads, the large button and the brand.\n- `--text-display` 72px at `--line-display` 1.1 for the intro title; `--text-h1` 48px (the inner page title, prose h1), `--text-h2` 36px (section titles, stat figures, prose h2), `--text-h3` 22px (card, panel, dialog and empty-state titles) at `--line-heading` 1.1. No tracking, no uppercase headings.\n- Uppercase is used only for the 12px `.ds-badge`. That size is `calc(var(--text-small) * 0.857)`; the vocabulary has no token for it.\n- Links in running text are underlined (`--link-decoration`) and lose the underline on hover (`--link-decoration-hover: none`), where the flat highlight replaces it; quiet links are never underlined.\n- `--border-width` is 3px on every box and rule; `--border-width-strong` 4px under the navigation.\n- All four radius tokens are 8px: buttons, inputs, cards, tiles, dialogs and badges share one rounded corner; badges are rounded rectangles, not pills.\n- Boxes that stand on the page sit on a second sheet, not a plain block: `--shadow-panel` is two hard shadows at the same `5px 5px` offset, a `--color-surface-strong` one on top and a `--color-shadow` one spread 3px behind it, so a filled, outlined copy of the box shows at its right and bottom edge like the next card in a stack. `--shadow-control` is the same at `4px 4px`, `--shadow-dialog` at `8px 8px`. No shadow is blurred. Filter chips and pagination squares carry the smaller `3px 3px` (`--shadow-control-hover`), as does a hovered button; a pressed one keeps `1px 1px` (`--shadow-control-pressed`). A box shown inside a card stage (the panel, the form box) has an outline but no shadow.\n- `--fill-page` draws a 70px grid of 1px lines (`--color-border-muted` at 50%) over the page colour; every other fill is flat.\n- `--focus-ring` is `3px solid` in `--color-focus`; `--transition` animates only `transform` and `box-shadow` over 0.2s.\n\nSpacing is compact: every `--space-*` token of the layout was multiplied by 0.8. Where the Layout section names a spacing in pixels, the tokens are right.\n\n## Components\n\n- `.ds-page`: on `<body>`. Sets the page fill with its dots, the base font and colour and the side padding. Every block below is a direct child of it or of `<main>` and centres itself in the 1120px column.\n- `.ds-brand`: the site's mark and name, the first thing in the navigation bar and a link to the home page. `.ds-brand__mark` is a `--size-logo` (32px) tile dressed like the primary button: `--fill-button` with the mark drawn in `--color-button-text`, a `--border-width` `--color-border` outline, `--radius-control` corners (a circle in this pack's own surface set) and the `--shadow-control` hard shadow, so every palette and surface set reskins it. The mark is inline SVG with square line caps and a 2.8 stroke. `.ds-brand__name` is the name in the heading font at `--text-large`, weight `--weight-heading`, with the heading tracking and transform, in `--color-bar-text`. One per page. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the floating navigation bar: the `.ds-brand`, `.ds-nav__links` of `.ds-nav__link` (the current one has `is-current`: an outlined accent block; a `.ds-badge` may sit inside a link) and `.ds-nav__actions` with two small buttons.\n- `.ds-hero`: the home page introduction. `.ds-hero__claim` holds an optional `.ds-badge`, the `.ds-hero__title` with one short phrase in `.ds-hero__mark` (a tilted, outlined `--color-accent-alt` block that never wraps), the `.ds-hero__lead` and `.ds-hero__actions`. `.ds-hero__collage` holds the stickers and is hidden from assistive technology. One per page.\n- `.ds-sticker`: a small outlined, shadowed card, 270px wide: `.ds-sticker__title`, `.ds-sticker__text`, `.ds-sticker__figure` (one large number that never wraps) and `.ds-sticker__row` for a title or tag pair on one line. `.ds-sticker--1` to `--4` set a flat fill, none leaves it white. `.ds-sticker--left` and `.ds-sticker--right` tilt it 4 and 3 degrees; `.ds-sticker--a` to `--d` place it at a corner of the collage. Keep the text to two short lines. `.ds-stamp` is the round accent seal, two or three uppercase words.\n- `.ds-stat`: the row of three summary figures. Each `.ds-stat__card` is an outlined, shadowed, slightly rotated card with a `.ds-stat__value` (60px) over a `.ds-stat__label`; every second card takes `--color-surface-alt`. Use directly under the hero.\n- `.ds-section`: any block of the home page below the stats. `.ds-section__head` centres a tag, a `.ds-section__title` and a `.ds-section__lead`. `.ds-label` is a 30px heading over a block that has no box title of its own. `.ds-label--flush` removes its bottom margin when it shares a `.ds-row` with something else.\n- `.ds-cols`: two equal columns; `.ds-cols--side` a main column and a 344px column; `.ds-cols--3` three equal columns; `.ds-cols--stretch` equal heights. `.ds-stack` stacks blocks 24px apart. `.ds-stack--wide` 32px. `.ds-row` puts two things on one line. `.ds-sheet` is a plain white outlined, shadowed box with 32px padding for long text or a group of small things. `.ds-sheet__text` is a paragraph in it above a button. `.ds-meta` is a muted 14px note.\n- `.ds-grid`: the four plan cards. Each `.ds-grid__cell` is an outlined, shadowed box: `.ds-grid__head` is the flat colour block (set by `.ds-grid__cell--1` to `--4`) with the `.ds-grid__title` and the `.ds-grid__price` (60px figure, `.ds-grid__per` for the period), then a rule, then `.ds-grid__body` with a `.ds-grid__text` line, the `.ds-grid__features` list and one `.ds-button--block`. A `.ds-grid__feature` starts with a small outlined accent square; `is-off` strikes it through in muted grey for a feature the plan lacks. `.ds-grid__cell--featured` raises the recommended plan and carries a tilted `.ds-badge` with `.ds-grid__flag` on its top right corner; only its button is primary.\n- `.ds-prose`: long text: h1, h2, h3, p, ul, ol, strong, inline code (pale yellow, outlined) and links inside it are styled. Put it in a `.ds-sheet`.\n- `.ds-link`: any link in content: black, medium weight, underlined. `.ds-link--quiet` removes the underline for titles, breadcrumbs and sidebar lists. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-links` lays several out in a row.\n- `.ds-button`: pale yellow pill, black bold text, 3px outline, 4px hard shadow, 44px tall. `.ds-button--secondary` is white. `.ds-button--danger` is the destructive action (cancel a class, delete): flat red with the same black text, outline and shadow; use it once per view. `.ds-button--large` (52px, 20px text) for the hero and the call to action, `.ds-button--small` (36px, 14px text) for the navigation, `.ds-button--block` fills the width of a plan card. `is-hover` sinks it 2px toward its shadow, `is-active` 4px with no shadow left, `is-disabled` is flat grey with no shadow, `is-focus` adds a black outline 2px away. `.ds-buttons` is a row of them.\n- `.ds-badge`: 12px bold uppercase label in an outlined pill, pink by default. `.ds-badge--alt` mint (\"new\"), `.ds-badge--strong` periwinkle, `.ds-badge--plain` white (counts, days, neutral tags). Status labels in table rows and stickers: `.ds-badge--success` mint, `.ds-badge--warning` amber, `.ds-badge--danger` red, all with black text. No shadow. `.ds-badges` is a row of them. The alt and strong variants carry `--color-text`, like every other filled block; only the default badge uses `--color-accent-text`.\n- `.ds-form`: stacked fields: `.ds-form__field` with a bold 14px `.ds-form__label` above a `.ds-form__control` (input, select; `.ds-form__control--area` for a textarea), then `.ds-form__hint` or `.ds-form__error`. Controls are white with a 3px outline and no shadow at rest; `is-focus` adds the hard shadow and an outline, `is-invalid` turns the border and shadow red, `is-disabled` greys it. `.ds-form__check` wraps a `.ds-form__checkbox` and its text.\n- `.ds-table`: an outlined, shadowed box; white head row with bold 14px text, rows divided by 3px black rules and alternating white and page colour; `is-current` on a row makes it pale yellow and bold. A status column holds one badge per row. `.ds-table__num` right-aligns numbers. A cell with `.ds-table__extra` is dropped below 600px. `.ds-table--flush` drops the outline, corners and shadow for a table inside a `.ds-folder`.\n- `.ds-folder`: the working box of an inner page: the `.ds-tabs` first, then `.ds-folder__body`, an outlined, shadowed box holding `.ds-folder__bar--top` (a count and one link on the page colour), a `.ds-table--flush` and `.ds-folder__bar--bottom` with the pagination.\n- `.ds-tabs`: folder tabs standing on the top edge of the box below, indented by `--space-4`: each `.ds-tabs__tab` is white with an outline on three sides and rounded top corners; the current one (`is-current`) is taller, pink and bold, `is-hover` is pale yellow. A `.ds-badge--plain` count may sit inside a tab. Use for two to four views of one box.\n- `.ds-list`: one outlined, shadowed box of `.ds-list__item` rows divided by black rules, each with a bold `.ds-list__title`, a `.ds-list__text` line and a muted `.ds-list__meta` on the right.\n- `.ds-panel`: outlined, shadowed box with a periwinkle `.ds-panel__title` strip over a rule and a `.ds-panel__body`. `.ds-panel--plain` makes the strip white. The plain title strip is filled with `--fill-bar` and takes `--color-bar-text`, so a dark bar works as well as a light one.\n- `.ds-sidebar`: outlined, shadowed white block with a `.ds-sidebar__title` and a `.ds-sidebar__list` of `.ds-sidebar__item` rows divided by faint `--color-border-muted` rules; an item may end with a plain badge.\n- `.ds-notice`: one-line message in an outlined, shadowed pale cyan box with a bold `.ds-notice__title` and `.ds-notice__text`. `.ds-notice--error` is salmon with black text.\n- `.ds-pagination`: row of 36px white outlined pills (`.ds-pagination__link`) with a 2px shadow; the current page (`is-current`) is pink, `is-disabled` is grey and flat, `is-hover` moves into the shadow. On an inner page it sits in the bottom strip of the folder.\n- `.ds-breadcrumb`: 14px trail of `.ds-breadcrumb__item` separated by a muted slash; the last has `is-current` and is bold. On an inner page it is the first line, above the page header box.\n- `.ds-page-header`: the head of an inner page, used instead of the hero: the breadcrumb, then `.ds-page-header__box` with a block holding `.ds-page-header__title` (60px) and one `.ds-page-header__lead` line on the left and `.ds-page-header__actions` (one primary button, at most one secondary) on the right. One per page. `.ds-inner` is the column for the working area below it.\n- `.ds-dialog`: a 460px outlined box with the 8px hard shadow, a periwinkle `.ds-dialog__bar` (holding `.ds-dialog__title` and a round `.ds-dialog__close`), `.ds-dialog__body`, and a page-coloured `.ds-dialog__actions` strip over a rule with the buttons right-aligned. In the page flow it sits in a `.ds-backdrop`, an outlined box filled with `--color-overlay`.\n- `.ds-empty`: pale yellow outlined, shadowed box, centred: `.ds-empty__title`, `.ds-empty__text` and one button.\n- `.ds-cta`: the closing call to action: one `--color-fill-1` box with a 4px outline and the panel shadow, `.ds-cta__title` and `.ds-cta__lead` on the left, one large secondary button on the right.\n- `.ds-footer`: one inverted, outlined box: `.ds-footer__inner` is a 2:1:1:1 grid with `.ds-footer__brand` and `.ds-footer__text`, then columns with an uppercase `.ds-footer__title` and a `.ds-footer__list` of `.ds-footer__link`; `.ds-footer__legal` is a last line over a faint rule.\n- `.ds-menu`: a chunky drop-down, a `<details>` whose `<summary>` is the `.ds-menu__trigger` (a small secondary button that ends in a plus sign). `.ds-menu__list` is an outlined, shadowed box of `.ds-menu__item` rows divided by rules, each a `.ds-menu__link`. Use it for a short list of pages under one button.\n- `.ds-carousel`: a row of quotes of which one shows, in one outlined, shadowed box. `.ds-carousel__track` scrolls sideways with scroll snap; each `.ds-carousel__slide` holds a `.ds-carousel__quote` and a `.ds-carousel__who` line with a `.ds-avatar`. `.ds-carousel__controls` is the strip below with two `.ds-carousel__arrow` buttons and the `.ds-carousel__dots` (the current `.ds-carousel__dot` is wider and filled). Use it for what customers say, on the home page.\n- `.ds-avatar`: a person as initials on a filled, outlined circle (`--2`, `--3` change the fill). Use it beside a name.\n- `.ds-progress`: how far something is: a `.ds-progress__label` line (what, and the figures) over a thick outlined `.ds-progress__track` holding a `.ds-progress__bar` (50% wide; `--25` and `--70` set other widths).\n- `.ds-switch`: an on and off control: a `<label>` holding a hidden `.ds-switch__input` checkbox, the `.ds-switch__track` and the text. On, the track is filled with the accent and takes a small hard shadow. `.ds-switch-row` puts a `.ds-tooltip` at the end of its line. Use it for a setting that applies at once.\n- `.ds-tooltip`: a hint like a sticker. `.ds-tooltip__trigger` is a small round button with a question mark; `.ds-tooltip__tip` is an inverted, outlined box that shows above it on hover or focus (`is-open` on the wrapper shows it by hand). One or two lines of text.\n- `.ds-accordion`: questions that open and close, one outlined, shadowed box of `<details class=\"ds-accordion__item\">` divided by rules. `.ds-accordion__head` is the `<summary>` with a square plus sign; open, it becomes a `--color-surface-strong` strip with a minus sign over `.ds-accordion__body`. Use it for frequently asked questions.\n- `.ds-follow`: on a block that comes after another in a column that has no gap of its own; it adds the space above.\n\n## Never\n\n- `row-gap <= 8px`: table and list rows touch and are divided by rules; plain lists of features and links sit at most 8px apart.\n- `block-gap <= 80px`: sections are 80px apart, the boxes of a section 24px to 32px.\n- `content-width <= 80%`: everything sits in a 1120px column of a 1440px viewport; nothing is full-bleed.\n- `palette-colours <= 15`: black, white, pale blue, blue, sky, green, yellow, lavender, salmon, red and the greys.\n- `font-weight >= 500`: no regular or light text; the page is set in medium and heavier.\n- `font-size <= 72px`: the intro title is the largest text.\n- `font-size >= 12px`: badge labels are the smallest text.\n- `font-families <= 2`: one sans and a monospace for code.\n- `line-height <= 1.5`: body text is set at 1.5.\n- `letter-spacing = 0px`: nothing is tracked.\n- `uppercase-text <= 5%`: only 12px badges are uppercase.\n- `underlined-links <= 20%`: only links in running text are underlined.\n- `box-shadow-blur <= 0px`: every shadow in the references is a hard offset block; a blurred shadow breaks the style at once.\n- `border-radius <= 5px`: corners are 4px to 5px on boxes and controls; no large radii and no pills in this pack.\n- `border-width >= 2px`: outlines and rules are 2px, 3px under the navigation; no hairlines except the page grid, which is a background.\n- `border-width <= 3px`: nothing heavier than 3px was measured.\n- `text-shadow = none`: no text shadow in any reference.\n- `gradient-fills <= 1%`: fills are flat; the only gradient is the grid drawn on the page background.\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 that is a box stands alone on the page colour and gets the same three things: a `--border-width` `--color-border` outline, a `--radius-panel` or `--radius-page` corner and the `--shadow-panel` hard shadow; anything clickable also moves `--space-nudge` into its shadow on hover and `--space-press` when pressed. Separate boxes with a gap from the spacing scale, never with a rule across the page; inside a box, divide with a rule rather than nesting more shadowed cards. Colour a new block with one flat `--color-fill-*` or surface token and keep its text in `--color-text`; never tint, fade or blur. A new small, self-contained thing (a quote, a figure, a tag) may be a `.ds-sticker` with one of the tilt classes; anything with a form, a table or more than two lines of text stays level. For a size the vocabulary lacks, use `calc()` over an existing token, as the 12px badge text does.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 100%;\n  --size-content: 1120px;\n  --size-measure: 520px;\n  --size-nav: 64px;\n  --size-control: 44px;\n  --size-control-large: 52px;\n  --size-control-small: 36px;\n  --size-logo: 32px;\n  --size-check: 20px;\n  --size-menu: 240px;\n  --size-avatar: 40px;\n  --size-tip: 220px;\n  --size-switch: 44px;\n  --size-bar: 16px;\n  --size-icon: 44px;\n  --size-collage: 420px;\n  --size-sticker: 270px;\n  --size-stamp: 132px;\n  --size-sidebar: 344px;\n  --size-dialog: 460px;\n  --space-1: 3px;\n  --space-2: 6px;\n  --space-3: 10px;\n  --space-4: 13px;\n  --space-5: 19px;\n  --space-6: 26px;\n  --space-7: 38px;\n  --space-8: 64px;\n  --space-gutter: 26px;\n  --space-nudge: 2px;\n  --space-press: 3px;\n}\n\n/* shell: a centred column of free-standing boxes on the page fill */\n.ds-page {\n  margin: 0;\n  width: var(--size-page);\n  padding: var(--space-5) var(--space-gutter) var(--space-6);\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 *,\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: one floating outlined bar, brand left, links centred, actions right */\n.ds-nav {\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  align-items: center;\n  gap: var(--space-5);\n  max-width: var(--size-content);\n  min-height: var(--size-nav);\n  margin: 0 auto;\n  padding: var(--space-2) var(--space-3) var(--space-2) var(--space-5);\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  text-decoration: none;\n  gap: var(--space-3);\n}\n.ds-brand__mark {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-logo);\n  height: var(--size-logo);\n  padding: var(--space-nudge);\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-bar-text);\n}\n.ds-nav__links {\n  display: flex;\n  align-items: center;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-nav__link {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  padding: var(--space-1) var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  color: var(--color-bar-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: var(--radius-control);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n  text-underline-offset: var(--space-1);\n}\n.ds-nav__link.is-current,\n.ds-page:not(:has(.ds-view:target)) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#home:target) .ds-nav__link[href=\"#home\"],\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"],\n.ds-page:has(#timetable:target) .ds-nav__link[href=\"#timetable\"],\n.ds-page:has(#class:target) .ds-nav__link[href=\"#class\"] {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: var(--color-border);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-nav__actions {\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: var(--space-3);\n}\n\n/* hero: claim on the left, a collage of tilted sticker cards on the right */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  align-items: center;\n  gap: var(--space-7);\n  max-width: var(--size-content);\n  margin: 0 auto;\n  padding: var(--space-8) 0 var(--space-7);\n}\n.ds-hero__claim {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-5);\n}\n.ds-hero__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-hero__mark {\n  display: inline-block;\n  margin: var(--space-1) 0;\n  padding: 0 var(--space-3);\n  white-space: nowrap;\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-panel);\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  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n}\n.ds-hero__collage {\n  position: relative;\n  min-height: var(--size-collage);\n}\n\n/* sticker: a small outlined card, set at a slight angle */\n.ds-sticker {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  width: var(--size-sticker);\n  padding: var(--space-4);\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-sticker--1 {\n  background: var(--color-fill-1);\n}\n.ds-sticker--2 {\n  background: var(--color-fill-2);\n}\n.ds-sticker--3 {\n  background: var(--color-fill-3);\n}\n.ds-sticker--left {\n  transform: rotate(-4deg);\n}\n.ds-sticker--right {\n  transform: rotate(3deg);\n}\n.ds-sticker--a {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.ds-sticker--b {\n  position: absolute;\n  top: 13%;\n  right: 0;\n}\n.ds-sticker--c {\n  position: absolute;\n  bottom: 14%;\n  left: 0;\n}\n.ds-sticker--d {\n  position: absolute;\n  bottom: 0;\n  right: 2%;\n}\n.ds-sticker__row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-sticker__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-sticker__text {\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-sticker__figure {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n  white-space: nowrap;\n}\n.ds-stamp {\n  position: absolute;\n  top: -9%;\n  right: -2%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-stamp);\n  height: var(--size-stamp);\n  padding: 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.2;\n  text-align: center;\n  text-transform: uppercase;\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: 50%;\n  box-shadow: var(--shadow-control);\n  transform: rotate(12deg);\n}\n\n/* stats: three free-standing cards, alternately tilted */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--space-6);\n  max-width: var(--size-content);\n  margin: 0 auto;\n}\n.ds-stat__card {\n  display: flex;\n  flex-direction: column-reverse;\n  padding: var(--space-5);\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  transform: rotate(-1.5deg);\n}\n.ds-stat__card:nth-child(even) {\n  background: var(--color-surface-alt);\n  transform: rotate(1.5deg);\n}\n.ds-stat__value {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-stat__label {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n\n/* section: a centred head over free-standing boxes; sections are apart, not ruled */\n.ds-section {\n  max-width: var(--size-content);\n  margin: var(--space-8) auto 0;\n}\n.ds-section__head {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-3);\n  max-width: calc(var(--size-measure) + var(--space-8));\n  margin: 0 auto var(--space-7);\n  text-align: center;\n}\n.ds-section__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-section__lead {\n  margin: 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n}\n.ds-label {\n  margin: 0 0 var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading-alt);\n}\n.ds-label--flush {\n  margin-bottom: 0;\n}\n.ds-sheet__text {\n  margin: 0 0 var(--space-4);\n}\n.ds-cols {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-cols--3 {\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  align-items: stretch;\n}\n.ds-cols--side {\n  grid-template-columns: minmax(0, 1fr) var(--size-sidebar);\n}\n.ds-cols--stretch {\n  align-items: stretch;\n}\n.ds-stack {\n  display: grid;\n  gap: var(--space-5);\n  align-content: start;\n  min-width: 0;\n}\n.ds-stack--wide {\n  gap: var(--space-6);\n}\n.ds-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n.ds-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.ds-backdrop {\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\n/* grid: four plan cards, a flat colour head over a list of what is included */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-5);\n  align-items: stretch;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-grid__cell {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-grid__cell--featured {\n  transform: translateY(calc(-1 * var(--space-4)));\n}\n.ds-grid__head {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  padding: var(--space-5) var(--space-5) var(--space-4);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: calc(var(--radius-page) - var(--border-width)) calc(var(--radius-page) - var(--border-width)) 0 0;\n}\n.ds-grid__cell--1 .ds-grid__head {\n  background: var(--color-fill-1);\n}\n.ds-grid__cell--2 .ds-grid__head {\n  background: var(--color-fill-2);\n}\n.ds-grid__cell--3 .ds-grid__head {\n  background: var(--color-fill-3);\n}\n.ds-grid__cell--4 .ds-grid__head {\n  background: var(--color-fill-4);\n}\n.ds-grid__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-grid__price {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n}\n.ds-grid__per {\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n}\n.ds-grid__flag {\n  position: absolute;\n  top: calc(-1 * var(--space-4));\n  right: calc(-1 * var(--space-3));\n  transform: rotate(6deg);\n}\n.ds-grid__body {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  gap: var(--space-4);\n  padding: var(--space-4) var(--space-5) var(--space-5);\n}\n.ds-grid__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n.ds-grid__features {\n  display: grid;\n  flex: 1;\n  align-content: start;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-grid__feature {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-2);\n}\n.ds-grid__feature::before {\n  content: \"\";\n  flex: none;\n  width: var(--space-2);\n  height: var(--space-2);\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  box-sizing: content-box;\n}\n.ds-grid__feature.is-off {\n  color: var(--color-text-muted);\n  text-decoration: line-through;\n}\n.ds-grid__feature.is-off::before {\n  background: transparent;\n  border-color: var(--color-border-muted);\n}\n\n/* page header: the head of an inner page, one outlined box */\n.ds-page-header {\n  max-width: var(--size-content);\n  margin: var(--space-8) auto 0;\n}\n.ds-page-header__box {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  padding: var(--space-6);\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-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-page-header__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-text);\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  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n.ds-inner {\n  max-width: var(--size-content);\n  margin: var(--space-6) auto 0;\n}\n\n/* folder: tabs standing on the top edge of an outlined box */\n.ds-folder {\n  min-width: 0;\n}\n.ds-folder__body {\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-folder__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-canvas);\n}\n.ds-folder__bar--top {\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-folder__bar--bottom {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-meta {\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* cta: one filled box with the action on the right */\n.ds-cta {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  max-width: var(--size-content);\n  margin: var(--space-8) auto 0;\n  padding: var(--space-7);\n  color: var(--color-text);\n  background: var(--color-fill-1);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n.ds-cta__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-cta__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\n/* typography */\n.ds-prose {\n  max-width: 68ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  margin: 0 0 var(--space-5);\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin: var(--space-6) 0 var(--space-4);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-3);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-5);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-prose a {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n\n/* links: black on everything; hover is a flat highlight behind the text */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-decoration-thickness: var(--border-width);\n  text-underline-offset: var(--space-1);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  text-decoration-thickness: var(--border-width);\n  background: var(--color-surface-strong);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n  background: var(--fill-accent);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* buttons: flat fill, black outline, hard shadow; the button moves into its shadow */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  white-space: nowrap;\n  cursor: pointer;\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n\n/* a block that moves down onto its shadow carries a strip above itself, so a pointer at its top edge stays on it */\n.ds-button {\n  position: relative;\n}\n.ds-button::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 100%;\n  height: calc(2 * var(--space-press));\n}\n.ds-button--secondary {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-size: var(--text-large);\n}\n.ds-button--small {\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-4);\n  font-size: var(--text-small);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  color: var(--color-button-hover-text);\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  transform: translateY(var(--space-nudge));\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: translateY(var(--space-press));\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n  transform: none;\n  cursor: not-allowed;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* badge: small bold uppercase label in an outlined box */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  padding: 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-bold);\n  line-height: 1.5;\n  text-transform: uppercase;\n  white-space: nowrap;\n  vertical-align: middle;\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-badge--alt {\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n}\n.ds-badge--strong {\n  color: var(--color-text);\n  background: var(--color-surface-strong);\n}\n.ds-badge--plain {\n  color: var(--color-text);\n  background: var(--color-surface);\n}\n.ds-badge--success {\n  color: var(--color-text);\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-text);\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* form */\n.ds-form {\n  display: grid;\n  gap: var(--space-4);\n}\n.ds-form__field {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-form__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-form__control {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: var(--line-body);\n  color: var(--color-input-text);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  transition: var(--transition);\n}\n.ds-form__control--area {\n  min-height: calc(var(--size-control) * 2);\n  resize: vertical;\n}\n.ds-form__control:focus,\n.ds-form__control.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n  box-shadow: var(--shadow-control);\n}\n.ds-form__control:disabled,\n.ds-form__control.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n}\n.ds-form__control.is-invalid {\n  border-color: var(--color-danger);\n  box-shadow: 0 var(--space-press) 0 0 var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  color: var(--color-danger);\n}\n.ds-form__hint {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-size: var(--text-base);\n  font-weight: var(--weight-ui);\n}\n.ds-form__checkbox {\n  appearance: none;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background: var(--color-text);\n  box-shadow: inset 0 0 0 var(--space-nudge) var(--color-surface-strong);\n}\n.ds-form__checkbox:focus-visible,\n.ds-form__checkbox.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\n/* table: one outlined, shadowed box; rows divided by rules */\n.ds-table {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 0;\n  font-size: var(--text-base);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-3) var(--space-4);\n  text-align: left;\n  vertical-align: middle;\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-table th {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n.ds-table tbody tr:nth-child(even) td {\n  background: var(--color-canvas);\n}\n.ds-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.ds-table tbody tr.is-current td {\n  background: var(--color-surface-alt);\n  font-weight: var(--weight-bold);\n}\n.ds-table .ds-table__num {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n\n.ds-table--flush {\n  border: 0;\n  border-radius: 0;\n  box-shadow: none;\n}\n\n/* list: one outlined box of ruled rows */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n}\n.ds-list__item + .ds-list__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-list__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n.ds-list__meta {\n  flex: none;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* panel: outlined box with a coloured title strip */\n.ds-panel {\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading-alt);\n  color: var(--color-text);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__body {\n  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel--plain .ds-panel__title {\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n\n/* sidebar */\n.ds-sidebar {\n  padding: var(--space-5);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-sidebar__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading-alt);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) 0;\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n\n/* notice */\n.ds-notice {\n  display: flex;\n  align-items: baseline;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  color: var(--color-notice-text);\n  background: var(--color-notice);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-notice__title {\n  flex: none;\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  margin: 0;\n}\n.ds-notice--error {\n  color: var(--color-text);\n  background: var(--color-danger-surface);\n}\n\n/* pagination: small outlined squares */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control-small);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-pagination__link.is-current {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0 0 var(--space-5);\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  margin-right: var(--space-2);\n  color: var(--color-text-muted);\n}\n.ds-breadcrumb__item.is-current {\n  font-weight: var(--weight-bold);\n}\n\n/* dialog: an outlined box with a title strip, on a flat dark backdrop */\n.ds-dialog {\n  max-width: var(--size-dialog);\n  margin: 0 auto;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-dialog__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading-alt);\n}\n.ds-dialog__close {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--space-6);\n  height: var(--space-6);\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  cursor: pointer;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-dialog__body {\n  padding: var(--space-5) var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  padding: var(--space-4);\n  background: var(--color-canvas);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* empty state */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-3);\n  padding: var(--space-7) var(--space-5);\n  text-align: center;\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-empty__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-heading);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n}\n\n.ds-button--block {\n  width: 100%;\n}\n\n/* tabs: folder tabs; the current one is filled and joins the box below */\n.ds-tabs {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0 var(--space-4);\n  list-style: none;\n}\n.ds-tabs__tab {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: 0;\n  border-radius: var(--radius-panel) var(--radius-panel) 0 0;\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  background: var(--color-surface-alt);\n}\n.ds-tabs__tab.is-current {\n  min-height: var(--size-control);\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\n/* footer: one inverted, outlined box that ends the column */\n.ds-footer {\n  max-width: var(--size-content);\n  margin: var(--space-8) auto 0;\n  padding: var(--space-7) var(--space-7) var(--space-5);\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n}\n.ds-footer__inner {\n  display: grid;\n  grid-template-columns: 2fr 1fr 1fr 1fr;\n  gap: var(--space-6);\n}\n.ds-footer__brand {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-footer__text {\n  max-width: 36ch;\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.45;\n}\n.ds-footer__title {\n  margin: 0 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.857);\n  font-weight: var(--weight-bold);\n  line-height: 1.5;\n  text-transform: uppercase;\n}\n.ds-footer__list {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.45;\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n  text-underline-offset: var(--space-1);\n}\n.ds-footer__legal {\n  margin: var(--space-6) 0 0;\n  padding-top: var(--space-4);\n  font-size: var(--text-small);\n  line-height: 1.45;\n  border-top: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-inverse-text) 35%, transparent);\n}\n\n/* menu: a chunky drop-down, a details element whose summary is the trigger */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__trigger {\n  list-style: none;\n  cursor: pointer;\n}\n.ds-menu__trigger::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__trigger::after {\n  content: \"+\";\n  margin-left: var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-menu[open] .ds-menu__trigger::after {\n  content: \"-\";\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 3;\n  width: var(--size-menu);\n  max-width: 80vw;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-menu__item + .ds-menu__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-menu__link {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  color: var(--color-text);\n}\n.ds-menu__link:hover,\n.ds-menu__link.is-hover {\n  background: var(--color-surface-alt);\n}\n\n/* avatar: a person as initials on a filled, outlined circle */\n.ds-avatar {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-avatar--2 {\n  background: var(--color-fill-2);\n}\n.ds-avatar--3 {\n  background: var(--color-fill-4);\n}\n\n/* follow: a block that comes after another in a plain column */\n.ds-follow {\n  margin-top: var(--space-5);\n}\n/* carousel: one quote showing, the rest a swipe away */\n.ds-carousel {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-carousel__track {\n  display: flex;\n  flex: 1;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scrollbar-width: none;\n}\n.ds-carousel__slide {\n  display: flex;\n  flex: 0 0 100%;\n  flex-direction: column;\n  justify-content: space-between;\n  gap: var(--space-4);\n  min-width: 0;\n  padding: var(--space-5);\n  scroll-snap-align: start;\n}\n.ds-carousel__quote {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading-alt);\n}\n.ds-carousel__who {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n.ds-carousel__controls {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-carousel__arrow {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  margin: 0;\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  cursor: pointer;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  transition: var(--transition);\n}\n.ds-carousel__arrow:hover,\n.ds-carousel__arrow.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-carousel__dots {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-carousel__dot {\n  display: block;\n  width: var(--space-4);\n  height: var(--space-4);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-carousel__dot.is-current {\n  width: var(--space-6);\n  background: var(--fill-accent);\n}\n/* progress: a thick outlined track with a filled bar */\n.ds-progress {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n.ds-progress__track {\n  display: block;\n  height: var(--size-bar);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  overflow: hidden;\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n/* switch: an on and off control drawn over a checkbox */\n.ds-switch-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n}\n.ds-switch {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  opacity: 0;\n}\n.ds-switch__track {\n  position: relative;\n  display: block;\n  flex: none;\n  width: var(--size-switch);\n  height: calc(var(--size-check) + 2 * var(--border-width));\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: var(--size-check);\n  height: var(--size-check);\n  background: var(--color-text);\n  border-radius: var(--radius-pill);\n  transform: scale(0.64);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch__track.is-on {\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-switch__input:checked + .ds-switch__track::before,\n.ds-switch__track.is-on::before {\n  left: calc(100% - var(--size-check));\n  background: var(--color-accent-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch__track.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n/* tooltip: a sticker of a hint over its trigger, on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n.ds-tooltip__trigger {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  cursor: help;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  box-sizing: content-box;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  right: 0;\n  z-index: 2;\n  width: var(--size-tip);\n  max-width: 70vw;\n  padding: var(--space-2) var(--space-3);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.35;\n  text-align: left;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n  box-shadow: var(--shadow-control-hover);\n  visibility: hidden;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus-within .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  visibility: visible;\n}\n/* accordion: questions that open and close, one outlined box, a big plus sign */\n.ds-accordion {\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-accordion__item + .ds-accordion__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  list-style: none;\n  cursor: pointer;\n  color: var(--color-heading-alt);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"\";\n  display: block;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  color: var(--color-button-secondary-text);\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 2.5) calc(var(--space-1) / 2) no-repeat,\n    linear-gradient(currentColor, currentColor) center / calc(var(--space-1) / 2) calc(var(--space-1) * 2.5) no-repeat,\n    var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-sizing: content-box;\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n}\n.ds-accordion__head:focus-visible,\n.ds-accordion__head.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-press));\n}\n.ds-accordion__item[open] .ds-accordion__head {\n  color: var(--color-heading-alt);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item[open] .ds-accordion__head::after {\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 2.5) calc(var(--space-1) / 2) no-repeat,\n    var(--fill-button-secondary);\n}\n.ds-accordion__body {\n  padding: var(--space-4);\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n@media (max-width: 900px) {\n  .ds-nav {\n    grid-template-columns: 1fr auto;\n    gap: var(--space-2) var(--space-4);\n  }\n  .ds-nav__links {\n    grid-row: 2;\n    grid-column: 1 / -1;\n    flex-wrap: wrap;\n  }\n  .ds-hero,\n  .ds-cols,\n  .ds-cols--3,\n  .ds-cols--side,\n  .ds-stat {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-footer__inner {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n\n@media (max-width: 600px) {\n  .ds-page {\n    padding: var(--space-3) var(--space-3) var(--space-5);\n  }\n  .ds-nav {\n    padding: var(--space-2) var(--space-3);\n  }\n  .ds-nav__link {\n    padding: var(--space-1) var(--space-2);\n    font-size: var(--text-small);\n  }\n  .ds-nav__actions .ds-button--secondary,\n  .ds-table .ds-table__extra,\n  .ds-stamp {\n    display: none;\n  }\n  .ds-hero {\n    gap: var(--space-6);\n    padding: var(--space-7) 0 var(--space-6);\n  }\n  .ds-hero__title {\n    font-size: var(--text-h2);\n  }\n  .ds-hero__actions,\n  .ds-hero__actions .ds-button {\n    width: 100%;\n  }\n  .ds-hero__collage {\n    display: grid;\n    gap: var(--space-3);\n    min-height: 0;\n    padding: 0 var(--space-2);\n  }\n  .ds-sticker,\n  .ds-sticker--a,\n  .ds-sticker--b,\n  .ds-sticker--c,\n  .ds-sticker--d {\n    position: static;\n    width: auto;\n  }\n  .ds-sticker--left {\n    transform: rotate(-1.5deg);\n  }\n  .ds-sticker--right {\n    transform: rotate(1.5deg);\n  }\n  .ds-stat {\n    gap: var(--space-4);\n  }\n  .ds-stat__card,\n  .ds-stat__card:nth-child(even),\n  .ds-grid__cell--featured {\n    transform: none;\n  }\n  .ds-section,\n  .ds-page-header,\n  .ds-cta,\n  .ds-footer {\n    margin-top: var(--space-7);\n  }\n  .ds-section__title,\n  .ds-page-header__title,\n  .ds-stat__value,\n  .ds-prose h1 {\n    font-size: var(--text-h2);\n  }\n  .ds-cta__title,\n  .ds-prose h2 {\n    font-size: calc(var(--text-h2) * 0.8);\n  }\n  .ds-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-sheet,\n  .ds-page-header__box,\n  .ds-cta,\n  .ds-footer {\n    padding: var(--space-5) var(--space-4);\n  }\n  .ds-page-header__actions .ds-button,\n  .ds-page-header__box .ds-buttons .ds-button {\n    flex: 1 1 auto;\n  }\n  .ds-backdrop {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-tabs {\n    gap: var(--space-1);\n    padding: 0 var(--space-2);\n  }\n  .ds-tabs__tab {\n    padding: 0 var(--space-2);\n    font-size: var(--text-small);\n  }\n  .ds-tabs__tab .ds-badge {\n    display: none;\n  }\n  .ds-table th,\n  .ds-table td {\n    padding-left: var(--space-2);\n    padding-right: var(--space-2);\n  }\n  .ds-notice,\n  .ds-list__item {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--space-1);\n  }\n  .ds-dialog__actions {\n    flex-wrap: wrap;\n  }\n}\n/* phone: the four views are one tab row of equal chunky cells, the current one filled */\n@media (max-width: 600px) {\n  .ds-nav {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-nav .ds-nav__links {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 0;\n    overflow: hidden;\n    border: var(--border-width) var(--border-style) var(--color-border);\n    border-radius: var(--radius-control);\n  }\n  .ds-nav__links li {\n    display: flex;\n    min-width: 0;\n  }\n  .ds-nav__links li + li {\n    border-left: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__link {\n    flex: 1;\n    justify-content: center;\n    min-width: 0;\n    min-height: var(--size-control);\n    padding: var(--space-1);\n    line-height: var(--line-heading);\n    text-align: center;\n    overflow-wrap: anywhere;\n    border: 0;\n    border-radius: 0;\n  }\n  .ds-nav__actions {\n    grid-column: 1 / -1;\n  }\n  .ds-nav__actions .ds-button,\n  .ds-nav__actions .ds-button--secondary {\n    display: inline-flex;\n    flex: 1;\n  }\n}\n",
    "specimen.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>chronoskin: neubrutalism landing specimen, sticker board layout</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <a class=\"ds-brand\" data-component=\"brand\" href=\"#home\">\n    <span class=\"ds-brand__mark\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linejoin=\"miter\" aria-hidden=\"true\"><polygon points=\"16.9,6.85 20,6.5 21.5,20 8,21.5 7.6,17.65 18,16.5\" fill=\"currentColor\" stroke=\"none\"/><polygon points=\"3,4.5 16.5,3 18,16.5 4.5,18\"/><circle cx=\"10.5\" cy=\"10.7\" r=\"2.5\" fill=\"currentColor\" stroke=\"none\"/></svg></span>\n    <span class=\"ds-brand__name\">chronoskin</span>\n  </a>\n  <ul class=\"ds-nav__links\" aria-label=\"Main\">\n    <li><a class=\"ds-nav__link\" href=\"#home\">Plans</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#guide\">Guide</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#timetable\">Timetable</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#class\">Glazing lab</a></li>\n  </ul>\n  <div class=\"ds-nav__actions\">\n    <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#timetable\">Log in</a>\n    <a class=\"ds-button ds-button--small\" href=\"#timetable\">Open a studio</a>\n  </div>\n</header>\n\n<main>\n<section class=\"ds-view ds-view--home\" id=\"home\">\n  <section class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-hero__claim\">\n      <span class=\"ds-badge ds-badge--plain\">Bookings for small studios</span>\n      <h1 class=\"ds-hero__title\">Fill every class, <span class=\"ds-hero__mark\">skip the</span> spreadsheet.</h1>\n      <p class=\"ds-hero__lead\">chronoskin takes bookings, keeps the waiting list and sends the reminder, so you can get back to the wheel, the mat or the loom.</p>\n      <div class=\"ds-hero__actions\">\n        <a class=\"ds-button ds-button--large\" href=\"#timetable\">Open a studio &rarr;</a>\n        <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#guide\">Read the guide</a>\n      </div>\n    </div>\n    <div class=\"ds-hero__collage\" aria-hidden=\"true\">\n      <div class=\"ds-sticker ds-sticker--1 ds-sticker--left ds-sticker--a\">\n        <div class=\"ds-sticker__row\"><p class=\"ds-sticker__title\">Wheel throwing</p><span class=\"ds-badge ds-badge--plain\">Tue</span></div>\n        <p class=\"ds-sticker__text\">18:30, six wheels, two places left.</p>\n      </div>\n      <div class=\"ds-sticker ds-sticker--right ds-sticker--b\">\n        <p class=\"ds-sticker__text\">Booked this week</p>\n        <p class=\"ds-sticker__figure\">47 of 52</p>\n        <div class=\"ds-sticker__row\"><span class=\"ds-badge ds-badge--success\">Nearly full</span><span class=\"ds-sticker__text\">5 waiting</span></div>\n      </div>\n      <div class=\"ds-sticker ds-sticker--2 ds-sticker--right ds-sticker--c\">\n        <div class=\"ds-sticker__row\"><p class=\"ds-sticker__title\">Glazing lab</p><span class=\"ds-badge ds-badge--plain\">Sat</span></div>\n        <p class=\"ds-sticker__text\">10:00, bring an apron.</p>\n      </div>\n      <div class=\"ds-sticker ds-sticker--3 ds-sticker--left ds-sticker--d\">\n        <p class=\"ds-sticker__text\">Reminder sent</p>\n        <p class=\"ds-sticker__title\">See you at 18:30, Noor.</p>\n      </div>\n      <span class=\"ds-stamp\">First month free</span>\n    </div>\n  </section>\n\n  <dl class=\"ds-stat\" data-component=\"stats\">\n    <div class=\"ds-stat__card\">\n      <dt class=\"ds-stat__label\">Classes booked last year</dt>\n      <dd class=\"ds-stat__value\">212,000</dd>\n    </div>\n    <div class=\"ds-stat__card\">\n      <dt class=\"ds-stat__label\">Fewer empty places</dt>\n      <dd class=\"ds-stat__value\">31%</dd>\n    </div>\n    <div class=\"ds-stat__card\">\n      <dt class=\"ds-stat__label\">Minutes to set up</dt>\n      <dd class=\"ds-stat__value\">12</dd>\n    </div>\n  </dl>\n\n  <section class=\"ds-section\">\n    <div class=\"ds-section__head\">\n      <span class=\"ds-badge\">Plans</span>\n      <h2 class=\"ds-section__title\">Pay for the room you fill</h2>\n      <p class=\"ds-section__lead\">Every plan has bookings, reminders and a waiting list. Move up or down whenever the timetable changes.</p>\n    </div>\n    <ul class=\"ds-grid\" data-component=\"grid\">\n      <li class=\"ds-grid__cell ds-grid__cell--1\">\n        <div class=\"ds-grid__head\">\n          <h3 class=\"ds-grid__title\">Drop-in</h3>\n          <p class=\"ds-grid__price\">0 <span class=\"ds-grid__per\">per month</span></p>\n        </div>\n        <div class=\"ds-grid__body\">\n          <p class=\"ds-grid__text\">One teacher, one room, trying it out.</p>\n          <ul class=\"ds-grid__features\">\n            <li class=\"ds-grid__feature\">20 bookings a month</li>\n            <li class=\"ds-grid__feature\">Email reminders</li>\n            <li class=\"ds-grid__feature is-off\">Waiting list</li>\n            <li class=\"ds-grid__feature is-off\">Class passes</li>\n          </ul>\n          <a class=\"ds-button ds-button--secondary ds-button--block\" href=\"#timetable\">Start free</a>\n        </div>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--2 ds-grid__cell--featured\">\n        <span class=\"ds-badge ds-grid__flag\">Most studios</span>\n        <div class=\"ds-grid__head\">\n          <h3 class=\"ds-grid__title\">Studio</h3>\n          <p class=\"ds-grid__price\">19 <span class=\"ds-grid__per\">per month</span></p>\n        </div>\n        <div class=\"ds-grid__body\">\n          <p class=\"ds-grid__text\">A full timetable and regulars who book ahead.</p>\n          <ul class=\"ds-grid__features\">\n            <li class=\"ds-grid__feature\">Unlimited bookings</li>\n            <li class=\"ds-grid__feature\">Email and text reminders</li>\n            <li class=\"ds-grid__feature\">Waiting list</li>\n            <li class=\"ds-grid__feature is-off\">Class passes</li>\n          </ul>\n          <a class=\"ds-button ds-button--block\" href=\"#timetable\">Choose Studio</a>\n        </div>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--3\">\n        <div class=\"ds-grid__head\">\n          <h3 class=\"ds-grid__title\">Collective</h3>\n          <p class=\"ds-grid__price\">39 <span class=\"ds-grid__per\">per month</span></p>\n        </div>\n        <div class=\"ds-grid__body\">\n          <p class=\"ds-grid__text\">Several teachers sharing rooms and members.</p>\n          <ul class=\"ds-grid__features\">\n            <li class=\"ds-grid__feature\">Unlimited bookings</li>\n            <li class=\"ds-grid__feature\">Email and text reminders</li>\n            <li class=\"ds-grid__feature\">Waiting list</li>\n            <li class=\"ds-grid__feature\">Class passes</li>\n          </ul>\n          <a class=\"ds-button ds-button--secondary ds-button--block\" href=\"#timetable\">Choose Collective</a>\n        </div>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--4\">\n        <div class=\"ds-grid__head\">\n          <h3 class=\"ds-grid__title\">Two doors</h3>\n          <p class=\"ds-grid__price\">69 <span class=\"ds-grid__per\">per month</span></p>\n        </div>\n        <div class=\"ds-grid__body\">\n          <p class=\"ds-grid__text\">More than one address under one name.</p>\n          <ul class=\"ds-grid__features\">\n            <li class=\"ds-grid__feature\">Everything in Collective</li>\n            <li class=\"ds-grid__feature\">Timetable per address</li>\n            <li class=\"ds-grid__feature\">Shared member list</li>\n            <li class=\"ds-grid__feature\">Monthly takings report</li>\n          </ul>\n          <a class=\"ds-button ds-button--secondary ds-button--block\" href=\"#timetable\">Choose Two doors</a>\n        </div>\n      </li>\n    </ul>\n  </section>\n\n  <section class=\"ds-section\">\n    <div class=\"ds-cols\">\n      <div>\n        <h2 class=\"ds-label\">From the notebook</h2>\n        <ul class=\"ds-list\" data-component=\"list\">\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Text reminders</a></h3>\n              <p class=\"ds-list__text\">One message the evening before, none after nine.</p>\n            </div>\n            <span class=\"ds-list__meta\">4 March</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Ten-class passes</a></h3>\n              <p class=\"ds-list__text\">Sell a pass once and let it count itself down.</p>\n            </div>\n            <span class=\"ds-list__meta\">18 February</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Substitute teachers</a></h3>\n              <p class=\"ds-list__text\">Swap the name and everyone booked is told.</p>\n            </div>\n            <span class=\"ds-list__meta\">30 January</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Printable door list</a></h3>\n              <p class=\"ds-list__text\">For the days the tablet stays in the bag.</p>\n            </div>\n            <span class=\"ds-list__meta\">12 January</span>\n          </li>\n        </ul>\n<div class=\"ds-carousel ds-follow\" data-component=\"carousel\">\n<ul class=\"ds-carousel__track\">\n<li class=\"ds-carousel__slide\"><blockquote class=\"ds-carousel__quote\">\"The waiting list fills the gaps before I notice them.\"</blockquote><p class=\"ds-carousel__who\"><span class=\"ds-avatar\" data-component=\"avatar\">NA</span> Noor A., pottery studio</p></li>\n<li class=\"ds-carousel__slide\"><blockquote class=\"ds-carousel__quote\">\"I stopped texting people on Sunday night.\"</blockquote><p class=\"ds-carousel__who\"><span class=\"ds-avatar ds-avatar--2\" data-component=\"avatar\">JB</span> Jonas B., yoga room</p></li>\n<li class=\"ds-carousel__slide\"><blockquote class=\"ds-carousel__quote\">\"Twelve minutes was about right.\"</blockquote><p class=\"ds-carousel__who\"><span class=\"ds-avatar ds-avatar--3\" data-component=\"avatar\">PC</span> Petra C., weaving loft</p></li>\n</ul>\n<div class=\"ds-carousel__controls\"><button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Previous\">&larr;</button><ol class=\"ds-carousel__dots\" aria-label=\"Quote 1 of 3\"><li class=\"ds-carousel__dot is-current\"></li><li class=\"ds-carousel__dot\"></li><li class=\"ds-carousel__dot\"></li></ol><button class=\"ds-carousel__arrow\" type=\"button\" aria-label=\"Next\">&rarr;</button></div>\n</div>\n      </div>\n      <div>\n        <h2 class=\"ds-label\">Moving in</h2>\n        <div class=\"ds-stack\">\n        <section class=\"ds-panel\" data-component=\"panel\">\n          <h3 class=\"ds-panel__title\">Bring your list</h3>\n          <div class=\"ds-panel__body\">\n            <p>Upload the spreadsheet you use now and your members are waiting when you log in.</p>\n            <a class=\"ds-link\" href=\"#guide\">How the import works</a>\n          </div>\n        </section>\n          <div class=\"ds-sheet\">\n            <p class=\"ds-sheet__text\">Never built a timetable before? The guide gets you from an empty week to the first booking in four short steps.</p>\n            <a class=\"ds-button ds-button--secondary\" href=\"#guide\">Read the guide</a>\n          </div>\n<div class=\"ds-accordion\" data-component=\"accordion\">\n<details class=\"ds-accordion__item\" open><summary class=\"ds-accordion__head\">Can I change plan mid month?</summary><div class=\"ds-accordion__body\"><p>Yes. The price follows from the next day.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">Do members need an account?</summary><div class=\"ds-accordion__body\"><p>No. They book with a name and an email.</p></div></details>\n<details class=\"ds-accordion__item\"><summary class=\"ds-accordion__head\">What if a teacher is ill?</summary><div class=\"ds-accordion__body\"><p>Swap the name and everyone booked is told.</p></div></details>\n</div>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-cta\">\n    <div>\n      <h2 class=\"ds-cta__title\">Open the doors on Monday</h2>\n      <p class=\"ds-cta__lead\">Twelve minutes to set up, one free month, and your list comes with you if you leave.</p>\n    </div>\n    <a class=\"ds-button ds-button--secondary ds-button--large\" href=\"#timetable\">Open a studio &rarr;</a>\n  </section>\n</section>\n\n<section class=\"ds-view\" id=\"guide\">\n  <section class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Home</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Guide</a></li>\n      <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Your first timetable</li>\n    </ol>\n    <div class=\"ds-page-header__box\">\n      <div>\n        <h1 class=\"ds-page-header__title\">Guide</h1>\n        <p class=\"ds-page-header__lead\">Four short steps from an empty week to the first booking.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#timetable\">Try it on your week</a>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-inner\">\n    <div class=\"ds-cols ds-cols--side\">\n      <article class=\"ds-sheet\">\n        <div class=\"ds-prose\" data-component=\"typography\">\n          <h1>Your first timetable</h1>\n          <p>A timetable is a list of classes, each with a room, a teacher and a number of places. Everything else can wait until somebody has booked.</p>\n          <h2>What a class needs</h2>\n          <p>Give it a name people would say out loud. Set the size in the field named <code>places</code> and leave the rest as it is.</p>\n          <ul>\n            <li>A start time and a length, not a vague \"evening\"</li>\n            <li>A size you can teach well, not the size of the room</li>\n            <li>One line on what to bring</li>\n          </ul>\n          <h3>After the first week</h3>\n          <p>Look at who came, <strong>thank the regulars</strong>, and copy the week forward. See <a href=\"#guide\">copying a week</a> for the short way.</p>\n        </div>\n      </article>\n      <div class=\"ds-stack\">\n        <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n          <h2 class=\"ds-sidebar__title\">In this guide</h2>\n          <ul class=\"ds-sidebar__list\">\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Adding a room</a><span class=\"ds-badge ds-badge--plain\">2 min</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Writing a class</a><span class=\"ds-badge ds-badge--plain\">4 min</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Passes and prices</a><span class=\"ds-badge ds-badge--plain\">3 min</span></li>\n            <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#guide\">Copying a week</a><span class=\"ds-badge ds-badge--plain\">1 min</span></li>\n          </ul>\n        </aside>\n        <section class=\"ds-panel\">\n          <h3 class=\"ds-panel__title\">Keep reading</h3>\n          <div class=\"ds-panel__body\">\n            <ul class=\"ds-links\" data-component=\"links\">\n              <li><a class=\"ds-link\" href=\"#guide\">Passes and prices</a></li>\n              <li><a class=\"ds-link is-visited\" href=\"#guide\">Adding a room</a></li>\n              <li><a class=\"ds-link is-hover\" href=\"#timetable\">This week's timetable</a></li>\n              <li><a class=\"ds-link is-active\" href=\"#class\">A class page</a></li>\n            </ul>\n          </div>\n        </section>\n<section class=\"ds-panel\"><h2 class=\"ds-panel__title\">Your first week</h2><div class=\"ds-panel__body\"><div class=\"ds-progress\" data-component=\"progress\"><p class=\"ds-progress__label\"><span>First timetable</span><span>Step 2 of 4</span></p><span class=\"ds-progress__track\"><span class=\"ds-progress__bar\"></span></span></div></div></section>\n      </div>\n    </div>\n  </section>\n</section>\n\n<section class=\"ds-view\" id=\"timetable\">\n  <section class=\"ds-page-header\" data-component=\"page-header\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\" aria-label=\"Breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">Kiln Lane Studio</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#timetable\">Timetable</a></li>\n      <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">This week</li>\n    </ol>\n    <div class=\"ds-page-header__box\">\n      <div>\n        <h1 class=\"ds-page-header__title\">This week</h1>\n        <p class=\"ds-page-header__lead\">Eleven classes, 47 of 52 places booked.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#timetable\">Print door list</a>\n        <a class=\"ds-button\" href=\"#timetable\">Add a class</a>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-inner\">\n    <div class=\"ds-cols ds-cols--side\">\n      <div class=\"ds-stack ds-stack--wide\">\n        <div class=\"ds-stack\" data-component=\"notice\">\n          <div class=\"ds-notice\" role=\"status\">\n            <strong class=\"ds-notice__title\">Heads up</strong>\n            <p class=\"ds-notice__text\">Open studio starts at 17:00 today and five places are still free.</p>\n          </div>\n          <div class=\"ds-notice ds-notice--error\" role=\"alert\">\n            <strong class=\"ds-notice__title\">Payment failed</strong>\n            <p class=\"ds-notice__text\">The card on file was declined. Update it to keep taking bookings.</p>\n          </div>\n        </div>\n        <div class=\"ds-folder\">\n          <ul class=\"ds-tabs\" data-component=\"tabs\" role=\"tablist\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#timetable\" role=\"tab\" aria-selected=\"true\">Classes</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#class\" role=\"tab\">Waiting <span class=\"ds-badge ds-badge--plain\">5</span></a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#timetable\" role=\"tab\">Passes</a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#timetable\" role=\"tab\">Past weeks</a></li>\n          </ul>\n          <div class=\"ds-folder__body\">\n            <div class=\"ds-folder__bar ds-folder__bar--top\">\n              <span class=\"ds-meta\">Showing 5 to 11 of 11</span>\n              <a class=\"ds-link\" href=\"#timetable\">Copy week forward</a>\n            </div>\n          <table class=\"ds-table ds-table--flush\" data-component=\"table\">\n            <thead>\n              <tr><th>Class</th><th>When</th><th class=\"ds-table__extra\">Teacher</th><th>Status</th><th class=\"ds-table__num\">Booked</th></tr>\n            </thead>\n            <tbody>\n              <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Wheel throwing</a></td><td>Tue 18:30</td><td class=\"ds-table__extra\">Ines</td><td><span class=\"ds-badge ds-badge--warning\">2 left</span></td><td class=\"ds-table__num\">4 of 6</td></tr>\n              <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Hand building</a></td><td>Wed 10:00</td><td class=\"ds-table__extra\">Tomas</td><td><span class=\"ds-badge ds-badge--success\">Full</span></td><td class=\"ds-table__num\">8 of 8</td></tr>\n              <tr class=\"is-current\"><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Open studio</a></td><td>Thu 17:00</td><td class=\"ds-table__extra\">Ines</td><td><span class=\"ds-badge ds-badge--strong\">Today</span></td><td class=\"ds-table__num\">5 of 10</td></tr>\n              <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Kids and clay</a></td><td>Fri 16:00</td><td class=\"ds-table__extra\">Mara</td><td><span class=\"ds-badge ds-badge--danger\">Cancelled</span></td><td class=\"ds-table__num\">0 of 8</td></tr>\n              <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Glazing lab</a></td><td>Sat 10:00</td><td class=\"ds-table__extra\">Tomas</td><td><span class=\"ds-badge ds-badge--success\">Full</span></td><td class=\"ds-table__num\">9 of 9</td></tr>\n              <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Sunday slow wheel</a></td><td>Sun 11:00</td><td class=\"ds-table__extra\">Ines</td><td><span class=\"ds-badge ds-badge--plain\">Open</span></td><td class=\"ds-table__num\">2 of 6</td></tr>\n              <tr><td><a class=\"ds-link ds-link--quiet\" href=\"#class\">Raku afternoon</a></td><td>Sun 14:30</td><td class=\"ds-table__extra\">Mara</td><td><span class=\"ds-badge ds-badge--warning\">1 left</span></td><td class=\"ds-table__num\">7 of 8</td></tr>\n            </tbody>\n          </table>\n            <div class=\"ds-folder__bar ds-folder__bar--bottom\">\n              <ul class=\"ds-pagination\" data-component=\"pagination\" aria-label=\"Pages\">\n                <li><a class=\"ds-pagination__link\" href=\"#timetable\">&larr; Previous</a></li>\n                <li><a class=\"ds-pagination__link\" href=\"#timetable\">1</a></li>\n                <li><a class=\"ds-pagination__link is-current\" href=\"#timetable\" aria-current=\"page\">2</a></li>\n                <li><a class=\"ds-pagination__link\" href=\"#timetable\">3</a></li>\n                <li><a class=\"ds-pagination__link\" href=\"#timetable\">Next &rarr;</a></li>\n              </ul>\n            </div>\n          </div>\n        </div>\n      </div>\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">Add a class</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\">Class name</label>\n              <input class=\"ds-form__control\" id=\"f-name\" type=\"text\" value=\"Sunday slow wheel\">\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-places\">Places</label>\n              <input class=\"ds-form__control is-invalid\" id=\"f-places\" type=\"text\" value=\"many\" aria-invalid=\"true\" aria-describedby=\"f-places-err\">\n              <p class=\"ds-form__error\" id=\"f-places-err\">Enter a number between 1 and 40.</p>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-room\">Room</label>\n              <select class=\"ds-form__control\" id=\"f-room\">\n                <option>Wheel room</option>\n                <option>Long table</option>\n                <option>Yard</option>\n              </select>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-note\">What to bring</label>\n              <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-note\">An apron and short nails.</textarea>\n              <p class=\"ds-form__hint\">One line is enough.</p>\n            </div>\n            <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Open a waiting list</label>\n<div class=\"ds-switch-row\"><label class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>Let members bring a friend</span></label><span class=\"ds-tooltip\" data-component=\"tooltip\"><button class=\"ds-tooltip__trigger\" type=\"button\" aria-describedby=\"tip-1\">?</button><span class=\"ds-tooltip__tip\" id=\"tip-1\" role=\"tooltip\">A friend takes one place and is counted in the total.</span></span></div>\n            <div class=\"ds-buttons\">\n              <button class=\"ds-button\" type=\"button\">Save class</button>\n              <a class=\"ds-button ds-button--secondary\" href=\"#timetable\">Cancel</a>\n            </div>\n          </form>\n        </div>\n      </section>\n    </div>\n  </section>\n</section>\n\n<section class=\"ds-view\" id=\"class\">\n  <section class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#timetable\">Timetable</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#timetable\">This week</a></li>\n      <li class=\"ds-breadcrumb__item is-current\" aria-current=\"page\">Glazing lab</li>\n    </ol>\n    <div class=\"ds-page-header__box\">\n      <div>\n        <h1 class=\"ds-page-header__title\">Glazing lab</h1>\n        <p class=\"ds-page-header__lead\">Saturday at 10:00 with Tomas. Nine of nine places booked.</p>\n      </div>\n      <div class=\"ds-buttons\" data-component=\"buttons\">\n        <button class=\"ds-button\" type=\"button\">Message everyone</button>\n        <button class=\"ds-button ds-button--secondary\" type=\"button\">Print list</button>\n        <button class=\"ds-button ds-button--danger\" type=\"button\">Cancel class</button>\n        <button class=\"ds-button\" type=\"button\" disabled>Class full</button>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-inner\">\n    <div class=\"ds-cols ds-cols--side\">\n      <div class=\"ds-stack\">\n        <div class=\"ds-row\">\n          <h2 class=\"ds-label ds-label--flush\">Booked</h2>\n          <div class=\"ds-badges\" data-component=\"badge\">\n            <span class=\"ds-badge\">Popular</span>\n            <span class=\"ds-badge ds-badge--alt\">New</span>\n            <span class=\"ds-badge ds-badge--strong\">Pass</span>\n            <span class=\"ds-badge ds-badge--success\">Booked</span>\n            <span class=\"ds-badge ds-badge--warning\">Waiting</span>\n            <span class=\"ds-badge ds-badge--danger\">Cancelled</span>\n          </div>\n        </div>\n        <ul class=\"ds-list\">\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\">Noor A.</h3>\n              <p class=\"ds-list__text\">Ten-class pass, six left.</p>\n            </div>\n            <span class=\"ds-badge ds-badge--success\">Booked</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\">Jonas B.</h3>\n              <p class=\"ds-list__text\">First class, paid at the door.</p>\n            </div>\n            <span class=\"ds-badge ds-badge--alt\">New</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\">Petra C.</h3>\n              <p class=\"ds-list__text\">Ten-class pass, one left.</p>\n            </div>\n            <span class=\"ds-badge ds-badge--success\">Booked</span>\n          </li>\n          <li class=\"ds-list__item\">\n            <div>\n              <h3 class=\"ds-list__title\">Sam D.</h3>\n              <p class=\"ds-list__text\">Gave the place back on Thursday.</p>\n            </div>\n            <span class=\"ds-badge ds-badge--danger\">Cancelled</span>\n          </li>\n        </ul>\n      </div>\n      <div>\n        <h2 class=\"ds-label\">Waiting list</h2>\n        <div class=\"ds-empty\" data-component=\"empty\">\n          <h3 class=\"ds-empty__title\">Nobody is waiting</h3>\n          <p class=\"ds-empty__text\">When a place is given back, the first person here gets it and a message.</p>\n          <a class=\"ds-button ds-button--small\" href=\"#timetable\">Back to the week</a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"ds-inner\">\n    <div class=\"ds-backdrop\">\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\">Cancel Saturday's class?</h2>\n          <a class=\"ds-dialog__close\" href=\"#timetable\" aria-label=\"Close\">&times;</a>\n        </div>\n        <div class=\"ds-dialog__body\">\n          <p>All nine people booked get a message and their place back on their pass. This cannot be undone.</p>\n        </div>\n        <div class=\"ds-dialog__actions\">\n          <a class=\"ds-button ds-button--secondary\" href=\"#timetable\">Keep it</a>\n          <button class=\"ds-button ds-button--danger\" type=\"button\">Cancel class</button>\n        </div>\n      </div>\n    </div>\n  </section>\n</section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <div class=\"ds-footer__inner\">\n    <div>\n      <p class=\"ds-footer__brand\">chronoskin</p>\n      <p class=\"ds-footer__text\">Class bookings for small studios. Placeholder company, placeholder address.</p>\n    </div>\n    <div>\n      <p class=\"ds-footer__title\">Product</p>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#timetable\">Bookings</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#class\">Waiting list</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Plans</a></li>\n      </ul>\n    </div>\n    <div>\n      <p class=\"ds-footer__title\">Learn</p>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#guide\">Guide</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Notebook</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#guide\">First timetable</a></li>\n      </ul>\n    </div>\n    <div>\n      <p class=\"ds-footer__title\">Company</p>\n      <ul class=\"ds-footer__list\">\n        <li><a class=\"ds-footer__link\" href=\"#home\">Terms</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Privacy</a></li>\n        <li><a class=\"ds-footer__link\" href=\"#home\">Contact</a></li>\n      </ul>\n    </div>\n  </div>\n  <p class=\"ds-footer__legal\">Specimen page. All names and figures are placeholders.</p>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.neubrutalism.landing.s04.p03.t03.u01.dc\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"neubrutalism\",\n    \"years\": [\n      2021,\n      2026\n    ]\n  },\n  \"archetype\": \"landing\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1440,\n    \"fluid\": true,\n    \"responsive\": true\n  },\n  \"source\": \"https://chrono.skin/s/v1-nb-4331-dc\",\n  \"short\": \"v1-nb-4331-dc\",\n  \"density\": \"compact\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #dcebfe;\n  --color-canvas: #dcebfe;\n  --color-surface: #ffffff;\n  --color-surface-alt: #88c5ee;\n  --color-surface-strong: #5294ff;\n  --color-bar: #ffffff;\n  --color-bar-text: #000000;\n  --color-bar-alt: #5294ff;\n  --color-bar-alt-text: #000000;\n  --color-inverse: #000000;\n  --color-inverse-text: #ffffff;\n  --color-text: #000000;\n  --color-text-muted: #666666;\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: #b3b3b3;\n  --color-accent: #05e17a;\n  --color-accent-text: #000000;\n  --color-accent-alt: #facc00;\n  --color-fill-1: #5294ff;\n  --color-fill-2: #05e17a;\n  --color-fill-3: #facc00;\n  --color-fill-4: #b6ace4;\n  --color-button: #5294ff;\n  --color-button-text: #000000;\n  --color-button-hover-text: #000000;\n  --color-button-secondary: #ffffff;\n  --color-button-secondary-text: #000000;\n  --color-input: #ffffff;\n  --color-input-text: #000000;\n  --color-input-border: #000000;\n  --color-disabled: #aeaeae;\n  --color-disabled-text: #303030;\n  --color-danger: #dc341e;\n  --color-danger-surface: #ee8888;\n  --color-success: #05e17a;\n  --color-warning: #facc00;\n  --color-notice: #b6ace4;\n  --color-notice-text: #000000;\n  --color-focus: #000000;\n  --color-shadow: #000000;\n  --color-overlay: rgb(0 0 0 / 0.75);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Public Sans\", \"DM Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-heading: \"Public Sans\", \"DM Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-ui: \"Public Sans\", \"DM Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --text-base: 16px;\n  --text-small: 14px;\n  --text-ui: 16px;\n  --text-large: 24px;\n  --text-display: 72px;\n  --text-h1: 48px;\n  --text-h2: 36px;\n  --text-h3: 22px;\n  --line-body: 1.5;\n  --line-heading: 1.1;\n  --line-display: 1.1;\n  --weight-body: 500;\n  --weight-bold: 700;\n  --weight-heading: 800;\n  --weight-display: 900;\n  --weight-ui: 600;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: none;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 2px;\n  --border-width-strong: 3px;\n  --border-style: solid;\n  --radius-control: 5px;\n  --radius-panel: 5px;\n  --radius-pill: 5px;\n  --radius-page: 5px;\n  --shadow-panel: 4px 4px 0 0 var(--color-shadow);\n  --shadow-control: 4px 4px 0 0 var(--color-shadow);\n  --shadow-control-hover: 2px 2px 0 0 var(--color-shadow);\n  --shadow-control-pressed: 0 0 0 0 var(--color-shadow);\n  --shadow-dialog: 4px 4px 0 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page:\n    linear-gradient(90deg, color-mix(in srgb, var(--color-border-muted) 45%, transparent) 1px, transparent 0) 0 0 / 70px 70px,\n    linear-gradient(color-mix(in srgb, var(--color-border-muted) 45%, transparent) 1px, transparent 0) 0 0 / 70px 70px,\n    var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: transform 0.15s ease, box-shadow 0.15s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
