/* Generated from crates/horizon-theme by `cargo run -p xtask -- tokens`; do not edit.
   docs/design-system.md describes the tokens. */

:root {
  --page: #ece7f7;
  --plate-soft: #e9e3f8;
  --plate: #ddd4f3;
  --surface: #f8f6fd;
  --rule: #e4ddf4;
  --ink: #1b1530;
  --ink-soft: #3b3354;
  --muted: #585071;
  --accent: #5333c9;
  --on-accent: #ffffff;
  --danger: #a3301d;
  --success: #136336;
  --warn: #7a4f00;
  --side: #e2dbf2;
  --panel: #f8f6fd;
  --raised: #e9e3f8;
  --button: #ddd4f3;
  --button-bevel: #f4f0fe;
  --well: #f3f0fb;
  --bevel: #ffffff;
  --lip: #c3b8e2;
  --outline: #2b2244;
  --face: #5b3fd6;
  --face-bevel: #8069ef;
  --face-lip: #3a2694;
  --on-face: #ffffff;
  color-scheme: light;
  --font: "Geist", ui-sans-serif, system-ui, sans-serif;
  --mono: "Geist Mono", ui-monospace, monospace;
  --pixel: "Pixelify Sans", "Geist", ui-sans-serif, sans-serif;
  --block-outline: 2px;
  --block-bevel: 2px;
  --block-lip: 4px;
  --text-micro: 11px;
  --text-micro-line: 1.5;
  --text-micro-tracking: 0.04em;
  --text-micro-weight: 400;
  --text-caption: 12px;
  --text-caption-line: 1.5;
  --text-caption-tracking: 0em;
  --text-caption-weight: 400;
  --text-label: 13px;
  --text-label-line: 1.5;
  --text-label-tracking: 0em;
  --text-label-weight: 400;
  --text-ui: 14px;
  --text-ui-line: 1.5;
  --text-ui-tracking: 0em;
  --text-ui-weight: 400;
  --text-body: clamp(15px, calc(15px + 2 * (100vw - 375px) / 1065), 17px);
  --text-body-line: 1.6;
  --text-body-tracking: 0em;
  --text-body-weight: 400;
  --text-heading: clamp(20px, calc(20px + 4 * (100vw - 375px) / 1065), 24px);
  --text-heading-line: 1.3;
  --text-heading-tracking: -0.01em;
  --text-heading-weight: 500;
  --text-title: clamp(32px, calc(32px + 16 * (100vw - 375px) / 1065), 48px);
  --text-title-line: 1.05;
  --text-title-tracking: -0.02em;
  --text-title-weight: 500;
  --text-display: clamp(34px, calc(34px + 30 * (100vw - 375px) / 1065), 64px);
  --text-display-line: 1.05;
  --text-display-tracking: -0.025em;
  --text-display-weight: 500;
  --text-wordmark: 18vw;
  --text-wordmark-line: 0.8;
  --text-wordmark-tracking: -0.04em;
  --text-wordmark-weight: 500;
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  --space-9: 96px;
  --gutter: 64px;
  --gutter-narrow: 16px;
  --radius: 8px;
  --radius-plate: 12px;
  --radius-pill: 999px;
  --rule-width: 1px;
  --control: 32px;
  --control-large: 40px;
  --segment: 28px;
  --field: 36px;
  --row: 86px;
  --index: 40px;
  --plate-bleed: 16px;
  --rise: 8px;
  --measure: 56ch;
  --quick: 150ms;
  --ease-quick: cubic-bezier(0.4, 0, 0.2, 1);
  --move: 240ms;
  --ease-move: cubic-bezier(0.23, 1, 0.32, 1);
  --enter: 600ms;
  --ease-enter: cubic-bezier(0.23, 1, 0.32, 1);
  --stagger: 40ms;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --page: #0f0d17;
    --plate-soft: #221e34;
    --plate: #2b2641;
    --surface: #1a1727;
    --rule: #120f1c;
    --ink: #ecedf3;
    --ink-soft: #c5c7d1;
    --muted: #a29cb8;
    --accent: #9a86ff;
    --on-accent: #ffffff;
    --danger: #f07a68;
    --success: #45c27a;
    --warn: #f0b84f;
    --side: #0b0a11;
    --panel: #1a1727;
    --raised: #221e34;
    --button: #2b2641;
    --button-bevel: #3d3560;
    --well: #0c0b12;
    --bevel: #342d52;
    --lip: #07060b;
    --outline: #05040a;
    --face: #5b3fd6;
    --face-bevel: #8a74ff;
    --face-lip: #3a2694;
    --on-face: #ffffff;
    color-scheme: dark;
  }
}

:root[data-theme="dark"] {
  --page: #0f0d17;
  --plate-soft: #221e34;
  --plate: #2b2641;
  --surface: #1a1727;
  --rule: #120f1c;
  --ink: #ecedf3;
  --ink-soft: #c5c7d1;
  --muted: #a29cb8;
  --accent: #9a86ff;
  --on-accent: #ffffff;
  --danger: #f07a68;
  --success: #45c27a;
  --warn: #f0b84f;
  --side: #0b0a11;
  --panel: #1a1727;
  --raised: #221e34;
  --button: #2b2641;
  --button-bevel: #3d3560;
  --well: #0c0b12;
  --bevel: #342d52;
  --lip: #07060b;
  --outline: #05040a;
  --face: #5b3fd6;
  --face-bevel: #8a74ff;
  --face-lip: #3a2694;
  --on-face: #ffffff;
  color-scheme: dark;
}

/* Horizon's design language (docs/design-system.md), set as a page. The tokens come from
   crates/horizon-theme through src/tokens.css, which build.mjs puts before this file: the
   launcher's Blocks palettes, type, spacing and motion. The base below lays out the page; the
   "Blocks" section at the end gives it the launcher's blocky, Minecraft-like look. */

