/* ==========================================================================
   J. Acacio de Barros — site stylesheet
   Single stylesheet, no build step, no framework, no external requests.
   Section order: tokens, reset, typography, layout, header, footer,
   home, section pages, print.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Tokens
   Contrast against the cream background (WCAG 2.1, normal text needs 4.5:1):
     ink        #16263C  14.4:1   AAA
     ink-muted  #4A5A72   6.6:1   AA
     gold       #7C5F1C   5.6:1   AA
   gold-soft and rule are decorative only and never carry text.
   underline carries link underlines, which are non-text UI components and so
   need 3:1 (WCAG 1.4.11). gold-soft reached only 2.2:1, so underlines take
   their own token: same hue and saturation, lightness lowered until it clears
   3:1 on cream (3.2:1) and on cream-alt (3.0:1), the two surfaces links sit on.
   -------------------------------------------------------------------------- */
:root {
  --cream: #fbf8f2;
  --cream-alt: #f5f0e4;
  --ink: #16263c;
  --ink-muted: #4a5a72;
  --gold: #7c5f1c;
  --gold-soft: #c4a55a;
  --underline: #a78638;
  --rule: #e3daca;

  --font-serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua",
    Georgia, Cambria, "Times New Roman", serif;
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, "Noto Sans", sans-serif;

  /* Fluid type. The clamp middle term is rem-based so the scale still
     responds to the reader's browser font size. */
  --text-sm: 0.9375rem;
  --text-base: clamp(1rem, 0.97rem + 0.15vw, 1.0625rem);
  --text-lg: clamp(1.0625rem, 1rem + 0.3vw, 1.1875rem);
  --text-h3: clamp(1.125rem, 1.06rem + 0.3vw, 1.25rem);
  --text-h2: clamp(1.375rem, 1.22rem + 0.75vw, 1.75rem);
  /* The statement outranks the name at every width, not only at the top of the
     scale: on the home page the work should read louder than the byline. The
     statement's floor and slope are both set above the h1's so the two clamps
     never cross — they used to, and below about 800px the name won. */
  --text-h1: clamp(1.75rem, 1.45rem + 1.3vw, 2.25rem);
  --text-statement: clamp(1.875rem, 1.55rem + 1.6vw, 2.75rem);

  --measure: 34rem; /* ~66 characters at the base size */
  --measure-wide: 46rem; /* citations and research areas, which run longer */
  --wrap: 68rem;
  --gutter: clamp(1.25rem, 0.8rem + 2.2vw, 3rem);

  --space-2xs: 0.375rem;
  --space-xs: 0.75rem;
  --space-sm: 1.25rem;
  --space-md: 2rem;
  --space-lg: 3.25rem;
  --space-xl: clamp(3.5rem, 2.5rem + 4vw, 6rem);
}

/* --------------------------------------------------------------------------
   2. Reset
   -------------------------------------------------------------------------- */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
}

body,
h1,
h2,
h3,
h4,
p,
ul,
ol,
li,
figure,
blockquote,
dl,
dd {
  margin: 0;
  padding: 0;
}

/* Markers are removed from lists that are styled by a class and from every list
   inside a nav. Lists in prose keep their markers. */
