/* CV page: plain text on the page colour, one narrow column read top to bottom (ATS and copy-paste friendly).
   Colours and fonts are the site's, through tokens and the text roles in css/ds.css; no gradients, fills, radii or
   shadows, no icons or images. The markup is generated by scripts/build-cv.mjs from content/cv.json.
   @media print makes the PDF: the same markup on white paper. */
body {
  --content: min(var(--layout-content-width), 100% - 2 * var(--layout-margin));
  --col: calc((var(--content) - (var(--layout-columns) - 1) * var(--layout-gutter)) / var(--layout-columns));
  --text-width: calc(4 * var(--col) + 3 * var(--layout-gutter));
}
.cv-bar, .cv { width: var(--text-width); margin-inline: auto; }
.cv-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; column-gap: var(--gap-block); padding-block: var(--gap-group); }
.cv-bar__downloads { display: flex; flex-wrap: wrap; column-gap: var(--gap-block); margin: 0; padding: 0; list-style: none; }
.cv-link { display: inline-flex; align-items: center; min-height: var(--size-touch); color: var(--text-accent); text-decoration: underline; text-underline-offset: var(--gap-hair); }
.cv a { color: var(--text-accent); text-underline-offset: var(--gap-hair); }

.cv { padding-bottom: var(--layout-section-padding-y); }
.cv-intro { display: flex; flex-direction: column; gap: var(--gap-stack); padding-top: var(--layout-section-padding-y); }
.cv-intro__name { color: var(--text-body); }
.cv-intro__subtitle { color: var(--text-secondary); }
.cv-intro__line { color: var(--text-secondary); }

.cv-section { margin-top: var(--gap-section); padding-top: var(--gap-group); border-top: var(--border-1) solid var(--border-color-subtle); }
.cv-section__heading { color: var(--text-secondary); margin-bottom: var(--gap-block); }
.cv-summary { color: var(--text-body); }
.cv-line + .cv-line { margin-top: var(--gap-tight); }
.cv-line strong { font-weight: var(--type-strong-weight); color: var(--text-secondary); }

.cv-role + .cv-role { margin-top: var(--gap-block); }
.cv-role__title { color: var(--text-accent); }
.cv-role__dates { color: var(--text-secondary); margin-top: var(--gap-hair);  }
.cv-role--current .cv-role__dates { color: var(--text-accent); }
.cv-role__text { margin-top: var(--gap-stack); }
.cv-role__list { margin: var(--gap-stack) 0 0; padding-left: var(--inset-panel); }
.cv-role__list li + li { margin-top: var(--gap-tight); }
.cv-role__list li::marker { color: var(--text-secondary); }

/* Quiet reading cue: a role rests dimmed and comes to full strength as it crosses the middle of the screen. Only where
   scroll-driven animation exists and motion is allowed; otherwise (and in print) every role is at full strength. */
@keyframes cv-reading { 0%, 100% { opacity: var(--opacity-65); } 30%, 70% { opacity: 1; } }
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .cv-role:not(.cv-role--current) { animation: cv-reading linear both; animation-timeline: view(); } /* the current role stays at full strength: its small accent date would drop under 4.5:1 dimmed */
  }
}

@media (max-width: 780px) {
  .cv-intro { padding-top: var(--gap-section); }
  .cv-role__list { padding-left: var(--inset-card); }
}

/* ---------- print: the PDF ---------- */
@media print {
  /* @raw-ok:start layout: paper size, margins and scale of the PDF (A4, content scaled to fit two pages) */
  @page { size: A4; margin: 14mm 16mm; }
  .cv { zoom: 0.72; }
  /* @raw-ok:end */
  html, body { background: none; }
  .cv-bar { display: none; }
  .cv { width: 100%; padding-bottom: 0; }
  .cv, .cv *, .cv a, .cv .cv-line strong, .cv .cv-role--current .cv-role__dates, .cv .cv-role__list li::marker { color: var(--text-on-light); }
  .cv-role { animation: none; opacity: 1; break-inside: avoid; }
  .cv-role + .cv-role { margin-top: var(--gap-group); }
  .cv-intro { padding-top: 0; gap: var(--gap-hair); }
  .cv-section { margin-top: var(--gap-group); border-top-color: var(--text-on-light); }
  .cv-section__heading { margin-bottom: var(--gap-group); }
}