@font-face { font-family: "Geist"; src: url("/fonts/Geist-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "Geist"; src: url("/fonts/Geist-Medium.woff2") format("woff2"); font-weight: 500; font-display: swap; }
@font-face { font-family: "Geist"; src: url("/fonts/Geist-SemiBold.woff2") format("woff2"); font-weight: 600; font-display: swap; }
@font-face { font-family: "Geist Mono"; src: url("/fonts/GeistMono-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }

:root {
  --g: clamp(var(--gutter-narrow), 4.5vw, var(--gutter));
  --max: 1440px;
  --nav: 72px;
}

*, *::before, *::after { box-sizing: border-box; }

html {
  background: var(--page);
  color: var(--ink);
  font: 400 var(--text-body) / var(--text-body-line) var(--font);
  font-synthesis: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--nav) + 16px);
  transition: background-color var(--move) var(--ease-move), color var(--move) var(--ease-move);
}
body { margin: 0; min-height: 100vh; overflow-x: clip; }
img { display: block; max-width: 100%; height: auto; }
h1, h2, h3 { margin: 0; font-weight: var(--text-heading-weight); }
p { margin: 0; }
ol, ul { margin: 0; padding: 0; list-style: none; }
::selection { background: var(--accent); color: var(--on-accent); }

a { color: var(--accent); text-decoration: none; transition: color var(--quick) var(--ease-quick); }
a:hover { color: var(--ink); }
[hidden] { display: none !important; }
/* Links inside running text are underlined, so they don't rely on colour alone. */
p a:not(.button):not(.link-arrow), li > p a, .prose a {
  color: inherit; text-decoration: underline; text-decoration-color: var(--rule);
  text-decoration-thickness: 1px; text-underline-offset: 3px;
  transition: text-decoration-color var(--quick) var(--ease-quick);
}
p a:not(.button):not(.link-arrow):hover, li > p a:hover, .prose a:hover { text-decoration-color: currentColor; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: var(--radius); }

code {
  font: 0.86em/1.5 var(--mono);
  background: var(--plate-soft);
  border-radius: 4px;
  padding: 1px 5px;
  overflow-wrap: anywhere;
}

.sr-only {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}
.skip {
  position: fixed; left: var(--g); top: 12px; z-index: 50; padding: 8px 14px;
  background: var(--ink); color: var(--page); border-radius: var(--radius-pill);
  transform: translateY(-200%);
}
.skip:focus { transform: none; }

.container { width: 100%; max-width: var(--max); margin: 0 auto; padding: 0 var(--g); }

/* --- Type ----------------------------------------------------------------------------- */

.display {
  font-size: var(--text-display); line-height: var(--text-display-line);
  letter-spacing: var(--text-display-tracking); font-weight: var(--text-display-weight);
  text-wrap: balance;
}
.title {
  font-size: var(--text-title); line-height: var(--text-title-line);
  letter-spacing: var(--text-title-tracking); font-weight: var(--text-title-weight);
  text-wrap: balance;
}
.lede { max-width: var(--measure); color: var(--muted); text-wrap: pretty; }
.kicker, .meta, .download-meta, .eyebrow, .row-index, .row-meta, .disclaimer {
  font: var(--text-micro-weight) var(--text-micro) / var(--text-micro-line) var(--mono);
  letter-spacing: var(--text-micro-tracking);
  color: var(--muted);
}
.kicker { display: flex; gap: 16px; text-transform: uppercase; margin-bottom: 24px; }
.kicker span { color: var(--ink); }
.meta { margin-top: 16px; }
.download-meta { margin-top: 12px; }
.download-meta a { color: inherit; }

/* --- Buttons --------------------------------------------------------------------------- */

.button {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  height: var(--control); padding: 0 16px; border: 0; border-radius: var(--radius-pill);
  font: 500 var(--text-label) / 1 var(--font); cursor: pointer; white-space: nowrap;
  transition: background-color var(--quick) var(--ease-quick), color var(--quick) var(--ease-quick), opacity var(--quick) var(--ease-quick);
}
.button.large { height: var(--control-large); padding: 0 22px; font-size: var(--text-ui); }
.button.small { height: 30px; padding: 0 14px; }
.button.primary { background: var(--accent); color: var(--on-accent); }
.button.primary:hover { color: var(--on-accent); opacity: 0.88; }
.button.secondary { background: var(--plate-soft); color: var(--ink); }
.button.secondary:hover { background: var(--plate); color: var(--ink); }
.button.ghost { background: transparent; color: var(--muted); }
.button.ghost:hover { background: var(--plate-soft); color: var(--ink); }
.button:active { opacity: 0.85; }

.link-arrow { display: inline-flex; gap: 8px; color: var(--accent); font-weight: 500; }
.link-arrow span { transition: transform var(--quick) var(--ease-quick); }
.link-arrow:hover span { transform: translateX(3px); }

/* --- Navigation ------------------------------------------------------------------------- */

.nav {
  position: fixed; inset: 0 0 auto; z-index: 20; height: var(--nav);
  background: color-mix(in srgb, var(--page) 0%, transparent);
  transition: background-color var(--move) var(--ease-move), box-shadow var(--move) var(--ease-move);
}
.nav.is-scrolled, .nav.is-menu {
  background: color-mix(in srgb, var(--page) 88%, transparent);
  -webkit-backdrop-filter: blur(16px) saturate(1.2); backdrop-filter: blur(16px) saturate(1.2);
  box-shadow: 0 1px 0 var(--rule);
}
.nav-inner { display: flex; align-items: center; gap: 24px; height: 100%; max-width: var(--max); margin: 0 auto; padding: 0 var(--g); }
.nav-mark { display: inline-flex; align-items: center; gap: 10px; color: var(--ink); font-weight: 500; font-size: var(--text-label); }
.nav-mark:hover { color: var(--ink); }
.mark { width: 18px; height: 18px; }
.mark-stem { fill: var(--ink); }
.mark-low { fill: var(--ink); opacity: 0.36; }
.mark-line { fill: var(--accent); }
.nav-links { display: flex; gap: 2px; margin-left: auto; }
.nav-links a, .nav-github, .theme-toggle {
  display: inline-flex; align-items: center; height: 32px; padding: 0 12px;
  border-radius: var(--radius-pill); color: var(--muted); font-size: var(--text-label);
  transition: background-color var(--quick) var(--ease-quick), color var(--quick) var(--ease-quick);
}
.nav-links a:hover, .nav-github:hover, .theme-toggle:hover { color: var(--ink); background: var(--plate-soft); }
.nav-links a[aria-current] { color: var(--ink); background: var(--plate-soft); }
.nav-end { display: flex; align-items: center; gap: 2px; }
.theme-toggle {
  border: 0; background: none; cursor: pointer;
  font: var(--text-micro) / 1 var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase;
}
.nav-end .button { margin-left: 8px; }
.menu-button {
  display: none; align-items: center; gap: 10px; height: 44px; padding: 0 4px 0 14px; margin-left: 4px;
  border: 0; background: none; color: var(--ink); font: 500 var(--text-label) / 1 var(--font); cursor: pointer;
}
.menu-icon { position: relative; width: 18px; height: 10px; }
.menu-icon::before, .menu-icon::after {
  content: ""; position: absolute; left: 0; right: 0; height: 1.5px; border-radius: 1px; background: currentColor;
  transition: transform var(--move) var(--ease-move), top var(--move) var(--ease-move);
}
.menu-icon::before { top: 0; }
.menu-icon::after { top: 8px; }
.is-menu .menu-icon::before { top: 4px; transform: rotate(45deg); }
.is-menu .menu-icon::after { top: 4px; transform: rotate(-45deg); }

.menu {
  position: fixed; inset: var(--nav) 0 0; z-index: 19; display: flex; flex-direction: column;
  justify-content: space-between; padding: 24px var(--g) 32px; background: var(--page);
  opacity: 0; transition: opacity var(--move) var(--ease-move);
}
.menu.is-open { opacity: 1; }
.menu nav { display: flex; flex-direction: column; }
.menu nav a {
  display: flex; align-items: baseline; gap: 16px; padding: 12px 0; border-bottom: 1px solid var(--rule);
  color: var(--ink); font-size: var(--text-title); line-height: var(--text-title-line);
  letter-spacing: var(--text-title-tracking); font-weight: 500;
  opacity: 0; transform: translateY(var(--rise));
  transition: opacity var(--enter) var(--ease-enter), transform var(--enter) var(--ease-enter);
}
.menu.is-open nav a { opacity: 1; transform: none; }
.menu-foot { display: flex; flex-direction: column; gap: 16px; }
.menu-foot p { font-size: var(--text-caption); color: var(--muted); }

@media (max-width: 1119px) {
  .nav-links, .nav-github { display: none; }
  .menu-button { display: inline-flex; }
}
@media (max-width: 520px) {
  .nav-end .button { display: none; }
}

/* --- Index lists: the signature component ------------------------------------------------ */

.index { border-top: 1px solid var(--rule); }
.row { position: relative; border-bottom: 1px solid var(--rule); }
.row > a, .row.card {
  position: relative; display: grid; grid-template-columns: var(--index) 1fr auto; align-items: baseline;
  column-gap: 16px; padding: 18px 0; color: var(--ink);
}
.row-index { transition: color var(--quick) var(--ease-quick); }
.row-name { font-size: var(--text-title); line-height: var(--text-title-line); letter-spacing: var(--text-title-tracking); font-weight: 500; }
.row-meta { text-align: right; }
/* Hover: a soft plate fades in behind the row and reaches past it; the index turns to ink. */
.row > a::before, .row.card::before {
  content: ""; position: absolute; inset: 0 calc(-1 * var(--plate-bleed)); z-index: -1;
  border-radius: var(--radius-plate); background: var(--plate-soft); opacity: 0;
  transition: opacity var(--quick) var(--ease-quick);
}
.row > a, .row.card { z-index: 0; }
.row > a:hover::before, .row.card:hover::before { opacity: 1; }
.row > a:hover .row-index, .row.card:hover .row-index { color: var(--ink); }
.row > a:hover, .row.card:hover { color: var(--ink); }

/* --- Hero -------------------------------------------------------------------------------- */

.hero { padding: calc(var(--nav) + clamp(48px, 9vw, 120px)) 0 clamp(64px, 8vw, 112px); }
.hero-title { max-width: 14ch; margin-bottom: 20px; }
.hero .lede { font-size: var(--text-body); }
.hero-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 32px; }
.hero-index { margin-top: clamp(48px, 7vw, 88px); }
.hero .disclaimer { margin-top: 24px; }

/* --- Sections ------------------------------------------------------------------------------- */

.section { padding: clamp(72px, 10vw, 144px) 0; }
.section-head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px 48px; align-items: end; margin-bottom: 48px; }
.section-head .kicker { grid-column: 1 / -1; margin-bottom: 0; }
.section .title { font-size: var(--text-display); line-height: var(--text-display-line); letter-spacing: var(--text-display-tracking); }