ul[class],
ol[class],
nav ul,
nav ol {
  list-style: none;
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

/* --------------------------------------------------------------------------
   3. Base typography
   -------------------------------------------------------------------------- */
body {
  background-color: var(--cream);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: var(--text-base);
  line-height: 1.65;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

h1,
h2,
h3,
h4 {
  font-family: var(--font-serif);
  font-weight: 600;
  line-height: 1.18;
  text-wrap: balance;
  color: var(--ink);
}

h1 {
  font-size: var(--text-h1);
  letter-spacing: -0.01em;
}

h2 {
  font-size: var(--text-h2);
}

h3 {
  font-size: var(--text-h3);
  font-weight: 600;
}

h4 {
  font-size: var(--text-lg);
}

p {
  text-wrap: pretty;
}

a {
  color: inherit;
  text-decoration-color: var(--underline);
  text-decoration-thickness: 0.07em;
  text-underline-offset: 0.18em;
}

a:hover {
  color: var(--gold);
  text-decoration-color: currentColor;
}

/* Focus is never removed, only restyled. The ring is ink on cream (14.4:1),
   so it stays obvious over every surface the site uses. */
:focus-visible {
  outline: 2px solid var(--ink);
  outline-offset: 3px;
  border-radius: 1px;
}

::selection {
  background: var(--gold-soft);
  color: var(--ink);
}

/* --------------------------------------------------------------------------
   4. Layout
   -------------------------------------------------------------------------- */
.wrap {
  width: 100%;
  max-width: var(--wrap);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.site-main {
  flex: 1 0 auto;
  padding-block: var(--space-xl) var(--space-xl);
}

.prose {
  max-width: var(--measure);
}

.prose > * + * {
  margin-top: var(--space-sm);
}

.prose h2 {
  margin-top: var(--space-lg);
}

.prose h3 {
  margin-top: var(--space-md);
}

.prose ul:not([class]),
.prose ol:not([class]) {
  padding-left: 1.35em;
}

.prose li + li {
  margin-top: var(--space-2xs);
}

.skip-link {
  position: absolute;
  left: var(--gutter);
  top: 0;
  z-index: 10;
  transform: translateY(-120%);
  background: var(--ink);
  color: var(--cream);
  padding: 0.65rem 1.1rem;
  font-size: var(--text-sm);
  text-decoration: none;
  border-radius: 0 0 3px 3px;
}

.skip-link:focus {
  transform: translateY(0);
}

/* --------------------------------------------------------------------------
   5. Site header and primary navigation
   The nav is a plain wrapping row at every width — seven short labels fit in
   two or three lines on a phone, which avoids a disclosure widget and the
   JavaScript and focus management one would require.
   -------------------------------------------------------------------------- */
.site-header {
  border-bottom: 1px solid var(--rule);
  padding-block: var(--space-sm);
}

.site-header__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-xs) var(--space-md);
}

.site-id {
  font-family: var(--font-serif);
  font-size: var(--text-lg);
  font-weight: 600;
  letter-spacing: 0.005em;
  text-decoration: none;
  white-space: nowrap;
}

.site-id:hover {
  color: var(--gold);
}

.site-nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2xs) var(--space-sm);
}

.site-nav a {
  display: inline-block;
  font-size: var(--text-sm);
  letter-spacing: 0.02em;
  text-decoration: none;
  padding-block: 0.15rem;
  border-bottom: 2px solid transparent;
}

.site-nav a:hover {
  color: var(--gold);
  border-bottom-color: var(--gold-soft);
}

.site-nav a[aria-current="page"] {
  border-bottom-color: var(--gold);
  font-weight: 600;
}

/* --------------------------------------------------------------------------
   6. Footer
   -------------------------------------------------------------------------- */
.site-footer {
  flex-shrink: 0;
  border-top: 1px solid var(--rule);
  padding-block: var(--space-md);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

.site-footer__inner {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-xs) var(--space-md);
  justify-content: space-between;
}

.site-footer p {
  margin: 0;
}

/* --------------------------------------------------------------------------
   7. Home
   -------------------------------------------------------------------------- */
.intro {
  display: grid;
  gap: var(--space-lg);
  align-items: start;
}

/* Two columns from tablet up. Below this the portrait would otherwise strand
   itself under three paragraphs of text, a long way from the name it belongs to. */
@media (min-width: 46rem) {
  .intro {
    grid-template-columns: minmax(0, 1fr) 13rem;
  }
}

@media (min-width: 64rem) {
  .intro {
    grid-template-columns: minmax(0, 1fr) 17rem;
    gap: var(--space-xl);
  }
}

.intro__name {
  margin-bottom: var(--space-2xs);
}

.intro__role {
  font-size: var(--text-lg);
  color: var(--ink-muted);
}

/* The four-part statement is the page's visual anchor. It sits above a hairline
   rule rather than inside a box, to keep the page free of card furniture. */
