{
  "id": "v1-nb-8323",
  "long_id": "v1.neubrutalism.portal.s08.p03.t02.u03",
  "name": "Neubrutalism portal, events sheet with folder tabs (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": "portal",
  "mode": "mix",
  "viewport": {
    "width": 1440,
    "fluid": true,
    "responsive": true
  },
  "summary": "A community notice board in the rounded, friendly strand of neubrutalism: the brand stands on the page colour, a row of folder tabs is the navigation, and every view is laid out inside one big outlined sheet that stands on a hard, unblurred shadow. It was common from about 2021 to 2026 for event calendars, meetup and club pages, community directories and the small portals of neighbourhood groups. Dates are the pictures: a tilted ticket with a filled stub, a week of day cells with coloured heads, list rows led by a date square.",
  "url": "https://chrono.skin/s/v1-nb-8323",
  "preview_url": "https://chrono.skin/s/v1-nb-8323/specimen.html",
  "files": {
    "STYLE.md": "# Neubrutalism portal, events sheet with folder tabs (2021 to 2026)\n\n## Summary\n\nA community notice board in the rounded, friendly strand of neubrutalism: the brand stands on the page colour, a row of folder tabs is the navigation, and every view is laid out inside one big outlined sheet that stands on a hard, unblurred shadow. It was common from about 2021 to 2026 for event calendars, meetup and club pages, community directories and the small portals of neighbourhood groups. Dates are the pictures: a tilted ticket with a filled stub, a week of day cells with coloured heads, list rows led by a date square.\n\n## Layout\n\n- The page is fluid in its background only: `--size-page` is 100%, and the brand row, the tabs, the sheet and the footer share one centred width of `--size-content` (1180px), with at least `--space-gutter` (28px) at the sides. Designed at a 1440px viewport; the page colour and its pattern always show left and right of the sheet.\n- Order of a page: a full-width ticker line on `--fill-bar-alt`, the brand row (the `.ds-brand` at the left, an avatar and two small buttons at the right, standing on the page), the folder tabs, the sheet (`.ds-main`), and the footer as an inverted card under it.\n- Navigation is the row of folder tabs: each `.ds-nav__link` is a `--fill-bar` tab with an outline on three sides and rounded top corners, standing on the sheet's top edge. The current tab is filled with the accent and stands `--space-2` taller. The last tab is a `.ds-menu`. The tabs start `calc(var(--radius-page) / 2 + var(--space-4))` in from the sheet's corner.\n- The sheet is `--color-canvas` with a `--border-width-strong` outline, `--radius-page` corners, the `--shadow-dialog` shadow and `--space-7` (40px) of padding. Blocks inside it are `--space-7` apart (`.ds-column`); blocks in a `.ds-stack` are `--space-5` (20px) apart.\n- The home view: the `.ds-hero` (the claim at the left, the next event as a tilted `.ds-ticket` at the right), the inverted `.ds-stat` strip of four figures, the week (`.ds-row` with a `.ds-label`, then the `.ds-grid` of five day cells), and a `.ds-split` with the `.ds-list` of new events beside a `.ds-panel`.\n- Inner pages keep everything outside the sheet and drop the hero. Inside the sheet they start with a `.ds-page-header`: a `--color-surface-alt` box holding the breadcrumb, then the `--text-h1` title and one line of lead on the left and the page's actions on the right, centred on the row. Below it comes one `.ds-split`: a main column and a `--size-side` (320px) column on the right. Tabs are the first row of the main column, above the table; filters, the small month and the kinds of event are in the side column.\n- Spacing scale: `--space-1` 4px (gap between tabs and between month squares, inline code), `--space-2` 8px (badge padding, gaps between chips, label to control, overlap of stacked avatars), `--space-3` 12px (gap between list rows and accordion bars, row padding), `--space-4` 16px (panel and card padding, gap between buttons and between day cells), `--space-5` 20px (gap between stacked blocks, button side padding), `--space-6` 28px (gap between split columns, page header side padding), `--space-7` 40px (sheet padding, gap between the blocks of a view, hero gap), `--space-8` 56px (space under the footer).\n- Movement tokens: `--space-nudge` 2px (hover offset, focus offset) and `--space-press` 4px (pressed offset, the red shadow of an invalid field). A control sinks straight down.\n- Fixed sizes: `--size-control` 44px (buttons, inputs, folder tabs), `--size-control-large` 54px (hero buttons), `--size-control-small` 34px (small buttons, tab segments, pagination, step numbers), `--size-logo` 38px, `--size-avatar` 36px, `--size-date` 60px (the date square of a list row), `--size-stub` 150px (the ticket's stub), `--size-check` 20px, `--size-switch` 44px, `--size-bar` 14px, `--size-menu` 220px, `--size-tip` 200px, `--size-dialog` 440px.\n- Below 1000px the hero and every split stack, the ticket is no longer tilted, the week goes to three columns and the stat strip to two. Below 600px the side margins shrink to `--space-3`, the folder tabs become a wrapping row of fully outlined chips above the sheet, the sheet's outline thins to `--border-width` and its padding to `--space-3`, the week and form rows are one column, titles step down (`calc()` over `--text-h1` and `--text-h2`), hero and page header buttons fill the width, the tab bar stretches across, list rows wrap their meta line, and table columns marked `.ds-table__extra` are hidden so that a table never scrolls sideways. On a phone `.ds-nav__links` is one strip of cells, each 29% of the width, that scrolls sideways with the scrollbar hidden and ruled top and bottom; the current link keeps its mark, and on the last two views the strip starts at its far end so that the current cell is in view. The drop-down item (\"Places\") leaves the strip, because a menu cannot open inside a scrolling strip, and its places are reached from the calendar view.\n- Views: the specimen is one example site, a neighbourhood events board, with five views switched by plain `#name` links. `home` is this week (hero with the next event's ticket, stat strip, the next five days, newly pinned events beside the host of the month). `calendar` is the month as a list: page header with the breadcrumb, tabs, the events table, pagination and the key of labels, with the small month, two switches and the kinds of event in the side column. `event` is one event: a notice, what happens, who is coming and the booking dialog, with the details, a short accordion and an empty questions box at the side. `post` is the form to post an event: notices, the form with its switches and buttons, the three steps and the reader at the side. `guide` is the host guide on a sheet with further links, beside the questions accordion and a panel. The tabs mark 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\n## Components\n\n- `.ds-page`: on `<body>`. Sets the page fill with its pattern, the base font and colour. The header, `.ds-main` and the footer are its children.\n- `.ds-brand`: the site's mark and name, first in the brand row and a link to the home view. `.ds-brand__mark` is a round `--size-logo` tile dressed like the primary button (`--fill-button`, `--color-button-text`, the outline, a small hard shadow); the mark is drawn with round caps and a 2.6 stroke. `.ds-brand__name` is the name in the heading face at `--text-h2`. The name `chronoskin` and its mark are placeholders for the installing project's own name and logo.\n- `.ds-nav`: the header. `.ds-nav__strip` is the ticker line with a `.ds-nav__strip-link`. `.ds-nav__top` holds the brand and `.ds-nav__actions` (an avatar and two small buttons). `.ds-nav__links` is the row of folder tabs, each a `.ds-nav__link` (`is-current`, `is-hover`, `is-focus`).\n- `.ds-menu`: a drop-down under the last folder tab, a `<details>` whose `<summary>` is a `.ds-nav__link` with `.ds-menu__trigger` (it shows a plus, a minus when open). `.ds-menu__list` is an outlined, shadowed box of `.ds-menu__item` rows divided by faint rules, each a `.ds-menu__link` that may end in a plain badge. Use it for places or categories that would not fit the tab row.\n- `.ds-main`: the sheet. Every `.ds-view` is inside it; `.ds-column` spaces a view's blocks.\n- `.ds-hero`: the introduction of the home view, standing directly on the sheet: `.ds-hero__text` with an optional badge, `.ds-hero__title` at display size, `.ds-hero__lead` and `.ds-hero__actions` (one primary and one secondary large button), beside a `.ds-ticket`. One per site.\n- `.ds-ticket`: one event as a ticket turned 2 degrees, with the dialog shadow: `.ds-ticket__stub` is the filled left part with `.ds-ticket__day` lines around a `.ds-ticket__number`; `.ds-ticket__body` holds badges, `.ds-ticket__title`, a `.ds-ticket__meta` line, a progress bar and the people going. Only the ticket is tilted; never turn a card, a row or text.\n- `.ds-stat`: the row of summary figures, one inverted strip (`--fill-inverse`) of four `.ds-stat__cell`, each a `.ds-stat__value` (`--text-h1`) over a `.ds-stat__label`, centred. Use under the hero.\n- `.ds-grid`: the week, five day cells. Each `.ds-grid__cell` (`--1` to `--4` set the head's fill; without one the head is `--color-surface-alt`) has a `.ds-grid__head` with `.ds-grid__day` and `.ds-grid__date`, and a `.ds-grid__body` list of `.ds-grid__event` items divided by faint rules: a `.ds-grid__time` in the monospace face over a `.ds-grid__title`. `.ds-grid__text` is a muted line for a day with room left.\n- `.ds-month`: a small calendar, a seven-column grid of `.ds-month__day` squares (`--head` for the weekday letters). `is-busy` outlines a day that has events, `is-current` fills today with the accent.\n- `.ds-page-header`: the head of an inner page, a filled outlined box: the `.ds-breadcrumb`, then `.ds-page-header__row` with `.ds-page-header__main` (`.ds-page-header__title`, `.ds-page-header__lead`) and `.ds-page-header__actions`. One per inner view.\n- `.ds-split`, `.ds-stack`, `.ds-row`, `.ds-label`, `.ds-note`: layout helpers. `.ds-split` is a main column and the 320px side column (`.ds-split--even` for halves); `.ds-stack` stacks blocks; `.ds-row` puts a heading and a link, or tabs and a count, on one line; `.ds-label` is a section heading; `.ds-note` is a muted line.\n- `.ds-prose`: long text: h1, h2, h3, p, ul, ol, strong, inline code (outlined, on `--color-surface-alt`) and links are styled. `.ds-sheet` is the outlined box an article sits on, inside the big sheet.\n- `.ds-link`: a link in content: lemon, underlined. `.ds-link--quiet` is cream without the underline, for titles, breadcrumbs and sidebar items. States `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-links` lays several out in a row.\n- `.ds-button`: lemon, indigo bold text, 2px outline, hard shadow, 44px tall, 12px corners. `.ds-button--secondary` is cream. `.ds-button--danger` is the destructive action, flat red with `--color-text`; use it once per view. `.ds-button--large` for the hero, `.ds-button--small` for the brand row and empty states, `.ds-button--wide` fills its box. `is-hover` sinks it 2px, `is-active` 4px with no shadow left, `is-disabled` is flat and dim, `is-focus` adds the dashed ring. `.ds-buttons` is a row of them.\n- `.ds-badge`: a small pill label, coral with indigo text by default. `.ds-badge--alt` deep green, `.ds-badge--plain` on the surface colour (counts). Status labels: `.ds-badge--success` (open, going), `.ds-badge--warning` (few left, not sure), `.ds-badge--danger` (full), all with `--color-text` and the outline. `.ds-badges` is a row of them.\n- `.ds-avatar`: a neighbour as initials on a filled circle (`--2`, `--3`, `--4` change the fill; `--small` for the brand row, `--large` with a shadow for a profile). `.ds-person` puts one beside a `.ds-person__name` and a `.ds-person__role`. `.ds-avatars` overlaps several in a row and ends with `.ds-avatars__more`.\n- `.ds-progress`: how far something is: a `.ds-progress__label` line over a `.ds-progress__track` pill holding a `.ds-progress__bar` whose width is set by `--10`, `--25`, `--70` or `--85` (50% without one). Use for places taken and for how complete a form is. `.ds-steps` is a numbered list of stages: `is-done` turns the number green, `is-current` fills it with the accent.\n- `.ds-switch`: an on and off control: a `<label>` holding a hidden `.ds-switch__input` checkbox, the `.ds-switch__track` pill and the text. On, the track is filled with the accent and the knob moves right. Use for filters and for yes or no settings of an event.\n- `.ds-tooltip`: a hint. `.ds-tooltip__trigger` is a small round button with a question mark; `.ds-tooltip__tip` is an inverted outlined box that shows above it on hover or focus (`is-open` on the wrapper shows it by hand).\n- `.ds-accordion`: questions that open and close. Each `<details class=\"ds-accordion__item\">` is its own outlined bar with a small shadow, `--space-3` from the next; `.ds-accordion__head` is the `<summary>`, bold, with a plus sign; open, the head is filled with `--color-surface-alt`, shows a minus and stands over `.ds-accordion__body`.\n- `.ds-form`: stacked fields: `.ds-form__field` with a bold small `.ds-form__label` over a `.ds-form__control` (input, select; `.ds-form__control--area` for a textarea), then `.ds-form__hint` or `.ds-form__error`. `.ds-form__row` puts two fields side by side, `.ds-form__toggles` a row of switches, `.ds-form__foot` the buttons over a faint rule. `is-focus` adds the ring and a small shadow, `is-invalid` turns the border red with a red shadow below, `is-disabled` dims it. `.ds-form__check` wraps a `.ds-form__checkbox` and its text.\n- `.ds-table`: one outlined, shadowed box. The head row is filled like a bar (`--fill-bar`) with bold small text over a full rule; rows are divided by faint `--color-border-muted` rules; `is-current` on a row fills it with `--color-surface-alt` and makes it bold. `.ds-table__num` right-aligns numbers; a cell with `.ds-table__extra` is dropped below 600px.\n- `.ds-list`: separate rows, each a small outlined ticket (`.ds-list__item`) led by a `.ds-list__date` square (the month over a `.ds-list__number`) or an avatar, then `.ds-list__main` (`.ds-list__title`, `.ds-list__text`) and a muted `.ds-list__meta` or a badge at the right.\n- `.ds-panel`: outlined, shadowed box with a `--color-surface-strong` `.ds-panel__title` strip over a rule and a `.ds-panel__body` that spaces its children. `.ds-panel--plain` makes the strip `--fill-bar` with `--color-bar-text`. `.ds-facts` is a two-column list of `.ds-facts__term` and `.ds-facts__value` for a panel.\n- `.ds-tabs`: one outlined bar cut into segments (`.ds-tabs__item` holding a `.ds-tabs__tab`); the current one (`is-current`) is filled with the accent, `is-hover` with `--color-surface-alt`. Use for two to four cuts of one list. Not to be confused with the folder tabs, which are the site navigation.\n- `.ds-sidebar`: a `.ds-sidebar__title` over a `.ds-sidebar__list` of separate outlined chips (`.ds-sidebar__item`), each a quiet link and a count badge; `is-current` fills the chosen one and gives it a small shadow. It has no box of its own.\n- `.ds-notice`: a one-line message in an outlined bar with a small shadow, led by a round sign (an i, or an exclamation mark for an error): a bold `.ds-notice__title` and `.ds-notice__text`. `.ds-notice--error` is `--color-danger-surface`.\n- `.ds-pagination`: a row of small outlined squares (`.ds-pagination__link`) with a small shadow; the current page (`is-current`) is filled with the accent, `is-disabled` is dim and flat, `is-hover` sinks.\n- `.ds-breadcrumb`: a small trail of `.ds-breadcrumb__item` separated by a muted slash; the last has `is-current`. The first line of a page header.\n- `.ds-dialog`: a `--size-dialog` outlined box with the dialog shadow: a `--color-surface-strong` `.ds-dialog__bar` (holding `.ds-dialog__title` and a square `.ds-dialog__close`), `.ds-dialog__body`, and a canvas-coloured `.ds-dialog__actions` strip over a rule with the buttons right-aligned. It sits on `.ds-overlay`, an outlined block filled with `--color-overlay`.\n- `.ds-empty`: an outlined, shadowed box on `--color-surface-alt`, centred: `.ds-empty__title`, `.ds-empty__text` and one small button.\n- `.ds-footer`: an inverted card under the sheet, one row: `.ds-footer__brand`, a `.ds-footer__list` of `.ds-footer__link`, and `.ds-footer__legal`.\n\n## Never\n\n- `row-gap <= 12px`: table rows touch; list rows and accordion bars are 12px apart.\n- `block-gap <= 64px`: stacked blocks are 20px apart, the blocks of a view 40px.\n- `content-width <= 85%`: everything is inside the 1180px sheet; the page colour always shows at the sides.\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 >= 3px`: outlines and rules are 3px, 4px under the navigation; no hairlines.\n- `border-width <= 4px`: nothing heavier than 4px.\n- `border-radius <= 8px`: one 8px corner everywhere; no larger radii and no pills.\n- `box-shadow-blur <= 0px`: every shadow is a hard offset block.\n- `text-shadow = none`: no text shadow.\n- `gradient-fills <= 1%`: fills are flat; the only gradient is the grid on the page background.\n- `animation = none`: nothing moves on its own.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Everything new goes inside the sheet; nothing but the ticker is full-bleed. A new box takes a `--border-width` `--color-border` outline, the `--radius-panel` corner and the `--shadow-panel` hard shadow; small things in a column (rows, bars, chips, notices) take `--radius-control` and `--shadow-control-hover`; only the sheet, the ticket and a dialog take `--shadow-dialog`. Anything clickable sinks `--space-nudge` on hover and `--space-press` when pressed, straight down. Show a date as a filled block (a stub, a head, a square), not as a line of text. Colour a block with one flat `--color-fill-*` or surface token and put `--color-text` on it; never tint, fade or blur. A new view starts with a `.ds-page-header` and one `.ds-split`, and gets its own folder tab. Inside a box, divide with a `--color-border-muted` rule rather than nesting shadowed cards. For a size the vocabulary lacks, use `calc()` over an existing token, as the badge text does.\n",
    "components.css": "/* Layout tokens (structure part) */\n:root {\n  --size-page: 100%;\n  --size-content: 1180px;\n  --size-side: 320px;\n  --size-measure: 560px;\n  --size-menu: 220px;\n  --size-tip: 200px;\n  --size-control: 44px;\n  --size-control-large: 54px;\n  --size-control-small: 34px;\n  --size-logo: 38px;\n  --size-avatar: 36px;\n  --size-date: 60px;\n  --size-check: 20px;\n  --size-switch: 44px;\n  --size-bar: 14px;\n  --size-stub: 150px;\n  --size-dialog: 440px;\n  --space-1: 4px;\n  --space-2: 8px;\n  --space-3: 12px;\n  --space-4: 16px;\n  --space-5: 20px;\n  --space-6: 28px;\n  --space-7: 40px;\n  --space-8: 56px;\n  --space-gutter: 28px;\n  --space-nudge: 2px;\n  --space-press: 4px;\n}\n\n/* shell: a ticker line, the brand row, folder tabs, then one big sheet that holds every view */\n.ds-page {\n  margin: 0;\n  width: var(--size-page);\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page *,\n.ds-page *::before,\n.ds-page *::after {\n  box-sizing: border-box;\n}\n\n/* views: one screen shows at a time */\n.ds-view { display: none; }\n.ds-view:target, .ds-page:not(:has(.ds-view:target)) .ds-view--home { display: block; }\n.ds-view:target { scroll-margin-top: 100vh; }\n\n/* nav: the ticker, the brand row on the page colour, and a row of folder tabs standing on the sheet */\n.ds-nav {\n  color: var(--color-text);\n}\n.ds-nav__strip {\n  margin: 0;\n  padding: var(--space-2) var(--space-gutter);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n  text-align: center;\n  color: var(--color-bar-alt-text);\n  background: var(--fill-bar-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-nav__strip-link {\n  color: inherit;\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-nav__top {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-5);\n  width: calc(100% - 2 * var(--space-gutter));\n  max-width: var(--size-content);\n  margin: 0 auto;\n  padding: var(--space-6) 0 var(--space-5);\n}\n.ds-brand {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  gap: var(--space-3);\n  text-decoration: none;\n}\n.ds-brand__mark {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-logo);\n  height: var(--size-logo);\n  padding: var(--space-1);\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-brand__mark svg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: 1;\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-nav__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-nav__links {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  gap: var(--space-1);\n  width: calc(100% - 2 * var(--space-gutter));\n  max-width: var(--size-content);\n  margin: 0 auto;\n  padding: 0 calc(var(--radius-page) / 2 + var(--space-4));\n  list-style: none;\n}\n.ds-nav__link {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  padding: 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: var(--link-decoration-quiet);\n  cursor: pointer;\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-bottom: 0;\n  border-radius: min(var(--radius-panel), var(--space-4)) min(var(--radius-panel), var(--space-4)) 0 0;\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(#calendar:target) .ds-nav__link[href=\"#calendar\"],\n.ds-page:has(#event:target) .ds-nav__link[href=\"#event\"],\n.ds-page:has(#post:target) .ds-nav__link[href=\"#post\"],\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-nav__link:focus-visible,\n.ds-nav__link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-press));\n}\n\n/* menu: a drop-down under a strip item, a details element */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__trigger {\n  list-style: none;\n}\n.ds-menu__trigger::-webkit-details-marker {\n  display: none;\n}\n.ds-menu__trigger::after {\n  content: \"+\";\n  font-weight: var(--weight-bold);\n}\n.ds-menu[open] .ds-menu__trigger::after {\n  content: \"-\";\n}\n.ds-menu__list {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 3;\n  width: var(--size-menu);\n  max-width: 80vw;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-menu__item + .ds-menu__item {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\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/* sheet: the one big box under the tabs. Every view is laid out inside it */\n.ds-main {\n  display: block;\n  width: calc(100% - 2 * var(--space-gutter));\n  max-width: var(--size-content);\n  margin: 0 auto;\n  padding: var(--space-7);\n  color: var(--color-text);\n  background: var(--color-canvas);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-column {\n  display: grid;\n  gap: var(--space-7);\n  align-content: start;\n}\n.ds-split {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-side);\n  gap: var(--space-6);\n  align-items: start;\n}\n.ds-split--even {\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n}\n.ds-stack {\n  display: grid;\n  gap: var(--space-5);\n  align-content: start;\n  min-width: 0;\n}\n.ds-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-4);\n}\n.ds-label {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  color: var(--color-heading);\n}\n.ds-note {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* hero: the claim on the left, the next event as a tilted ticket on the right */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);\n  gap: var(--space-7);\n  align-items: center;\n  color: var(--color-text);\n}\n.ds-hero__text {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-4);\n  min-width: 0;\n}\n.ds-hero__title {\n  margin: 0;\n  max-width: 100%;\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-transform: var(--heading-transform);\n  overflow-wrap: break-word;\n  color: var(--color-heading);\n}\n.ds-hero__lead {\n  max-width: var(--size-measure);\n  margin: 0;\n  font-size: var(--text-large);\n  line-height: 1.45;\n}\n.ds-hero__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n  margin-top: var(--space-2);\n}\n\n/* ticket: one event as a stub with the date and a body with the rest */\n.ds-ticket {\n  display: grid;\n  grid-template-columns: var(--size-stub) minmax(0, 1fr);\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-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n  transform: rotate(2deg);\n}\n.ds-ticket__stub {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-1);\n  padding: var(--space-4) var(--space-2);\n  text-align: center;\n  color: var(--color-text);\n  background: var(--color-fill-2);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-ticket__day {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1.2;\n}\n.ds-ticket__number {\n  font-family: var(--font-heading);\n  font-size: var(--text-display);\n  font-weight: var(--weight-display);\n  line-height: 1;\n}\n.ds-ticket__body {\n  display: grid;\n  gap: var(--space-3);\n  align-content: center;\n  min-width: 0;\n  padding: var(--space-5);\n}\n.ds-ticket__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  overflow-wrap: break-word;\n  color: var(--color-heading);\n}\n.ds-ticket__meta {\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n\n/* stats: one inverted strip of four figures */\n.ds-stat {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  margin: 0;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-stat__cell {\n  display: flex;\n  flex-direction: column-reverse;\n  align-items: center;\n  min-width: 0;\n  padding: var(--space-4) var(--space-3);\n  text-align: center;\n}\n.ds-stat__value {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-stat__label {\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n}\n\n/* grid: the week. One cell per day, a filled head with the date over that day's events */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(5, minmax(0, 1fr));\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control);\n  overflow: hidden;\n}\n.ds-grid__head {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-2);\n  padding: var(--space-2) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-grid__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__day {\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1.2;\n}\n.ds-grid__date {\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-display);\n  line-height: 1.1;\n}\n.ds-grid__body {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  margin: 0;\n  padding: var(--space-1) var(--space-4) var(--space-2);\n  list-style: none;\n}\n.ds-grid__event {\n  padding: var(--space-2) 0;\n}\n.ds-grid__event + .ds-grid__event {\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-grid__time {\n  display: block;\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  line-height: 1.3;\n  color: var(--color-text-muted);\n}\n.ds-grid__title {\n  display: block;\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n  overflow-wrap: break-word;\n}\n.ds-grid__title .ds-link {\n  font-weight: inherit;\n}\n.ds-grid__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* month: a small calendar, a square per day */\n.ds-month {\n  display: grid;\n  grid-template-columns: repeat(7, minmax(0, 1fr));\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-month__day {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  aspect-ratio: 1;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) transparent;\n  border-radius: min(var(--radius-control), var(--space-2));\n}\n.ds-month__day--head {\n  font-weight: var(--weight-bold);\n  color: var(--color-text-muted);\n}\n.ds-month__day.is-busy {\n  background: var(--color-surface-alt);\n  border-color: var(--color-border);\n}\n.ds-month__day.is-current {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border-color: var(--color-border);\n}\n\n/* typography */\n.ds-prose {\n  max-width: 66ch;\n  color: var(--color-text);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  font-family: var(--font-heading);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  overflow-wrap: break-word;\n  color: var(--color-heading);\n}\n.ds-prose h1 {\n  margin: 0 0 var(--space-4);\n  font-size: var(--text-h1);\n}\n.ds-prose h2 {\n  margin: var(--space-6) 0 var(--space-3);\n  font-size: var(--text-h2);\n}\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-2);\n  font-size: var(--text-h3);\n}\n.ds-prose p,\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n}\n.ds-prose ul,\n.ds-prose ol {\n  padding-left: var(--space-5);\n}\n.ds-prose li {\n  margin-bottom: var(--space-1);\n}\n.ds-prose strong {\n  font-weight: var(--weight-bold);\n}\n.ds-prose code {\n  padding: 0 var(--space-1);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  white-space: nowrap;\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-1));\n}\n.ds-prose a {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n.ds-sheet {\n  padding: var(--space-6);\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-panel);\n}\n\n/* links */\n.ds-link {\n  color: var(--color-link);\n  font-weight: var(--weight-ui);\n  text-decoration: var(--link-decoration);\n  text-decoration-thickness: var(--space-nudge);\n  text-underline-offset: var(--space-1);\n}\n.ds-link--quiet {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-link:visited,\n.ds-link.is-visited {\n  color: var(--color-link-visited);\n}\n.ds-link:hover,\n.ds-link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n  background: var(--color-surface-strong);\n}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n  background: var(--fill-accent);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* buttons: flat fill, outline, hard shadow; a pressed button sinks straight down */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  white-space: nowrap;\n  cursor: pointer;\n  color: var(--color-button-text);\n  background: var(--fill-button);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  transition: var(--transition);\n}\n\n/* a block that moves down onto its shadow carries a strip above itself, so a pointer at its top edge stays on it */\n.ds-button {\n  position: relative;\n}\n.ds-button::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 100%;\n  height: calc(2 * var(--space-press));\n}\n.ds-button--secondary {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-size: var(--text-large);\n}\n.ds-button--small {\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-size: var(--text-small);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button--wide {\n  width: 100%;\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  color: var(--color-button-hover-text);\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n  transform: translateY(var(--space-nudge));\n}\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n}\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n  transform: translateY(var(--space-press));\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n  transform: none;\n  cursor: not-allowed;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n}\n\n/* badge */\n.ds-badge {\n  display: inline-flex;\n  align-items: center;\n  padding: 0 var(--space-2);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.87);\n  font-weight: var(--weight-bold);\n  line-height: 1.6;\n  white-space: nowrap;\n  vertical-align: middle;\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-badge--alt {\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n}\n.ds-badge--plain {\n  color: var(--color-text);\n  background: var(--color-surface);\n}\n.ds-badge--success {\n  color: var(--color-text);\n  background: var(--color-success);\n}\n.ds-badge--warning {\n  color: var(--color-text);\n  background: var(--color-warning);\n}\n.ds-badge--danger {\n  color: var(--color-text);\n  background: var(--color-danger);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* avatar: a person or maker, drawn as initials on a fill */\n.ds-avatar {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-avatar);\n  height: var(--size-avatar);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.87);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-avatar--2 {\n  background: var(--color-fill-2);\n}\n.ds-avatar--3 {\n  background: var(--color-fill-4);\n}\n.ds-avatar--4 {\n  background: var(--color-fill-1);\n}\n.ds-avatar--small {\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n}\n.ds-avatar--large {\n  width: calc(var(--size-avatar) * 1.6);\n  height: calc(var(--size-avatar) * 1.6);\n  font-size: var(--text-large);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-person {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  min-width: 0;\n}\n.ds-person__name {\n  display: block;\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-person__role {\n  display: block;\n  font-size: var(--text-small);\n  line-height: 1.3;\n  color: var(--color-text-muted);\n}\n.ds-avatars {\n  display: flex;\n  align-items: center;\n  margin: 0;\n  padding: 0 0 0 var(--space-2);\n  list-style: none;\n}\n.ds-avatars .ds-avatar {\n  margin-left: calc(-1 * var(--space-2));\n}\n.ds-avatars__more {\n  margin-left: var(--space-2);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n\n/* progress: an outlined track with a filled bar */\n.ds-progress {\n  display: grid;\n  gap: var(--space-2);\n}\n.ds-progress__label {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-progress__track {\n  display: block;\n  height: var(--size-bar);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  overflow: hidden;\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  border-right: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-progress__bar--70 {\n  width: 70%;\n}\n.ds-progress__bar--85 {\n  width: 85%;\n}\n.ds-steps {\n  display: grid;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  counter-reset: step;\n}\n.ds-steps__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  counter-increment: step;\n}\n.ds-steps__item::before {\n  content: counter(step);\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  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-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-steps__item.is-done::before {\n  color: var(--color-text);\n  background: var(--color-success);\n}\n.ds-steps__item.is-current {\n  font-weight: var(--weight-bold);\n}\n.ds-steps__item.is-current::before {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control-hover);\n}\n\n/* switch: an on and off control drawn over a checkbox */\n.ds-switch {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n  line-height: 1.3;\n  cursor: pointer;\n}\n.ds-switch__input {\n  position: absolute;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  opacity: 0;\n}\n.ds-switch__track {\n  position: relative;\n  display: block;\n  flex: none;\n  width: var(--size-switch);\n  height: calc(var(--size-check) + 2 * var(--border-width));\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  transition: var(--transition);\n}\n.ds-switch__track::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: var(--size-check);\n  height: var(--size-check);\n  background: var(--color-text);\n  border-radius: var(--radius-pill);\n  transform: scale(0.64);\n  transition: var(--transition);\n}\n.ds-switch__input:checked + .ds-switch__track,\n.ds-switch__track.is-on {\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-switch__input:checked + .ds-switch__track::before,\n.ds-switch__track.is-on::before {\n  left: calc(100% - var(--size-check));\n  background: var(--color-accent-text);\n}\n.ds-switch__input:focus-visible + .ds-switch__track,\n.ds-switch__track.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n\n/* tooltip: a hint over its trigger, on hover or focus */\n.ds-tooltip {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n.ds-tooltip__trigger {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  cursor: help;\n  color: var(--color-text);\n  background: var(--color-accent-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n}\n.ds-tooltip__tip {\n  position: absolute;\n  bottom: calc(100% + var(--space-2));\n  right: 0;\n  z-index: 2;\n  width: var(--size-tip);\n  max-width: 70vw;\n  padding: var(--space-2) var(--space-3);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.35;\n  text-align: left;\n  color: var(--color-inverse-text);\n  background: var(--fill-inverse);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n  box-shadow: var(--shadow-control-hover);\n  visibility: hidden;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus-within .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  visibility: visible;\n}\n\n/* accordion: each question its own outlined bar; the open one drops its answer below */\n.ds-accordion {\n  display: grid;\n  gap: var(--space-3);\n}\n.ds-accordion__item {\n  color: var(--color-text);\n  background: var(--fill-panel);\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  overflow: hidden;\n}\n.ds-accordion__item[open] {\n  box-shadow: var(--shadow-control);\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-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n  list-style: none;\n  cursor: pointer;\n  color: var(--color-text);\n}\n.ds-accordion__head::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__head::after {\n  content: \"+\";\n  flex: none;\n  font-family: var(--font-mono);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n}\n.ds-accordion__head:hover,\n.ds-accordion__head.is-hover {\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-text);\n  background: var(--color-surface-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-accordion__item[open] .ds-accordion__head::after {\n  content: \"-\";\n}\n.ds-accordion__body {\n  padding: var(--space-3) var(--space-4);\n  font-size: var(--text-small);\n  line-height: 1.5;\n}\n.ds-accordion__body p {\n  margin: 0;\n}\n\n/* form */\n.ds-form {\n  display: grid;\n  gap: var(--space-4);\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-form__field {\n  display: grid;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-form__label {\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n}\n.ds-form__control {\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n  color: var(--color-input-text);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: min(var(--radius-control), calc(var(--size-control) / 2));\n  transition: var(--transition);\n}\n.ds-form__control--area {\n  min-height: calc(var(--size-control) * 2);\n  resize: vertical;\n}\n.ds-form__control:focus,\n.ds-form__control.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-form__control:disabled,\n.ds-form__control.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n}\n.ds-form__control.is-invalid {\n  border-color: var(--color-danger);\n  box-shadow: 0 var(--space-press) 0 0 var(--color-danger);\n}\n.ds-form__error {\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.4;\n  color: var(--color-danger);\n}\n.ds-form__hint {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  font-weight: var(--weight-ui);\n}\n.ds-form__checkbox {\n  appearance: none;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  margin: 0;\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: min(var(--radius-control), var(--space-1));\n}\n.ds-form__checkbox:checked,\n.ds-form__checkbox.is-checked {\n  background: var(--color-text);\n  box-shadow: inset 0 0 0 var(--space-nudge) var(--color-input);\n}\n.ds-form__checkbox:focus-visible,\n.ds-form__checkbox.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: var(--space-nudge);\n}\n.ds-form__foot {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-4);\n  padding-top: var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-form__toggles {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-3) var(--space-6);\n}\n\n/* notice: a round sign and one line of text in a filled bar */\n.ds-notice {\n  display: flex;\n  align-items: center;\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: min(var(--radius-control), var(--space-4));\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-notice::before {\n  content: \"i\";\n  display: block;\n  flex: none;\n  width: var(--size-check);\n  height: var(--size-check);\n  font-family: var(--font-mono);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-pill);\n  box-sizing: content-box;\n  align-content: center;\n  text-align: center;\n  text-box: trim-both cap alphabetic;\n  font-variant-numeric: tabular-nums;\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.ds-notice--error::before {\n  content: \"!\";\n}\n\n/* pagination */\n.ds-pagination {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-pagination__link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size-control-small);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n  transition: var(--transition);\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-pagination__link.is-current {\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-pagination__link.is-disabled {\n  color: var(--color-disabled-text);\n  background: var(--color-disabled);\n  box-shadow: var(--shadow-control-pressed);\n}\n\n/* breadcrumb */\n.ds-breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-2);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  line-height: 1.4;\n}\n.ds-breadcrumb__item + .ds-breadcrumb__item::before {\n  content: \"/\";\n  color: var(--color-text-muted);\n  margin-right: var(--space-2);\n  font-weight: var(--weight-bold);\n}\n.ds-breadcrumb__item.is-current {\n  font-weight: var(--weight-bold);\n}\n\n/* page header: the head of an inner page, a filled box with the title on the left and the actions on the right */\n.ds-page-header {\n  display: grid;\n  gap: var(--space-3);\n  padding: var(--space-5) 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-panel);\n}\n.ds-page-header__row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4) var(--space-6);\n}\n.ds-page-header__main {\n  min-width: 0;\n}\n.ds-page-header__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  overflow-wrap: break-word;\n  color: var(--color-text);\n}\n.ds-page-header__lead {\n  max-width: var(--size-measure);\n  margin: var(--space-1) 0 0;\n  font-size: var(--text-large);\n  line-height: 1.4;\n}\n.ds-page-header__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-4);\n}\n\n/* empty state */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  padding: var(--space-6) var(--space-4);\n  text-align: center;\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-empty__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  color: var(--color-text);\n}\n.ds-empty__text {\n  margin: 0 0 var(--space-2);\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n\n/* table: one outlined box; the head is filled like a bar, rows are divided by faint 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-muted);\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  border-bottom-color: var(--color-border);\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  white-space: nowrap;\n}\n\n/* list: separate rows, each a small ticket led by its date */\n.ds-list {\n  display: grid;\n  gap: var(--space-3);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-list__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  padding: var(--space-2) var(--space-4) var(--space-2) var(--space-2);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-list__date {\n  display: flex;\n  flex: none;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-date);\n  height: var(--size-date);\n  font-family: var(--font-ui);\n  font-size: calc(var(--text-small) * 0.9);\n  font-weight: var(--weight-bold);\n  line-height: 1.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: min(var(--radius-control), var(--space-3));\n}\n.ds-list__number {\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  font-weight: var(--weight-display);\n  line-height: 1.1;\n}\n.ds-list__main {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  margin: 0;\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  line-height: 1.3;\n}\n.ds-list__title .ds-link {\n  font-weight: inherit;\n}\n.ds-list__text {\n  margin: 0;\n  font-size: var(--text-small);\n  line-height: 1.4;\n}\n.ds-list__meta {\n  flex: none;\n  font-size: var(--text-small);\n  line-height: 1.4;\n  color: var(--color-text-muted);\n}\n\n/* panel: an outlined box; the title sits on a strip filled with the second surface */\n.ds-panel {\n  min-width: 0;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n  overflow: hidden;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading-alt);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-panel__body {\n  display: grid;\n  gap: var(--space-4);\n  padding: var(--space-4);\n}\n.ds-panel__body p {\n  margin: 0;\n}\n.ds-panel--plain .ds-panel__title {\n  color: var(--color-bar-text);\n  background: var(--fill-bar);\n}\n.ds-facts {\n  display: grid;\n  grid-template-columns: auto minmax(0, 1fr);\n  gap: var(--space-2) var(--space-4);\n  margin: 0;\n}\n.ds-facts__term {\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: 1.6;\n  color: var(--color-text-muted);\n}\n.ds-facts__value {\n  margin: 0;\n  font-weight: var(--weight-ui);\n}\n\n/* tabs: one outlined bar cut into segments; the current one is filled */\n.ds-tabs {\n  display: inline-flex;\n  max-width: 100%;\n  margin: 0;\n  padding: 0;\n  list-style: none;\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  overflow: hidden;\n}\n.ds-tabs__item + .ds-tabs__item {\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-tabs__tab {\n  display: flex;\n  align-items: center;\n  gap: var(--space-2);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-4);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-transform: var(--ui-transform);\n  text-decoration: none;\n  white-space: nowrap;\n  color: var(--color-button-secondary-text);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  color: var(--color-text);\n  background: var(--color-surface-alt);\n}\n.ds-tabs__tab.is-current {\n  font-weight: var(--weight-bold);\n  color: var(--color-accent-text);\n  background: var(--fill-accent);\n}\n.ds-tabs__tab:focus-visible,\n.ds-tabs__tab.is-focus {\n  outline: var(--focus-ring);\n  outline-offset: calc(-1 * var(--space-press));\n}\n\n/* sidebar: a heading over a column of outlined chips, each a kind of event with its count */\n.ds-sidebar {\n  color: var(--color-text);\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  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading);\n}\n.ds-sidebar__list {\n  display: grid;\n  gap: var(--space-2);\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) var(--space-3) var(--space-2) var(--space-4);\n  color: var(--color-text);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: min(var(--radius-control), var(--space-4));\n}\n.ds-sidebar__item.is-current {\n  background: var(--color-surface-alt);\n  box-shadow: var(--shadow-control-hover);\n}\n\n/* dialog: an outlined box with a title strip, on a filled backdrop block */\n.ds-overlay {\n  padding: var(--space-7) var(--space-5);\n  background: var(--color-overlay);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-page);\n}\n.ds-dialog {\n  max-width: var(--size-dialog);\n  margin: 0 auto;\n  color: var(--color-text);\n  background: var(--fill-panel);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  overflow: hidden;\n}\n.ds-dialog__bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-dialog__title {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  color: var(--color-heading-alt);\n}\n.ds-dialog__close {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  padding: 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-bold);\n  line-height: 1;\n  text-decoration: none;\n  cursor: pointer;\n  color: var(--color-button-secondary-text);\n  background: var(--fill-button-secondary);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-dialog__body {\n  padding: var(--space-5) var(--space-4);\n}\n.ds-dialog__body p {\n  margin: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: var(--space-4);\n  padding: var(--space-4);\n  color: var(--color-text);\n  background: var(--color-canvas);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* footer: an inverted card under the sheet */\n.ds-footer {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3) var(--space-6);\n  width: calc(100% - 2 * var(--space-gutter));\n  max-width: var(--size-content);\n  margin: var(--space-7) auto var(--space-8);\n  padding: var(--space-5) var(--space-7);\n  font-size: var(--text-small);\n  line-height: 1.45;\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__brand {\n  margin: 0;\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  line-height: 1.1;\n  letter-spacing: var(--heading-tracking);\n}\n.ds-footer__list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  font-weight: var(--weight-ui);\n  color: var(--color-inverse-text);\n  text-decoration: var(--link-decoration);\n  text-underline-offset: var(--space-1);\n}\n.ds-footer__link:hover,\n.ds-footer__link.is-hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-footer__legal {\n  margin: 0;\n}\n\n@media (min-width: 601px) {\n  .ds-nav__link:hover,\n  .ds-nav__link.is-hover {\n    min-height: calc(var(--size-control) + 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(#calendar:target) .ds-nav__link[href=\"#calendar\"],\n  .ds-page:has(#event:target) .ds-nav__link[href=\"#event\"],\n  .ds-page:has(#post:target) .ds-nav__link[href=\"#post\"],\n  .ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"] {\n    min-height: calc(var(--size-control) + var(--space-2));\n  }\n}\n\n@media (max-width: 1000px) {\n  .ds-hero,\n  .ds-split,\n  .ds-split--even {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-ticket {\n    transform: none;\n  }\n  .ds-grid {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n  .ds-stat {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .ds-main {\n    padding: var(--space-6);\n  }\n}\n\n@media (max-width: 600px) {\n  .ds-nav__top,\n  .ds-nav__links,\n  .ds-main,\n  .ds-footer {\n    width: calc(100% - 2 * var(--space-3));\n  }\n  .ds-nav__top {\n    padding: var(--space-4) 0 var(--space-3);\n  }\n  .ds-brand__name {\n    font-size: var(--text-h3);\n  }\n  .ds-nav__links {\n    gap: var(--space-1);\n    padding: 0 0 var(--space-3);\n  }\n  .ds-nav__link {\n    min-height: var(--size-control-small);\n    padding: 0 var(--space-2);\n    font-size: var(--text-small);\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n    border-radius: min(var(--radius-control), var(--space-3));\n  }\n  .ds-main {\n    padding: var(--space-4) var(--space-3) var(--space-5);\n    border-width: var(--border-width);\n  }\n  .ds-column {\n    gap: var(--space-6);\n  }\n  .ds-hero__title {\n    font-size: calc(var(--text-h1) * 0.8);\n  }\n  .ds-page-header {\n    padding: var(--space-4);\n  }\n  .ds-page-header__title,\n  .ds-prose h1 {\n    font-size: calc(var(--text-h1) * 0.72);\n  }\n  .ds-label,\n  .ds-prose h2 {\n    font-size: calc(var(--text-h2) * 0.85);\n  }\n  .ds-hero__lead,\n  .ds-page-header__lead {\n    font-size: var(--text-base);\n  }\n  .ds-hero__actions,\n  .ds-hero__actions .ds-button,\n  .ds-page-header__actions,\n  .ds-page-header__actions .ds-button {\n    width: 100%;\n  }\n  .ds-ticket {\n    grid-template-columns: calc(var(--size-stub) * 0.6) minmax(0, 1fr);\n  }\n  .ds-ticket__number {\n    font-size: var(--text-h1);\n  }\n  .ds-ticket__body {\n    padding: var(--space-4) var(--space-3);\n  }\n  .ds-grid,\n  .ds-form__row {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .ds-stat__value {\n    font-size: var(--text-h2);\n  }\n  .ds-sheet {\n    padding: var(--space-4);\n  }\n  .ds-tabs {\n    display: flex;\n  }\n  .ds-tabs__item {\n    flex: 1;\n  }\n  .ds-tabs__tab {\n    justify-content: center;\n    padding: 0 var(--space-2);\n    font-size: var(--text-small);\n  }\n  .ds-table {\n    font-size: var(--text-small);\n  }\n  .ds-table th,\n  .ds-table td {\n    padding: var(--space-2);\n  }\n  .ds-table .ds-table__extra {\n    display: none;\n  }\n  .ds-notice {\n    align-items: flex-start;\n    flex-wrap: wrap;\n    gap: var(--space-1) var(--space-2);\n  }\n  .ds-list__item {\n    flex-wrap: wrap;\n    gap: var(--space-2) var(--space-3);\n  }\n  .ds-list__meta {\n    flex-basis: 100%;\n  }\n  .ds-overlay {\n    padding: var(--space-5) var(--space-3);\n  }\n  .ds-dialog__actions .ds-button {\n    flex: 1;\n  }\n  .ds-footer {\n    margin: var(--space-5) auto var(--space-6);\n    padding: var(--space-4);\n  }\n}\n/* phone: the tabs are one strip of blocks from edge to edge that scrolls sideways; the window cuts a block where there is more */\n@media (max-width: 600px) {\n  .ds-nav .ds-nav__links {\n    flex-wrap: nowrap;\n    align-items: stretch;\n    gap: 0;\n    width: 100%;\n    max-width: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: auto;\n    scrollbar-width: none;\n    border-top: var(--border-width) var(--border-style) var(--color-border);\n    border-bottom: var(--border-width) var(--border-style) var(--color-border);\n  }\n  .ds-nav__links li {\n    display: flex;\n    flex: 0 0 29%;\n    direction: ltr;\n    border-right: var(--border-width) var(--border-style) var(--color-border);\n  }\n  /* the drop-down cannot open inside a scrolling strip; its places are reached from the calendar */\n  .ds-nav__links li:has(.ds-menu) {\n    display: none;\n  }\n  .ds-nav__link {\n    flex: 1;\n    justify-content: center;\n    min-height: var(--size-control);\n    white-space: nowrap;\n    border: 0;\n    border-radius: 0;\n  }\n  /* on the last two views the strip starts at its far end, so the current block is in view */\n  .ds-page:has(#post:target) .ds-nav__links,\n  .ds-page:has(#guide:target) .ds-nav__links {\n    direction: rtl;\n    flex-direction: row-reverse;\n    justify-content: flex-end;\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 portal specimen, neighbourhood events sheet</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n\n<header class=\"ds-nav\" data-component=\"nav\">\n  <p class=\"ds-nav__strip\">Fourteen things are on this week, nine of them free. <a class=\"ds-nav__strip-link\" href=\"#calendar\">See them all</a></p>\n  <div class=\"ds-nav__top\">\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    <div class=\"ds-nav__actions\">\n      <span class=\"ds-person\"><span class=\"ds-avatar ds-avatar--small ds-avatar--3\">JR</span></span>\n      <a class=\"ds-button ds-button--small ds-button--secondary\" href=\"#guide\">Host guide</a>\n      <a class=\"ds-button ds-button--small\" href=\"#post\">Post an event</a>\n    </div>\n  </div>\n  <ul class=\"ds-nav__links\" aria-label=\"Main\">\n    <li><a class=\"ds-nav__link\" href=\"#home\">This week</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#calendar\">Calendar</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#event\">Next up</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#post\">Post</a></li>\n    <li><a class=\"ds-nav__link\" href=\"#guide\">Guide</a></li>\n    <li>\n      <details class=\"ds-menu\" data-component=\"menu\">\n        <summary class=\"ds-nav__link ds-menu__trigger\">Places</summary>\n        <ul class=\"ds-menu__list\">\n          <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#calendar\">The old dairy <span class=\"ds-badge ds-badge--plain\">6</span></a></li>\n          <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#calendar\">Canal library <span class=\"ds-badge ds-badge--plain\">4</span></a></li>\n          <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#calendar\">Bandstand <span class=\"ds-badge ds-badge--plain\">3</span></a></li>\n          <li class=\"ds-menu__item\"><a class=\"ds-menu__link\" href=\"#calendar\">Online <span class=\"ds-badge ds-badge--plain\">1</span></a></li>\n        </ul>\n      </details>\n    </li>\n  </ul>\n</header>\n\n<main class=\"ds-main\">\n<section class=\"ds-view ds-view--home\" id=\"home\">\n<div class=\"ds-column\">\n  <section class=\"ds-hero\" data-component=\"hero\">\n    <div class=\"ds-hero__text\">\n      <span class=\"ds-badge ds-badge--alt\">Week of 16 October</span>\n      <h1 class=\"ds-hero__title\">Things to do within a ten minute walk.</h1>\n      <p class=\"ds-hero__lead\">chronoskin is the notice board for the streets between the canal and the park: workshops, swaps, quizzes and one very serious choir.</p>\n      <div class=\"ds-hero__actions\">\n        <a class=\"ds-button ds-button--large\" href=\"#calendar\">Open the calendar</a>\n        <a class=\"ds-button ds-button--large ds-button--secondary\" href=\"#post\">Post an event</a>\n      </div>\n    </div>\n    <article class=\"ds-ticket\">\n      <div class=\"ds-ticket__stub\">\n        <span class=\"ds-ticket__day\">Sat</span>\n        <span class=\"ds-ticket__number\">18</span>\n        <span class=\"ds-ticket__day\">October</span>\n      </div>\n      <div class=\"ds-ticket__body\">\n        <div class=\"ds-badges\"><span class=\"ds-badge\">Next up</span><span class=\"ds-badge ds-badge--warning\">8 places left</span></div>\n        <h2 class=\"ds-ticket__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Mend your bike night</a></h2>\n        <p class=\"ds-ticket__meta\">18:30 at the old dairy. Free, bring the bike.</p>\n        <div class=\"ds-progress\" data-component=\"progress\">\n          <p class=\"ds-progress__label\"><span>Places taken</span><span>22 of 30</span></p>\n          <span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--70\"></span></span>\n        </div>\n        <ul class=\"ds-avatars\" aria-label=\"People going\">\n          <li class=\"ds-avatar\" data-component=\"avatar\">HN</li>\n          <li class=\"ds-avatar ds-avatar--2\">PA</li>\n          <li class=\"ds-avatar ds-avatar--3\">KO</li>\n          <li class=\"ds-avatar ds-avatar--4\">ML</li>\n          <li class=\"ds-avatars__more\">and 18 more</li>\n        </ul>\n      </div>\n    </article>\n  </section>\n\n  <dl class=\"ds-stat\" data-component=\"stats\">\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">events this week</dt>\n      <dd class=\"ds-stat__value\">14</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">of them free</dt>\n      <dd class=\"ds-stat__value\">9</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">neighbours hosting</dt>\n      <dd class=\"ds-stat__value\">31</dd>\n    </div>\n    <div class=\"ds-stat__cell\">\n      <dt class=\"ds-stat__label\">places to meet</dt>\n      <dd class=\"ds-stat__value\">12</dd>\n    </div>\n  </dl>\n\n  <div class=\"ds-stack\">\n    <div class=\"ds-row\">\n      <h2 class=\"ds-label\">The next five days</h2>\n      <a class=\"ds-link\" href=\"#calendar\">Whole month</a>\n    </div>\n    <ul class=\"ds-grid\" data-component=\"grid\">\n      <li class=\"ds-grid__cell ds-grid__cell--1\">\n        <div class=\"ds-grid__head\"><span class=\"ds-grid__day\">Thu</span><span class=\"ds-grid__date\">16</span></div>\n        <ul class=\"ds-grid__body\">\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">10:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Toddler story hour</a></span></li>\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">19:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Seed swap</a></span></li>\n        </ul>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--2\">\n        <div class=\"ds-grid__head\"><span class=\"ds-grid__day\">Fri</span><span class=\"ds-grid__date\">17</span></div>\n        <ul class=\"ds-grid__body\">\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">17:30</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Canal litter pick</a></span></li>\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">20:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Quiz at the bandstand</a></span></li>\n        </ul>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--3\">\n        <div class=\"ds-grid__head\"><span class=\"ds-grid__day\">Sat</span><span class=\"ds-grid__date\">18</span></div>\n        <ul class=\"ds-grid__body\">\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">09:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Car boot at the yard</a></span></li>\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">18:30</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Mend your bike night</a></span></li>\n        </ul>\n      </li>\n      <li class=\"ds-grid__cell ds-grid__cell--4\">\n        <div class=\"ds-grid__head\"><span class=\"ds-grid__day\">Sun</span><span class=\"ds-grid__date\">19</span></div>\n        <ul class=\"ds-grid__body\">\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">11:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Choir, open rehearsal</a></span></li>\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">15:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Bread for beginners</a></span></li>\n        </ul>\n      </li>\n      <li class=\"ds-grid__cell\">\n        <div class=\"ds-grid__head\"><span class=\"ds-grid__day\">Mon</span><span class=\"ds-grid__date\">20</span></div>\n        <ul class=\"ds-grid__body\">\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__time\">18:00</span><span class=\"ds-grid__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Street plan meeting</a></span></li>\n          <li class=\"ds-grid__event\"><span class=\"ds-grid__text\">Nothing else yet. <a class=\"ds-link\" href=\"#post\">Add one</a></span></li>\n        </ul>\n      </li>\n    </ul>\n  </div>\n\n  <div class=\"ds-split\">\n    <div class=\"ds-stack\">\n      <h2 class=\"ds-label\">Just pinned up</h2>\n      <ul class=\"ds-list\" data-component=\"list\">\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__date\">Oct<span class=\"ds-list__number\">23</span></span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Lino printing for the nervous</a></h3>\n            <p class=\"ds-list__text\">Two hours, one potato, then real lino. Canal library.</p>\n          </div>\n          <span class=\"ds-list__meta\">Pinned 2 hours ago</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__date\">Oct<span class=\"ds-list__number\">25</span></span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Pumpkin soup cook-off</a></h3>\n            <p class=\"ds-list__text\">Bring a pot and a ladle. Judged by the under tens.</p>\n          </div>\n          <span class=\"ds-list__meta\">Pinned yesterday</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-list__date\">Nov<span class=\"ds-list__number\">1</span></span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\"><a class=\"ds-link ds-link--quiet\" href=\"#event\">Lantern walk along the towpath</a></h3>\n            <p class=\"ds-list__text\">Meet at the lock at dusk. Jam jars welcome.</p>\n          </div>\n          <span class=\"ds-list__meta\">Pinned 2 days ago</span>\n        </li>\n      </ul>\n    </div>\n    <section class=\"ds-panel\" data-component=\"panel\">\n      <h2 class=\"ds-panel__title\">Host of the month</h2>\n      <div class=\"ds-panel__body\">\n        <div class=\"ds-person\">\n          <span class=\"ds-avatar ds-avatar--large ds-avatar--2\">PA</span>\n          <span><span class=\"ds-person__name\">Priya Anand</span><span class=\"ds-person__role\">Runs the bike nights, 14 so far</span></span>\n        </div>\n        <p>Priya keeps a box of spare inner tubes and has never let anyone leave on a flat.</p>\n        <a class=\"ds-button ds-button--secondary ds-button--wide\" href=\"#guide\">Host something yourself</a>\n      </div>\n    </section>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"calendar\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\" data-component=\"page-header\">\n    <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">This week</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#calendar\">Calendar</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">October</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">October</h1>\n        <p class=\"ds-page-header__lead\">46 events at 12 places. Tap one to book.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#post\">Post an event</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-split\">\n    <div class=\"ds-stack\">\n      <div class=\"ds-row\">\n        <ul class=\"ds-tabs\" data-component=\"tabs\">\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab is-current\" href=\"#calendar\">List</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#calendar\">Week</a></li>\n          <li class=\"ds-tabs__item\"><a class=\"ds-tabs__tab\" href=\"#calendar\">Month</a></li>\n        </ul>\n        <span class=\"ds-note\">Showing 1 to 9 of 46</span>\n      </div>\n      <table class=\"ds-table\" data-component=\"table\">\n        <thead>\n          <tr><th>When</th><th>Event</th><th class=\"ds-table__extra\">Where</th><th>Places</th><th class=\"ds-table__num\">Left</th></tr>\n        </thead>\n        <tbody>\n          <tr><td>Thu 16, 10:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Toddler story hour</a></td><td class=\"ds-table__extra\">Canal library</td><td><span class=\"ds-badge ds-badge--success\">Open</span></td><td class=\"ds-table__num\">14</td></tr>\n          <tr><td>Thu 16, 19:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Seed swap</a></td><td class=\"ds-table__extra\">The old dairy</td><td><span class=\"ds-badge ds-badge--success\">Open</span></td><td class=\"ds-table__num\">40</td></tr>\n          <tr><td>Fri 17, 17:30</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Canal litter pick</a></td><td class=\"ds-table__extra\">Lock 4</td><td><span class=\"ds-badge ds-badge--success\">Open</span></td><td class=\"ds-table__num\">25</td></tr>\n          <tr><td>Fri 17, 20:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Quiz at the bandstand</a></td><td class=\"ds-table__extra\">Bandstand</td><td><span class=\"ds-badge ds-badge--danger\">Full</span></td><td class=\"ds-table__num\">0</td></tr>\n          <tr class=\"is-current\"><td>Sat 18, 18:30</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Mend your bike night</a></td><td class=\"ds-table__extra\">The old dairy</td><td><span class=\"ds-badge ds-badge--warning\">Few left</span></td><td class=\"ds-table__num\">8</td></tr>\n          <tr><td>Sun 19, 11:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Choir, open rehearsal</a></td><td class=\"ds-table__extra\">Chapel hall</td><td><span class=\"ds-badge ds-badge--success\">Open</span></td><td class=\"ds-table__num\">30</td></tr>\n          <tr><td>Sun 19, 15:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Bread for beginners</a></td><td class=\"ds-table__extra\">The old dairy</td><td><span class=\"ds-badge ds-badge--warning\">Few left</span></td><td class=\"ds-table__num\">2</td></tr>\n          <tr><td>Mon 20, 18:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Street plan meeting</a></td><td class=\"ds-table__extra\">Chapel hall</td><td><span class=\"ds-badge ds-badge--success\">Open</span></td><td class=\"ds-table__num\">52</td></tr>\n          <tr><td>Thu 23, 19:00</td><td><a class=\"ds-link ds-link--quiet\" href=\"#event\">Lino printing for the nervous</a></td><td class=\"ds-table__extra\">Canal library</td><td><span class=\"ds-badge ds-badge--success\">Open</span></td><td class=\"ds-table__num\">9</td></tr>\n        </tbody>\n      </table>\n      <div class=\"ds-row\">\n        <ul class=\"ds-pagination\" data-component=\"pagination\">\n          <li><span class=\"ds-pagination__link is-disabled\">Previous</span></li>\n          <li><a class=\"ds-pagination__link is-current\" href=\"#calendar\" aria-current=\"page\">1</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#calendar\">2</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#calendar\">3</a></li>\n          <li><a class=\"ds-pagination__link\" href=\"#calendar\">Next</a></li>\n        </ul>\n        <div class=\"ds-badges\" data-component=\"badge\">\n          <span class=\"ds-badge\">Today</span>\n          <span class=\"ds-badge ds-badge--success\">Open</span>\n          <span class=\"ds-badge ds-badge--warning\">Few left</span>\n          <span class=\"ds-badge ds-badge--danger\">Full</span>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"ds-stack\">\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">October at a glance</h2>\n        <div class=\"ds-panel__body\">\n          <ol class=\"ds-month\" aria-label=\"October\">\n            <li class=\"ds-month__day ds-month__day--head\">M</li><li class=\"ds-month__day ds-month__day--head\">T</li><li class=\"ds-month__day ds-month__day--head\">W</li><li class=\"ds-month__day ds-month__day--head\">T</li><li class=\"ds-month__day ds-month__day--head\">F</li><li class=\"ds-month__day ds-month__day--head\">S</li><li class=\"ds-month__day ds-month__day--head\">S</li>\n            <li class=\"ds-month__day\"></li><li class=\"ds-month__day\"></li><li class=\"ds-month__day\">1</li><li class=\"ds-month__day is-busy\">2</li><li class=\"ds-month__day\">3</li><li class=\"ds-month__day is-busy\">4</li><li class=\"ds-month__day\">5</li>\n            <li class=\"ds-month__day\">6</li><li class=\"ds-month__day\">7</li><li class=\"ds-month__day is-busy\">8</li><li class=\"ds-month__day\">9</li><li class=\"ds-month__day is-busy\">10</li><li class=\"ds-month__day is-busy\">11</li><li class=\"ds-month__day\">12</li>\n            <li class=\"ds-month__day\">13</li><li class=\"ds-month__day is-busy\">14</li><li class=\"ds-month__day\">15</li><li class=\"ds-month__day is-current\">16</li><li class=\"ds-month__day is-busy\">17</li><li class=\"ds-month__day is-busy\">18</li><li class=\"ds-month__day is-busy\">19</li>\n            <li class=\"ds-month__day is-busy\">20</li><li class=\"ds-month__day\">21</li><li class=\"ds-month__day\">22</li><li class=\"ds-month__day is-busy\">23</li><li class=\"ds-month__day\">24</li><li class=\"ds-month__day is-busy\">25</li><li class=\"ds-month__day\">26</li>\n            <li class=\"ds-month__day\">27</li><li class=\"ds-month__day\">28</li><li class=\"ds-month__day is-busy\">29</li><li class=\"ds-month__day\">30</li><li class=\"ds-month__day is-busy\">31</li><li class=\"ds-month__day\"></li><li class=\"ds-month__day\"></li>\n          </ol>\n          <div class=\"ds-row\">\n            <label class=\"ds-switch\" data-component=\"switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>Free only</span></label>\n            <span class=\"ds-tooltip\" data-component=\"tooltip\"><button class=\"ds-tooltip__trigger\" type=\"button\" aria-describedby=\"tip-free\">?</button><span class=\"ds-tooltip__tip\" id=\"tip-free\" role=\"tooltip\">Free means no ticket. Some hosts pass a hat at the end.</span></span>\n          </div>\n          <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span>Hide full events</span></label>\n        </div>\n      </section>\n      <aside class=\"ds-sidebar\" data-component=\"sidebar\">\n        <h2 class=\"ds-sidebar__title\">Kinds of thing</h2>\n        <ul class=\"ds-sidebar__list\">\n          <li class=\"ds-sidebar__item is-current\"><a class=\"ds-link ds-link--quiet\" href=\"#calendar\">Everything</a><span class=\"ds-badge\">46</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#calendar\">Workshops</a><span class=\"ds-badge ds-badge--plain\">17</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#calendar\">Swaps and sales</a><span class=\"ds-badge ds-badge--plain\">9</span></li>\n          <li class=\"ds-sidebar__item\"><a class=\"ds-link ds-link--quiet\" href=\"#calendar\">Music and quizzes</a><span class=\"ds-badge ds-badge--plain\">11</span></li>\n        </ul>\n      </aside>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"event\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">This week</a></li>\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#calendar\">October</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">Mend your bike night</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Mend your bike night</h1>\n        <p class=\"ds-page-header__lead\">Saturday 18 October, 18:30, at the old dairy.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#calendar\">Back to October</a>\n        <a class=\"ds-button\" href=\"#event\">Book a place</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-notice\" role=\"status\"><strong class=\"ds-notice__title\">Doors at 18:15.</strong><p class=\"ds-notice__text\">The yard gate is the green one on Mill Lane, not the front door.</p></div>\n\n  <div class=\"ds-split\">\n    <div class=\"ds-stack\">\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">What happens</h2>\n        <div class=\"ds-panel__body\">\n          <p>Bring a bike with something wrong with it. Priya and two volunteers show you how to fix it yourself: punctures, brakes that squeal, gears that skip. Tools and tea are on the bench.</p>\n          <p>Children are welcome with an adult. Parts are sold at cost from the box by the door.</p>\n        </div>\n      </section>\n      <div class=\"ds-row\">\n        <h2 class=\"ds-label\">Who is coming</h2>\n        <span class=\"ds-note\">22 going, 3 not sure</span>\n      </div>\n      <ul class=\"ds-list\">\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar\">HN</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\">Hana Novak</h3>\n            <p class=\"ds-list__text\">Bringing a tandem with no chain.</p>\n          </div>\n          <span class=\"ds-badge ds-badge--success\">Going</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--3\">KO</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\">Kofi Owusu</h3>\n            <p class=\"ds-list__text\">Can lend a truing stand.</p>\n          </div>\n          <span class=\"ds-badge ds-badge--success\">Going</span>\n        </li>\n        <li class=\"ds-list__item\">\n          <span class=\"ds-avatar ds-avatar--4\">ML</span>\n          <div class=\"ds-list__main\">\n            <h3 class=\"ds-list__title\">Marta Lind</h3>\n            <p class=\"ds-list__text\">Depends on the babysitter.</p>\n          </div>\n          <span class=\"ds-badge ds-badge--warning\">Not sure</span>\n        </li>\n      </ul>\n      <div class=\"ds-overlay\">\n        <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"dlg-title\">\n          <div class=\"ds-dialog__bar\">\n            <h2 class=\"ds-dialog__title\" id=\"dlg-title\">Book one place?</h2>\n            <a class=\"ds-dialog__close\" href=\"#event\" aria-label=\"Close\">&times;</a>\n          </div>\n          <div class=\"ds-dialog__body\"><p>We hold it under your name until 18:45 on the night, then give it to the next person waiting.</p></div>\n          <div class=\"ds-dialog__actions\">\n            <a class=\"ds-button ds-button--secondary\" href=\"#event\">Not now</a>\n            <a class=\"ds-button\" href=\"#calendar\">Book it</a>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"ds-stack\">\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">The details</h2>\n        <div class=\"ds-panel__body\">\n          <dl class=\"ds-facts\">\n            <dt class=\"ds-facts__term\">When</dt><dd class=\"ds-facts__value\">Sat 18 Oct, 18:30 to 21:00</dd>\n            <dt class=\"ds-facts__term\">Where</dt><dd class=\"ds-facts__value\">The old dairy, Mill Lane</dd>\n            <dt class=\"ds-facts__term\">Cost</dt><dd class=\"ds-facts__value\">Free</dd>\n            <dt class=\"ds-facts__term\">Host</dt><dd class=\"ds-facts__value\">Priya Anand</dd>\n          </dl>\n          <div class=\"ds-progress\">\n            <p class=\"ds-progress__label\"><span>Places taken</span><span>22 of 30</span></p>\n            <span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--70\"></span></span>\n          </div>\n          <ul class=\"ds-avatars\" aria-label=\"People going\">\n            <li class=\"ds-avatar\">HN</li>\n            <li class=\"ds-avatar ds-avatar--2\">PA</li>\n            <li class=\"ds-avatar ds-avatar--3\">KO</li>\n            <li class=\"ds-avatars__more\">and 19 more</li>\n          </ul>\n          <a class=\"ds-button ds-button--wide\" href=\"#event\">Book a place</a>\n        </div>\n      </section>\n      <div class=\"ds-accordion\">\n        <details class=\"ds-accordion__item\" open>\n          <summary class=\"ds-accordion__head\">Is there step-free access?</summary>\n          <div class=\"ds-accordion__body\"><p>Yes, through the yard gate. The bench is at wheelchair height.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Where do I lock up?</summary>\n          <div class=\"ds-accordion__body\"><p>Six hoops by the gate.</p></div>\n        </details>\n      </div>\n      <div class=\"ds-empty\" data-component=\"empty\">\n        <h2 class=\"ds-empty__title\">No questions yet</h2>\n        <p class=\"ds-empty__text\">Ask the host anything before the night.</p>\n        <a class=\"ds-button ds-button--secondary ds-button--small\" href=\"#post\">Ask a question</a>\n      </div>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"post\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">This week</a></li>\n      <li class=\"ds-breadcrumb__item is-current\">Post an event</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">Post an event</h1>\n        <p class=\"ds-page-header__lead\">It goes on the board as soon as a neighbour has read it over.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button ds-button--secondary\" href=\"#guide\">Read the host guide</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-stack\" data-component=\"notice\">\n    <div class=\"ds-notice\" role=\"status\"><strong class=\"ds-notice__title\">Saved as a draft.</strong><p class=\"ds-notice__text\">You can close this page and come back to it.</p></div>\n    <div class=\"ds-notice ds-notice--error\" role=\"alert\"><strong class=\"ds-notice__title\">One thing to fix.</strong><p class=\"ds-notice__text\">The start time is missing, so we cannot put it on a day yet.</p></div>\n  </div>\n\n  <div class=\"ds-split\">\n    <section class=\"ds-panel\">\n      <h2 class=\"ds-panel__title\">About the event</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-title\">What is it called?</label>\n            <input class=\"ds-form__control\" id=\"f-title\" type=\"text\" value=\"Jam jar lantern making\">\n          </div>\n          <div class=\"ds-form__row\">\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-time\">Starts at</label>\n              <input class=\"ds-form__control is-invalid\" id=\"f-time\" type=\"text\" value=\"evening\" aria-invalid=\"true\" aria-describedby=\"f-time-err\">\n              <p class=\"ds-form__error\" id=\"f-time-err\">Give a time such as 18:30.</p>\n            </div>\n            <div class=\"ds-form__field\">\n              <label class=\"ds-form__label\" for=\"f-place\">Where</label>\n              <select class=\"ds-form__control\" id=\"f-place\">\n                <option>Canal library</option>\n                <option>The old dairy</option>\n                <option>Bandstand</option>\n              </select>\n            </div>\n          </div>\n          <div class=\"ds-form__field\">\n            <label class=\"ds-form__label\" for=\"f-about\">What should people expect?</label>\n            <textarea class=\"ds-form__control ds-form__control--area\" id=\"f-about\">Bring a clean jar. We have wire, tissue paper and glue. Ready in time for the lantern walk.</textarea>\n            <p class=\"ds-form__hint\">Two or three sentences is plenty.</p>\n          </div>\n          <div class=\"ds-form__toggles\">\n            <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\" checked><span class=\"ds-switch__track\"></span><span>Free to come</span></label>\n            <label class=\"ds-switch\"><input class=\"ds-switch__input\" type=\"checkbox\"><span class=\"ds-switch__track\"></span><span>Limit the places</span></label>\n          </div>\n          <label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Children are welcome with an adult</label>\n          <div class=\"ds-form__foot ds-buttons\" data-component=\"buttons\">\n            <button class=\"ds-button\" type=\"button\">Send for a read</button>\n            <button class=\"ds-button ds-button--secondary\" type=\"button\">Save draft</button>\n            <button class=\"ds-button ds-button--danger\" type=\"button\">Throw away</button>\n            <button class=\"ds-button is-disabled\" type=\"button\" disabled>Pin it now</button>\n          </div>\n        </form>\n      </div>\n    </section>\n\n    <div class=\"ds-stack\">\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">Three steps</h2>\n        <div class=\"ds-panel__body\">\n          <ol class=\"ds-steps\">\n            <li class=\"ds-steps__item is-done\">Pick a day and a place</li>\n            <li class=\"ds-steps__item is-current\">Describe it</li>\n            <li class=\"ds-steps__item\">A neighbour reads it over</li>\n          </ol>\n          <div class=\"ds-progress\">\n            <p class=\"ds-progress__label\"><span>Nearly ready</span><span>4 of 5 fields</span></p>\n            <span class=\"ds-progress__track\"><span class=\"ds-progress__bar ds-progress__bar--85\"></span></span>\n          </div>\n        </div>\n      </section>\n      <section class=\"ds-panel\">\n        <h2 class=\"ds-panel__title\">Your reader</h2>\n        <div class=\"ds-panel__body\">\n          <div class=\"ds-person\">\n            <span class=\"ds-avatar ds-avatar--4\">ML</span>\n            <span><span class=\"ds-person__name\">Marta Lind</span><span class=\"ds-person__role\">Usually replies within a day</span></span>\n          </div>\n          <p class=\"ds-note\">Readers only check that the day, the place and the price are clear.</p>\n        </div>\n      </section>\n    </div>\n  </div>\n</div>\n</section>\n\n<section class=\"ds-view\" id=\"guide\">\n<div class=\"ds-column\">\n  <header class=\"ds-page-header\">\n    <ol class=\"ds-breadcrumb\">\n      <li class=\"ds-breadcrumb__item\"><a class=\"ds-link ds-link--quiet\" href=\"#home\">This week</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\">Hosting</li>\n    </ol>\n    <div class=\"ds-page-header__row\">\n      <div class=\"ds-page-header__main\">\n        <h1 class=\"ds-page-header__title\">The host guide</h1>\n        <p class=\"ds-page-header__lead\">Everything we have learned from 300 evenings in borrowed rooms.</p>\n      </div>\n      <div class=\"ds-page-header__actions\">\n        <a class=\"ds-button\" href=\"#post\">Post an event</a>\n      </div>\n    </div>\n  </header>\n\n  <div class=\"ds-split\">\n    <article class=\"ds-sheet\">\n      <div class=\"ds-prose\" data-component=\"typography\">\n        <h1>Hosting on chronoskin</h1>\n        <p>Anyone who lives or works between the canal and the park can pin an event. It does not have to be big: <strong>six people around a table</strong> counts.</p>\n        <h2>Before you pin it</h2>\n        <p>Check the room is free and pick a day. Give the event a short tag such as <code>bike-night</code> so that regulars can follow it.</p>\n        <ul>\n          <li>Say what it costs, even when the answer is nothing</li>\n          <li>Say whether children and dogs can come</li>\n          <li>Say where the door is</li>\n        </ul>\n        <h3>On the night</h3>\n        <p>Open the list on your phone and tick people in. Unclaimed places go to the waiting list after fifteen minutes. See <a href=\"#event\">how a booking looks</a> to a guest.</p>\n      </div>\n      <ul class=\"ds-links\" data-component=\"links\">\n        <li><a class=\"ds-link\" href=\"#guide\">Borrowing a room</a></li>\n        <li><a class=\"ds-link is-visited\" href=\"#guide\">Writing the notice</a></li>\n        <li><a class=\"ds-link is-hover\" href=\"#guide\">When nobody comes</a></li>\n        <li><a class=\"ds-link is-active\" href=\"#post\">Post an event</a></li>\n      </ul>\n    </article>\n    <div class=\"ds-stack\">\n      <h2 class=\"ds-label\">Asked a lot</h2>\n      <div class=\"ds-accordion\" data-component=\"accordion\">\n        <details class=\"ds-accordion__item\" open>\n          <summary class=\"ds-accordion__head\">Does it cost anything to post?</summary>\n          <div class=\"ds-accordion__body\"><p>No. The board is paid for by the street fund.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Can I charge for tickets?</summary>\n          <div class=\"ds-accordion__body\"><p>Yes, at the door. We do not take payments.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">What if I have to cancel?</summary>\n          <div class=\"ds-accordion__body\"><p>Mark it cancelled and everyone booked gets a message.</p></div>\n        </details>\n        <details class=\"ds-accordion__item\">\n          <summary class=\"ds-accordion__head\">Who reads my event over?</summary>\n          <div class=\"ds-accordion__body\"><p>One of nine volunteer neighbours, in turn.</p></div>\n        </details>\n      </div>\n      <section class=\"ds-panel ds-panel--plain\">\n        <h2 class=\"ds-panel__title\">Still stuck?</h2>\n        <div class=\"ds-panel__body\">\n          <p>Come to the street plan meeting on Monday and ask in person.</p>\n          <a class=\"ds-button ds-button--secondary ds-button--wide\" href=\"#event\">See the meeting</a>\n        </div>\n      </section>\n    </div>\n  </div>\n</div>\n</section>\n</main>\n\n<footer class=\"ds-footer\" data-component=\"footer\">\n  <p class=\"ds-footer__brand\">chronoskin</p>\n  <ul class=\"ds-footer__list\">\n    <li><a class=\"ds-footer__link\" href=\"#calendar\">Calendar</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#post\">Post an event</a></li>\n    <li><a class=\"ds-footer__link\" href=\"#guide\">Host guide</a></li>\n  </ul>\n  <p class=\"ds-footer__legal\">chronoskin, 2025. Kept by the neighbours.</p>\n</footer>\n\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.neubrutalism.portal.s08.p03.t02.u03\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"neubrutalism\",\n    \"years\": [\n      2021,\n      2026\n    ]\n  },\n  \"archetype\": \"portal\",\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-8323\",\n  \"short\": \"v1-nb-8323\"\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: 3px;\n  --border-width-strong: 4px;\n  --border-style: solid;\n  --radius-control: 8px;\n  --radius-panel: 8px;\n  --radius-pill: 8px;\n  --radius-page: 8px;\n  --shadow-panel: 5px 5px 0 0 var(--color-surface-strong), 5px 5px 0 3px var(--color-shadow);\n  --shadow-control: 4px 4px 0 0 var(--color-surface-strong), 4px 4px 0 3px var(--color-shadow);\n  --shadow-control-hover: 3px 3px 0 0 var(--color-shadow);\n  --shadow-control-pressed: 1px 1px 0 0 var(--color-shadow);\n  --shadow-dialog: 8px 8px 0 0 var(--color-surface-strong), 8px 8px 0 3px var(--color-shadow);\n  --shadow-text: none;\n  --fill-page:\n    linear-gradient(90deg, color-mix(in srgb, var(--color-border-muted) 50%, transparent) 1px, transparent 0) 0 0 / 70px 70px,\n    linear-gradient(color-mix(in srgb, var(--color-border-muted) 50%, transparent) 1px, transparent 0) 0 0 / 70px 70px,\n    var(--color-page);\n  --fill-bar: var(--color-bar);\n  --fill-bar-alt: var(--color-bar-alt);\n  --fill-inverse: var(--color-inverse);\n  --fill-accent: var(--color-accent);\n  --fill-panel: var(--color-surface);\n  --fill-button: var(--color-button);\n  --fill-button-hover: var(--color-button);\n  --fill-button-secondary: var(--color-button-secondary);\n  --fill-input: var(--color-input);\n  --focus-ring: 3px solid var(--color-focus);\n  --transition: transform 0.2s ease, box-shadow 0.2s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