.statement {
  max-width: 28ch; font-size: var(--text-title); line-height: 1.15;
  letter-spacing: var(--text-title-tracking); font-weight: 500; text-wrap: balance;
}
.facts { margin-top: 56px; }
.fact, .features li {
  display: grid; grid-template-columns: var(--index) minmax(0, 18rem) minmax(0, 1fr); column-gap: 16px;
  align-items: baseline; padding: 20px 0;
}
.fact h3, .features h3 { font-size: var(--text-heading); line-height: var(--text-heading-line); letter-spacing: var(--text-heading-tracking); }
.fact p, .features p { max-width: var(--measure); color: var(--muted); }

/* Screenshots: no frames, the images themselves. */
.mosaic { display: grid; grid-template-columns: repeat(6, 1fr); gap: 12px; }
.tile { margin: 0; grid-column: span 2; }
.tile-wide { grid-column: span 4; }
.tile-tall { grid-column: span 2; }
.tile-wide, .tile-tall { grid-row: span 1; }
.zoom { display: block; width: 100%; padding: 0; border: 0; background: var(--plate-soft); border-radius: var(--radius-plate); overflow: hidden; cursor: zoom-in; }
.zoom img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; transition: transform var(--enter) var(--ease-enter); }
.zoom:hover img { transform: scale(1.02); }
figcaption { display: flex; gap: 12px; margin-top: 10px; font-size: var(--text-caption); color: var(--muted); }
figcaption span { font-family: var(--mono); font-size: var(--text-micro); letter-spacing: var(--text-micro-tracking); padding-top: 1px; }

/* Parity: the count, then every subsystem as an index row. */
.parity-hero { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 48px; align-items: end; margin-bottom: 64px; }
.count { font-size: clamp(96px, 16vw, 220px); line-height: 0.85; letter-spacing: -0.05em; font-weight: 500; }
.count .digits span { display: inline-block; }
.count-label { margin-top: 20px; max-width: 32ch; color: var(--muted); }
.parity-copy .title { margin-bottom: 16px; }
.prose { color: var(--ink-soft); max-width: var(--measure); }
.prose > * + * { margin-top: 12px; }
.systems { border-top: 1px solid var(--rule); }
.system {
  display: grid; grid-template-columns: var(--index) minmax(0, 1fr) auto; column-gap: 16px; row-gap: 6px;
  padding: 20px 0; border-bottom: 1px solid var(--rule); position: relative;
}
.system-head { display: contents; }
.system-index { grid-column: 1; grid-row: 1; font: var(--text-micro) / var(--text-micro-line) var(--mono); letter-spacing: var(--text-micro-tracking); color: var(--muted); padding-top: 0.6em; }
.system h3 { grid-column: 2; grid-row: 1; font-size: var(--text-heading); line-height: var(--text-heading-line); letter-spacing: var(--text-heading-tracking); }
.system-state {
  grid-column: 3; grid-row: 1; display: inline-flex; align-items: center; gap: 6px; padding-top: 0.5em;
  font: var(--text-micro) / var(--text-micro-line) var(--mono); letter-spacing: var(--text-micro-tracking);
  text-transform: uppercase; color: var(--muted);
}
.system.is-full .system-state { color: var(--success); }
.check { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.6; }
.system-detail { grid-column: 2 / 4; max-width: 72ch; font-size: var(--text-caption); line-height: 1.6; color: var(--muted); }
.gap { color: var(--ink); font-weight: 500; }
.legend { max-width: 80ch; }