.statement {
  font-family: var(--font-serif);
  font-size: var(--text-statement);
  line-height: 1.24;
  letter-spacing: -0.005em;
  text-wrap: balance;
  margin-top: var(--space-md);
  padding-top: var(--space-md);
  border-top: 2px solid var(--gold-soft);
  max-width: 30ch;
}

.intro__lede {
  max-width: var(--measure);
  margin-top: var(--space-md);
  font-size: var(--text-lg);
}

.intro__lede > * + * {
  margin-top: var(--space-sm);
}

/* Portrait: an ordinary photograph, deliberately small and second in the visual
   order. On narrow screens it drops below the text rather than sitting above it.
   No panel, no border, no shadow — the photograph carries its own edges, and the
   square keeps it from crowding the biography at any width. */
.portrait {
  max-width: 13rem;
  margin: 0;
}

/* From tablet up the grid column sets the size. */
@media (min-width: 46rem) {
  .portrait {
    max-width: 100%;
  }
}

.portrait img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  border-radius: 0.45rem;
}

/* Entry points to the main sections. Hairline rules, not cards. */
.entries {
  margin-top: var(--space-xl);
  padding-top: var(--space-md);
  border-top: 1px solid var(--rule);
}

.entries__heading {
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: var(--space-md);
}

.entry-list {
  display: grid;
  gap: var(--space-md) var(--space-lg);
}

@media (min-width: 40rem) {
  .entry-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.entry {
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
  max-width: 30rem;
}

.entry h3 {
  font-size: var(--text-h3);
  margin-bottom: var(--space-2xs);
}

.entry h3 a {
  text-decoration: none;
}

.entry h3 a::after {
  content: " \2192";
  color: var(--gold-soft);
  font-family: var(--font-sans);
}

.entry h3 a:hover::after {
  color: var(--gold);
}

.entry p {
  color: var(--ink-muted);
  font-size: var(--text-base);
}

/* --------------------------------------------------------------------------
   8. Section pages
   -------------------------------------------------------------------------- */
.page-header {
  max-width: var(--measure);
  margin-bottom: var(--space-lg);
}

.page-header__eyebrow {
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: var(--space-xs);
}

.page-header__lede {
  font-size: var(--text-lg);
  color: var(--ink-muted);
  margin-top: var(--space-sm);
  max-width: var(--measure);
}

/* A numbered set of research areas or similar — list semantics, no boxes. */
.stack {
  max-width: var(--measure);
  display: grid;
  gap: var(--space-md);
}

.stack > li {
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
}

.stack h3 {
  margin-bottom: var(--space-2xs);
}

/* Citation lists (Books, Publications). */
.citations {
  max-width: var(--measure);
  display: grid;
  gap: var(--space-md);
}

.citations > li {
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
}

.citations cite {
  font-style: normal;
  font-weight: 600;
}

.citation__meta {
  color: var(--ink-muted);
  font-size: var(--text-sm);
  margin-top: var(--space-2xs);
}

/* --------------------------------------------------------------------------
   8b. Publication and talk lists
   A citation needs more room than the 34rem prose measure: the venue line runs
   long and should not wrap five times. --measure-wide is used for these only.
   -------------------------------------------------------------------------- */
.section-nav {
  max-width: var(--measure-wide);
  margin-bottom: var(--space-lg);
  padding-block: var(--space-xs);
  border-block: 1px solid var(--rule);
}

.section-nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2xs) var(--space-sm);
}

.section-nav a {
  font-size: var(--text-sm);
  letter-spacing: 0.02em;
}

.pub-preamble {
  max-width: var(--measure);
  color: var(--ink-muted);
  margin-bottom: var(--space-lg);
}

.pub-section + .pub-section {
  margin-top: var(--space-xl);
}

.pub-section h2 {
  max-width: var(--measure-wide);
  padding-bottom: var(--space-xs);
  border-bottom: 2px solid var(--gold-soft);
}

