/* RailCheck typography (branch typo-gpt): the type scale of _dump/gptypography.md, on the three RailCheck pages only
   (layouts/railcheck/*.html, body.rc), loaded after sim.css and report.css. The labs landing page and the status page
   share sim.css but not this file, so they keep the old sizes; the site header and footer keep theirs too.
   Families stay as _graphic_identity/typography.md has them (sans prose, mono labels and numbers); this file sets
   sizes, weights and line heights only. Drawings keep their own sizes (the board and network SVGs, the 3D labels,
   the report's cover map and landscape cells): their text scales with the drawing. */
body.rc {
  /* sizes */
  --text-xs: 12px;        /* mono labels, eyebrows, footnotes */
  --text-caption: 13px;   /* captions, metadata, code */
  --text-sm: 14px;        /* tables, dense text, buttons */
  --text-base: 16px;      /* body */
  --text-lg: 18px;        /* lead, H4 */
  --text-xl: 20px;        /* H3 */
  --text-2xl: 24px;       /* H2 */
  --text-3xl: 32px;       /* H1, key numbers */
  --text-display: 48px;   /* hero */
  /* weights: 400 reading, 500 labels and controls, 600 headings and key numbers; no 700 */
  --weight-regular: 400; --weight-medium: 500; --weight-semibold: 600;
  /* line heights */
  --leading-tight: 1.15; --leading-heading: 1.3; --leading-body: 1.65; --leading-compact: 1.45;

  font-size: var(--text-base); line-height: var(--leading-body);
}

/* headings */
.rc .fl-hero h1 { font-size: clamp(32px, 5vw, var(--text-display)); line-height: var(--leading-tight); letter-spacing: -.02em; font-weight: var(--weight-semibold); }
/* the report's cover title set exactly like the status page's "Project Status" (status.css .st h1), weight 800 included */
.rc .rp-cover h1 { font-size: clamp(38px, 6vw, 64px); line-height: 1; letter-spacing: -.04em; font-weight: 800; }
.rc .rp-verdict, .rc .rp-sec h2 { font-size: var(--text-2xl); line-height: var(--leading-heading); font-weight: var(--weight-semibold); }
.rc .fl-fold > summary h2, .rc .fl-verdict h3 { font-size: var(--text-xl); line-height: var(--leading-heading); font-weight: var(--weight-semibold); }
.rc .fl-panel h2, .rc .rp-sec h3 { font-size: var(--text-lg); line-height: var(--leading-heading); font-weight: var(--weight-semibold); }
.rc .fl-proved-h { font-size: var(--text-base); font-weight: var(--weight-semibold); }
@media (max-width: 600px) {
  .rc .rp-verdict, .rc .rp-sec h2 { font-size: 22px; }
  .rc .fl-fold > summary h2, .rc .fl-verdict h3 { font-size: 19px; }
  .rc .fl-panel h2, .rc .rp-sec h3 { font-size: 17px; }
}

/* reading text: lead 18, body 16, dense 14 */
.rc .fl-lede { font-size: var(--text-lg); line-height: 1.6; }
.rc .fl-lead, .rc .fl-tour-say, .rc .fl-cap, .rc .fl-rules label,
.rc .rp-sec p, .rc .rp-sec li { font-size: var(--text-base); line-height: var(--leading-body); }
.rc .fl-rules label { line-height: var(--leading-compact); }
.rc .fl-verdict p, .rc .fl-story, .rc .fl-why, .rc .fl-ga, .rc .fl-net-rules, .rc .fl-score, .rc .fl-proved,
.rc .rp-cols ul, .rc .rp-trace, .rc .rp-meta dd, .rc .rp-reading, .rc .rp-note { font-size: var(--text-sm); line-height: 1.5; }
.rc .rp-reading, .rc .rp-note { font-size: var(--text-sm) !important; }