/* The launcher: copy and features on the left, the menus on the right. */
.launcher-grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(32px, 5vw, 80px); align-items: start; }
.launcher-copy .title { margin-bottom: 16px; }
.launcher-copy .features { margin-top: 40px; }
.features li { grid-template-columns: var(--index) minmax(0, 1fr); row-gap: 4px; }
.features li p { grid-column: 2; font-size: var(--text-ui); }
.launcher-actions { margin-top: 32px; }
.screens { position: sticky; top: calc(var(--nav) + 24px); }
.tabs { position: relative; display: inline-flex; padding: 2px; gap: 2px; margin-bottom: 16px; border-radius: var(--radius-pill); background: var(--plate-soft); }
.tabs button {
  position: relative; z-index: 1; height: var(--segment); padding: 0 14px; border: 0; background: none;
  border-radius: var(--radius-pill); color: var(--muted); font: 500 var(--text-label) / 1 var(--font); cursor: pointer;
  transition: color var(--quick) var(--ease-quick);
}
.tabs button:hover { color: var(--ink); }
.tabs button[aria-selected="true"] { color: var(--page); }
.tab-pill { position: absolute; top: 0; left: 0; border-radius: var(--radius-pill); background: var(--ink); transition: transform var(--move) var(--ease-move), width var(--move) var(--ease-move); }
.screen { position: relative; aspect-ratio: 16 / 10; border-radius: var(--radius-plate); overflow: hidden; background: var(--plate-soft); }
.screen-panel { position: absolute; inset: 0; opacity: 0; transition: opacity var(--move) var(--ease-move); }
.screen-panel.is-active { opacity: 1; }
.screen-panel img { width: 100%; height: 100%; object-fit: cover; }
.screen-caption { margin-top: 12px; font-size: var(--text-caption); color: var(--muted); }

/* Patch notes. */
.eyebrow { text-transform: uppercase; }
.prose h2, .prose h3, .prose h4 { font-size: var(--text-heading); line-height: var(--text-heading-line); color: var(--ink); margin-top: 28px; }
.prose ul, .prose ol { padding-left: 18px; list-style: disc; }
.prose li + li { margin-top: 6px; }
.prose li::marker { color: var(--muted); }
.prose strong { color: var(--ink); font-weight: 500; }
.prose pre { padding: 16px; border-radius: var(--radius-plate); background: var(--plate-soft); overflow-x: auto; }
.prose pre code { background: none; padding: 0; }
.release { border-top: 1px solid var(--rule); }
.release:last-of-type { border-bottom: 1px solid var(--rule); }
.release summary {
  display: grid; grid-template-columns: minmax(0, 12rem) minmax(0, 1fr) auto; gap: 16px; align-items: baseline;
  padding: 18px 0; cursor: pointer; list-style: none;
}
.release summary::-webkit-details-marker { display: none; }
.release-tag { font-size: var(--text-heading); font-weight: 500; letter-spacing: var(--text-heading-tracking); }
.release-sub { color: var(--muted); font-size: var(--text-ui); }
.release time { font: var(--text-micro) / 1 var(--mono); letter-spacing: var(--text-micro-tracking); color: var(--muted); }
.release[open] summary .release-tag { color: var(--accent); }
.release .prose { padding: 0 0 24px 12rem; margin-left: 16px; font-size: var(--text-ui); }
.release-more { margin-top: 24px; }

/* Community. */
.cards { margin-top: 48px; }
.row.card { grid-template-columns: var(--index) minmax(0, 1fr) minmax(0, 1.4fr) auto; }
.card-title { font-size: var(--text-title); line-height: var(--text-title-line); letter-spacing: var(--text-title-tracking); font-weight: 500; }
.card-text { color: var(--muted); }
.card-arrow { color: var(--muted); transition: transform var(--quick) var(--ease-quick), color var(--quick) var(--ease-quick); }
.card:hover .card-arrow { color: var(--accent); transform: translateX(4px); }
.contributors { margin-top: 96px; }
.contributors-title { font-size: var(--text-heading); line-height: var(--text-heading-line); }
.contributors-text { margin-top: 8px; color: var(--muted); }
.contributors-list { margin-top: 24px; display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0 24px; border-top: 1px solid var(--rule); }
.contributor { display: grid; grid-template-columns: 32px 1fr; column-gap: 12px; align-items: center; padding: 14px 0; border-bottom: 1px solid var(--rule); color: var(--ink); }
.contributor-avatar { grid-row: span 2; width: 32px; height: 32px; border-radius: 50%; background: var(--plate); }
.contributor-name { font-weight: 500; }
.contributor-count { font: var(--text-micro) / 1.4 var(--mono); letter-spacing: var(--text-micro-tracking); color: var(--muted); }
.contributor:hover .contributor-name { color: var(--accent); }

/* --- Footer: small print, then the giant faint wordmark --------------------------------- */

.footer { padding: clamp(72px, 9vw, 120px) 0 0; overflow: hidden; }
.footer-disclaimer { max-width: 24ch; font-size: var(--text-heading); line-height: var(--text-heading-line); letter-spacing: var(--text-heading-tracking); font-weight: 500; }
.footer-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 32px; margin-top: 40px; }
.footer-cols p { font-size: var(--text-caption); line-height: 1.7; color: var(--muted); }
.footer-bar { display: flex; justify-content: space-between; align-items: center; gap: 24px; margin-top: 56px; font-size: var(--text-caption); color: var(--muted); }
.footer-links { display: flex; flex-wrap: wrap; gap: 20px; }
.footer-links a { color: var(--muted); }
.footer-links a:hover { color: var(--ink); }
.footer-word {
  box-sizing: border-box; width: 100%; margin: 24px auto 0; padding: 0 var(--g); max-width: var(--max);
  font-size: var(--text-wordmark); line-height: var(--text-wordmark-line); letter-spacing: var(--text-wordmark-tracking);
  font-weight: var(--text-wordmark-weight); color: var(--plate); white-space: nowrap; user-select: none;
  translate: -0.05em 0.12em;
}
:root[data-theme="dark"] .footer-word { color: var(--plate-soft); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .footer-word { color: var(--plate-soft); } }

/* --- Lightbox ---------------------------------------------------------------------------- */