.pub-section__note {
  max-width: var(--measure);
  margin-top: var(--space-sm);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

.pubs {
  max-width: var(--measure-wide);
  margin-top: var(--space-md);
  display: grid;
  gap: var(--space-md);
}

/* The year sits above the citation on a phone and moves into its own gutter
   from tablet up, where there is room for it without squeezing the citation
   below a readable measure. The gutter is sized to the longest unbreakable
   label it has to hold — "Forthcoming", not a four-digit year — so a status
   label can never collide with the citation beside it. */
.pubs > li {
  display: grid;
  gap: var(--space-2xs);
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
}

@media (min-width: 46rem) {
  .pubs > li {
    grid-template-columns: 6.5rem minmax(0, 1fr);
    column-gap: var(--space-sm);
  }
}

.pub__year {
  font-size: var(--text-sm);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--ink-muted);
  line-height: 1.7;
}

.pub__cite cite {
  font-style: normal;
  font-weight: 600;
}

.pub__note {
  margin-top: var(--space-2xs);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

/* Restrained link row: text links separated by hairline dividers, not buttons.
   The divider is generated, so it never lands before the first item. */
.pub__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2xs) var(--space-xs);
  margin-top: var(--space-2xs);
  font-size: var(--text-sm);
}

.pub__links li + li::before {
  content: "";
  display: inline-block;
  width: 1px;
  height: 0.85em;
  margin-right: var(--space-xs);
  vertical-align: -0.1em;
  background: var(--rule);
}

.pub__links a {
  font-weight: 600;
  text-decoration-color: var(--underline);
}

/* --------------------------------------------------------------------------
   8b-ii. Books
   A book is not a citation and is not set as one. Title, subtitle, byline and
   imprint each take their own line, so the book reads first and the
   bibliographic detail second. Same furniture as the rest of the site — a rule
   above each entry, no cards, no cover art.
   -------------------------------------------------------------------------- */
.books {
  max-width: var(--measure-wide);
  display: grid;
  gap: var(--space-xl);
}

.books > li {
  padding-top: var(--space-md);
  border-top: 2px solid var(--gold-soft);
}

/* Year or publication status. Gold on cream is 5.6:1, above the AA threshold,
   and this is the one place on the page where the eye should land first. */
.book__status {
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: var(--space-xs);
}

.book__title {
  max-width: var(--measure);
  margin-bottom: var(--space-2xs);
}

.book__subtitle {
  font-family: var(--font-serif);
  font-size: var(--text-lg);
  line-height: 1.3;
  color: var(--ink-muted);
  max-width: var(--measure);
  text-wrap: balance;
}

.book__byline {
  margin-top: var(--space-sm);
  max-width: var(--measure);
  font-weight: 600;
}

