{
  "id": "v1-gf-1135",
  "long_id": "v1.game-fantasy.portal.s01.p01.t03.u05",
  "name": "Game fantasy portal (carved stone, gilded frames)",
  "era": {
    "slug": "game-fantasy",
    "code": "gf",
    "name": "Game fantasy",
    "years": [
      2004,
      2026
    ],
    "description": "Game sites from 2004 to today: carved and gilded frames, parchment, dark stone and metal, ornate display capitals over a plain reading face, banners, crests and coloured item names. The older ones are built like the game's own windows; the newer ones are dark, wide and cinematic, with the ornament kept for titles, buttons and dividers."
  },
  "archetype": "portal",
  "mode": "mix",
  "viewport": {
    "width": 1024,
    "fluid": false
  },
  "summary": "The home portal of an online role-playing game as such sites looked in the early years, 2004 to 2012, of an era that runs from 2004 to 2026: a fixed sheet on dark stone, every box a gilded game window with corner caps, ornate capitals over small Verdana, bevelled metal plates for buttons and a news column beside realm status and event boxes. It was the common look of official game sites and large fan sites of those years, built for a 1024px screen and drawn then with sliced images. Here stone, gilding and plates are all gradients, shadows and pseudo-elements fed by tokens.",
  "url": "https://chrono.skin/s/v1-gf-1135",
  "preview_url": "https://chrono.skin/s/v1-gf-1135/specimen.html",
  "files": {
    "STYLE.md": "# Game fantasy portal (carved stone, gilded frames)\n\n## Summary\n\nThe home portal of an online role-playing game as such sites looked in the early years, 2004 to 2012, of an era that runs from 2004 to 2026: a fixed sheet on dark stone, every box a gilded game window with corner caps, ornate capitals over small Verdana, bevelled metal plates for buttons and a news column beside realm status and event boxes. It was the common look of official game sites and large fan sites of those years, built for a 1024px screen and drawn then with sliced images. Here stone, gilding and plates are all gradients, shadows and pseudo-elements fed by tokens.\n\n## Layout\n\n- Fixed centred column: `--size-page` is 980px (`.ds-page__wrap`). The page stone shows left and right of it and below the footer.\n- Order of the home page: the banner (`--size-banner`, 92px, brand left, player count and account links right), the strip of navigation plates, then the sheet in `--color-canvas` between two frame-metal edges: the hero with the featured video across the full width, and below it two columns, the news panel (flexible, about 640px) and a column of side boxes (`--size-aside`, 290px) on the right, `--space-5` apart. The footer plate closes the sheet. Banner, navigation and footer are written once and stay on every view.\n- Inner pages keep the banner, the plates and the footer; the hero is left out. They start with the breadcrumb on the sheet, then `.ds-page-header` (title and one line on the left, one or two plates on the right, a frame-metal rule under it), then the working parts: either the two columns again (the article with its accordion beside related boxes), or full-width blocks (notices, the `.ds-stats` strip, `.ds-tabs` standing on the framed table), or a `.ds-split` (the form beside a dialog and a small panel).\n- Views: `home` (hero and video, latest news with pagination, realm status, world event bars, screenshot of the day, the closing band), `news` (one article, patch notes by calling in an accordion, related links and boxes), `guide` (the four callings as grid cells, the screenshot carousel, first steps and an empty video slot), `realms` (notices, figures, tabs by region and the realm table with a tooltip on a full realm), `account` (the account form with its buttons, the dialog that confirms closing the account, free-play progress).\n- Spacing scale: `--space-1` 2px (between a label and its bar), `--space-2` 4px (cell padding, small gaps), `--space-3` 8px (row padding, between buttons), `--space-4` 12px (panel padding, list gaps), `--space-5` 16px (between blocks and columns, sheet padding), `--space-6` 24px (hero padding, large button sides), `--space-7` 36px (reserved for wide ribbons).\n- Control heights: `--size-control-small` 20px, `--size-control` 26px, `--size-control-large` 40px. `--size-date` 44px is the date plate of a news post, `--size-play` 48px the round play plate.\n\n## Typography and colour roles\n\nThis style combines the parts of different styles of one era. Where a note below names a value that differs from `tokens.css`, the tokens are right.\n\n- Two families and a monospace. `--font-heading` and `--font-ui` are a Garamond (EB Garamond where installed, else Hoefler Text, Garamond, Times New Roman) at weight 600: headings in ordinary case, navigation, buttons and table heads in capitals (`--ui-transform`). `--font-body` is Trebuchet MS for everything read. The references used commercial book and inscriptional faces; this stack is the closest free one.\n- Sizes: `--text-base` 13px at `--line-body` 1.4; `--text-small` 11px; `--text-ui` 14px; `--text-large` 17px; `--text-h3` 17px, `--text-h2` 22px, `--text-h1` 30px; `--text-display` 42px with 1px tracking for the hero title only.\n- Palette: night-blue page, pale steel sheet and near-white slabs, a deep blue banner and table heads with ice-white lettering (`--color-bar`), dark slate pennants, hero and foot plate (`--color-bar-alt`), slate text, navy headings, steel frames, a blue primary plate and an ice-blue accent for the current pennant and tab. A dull gold (`--color-accent-alt`) is the one warm colour, in frame corners and \"new\" markers.\n- Surface: a 3px ridge border that the browser bevels into lit and dark halves, rounded corners (4px controls, 8px frames, 12px slabs and labels), deep soft shadows under frames, glossy plates and bars split at half height, slabs with a diagonal sheen (`--fill-panel`), a page of faint diagonal frost streaks under a pale glow.\n- The era's rule for text on fills, kept by every layout and every token set: on `--color-canvas` and on the three surfaces (`--color-surface`, `--color-surface-alt`, `--color-surface-strong`, and `--fill-panel`) text is `--color-text`, `--color-text-muted`, `--color-heading`, `--color-heading-alt` and the link colours; on `--fill-bar` only `--color-bar-text`; on `--fill-bar-alt` only `--color-bar-alt-text`; on `--fill-inverse` only `--color-inverse-text`; on `--fill-accent` only `--color-accent-text`; on `--fill-button` `--color-button-text`, on `--fill-button-secondary` `--color-button-secondary-text`; in a form well `--color-input-text`; on `--color-notice` `--color-notice-text` and on `--color-danger-surface` `--color-danger`.\n- No text is written straight on `--color-page`: the page only shows as stone around the slabs.\n- `--color-fill-1` to `--color-fill-4`, `--color-success`, `--color-warning`, `--color-danger` and `--color-accent-alt` are inks: every palette of the era keeps them readable on its surfaces. They colour item names by rarity (`.ds-item`: common `--color-text`, uncommon `--color-success`, rare `--color-fill-1`, epic `--color-fill-2`, legendary `--color-fill-3`, set `--color-fill-4`), class crests, status labels and bars. They are never used as a fill under text; a grid cell is the surface tinted by 24% of its fill colour, and a status badge is the surface tinted by 16% of its status colour with the colour itself as ink and border.\n- `--color-border-strong` is the metal of every frame (gold, brass or steel); `--color-border` the ordinary rule; `--color-border-muted` the faint rule between rows. `--color-accent-alt` is the small stone set in each frame corner, the \"new\" marker and the edge of a learned or current cell; it is never a fill under text.\n- `--color-accent` (through `--fill-accent`) marks the current navigation plate, the current tab, the current page number, the default badge and the default bar of a progress bar.\n- The destructive button is the secondary plate lettered and edged in `--color-danger`, because the primary plate of a palette may itself be red.\n- Hero blocks are filled with `--fill-bar-alt` under a glow of `--color-accent` and written in `--color-bar-alt-text`; the banner and table heads take `--fill-bar`; the footer takes `--fill-bar-alt`. `--fill-inverse` with `--color-inverse-text` is the closing band of the home page (`.ds-band`): a strip of the opposite material, parchment on a dark set and dark stone on a light one.\n- One-off values built in `components.css` from tokens: the faceted corner caps of `.ds-frame` (the frame metal against the same colour mixed 45% toward `--color-shadow`), button and plate edges (the fill colour mixed 60% toward `--color-shadow`), the 24% and 16% tints named above, alternate rows and wells as `--color-surface-alt` at 70% over the panel fill, `50%` radius for lamps and the round play plate, and `clip-path` polygons for ribbons, pennants, standards and the drawn landscape.\n\n## Components\n\n- `.ds-page`: on `<body>`; paints the stone. `.ds-page__wrap` is the 980px column, `.ds-page__body` the sheet, `.ds-page__inner` the stack of a view, `.ds-page__columns` the news column and the 290px column, `.ds-page__main` and `.ds-page__aside` their stacks.\n- `.ds-nav`: the banner and the strip under it. `.ds-nav__banner` holds the `.ds-brand` with `.ds-nav__tagline`, and `.ds-nav__account` with `.ds-nav__count` and `.ds-nav__action` links; `.ds-nav__links` is the strip of `.ds-nav__link` plates, the current one in `--fill-accent` (`is-current`, or in the specimen one selector per view); `.ds-nav__end` pushes the account plate to the right. One item is a `.ds-menu`.\n- `.ds-brand`: the mark and name at the left of the banner. `.ds-brand__mark` is a 56px crest tile dressed as the primary plate (`--fill-button`, `--color-button-text`, the frame-metal border, `--radius-control`, `--shadow-control`); `.ds-brand__name` the name in the heading face at h1 size in `--color-bar-text`. Both are placeholders for the installing project's own name and logo.\n- `.ds-hero`: a frame in two columns: `.ds-hero__copy` with a `.ds-ribbon`, `.ds-hero__title`, `.ds-hero__lead`, `.ds-hero__actions` (one large plate, one secondary) and `.ds-hero__note`; and the featured `.ds-video`. Once, at the top of the home page.\n- `.ds-page-header`: the head of an inner page: `.ds-page-header__title`, `.ds-page-header__text`, `.ds-page-header__actions` on the right, a frame-metal rule below.\n- `.ds-ribbon`: a short label on `--fill-accent` with notched ends.\n- `.ds-video`: a framed 16 to 9 `.ds-scene` with a round `.ds-scene__play` plate and a `.ds-video__caption`. `.ds-scene` is a landscape drawn from `--color-bar-alt` (`.ds-scene__far`, `.ds-scene__near`; `--2` and `--3` change the sky): the stand-in for a screenshot or video still.\n- `.ds-carousel`: one framed screenshot with `.ds-carousel__arrow` plates (`--next` on the right) over the `.ds-carousel__stage`, and a `.ds-carousel__foot` with the caption and diamond `.ds-carousel__dot`s, `is-current` lit.\n- `.ds-list__date`: the date plate beside a news post, `.ds-list__month` over the day.\n- `.ds-sidebar`: a framed side box: `.ds-sidebar__title` plate in `--fill-bar`, `.ds-sidebar__list` of `.ds-sidebar__item` rows (a lamp, a `.ds-sidebar__link`, a `.ds-sidebar__meta`), `.ds-sidebar__foot`.\n- `.ds-footer`: the closing plate in `--fill-bar-alt`: centred `.ds-footer__links` of `.ds-footer__link` and a `.ds-footer__note`.\n- Period components carried: `.ds-menu`, `.ds-tooltip`, `.ds-accordion`, `.ds-progress`, `.ds-carousel`. `.ds-avatar` is defined but this portal shows no portraits; a switch did not exist on these sites.\n- `.ds-view`: one screen of the example site, a `<section>` with an id; only the one named in the address shows, and `.ds-view--home` shows when none is named. It is always a plain block; an inner wrapper (`.ds-page__inner`) does the layout.\n- `.ds-frame`: the game window every box is built from. `--fill-panel` inside a border of `--border-width-strong` in `--color-border-strong`, with `--shadow-panel` for its inner lines and lip, and two pseudo-elements that set a faceted cap and a small `--color-accent-alt` stone on each corner (`--size-corner`, 8px). Add it to a panel, a table wrapper, a side box, the hero. `.ds-frame--plain` leaves the corner caps off for a lighter box inside another frame or a strip of figures.\n- `.ds-prose`: running text: h1, h2 (ruled underneath), h3 (in `--color-heading-alt`), paragraphs, lists, `code`, links. `.ds-prose__lead` is the opening line in the heading face; `.ds-prose__quote` a quoted passage with a `cite` line.\n- `.ds-link`: text link; states `is-visited`, `is-hover`, `is-active`, `is-focus`. `.ds-link--quiet` for meta and tool links. `.ds-links` is a wrapping row of links.\n- `.ds-button`: a bevelled metal plate, 26px high, with a lit top edge and a dark lip from `--shadow-control`. `.ds-button--secondary` is the second metal; `.ds-button--danger` the destructive plate (secondary metal, danger ink and edge); `.ds-button--large` the 40px call in the heading face (\"Play free\", \"Apply to join\"); `.ds-button--small` 20px. States `is-hover` (takes `--shadow-control-hover`, which is where a set's glow shows), `is-active`, `is-focus`, `is-disabled`. `.ds-buttons` is a row.\n- `.ds-form`: rows (`.ds-form__row`) of a right-aligned `.ds-form__label` (130px, in the UI face) and a `.ds-form__field`. `.ds-form__input`, `.ds-form__select` and `.ds-form__textarea` are wells sunk with `--shadow-control-pressed`; `.ds-form__input--short` is a 140px well; `is-error` with `.ds-form__error` under it; `.ds-form__hint`; `.ds-form__check` with `.ds-form__checkbox`; `.ds-form__actions`, where `.ds-form__actions-end` pushes the destructive plate to the right. `.ds-form--search` is one well and one plate in a line.\n- `.ds-table`: a data table, always inside a `.ds-frame`. Head cells take `--fill-bar`; rows are ruled with `--color-border-muted` and every second row is tinted; `is-numeric` right-aligns a column, `is-centre` centres it; `.ds-table__group` is a category row in `--color-surface-strong`; `.ds-table__sub` a small second line in a cell; `.ds-table__who` a crest beside a name.\n- `.ds-list`: ruled rows. `.ds-list__item` holds a `.ds-list__body` with `.ds-list__title`, `.ds-list__text` and `.ds-list__meta`, and may end in a badge. `.ds-list--tight` is the dense form for side boxes and item lists.\n- `.ds-panel`: a box with a `.ds-panel__title` and a `.ds-panel__body` (`--flush` for a table or list that runs to the edges), `.ds-panel__text`, `.ds-panel__foot`. Use it together with `.ds-frame`.\n- `.ds-stat`: one figure: `.ds-stat__value` (h1 size, heading face) over `.ds-stat__label` (small, UI face). Three to five sit in a `.ds-stats` row, one framed strip divided by rules.\n- `.ds-grid`: four `.ds-grid__cell` blocks across (`.ds-grid--two` for two); the base cell is tinted and edged with `--color-fill-1`, `.ds-grid__cell--2`, `--3`, `--4` with the others. Inside: `.ds-grid__icon` (a crest in the fill colour), `.ds-grid__title`, `.ds-grid__text`, `.ds-grid__more` or a badge.\n- `.ds-tabs`: plates standing on the top edge of the frame that follows them; `.ds-tabs__tab`, the `is-current` one taller and in `--fill-accent`; `.ds-tabs__count` for a number.\n- `.ds-badge`: a small label in `--fill-accent`. Status variants `.ds-badge--success`, `.ds-badge--warning`, `.ds-badge--danger` (ink on a tint of itself), `.ds-badge--quiet` (a rank or a plain tag), `.ds-badge--new` (outlined in `--color-accent-alt`). `.ds-badges` is a row; `.ds-dot` with `--success`, `--warning`, `--danger` is a status lamp.\n- `.ds-item`: an item name in its rarity colour: plain for common, `--uncommon`, `--rare`, `--epic`, `--legendary`, `--set`. Always bold, never underlined.\n- `.ds-tooltip`: the item window, the era's signature. The trigger wraps a `.ds-tooltip__tip`, a small frame with `--shadow-dialog` that shows on hover or focus (`is-open` shows it by class; `.ds-tooltip--end` hangs it from the right edge). Inside: `.ds-tooltip__name` (with a `.ds-item` rarity class), `.ds-tooltip__line` rows, `--bonus` in `--color-success`, `--muted`, `--lore` in italics. `.ds-tooltip--card` writes the same window into the page.\n- `.ds-progress`: a sunk track with a `.ds-progress__bar`; width by `.ds-progress--10`, `--25`, `--40`, `--60`, `--75`, `--90`, `--100`; colour by `--health` (`--color-success`), `--xp` (`--color-fill-2`), `--rep` (`--color-warning`), `--danger`. `.ds-progress__label` is the line above it, name left and figure right.\n- `.ds-avatar`: a portrait as a framed crest: an inline SVG class crest on a `--color-surface-strong` tile with the frame border. `.ds-avatar--small` (26px), default 36px, `.ds-avatar--large` (72px); `.ds-avatar--1` to `--4` colour the crest with a fill colour.\n- `.ds-accordion`: `<details>` sections; `.ds-accordion__item`, `.ds-accordion__summary` with a small plate that reads + or -, `.ds-accordion__meta` at its right, `.ds-accordion__body`.\n- `.ds-menu`: the drop-down under a navigation item: a `.ds-menu__list` of `.ds-menu__item` links in a small frame, shown on hover or focus of the item (`is-open` by class). `.ds-menu__caret` is the small arrow in the item.\n- `.ds-notice`: a ruled message with `.ds-notice__title` and `.ds-notice__text`; `.ds-notice--error` for errors. `.ds-notices` stacks several.\n- `.ds-pagination`: small secondary plates, `.ds-pagination__link`; `is-current` in `--fill-accent`, `is-disabled` flat.\n- `.ds-breadcrumb`: a small trail of `.ds-breadcrumb__link`, `.ds-breadcrumb__sep` (a double chevron) and `.ds-breadcrumb__current`.\n- `.ds-dialog`: a small game window: `.ds-dialog__title` plate in `--fill-bar` with a square `.ds-dialog__close`, `.ds-dialog__body` with `.ds-dialog__text`, `.ds-dialog__actions` centred. `.ds-dialog__backdrop` is the dimmed area behind it where the view has room for one.\n- `.ds-empty`: an empty slot sunk into the sheet: `.ds-empty__icon`, `.ds-empty__title`, `.ds-empty__text` and one secondary plate.\n- `.ds-band`: the closing call of the home page, a strip in `--fill-inverse`: `.ds-band__title` and `.ds-band__text` on the left, one primary plate on the right. At most one per page.\n- `.ds-heading`: a section title followed by a fading rule (`--centre` puts a rule on both sides); `.ds-rule` a rule with a diamond in its middle.\n- `.ds-stack`, `.ds-split` (`--wide` 3 to 2, `--even` equal heights), `.ds-row` (`--between`), `.ds-muted`, `.ds-icon`: small layout helpers.\n\n## Never\n\n- `content-width <= 980px`: the page is a fixed column made for a 1024px screen.\n- `font-size <= 42px`: the hero title is the largest text.\n- `font-size >= 11px`: meta text is 11px and nothing is smaller.\n- `line-height <= 1.5`: body text is set at 1.4.\n- `font-families <= 3`: a Garamond, Trebuchet MS and a monospace.\n- `letter-spacing <= 1px`: only the hero title is tracked.\n- `border-radius <= 2px`: everything is square; only badges are eased by 2px, and lamps and the play button are round.\n- `border-width <= 2px`: borders are hairlines.\n- `box-shadow-blur <= 80px`: the longest shadow is the dialog's.\n- `animation = none`: nothing moves by itself; only hovers ease.\n\n## Extending\n\nDerive a new component from the nearest one in the specimen and use tokens only. Anything that stands as a box is a `.ds-frame`: do not draw a new border, add the class. A raised thing (a plate, a title, a crest) takes a `--fill-*` gradient, an edge mixed toward `--color-shadow` and `--shadow-control`; a sunk thing (a well, a track, an empty slot) takes `--fill-input` or the tinted alternate surface and `--shadow-control-pressed`. Keep the era's rule for text on fills from the section above: bar text on bars, surface text on surfaces, and the rarity and status colours as ink only. A new banner or ribbon is cut with `clip-path` from a bar or accent fill. Do not add images, soft cards without a frame, transitions, or a colour that is not a token.\n",
    "components.css": "/* Layout tokens (structure part). A fixed 980px portal on a 1024px screen:\n   a banner and a strip of navigation plates, a hero with the featured video,\n   then a news column beside a 290px column of side boxes. */\n:root {\n  --size-page: 980px;\n  --size-aside: 290px;\n  --size-banner: 92px;\n  --size-brand: 56px;\n  --size-date: 44px;\n  --size-play: 48px;\n  --size-hair: 1px;\n  --size-corner: 8px;\n  --size-control: 26px;\n  --size-control-small: 20px;\n  --size-control-large: 40px;\n  --size-icon: 16px;\n  --size-dot: 8px;\n  --size-crest: 36px;\n  --size-crest-large: 72px;\n  --size-bar: 12px;\n  --size-label: 130px;\n  --size-field-short: 140px;\n  --size-textarea: 90px;\n  --size-dialog: 380px;\n  --size-tip: 250px;\n  --size-menu: 170px;\n  --space-1: 2px;\n  --space-2: 4px;\n  --space-3: 8px;\n  --space-4: 12px;\n  --space-5: 16px;\n  --space-6: 24px;\n  --space-7: 36px;\n}\n\n/* ---------- views: one screen of the example site 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/* ---------- frame: the game window every box is built from ----------\n   The border is the metal of the frame, the surface token --shadow-panel\n   adds its inner lines and lip, and two pseudo-elements set a faceted cap\n   with a small stone on each corner. */\n.ds-frame {\n  position: relative;\n  box-sizing: border-box;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-panel);\n}\n.ds-frame::before,\n.ds-frame::after {\n  content: \"\";\n  position: absolute;\n  inset: calc((var(--border-width-strong) + var(--space-1)) * -1);\n  z-index: 2;\n  pointer-events: none;\n  border-radius: var(--radius-panel);\n}\n.ds-frame::before {\n  background:\n    linear-gradient(135deg, var(--color-border-strong) 50%, color-mix(in srgb, var(--color-border-strong), var(--color-shadow) 45%) 50%) top left / var(--size-corner) var(--size-corner) no-repeat,\n    linear-gradient(225deg, var(--color-border-strong) 50%, color-mix(in srgb, var(--color-border-strong), var(--color-shadow) 45%) 50%) top right / var(--size-corner) var(--size-corner) no-repeat,\n    linear-gradient(45deg, color-mix(in srgb, var(--color-border-strong), var(--color-shadow) 45%) 50%, var(--color-border-strong) 50%) bottom left / var(--size-corner) var(--size-corner) no-repeat,\n    linear-gradient(315deg, color-mix(in srgb, var(--color-border-strong), var(--color-shadow) 45%) 50%, var(--color-border-strong) 50%) bottom right / var(--size-corner) var(--size-corner) no-repeat;\n}\n.ds-frame::after {\n  background:\n    radial-gradient(circle, var(--color-accent-alt) 0, var(--color-accent-alt) 28%, transparent 34%) top left / var(--size-corner) var(--size-corner) no-repeat,\n    radial-gradient(circle, var(--color-accent-alt) 0, var(--color-accent-alt) 28%, transparent 34%) top right / var(--size-corner) var(--size-corner) no-repeat,\n    radial-gradient(circle, var(--color-accent-alt) 0, var(--color-accent-alt) 28%, transparent 34%) bottom left / var(--size-corner) var(--size-corner) no-repeat,\n    radial-gradient(circle, var(--color-accent-alt) 0, var(--color-accent-alt) 28%, transparent 34%) bottom right / var(--size-corner) var(--size-corner) no-repeat;\n}\n.ds-frame--plain::before,\n.ds-frame--plain::after {\n  display: none;\n}\n\n/* ---------- small layout helpers ---------- */\n.ds-stack {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n.ds-split {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-5);\n  align-items: start;\n}\n.ds-split--wide {\n  grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);\n}\n.ds-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n.ds-muted {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-icon {\n  display: inline-block;\n  flex: none;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  vertical-align: middle;\n}\n/* An ornamental heading: the title between two fading rules. */\n.ds-heading {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n  margin: 0;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-heading::after {\n  content: \"\";\n  flex: 1;\n  height: var(--size-hair);\n  background: linear-gradient(to right, var(--color-border-strong), transparent);\n}\n/* A rule with a diamond set in its middle. */\n.ds-rule {\n  position: relative;\n  height: var(--size-hair);\n  margin: var(--space-3) 0;\n  background: linear-gradient(to right, transparent, var(--color-border-strong) 20%, var(--color-border-strong) 80%, transparent);\n}\n.ds-rule::after {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: var(--size-corner);\n  height: var(--size-corner);\n  background: var(--color-border-strong);\n  box-shadow: var(--shadow-control);\n  transform: translate(-50%, -50%) rotate(45deg);\n}\n\n/* ---------- typography ---------- */\n.ds-prose {\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  line-height: var(--line-body);\n}\n.ds-prose h1,\n.ds-prose h2,\n.ds-prose h3 {\n  margin: var(--space-5) 0 var(--space-3);\n  color: var(--color-heading);\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}\n.ds-prose h1 { font-size: var(--text-h1); }\n.ds-prose h2 {\n  padding-bottom: var(--space-2);\n  font-size: var(--text-h2);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-prose h3 {\n  color: var(--color-heading-alt);\n  font-size: var(--text-h3);\n}\n.ds-prose > :first-child { margin-top: 0; }\n.ds-prose > :last-child { margin-bottom: 0; }\n.ds-prose p { margin: 0 0 var(--space-4); }\n.ds-prose ul,\n.ds-prose ol {\n  margin: 0 0 var(--space-4);\n  padding-left: var(--space-6);\n}\n.ds-prose li { margin-bottom: var(--space-2); }\n.ds-prose li::marker { color: var(--color-heading-alt); }\n.ds-prose strong { font-weight: var(--weight-bold); }\n.ds-prose code {\n  padding: 0 var(--space-2);\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n  font-family: var(--font-mono);\n  font-size: var(--text-base);\n}\n.ds-prose a {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n}\n.ds-prose a:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-prose__lead {\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  line-height: var(--line-heading);\n}\n/* A quoted passage: a ruled inset in the alternate surface. */\n.ds-prose__quote {\n  margin: 0 0 var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-alt);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-prose__quote cite {\n  display: block;\n  margin-bottom: var(--space-2);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-style: normal;\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- links ---------- */\n.ds-link {\n  color: var(--color-link);\n  text-decoration: var(--link-decoration);\n  transition: var(--transition);\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}\n.ds-link:active,\n.ds-link.is-active {\n  color: var(--color-link-active);\n}\n.ds-link:focus-visible,\n.ds-link.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-link--quiet,\n.ds-link--quiet:visited {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\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  font-size: var(--text-base);\n}\n\n/* ---------- buttons: bevelled metal plates ---------- */\n.ds-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--space-2);\n  box-sizing: border-box;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: 0 var(--space-5);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button), var(--color-shadow) 60%);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  line-height: 1;\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n  cursor: pointer;\n  transition: var(--transition);\n}\n.ds-button:hover,\n.ds-button.is-hover {\n  background: var(--fill-button-hover);\n  color: var(--color-button-hover-text);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-button:active,\n.ds-button.is-active {\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-button:focus-visible,\n.ds-button.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-button--secondary,\n.ds-button--secondary:hover,\n.ds-button--secondary.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border-color: color-mix(in srgb, var(--color-button-secondary), var(--color-shadow) 60%);\n  text-shadow: none;\n}\n/* The destructive plate: the secondary metal, lettered and edged in the\n   danger colour. */\n.ds-button--danger,\n.ds-button--danger:hover,\n.ds-button--danger.is-hover {\n  background: var(--fill-button-secondary);\n  color: var(--color-danger);\n  border-color: var(--color-danger);\n  text-shadow: none;\n}\n.ds-button--large {\n  min-height: var(--size-control-large);\n  padding: 0 var(--space-6);\n  font-family: var(--font-heading);\n  font-size: var(--text-large);\n  letter-spacing: var(--heading-tracking);\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}\n.ds-button:disabled,\n.ds-button.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  border-color: var(--color-border);\n  box-shadow: none;\n  text-shadow: none;\n  cursor: default;\n}\n.ds-buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n}\n\n/* ---------- form ---------- */\n.ds-form {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-4);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-form__row {\n  display: grid;\n  grid-template-columns: var(--size-label) minmax(0, 1fr);\n  gap: var(--space-4);\n  align-items: start;\n}\n.ds-form__label {\n  padding-top: var(--space-2);\n  color: var(--color-heading-alt);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-align: right;\n  text-transform: var(--ui-transform);\n}\n.ds-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  min-width: 0;\n}\n.ds-form__input,\n.ds-form__select,\n.ds-form__textarea {\n  box-sizing: border-box;\n  width: 100%;\n  min-height: var(--size-control);\n  margin: 0;\n  padding: var(--space-2) var(--space-3);\n  background: var(--fill-input);\n  color: var(--color-input-text);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-pressed);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  line-height: var(--line-body);\n}\n.ds-form__textarea {\n  min-height: var(--size-textarea);\n  resize: vertical;\n}\n.ds-form__input--short {\n  width: var(--size-field-short);\n}\n.ds-form__input:focus,\n.ds-form__select:focus,\n.ds-form__textarea:focus,\n.ds-form__input.is-focus {\n  outline: var(--focus-ring);\n}\n.ds-form__input.is-error {\n  border-color: var(--color-danger);\n}\n.ds-form__error {\n  color: var(--color-danger);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n}\n.ds-form__hint {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-form__check {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  color: var(--color-text);\n}\n.ds-form__checkbox {\n  width: var(--size-icon);\n  height: var(--size-icon);\n  margin: 0;\n  accent-color: var(--color-accent);\n}\n.ds-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--space-3);\n  padding-top: var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-form__actions-end {\n  margin-left: auto;\n}\n/* A search line: one well and one plate. */\n.ds-form--search {\n  flex-direction: row;\n  align-items: center;\n  gap: var(--space-2);\n}\n\n/* ---------- table ---------- */\n.ds-table {\n  width: 100%;\n  border-collapse: collapse;\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-table th,\n.ds-table td {\n  padding: var(--space-2) var(--space-3);\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 thead th {\n  padding: var(--space-3);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  white-space: nowrap;\n}\n.ds-table tbody th {\n  font-weight: var(--weight-bold);\n}\n.ds-table tbody tr:nth-child(even) {\n  background: color-mix(in srgb, var(--color-surface-alt) 70%, transparent);\n}\n.ds-table tbody tr:last-child th,\n.ds-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.ds-table tbody tr:hover,\n.ds-table tbody tr.is-hover {\n  background: var(--color-surface-strong);\n}\n.ds-table .is-numeric {\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n.ds-table .is-centre {\n  text-align: center;\n}\n.ds-table a:not(.ds-item) {\n  color: var(--color-link);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-table a:not(.ds-item):hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-table__group th,\n.ds-table__group td {\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-table__sub {\n  display: block;\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n.ds-table__who {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n}\n\n/* ---------- list ---------- */\n.ds-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-list__item {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-4);\n  padding: var(--space-3) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n}\n.ds-list__item:last-child {\n  border-bottom: 0;\n}\n.ds-list__body {\n  flex: 1;\n  min-width: 0;\n}\n.ds-list__title {\n  display: block;\n  color: var(--color-link);\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  text-decoration: var(--link-decoration-quiet);\n  text-transform: var(--heading-transform);\n}\n.ds-list__title:hover,\n.ds-list__title.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-list__text {\n  margin: var(--space-2) 0 0;\n  color: var(--color-text);\n}\n.ds-list__meta {\n  display: block;\n  margin-top: var(--space-1);\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-list--tight .ds-list__item {\n  align-items: center;\n  padding: var(--space-2) var(--space-4);\n}\n.ds-list--tight .ds-list__title {\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  letter-spacing: 0;\n  text-transform: none;\n}\n\n/* ---------- panel ---------- */\n.ds-panel {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n.ds-panel__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\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  text-transform: var(--heading-transform);\n}\n.ds-panel__body {\n  flex: 1;\n  padding: var(--space-4);\n  font-size: var(--text-base);\n}\n.ds-panel__body--flush {\n  padding: 0;\n}\n.ds-panel__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-panel__foot {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  background: color-mix(in srgb, var(--color-surface-alt) 70%, transparent);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n  font-size: var(--text-small);\n}\n\n/* ---------- stats ---------- */\n.ds-stats {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-stat {\n  flex: 1;\n  padding: var(--space-3) var(--space-4);\n  text-align: center;\n  border-left: var(--border-width) var(--border-style) var(--color-border);\n}\n.ds-stat:first-child {\n  border-left: 0;\n}\n.ds-stat__value {\n  display: block;\n  color: var(--color-heading);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n}\n.ds-stat__label {\n  display: block;\n  color: var(--color-text-muted);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  text-transform: var(--ui-transform);\n}\n\n/* ---------- grid: cells tinted with the four rarity colours ---------- */\n.ds-grid {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: var(--space-4);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-grid--two {\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.ds-grid__cell {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n  padding: var(--space-4);\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-fill-1) 24%, var(--color-surface)) 0, var(--color-surface) 70%);\n  color: var(--color-text);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-fill-1);\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-control);\n  font-size: var(--text-base);\n}\n.ds-grid__cell--2 {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-fill-2) 24%, var(--color-surface)) 0, var(--color-surface) 70%);\n  border-top-color: var(--color-fill-2);\n}\n.ds-grid__cell--3 {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-fill-3) 24%, var(--color-surface)) 0, var(--color-surface) 70%);\n  border-top-color: var(--color-fill-3);\n}\n.ds-grid__cell--4 {\n  background: linear-gradient(to bottom, color-mix(in srgb, var(--color-fill-4) 24%, var(--color-surface)) 0, var(--color-surface) 70%);\n  border-top-color: var(--color-fill-4);\n}\n.ds-grid__icon {\n  width: var(--size-crest);\n  height: var(--size-crest);\n  color: var(--color-fill-1);\n}\n.ds-grid__cell--2 .ds-grid__icon { color: var(--color-fill-2); }\n.ds-grid__cell--3 .ds-grid__icon { color: var(--color-fill-3); }\n.ds-grid__cell--4 .ds-grid__icon { color: var(--color-fill-4); }\n.ds-grid__title {\n  margin: 0;\n  color: var(--color-heading);\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  text-transform: var(--heading-transform);\n}\n.ds-grid__text {\n  flex: 1;\n  margin: 0;\n}\n.ds-grid__cell .ds-badge {\n  align-self: flex-start;\n}\n.ds-grid__more {\n  color: var(--color-link);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-grid__more:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n\n/* ---------- tabs: plates standing on the edge of the window below ---------- */\n.ds-tabs {\n  display: flex;\n  align-items: flex-end;\n  gap: var(--space-1);\n  margin: 0;\n  padding: 0 var(--space-3);\n  list-style: none;\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-tabs__tab {\n  display: block;\n  padding: var(--space-2) var(--space-5);\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-bottom: 0;\n  border-radius: var(--radius-control) var(--radius-control) 0 0;\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  text-transform: var(--ui-transform);\n}\n.ds-tabs__tab:hover,\n.ds-tabs__tab.is-hover {\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-tabs__tab.is-current {\n  padding: var(--space-3) var(--space-5);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  text-shadow: var(--shadow-text);\n}\n.ds-tabs__count {\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n}\n\n/* ---------- badge ---------- */\n.ds-badge {\n  display: inline-block;\n  padding: 0 var(--space-3);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-accent), var(--color-shadow) 50%);\n  border-radius: var(--radius-pill);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  line-height: var(--line-body);\n  white-space: nowrap;\n  vertical-align: middle;\n}\n/* Status labels: the status colour as ink on a tint of itself. */\n.ds-badge--success,\n.ds-badge--warning,\n.ds-badge--danger,\n.ds-badge--quiet {\n  background: color-mix(in srgb, var(--color-success) 16%, var(--color-surface));\n  color: var(--color-success);\n  border-color: var(--color-success);\n}\n.ds-badge--warning {\n  background: color-mix(in srgb, var(--color-warning) 16%, var(--color-surface));\n  color: var(--color-warning);\n  border-color: var(--color-warning);\n}\n.ds-badge--danger {\n  background: color-mix(in srgb, var(--color-danger) 16%, var(--color-surface));\n  color: var(--color-danger);\n  border-color: var(--color-danger);\n}\n.ds-badge--quiet {\n  background: var(--color-surface-strong);\n  color: var(--color-text);\n  border-color: var(--color-border);\n}\n.ds-badge--new {\n  background: transparent;\n  color: var(--color-accent-alt);\n  border-color: var(--color-accent-alt);\n}\n.ds-badges {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--space-2);\n}\n/* A status lamp for a realm or a member. */\n.ds-dot {\n  display: inline-block;\n  flex: none;\n  width: var(--size-dot);\n  height: var(--size-dot);\n  background: var(--color-text-muted);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  vertical-align: middle;\n}\n.ds-dot--success { background: var(--color-success); }\n.ds-dot--warning { background: var(--color-warning); }\n.ds-dot--danger { background: var(--color-danger); }\n\n/* ---------- item names in the rarity colours ---------- */\n.ds-item {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n\n/* ---------- tooltip: the item window ---------- */\n.ds-tooltip {\n  position: relative;\n  display: inline-block;\n  cursor: help;\n}\n.ds-tooltip__tip {\n  position: absolute;\n  top: calc(100% + var(--space-2));\n  left: 0;\n  z-index: 8;\n  display: none;\n  box-sizing: border-box;\n  width: var(--size-tip);\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\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  letter-spacing: 0;\n  text-align: left;\n  text-transform: none;\n  white-space: normal;\n}\n.ds-tooltip:hover .ds-tooltip__tip,\n.ds-tooltip:focus .ds-tooltip__tip,\n.ds-tooltip:focus-within .ds-tooltip__tip,\n.ds-tooltip.is-open .ds-tooltip__tip {\n  display: block;\n}\n.ds-tooltip--end .ds-tooltip__tip {\n  left: auto;\n  right: 0;\n}\n/* The same window written into the page, on an item's own sheet. */\n.ds-tooltip--card {\n  display: block;\n  cursor: default;\n}\n.ds-tooltip--card .ds-tooltip__tip {\n  position: static;\n  display: block;\n  width: auto;\n}\n.ds-tooltip__name {\n  display: block;\n  margin-bottom: var(--space-1);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-bold);\n}\n.ds-tooltip__line {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-4);\n}\n.ds-tooltip__line--muted {\n  color: var(--color-text-muted);\n}\n\n/* ---------- progress: health, experience and reputation bars ---------- */\n.ds-progress {\n  display: block;\n  box-sizing: border-box;\n  height: var(--size-bar);\n  background: var(--fill-input);\n  border: var(--border-width) var(--border-style) var(--color-input-border);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control-pressed);\n  overflow: hidden;\n}\n.ds-progress__bar {\n  display: block;\n  width: 50%;\n  height: 100%;\n  background: var(--fill-accent);\n  box-shadow: var(--shadow-control);\n}\n.ds-progress--10 .ds-progress__bar { width: 10%; }\n.ds-progress--40 .ds-progress__bar { width: 40%; }\n.ds-progress--75 .ds-progress__bar { width: 75%; }\n.ds-progress--90 .ds-progress__bar { width: 90%; }\n.ds-progress--health .ds-progress__bar { background: var(--color-success); }\n.ds-progress--xp .ds-progress__bar { background: var(--color-fill-2); }\n.ds-progress--rep .ds-progress__bar { background: var(--color-warning); }\n.ds-progress__label {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin-bottom: var(--space-1);\n  color: var(--color-text);\n  font-size: var(--text-small);\n}\n.ds-progress__label + .ds-progress {\n  margin-bottom: var(--space-3);\n}\n.ds-progress__label + .ds-progress:last-child {\n  margin-bottom: 0;\n}\n\n/* ---------- avatar: a portrait as a framed crest ---------- */\n.ds-avatar {\n  display: inline-flex;\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  box-sizing: border-box;\n  width: var(--size-crest);\n  height: var(--size-crest);\n  padding: var(--space-2);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-avatar svg {\n  width: 100%;\n  height: 100%;\n}\n.ds-avatar--small {\n  width: var(--size-control);\n  height: var(--size-control);\n  padding: var(--space-1);\n  border-width: var(--border-width);\n}\n.ds-avatar--large {\n  width: var(--size-crest-large);\n  height: var(--size-crest-large);\n  padding: var(--space-3);\n}\n.ds-avatar--1 { color: var(--color-fill-1); }\n\n/* ---------- accordion ---------- */\n.ds-accordion {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-2);\n}\n.ds-accordion__item {\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-control);\n}\n.ds-accordion__summary {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-radius: var(--radius-control);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n  list-style: none;\n  cursor: pointer;\n}\n.ds-accordion__summary::-webkit-details-marker {\n  display: none;\n}\n.ds-accordion__summary::before {\n  content: \"\";\n  display: block;\n  width: var(--size-icon);\n  height: var(--size-icon);\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 4) var(--space-1) no-repeat,\n    linear-gradient(currentColor, currentColor) center / var(--space-1) calc(var(--space-1) * 4) no-repeat,\n    var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-accordion__item[open] > .ds-accordion__summary::before {\n  background: linear-gradient(currentColor, currentColor) center / calc(var(--space-1) * 4) var(--space-1) no-repeat,\n    var(--fill-button-secondary);\n}\n.ds-accordion__summary:hover,\n.ds-accordion__summary.is-hover {\n  color: var(--color-heading);\n}\n.ds-accordion__meta {\n  margin-left: auto;\n  color: var(--color-text-muted);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-body);\n  letter-spacing: 0;\n  text-transform: none;\n}\n.ds-accordion__body {\n  padding: var(--space-3) var(--space-4);\n  border-top: var(--border-width) var(--border-style) var(--color-border);\n}\n\n/* ---------- notice ---------- */\n.ds-notice {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4);\n  background: var(--color-notice);\n  color: var(--color-notice-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-notice__title {\n  font-weight: var(--weight-bold);\n}\n.ds-notice__text {\n  margin: 0;\n}\n.ds-notice--error {\n  background: var(--color-danger-surface);\n  color: var(--color-danger);\n  border-color: var(--color-danger);\n}\n.ds-notices {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-3);\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  box-sizing: border-box;\n  min-width: var(--size-control-small);\n  min-height: var(--size-control-small);\n  padding: 0 var(--space-3);\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button-secondary), var(--color-shadow) 60%);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n}\n.ds-pagination__link:hover,\n.ds-pagination__link.is-hover {\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-pagination__link.is-current {\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  border-color: color-mix(in srgb, var(--color-accent), var(--color-shadow) 50%);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-pagination__link.is-disabled {\n  background: var(--color-disabled);\n  color: var(--color-disabled-text);\n  border-color: var(--color-border);\n  box-shadow: none;\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  color: var(--color-text-muted);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n}\n.ds-breadcrumb__link {\n  color: var(--color-link-quiet);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-breadcrumb__link:hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-breadcrumb__sep {\n  color: var(--color-border-strong);\n}\n.ds-breadcrumb__current {\n  color: var(--color-text);\n  font-weight: var(--weight-bold);\n}\n\n/* ---------- dialog: a small game window with a title plate ---------- */\n.ds-dialog__backdrop {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--space-6) var(--space-4);\n  background: var(--color-overlay);\n  border-radius: var(--radius-panel);\n}\n.ds-dialog {\n  position: relative;\n  box-sizing: border-box;\n  width: var(--size-dialog);\n  max-width: 100%;\n  background: var(--fill-panel);\n  color: var(--color-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n}\n.ds-dialog__title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-3);\n  margin: 0;\n  padding: var(--space-2) var(--space-2) var(--space-2) var(--space-4);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--heading-transform);\n}\n.ds-dialog__close {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control-small);\n  height: var(--size-control-small);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-button), var(--color-shadow) 60%);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-size: 0;\n  text-decoration: none;\n}\n.ds-dialog__close::before {\n  content: \"\";\n  width: calc(var(--space-1) * 5);\n  height: calc(var(--space-1) * 5);\n  background: linear-gradient(currentColor, currentColor) center / 100% var(--space-1) no-repeat,\n    linear-gradient(currentColor, currentColor) center / var(--space-1) 100% no-repeat;\n  rotate: 45deg;\n}\n.ds-dialog__body {\n  padding: var(--space-4);\n}\n.ds-dialog__text {\n  margin: 0 0 var(--space-3);\n}\n.ds-dialog__text:last-child {\n  margin-bottom: 0;\n}\n.ds-dialog__actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-3);\n  padding: var(--space-3) var(--space-4) var(--space-4);\n}\n\n/* ---------- empty state: an empty slot ---------- */\n.ds-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-6) var(--space-5);\n  background: color-mix(in srgb, var(--color-surface-alt) 70%, transparent);\n  color: var(--color-text-muted);\n  border: var(--border-width) var(--border-style) var(--color-border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control-pressed);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  text-align: center;\n}\n.ds-empty__icon {\n  width: var(--size-crest);\n  height: var(--size-crest);\n  color: var(--color-border-strong);\n}\n.ds-empty__title {\n  margin: 0;\n  color: var(--color-heading-alt);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-empty__text {\n  margin: 0;\n  max-width: 44ch;\n}\n\n/* ---------- menu: the drop-down under a navigation plate ---------- */\n.ds-menu {\n  position: relative;\n}\n.ds-menu__list {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 9;\n  display: none;\n  box-sizing: border-box;\n  min-width: var(--size-menu);\n  margin: 0;\n  padding: var(--space-2);\n  list-style: none;\n  background: var(--fill-panel);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-menu:hover .ds-menu__list,\n.ds-menu:focus-within .ds-menu__list,\n.ds-menu.is-open .ds-menu__list {\n  display: block;\n}\n.ds-menu__item {\n  display: block;\n  padding: var(--space-2) var(--space-3);\n  color: var(--color-link);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n  white-space: nowrap;\n}\n.ds-menu__list li:last-child .ds-menu__item {\n  border-bottom: 0;\n}\n.ds-menu__item:hover,\n.ds-menu__item.is-hover {\n  background: var(--color-surface-strong);\n  color: var(--color-link-hover);\n}\n.ds-menu__caret {\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n}\n\n/* ---------- page header of an inner page ---------- */\n.ds-page-header {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: var(--space-5);\n  padding-bottom: var(--space-3);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-page-header__title {\n  margin: 0;\n  color: var(--color-heading);\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}\n.ds-page-header__text {\n  margin: var(--space-1) 0 0;\n  color: var(--color-text-muted);\n  font-size: var(--text-base);\n}\n.ds-page-header__actions {\n  display: flex;\n  flex: none;\n  gap: var(--space-3);\n}\n\n/* ---------- brand: the mark as a crest ---------- */\n.ds-brand {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--space-4);\n  color: var(--color-bar-text);\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  box-sizing: border-box;\n  width: var(--size-brand);\n  height: var(--size-brand);\n  padding: var(--space-3);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n}\n.ds-brand__mark svg {\n  width: 100%;\n  height: 100%;\n}\n.ds-brand__name {\n  color: var(--color-bar-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h1);\n  font-weight: var(--weight-display);\n  line-height: var(--line-display);\n  letter-spacing: var(--display-tracking);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--heading-transform);\n}\n\n/* ---------- band: the closing call, a strip of the inverse material ---------- */\n.ds-band {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  padding: var(--space-4) var(--space-5);\n  background: var(--fill-inverse);\n  color: var(--color-inverse-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-control);\n  font-size: var(--text-base);\n}\n.ds-band__title {\n  display: block;\n  margin: 0;\n  color: var(--color-inverse-text);\n  font-family: var(--font-heading);\n  font-size: var(--text-h2);\n  font-weight: var(--weight-heading);\n  line-height: var(--line-heading);\n  letter-spacing: var(--heading-tracking);\n  text-transform: var(--heading-transform);\n}\n.ds-band__text {\n  margin: 0;\n}\n\n/* ---------- shell: the stone page and the framed sheet on it ---------- */\n.ds-page {\n  margin: 0;\n  padding: var(--space-5) 0 var(--space-6);\n  background: var(--fill-page);\n  color: var(--color-text);\n  font-family: var(--font-body);\n  font-size: var(--text-base);\n  font-weight: var(--weight-body);\n  line-height: var(--line-body);\n}\n.ds-page__wrap {\n  box-sizing: border-box;\n  width: var(--size-page);\n  margin: 0 auto;\n  border-radius: var(--radius-page);\n  box-shadow: var(--shadow-dialog);\n}\n.ds-page__body {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  padding: var(--space-5);\n  background: var(--color-canvas);\n  border-left: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-right: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-page__inner {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n}\n.ds-page__columns {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) var(--size-aside);\n  gap: var(--space-5);\n  align-items: start;\n}\n.ds-page__main,\n.ds-page__aside {\n  display: flex;\n  flex-direction: column;\n  gap: var(--space-5);\n  min-width: 0;\n}\n\n/* ---------- nav: the banner and the strip of plates under it ---------- */\n.ds-nav {\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-bottom: 0;\n  border-radius: var(--radius-page) var(--radius-page) 0 0;\n}\n.ds-nav__banner {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--space-5);\n  box-sizing: border-box;\n  min-height: var(--size-banner);\n  padding: var(--space-4) var(--space-5);\n  background: radial-gradient(ellipse at 12% 50%, color-mix(in srgb, var(--color-accent-alt) 22%, transparent) 0, transparent 45%), var(--fill-bar);\n  color: var(--color-bar-text);\n  border-radius: var(--radius-page) var(--radius-page) 0 0;\n}\n.ds-nav__tagline {\n  display: block;\n  color: var(--color-bar-text);\n  font-family: var(--font-body);\n  font-size: var(--text-small);\n  letter-spacing: 0;\n  text-transform: none;\n}\n.ds-nav__account {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  gap: var(--space-2);\n  color: var(--color-bar-text);\n  font-size: var(--text-small);\n  text-shadow: var(--shadow-text);\n}\n.ds-nav__count {\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  letter-spacing: var(--heading-tracking);\n}\n.ds-nav__links {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  background: var(--fill-bar-alt);\n  border-top: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-bottom: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n}\n.ds-nav__link {\n  display: block;\n  padding: var(--space-3) var(--space-5);\n  color: var(--color-bar-alt-text);\n  border-right: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar-alt), var(--color-shadow) 60%);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-decoration: none;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n}\n.ds-nav__link:hover,\n.ds-nav__link.is-hover {\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n}\n.ds-nav__link.is-current,\n.ds-page:has(#news:target) .ds-nav__link[href=\"#news\"],\n.ds-page:has(#guide:target) .ds-nav__link[href=\"#guide\"],\n.ds-page:has(#realms:target) .ds-nav__link[href=\"#realms\"],\n.ds-page:has(#account:target) .ds-nav__link[href=\"#account\"]:not(.ds-nav__link--elsewhere),\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  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  box-shadow: var(--shadow-control-pressed);\n}\n.ds-nav__end {\n  margin-left: auto;\n}\n.ds-nav__end .ds-nav__link {\n  border-right: 0;\n  border-left: var(--border-width) var(--border-style) color-mix(in srgb, var(--color-bar-alt), var(--color-shadow) 60%);\n}\n\n/* ---------- hero: the banner of the current chapter, with the video ---------- */\n.ds-hero {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: var(--space-6);\n  align-items: center;\n  padding: var(--space-6);\n  background: radial-gradient(ellipse at 20% 0, color-mix(in srgb, var(--color-accent) 55%, transparent) 0, transparent 65%), var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n}\n.ds-hero__copy {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--space-4);\n}\n.ds-hero__title {\n  margin: 0;\n  color: var(--color-bar-alt-text);\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-shadow: var(--shadow-text);\n  text-transform: var(--heading-transform);\n}\n.ds-hero__lead {\n  margin: 0;\n  font-size: var(--text-large);\n  line-height: var(--line-body);\n}\n.ds-hero__actions {\n  display: flex;\n  align-items: center;\n  gap: var(--space-4);\n}\n.ds-hero__note {\n  margin: 0;\n  font-size: var(--text-small);\n}\n/* A ribbon with notched ends. */\n.ds-ribbon {\n  display: inline-block;\n  padding: var(--space-2) var(--space-6);\n  background: var(--fill-accent);\n  color: var(--color-accent-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-ui);\n  font-weight: var(--weight-ui);\n  text-shadow: var(--shadow-text);\n  text-transform: var(--ui-transform);\n  clip-path: polygon(0 0, 100% 0, calc(100% - var(--space-3)) 50%, 100% 100%, 0 100%, var(--space-3) 50%);\n}\n\n/* ---------- scene: a landscape drawn from the secondary bar colour ---------- */\n.ds-scene {\n  position: relative;\n  aspect-ratio: 16 / 9;\n  overflow: hidden;\n  background: radial-gradient(circle at 72% 26%, var(--color-bar-alt-text) 0, var(--color-bar-alt-text) 5%, transparent 6%), linear-gradient(to bottom, color-mix(in srgb, var(--color-accent) 55%, var(--color-bar-alt)) 0, var(--color-bar-alt) 75%);\n}\n.ds-scene--2 {\n  background: radial-gradient(circle at 24% 30%, var(--color-bar-alt-text) 0, var(--color-bar-alt-text) 4%, transparent 5%), linear-gradient(to bottom, color-mix(in srgb, var(--color-fill-2) 55%, var(--color-bar-alt)) 0, var(--color-bar-alt) 75%);\n}\n.ds-scene--3 {\n  background: radial-gradient(circle at 50% 62%, var(--color-fill-3) 0, color-mix(in srgb, var(--color-fill-3) 40%, transparent) 14%, transparent 34%), linear-gradient(to bottom, var(--color-bar-alt) 0, color-mix(in srgb, var(--color-fill-3) 45%, var(--color-bar-alt)) 100%);\n}\n.ds-scene__far,\n.ds-scene__near {\n  position: absolute;\n  inset: 0;\n  background: color-mix(in srgb, var(--color-bar-alt), var(--color-bar-alt-text) 22%);\n  clip-path: polygon(0 100%, 0 62%, 14% 44%, 24% 58%, 38% 30%, 50% 56%, 62% 40%, 76% 60%, 88% 46%, 100% 64%, 100% 100%);\n}\n.ds-scene__near {\n  background: color-mix(in srgb, var(--color-bar-alt), var(--color-shadow) 55%);\n  clip-path: polygon(0 100%, 0 82%, 10% 70%, 22% 84%, 34% 66%, 40% 52%, 44% 66%, 58% 86%, 72% 72%, 80% 58%, 84% 72%, 100% 84%, 100% 100%);\n}\n.ds-scene__play {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-play);\n  height: var(--size-play);\n  background: var(--fill-button);\n  color: var(--color-button-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: 50%;\n  box-shadow: var(--shadow-control);\n  transform: translate(-50%, -50%);\n}\n.ds-scene__play:hover,\n.ds-scene__play.is-hover {\n  background: var(--fill-button-hover);\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-video__caption {\n  display: flex;\n  justify-content: space-between;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-3);\n  background: var(--color-surface-strong);\n  color: var(--color-heading-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border-strong);\n  font-size: var(--text-small);\n}\n\n/* ---------- carousel: one screenshot, arrows and dots ---------- */\n.ds-carousel__stage {\n  position: relative;\n}\n.ds-carousel__arrow {\n  position: absolute;\n  top: 50%;\n  left: var(--space-3);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--size-control);\n  height: var(--size-control-large);\n  background: var(--fill-button-secondary);\n  color: var(--color-button-secondary-text);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\n  font-size: var(--text-large);\n  font-weight: var(--weight-bold);\n  text-decoration: none;\n  transform: translateY(-50%);\n}\n.ds-carousel__arrow--next {\n  left: auto;\n  right: var(--space-3);\n}\n.ds-carousel__arrow:hover,\n.ds-carousel__arrow.is-hover {\n  box-shadow: var(--shadow-control-hover);\n}\n.ds-carousel__foot {\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  color: var(--color-heading-alt);\n  border-top: var(--border-width) var(--border-style) var(--color-border-strong);\n  font-size: var(--text-base);\n}\n.ds-carousel__dots {\n  display: flex;\n  gap: var(--space-2);\n}\n.ds-carousel__dot {\n  width: var(--size-dot);\n  height: var(--size-dot);\n  background: var(--color-surface);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  transform: rotate(45deg);\n}\n.ds-carousel__dot.is-current {\n  background: var(--color-accent-alt);\n}\n\n/* ---------- news: a date plate beside each post ---------- */\n.ds-list__date {\n  display: flex;\n  flex: none;\n  flex-direction: column;\n  align-items: center;\n  box-sizing: border-box;\n  width: var(--size-date);\n  background: var(--color-surface-strong);\n  color: var(--color-heading);\n  border: var(--border-width) var(--border-style) var(--color-border-strong);\n  border-radius: var(--radius-control);\n  box-shadow: var(--shadow-control);\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}\n.ds-list__month {\n  align-self: stretch;\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  font-family: var(--font-ui);\n  font-size: var(--text-small);\n  font-weight: var(--weight-ui);\n  text-align: center;\n  text-transform: var(--ui-transform);\n}\n\n/* ---------- sidebar: a side box with a title plate ---------- */\n.ds-sidebar__title {\n  margin: 0;\n  padding: var(--space-3) var(--space-4);\n  background: var(--fill-bar);\n  color: var(--color-bar-text);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-strong);\n  font-family: var(--font-heading);\n  font-size: var(--text-h3);\n  font-weight: var(--weight-heading);\n  letter-spacing: var(--heading-tracking);\n  text-align: center;\n  text-shadow: var(--shadow-text);\n  text-transform: var(--heading-transform);\n}\n.ds-sidebar__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-sidebar__item {\n  display: flex;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-2) var(--space-4);\n  border-bottom: var(--border-width) var(--border-style) var(--color-border-muted);\n  font-size: var(--text-base);\n}\n.ds-sidebar__link {\n  flex: 1;\n  color: var(--color-link);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-sidebar__link:hover,\n.ds-sidebar__link.is-hover {\n  color: var(--color-link-hover);\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-sidebar__meta {\n  color: var(--color-text-muted);\n  font-size: var(--text-small);\n}\n.ds-sidebar__foot {\n  padding: var(--space-3) var(--space-4);\n  font-size: var(--text-small);\n  text-align: right;\n}\n\n/* ---------- footer ---------- */\n.ds-footer {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--space-3);\n  padding: var(--space-5);\n  background: var(--fill-bar-alt);\n  color: var(--color-bar-alt-text);\n  border: var(--border-width-strong) var(--border-style) var(--color-border-strong);\n  border-radius: 0 0 var(--radius-page) var(--radius-page);\n  font-size: var(--text-small);\n  text-align: center;\n}\n.ds-footer__links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: var(--space-2) var(--space-5);\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.ds-footer__link {\n  color: var(--color-bar-alt-text);\n  font-weight: var(--weight-bold);\n  text-decoration: var(--link-decoration-quiet);\n}\n.ds-footer__link:hover {\n  text-decoration: var(--link-decoration-hover);\n}\n.ds-footer__note {\n  margin: 0;\n}\n.ds-sidebar,\n.ds-carousel,\n.ds-video {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n.ds-nav__action {\n  color: var(--color-bar-text);\n  font-weight: var(--weight-bold);\n  text-decoration: underline;\n}\n.ds-tabs {\n  border-bottom: 0;\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: the game's home portal, specimen</title>\n<link rel=\"stylesheet\" href=\"tokens.css\">\n<link rel=\"stylesheet\" href=\"components.css\">\n</head>\n<body class=\"ds-page\" data-component=\"shell\">\n<div class=\"ds-page__wrap\">\n\n  <header class=\"ds-nav\" data-component=\"nav\">\n    <div class=\"ds-nav__banner\">\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=\"1.8\" stroke-linejoin=\"round\" stroke-linecap=\"round\" aria-hidden=\"true\"><polygon points=\"7,3 17,3 21.5,9 12,21.5 2.5,9\"/><polyline points=\"2.5,9 21.5,9\"/><polyline points=\"8.5,9 12,21 15.5,9\"/></svg></span>\n        <span>\n          <span class=\"ds-brand__name\">chronoskin</span>\n          <span class=\"ds-nav__tagline\">The online role-playing game. Chapter three: the Ember Gate.</span>\n        </span>\n      </a>\n      <div class=\"ds-nav__account\">\n        <span class=\"ds-nav__count\">41,208 heroes online</span>\n        <span>Welcome, traveller. <a class=\"ds-nav__action\" href=\"#account\">Log in</a> or <a class=\"ds-nav__action\" href=\"#account\">create an account</a></span>\n      </div>\n    </div>\n    <ul class=\"ds-nav__links\">\n      <li><a class=\"ds-nav__link\" href=\"#home\">Home</a></li>\n      <li><a class=\"ds-nav__link\" href=\"#news\">News</a></li>\n      <li class=\"ds-menu\">\n        <a class=\"ds-nav__link\" href=\"#guide\">Game guide <span class=\"ds-menu__caret\">&#9662;</span></a>\n        <ul class=\"ds-menu__list\">\n          <li><a class=\"ds-menu__item\" href=\"#guide\">The four callings</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#guide\">Screenshots</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#news\">Patch notes</a></li>\n          <li><a class=\"ds-menu__item\" href=\"#realms\">Choosing a realm</a></li>\n        </ul>\n      </li>\n      <li><a class=\"ds-nav__link\" href=\"#realms\">Realms</a></li>\n      <li><a class=\"ds-nav__link ds-nav__link--elsewhere\" href=\"#account\">Forums</a></li>\n      <li class=\"ds-nav__end\"><a class=\"ds-nav__link\" href=\"#account\">Account</a></li>\n    </ul>\n  </header>\n\n  <main class=\"ds-page__body\">\n\n    <section class=\"ds-view ds-view--home\" id=\"home\">\n      <div class=\"ds-page__inner\">\n        <div class=\"ds-hero ds-frame\" data-component=\"hero\">\n          <div class=\"ds-hero__copy\">\n            <span class=\"ds-ribbon\">Chapter three is live</span>\n            <h1 class=\"ds-hero__title\">The Ember Gate opens</h1>\n            <p class=\"ds-hero__lead\">Cross the ash plains, raise a warband and hold the gate before the long night. Play to level twenty without paying a coin.</p>\n            <div class=\"ds-hero__actions\">\n              <a class=\"ds-button ds-button--large\" href=\"#account\">Play free</a>\n              <a class=\"ds-button ds-button--secondary\" href=\"#guide\">Game guide</a>\n            </div>\n            <p class=\"ds-hero__note\">Client 3.2.1 for Windows and Mac, 4.1 GB.</p>\n          </div>\n          <div class=\"ds-video ds-frame\">\n            <div class=\"ds-scene\">\n              <span class=\"ds-scene__far\"></span>\n              <span class=\"ds-scene__near\"></span>\n              <a class=\"ds-scene__play\" href=\"#guide\" aria-label=\"Play the trailer\"><svg class=\"ds-icon\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M5 3l9 5-9 5z\"/></svg></a>\n            </div>\n            <div class=\"ds-video__caption\"><span>Featured video: the chapter three trailer</span><span>2:48</span></div>\n          </div>\n        </div>\n\n        <div class=\"ds-page__columns\">\n          <div class=\"ds-page__main\">\n            <div class=\"ds-panel ds-frame\">\n              <h2 class=\"ds-panel__title\">Latest news</h2>\n              <div class=\"ds-panel__body ds-panel__body--flush\">\n                <ul class=\"ds-list\" data-component=\"list\">\n                  <li class=\"ds-list__item\">\n                    <span class=\"ds-list__date\"><span class=\"ds-list__month\">Oct</span>07</span>\n                    <div class=\"ds-list__body\">\n                      <a class=\"ds-list__title\" href=\"#news\">Patch 3.2: the Ember Gate</a>\n                      <p class=\"ds-list__text\">A new zone for levels 58 to 60, the warband system and a pass over every healing spell. Realms return at nine.</p>\n                      <span class=\"ds-list__meta\">Posted by the game masters in Patch notes, 46 comments <span class=\"ds-badge ds-badge--new\">New</span></span>\n                    </div>\n                  </li>\n                  <li class=\"ds-list__item\">\n                    <span class=\"ds-list__date\"><span class=\"ds-list__month\">Oct</span>05</span>\n                    <div class=\"ds-list__body\">\n                      <a class=\"ds-list__title\" href=\"#news\">Harvest fair returns to the river towns</a>\n                      <p class=\"ds-list__text\">Two weeks of fishing contests, lantern quests and a mount that nobody asked for but everyone wants.</p>\n                      <span class=\"ds-list__meta\">Posted in World events, 18 comments</span>\n                    </div>\n                  </li>\n                  <li class=\"ds-list__item\">\n                    <span class=\"ds-list__date\"><span class=\"ds-list__month\">Oct</span>01</span>\n                    <div class=\"ds-list__body\">\n                      <a class=\"ds-list__title\" href=\"#realms\">Two new realms open on Friday</a>\n                      <p class=\"ds-list__text\">Greywater and Highmoor take new characters from noon. Free moves off the three full realms run for a week.</p>\n                      <span class=\"ds-list__meta\">Posted in Realms, 9 comments</span>\n                    </div>\n                  </li>\n                  <li class=\"ds-list__item\">\n                    <span class=\"ds-list__date\"><span class=\"ds-list__month\">Sep</span>26</span>\n                    <div class=\"ds-list__body\">\n                      <a class=\"ds-list__title\" href=\"#news\">Screenshot contest: the winners</a>\n                      <p class=\"ds-list__text\">Three hundred entries, one sunrise over the salt flats. The first ten hang in the gallery from today.</p>\n                      <span class=\"ds-list__meta\">Posted in Community, 31 comments</span>\n                    </div>\n                  </li>\n                  <li class=\"ds-list__item\">\n                    <span class=\"ds-list__date\"><span class=\"ds-list__month\">Sep</span>20</span>\n                    <div class=\"ds-list__body\">\n                      <a class=\"ds-list__title\" href=\"#news\">Patch 3.1.4: hotfixes</a>\n                      <p class=\"ds-list__text\">The ferry at Saltmarsh no longer leaves without its passengers, and three quests can be handed in again.</p>\n                      <span class=\"ds-list__meta\">Posted in Patch notes, 12 comments</span>\n                    </div>\n                  </li>\n                  <li class=\"ds-list__item\">\n                    <span class=\"ds-list__date\"><span class=\"ds-list__month\">Sep</span>14</span>\n                    <div class=\"ds-list__body\">\n                      <a class=\"ds-list__title\" href=\"#guide\">A beginner's road to level twenty</a>\n                      <p class=\"ds-list__text\">Where to go after the mill, which calling forgives mistakes, and why you should keep the wooden shield.</p>\n                      <span class=\"ds-list__meta\">Posted in Game guide, 27 comments</span>\n                    </div>\n                  </li>\n                </ul>\n              </div>\n              <div class=\"ds-panel__foot\">\n                <ul class=\"ds-pagination\" data-component=\"pagination\">\n                  <li><span class=\"ds-pagination__link is-disabled\">Previous</span></li>\n                  <li><span class=\"ds-pagination__link is-current\">1</span></li>\n                  <li><a class=\"ds-pagination__link\" href=\"#news\">2</a></li>\n                  <li><a class=\"ds-pagination__link\" href=\"#news\">3</a></li>\n                  <li><a class=\"ds-pagination__link\" href=\"#news\">Next</a></li>\n                </ul>\n                <a class=\"ds-link ds-link--quiet\" href=\"#news\">News archive</a>\n              </div>\n            </div>\n          </div>\n\n          <aside class=\"ds-page__aside\">\n            <div class=\"ds-sidebar ds-frame\" data-component=\"sidebar\">\n              <h2 class=\"ds-sidebar__title\">Realm status</h2>\n              <ul class=\"ds-sidebar__list\">\n                <li class=\"ds-sidebar__item\"><span class=\"ds-dot ds-dot--success\"></span><a class=\"ds-sidebar__link\" href=\"#realms\">Ashenford</a><span class=\"ds-sidebar__meta\">Normal</span></li>\n                <li class=\"ds-sidebar__item\"><span class=\"ds-dot ds-dot--success\"></span><a class=\"ds-sidebar__link\" href=\"#realms\">Greywater</a><span class=\"ds-sidebar__meta\">Normal, new</span></li>\n                <li class=\"ds-sidebar__item\"><span class=\"ds-dot ds-dot--warning\"></span><a class=\"ds-sidebar__link\" href=\"#realms\">Stonewatch</a><span class=\"ds-sidebar__meta\">War, full</span></li>\n                <li class=\"ds-sidebar__item\"><span class=\"ds-dot ds-dot--success\"></span><a class=\"ds-sidebar__link\" href=\"#realms\">Highmoor</a><span class=\"ds-sidebar__meta\">Role-play</span></li>\n                <li class=\"ds-sidebar__item\"><span class=\"ds-dot ds-dot--danger\"></span><a class=\"ds-sidebar__link\" href=\"#realms\">Kettlebrook</a><span class=\"ds-sidebar__meta\">Offline</span></li>\n              </ul>\n              <div class=\"ds-sidebar__foot\"><a class=\"ds-link\" href=\"#realms\">All 24 realms</a></div>\n            </div>\n\n            <div class=\"ds-panel ds-frame\" data-component=\"panel\">\n              <h2 class=\"ds-panel__title\">World event</h2>\n              <div class=\"ds-panel__body\">\n                <p class=\"ds-panel__text\">Every realm gathers supplies to open the gate. Yours stands here:</p>\n                <div class=\"ds-progress__label\"><span>Iron and timber</span><span>75%</span></div>\n                <span class=\"ds-progress ds-progress--75\"><span class=\"ds-progress__bar\"></span></span>\n                <div class=\"ds-progress__label\"><span>Healing draughts</span><span>40%</span></div>\n                <span class=\"ds-progress ds-progress--40 ds-progress--health\"><span class=\"ds-progress__bar\"></span></span>\n                <div class=\"ds-progress__label\"><span>Standing with the wardens</span><span>90%</span></div>\n                <span class=\"ds-progress ds-progress--90 ds-progress--rep\"><span class=\"ds-progress__bar\"></span></span>\n              </div>\n            </div>\n\n            <div class=\"ds-video ds-frame\">\n              <div class=\"ds-scene ds-scene--2\">\n                <span class=\"ds-scene__far\"></span>\n                <span class=\"ds-scene__near\"></span>\n              </div>\n              <div class=\"ds-video__caption\"><span>Screenshot of the day: moonrise at Highmoor</span><a class=\"ds-link\" href=\"#guide\">Gallery</a></div>\n            </div>\n          </aside>\n        </div>\n\n        <div class=\"ds-band\">\n          <div><span class=\"ds-band__title\">New to the game?</span><p class=\"ds-band__text\">Make a character tonight and play to level twenty without paying a coin.</p></div>\n          <a class=\"ds-button is-hover\" href=\"#account\">Create an account</a>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"news\">\n      <div class=\"ds-page__inner\">\n        <ol class=\"ds-breadcrumb\" data-component=\"breadcrumb\">\n          <li><a class=\"ds-breadcrumb__link\" href=\"#home\">Home</a></li>\n          <li class=\"ds-breadcrumb__sep\">&raquo;</li>\n          <li><a class=\"ds-breadcrumb__link\" href=\"#news\">News</a></li>\n          <li class=\"ds-breadcrumb__sep\">&raquo;</li>\n          <li class=\"ds-breadcrumb__current\">Patch 3.2</li>\n        </ol>\n        <div class=\"ds-page-header\" data-component=\"page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">News and patch notes</h1>\n            <p class=\"ds-page-header__text\">Posted by the game masters on 7 October, in Patch notes.</p>\n          </div>\n          <div class=\"ds-page-header__actions\"><a class=\"ds-button ds-button--secondary\" href=\"#account\">Discuss on the forums</a></div>\n        </div>\n        <div class=\"ds-page__columns\">\n          <div class=\"ds-page__main\">\n            <div class=\"ds-panel ds-frame\">\n              <div class=\"ds-panel__body\">\n                <div class=\"ds-prose\" data-component=\"typography\">\n                  <h1>Patch 3.2: the Ember Gate</h1>\n                  <p class=\"ds-prose__lead\">The gate at the end of the ash plains has been shut since the first chapter. Tonight it opens on every realm.</p>\n                  <p>Realms go down at six for the update and return at nine. The client fetches the patch by itself; if it stalls, start it once more or type <code>/patch retry</code> in the launcher console.</p>\n                  <h2>What is new</h2>\n                  <ul>\n                    <li>The Cinder Reach, a zone for levels 58 to 60 with forty quests.</li>\n                    <li>Warbands: groups of up to twelve that share one supply chest.</li>\n                    <li>A <a href=\"#guide\">second mount slot</a> for every character over level 40.</li>\n                  </ul>\n                  <h3>Before you log in</h3>\n                  <p>Empty your mail. Letters older than thirty days are returned to their senders when the realms come back.</p>\n                </div>\n              </div>\n            </div>\n\n            <h2 class=\"ds-heading\">Changes by calling</h2>\n            <div class=\"ds-accordion\">\n              <details class=\"ds-accordion__item\" open>\n                <summary class=\"ds-accordion__summary\">Warden <span class=\"ds-accordion__meta\">4 changes</span></summary>\n                <div class=\"ds-accordion__body ds-prose\">\n                  <ul>\n                    <li>Shield Wall now lasts 10 seconds, up from 8.</li>\n                    <li>Taunt can no longer miss creatures of your own level.</li>\n                  </ul>\n                </div>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__summary\">Arcanist <span class=\"ds-accordion__meta\">6 changes</span></summary>\n                <div class=\"ds-accordion__body ds-prose\"><p>Frost spells cost a tenth less to cast.</p></div>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__summary\">Ranger <span class=\"ds-accordion__meta\">3 changes</span></summary>\n                <div class=\"ds-accordion__body ds-prose\"><p>Pets keep their names when they are stabled.</p></div>\n              </details>\n              <details class=\"ds-accordion__item\">\n                <summary class=\"ds-accordion__summary\">Mender <span class=\"ds-accordion__meta\">9 changes</span></summary>\n                <div class=\"ds-accordion__body ds-prose\"><p>Every healing spell was looked at again.</p></div>\n              </details>\n            </div>\n          </div>\n\n          <aside class=\"ds-page__aside\">\n            <div class=\"ds-panel ds-frame\">\n              <h2 class=\"ds-panel__title\">Related</h2>\n              <div class=\"ds-panel__body\">\n                <ul class=\"ds-links\" data-component=\"links\">\n                  <li><a class=\"ds-link\" href=\"#realms\">Realm status</a></li>\n                  <li><a class=\"ds-link is-visited\" href=\"#news\">Patch 3.1 notes (read)</a></li>\n                  <li><a class=\"ds-link is-hover\" href=\"#guide\">Guide to warbands</a></li>\n                  <li><a class=\"ds-link is-active\" href=\"#account\">Download the client</a></li>\n                </ul>\n              </div>\n            </div>\n            <div class=\"ds-sidebar ds-frame\">\n              <h2 class=\"ds-sidebar__title\">More news</h2>\n              <ul class=\"ds-sidebar__list\">\n                <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#news\">Harvest fair returns</a><span class=\"ds-sidebar__meta\">5 Oct</span></li>\n                <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#realms\">Two new realms</a><span class=\"ds-sidebar__meta\">1 Oct</span></li>\n                <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#news\">Contest winners</a><span class=\"ds-sidebar__meta\">26 Sep</span></li>\n                <li class=\"ds-sidebar__item\"><a class=\"ds-sidebar__link\" href=\"#news\">Patch 3.1.4 hotfixes</a><span class=\"ds-sidebar__meta\">20 Sep</span></li>\n              </ul>\n              <div class=\"ds-sidebar__foot\"><a class=\"ds-link\" href=\"#home\">News archive</a></div>\n            </div>\n            <div class=\"ds-panel ds-frame\">\n              <h2 class=\"ds-panel__title\">Get the patch</h2>\n              <div class=\"ds-panel__body\">\n                <div class=\"ds-progress__label\"><span>Mirrors carrying 3.2</span><span>9 of 12</span></div>\n                <span class=\"ds-progress ds-progress--75\"><span class=\"ds-progress__bar\"></span></span>\n                <p class=\"ds-panel__text\">The patch is 380 MB. Start the launcher early, or fetch the file by hand.</p>\n                <a class=\"ds-button ds-button--secondary\" href=\"#account\">Download by hand</a>\n              </div>\n            </div>\n            <div class=\"ds-notice\">\n              <p class=\"ds-notice__text\"><span class=\"ds-notice__title\">Tip:</span> add-ons made for 3.1 are switched off until their authors update them.</p>\n            </div>\n          </aside>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"guide\">\n      <div class=\"ds-page__inner\">\n        <ol class=\"ds-breadcrumb\">\n          <li><a class=\"ds-breadcrumb__link\" href=\"#home\">Home</a></li>\n          <li class=\"ds-breadcrumb__sep\">&raquo;</li>\n          <li class=\"ds-breadcrumb__current\">Game guide</li>\n        </ol>\n        <div class=\"ds-page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">Game guide</h1>\n            <p class=\"ds-page-header__text\">Four callings, one world. Pick the one that suits how you like to fight.</p>\n          </div>\n          <div class=\"ds-page-header__actions\"><a class=\"ds-button\" href=\"#account\">Play free</a></div>\n        </div>\n        <ul class=\"ds-grid\" data-component=\"grid\">\n          <li class=\"ds-grid__cell\">\n            <svg class=\"ds-grid__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l7 3v6c0 4-3 7-7 9-4-2-7-5-7-9V6z\"/><path d=\"M12 8v8M9 11h6\"/></svg>\n            <h3 class=\"ds-grid__title\">Warden</h3>\n            <p class=\"ds-grid__text\">Plate, shield and a long temper. Stands at the front and keeps the others alive by being hit first.</p>\n            <a class=\"ds-grid__more\" href=\"#news\">Warden changes in 3.2</a>\n          </li>\n          <li class=\"ds-grid__cell ds-grid__cell--2\">\n            <svg class=\"ds-grid__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l2.5 6.5L21 12l-6.5 2.5L12 21l-2.5-6.5L3 12l6.5-2.5z\"/></svg>\n            <h3 class=\"ds-grid__title\">Arcanist</h3>\n            <p class=\"ds-grid__text\">Frost, flame and a thin robe. Great harm from far away, and very little patience for being touched.</p>\n            <a class=\"ds-grid__more\" href=\"#news\">Arcanist changes in 3.2</a>\n          </li>\n          <li class=\"ds-grid__cell ds-grid__cell--3\">\n            <svg class=\"ds-grid__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 4c8 2 8 14 0 16M6 4v16M4 12h16M16 8l4 4-4 4\"/></svg>\n            <h3 class=\"ds-grid__title\">Ranger</h3>\n            <p class=\"ds-grid__text\">A bow, a trap and an animal that does half the work. Travels alone better than any other calling.</p>\n            <a class=\"ds-grid__more\" href=\"#news\">Ranger changes in 3.2</a>\n          </li>\n          <li class=\"ds-grid__cell ds-grid__cell--4\">\n            <svg class=\"ds-grid__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 19c0-9 5-14 14-14 0 9-5 14-14 14zM5 19l8-8\"/></svg>\n            <h3 class=\"ds-grid__title\">Mender</h3>\n            <p class=\"ds-grid__text\">Herbs, wards and a calm voice. Every warband wants two and can usually find one.</p>\n            <a class=\"ds-grid__more\" href=\"#news\">Mender changes in 3.2</a>\n          </li>\n        </ul>\n        <div class=\"ds-split ds-split--wide\">\n          <div class=\"ds-carousel ds-frame\">\n            <div class=\"ds-carousel__stage\">\n              <div class=\"ds-scene ds-scene--3\">\n                <span class=\"ds-scene__far\"></span>\n                <span class=\"ds-scene__near\"></span>\n              </div>\n              <a class=\"ds-carousel__arrow\" href=\"#guide\" aria-label=\"Previous screenshot\">&lsaquo;</a>\n              <a class=\"ds-carousel__arrow ds-carousel__arrow--next\" href=\"#guide\" aria-label=\"Next screenshot\">&rsaquo;</a>\n            </div>\n            <div class=\"ds-carousel__foot\">\n              <span>The Ember Gate at dusk, screenshot 2 of 5</span>\n              <span class=\"ds-carousel__dots\"><span class=\"ds-carousel__dot\"></span><span class=\"ds-carousel__dot is-current\"></span><span class=\"ds-carousel__dot\"></span><span class=\"ds-carousel__dot\"></span><span class=\"ds-carousel__dot\"></span></span>\n            </div>\n          </div>\n          <div class=\"ds-stack\">\n            <div class=\"ds-panel ds-frame\">\n              <h2 class=\"ds-panel__title\">Your first evening</h2>\n              <div class=\"ds-panel__body ds-prose\">\n                <ol>\n                  <li>Make a character on a realm marked Normal.</li>\n                  <li>Follow the road from the mill to Ashenford.</li>\n                  <li>Take the first two quests at the well.</li>\n                </ol>\n              </div>\n            </div>\n            <div class=\"ds-empty\" data-component=\"empty\">\n              <svg class=\"ds-empty__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 6h18v12H3z\"/><path d=\"M10 9l5 3-5 3z\"/></svg>\n              <h3 class=\"ds-empty__title\">No guide videos yet</h3>\n              <p class=\"ds-empty__text\">Videos for chapter three are still being cut. The trailer is on the home page.</p>\n              <a class=\"ds-button ds-button--secondary\" href=\"#home\">Watch the trailer</a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"realms\">\n      <div class=\"ds-page__inner\">\n        <ol class=\"ds-breadcrumb\">\n          <li><a class=\"ds-breadcrumb__link\" href=\"#home\">Home</a></li>\n          <li class=\"ds-breadcrumb__sep\">&raquo;</li>\n          <li class=\"ds-breadcrumb__current\">Realms</li>\n        </ol>\n        <div class=\"ds-page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">Realm status</h1>\n            <p class=\"ds-page-header__text\">Checked every two minutes. Last check at 20:14, server time.</p>\n          </div>\n          <div class=\"ds-page-header__actions\"><a class=\"ds-button ds-button--secondary\" href=\"#realms\">Refresh</a></div>\n        </div>\n        <div class=\"ds-notices\" data-component=\"notice\">\n          <div class=\"ds-notice\"><p class=\"ds-notice__text\"><span class=\"ds-notice__title\">Maintenance:</span> all realms go down on Wednesday from 06:00 to 09:00 for patch 3.2.</p></div>\n          <div class=\"ds-notice ds-notice--error\"><p class=\"ds-notice__text\"><span class=\"ds-notice__title\">Kettlebrook is offline.</span> The realm stopped at 19:52 and is being restarted.</p></div>\n        </div>\n        <ul class=\"ds-stats ds-frame\" data-component=\"stats\">\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">24</span><span class=\"ds-stat__label\">Realms</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">23</span><span class=\"ds-stat__label\">Online</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">41,208</span><span class=\"ds-stat__label\">Heroes playing</span></li>\n          <li class=\"ds-stat\"><span class=\"ds-stat__value\">3</span><span class=\"ds-stat__label\">Realms with a queue</span></li>\n        </ul>\n        <div>\n          <ul class=\"ds-tabs\" data-component=\"tabs\">\n            <li><a class=\"ds-tabs__tab is-current\" href=\"#realms\">West <span class=\"ds-tabs__count\">(8)</span></a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#realms\">East <span class=\"ds-tabs__count\">(10)</span></a></li>\n            <li><a class=\"ds-tabs__tab\" href=\"#realms\">South <span class=\"ds-tabs__count\">(6)</span></a></li>\n          </ul>\n          <div class=\"ds-frame\">\n            <table class=\"ds-table\" data-component=\"table\">\n              <thead>\n                <tr><th>Realm</th><th>Kind</th><th>Population</th><th>Status</th><th class=\"is-numeric\">Playing</th><th class=\"is-numeric\">Queue</th></tr>\n              </thead>\n              <tbody>\n                <tr><td><a href=\"#realms\">Ashenford</a></td><td>Normal</td><td>High</td><td><span class=\"ds-badge ds-badge--success\">Online</span></td><td class=\"is-numeric\">3,412</td><td class=\"is-numeric\">0</td></tr>\n                <tr><td><a href=\"#realms\">Greywater</a> <span class=\"ds-badge ds-badge--new\">New</span></td><td>Normal</td><td>Low</td><td><span class=\"ds-badge ds-badge--success\">Online</span></td><td class=\"is-numeric\">611</td><td class=\"is-numeric\">0</td></tr>\n                <tr><td><a href=\"#realms\">Stonewatch</a></td><td>War</td><td><span class=\"ds-tooltip\" tabindex=\"0\">Full<span class=\"ds-tooltip__tip\" role=\"tooltip\"><span class=\"ds-tooltip__name\">Full realm</span><span class=\"ds-tooltip__line\">New characters are closed here until Friday.</span><span class=\"ds-tooltip__line ds-tooltip__line--muted\">Free moves to Greywater are open.</span></span></span></td><td><span class=\"ds-badge ds-badge--warning\">Queue</span></td><td class=\"is-numeric\">4,950</td><td class=\"is-numeric\">212</td></tr>\n                <tr><td><a href=\"#realms\">Highmoor</a></td><td>Role-play</td><td>Medium</td><td><span class=\"ds-badge ds-badge--success\">Online</span></td><td class=\"is-numeric\">1,874</td><td class=\"is-numeric\">0</td></tr>\n                <tr><td><a href=\"#realms\">Kettlebrook</a></td><td>Normal</td><td>Medium</td><td><span class=\"ds-badge ds-badge--danger\">Offline</span></td><td class=\"is-numeric\">0</td><td class=\"is-numeric\">0</td></tr>\n                <tr><td><a href=\"#realms\">Saltmarsh</a></td><td>War</td><td>High</td><td><span class=\"ds-badge ds-badge--warning\">Queue</span></td><td class=\"is-numeric\">4,720</td><td class=\"is-numeric\">38</td></tr>\n                <tr><td><a href=\"#realms\">Old Barrow</a></td><td>Normal</td><td>Low</td><td><span class=\"ds-badge ds-badge--success\">Online</span></td><td class=\"is-numeric\">902</td><td class=\"is-numeric\">0</td></tr>\n                <tr><td><a href=\"#realms\">Thornwick</a></td><td>Role-play</td><td>Medium</td><td><span class=\"ds-badge ds-badge--success\">Online</span></td><td class=\"is-numeric\">2,130</td><td class=\"is-numeric\">0</td></tr>\n              </tbody>\n            </table>\n          </div>\n        </div>\n        <p class=\"ds-muted\">Realm kinds: <span class=\"ds-badge\" data-component=\"badge\">Normal</span> no fighting between players outside arenas, War open fighting in contested zones, Role-play names and speech in character.</p>\n      </div>\n    </section>\n\n    <section class=\"ds-view\" id=\"account\">\n      <div class=\"ds-page__inner\">\n        <ol class=\"ds-breadcrumb\">\n          <li><a class=\"ds-breadcrumb__link\" href=\"#home\">Home</a></li>\n          <li class=\"ds-breadcrumb__sep\">&raquo;</li>\n          <li class=\"ds-breadcrumb__current\">Account</li>\n        </ol>\n        <div class=\"ds-page-header\">\n          <div>\n            <h1 class=\"ds-page-header__title\">Your account</h1>\n            <p class=\"ds-page-header__text\">Free to level twenty. One account holds eight characters on every realm.</p>\n          </div>\n          <div class=\"ds-page-header__actions\"><a class=\"ds-button\" href=\"#guide\">Download the client</a></div>\n        </div>\n        <div class=\"ds-split ds-split--wide\">\n          <div class=\"ds-panel ds-frame\">\n            <h2 class=\"ds-panel__title\">Account details</h2>\n            <div class=\"ds-panel__body\">\n              <form class=\"ds-form\" data-component=\"form\">\n                <div class=\"ds-form__row\">\n                  <label class=\"ds-form__label\" for=\"a-name\">Account name</label>\n                  <div class=\"ds-form__field\"><input class=\"ds-form__input\" id=\"a-name\" type=\"text\" value=\"lanternkeeper\"></div>\n                </div>\n                <div class=\"ds-form__row\">\n                  <label class=\"ds-form__label\" for=\"a-mail\">E-mail</label>\n                  <div class=\"ds-form__field\">\n                    <input class=\"ds-form__input is-error\" id=\"a-mail\" type=\"text\" value=\"keeper@example\">\n                    <span class=\"ds-form__error\">This address has no domain ending. Write it out in full.</span>\n                  </div>\n                </div>\n                <div class=\"ds-form__row\">\n                  <label class=\"ds-form__label\" for=\"a-realm\">Home realm</label>\n                  <div class=\"ds-form__field\">\n                    <select class=\"ds-form__select\" id=\"a-realm\"><option>Ashenford (Normal)</option><option>Greywater (Normal, new)</option><option>Highmoor (Role-play)</option></select>\n                    <span class=\"ds-form__hint\">New characters start here unless you choose another realm.</span>\n                  </div>\n                </div>\n                <div class=\"ds-form__row\">\n                  <label class=\"ds-form__label\" for=\"a-note\">Note to support</label>\n                  <div class=\"ds-form__field\"><textarea class=\"ds-form__textarea\" id=\"a-note\">Please move my warden from Stonewatch to Greywater.</textarea></div>\n                </div>\n                <div class=\"ds-form__row\">\n                  <span class=\"ds-form__label\">Letters</span>\n                  <div class=\"ds-form__field\"><label class=\"ds-form__check\"><input class=\"ds-form__checkbox\" type=\"checkbox\" checked> Send me patch notes by e-mail</label></div>\n                </div>\n                <div class=\"ds-form__actions\" data-component=\"buttons\">\n                  <button class=\"ds-button\" type=\"button\">Save changes</button>\n                  <a class=\"ds-button ds-button--secondary\" href=\"#home\">Cancel</a>\n                  <button class=\"ds-button is-disabled\" type=\"button\" disabled>Upgrade</button>\n                  <span class=\"ds-form__actions-end\"><button class=\"ds-button ds-button--danger\" type=\"button\">Close account</button></span>\n                </div>\n              </form>\n            </div>\n          </div>\n          <div class=\"ds-stack\">\n            <div class=\"ds-dialog__backdrop\">\n              <div class=\"ds-dialog\" data-component=\"dialog\" role=\"dialog\" aria-labelledby=\"d-title\">\n                <h2 class=\"ds-dialog__title\" id=\"d-title\">Close this account? <a class=\"ds-dialog__close\" href=\"#account\" aria-label=\"Close\">x</a></h2>\n                <div class=\"ds-dialog__body\">\n                  <p class=\"ds-dialog__text\">Your eight characters and everything they carry are kept for ninety days, then removed.</p>\n                  <p class=\"ds-dialog__text ds-muted\">Guilds you lead pass to the next officer.</p>\n                </div>\n                <div class=\"ds-dialog__actions\">\n                  <a class=\"ds-button ds-button--secondary\" href=\"#account\">Keep playing</a>\n                  <button class=\"ds-button ds-button--danger\" type=\"button\">Close account</button>\n                </div>\n              </div>\n            </div>\n            <div class=\"ds-panel ds-frame\">\n              <h2 class=\"ds-panel__title\">Free play</h2>\n              <div class=\"ds-panel__body\">\n                <div class=\"ds-progress__label\"><span>Level 14 of 20</span><span>70%</span></div>\n                <span class=\"ds-progress ds-progress--75 ds-progress--xp\"><span class=\"ds-progress__bar\"></span></span>\n                <p class=\"ds-panel__text\">After level twenty a character keeps everything and stops gaining experience until the account is upgraded.</p>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n\n  </main>\n\n  <footer class=\"ds-footer\" data-component=\"footer\">\n    <ul class=\"ds-footer__links\">\n      <li><a class=\"ds-footer__link\" href=\"#home\">Home</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#news\">News</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#guide\">Game guide</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#realms\">Realms</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#account\">Account</a></li>\n      <li><a class=\"ds-footer__link\" href=\"#account\">Support</a></li>\n    </ul>\n    <p class=\"ds-footer__note\">chronoskin and the chronoskin mark are placeholders. Best seen at 1024 by 768.</p>\n  </footer>\n\n</div>\n</body>\n</html>\n",
    "style.json": "{\n  \"id\": \"v1.game-fantasy.portal.s01.p01.t03.u05\",\n  \"library\": \"2026.10.09-1346\",\n  \"era\": {\n    \"slug\": \"game-fantasy\",\n    \"years\": [\n      2004,\n      2026\n    ]\n  },\n  \"archetype\": \"portal\",\n  \"mode\": \"mix\",\n  \"markup\": \"modern\",\n  \"viewport\": {\n    \"width\": 1024,\n    \"fluid\": false\n  },\n  \"source\": \"https://chrono.skin/s/v1-gf-1135\",\n  \"short\": \"v1-gf-1135\"\n}\n",
    "tokens.css": "/* @part palette */\n:root {\n  --color-page: #090807;\n  --color-canvas: #15120f;\n  --color-surface: #1d1915;\n  --color-surface-alt: #25201a;\n  --color-surface-strong: #33291b;\n  --color-bar: #4a3414;\n  --color-bar-text: #f3d98e;\n  --color-bar-alt: #162433;\n  --color-bar-alt-text: #b9d3ea;\n  --color-inverse: #d9c492;\n  --color-inverse-text: #2a1b0b;\n  --color-text: #c9b99a;\n  --color-text-muted: #8c7e68;\n  --color-heading: #f0d48a;\n  --color-heading-alt: #e0a94a;\n  --color-link: #e8ba7f;\n  --color-link-quiet: #a38d6d;\n  --color-link-visited: #b89a78;\n  --color-link-hover: #ffda4d;\n  --color-link-active: #ffffff;\n  --color-border: #3c3226;\n  --color-border-strong: #a67c2e;\n  --color-border-muted: #2a231b;\n  --color-accent: #1f6fb5;\n  --color-accent-text: #ffffff;\n  --color-accent-alt: #ffd24a;\n  --color-fill-1: #4a9df0;\n  --color-fill-2: #b064e8;\n  --color-fill-3: #ff8a2a;\n  --color-fill-4: #2fc4b2;\n  --color-button: #9c1f12;\n  --color-button-text: #ffe9a8;\n  --color-button-hover-text: #ffffff;\n  --color-button-secondary: #3b3226;\n  --color-button-secondary-text: #e6cf98;\n  --color-input: #0d0b09;\n  --color-input-text: #e4d6b6;\n  --color-input-border: #5a4a30;\n  --color-disabled: #24201b;\n  --color-disabled-text: #6b6152;\n  --color-danger: #e0483a;\n  --color-danger-surface: #2c1210;\n  --color-success: #5fc24a;\n  --color-warning: #e8a520;\n  --color-notice: #18222e;\n  --color-notice-text: #b9d3ea;\n  --color-focus: #58b2ff;\n  --color-shadow: #000000;\n  --color-overlay: rgba(0, 0, 0, 0.72);\n}\n\n/* @part type */\n:root {\n  --font-body: \"Trebuchet MS\", \"Lucida Grande\", \"Lucida Sans Unicode\", Tahoma, sans-serif;\n  --font-heading: \"EB Garamond\", \"Hoefler Text\", Garamond, \"Times New Roman\", Times, serif;\n  --font-ui: \"EB Garamond\", \"Hoefler Text\", Garamond, \"Times New Roman\", Times, serif;\n  --font-mono: Consolas, Menlo, \"DejaVu Sans Mono\", monospace;\n  --text-base: 13px;\n  --text-small: 11px;\n  --text-ui: 14px;\n  --text-large: 17px;\n  --text-display: 42px;\n  --text-h1: 30px;\n  --text-h2: 22px;\n  --text-h3: 17px;\n  --line-body: 1.4;\n  --line-heading: 1.1;\n  --line-display: 1;\n  --weight-body: 400;\n  --weight-bold: 700;\n  --weight-heading: 600;\n  --weight-display: 600;\n  --weight-ui: 600;\n  --heading-transform: none;\n  --heading-tracking: 0;\n  --display-tracking: 1px;\n  --figure-shift: -0.01em;\n  --ui-transform: uppercase;\n  --link-decoration: none;\n  --link-decoration-hover: underline;\n  --link-decoration-quiet: none;\n}\n\n/* @part surface */\n:root {\n  --border-width: 1px;\n  --border-width-strong: 1px;\n  --border-style: solid;\n  --radius-control: 0;\n  --radius-panel: 0;\n  --radius-pill: 2px;\n  --radius-page: 0;\n  --shadow-panel: inset 0 1px 0 color-mix(in srgb, white 5%, transparent), 0 18px 40px -18px color-mix(in srgb, var(--color-shadow) 80%, transparent);\n  --shadow-control: inset 0 0 0 1px color-mix(in srgb, white 14%, transparent), 0 6px 18px -6px color-mix(in srgb, var(--color-shadow) 70%, transparent);\n  --shadow-control-hover: inset 0 0 0 1px color-mix(in srgb, white 30%, transparent), 0 0 0 1px color-mix(in srgb, var(--color-accent-alt) 60%, transparent), 0 0 22px color-mix(in srgb, var(--color-accent-alt) 45%, transparent);\n  --shadow-control-pressed: inset 0 3px 8px color-mix(in srgb, black 55%, transparent);\n  --shadow-dialog: 0 0 0 1px color-mix(in srgb, var(--color-border-strong) 60%, transparent), 0 0 60px color-mix(in srgb, var(--color-accent-alt) 14%, transparent), 0 30px 80px -10px color-mix(in srgb, var(--color-shadow) 90%, transparent);\n  --shadow-text: 0 2px 12px color-mix(in srgb, var(--color-shadow) 80%, transparent);\n  --fill-page: repeating-linear-gradient(90deg, color-mix(in srgb, white 2%, transparent) 0, color-mix(in srgb, white 2%, transparent) 1px, transparent 1px, transparent 7px), radial-gradient(ellipse 80% 420px at 50% 0, color-mix(in srgb, var(--color-accent-alt) 8%, transparent) 0, transparent 70%), var(--color-page);\n  --fill-bar: linear-gradient(to right, color-mix(in srgb, var(--color-bar), black 40%) 0, var(--color-bar) 50%, color-mix(in srgb, var(--color-bar), black 40%) 100%);\n  --fill-bar-alt: linear-gradient(to bottom, var(--color-bar-alt) 0, color-mix(in srgb, var(--color-bar-alt), black 35%) 100%);\n  --fill-inverse: radial-gradient(ellipse 70% 120% at 50% 0, color-mix(in srgb, var(--color-inverse), white 28%) 0, var(--color-inverse) 70%);\n  --fill-accent: linear-gradient(135deg, color-mix(in srgb, var(--color-accent), white 18%) 0, var(--color-accent) 50%, color-mix(in srgb, var(--color-accent), black 25%) 100%);\n  --fill-panel: linear-gradient(to bottom, color-mix(in srgb, var(--color-surface), var(--color-accent-alt) 5%) 0, var(--color-surface) 45%);\n  --fill-button: linear-gradient(to bottom, color-mix(in srgb, var(--color-button), white 32%) 0, var(--color-button) 50%, color-mix(in srgb, var(--color-button), black 22%) 100%);\n  --fill-button-hover: linear-gradient(to bottom, color-mix(in srgb, var(--color-button), white 50%) 0, color-mix(in srgb, var(--color-button), white 16%) 50%, var(--color-button) 100%);\n  --fill-button-secondary: linear-gradient(to bottom, color-mix(in srgb, var(--color-button-secondary), white 9%) 0, var(--color-button-secondary) 100%);\n  --fill-input: var(--color-input);\n  --focus-ring: 2px solid var(--color-focus);\n  --transition: color 0.25s ease, background-color 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease, opacity 0.25s ease;\n  --backdrop-blur: 0px;\n}\n"
  }
}