.lightbox { width: min(1400px, 94vw); max-height: 92vh; padding: 0; border: 0; border-radius: var(--radius-plate); background: var(--surface); color: var(--ink); }
.lightbox::backdrop { background: color-mix(in srgb, var(--page) 86%, transparent); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.lightbox img { width: 100%; }
.lightbox form { position: absolute; top: 12px; right: 12px; }
.lightbox-caption { padding: 14px 16px; font-size: var(--text-caption); color: var(--muted); }

/* --- 404 --------------------------------------------------------------------------------- */

.lost { min-height: 100vh; display: flex; flex-direction: column; justify-content: space-between; }
.lost .hero { padding-top: clamp(96px, 16vh, 200px); }

/* --- Motion: content arrives with a fade and a short rise, a few tens of ms apart --------- */

.js .reveal, .js .reveal-media {
  opacity: 0; transform: translateY(var(--rise)); filter: blur(4px);
  transition: opacity var(--enter) var(--ease-enter) var(--d, 0ms), transform var(--enter) var(--ease-enter) var(--d, 0ms), filter var(--enter) var(--ease-enter) var(--d, 0ms);
}
.js .reveal.is-visible, .js .reveal-media.is-visible { opacity: 1; transform: none; filter: none; }
.js .systems .system { opacity: 0; transform: translateY(var(--rise)); transition: opacity var(--enter) var(--ease-enter) var(--d, 0ms), transform var(--enter) var(--ease-enter) var(--d, 0ms); }
.js .systems.is-visible .system { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .js .reveal, .js .reveal-media, .js .systems .system { transform: none; filter: none; transition: opacity 200ms linear; }
  .menu nav a { transform: none; }
}

/* --- Touch: every target at least 44 px high ------------------------------------------- */

@media (pointer: coarse) {
  .button, .button.large, .button.small, .tabs button { height: 44px; }
  .nav-mark, .theme-toggle, .nav-github { min-height: 44px; }
  .link-arrow, .footer-links a { display: inline-flex; align-items: center; min-height: 44px; }
}

/* --- Narrow screens ------------------------------------------------------------------------ */

@media (max-width: 900px) {
  .section-head, .parity-hero, .launcher-grid { grid-template-columns: minmax(0, 1fr); }
  .section-head { gap: 16px; }
  .screens { position: static; }
  .fact { grid-template-columns: var(--index) minmax(0, 1fr); row-gap: 6px; }
  .fact p { grid-column: 2; }
  .mosaic { grid-template-columns: minmax(0, 1fr); }
  .tile, .tile-wide, .tile-tall { grid-column: auto; }
  .row.card { grid-template-columns: var(--index) minmax(0, 1fr) auto; row-gap: 4px; }
  .card-text { grid-column: 2; grid-row: 2; font-size: var(--text-ui); }
  .card-arrow { grid-row: 1; grid-column: 3; }
  .release summary { grid-template-columns: minmax(0, 1fr) auto; }
  .release-sub { grid-column: 1 / -1; grid-row: 2; }
  .release .prose { padding-left: 0; margin-left: 0; }
  .footer-cols { grid-template-columns: minmax(0, 1fr); }
  .footer-bar { flex-direction: column; align-items: flex-start; }
  .system { grid-template-columns: var(--index) minmax(0, 1fr); }
  .system-state { grid-column: 2; grid-row: 2; padding-top: 0; }
  .system-detail { grid-column: 2; }
  .row > a { grid-template-columns: 28px 1fr auto; padding: 16px 0; }
  :root { --index: 28px; }
}

/* The privacy page: one long read under the hero type. */
.privacy h1 { margin-bottom: 16px; }
.privacy .prose { margin: 40px 0; }
.privacy .disclaimer { margin-top: 32px; }

/* --- Documentation (/docs): a left navigation and one page at a time --------------------- */

.docs-bar {
  position: sticky; top: 0; z-index: 20; height: 56px;
  background: color-mix(in srgb, var(--page) 88%, transparent);
  -webkit-backdrop-filter: blur(16px) saturate(1.2); backdrop-filter: blur(16px) saturate(1.2);
  box-shadow: 0 1px 0 var(--rule);
}
.docs-bar-inner { display: flex; align-items: center; gap: 16px; height: 100%; max-width: var(--max); margin: 0 auto; padding: 0 var(--g); }
.docs-bar-title { padding-left: 16px; border-left: 1px solid var(--rule); color: var(--muted); font-size: var(--text-label); }
.docs-bar-end { margin-left: auto; display: flex; align-items: center; gap: 16px; }
.docs-bar-link { color: var(--muted); font-size: var(--text-label); }
.docs-bar-link:hover { color: var(--ink); }
.docs {
  display: grid; grid-template-columns: 248px minmax(0, 1fr); gap: clamp(32px, 6vw, 96px);
  max-width: var(--max); margin: 0 auto; padding: 48px var(--g) 0; align-items: start;
}
.docs-nav-wrap { position: sticky; top: 80px; max-height: calc(100vh - 104px); overflow-y: auto; padding-bottom: 24px; }
.docs-nav-wrap summary { display: none; }
.docs-nav-group { margin: 28px 0 8px; font: var(--text-micro) / var(--text-micro-line) var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase; color: var(--muted); }
.docs-nav-group:first-child { margin-top: 0; }
.docs-nav li a { display: block; padding: 6px 12px; margin-left: -12px; border-radius: var(--radius); color: var(--ink-soft); font-size: var(--text-ui); }
.docs-nav li a:hover { background: var(--plate-soft); color: var(--ink); }
.docs-nav li a[aria-current] { background: var(--plate-soft); color: var(--ink); font-weight: 500; }
.docs-main { min-width: 0; padding-bottom: 48px; }
.docs-main .title { margin-bottom: 16px; }
.docs-main .lede { max-width: 64ch; font-size: var(--text-heading); line-height: 1.45; }
.docs-toc { margin-top: 28px; max-width: 72ch; }
.docs-toc p { font: var(--text-micro) / var(--text-micro-line) var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase; color: var(--muted); margin-bottom: 8px; }
.docs-toc ul { display: flex; flex-wrap: wrap; gap: 6px; }
.docs-toc a { display: block; padding: 4px 12px; border-radius: var(--radius-pill); background: var(--plate-soft); color: var(--ink-soft); font-size: var(--text-label); }
.docs-toc a:hover { background: var(--plate); color: var(--ink); }
.docs-prose { max-width: 72ch; margin-top: 40px; font-size: var(--text-body); }
.docs-prose > * + * { margin-top: 14px; }
.docs-prose h2 { margin-top: 56px; padding-top: 24px; border-top: 1px solid var(--rule); font-size: clamp(24px, 2.4vw, 30px); line-height: 1.2; letter-spacing: var(--text-title-tracking); scroll-margin-top: 80px; }
.docs-prose h2:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.docs-prose h3 { margin-top: 32px; scroll-margin-top: 80px; }
.docs-prose ol { list-style: decimal; }
.docs-prose pre { font: 0.86em/1.6 var(--mono); }
.docs-prose blockquote { padding: 2px 0 2px 16px; border-left: 2px solid var(--accent); color: var(--ink-soft); }
.docs-prose blockquote > * + * { margin-top: 8px; }
.docs-prose figure { margin: 28px 0; }
.docs-prose figure img { width: 100%; border-radius: var(--radius-plate); box-shadow: 0 0 0 1px var(--rule); }
.docs-prose figcaption { margin-top: 10px; font-size: var(--text-caption); color: var(--muted); }
.docs-pager { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; max-width: 72ch; margin-top: 56px; }
.docs-pager a { display: flex; flex-direction: column; gap: 2px; padding: 14px 16px; border-radius: var(--radius-plate); box-shadow: 0 0 0 1px var(--rule); color: var(--ink); font-weight: 500; }
.docs-pager a:hover { background: var(--plate-soft); color: var(--ink); }
.docs-pager a span { font: var(--text-micro) / var(--text-micro-line) var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase; color: var(--muted); font-weight: 400; }
.docs-pager-next { grid-column: 2; text-align: right; }
.docs-edit { margin-top: 32px; font-size: var(--text-caption); color: var(--muted); }
.docs-edit a { color: inherit; text-decoration: underline; text-decoration-color: var(--rule); text-underline-offset: 3px; }
.docs-main .disclaimer { margin-top: 24px; }

@media (max-width: 900px) {
  .docs { grid-template-columns: minmax(0, 1fr); gap: 0; padding-top: 12px; }
  .docs-nav-wrap { position: static; max-height: none; overflow: visible; margin-bottom: 24px; border-bottom: 1px solid var(--rule); }
  .docs-nav-wrap summary { display: flex; align-items: center; min-height: 44px; cursor: pointer; font-weight: 500; list-style: none; }
  .docs-nav-wrap summary::-webkit-details-marker { display: none; }
  .docs-nav-wrap summary::after { content: "+"; margin-left: auto; color: var(--muted); }
  .docs-nav-wrap[open] summary::after { content: "\2212"; }
  .docs-pager { grid-template-columns: minmax(0, 1fr); }
  .docs-pager-next { grid-column: 1; }
  .docs-bar-link { display: none; }
}
@media (pointer: coarse) {
  .docs-nav li a, .docs-toc a, .docs-bar-title, .docs-bar-link { display: flex; align-items: center; min-height: 44px; }
}

/* --- Blocks: the launcher's look on the page (docs/design-system.md, "Blocks") -------------
   Pixel type for headings and controls, square panels with a dark outline, a light bevel on top
   and a darker lip below, the violet face for the main action, sunk wells, a stone texture
   behind the page and Horizon's pixel landscape behind the hero. The art is drawn in code
   (scripts/art.mjs, like launcher/src/art.rs); nothing in it comes from Minecraft. */

@font-face { font-family: "Pixelify Sans"; src: url("/fonts/PixelifySans-Medium.woff2") format("woff2"); font-weight: 500; font-display: swap; }
@font-face { font-family: "Pixelify Sans"; src: url("/fonts/PixelifySans-SemiBold.woff2") format("woff2"); font-weight: 600; font-display: swap; }
@font-face { font-family: "Pixelify Sans"; src: url("/fonts/PixelifySans-Bold.woff2") format("woff2"); font-weight: 700; font-display: swap; }

:root {
  --stone: url("/media/stone-light.png");
  --scene: url("/media/scene-light.png");
  --sky: #8d7fd8;
  --panel-edges: inset 0 var(--block-bevel) 0 var(--bevel), inset 0 calc(-1 * var(--block-bevel)) 0 var(--lip);
  --radius: 0px; --radius-plate: 0px; --radius-pill: 0px;
}
:root[data-theme="dark"] { --stone: url("/media/stone-dark.png"); --scene: url("/media/scene-dark.png"); --sky: #0a0f2c; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --stone: url("/media/stone-dark.png"); --scene: url("/media/scene-dark.png"); --sky: #0a0f2c; }
}

/* The stone: 64 texels of the page colour in close shades, each texel 4 px. */
body { position: relative; isolation: isolate; }
body::before {
  content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
  background: var(--stone) 0 0 / 256px 256px repeat; image-rendering: pixelated;
}

/* Pixel type for what names and what you act on; paragraphs stay in Geist. */
.display, .title, .statement, .row-name, .card-title, .release-tag, .count,
.fact h3, .features h3, .system h3, .contributors-title, .footer-disclaimer, .footer-word,
.nav-mark, .docs-prose h2, .docs-prose h3, .prose h2, .prose h3, .prose h4, .menu nav a {
  font-family: var(--pixel); font-weight: 600; letter-spacing: 0;
}
.display, .count, .footer-word { font-weight: 700; }
.nav-mark { font-size: 18px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; }
code { border-radius: 0; background: var(--well); box-shadow: 0 0 0 1px var(--outline); }

/* Buttons: blocks with an outline, a bevel and a lip; they sink a pixel when pressed. */
.button {
  border: var(--block-outline) solid var(--outline); border-radius: 0;
  font: 500 var(--text-ui) / 1 var(--pixel);
  box-shadow: inset 0 var(--block-bevel) 0 var(--button-bevel), inset 0 calc(-1 * var(--block-lip)) 0 var(--lip);
  padding-bottom: 2px;
}
.button.large { font-size: 18px; }
.button.primary { background: var(--face); color: var(--on-face); box-shadow: inset 0 var(--block-bevel) 0 var(--face-bevel), inset 0 calc(-1 * var(--block-lip)) 0 var(--face-lip); }
.button.primary:hover { opacity: 1; filter: brightness(1.08); }
.button.secondary { background: var(--button); }
.button.secondary:hover { background: var(--button); filter: brightness(1.06); }
.button.ghost { border-color: transparent; box-shadow: none; }
.button:active { opacity: 1; transform: translateY(1px); box-shadow: inset 0 var(--block-bevel) 0 var(--lip); }
:focus-visible { border-radius: 0; }

/* The top bar: the sidebar colour with an outline under it, tabs with an accent underline. */
.nav.is-scrolled, .nav.is-menu { background: var(--side); -webkit-backdrop-filter: none; backdrop-filter: none; box-shadow: 0 var(--block-outline) 0 var(--outline); }
.nav-links a, .nav-github, .theme-toggle { border-radius: 0; font-family: var(--pixel); font-weight: 500; font-size: 15px; }
.nav-links a:hover, .nav-github:hover, .theme-toggle:hover { background: var(--raised); }
.nav-links a[aria-current] { background: var(--raised); box-shadow: inset 0 -3px 0 var(--accent); }
.theme-toggle { text-transform: none; letter-spacing: 0; }
.menu { background: var(--side); }
.menu nav a { border-bottom: 0; }

/* Lists become stacks of panels. */
.index, .systems, .contributors-list { border-top: 0; display: grid; gap: 8px; }
.row, .system, .release, .release:last-of-type, .contributor { border-bottom: 0; border-top: 0; }
.row > a, .row.card, .fact.row, .features li, .system, .release, .contributor, .docs-pager a {
  background: var(--panel); border: var(--block-outline) solid var(--outline); box-shadow: var(--panel-edges);
  border-radius: 0;
}
.row > a, .row.card, .fact.row, .features li, .system { padding-left: 20px; padding-right: 20px; }
.row > a::before, .row.card::before { display: none; }
.row > a:hover, .row.card:hover, .contributor:hover, .docs-pager a:hover { background: var(--raised); }
.row > a:hover .row-index { color: var(--accent); }
.row-name { font-size: clamp(20px, 2.2vw, 28px); }
.release { padding: 0 20px; }
.release + .release { margin-top: 8px; }
.release .prose { padding-left: 12rem; }
.contributor { padding: 12px 14px; }
.contributors-list { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; }
.contributor-avatar { border-radius: 0; box-shadow: 0 0 0 2px var(--outline); image-rendering: pixelated; }
.system.is-full .system-state { color: var(--success); }

/* Screenshots and the launcher's screens: square, outlined. */
.zoom, .screen, .lightbox, .prose pre, .docs-prose figure img { border-radius: 0; box-shadow: 0 0 0 var(--block-outline) var(--outline); }
.tabs { border-radius: 0; background: var(--well); box-shadow: 0 0 0 var(--block-outline) var(--outline); }
.tabs button { border-radius: 0; font-family: var(--pixel); font-weight: 500; font-size: 15px; }
.tabs button[aria-selected="true"] { color: var(--on-face); }
.tab-pill { border-radius: 0; background: var(--face); box-shadow: inset 0 var(--block-bevel) 0 var(--face-bevel), inset 0 calc(-1 * var(--block-bevel)) 0 var(--face-lip); }

/* The hero: Horizon's landscape under a veil of the page colour, the words on the left. */
.hero {
  position: relative; isolation: isolate; overflow: hidden;
  background: var(--scene) 70% 100% / clamp(1200px, 135vw, 2400px) auto no-repeat, var(--sky); image-rendering: pixelated;
  border-bottom: var(--block-outline) solid var(--outline);
}
.hero::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--page) 92%, transparent) 0%, color-mix(in srgb, var(--page) 78%, transparent) 45%, color-mix(in srgb, var(--page) 0%, transparent) 78%),
    linear-gradient(180deg, color-mix(in srgb, var(--page) 0%, transparent) 55%, color-mix(in srgb, var(--page) 70%, transparent) 100%);
}
.hero .kicker span, .hero .kicker { color: var(--ink-soft); }
.hero .lede { color: var(--ink-soft); }
.hero { padding-bottom: clamp(160px, 18vw, 280px); }
.hero-after { padding-top: 40px; }
.hero-after .hero-index { margin-top: 0; max-width: 860px; }
.hero-after .disclaimer { margin-top: 24px; }
@media (max-width: 900px) {
  .hero::before { background: color-mix(in srgb, var(--page) 84%, transparent); }
}