.book__imprint {
  max-width: var(--measure);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

.book__desc {
  max-width: var(--measure);
  margin-top: var(--space-sm);
}

.book__desc cite {
  font-style: italic;
}

.books .pub__links {
  margin-top: var(--space-sm);
}

/* --------------------------------------------------------------------------
   8c. Research areas
   -------------------------------------------------------------------------- */
.research-area + .research-area {
  margin-top: var(--space-xl);
}

.research-area h2 {
  max-width: var(--measure-wide);
  padding-bottom: var(--space-xs);
  border-bottom: 2px solid var(--gold-soft);
}

/* The one-sentence summary carries the weight of the old landing-page list, so
   it reads a step above the body text that follows it. */
.research-area__summary {
  max-width: var(--measure);
  margin-top: var(--space-sm);
  font-size: var(--text-lg);
  color: var(--ink-muted);
}

.research-area .prose {
  margin-top: var(--space-md);
}

.area-more {
  max-width: var(--measure);
  margin-top: var(--space-sm);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

.area-more a {
  font-weight: 600;
}

.area-more cite {
  font-style: normal;
}

/* --------------------------------------------------------------------------
   8e. Course lists (Teaching)
   Same shape as .pubs: an identifier in its own gutter from tablet up, stacked
   on a phone. The gutter is set by the longest code in use, "AMST/LS 200".
   Courses with no catalog code use .courses on its own, without the gutter, so
   nothing has to be invented to fill a column.
   -------------------------------------------------------------------------- */
/* Sub-headings and blocks placed directly inside a section rather than inside
   .prose. The reset zeroes heading margins, so their spacing is set here. */
.pub-section > h3 {
  max-width: var(--measure-wide);
  margin-top: var(--space-lg);
}

.pubs + .prose {
  margin-top: var(--space-lg);
}

.course-group {
  margin-top: var(--space-lg);
}

.course-group > h3 {
  max-width: var(--measure-wide);
  padding-bottom: var(--space-2xs);
  border-bottom: 1px solid var(--rule);
}

.courses {
  max-width: var(--measure-wide);
  margin-top: var(--space-md);
  display: grid;
  gap: var(--space-md);
}

.courses > li {
  display: grid;
  gap: var(--space-2xs);
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
}

@media (min-width: 46rem) {
  .courses--coded > li {
    grid-template-columns: 7.5rem minmax(0, 1fr);
    column-gap: var(--space-sm);
  }
}

.course__code {
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ink-muted);
  line-height: 1.7;
}

.courses h3,
.courses h4 {
  font-size: var(--text-h3);
  margin-bottom: var(--space-2xs);
}

/* Where a course has been renamed, the title it now carries sits directly under
   the title it was taught as, rather than being buried in the note below. */
.course__current-title {
  margin-bottom: var(--space-2xs);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

.course__current-title em {
  font-style: normal;
  font-weight: 600;
}

.course__desc {
  color: var(--ink-muted);
}

.course__note {
  margin-top: var(--space-2xs);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

/* A period label for a whole section of historical teaching. */
.section-period {
  max-width: var(--measure);
  margin-top: var(--space-sm);
  font-size: var(--text-lg);
  color: var(--ink-muted);
}

/* --------------------------------------------------------------------------
   8f. Epigraph
   A quotation carried over from the previous site. Deliberately quiet: it sits
   below the content it follows, at small size, and never above a heading.
   -------------------------------------------------------------------------- */
.epigraph {
  max-width: var(--measure);
  margin: var(--space-xl) 0 0;
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
}

.epigraph blockquote {
  font-family: var(--font-serif);
  font-size: var(--text-lg);
  font-style: italic;
  line-height: 1.4;
  color: var(--ink-muted);
}

.epigraph figcaption {
  margin-top: var(--space-2xs);
  font-size: var(--text-sm);
  letter-spacing: 0.02em;
  color: var(--ink-muted);
}

/* An honest marker that a section is not yet filled in. Not decorative —
   it tells a reader the absence is deliberate and temporary. */
.in-progress {
  max-width: var(--measure);
  margin-top: var(--space-lg);
  padding: var(--space-sm) var(--space-md);
  background: var(--cream-alt);
  border-left: 3px solid var(--gold-soft);
  font-size: var(--text-sm);
  color: var(--ink-muted);
}

.in-progress p + p {
  margin-top: var(--space-xs);
}

/* Inline call to a document or external resource. */
.doc-link {
  display: inline-block;
  margin-top: var(--space-sm);
  font-weight: 600;
}

.u-visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}



/* --------------------------------------------------------------------------
   8f. Curriculum vitae
   The HTML CV is the canonical record. These rules keep a long academic CV
   readable on screen while allowing the same page to print cleanly.
   -------------------------------------------------------------------------- */
.cv-header {
  max-width: var(--measure-wide);
}

.cv-contact {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2xs) var(--space-sm);
  margin-top: var(--space-sm);
  color: var(--ink-muted);
  font-size: var(--text-sm);
}

.cv-version {
  max-width: var(--measure);
  margin-top: var(--space-sm);
  color: var(--ink-muted);
  font-size: var(--text-sm);
}

.cv-section-nav {
  max-width: var(--wrap);
}

.cv-timeline,
.cv-simple-list {
  max-width: var(--measure-wide);
  margin-top: var(--space-md);
  display: grid;
  gap: var(--space-sm);
}

.cv-timeline > li,
.cv-simple-list > li {
  padding-top: var(--space-sm);
  border-top: 1px solid var(--rule);
}

.cv-timeline > li {
  display: grid;
  gap: var(--space-2xs);
}

@media (min-width: 46rem) {
  .cv-timeline > li {
    grid-template-columns: 8.75rem minmax(0, 1fr);
    column-gap: var(--space-sm);
  }
}

.cv-date {
  font-size: var(--text-sm);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--ink-muted);
}