/* captions and metadata: 13 */
.rc .fl-note, .rc .fl-steps, .rc .fl-table td span, .rc .fl-rtable td span, .rc .rp-big span, .rc .rp-props li,
.rc .rp-chip .n, .rc .rp-fig figcaption, .rc .fl-3d .l3-card { font-size: var(--text-caption); line-height: var(--leading-compact); }

/* mono labels: 12, the smallest size (was 9 to 12.5) */
.rc .fl-eyebrow, .rc .rp-eyebrow, .rc .fl-board-name, .rc .fl-lamp, .rc .fl-sum, .rc .fl-every, .rc .fl-tour-h,
.rc .fl-engine, .rc .who, .rc .fl-story .mv, .rc .fl-why .stop span, .rc .fl-why .stop em, .rc .fl-net-rules .cost,
.rc .fl-verdict .stats, .rc .fl-verdict .live, .rc .fl-points small, .rc .fl-steps li::before,
.rc .fl-3d .l3-badge, .rc .fl-3d .l3-card b, .rc .fl-svg::after,
.rc .rp-meta dt, .rc .rp-chip b, .rc .rp-props li span, .rc .rp-props li b, .rc .rp-cols h3, .rc .rp-exec > footer,
.rc .rp-sec h3 span, .rc .rp-witname, .rc .rp-legend, .rc .rp-pick, .rc .rp-land .rl, .rc .fl-table td.mx,
.rc .fl-sitemap h3 { font-size: var(--text-xs); }
.rc .rp-witname { font-size: var(--text-xs) !important; }
.rc .fl-eyebrow, .rc .rp-eyebrow, .rc .fl-board-name, .rc .who, .rc .rp-meta dt, .rc .rp-chip b, .rc .rp-cols h3 { font-weight: var(--weight-medium); }

/* tables: 14 body, 12 mono header at 500, cells 10 × 12 */
.rc .fl-table { font-size: var(--text-sm); line-height: var(--leading-compact); }
.rc .fl-table th, .rc .fl-table td { padding: 10px 12px; }
.rc .fl-table thead th { font-size: var(--text-xs); font-weight: var(--weight-medium); }
.rc .fl-table tbody th, .rc .fl-rtable td.mono { font-size: var(--text-caption); font-weight: var(--weight-semibold); }
.rc .fl-rtable td { font-size: var(--text-sm); }
.rc .fl-table .res, .rc .fl-rtable .res { font-size: var(--text-xs); font-weight: var(--weight-semibold); }
.rc .fl-table td.num { font-size: var(--text-xs); }

/* code: 13 / 1.55 */
.rc .fl-code, .rc .fl-rtable .fl-code { font-size: var(--text-caption); line-height: 1.55; }

/* controls: 13 mono or 14 sans, weight 500 */
.rc .fl-btn, .rc .fl-tabs button, .rc .fl-view button, .rc .fl-ctl button, .rc .fl-sys, .rc .fl-every select { font-size: var(--text-caption); font-weight: var(--weight-medium); }
.rc .fl-btn.small { font-size: var(--text-xs); }
.rc #routes-csv, .rc #report-link, .rc #gen-download, .rc #rp-csv, .rc .fl-tour button { font-size: var(--text-sm); font-weight: var(--weight-medium); }

/* key numbers: 600, never 700 */
.rc .fl-verdict .fl-points { font-size: var(--text-display); font-weight: var(--weight-semibold); }
.rc .fl-verdict.crash .fl-points { font-size: var(--text-2xl); }
.rc .fl-points .rec { font-size: var(--text-xs); font-weight: var(--weight-semibold); }
.rc .rp-big b { font-size: clamp(24px, 4vw, var(--text-3xl)); font-weight: var(--weight-semibold); }
.rc .fl-score dd { font-size: var(--text-sm); font-weight: var(--weight-semibold); }
.rc .rp-chip .mk, .rc .rp-chip .v { font-size: var(--text-base); font-weight: var(--weight-semibold); }

.rc .rp-big b small { font-size: var(--text-sm); }