/* Documentation. */
.docs-bar { background: var(--side); -webkit-backdrop-filter: none; backdrop-filter: none; box-shadow: 0 var(--block-outline) 0 var(--outline); }
.docs-nav li a { border-radius: 0; }
.docs-nav li a[aria-current] { background: var(--raised); box-shadow: inset 4px 0 0 var(--accent); }
.docs-toc a { border-radius: 0; background: var(--button); box-shadow: 0 0 0 var(--block-outline) var(--outline); }
.docs-pager a { box-shadow: var(--panel-edges); }
.docs-prose h2 { border-top: var(--block-outline) solid var(--outline); }
.docs-prose blockquote { border-left: 4px solid var(--accent); background: var(--panel); padding: 10px 16px; box-shadow: 0 0 0 var(--block-outline) var(--outline); }

/* The footer: the giant wordmark in pixels. */
.footer { background: var(--side); border-top: var(--block-outline) solid var(--outline); margin-top: 48px; }
.footer-word { color: var(--raised); letter-spacing: 0.02em; }
:root[data-theme="dark"] .footer-word { color: var(--panel); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .footer-word { color: var(--panel); } }

/* --- Releases and Benchmarks pages, and the home page's "Recently added" ------------------ */

/* Pixelify Sans' "fi" ligature draws as "A" ("8 Axes"): no common ligatures anywhere. */
:root { font-variant-ligatures: no-common-ligatures; }