.cv-item-title {
  font-weight: 600;
}

.cv-item-org,
.cv-item-note {
  color: var(--ink-muted);
}

.cv-item-note {
  margin-top: var(--space-2xs);
  font-size: var(--text-sm);
}

.cv-simple-list {
  counter-reset: cv-entry;
}

.cv-simple-list > li {
  counter-increment: cv-entry;
  position: relative;
  padding-left: 2.25rem;
}

.cv-simple-list > li::before {
  content: counter(cv-entry) ".";
  position: absolute;
  left: 0;
  top: var(--space-sm);
  width: 1.75rem;
  color: var(--ink-muted);
  font-size: var(--text-sm);
  font-variant-numeric: tabular-nums;
}

.cv-bullet-list {
  max-width: var(--measure-wide);
  margin-top: var(--space-sm);
  padding-left: 1.25rem;
}

.cv-bullet-list li + li {
  margin-top: var(--space-2xs);
}

/* --------------------------------------------------------------------------
   9. Motion and print
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

@page {
  size: letter;
  margin: 0.58in 0.62in 0.62in;
}

@media print {
  :root {
    --text-base: 9.5pt;
    --text-sm: 8.4pt;
    --text-lg: 10.5pt;
    --text-h3: 11pt;
    --text-h2: 13.5pt;
    --text-h1: 18pt;
    --space-2xs: 0.12in;
    --space-xs: 0.16in;
    --space-sm: 0.21in;
    --space-md: 0.3in;
    --space-lg: 0.4in;
    --space-xl: 0.48in;
  }

  body {
    display: block;
    background: #fff;
    color: #000;
    line-height: 1.4;
  }

  .site-header,
  .site-footer,
  .site-nav,
  .skip-link,
  .section-nav,
  .cv-version {
    display: none !important;
  }

  .site-main {
    padding: 0;
  }

  .wrap {
    max-width: none;
    padding: 0;
  }

  .page-header {
    margin-bottom: 0.3in;
  }

  .cv-contact {
    margin-top: 0.08in;
  }

  .pub-section + .pub-section {
    margin-top: 0.36in;
  }

  .pub-section h2 {
    padding-bottom: 0.08in;
  }

  .pubs,
  .cv-timeline,
  .cv-simple-list,
  .pub-section h2,
  .pub-section > h3 {
    max-width: none;
  }

  .pubs,
  .cv-timeline,
  .cv-simple-list {
    gap: 0.12in;
    margin-top: 0.16in;
  }

  .pubs > li,
  .cv-timeline > li,
  .cv-simple-list > li {
    break-inside: avoid;
    page-break-inside: avoid;
    padding-top: 0.1in;
  }

  .pubs > li {
    grid-template-columns: 0.72in minmax(0, 1fr);
    column-gap: 0.12in;
  }

  .cv-timeline > li {
    grid-template-columns: 1.08in minmax(0, 1fr);
    column-gap: 0.12in;
  }

  a {
    color: #000;
    text-decoration: none;
  }

  .pub__links {
    font-size: 8pt;
  }

  .prose a[href^="http"]::after {
    content: none;
  }
}


/* --------------------------------------------------------------------------
   10. Lean CV revision (August 2026)
   Screen remains consistent with the site; print returns to a compact,
   traditional academic-CV presentation closer to the pre-HTML document.
   -------------------------------------------------------------------------- */
.cv-position-title {
  line-height: 1.35;
}

.cv-position-org {
  margin-top: 0.05rem;
  color: var(--ink-muted);
}

