/* Layout for the academic CV page. Typography, color, and the shared
   entry patterns (.cv-row, .skills-row, .pub-self) come from styles.css;
   this sheet only adds the document-style structure and the CV print
   treatment used both for manual printing and for the generated cv.pdf.

   Hierarchy model: whitespace and typography separate entries; the only
   rule on the page is a single hairline attached beneath each section
   heading, so no rule can appear detached at the top of a PDF page.
   Every override of the shared homepage patterns is scoped to .cv-page
   so the homepage keeps its own separator treatment. */

.cv-container {
  width: min(100% - 2.75rem, 52rem);
}

.cv-page {
  padding-block: clamp(2.75rem, 6vw, 4.5rem) clamp(2rem, 5vw, 3.5rem);
}

.cv-eyebrow {
  margin-bottom: 1.1rem;
}

.cv-name {
  font-size: clamp(2.2rem, 5vw, 3.2rem);
  letter-spacing: -0.02em;
}

.cv-role-line {
  margin-top: 0.9rem;
  color: var(--ink-soft);
  max-width: var(--measure);
}

.cv-contact {
  font-style: normal;
  margin-top: 0.8rem;
}

.cv-contact-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0 1.6rem;
  padding: 0;
  margin: 0;
  list-style: none;
}

.cv-contact-list a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-family: var(--font-sans);
  font-size: 0.875rem;
}

.cv-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.35rem 1.5rem;
  margin-top: 0.9rem;
}

.cv-actions-note {
  max-width: 34rem;
}

.cv-updated {
  margin-top: 0.7rem;
}

.cv-section {
  margin-top: 2.6rem;
}

.cv-section-title {
  padding-bottom: 0.45rem;
  border-bottom: 1px solid var(--line);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
}

.cv-section-body {
  margin-top: 1.1rem;
}

.cv-profile-text {
  color: var(--ink-soft);
  max-width: var(--measure);
}

/* Entries separate with whitespace alone on this page; the homepage
   keeps its hairline separators between shared .cv-row items. */
.cv-page .cv-row + .cv-row,
.cv-page .skills-row + .skills-row {
  border-top: 0;
}

.cv-page .cv-row {
  grid-template-columns: minmax(0, 8.5rem) minmax(0, 1fr);
  gap: 0.4rem 2.25rem;
  padding-block: 0.85rem;
}

.cv-page .cv-row h3 {
  font-size: 1.125rem;
}

/* Skills set as run-in lines on the main content axis (date rail plus
   gap), so labels such as "Research practice" never wrap in a narrow
   label column. */
.cv-page .skills-row {
  display: block;
  padding-block: 0.45rem;
  padding-left: 10.75rem;
}

.cv-page .skills-row dt {
  display: inline;
  padding-top: 0;
  margin-right: 0.75em;
}

.cv-page .skills-row dd {
  display: inline;
  margin: 0;
  color: var(--ink-soft);
}

.cv-pub-authors {
  color: var(--ink-soft);
}

.cv-pub-title {
  display: block;
  margin-top: 0.25rem;
  font-size: 1.0625rem;
  font-style: normal;
  font-weight: 700;
  line-height: 1.35;
  max-width: var(--measure);
}

/* This stylesheet loads only from cv.html, so these rules reach the shared
   footer on the CV alone. The footer is sized for the homepage's generous
   scale, where section headings are 2rem. On the CV it lands under a
   document whose own section headings are 0.8125rem, so at its stock size
   the word "Contact" outweighs every heading on the page except the name.
   Bring it to the CV's proportions without restyling the component. */
.site-footer .footer-grid h2 {
  font-size: clamp(1.25rem, 2vw, 1.5rem);
}

.site-footer .footer-email {
  margin-top: 0.9rem;
  font-size: 1.0625rem;
}

@media (max-width: 700px) {
  .cv-page .cv-row {
    grid-template-columns: minmax(0, 1fr);
  }

  .cv-page .skills-row {
    padding-left: 0;
  }
}

@media (forced-colors: active) {
  .cv-section-title {
    border-color: CanvasText;
  }
}

@media print {
  /* The CV document carries its own contact block, so the site chrome and
     interactive controls are omitted from print entirely. */
  .masthead,
  .site-footer,
  .cv-actions {
    display: none !important;
  }

  body {
    font-size: 10pt;
    line-height: 1.3;
  }

  /* Links keep their accent color as the affordance on paper and in the
     PDF; underlines and appended URLs would only clutter the header, and
     the PDF preserves the targets as live link annotations. */
  .cv-page a {
    text-decoration: none;
  }

  .cv-page {
    padding-block: 0.4rem 0;
  }

  .cv-container {
    width: 100%;
  }

  .cv-name {
    font-size: 20pt;
  }

  .cv-eyebrow {
    margin-bottom: 0.3rem;
  }

  .cv-role-line,
  .cv-contact,
  .cv-updated {
    margin-top: 0.28rem;
  }

  .cv-section {
    margin-top: 0.5rem;
  }

  .cv-section-title {
    padding-bottom: 0.2rem;
    font-size: 9pt;
    break-after: avoid;
  }

  .cv-section-body {
    margin-top: 0.3rem;
  }

  .cv-header,
  .cv-page .cv-row,
  .cv-page .skills-row {
    break-inside: avoid;
  }

  /* Print keeps the classic two-column CV layout (dates in a narrow left
     rail) even though the paper content width is below the screen
     breakpoint that stacks these rows. The rail stays narrow so the
     substantive content sits on one balanced main-column axis. */
  .cv-page .cv-row {
    grid-template-columns: 0.95in minmax(0, 1fr);
    gap: 0.1rem 0.22in;
    padding-block: 0.17rem;
  }

  .cv-when {
    padding-top: 0.16rem;
    font-size: 8.5pt;
    font-variant-numeric: tabular-nums;
  }

  .cv-page .cv-row h3,
  .cv-pub-title {
    font-size: 10.5pt;
  }

  .cv-page .cv-row ul {
    margin-top: 0.15rem;
  }

  .cv-page .cv-row ul li + li {
    margin-top: 0.2rem;
  }

  .cv-pub-title {
    margin-top: 0.1rem;
  }

  .cv-note,
  .cv-role {
    margin-top: 0.1rem;
  }

  /* The skills run-in lines share the entries' content axis: the print
     rail (0.95in) plus the rail gap (0.22in). */
  .cv-page .skills-row {
    padding-block: 0.08rem;
    padding-left: 1.17in;
  }

  .cv-contact-list {
    gap: 0 1.1rem;
  }

  .cv-contact-list a {
    min-height: 0;
  }
}
