/* ==========================================================================
   xutianur.com  |  Xu Tian, Terry College of Business, University of Georgia
   Faculty-profile design: clean white header (no top strip), pale info
   band with hairline-divided columns, numbered section sidebar, diamond
   bullets. Type system modeled on MIT Sloan (Futura LT + Adelle) using
   their free equivalents: Jost for headings/UI, Bitter (slab) for body
   text.

   COLOR SYSTEM — each colour has one job:
     --navy   #0a2f5c  identity + primary links at rest: hero kicker, hero
                       name, affiliation links, paper titles, Teaching heads.
     --accent #0065a9  interaction + status: hover state for navy links, paper
                       status lines, abstract toggles, diamond bullets, and the
                       hero link row (CV/SSRN/Scholar/Profile) — that row stays
                       accent on purpose as the hero's one bright focal accent.
     --ink    #16191d  structural headings: page titles, section heads.
     --accent2 #ba0c2f UGA red — active top-nav only; never used in page body.
   ========================================================================== */

:root {
  --paper: #ffffff;
  --ink: #16191d;
  --body: #262a2f;
  --muted: #5c6167;
  --accent: #0065a9;   /* interaction + status — hovers, status lines, hero link row */
  --navy: #0a2f5c;     /* identity + links at rest — hero, paper titles, Teaching heads */
  --accent2: #ba0c2f;  /* secondary accent (UGA red) — diamond bullets & paper status */
  --accent-soft: color-mix(in srgb, var(--accent) 35%, transparent);
  --band: #f0f4f5;
  --band-rule: #d3dbde;
  --rule: #d9dde0;
  --serif: "Bitter", "Rockwell", Georgia, serif;
  --sans: "Jost", "Futura", "Century Gothic", -apple-system, BlinkMacSystemFont, sans-serif;
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { transition: none !important; }
}

body {
  margin: 0;
  background: var(--paper);
  color: var(--body);
  font-family: var(--serif);
  font-size: 16.5px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.wrap {
  max-width: 1140px;
  margin: 0 auto;
  padding: 0 28px;
}

/* --- Accessibility ------------------------------------------------------ */

.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--ink);
  color: #fff;
  padding: 8px 14px;
  font-family: var(--sans);
  font-size: 13px;
  z-index: 10;
}
.skip-link:focus { left: 12px; top: 12px; }

a:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* --- Header ------------------------------------------------------------- */

.site-header {
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
}

.header-bar {
  max-width: 1140px;
  margin: 0 auto;
  padding: 16px 28px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px 28px;
}

.brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 3px;
  text-decoration: none;
}
.brand-name {
  font-family: var(--sans);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  line-height: 1;
  color: var(--ink);
}
.brand-affil {
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
}
.brand:hover .brand-name { color: var(--accent); }

.header-right {
  display: flex;
  align-items: center;
  gap: 14px 28px;
}

.site-nav {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 26px;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}
.site-nav a {
  color: var(--ink);
  text-decoration: none;
  padding: 6px 0;
  border-bottom: 2px solid transparent;
  transition: color 0.15s ease, border-color 0.15s ease;
}
.site-nav a:hover { color: var(--accent2); }
.site-nav a[aria-current="page"] {
  color: var(--accent2);
  border-bottom-color: var(--accent2);
}

.header-logo-link {
  display: inline-flex;
  line-height: 0;
  border-radius: 3px;
  transition: opacity 0.15s ease;
}
.header-logo-link:hover { opacity: 0.8; }
.header-logo-link:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

.header-logo {
  display: block;
  height: 40px;
  width: auto;
}

/* --- Home hero ------------------------------------------------------------ */

.hero-body { background: var(--band); }

.hero-grid {
  max-width: 1140px;
  margin: 0 auto;
  padding: 44px 28px 48px;
  display: flex;
  align-items: center;
  gap: 52px;
}

.portrait-wrap {
  width: 280px;
  overflow: hidden;
  background: var(--paper);
  flex-shrink: 0;
}
.portrait-wrap img {
  display: block;
  width: 100%;
  height: auto;
}

.hero-text {
  padding: 0;
  max-width: 100%;
  min-width: 0;
}

.kicker {
  margin: 0;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--navy);
}

.hero-name {
  margin: 8px 0 0;
  font-family: var(--sans);
  font-size: 50px;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  line-height: 1.05;
  color: var(--ink);
}