@media print {
  @page {
    size: letter;
    margin: 0.48in 0.58in 0.52in;
  }

  .cv-page {
    font-family: Georgia, "Times New Roman", serif;
    font-size: 9.2pt;
    line-height: 1.22;
  }

  .cv-page .page-header {
    text-align: center;
    margin-bottom: 0.18in;
  }

  .cv-page .page-header__eyebrow {
    display: none;
  }

  .cv-page .page-header__lede {
    display: block;
    margin: 0.03in 0 0;
    font-size: 8.6pt;
    color: #000;
  }

  .cv-page .page-header h1 {
    margin: 0;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 19pt;
    font-variant: small-caps;
    font-weight: 700;
    letter-spacing: 0.01em;
  }

  .cv-page .cv-contact {
    justify-content: center;
    gap: 0.03in 0.18in;
    margin-top: 0.05in;
    padding-bottom: 0.07in;
    border-bottom: 1px solid #000;
    font-size: 8.3pt;
    color: #000;
  }

  .cv-page .pub-section + .pub-section {
    margin-top: 0.19in;
  }

  .cv-page .pub-section h2 {
    margin: 0 0 0.08in;
    padding: 0;
    border: 0;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 12.2pt;
    font-variant: small-caps;
    font-weight: 700;
    letter-spacing: 0;
  }

  .cv-page .pub-section > h3 {
    margin-top: 0.12in;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 10.2pt;
  }

  .cv-page .pubs,
  .cv-page .cv-timeline,
  .cv-page .cv-simple-list,
  .cv-page .cv-bullet-list {
    margin-top: 0.06in;
    gap: 0.035in;
  }

  .cv-page .pubs > li,
  .cv-page .cv-timeline > li,
  .cv-page .cv-simple-list > li {
    padding-top: 0;
    border-top: 0;
  }

  .cv-page .pubs > li,
  .cv-page .cv-timeline > li {
    grid-template-columns: 0.82in minmax(0, 1fr);
    column-gap: 0.10in;
  }

  .cv-page #positions .cv-timeline > li,
  .cv-page #education .cv-timeline > li,
  .cv-page #honors .cv-timeline > li {
    grid-template-columns: minmax(0, 1fr) 0.85in;
    column-gap: 0.10in;
  }

  .cv-page #positions .pub__year,
  .cv-page #education .pub__year,
  .cv-page #honors .pub__year {
    grid-column: 2;
    grid-row: 1;
    text-align: right;
    font-size: 9.2pt;
    color: #000;
    white-space: nowrap;
  }

  .cv-page #positions .pub__body,
  .cv-page #education .pub__body,
  .cv-page #honors .pub__body {
    grid-column: 1;
    grid-row: 1;
  }

  .cv-page .cv-position-title,
  .cv-page .cv-position-org {
    margin: 0;
    line-height: 1.18;
  }

  .cv-page .cv-position-org {
    margin-left: 0.12in;
    color: #000;
  }

  .cv-page .pub__year,
  .cv-page .pub__note,
  .cv-page .pub__links,
  .cv-page .cv-item-note {
    font-size: 8.3pt;
  }

  .cv-page .pub__cite,
  .cv-page .pub__note,
  .cv-page .pub__links {
    line-height: 1.22;
  }

  .cv-page .pub__note {
    margin-top: 0.02in;
    color: #000;
  }

  .cv-page .pub__links {
    margin-top: 0.02in;
  }

  .cv-page .cv-simple-list {
    counter-reset: cv-entry;
  }

  .cv-page .cv-simple-list > li {
    padding-left: 0.22in;
    line-height: 1.22;
  }

  .cv-page .cv-simple-list > li::before {
    top: 0;
    width: 0.18in;
    font-size: 8.3pt;
    color: #000;
  }

  .cv-page .cv-bullet-list li + li {
    margin-top: 0.02in;
  }

  .cv-page a {
    color: #000;
    text-decoration: none;
  }
}

@media print {
  @page { margin: 0.40in 0.54in 0.42in; }
  .cv-page { font-size: 8.9pt; line-height: 1.16; color: #000; }
  .cv-page .page-header h1,
  .cv-page .pub-section h2,
  .cv-page .pub-section > h3,
  .cv-page .pub__year { color: #000; }
  .cv-page .pub-section + .pub-section { margin-top: 0.15in; }
  .cv-page .pubs,
  .cv-page .cv-timeline,
  .cv-page .cv-simple-list,
  .cv-page .cv-bullet-list { gap: 0.022in; }
  .cv-page .pub__cite,
  .cv-page .pub__note,
  .cv-page .cv-simple-list > li { line-height: 1.16; }
  .cv-page .pub__links { display: none !important; }
}