.page-main { padding-top: calc(var(--nav) + clamp(40px, 6vw, 80px)); }
.page-title { max-width: 18ch; margin-bottom: 20px; }
.page-main > .container > .lede { font-size: var(--text-body); }
.page-main .disclaimer { margin-top: 48px; }

/* Channel and source badges: small square tags. */
.badge {
  display: inline-flex; align-items: center; height: 22px; padding: 0 8px; margin-right: 10px; vertical-align: 2px;
  font: 500 12px / 1 var(--pixel); letter-spacing: 0.02em; text-transform: uppercase; white-space: nowrap;
  border: var(--block-outline) solid var(--outline); background: var(--well); color: var(--ink-soft);
}
.badge-stable { background: color-mix(in srgb, var(--success) 22%, var(--panel)); color: var(--ink); }
.badge-alpha { background: color-mix(in srgb, var(--warn) 24%, var(--panel)); color: var(--ink); }
.badge-launcher { background: color-mix(in srgb, var(--accent) 20%, var(--panel)); color: var(--ink); }
.badge-us { background: color-mix(in srgb, var(--accent) 20%, var(--panel)); color: var(--ink); }
.badge-players { background: color-mix(in srgb, var(--success) 22%, var(--panel)); color: var(--ink); }
.badge-estimate { background: color-mix(in srgb, var(--warn) 24%, var(--panel)); color: var(--ink); }

