{
  "id": "v1-nb-4322-dr",
  "long_id": "v1.neubrutalism.landing.s04.p03.t02.u02.dr",
  "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": "roomy",
  "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-4322-dr",
  "preview_url": "https://chrono.skin/s/v1-nb-4322-dr/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- The page, the canvas and every surface are one white (`--color-page`, `--color-canvas`, `--color-surface` #ffffff); cells are told apart by black rules and by flat saturated fills, not by tints. Table rows do not alternate.\n- `--color-surface-strong` and `--color-accent` are pink #ff90e8 with black text: panel, dialog and hero card title strips, the current navigation item, tab and page, the default badge, the highlight behind a hovered link. `--color-surface-alt` is yellow #ffc900: the hero stage, the actions cell of the page header, the empty state, the current table row, inline code, a hovered tab. `--color-accent-alt` is lemon #f1f333: the marked words of the hero title and \"new\" badges.\n- `--color-fill-1` to `--color-fill-4` are pink #ff90e8, yellow #ffc900, teal #23a094 and periwinkle #90a8ed, always with black text: every second cell of the grid and the left half of the call to action. Use each once before repeating.\n- The primary button is black with white text (`--color-button` #000000, `--color-button-text` #ffffff), and so is the last navigation cell; the secondary button is white. The tag strip (`--color-bar-alt`) and the footer (`--color-inverse`) are the same black with white text; the navigation row and the table head (`--color-bar`) are white.\n- Text, headings, every link colour, borders, focus and shadow are #000000. `--color-text-muted` is #666666 (dates, hints, the count beside the tabs), `--color-border-muted` #b3b3b3 (dividers of the sidebar list), disabled is #aeaeae with #303030 text.\n- Status: `--color-success` teal #23a094, `--color-warning` yellow #ffc900, `--color-danger` red #dc341e (error text, the destructive button, the danger badge), `--color-danger-surface` #e2442f behind an error notice, `--color-notice` periwinkle #90a8ed. All carry black text.\n- One geometric sans for body, headings and controls (`--font-body`, `--font-heading`, `--font-ui`: Google Sans Flex, Albert Sans, then Avenir Next); `--font-mono` only for inline code.\n- Nothing is bold. `--weight-body`, `--weight-heading`, `--weight-display` and `--weight-ui` are 400; `--weight-bold` is 500 and is the only emphasis (buttons, labels, badges, strong text, the tag strip). Size carries the hierarchy.\n- `--text-base` 18px at `--line-body` 1.55; `--text-small` 14px for labels, meta, table heads, grid cell text and the footer; `--text-ui` 16px for navigation, buttons, inputs, tabs and the tag strip; `--text-large` 24px for leads, large buttons and the brand.\n- `--text-display` 60px at `--line-display` 1.1 for the hero title; `--text-h1` 48px (prose h1, the inner page title, stat figures, the call to action, the footer brand), `--text-h2` 36px (section heads, prose h2) and `--text-h3` 24px (grid cell, cell label, panel, sidebar, dialog and empty-state titles) at `--line-heading` 1.25. No tracking, no uppercase headings.\n- Uppercase is used only for 12px labels: `.ds-badge` and `.ds-footer__title`. 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`); navigation, titles and breadcrumbs are not (`--link-decoration-quiet`). Visited links are not marked.\n- `--border-width` is a 1px black hairline on every box and rule; `--border-width-strong` 2px only under the navigation.\n- Corners: `--radius-control` 4px on buttons, inputs and icon boxes; `--radius-panel` and `--radius-page` 0, so cards, panels and dialogs are square; `--radius-pill` 9999px, so badges and the current navigation item are full pills.\n- Nothing has a shadow at rest: `--shadow-panel` and `--shadow-control` are `none`, so the hero cards are told apart by their overlap and outline. A hard shadow appears with interaction only: `--shadow-control-hover` is `2px 2px 0 0` black (also the pagination squares and icon boxes), `--shadow-control-pressed` is `none`, and the dialog alone floats on `--shadow-dialog` `4px 4px 0 0`.\n- All fills are flat (`--fill-page` is the plain page colour, no grid); `--fill-button-hover` equals `--fill-button`, hover moves the button and gives it its shadow.\n- `--focus-ring` is `2px solid` black; `--transition` animates only `transform` and `box-shadow` over 0.14s.\n\nSpacing is roomy: every `--space-*` token of the layout was multiplied by 1.25. Where the Layout section names a spacing in pixels, the tokens are right.\n\n## Components\n\n- `.ds-page`: on `<body>`. 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 <= 10px`: table and list rows touch and are divided by rules; plain lists of features and links sit at most 8px apart.\n- `block-gap <= 100px`: 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`: nothing is bold; 500 is the strongest weight.\n- `font-weight >= 400`: no light weights.\n- `font-size <= 60px`: the hero title is the largest text.\n- `font-size >= 12px`: badge and footer labels are the smallest text.\n- `font-families <= 2`: one sans and a monospace for code.\n- `line-height <= 1.55`: body text is set at 1.55.\n- `letter-spacing = 0px`: nothing is tracked.\n- `uppercase-text <= 5%`: only 12px badges and footer labels are uppercase.\n- `underlined-links <= 20%`: only links in running text are underlined.\n- `border-width <= 2px`: rules are 1px hairlines, 2px only under the navigation; heavy outlines belong to other variants.\n- `border-radius <= 4px`: controls have 4px corners and every larger box is square; badges are pills, which are shapes.\n- `box-shadow-blur <= 0px`: the few shadows are hard offset blocks.\n- `text-shadow = none`: no text shadow.\n- `gradient-fills <= 0%`: every fill is flat, including the page.\n- `animation = none`: nothing moves on its own; the tag strip stands still.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything that is a box 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: 5px;\n  --space-2: 10px;\n  --space-3: 15px;\n  --space-4: 20px;\n  --space-5: 30px;\n  --space-6: 40px;\n  --space-7: 60px;\n  --space-8: 100px;\n  --space-gutter: 40px;\n  --space-nudge: 3px;\n  --space-press: 5px;\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.t02.u02.dr\",\n  \"library\": \"2026.10.09-1036\",\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-4322-dr\",\n  \"short\": \"v1-nb-4322-dr\",\n  \"density\": \"roomy\"\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: \"Google Sans Flex\", \"Albert Sans\", \"Avenir Next\", Avenir, \"Century Gothic\", sans-serif;\n  --font-heading: \"Google Sans Flex\", \"Albert Sans\", \"Avenir Next\", Avenir, \"Century Gothic\", sans-serif;\n  --font-ui: \"Google Sans Flex\", \"Albert Sans\", \"Avenir Next\", Avenir, \"Century Gothic\", sans-serif;\n  --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n  --text-base: 18px;\n  --text-small: 14px;\n  --text-ui: 16px;\n  --text-large: 24px;\n  --text-display: 60px;\n  --text-h1: 48px;\n  --text-h2: 36px;\n  --text-h3: 24px;\n  --line-body: 1.55;\n  --line-heading: 1.25;\n  --line-display: 1.1;\n  --weight-body: 400;\n  --weight-bold: 500;\n  --weight-heading: 400;\n  --weight-display: 400;\n  --weight-ui: 400;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 0;\n  --figure-shift: 0em;\n  --ui-transform: none;\n  --link-decoration: underline;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 2px;\n  --border-style: solid;\n  --radius-control: 4px;\n  --radius-panel: 0;\n  --radius-pill: 9999px;\n  --radius-page: 0;\n  --shadow-panel: none;\n  --shadow-control: none;\n  --shadow-control-hover: 2px 2px 0 0 var(--color-shadow);\n  --shadow-control-pressed: none;\n  --shadow-dialog: 4px 4px 0 0 var(--color-shadow);\n  --shadow-text: none;\n  --fill-page: var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: transform 0.14s ease-out, box-shadow 0.14s ease-out;\n  --backdrop-blur: 0px;\n}\n"
  }
}