.hero-affil { margin: 10px 0 0; font-size: 18px; }
.hero-affil a {
  color: var(--body);
  text-decoration: none;
  border-bottom: 1px solid var(--rule);
}
.hero-affil a:hover { color: var(--accent); border-bottom-color: var(--accent); }

.hero-links {
  margin: 20px 0 0;
  font-family: var(--sans);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
/* Hero link row (CV / SSRN / Scholar / Profile) is deliberately --accent, not --navy:
   it is the hero's one bright focal accent against the navy identity block above it.
   Scoped under .content so it beats the generic `.content a` rule rather than relying
   on source order. */
.content .hero-links a,
.hero-links a {
  color: var(--accent);
  text-decoration: none;
  border-bottom: 1px solid var(--accent-soft);
  padding-bottom: 2px;
  transition: color 0.15s ease, border-color 0.15s ease;
  white-space: nowrap;
}
.content .hero-links a:hover,
.hero-links a:hover { border-bottom-color: var(--accent); }
/* 6px (not 12px) so the glyphs below don't push the row past the bio's right edge. */
.hero-links .sep { color: #c2cbcd; margin: 0 6px; }

/* Link glyphs — all inherit link colour, so they tint on hover with the text.
   .dl-ic  download-to-tray, CV page
   .doc-ic document, home hero "Curriculum Vitae"
   .ext-ic external arrow, home hero outbound links (trailing) */
.dl-ic,
.doc-ic,
.ext-ic {
  stroke: currentColor;
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.dl-ic {
  width: 14px;
  height: 14px;
  vertical-align: -1px;
  margin-right: 6px;
}
.doc-ic {
  width: 11px;
  height: 11px;
  vertical-align: -1px;
  margin-left: 4px;   /* trailing, like .ext-ic */
}
.ext-ic {
  width: 9px;
  height: 9px;
  vertical-align: 0;
  margin-left: 3px;
}

/* Home hero — navy name + affiliation */
.hero-text .hero-name { color: var(--navy); }
.hero-text .hero-affil a { color: var(--navy); transition: color 0.15s ease, border-color 0.15s ease; }
.hero-text .hero-affil a:hover { color: var(--accent); border-bottom-color: var(--accent); }

.hero-interests {
  margin: 16px 0 0;
  font-size: 16px;
  text-align: justify;
}
/* "Research Interests" is set as a label rather than inline bold prose: it
   matches the .info-label convention used on the home page, and de-emphasising
   it stops the word "Research" competing with the page title above. */
.hero-interests strong {
  display: block;
  margin-bottom: 6px;
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
}

/* --- Info band (home) ------------------------------------------------------ */

.info-band { background: var(--band); }

/* First column matches the portrait width so the two bands share one
   grid: address sits under the photo, interests align with the name. */
.info-grid {
  max-width: 1140px;
  margin: 0 auto;
  padding: 0 28px 48px;
  display: grid;
  grid-template-columns: 280px minmax(0, 1fr);
  gap: 52px;
}

.info-inner-rule {
  max-width: 1084px;
  margin: 0 auto;
  border-top: 1px solid var(--band-rule);
}

.info-col { padding: 30px 0 0; }
.info-col + .info-col { position: relative; }
.info-col + .info-col::before {
  content: "";
  position: absolute;
  left: -26px;
  top: 30px;
  bottom: 0;
  width: 1px;
  background: var(--band-rule);
}

.info-label {
  margin: 0 0 14px;
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
}

.info-col address {
  font-style: normal;
  margin: 0;
  font-size: 16.5px;
  line-height: 1.75;
}
.info-col a { color: var(--accent); text-decoration: none; border-bottom: 1px solid var(--accent-soft); }
.info-col a:hover { border-bottom-color: var(--accent); }

/* Contact block: line icons beside the address / email (MIT Sloan style) */
.contact-row { display: flex; gap: 12px; }
.contact-row + .contact-row { margin-top: 16px; }
.contact-ic { flex-shrink: 0; color: var(--muted); transition: color 0.15s ease; }
.contact-ic svg {
  width: 16px;
  height: 16px;
  display: block;
  /* center the 16px icon on the 16.5px/1.75 first text line */
  margin-top: calc((1.75em - 16px) / 2);
}
/* Address is an implicit map link. On hover only the icon tints — the address
   text never changes colour, so six lines don't repaint at once.
   Two selectors are needed because the two rows nest differently:
     address row — the <a> IS the row, and the icon is its child;
     email row   — the <a> is inside the row, the icon is its sibling. */
.info-col a.addr-link { color: var(--body); border-bottom: 0; }
.info-col a.addr-link:hover { color: var(--body); }
.info-col a.addr-link:hover .contact-ic,
.contact-row:has(a:hover) .contact-ic { color: var(--accent); }

.diamond-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.diamond-list li {
  position: relative;
  padding: 5px 0 5px 21px;
  font-size: 16.5px;
}
.diamond-list li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 14px;
  width: 7px;
  height: 7px;
  background: var(--accent);
  transform: rotate(45deg);
}

/* --- Main content ------------------------------------------------------- */

main { flex: 1 0 auto; }

.content a {
  color: var(--accent);
  text-decoration: none;
  border-bottom: 1px solid var(--accent-soft);
  transition: border-color 0.15s ease;
}
.content a:hover { border-bottom-color: var(--accent); }

.about { padding: 54px 0 8px; }
/* 920px puts the justified right edge at ~1098, level with the hero link row
   above it — the alignment the glyph sizes above are tuned to preserve. */
.about .section-head,
.about p { max-width: 920px; }
.about p {
  margin: 0 0 18px;
  text-align: justify;
}

.section-head {
  margin: 0 0 20px;
  font-family: var(--sans);
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: var(--ink);
  padding-bottom: 12px;
  border-bottom: 1px solid var(--rule);
}
/* Teaching page: institution headings in accent blue, slightly smaller */
/* Teaching headings keep the site-standard 22px; only the colour differs. */
.teaching-sections .section-head { color: var(--navy); }

/* Courses run on one line, wrapping only when the column runs out of room. */
.teaching-sections .diamond-list {
  display: flex;
  flex-wrap: wrap;
  column-gap: 30px;
}

/* The heading (and its rule) spans the full column width; courses and the
   logo watermark sit side by side beneath it. */
.page-main.teaching-sections section + section { margin-top: 84px; }
.inst-row { display: flex; align-items: center; gap: 24px; }
.inst-row .diamond-list { flex: 1; min-width: 0; }
.inst-logo {
  flex-shrink: 0;
  width: 100px;
  height: 100px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
/* Logo link duplicates the institution-name link, so it is hidden from assistive
   tech and taken out of the tab order; it exists for mouse users only. */
.content .inst-logo-link {
  display: block;
  line-height: 0;
  border-bottom: 0;
}
.inst-logo img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  display: block;
  opacity: 0.55;
  transition: opacity 0.15s ease;
}
.inst-logo-link:hover img { opacity: 1; }
/* Institution name follows the site link grammar: navy at rest, accent on hover. */
.content .teaching-sections a.inst-name {
  color: var(--navy);
  text-decoration: none;
  border-bottom: 1px solid color-mix(in srgb, var(--navy) 30%, transparent);
  transition: color 0.15s ease, border-color 0.15s ease;
}
.content .teaching-sections a.inst-name:hover {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

.sub-label {
  margin: 30px 0 6px;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
}

/* --- Inner-page hero ------------------------------------------------------ */

.page-hero {
  background: var(--band);
  border-bottom: 1px solid var(--rule);
  padding: 44px 0 40px;
}
.page-hero .kicker { margin: 0; }

.page-name {
  margin: 8px 0 0;
  font-family: var(--sans);
  font-size: 36px;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.05;
  color: var(--ink);
}

.page-hero .hero-links { margin: 20px 0 0; padding-bottom: 0; }

/* --- Numbered section sidebar --------------------------------------------- */

.page-grid {
  display: grid;
  grid-template-columns: 210px minmax(0, 1fr);
  gap: 64px;
  align-items: start;
  margin-top: 46px;
}

.side-nav {
  position: sticky;
  top: 24px;
  font-family: var(--sans);
}
.side-nav a {
  display: block;
  padding: 13px 0;
  border-top: 1px solid var(--rule);
  color: var(--ink);
  text-decoration: none;
  font-size: 15px;
  font-weight: 500;
  line-height: 1.35;
  transition: color 0.15s ease;
}
.side-nav a:last-child { border-bottom: 1px solid var(--rule); }
.side-nav a:hover { color: var(--accent); }
.side-nav .num {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--accent);
  margin-bottom: 3px;
}

/* min-width:0 because a grid item defaults to min-width:auto and would refuse to
   shrink below its content — which lets the scrollable BibTeX block push the
   whole column wider instead of scrolling inside itself. */
.page-main { padding-bottom: 8px; min-width: 0; }
.page-main section + section { margin-top: 56px; }
.page-main section[id] { scroll-margin-top: 20px; }

/* --- Research ----------------------------------------------------------- */

/* "Expand all" control, injected by script into each section heading that has
   collapsible abstracts. Floated so the heading itself needs no layout change. */
.exp-all {
  float: right;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 20px;
  padding: 3px 0;
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--accent);
  background: none;
  border: 0;
  cursor: pointer;
  transition: color 0.15s ease;
}
.exp-all svg {
  width: 13px;
  height: 13px;
  stroke: currentColor;
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.exp-all:hover { color: var(--navy); }
.exp-all:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

.paper { margin: 0 0 54px; }
.paper:last-child { margin-bottom: 8px; }

.paper h3 {
  margin: 0 0 5px;
  font-family: var(--sans);
  font-size: 18px;
  font-weight: 600;
  line-height: 1.4;
  text-wrap: balance;
}
.paper h3 a {
  color: var(--navy);
  text-decoration: none;
  border-bottom: 1px solid color-mix(in srgb, var(--navy) 30%, transparent);
  transition: color 0.15s ease, border-color 0.15s ease;
}
.paper h3 a:hover { color: var(--accent); border-bottom-color: var(--accent); }

.authors { margin: 0; font-size: 16.5px; }

.status {
  margin: 3px 0 0;
  font-style: italic;
  color: var(--accent);
}
.status strong { font-weight: 600; }

/* Page ranges must not break at their hyphen — "4474-/4517" across two lines
   reads as two numbers rather than a range. */
.nb { white-space: nowrap; }

/* Ungated SSRN link, sharing a row with the abstract disclosure on published
   papers. Two reasons it lives here rather than on the journal line: "Abstract"
   is a fixed-width label, so the link lands at the same x on every paper, and
   the citation line stays purely bibliographic (it no longer wraps on a phone).
   Absolutely positioned rather than laid out in a flex row because an open
   <details> grows to fill the row and shoves a flex sibling to the far right. */
/* 15px, not 10: the row above (area tags) is a hard border, and the ABSTRACT
   label has zero half-leading because its line-height is collapsed to 1 for the
   SSRN baseline alignment. A 10px margin therefore reads ~5px tighter than the
   nominally identical 10px between the journal line and the tags, which carries
   5.36px of invisible leading. Stated as margin so alignment is unaffected. */
.paper-actions { position: relative; margin: 15px 0 0; }
/* The summary is a 12px inline-flex box sitting in a line box whose strut comes
   from <details>, which inherits the 16.5px body size. That strut pushes
   ABSTRACT down while the absolutely-positioned link starts at the true top, so
   the two glyph rows disagree by ~4px. Matching the strut to the summary's own
   size lands them on the same baseline. .abstract and .keywords both set their
   own font-size, so neither is affected. */
/* .paper-actions is declared before `.paper details`, which sets a 10px top
   margin at equal specificity and would otherwise win. The extra class raises
   specificity so both disclosures in this row really do sit flush. */
.paper .paper-actions details { margin: 0; font-size: 12px; line-height: 1; }
.act-link {
  position: absolute;
  top: 0;
  left: 123px;      /* see the optical note on .act-link .ext-ic below */
  line-height: 1;   /* matches the collapsed strut above, so the two sit level */
  font-family: var(--sans);
  font-style: normal;
  font-size: 12px;
  font-weight: 600;
  /* 0.1em, deliberately tighter than the 0.14em ABSTRACT/BIBTEX summaries either
     side of it. Unifying at 0.14em was tried and rejected: the links are longer
     strings than the toggles, and at matched tracking they sprawl and stop
     reading as a distinct kind of thing. The tighter set keeps them compact. */
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
/* Hairline divider: marks ABSTRACT (acts on the page) and SSRN (leaves it) as
   two zones, so the matching type does not read as a pair of toggles. The
   trailing .ext-ic arrow carries the same message. */
.act-link::before {
  content: "";
  position: absolute;
  left: -14px;
  top: 1px;         /* centres an 11px rule on the 13px link box */
  height: 11px;
  border-left: 1px solid var(--rule);
}

/* BibTeX disclosure, third item in the row. Only the <summary> is lifted out of
   flow and pinned beside SSRN; the <details> itself stays in normal flow so the
   expanded <pre> pushes the page down instead of overlapping what follows.
   It keeps the same triangle marker as Abstract, which is correct — both are
   disclosures, while SSRN is a link and is marked with an arrow instead. */
.paper .paper-actions details.bib { position: static; margin: 0; font-size: 12px; line-height: 1; }
.paper-actions details.bib > summary { position: absolute; top: 0; left: 200px; }
.paper-actions details.bib > summary::after {
  content: "";
  position: absolute;
  left: -15px;
  top: 1px;
  height: 11px;
  border-left: 1px solid var(--rule);
}
/* Optical, not geometric: with equal measured gaps the row still read as though
   SSRN sat closer to ABSTRACT, because the trailing arrow is light ink and the
   eye takes SSRN's edge to be the "N". Tucking the arrow in (3px -> 1px) keeps
   it reading as part of the word, and SSRN moves 4px right to compensate.
   Scoped to .act-link so the hero links keep their own spacing. */
.act-link .ext-ic { margin-left: 1px; }

.bibtex {
  margin: 14px 0 0;
  padding: 12px 14px;
  background: var(--band);
  border-left: 2px solid var(--accent-soft);
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
  font-size: 12px;
  line-height: 1.65;
  color: var(--ink);
  /* pre-wrap, not pre: newlines are still preserved so the entry copies out
     verbatim, but long lines wrap instead of demanding a sideways scroller.
     The earlier `pre` + overflow-x:auto made a horizontally scrollable box
     inside the page, which iOS answers by zooming the whole document out.
     overflow-wrap:anywhere drops min-content to about one character, so a long
     author list can never widen the column no matter how narrow the screen. */
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  -webkit-text-size-adjust: 100%;
}

.confs {
  margin: 9px 0 0;
  font-family: var(--sans);
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--muted);
}
/* Same treatment as .kw-label inside the abstract: both are labelled lists, so
   the signpost recedes to a small letterspaced cap and the content carries the
   line. No colon, matching KEYWORDS and RESEARCH INTERESTS. */
.conf-label {
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-right: 9px;
}

.coverage { margin: 9px 0 0; font-size: 15px; }

.areas {
  margin: 10px 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.area-tag {
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
  border: 1px solid var(--band-rule);
  border-radius: 3px;
  padding: 2px 8px;
}

.paper details { margin: 10px 0 0; }

.paper summary {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  list-style: none;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent);
  transition: color 0.15s ease;
}
.paper summary::-webkit-details-marker { display: none; }
.paper summary::before {
  content: "";
  width: 0;
  height: 0;
  border-left: 5px solid currentColor;
  border-top: 4px solid transparent;
  border-bottom: 4px solid transparent;
  transition: transform 0.15s ease;
}
.paper details[open] summary::before { transform: rotate(90deg); }
.paper summary:hover { color: color-mix(in srgb, var(--accent) 72%, #000); }

.abstract {
  margin: 12px 0 0;
  padding: 1px 0 1px 20px;
  border-left: 2px solid var(--accent-soft);
  /* one step below body (16.5) and one above keywords (14.5) */
  font-size: 15px;
  /* 1.65, tightened from 1.75: saves roughly a line of depth per abstract while
     still giving justified Bitter the leading its x-height needs. 1.5 was tried
     and reads packed in paragraphs this long. */
  line-height: 1.65;
  text-align: justify;
}

.keywords {
  margin: 0;
  padding: 10px 0 1px 20px;
  border-left: 2px solid var(--accent-soft);
  /* stated rather than inherited: .paper-actions collapses its line-height to
     align the SSRN link, and keywords must not inherit that */
  line-height: 1.65;
  font-size: 14.5px;
  font-style: italic;
  color: var(--muted);
}
.kw-label {
  font-family: var(--sans);
  font-style: normal;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-right: 9px;
}

/* --- CV ------------------------------------------------------------------ */

.cv-frame {
  width: 100%;
  height: 82vh;
  margin-top: 40px;
  border: 1px solid var(--rule);
}

/* --- Footer -------------------------------------------------------------- */

.site-footer {
  margin-top: 72px;
  /* UGA Arch photo behind a dark-navy overlay */
  background-image:
    linear-gradient(rgba(4, 24, 50, 0.89), rgba(4, 24, 50, 0.94)),
    url("../images/arch.jpg");
  background-size: cover;
  background-position: center 38%;
  color: #dbe4ee;
}

.footer-inner {
  max-width: 1140px;
  margin: 0 auto;
  padding: 52px 28px;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px 20px;
}
.footer-inner a { color: inherit; }
.footer-credit {
  font-size: 10px;
  letter-spacing: 0.03em;
  text-transform: none;
  opacity: 0.78;
}

/* --- Responsive ----------------------------------------------------------- */

@media (max-width: 900px) {
  .info-grid { grid-template-columns: 1fr; gap: 0; }
  .info-col { padding: 26px 0 0; }
  .info-col + .info-col {
    margin-top: 26px;
    border-top: 1px solid var(--band-rule);
  }
  .info-col + .info-col::before { display: none; }
  /* minmax(0,1fr), not 1fr: a bare 1fr floors at min-content, so one long
     unbreakable line (a BibTeX author list) widens the track, the document
     scrolls sideways, and iOS answers by zooming the whole page out. */
  .page-grid { grid-template-columns: minmax(0, 1fr); gap: 36px; }
  .side-nav {
    position: static;
    display: flex;
    flex-wrap: wrap;
    gap: 0 28px;
    border-bottom: 1px solid var(--rule);
  }
  .side-nav a { border-top: 0; border-bottom: 0; padding: 10px 0; }
  .side-nav a:last-child { border-bottom: 0; }
  .side-nav .num { display: inline; margin-right: 6px; }
}

@media (max-width: 720px) {
  /* Tighter type + rhythm so more content fits a phone screen. Conferences
     (11px) and area tags (9px) are deliberately NOT shrunk further — they are
     already at the smallest comfortable size. */
  body { font-size: 13.5px; line-height: 1.45; }
  .brand-affil { display: none; }
  .header-bar { padding: 12px 20px; }
  /* Nav + logo become direct flex items of the bar: the logo sits
     top-right beside the name, and the nav drops to its own full-width
     row below. */
  .header-right { display: contents; }
  .brand { order: 1; }
  .header-logo-link { order: 2; }
  .site-nav { order: 3; flex-basis: 100%; gap: 4px 20px; }
  .header-logo { height: 32px; }
  /* Bio and abstracts stay justified on phones: at the reduced mobile sizes a
     334px column fits ~50-57 characters, enough for justification to set
     cleanly. The research-interests line is excluded — it is a comma list of
     long proper nouns, so it has too few break points and gaps open up. */
  .about p { text-align: justify; }
  .hero-interests { text-align: left; }
  .hero-grid {
    flex-direction: column;
    align-items: stretch;
    text-align: left;
    gap: 0;
    padding: 30px 24px 36px;
  }
  .portrait-wrap { width: 100%; }
  .hero-text { width: 100%; padding: 18px 0 0; }
  .hero-name { font-size: 30px; }
  .hero-affil { font-size: 12.5px; }
  /* Profile links as a 2x2 grid with the pipes aligned in a middle column.
     The middle separator drops out so 4 links + 2 pipes form two clean rows. */
  .hero-text .hero-links {
    display: grid;
    grid-template-columns: auto auto auto;
    justify-content: start;
    column-gap: 10px;
    row-gap: 10px;
    font-size: 11.5px;
  }
  .hero-text .hero-links .sep { margin: 0; }
  .hero-text .hero-links .sep-mid { display: none; }
  /* Inner-page hero link row (SSRN | Scholar | Official Profile): sized and
     tracked down so all three fit one line at 390px instead of wrapping.
     Scoped to .page-hero so the home hero's 2x2 grid above is untouched. */
  .page-hero .hero-links { font-size: 11.5px; letter-spacing: 0.06em; }
  .page-hero .hero-links .sep { margin: 0 5px; }
  .hero-name { font-size: 24px; }
  .page-name { font-size: 23px; }
  .section-head { font-size: 17px; padding-bottom: 7px; margin-bottom: 12px; }
  .side-nav a { font-size: 13px; }
  .cv-frame { height: 70vh; }
  /* Teaching: logo drops below the courses instead of squeezing them. */
  .inst-row { flex-direction: column; align-items: flex-start; gap: 14px; }
  .inst-logo { width: 76px; height: 76px; justify-content: flex-start; }
  .page-main.teaching-sections section + section { margin-top: 48px; }
  /* Teaching's in-page nav is redundant on a phone (both sections are a thumb
     away, and the page barely scrolls). Research keeps its own side-nav. */
  .side-nav-optional { display: none; }

  /* Research list: tighter entries so more papers fit per screen. */
  /* These carry explicit desktop sizes, so the body rule above doesn't reach
     them — they must be listed here or they stay desktop-sized on a phone. */
  .info-col address { font-size: 13.5px; line-height: 1.6; }
  .contact-ic svg {
    width: 13px;
    height: 13px;
    margin-top: calc((1.6em - 13px) / 2);   /* matches the line-height above */
  }
  .coverage { font-size: 12.5px; }

  /* Roomier gap between entries — with area tags hidden below, each block is
     shorter, so the extra separation is what keeps papers reading as discrete. */
  .paper { margin: 0 0 40px; }
  /* Slightly negative tracking + the wider gutter below buy ~20px of column,
     enough for one more title to land on a single line without shrinking the
     type. Titles over ~65 characters cannot fit at any readable size. */
  .paper h3 { font-size: 13.5px; line-height: 1.35; letter-spacing: -0.015em; }
  .wrap { padding: 0 18px; }
  /* Area tags are hidden on phones: at 9px the boxes wrapped to two or three
     rows per paper and read as clutter. Desktop keeps them. */
  .areas { display: none; }
  /* 12px: same size as the abstract, so byline/venue are told apart by style
     rather than size — serif regular for authors, italic accent for status,
     italic semibold for the journal name. */
  .authors,
  .status { font-size: 12px; }
  /* The ABSTRACT label keeps its 12px size on phones, so the 128px offset still
     lands correctly; only the link's own type shrinks. */
  /* No mobile override for .act-link: it sits beside ABSTRACT, which stays at
     12px on phones, so the two must match. (It was 11px only while the link was
     appended to the journal line, to keep that citation on one row.) */
  /* BibTeX is hidden on phones, like the area tags above: a .bib entry is only
     useful next to a LaTeX install, so on a phone it is a wide monospace block
     that earns nothing. Hiding it also removes the third label from the action
     row, leaving the cleaner ABSTRACT | SSRN pair. The DOI (paper title) and
     SSRN link still reach everything the entry describes. */
  .paper-actions details.bib { display: none; }
  /* Indent trimmed to claw back column width for the justified text. */
  .abstract {
    font-size: 12px;
    line-height: 1.5;
    text-align: justify;
    padding-left: 12px;
  }
  .keywords { font-size: 11.5px; padding-left: 12px; }
  .confs {
    font-size: 11px;
    line-height: 1.5;              /* floor — do not shrink */
    text-align: justify;
  }
  /* The label sits inside a justified line, so the browser stretches its own
     letter gaps as well as the word gaps — at desktop tracking it reads far
     wider on a phone than the 0.1em alone would suggest. Tighter, and a clear
     step below the 11px venue text so it still reads as subordinate. */
  .conf-label { font-size: 9.5px; letter-spacing: 0.03em; }
  .area-tag { font-size: 9px; }                   /* floor — do not shrink */
  .hero-interests { font-size: 12px; }
  .hero-interests strong { font-size: 10px; margin-bottom: 5px; }

  /* Diamond bullets: the desktop rule hardcodes top:14px for 16.5px/1.65 text,
     which sits too low at mobile sizes. Derive it instead so the diamond
     centres on the first line: padding-top + half the line box. Because the
     offset is in em it follows any font-size change here automatically. */
  .diamond-list li { font-size: 12.5px; padding: 3px 0 3px 18px; }
  .diamond-list li::before { top: calc(3px + (1.45em - 7px) / 2); }
  /* Courses stack one per line on a phone, so the diamonds form a clean column
     instead of an uneven 2-then-1 wrap. */
  .teaching-sections .diamond-list { display: block; }
  .about p { margin: 0 0 13px; }
}

/* --- Print ----------------------------------------------------------------- */

@media print {
  .site-nav, .skip-link { display: none; }
  .abstract { border-left: 0; padding: 0; }
  .keywords { border-left: 0; padding: 10px 0 0; }
  .area-tag { background: none; }
  .site-footer { background: none; color: var(--muted); }
}