/* Home: the newest releases on a line each, then what they added. */
.recent-list .row > a { grid-template-columns: 8.5rem minmax(0, 13rem) minmax(0, 1fr) auto; align-items: baseline; }
.recent-line { color: var(--muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.recent-list .row-name { font-size: clamp(18px, 1.8vw, 22px); }
.recent-list .badge { margin-right: 0; }
.recent-picks { margin-top: 32px; }
.recent-picks .eyebrow { margin-bottom: 12px; }
.highlights { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.highlight {
  display: flex; flex-direction: column; justify-content: space-between; gap: 16px; padding: 18px 20px;
  background: var(--panel); border: var(--block-outline) solid var(--outline); box-shadow: var(--panel-edges);
}
.highlight p { color: var(--ink); }
.highlight-from { font: var(--text-micro) / 1 var(--mono); letter-spacing: var(--text-micro-tracking); color: var(--muted); }
.highlight-from:hover { color: var(--accent); }

/* Releases: a filter, then every release as a panel that opens. */
.release-filter { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 32px; }
.release-filter .button[aria-pressed="true"] { background: var(--face); color: var(--on-face); box-shadow: inset 0 var(--block-bevel) 0 var(--face-bevel), inset 0 calc(-1 * var(--block-lip)) 0 var(--face-lip); }
.release-count { margin: 16px 0 12px; }
.release-list { display: grid; gap: 8px; }
.release-list .release + .release { margin-top: 0; }
.release-entry summary { grid-template-columns: minmax(0, 11rem) minmax(0, 1fr) auto; }
.release-entry .release-sub { display: flex; align-items: baseline; flex-wrap: wrap; row-gap: 4px; }
.release-detail { padding: 0 0 24px 11rem; margin-left: 16px; display: grid; gap: 20px; max-width: calc(11rem + 16px + var(--measure) + 120px); }
.release-detail .prose { padding: 0; margin: 0; font-size: var(--text-ui); max-width: none; }
.release-overview { padding: 16px 18px; background: var(--well); box-shadow: 0 0 0 var(--block-outline) var(--outline); }
.release-counts { font-family: var(--pixel); font-weight: 600; color: var(--ink); margin-bottom: 8px; }
.release-overview ul { list-style: square; padding-left: 18px; color: var(--ink-soft); font-size: var(--text-ui); }
.release-overview li + li { margin-top: 4px; }
.release-downloads ul { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 8px; margin-top: 8px; }
.release-downloads li { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; background: var(--button); box-shadow: 0 0 0 var(--block-outline) var(--outline); }
.release-downloads li a { font-weight: 500; }
.release-downloads li span { font: var(--text-micro) / 1.4 var(--mono); color: var(--muted); overflow-wrap: anywhere; }
.release-github { font-size: var(--text-caption); }
.release-entry:target { box-shadow: var(--panel-edges), 0 0 0 3px var(--accent); }

/* Benchmarks. */
.bench-section { margin-top: clamp(64px, 8vw, 112px); }
.bench-section > .title { margin-bottom: 16px; }
.bench-section > .lede { margin-bottom: 32px; }
.machines { display: grid; grid-template-columns: minmax(0, 1fr); gap: 24px; }
.machine { min-width: 0; padding: 24px; background: var(--panel); border: var(--block-outline) solid var(--outline); box-shadow: var(--panel-edges); }
.machine-head { display: grid; gap: 10px; margin-bottom: 20px; }
.machine-name { font-family: var(--pixel); font-weight: 600; font-size: var(--text-title); line-height: var(--text-title-line); }
.machine-facts { display: flex; flex-wrap: wrap; gap: 6px 28px; margin: 0; }
.machine-facts div { display: flex; gap: 8px; min-width: 0; }
.machine-facts dt { font: var(--text-micro) / 1.6 var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase; color: var(--muted); }
.machine-facts dd { margin: 0; min-width: 0; overflow-wrap: anywhere; font-size: var(--text-caption); color: var(--ink-soft); }
.machine-note { font-size: var(--text-caption); color: var(--muted); max-width: 90ch; }
/* relative: the screen-reader-only labels inside are absolute and would escape the scroll box otherwise. */
.table-wrap { position: relative; overflow-x: auto; }
.bench-table { width: 100%; border-collapse: collapse; font-size: var(--text-ui); }
.bench-table th, .bench-table td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--rule); vertical-align: baseline; }
.bench-table thead th { font: var(--text-micro) / 1.4 var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase; color: var(--muted); font-weight: 400; }
.bench-table thead tr:first-child th { color: var(--ink); }
.bench-table tbody th { font-weight: 500; color: var(--ink); }
.bench-table td.num { font-variant-numeric: tabular-nums; white-space: nowrap; }
.bench-table td.wins { color: var(--ink); font-weight: 600; }
.bench-table td.vs { font-size: var(--text-caption); white-space: nowrap; }
.vs-horizon { color: var(--success); }
.vs-java { color: var(--danger); }
.vs-tie, .vs-none { color: var(--muted); }
.capped { font: var(--text-micro) / 1 var(--mono); color: var(--warn); cursor: help; }
.metric-hint { display: block; font: var(--text-micro) / 1.4 var(--mono); color: var(--muted); font-weight: 400; }
.java-wins { margin-top: 16px; font-size: var(--text-caption); color: var(--ink-soft); }
.picker { display: flex; flex-wrap: wrap; gap: 16px 24px; align-items: end; padding: 20px; background: var(--panel); border: var(--block-outline) solid var(--outline); box-shadow: var(--panel-edges); }
.picker label { display: grid; gap: 6px; }
.picker label > span, .picker legend { font: var(--text-micro) / 1.4 var(--mono); letter-spacing: var(--text-micro-tracking); text-transform: uppercase; color: var(--muted); }
.picker select {
  min-width: min(320px, 80vw); height: var(--control); padding: 0 10px; font: inherit; font-size: var(--text-ui); color: var(--ink);
  background: var(--well); border: var(--block-outline) solid var(--outline); border-radius: 0;
}
.picker-rd { display: flex; gap: 16px; align-items: center; border: 0; padding: 0; margin: 0; }
.picker-rd legend { margin-bottom: 6px; }
.picker-rd label { display: inline-flex; align-items: center; gap: 6px; font-family: var(--pixel); font-weight: 500; height: var(--control); }
.picker-rd input { accent-color: var(--accent); width: 18px; height: 18px; }
.pick-result { margin-top: 16px; padding: 20px; background: var(--panel); border: var(--block-outline) solid var(--outline); box-shadow: var(--panel-edges); }
.pick-head { margin-bottom: 12px; font-size: var(--text-caption); color: var(--ink-soft); line-height: 1.8; }
.pick-result .meta { margin-top: 12px; }
.pick-notes { margin: 12px 0 0; padding-left: 20px; font-size: var(--text-caption); color: var(--ink-soft); line-height: 1.6; }
.players-hardware th[scope="rowgroup"] { vertical-align: top; }
.empty { color: var(--muted); }
.prose-section .prose { max-width: 80ch; }
.spec-table { margin-top: 24px; }
.spec-table summary { cursor: pointer; font-family: var(--pixel); font-weight: 600; }
.spec-table .bench-table { margin-top: 16px; max-width: 760px; }

@media (max-width: 900px) {
  .recent-list .row > a { grid-template-columns: minmax(0, 1fr) auto; row-gap: 4px; }
  .recent-list .row-index { grid-column: 1; grid-row: 1; }
  .recent-list .row-name { grid-column: 1; grid-row: 2; }
  .recent-line { grid-column: 1 / -1; grid-row: 3; white-space: normal; }
  .recent-list .row-meta { grid-column: 2; grid-row: 1; }
  .highlights { grid-template-columns: minmax(0, 1fr); }
  .release-entry summary { grid-template-columns: minmax(0, 1fr) auto; }
  .release-detail { padding-left: 0; margin-left: 0; }
  .machine { padding: 16px; }
}