/* the rest of the 700s become 600, the browser's bold for b and strong too */
.rc b, .rc strong { font-weight: var(--weight-semibold); }
.rc .fl-board-name b, .rc .fl-tour i, .rc .rp-sec h2 span, .rc .rp-mk, .rc .rp-land .rl, .rc .fl-net-rules li.on::marker { font-weight: var(--weight-semibold); }

/* the Quick Links footer on these pages: title as H3 */
.rc .fl-sitemap-h { font-size: var(--text-xl); font-weight: var(--weight-semibold); }
.rc .fl-sitemap-path { font-size: var(--text-sm); }

@media print { body.rc.report .rp-exec .rp-verdict { font-size: 22px; } }

/* ---- extra-typo-gpt: labels in sans, sentence case, no letter-spacing (A + B) ----
   Mono stays only for code and numbers: code blocks, key numbers, counts, identifiers (S1, P1, GA-1), step rings and
   the page path. Everything else that was a mono, uppercase, letter-spaced label is now a quiet sans label: 13 px,
   weight 500, muted, as the guide's UI label and table header. Drawings (board, network, 3D, report figures) unchanged. */
.rc .fl-eyebrow, .rc .rp-eyebrow, .rc .rp-sub, .rc .fl-board-name, .rc .fl-lamp, .rc .fl-sys, .rc .fl-view button, .rc .fl-ctl button,
.rc .who, .rc .fl-steps, .rc .fl-story .mv, .rc .fl-why .stop span, .rc .fl-why .stop em, .rc .fl-engine, .rc .fl-every, .rc .fl-every select,
.rc .fl-points small, .rc .fl-points .rec, .rc .fl-table thead th, .rc .fl-table .res, .rc .fl-rtable .res, .rc .fl-btn, .rc .fl-tabs button,
.rc .fl-sum, .rc .fl-tour-h, .rc .fl-verdict .stats, .rc .fl-verdict .live, .rc .fl-svg::after,
.rc .rp-meta dt, .rc .rp-pick, .rc .rp-chip b, .rc .rp-props li span, .rc .rp-cols h3, .rc .rp-exec > footer, .rc .rp-sec h3 span,
.rc .rp-witname, .rc .rp-legend, .rc .rp-fig figcaption b, .rc .fl-table td.mx, .rc .fl-sitemap h3 {
  font-family: var(--sans); text-transform: none; letter-spacing: 0;
}
.rc .rp-witname { font-family: var(--sans) !important; }
/* label size and weight: 13 / 500 (the eyebrow and section labels), buttons and tabs 14 / 500 */
.rc .fl-eyebrow, .rc .rp-eyebrow, .rc .rp-sub, .rc .fl-board-name, .rc .fl-lamp, .rc .fl-sum, .rc .fl-tour-h, .rc .fl-every,
.rc .fl-table thead th, .rc .rp-meta dt, .rc .rp-chip b, .rc .rp-cols h3, .rc .rp-witname, .rc .fl-sitemap h3, .rc .fl-steps {
  font-size: var(--text-caption); font-weight: var(--weight-medium);
}
.rc .rp-witname { font-size: var(--text-caption) !important; }
.rc .fl-btn, .rc .fl-tabs button, .rc .fl-view button, .rc .fl-ctl button, .rc .fl-sys, .rc .fl-every select { font-size: var(--text-sm); font-weight: var(--weight-medium); }
.rc .fl-btn.small { font-size: var(--text-caption); }
/* chips and small notes keep 12, in sans */
.rc .who { padding: 1px 8px; }
.rc .fl-steps b { font-weight: var(--weight-semibold); }
/* numbers stay mono and line up */
.rc .fl-verdict .stats, .rc .fl-sum, .rc .fl-engine { font-variant-numeric: tabular-nums; }
/* sentence case for labels written in lowercase in the data (the moves, a property's result) */
.rc .fl-story .mv::first-letter, .rc .rp-props li span::first-letter, .rc .fl-why .stop span::first-letter { text-transform: uppercase; }
