/* ==========================================================================
   gabrielrourke.com — site styles
   Dark theme built around photo banners: each page opens on a photo with
   the title on top, and the photo fades into the dark page below.
   Garamond for titles, Gentium for text, Lato for the menu and small details.
   Fonts are self-hosted (SIL Open Font License; see assets/fonts/).
   ========================================================================== */

@font-face {
  font-family: "EB Garamond";
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("../fonts/eb-garamond-latin-wght-normal.woff2") format("woff2");
}
@font-face {
  font-family: "EB Garamond";
  font-style: italic;
  font-weight: 400 800;
  font-display: swap;
  src: url("../fonts/eb-garamond-latin-wght-italic.woff2") format("woff2");
}
@font-face {
  font-family: "Gentium Basic";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/gentium-basic-latin-400-normal.woff2") format("woff2");
}
@font-face {
  font-family: "Gentium Basic";
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/gentium-basic-latin-400-italic.woff2") format("woff2");
}
@font-face {
  font-family: "Gentium Basic";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/gentium-basic-latin-700-normal.woff2") format("woff2");
}
@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url("../fonts/lato-latin-300-normal.woff2") format("woff2");
}
@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/lato-latin-400-normal.woff2") format("woff2");
}
@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/lato-latin-700-normal.woff2") format("woff2");
}

/* ---------- Colors and fonts (change the site's look here) ---------- */
:root {
  --bg: #12171c;          /* page background: deep slate */
  --bg-raised: #192027;   /* slightly lighter panels */
  --ink: #e6e9ec;         /* main text */
  --ink-strong: #ffffff;  /* titles */
  --muted: #9ba6af;       /* dates, secondary text */
  --rule: rgba(230, 233, 236, 0.12);
  --teal: #7db6b1;        /* accent, from the original site */
  --link: #8fc8c2;        /* links: a touch lighter for reading on dark */

  --garamond: "EB Garamond", Garamond, "Times New Roman", serif;
  --text: "Gentium Basic", Georgia, serif;
  --sans: "Lato", "Helvetica Neue", Arial, sans-serif;

  --ease: cubic-bezier(0.2, 0.7, 0.2, 1);
  color-scheme: dark;
  interpolate-size: allow-keywords; /* lets abstracts open smoothly in newer browsers */
}

/* ---------- Base ---------- */
*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-padding-top: 5rem;
  background: var(--bg);
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--text);
  font-size: 1.0625rem;
  line-height: 1.75;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

::selection { background: var(--teal); color: var(--bg); }

img { display: block; max-width: 100%; height: auto; }
p { margin: 0 0 1em; }

a {
  color: var(--link);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-decoration-color: rgba(143, 200, 194, 0.4);
  text-underline-offset: 0.2em;
  transition: color 0.2s ease, text-decoration-color 0.2s ease;
}
a:hover { color: var(--ink-strong); text-decoration-color: var(--teal); }

:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; border-radius: 2px; }

.skip-link {
  position: absolute;
  left: 1rem;
  top: -4rem;
  z-index: 30;
  padding: 0.5rem 0.875rem;
  background: var(--ink);
  color: var(--bg);
  font-family: var(--sans);
  font-size: 0.875rem;
  border-radius: 3px;
}
.skip-link:focus { top: 1rem; }

.wrap {
  max-width: 62rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}

/* ---------- Header: floats on the photo, turns solid when you scroll ---------- */
.site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 20;
  transition: background-color 0.3s ease, box-shadow 0.3s ease, backdrop-filter 0.3s ease;
}
.site-header.scrolled {
  background: rgba(18, 23, 28, 0.82);
  -webkit-backdrop-filter: blur(12px) saturate(140%);
  backdrop-filter: blur(12px) saturate(140%);
  box-shadow: 0 1px 0 var(--rule);
}

.site-header .bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.4rem 2rem;
  padding: 1.1rem 1.75rem;
  transition: padding 0.3s ease;
}
.site-header.scrolled .bar { padding-top: 0.7rem; padding-bottom: 0.7rem; }

.site-name {
  font-family: var(--sans);
  font-size: 1.5rem;
  font-weight: 300;
  letter-spacing: 1px;
  color: #fff;
  text-decoration: none;
}
.site-name:hover { color: #fff; }

/* Soft shadow keeps the menu readable over bright photos */
.site-header:not(.scrolled) .site-name,
.site-header:not(.scrolled) .site-nav a { text-shadow: 0 1px 10px rgba(0, 0, 0, 0.55); }
.light-banner .site-header:not(.scrolled) .site-name,
.light-banner .site-header:not(.scrolled) .site-nav a { text-shadow: 0 1px 8px rgba(255, 255, 255, 0.6); }

.site-nav ul {
  display: flex;
  gap: 1.75rem;
  margin: 0;
  padding: 0;
  list-style: none;
}
.site-nav a {
  position: relative;
  display: inline-block;
  padding: 0.2rem 0;
  font-family: var(--sans);
  font-size: 1rem;
  font-weight: 400;
  letter-spacing: 0.02em;
  color: rgba(255, 255, 255, 0.9);
  text-decoration: none;
}
/* Thin line that slides in under menu items */
.site-nav a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -0.15rem;
  height: 2px;
  background: var(--teal);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.25s var(--ease);
}
.site-nav a:hover { color: #fff; }
.site-nav a:hover::after,
.site-nav a[aria-current="page"]::after { transform: scaleX(1); }
.site-nav a[aria-current="page"] { color: var(--teal); }

/* On the light painting, the menu uses dark text until you scroll. */
.light-banner .site-header:not(.scrolled) .site-name,
.light-banner .site-header:not(.scrolled) .site-nav a { color: #1d2329; }
.light-banner .site-header:not(.scrolled) .site-nav a[aria-current="page"] { color: #24675f; }
.light-banner .site-header:not(.scrolled) .site-nav a::after { background: #24675f; }

/* ---------- Banner photo with the page title ---------- */
.banner {
  position: relative;
  display: grid;
  place-items: center;
  height: clamp(17rem, 34vw, 24rem);
  overflow: hidden;
  background: var(--bg);
}
.banner img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  animation: settle 2.2s var(--ease) both;
}
/* Taller banner for photos that need more room (CV and Teaching). */
.banner--tall { height: clamp(20rem, 42vw, 30rem); }

/* Shades the top for the menu, and fades the bottom into the page. */
.banner::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom,
    rgba(0, 0, 0, 0.62) 0%,
    rgba(0, 0, 0, 0.2) 28%,
    rgba(18, 23, 28, 0.15) 58%,
    rgba(18, 23, 28, 0.75) 86%,
    var(--bg) 100%);
}
.banner--light::after {
  background: linear-gradient(to bottom,
    rgba(255, 255, 255, 0.5) 0%,
    rgba(255, 255, 255, 0) 32%,
    rgba(18, 23, 28, 0.1) 60%,
    rgba(18, 23, 28, 0.8) 88%,
    var(--bg) 100%);
}

.banner-text {
  position: relative;
  z-index: 1;
  padding: 3.5rem 1.5rem 2.5rem;
  text-align: center;
  color: #fff;
  text-shadow: 0 2px 18px rgba(0, 0, 0, 0.4);
  animation: rise 1s 0.2s var(--ease) both;
}
.banner--light .banner-text { color: #1d2329; text-shadow: 0 1px 14px rgba(255, 255, 255, 0.75); }

.banner h1 {
  margin: 0;
  font-family: var(--sans);
  font-size: clamp(2.6rem, 6.5vw, 4.6rem);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: 0.01em;
}
/* Short teal line under each page title */
.banner h1::after {
  content: "";
  display: block;
  width: 3rem;
  height: 2px;
  margin: 1.1rem auto 0;
  background: var(--teal);
}
.banner--home h1::after { display: none; }

/* Home banner: taller, with the name set large in Garamond. */
.banner--home { height: clamp(22rem, 46vw, 34rem); }
/* A soft dark glow behind the title so it stands out from the skyline */
.banner--home::after {
  background:
    radial-gradient(ellipse 52% 46% at 50% 50%, rgba(10, 14, 18, 0.5), rgba(10, 14, 18, 0) 72%),
    linear-gradient(to bottom,
      rgba(0, 0, 0, 0.62) 0%,
      rgba(0, 0, 0, 0.2) 28%,
      rgba(18, 23, 28, 0.15) 58%,
      rgba(18, 23, 28, 0.75) 86%,
      var(--bg) 100%);
}
.banner--home .banner-text {
  text-shadow: 0 2px 28px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.35);
}
.banner--home h1 {
  font-family: var(--garamond);
  font-size: clamp(3.3rem, 8.6vw, 6.6rem);
  font-weight: 500;
  line-height: 0.95;
  letter-spacing: -0.005em;
}
.hero-role {
  margin: 0.3em 0 0.6em;
  font-family: var(--garamond);
  font-size: clamp(1.55rem, 3.7vw, 2.65rem);
  font-style: italic;
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: 0.01em;
  color: rgba(255, 255, 255, 0.94);
}
/* "Boston University" in small capitals between two short teal lines */
.hero-place {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.9em;
  margin: 0;
  font-family: var(--garamond);
  font-size: clamp(1.2rem, 2.5vw, 1.8rem);
  font-weight: 600;
  font-variant-caps: small-caps;
  letter-spacing: 0.14em;
}
.hero-place::before,
.hero-place::after {
  content: "";
  flex: none;
  width: clamp(1.5rem, 5vw, 3.5rem);
  height: 1px;
  background: var(--teal);
  box-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
}

@keyframes settle { from { transform: scale(1.06); } to { transform: scale(1); } }
@keyframes rise   { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }

/* ---------- Main ---------- */
main { padding: 1.5rem 0 5rem; }

h2 {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin: 3.25rem 0 1.25rem;
  font-family: var(--garamond);
  font-size: 1.85rem;
  font-weight: 500;
  line-height: 1.2;
  color: var(--ink-strong);
}
/* A hairline that runs from the heading to the edge of the column */
h2::after {
  content: "";
  flex: 1;
  height: 1px;
  background: linear-gradient(to right, var(--rule), transparent);
}
h2:first-child { margin-top: 0; }

/* ---------- Home ---------- */
.intro {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1fr);
  gap: 3.5rem;
  align-items: start;
}
/* The portrait rises into the fading edge of the banner. */
.portrait {
  width: 100%;
  margin-top: -6.5rem;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  object-position: 50% 30%;
  border-radius: 4px;
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, 0.08),
    0 24px 60px -20px rgba(0, 0, 0, 0.7);
  position: relative;
  z-index: 2;
}
.bio { padding-top: 0.5rem; }

.contact-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin: 2rem 0 0;
  padding: 0;
  list-style: none;
  font-family: var(--sans);
  font-size: 0.95rem;
}
.pill {
  font-family: var(--sans);
  font-size: 0.95rem;
  line-height: 1.4;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.55rem 1.05rem;
  border: 1px solid var(--rule);
  border-radius: 999px;
  color: var(--ink);
  text-decoration: none;
  transition: border-color 0.2s ease, background-color 0.2s ease, color 0.2s ease;
}
.pill:hover { border-color: var(--teal); background: rgba(125, 182, 177, 0.1); color: #fff; }
.pill--primary { background: var(--teal); border-color: var(--teal); color: var(--bg); font-weight: 700; }
.pill--primary:hover { background: var(--link); border-color: var(--link); color: var(--bg); }

/* ---------- Research ---------- */
.papers {
  max-width: 52rem;
  margin: 0 auto;
}
.paper { border-bottom: 1px solid var(--rule); }
.paper:first-child { border-top: 1px solid var(--rule); }

.paper summary {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1.5rem;
  padding: 1.5rem 0.25rem;
  cursor: pointer;
  list-style: none;
}
.paper summary::-webkit-details-marker { display: none; }

.paper-title {
  font-family: var(--garamond);
  font-size: 1.55rem;
  font-style: italic;
  line-height: 1.3;
  color: var(--ink-strong);
  transition: color 0.2s ease;
}
.paper summary:hover .paper-title,
.paper[open] .paper-title { color: var(--teal); }
.paper--static { padding: 1.5rem 0.25rem; }
.paper--static .paper-title { display: block; margin: 0; }

.paper-title .coauthors { font-style: normal; font-size: 0.8em; color: var(--muted); }

.chev {
  flex: none;
  display: grid;
  place-items: center;
  width: 2rem;
  height: 2rem;
  margin-top: 0.15rem;
  border: 1px solid var(--rule);
  border-radius: 50%;
  transition: border-color 0.2s ease, transform 0.3s var(--ease);
}
.chev::before {
  content: "";
  width: 0.45rem;
  height: 0.45rem;
  margin-top: -0.2rem;
  border-right: 1.5px solid var(--ink);
  border-bottom: 1.5px solid var(--ink);
  transform: rotate(45deg);
}
.paper summary:hover .chev { border-color: var(--teal); }
.paper[open] .chev { transform: rotate(180deg); border-color: var(--teal); }

/* Smooth open/close in browsers that support it; instant elsewhere. */
.paper::details-content {
  block-size: 0;
  overflow: hidden;
  transition: block-size 0.35s var(--ease), content-visibility 0.35s allow-discrete;
}
.paper[open]::details-content { block-size: auto; }

.paper-body { padding: 0 3.5rem 1.75rem 0.25rem; }
.paper-body p { max-width: 44rem; color: var(--ink); }

.talks { max-width: 52rem; margin: 3.5rem auto 0; }

/* ---------- Teaching ---------- */
.hours-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(19rem, 1fr));
  gap: 1.25rem;
}
.hours {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: baseline;
  align-content: start;
  gap: 0.45rem 1.25rem;
  padding: 1.4rem 1.6rem 1.5rem;
  background: var(--bg-raised);
  border: 1px solid var(--rule);
  border-top: 3px solid var(--teal);
  border-radius: 4px;
}
.hours h3 {
  grid-column: 1 / -1;
  margin: 0 0 0.6rem;
  font-family: var(--garamond);
  font-size: 1.45rem;
  font-weight: 600;
  line-height: 1.2;
  color: var(--ink-strong);
}
.hours h3 span {
  display: block;
  font-family: var(--sans);
  font-size: 0.85rem;
  font-weight: 400;
  letter-spacing: 0.03em;
  color: var(--muted);
}
.hours .day { font-family: var(--sans); font-weight: 700; font-size: 0.92rem; color: var(--ink-strong); }
.hours .time { margin: 0; white-space: nowrap; }
.mode {
  justify-self: end;
  padding: 0.1rem 0.55rem;
  border: 1px solid var(--rule);
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 0.75rem;
  letter-spacing: 0.03em;
  color: var(--muted);
  white-space: nowrap;
}
.mode--zoom { border-color: rgba(125, 182, 177, 0.45); color: var(--teal); text-decoration: none; }
a.mode--zoom:hover { background: rgba(125, 182, 177, 0.12); color: #fff; }
.hours .place {
  grid-column: 1 / -1;
  margin: 0.85rem 0 0;
  padding-top: 0.85rem;
  border-top: 1px solid var(--rule);
  color: var(--muted);
  font-size: 0.95rem;
  line-height: 1.6;
}

.entries {
  margin: 0;
  padding: 0;
  list-style: none;
}
.entries li {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: 2rem;
  align-items: baseline;
  padding: 1rem 0;
  border-bottom: 1px solid var(--rule);
}
.entries li:first-child { border-top: 1px solid var(--rule); }
.entry-main strong { font-weight: 700; color: var(--ink-strong); }
.entry-sub { display: block; color: var(--muted); font-size: 0.97em; }
.entry-date {
  font-family: var(--sans);
  font-size: 0.9rem;
  letter-spacing: 0.02em;
  color: var(--muted);
  text-align: right;
  white-space: nowrap;
}

.hours .zoom-link {
  grid-column: 1 / -1;
  margin: 0.35rem 0 0;
  font-size: 0.95rem;
  color: var(--muted);
  overflow-wrap: anywhere;
}

.hours h3 a { color: inherit; text-decoration: none; }
.hours h3 a:hover { color: var(--teal); }

/* ---------- Courses page ---------- */
.course-list {
  display: grid;
  gap: 1.25rem;
  max-width: 44rem;
  margin: 0 auto;
}
.course-card {
  padding: 1.75rem 2rem 1.9rem;
  background: var(--bg-raised);
  border: 1px solid var(--rule);
  border-top: 3px solid var(--teal);
  border-radius: 4px;
}
.course-term {
  margin: 0 0 0.35rem;
  font-family: var(--sans);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--teal);
}
.course-card .course-title {
  display: block;
  margin: 0 0 0.25rem;
  font-size: 1.85rem;
}
.course-card .course-title::after { display: none; }
.course-school { margin: 0 0 1.4rem; color: var(--muted); }
.course-card p:last-child { margin-bottom: 0; }

.teach-links { margin-top: 2rem; }

/* ---------- Student evaluations ---------- */
.table-wrap { overflow-x: auto; }
.ev-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.97rem;
}
.ev-table th, .ev-table td {
  padding: 0.9rem 0.75rem;
  border-bottom: 1px solid var(--rule);
  text-align: left;
  vertical-align: middle;
}
.ev-table thead th {
  padding-top: 0;
  font-family: var(--sans);
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--muted);
  white-space: nowrap;
  vertical-align: bottom;
}
.ev-table .num { text-align: right; font-family: var(--sans); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ev-course { display: block; font-weight: 700; color: var(--ink-strong); }
.ev-meta { display: block; font-family: var(--sans); font-size: 0.82rem; font-weight: 400; color: var(--muted); }
.na { color: var(--muted); font-size: 0.85rem; }
.ev-sm { display: none; }
.ev-rating { font-weight: 700; color: var(--ink-strong); }

.quotes { max-width: 46rem; }
.quote { margin: 0 0 1.4rem; }
.quote blockquote {
  margin: 0;
  font-family: var(--garamond);
  font-size: 1.2rem;
  font-style: italic;
  line-height: 1.5;
  color: var(--ink-strong);
}

/* ---------- CV ---------- */
.cv-head {
  margin-bottom: 2.75rem;
  text-align: center;
}
.cv-head .name {
  margin: 0 0 0.35rem;
  font-family: var(--garamond);
  font-size: 2.4rem;
  font-weight: 500;
  color: var(--ink-strong);
}
.cv-head p { margin: 0; color: var(--muted); }
.cv-head p a { color: var(--link); }
.cv-actions { justify-content: center; margin-top: 1.25rem !important; }

.cv h2 {
  margin: 2.75rem 0 0.5rem;
  font-size: 1.4rem;
  font-weight: 600;
  font-variant: small-caps;
  letter-spacing: 0.05em;
}
.cv .entries li { border: 0; padding: 0.55rem 0; }
.cv .entries li:first-child { border: 0; }
.cv .para { margin: 0.7rem 0 0; }
.cv .para strong { color: var(--ink-strong); }

.facts {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.4rem 2rem;
  margin: 2.75rem 0 0;
}
.facts dt {
  font-family: var(--garamond);
  font-size: 1.25rem;
  font-weight: 600;
  font-variant: small-caps;
  letter-spacing: 0.05em;
  color: var(--ink-strong);
}
.facts dd { margin: 0; padding-top: 0.15rem; }

.refs {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-auto-rows: 1fr;
  gap: 1rem;
  margin-top: 1rem;
}
.refs p {
  margin: 0;
  padding: 1.1rem 1.25rem;
  background: var(--bg-raised);
  border: 1px solid var(--rule);
  border-radius: 4px;
  line-height: 1.6;
  color: var(--muted);
}
.refs strong { font-weight: 700; color: var(--ink-strong); }

/* ---------- 404 ---------- */
.not-found { text-align: center; }
.not-found .contact-links { justify-content: center; }

/* ---------- Footer ---------- */
.site-footer {
  border-top: 1px solid var(--rule);
  padding: 2rem 0 2.75rem;
  font-family: var(--sans);
  font-size: 0.82rem;
  letter-spacing: 0.02em;
  color: var(--muted);
}
.site-footer .wrap {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.5rem 2rem;
}
.site-footer p { margin: 0; }
.site-footer a { color: inherit; text-decoration-color: var(--rule); }
.site-footer a:hover { color: var(--ink); }

/* ---------- Small screens ---------- */
@media (max-width: 960px) and (min-width: 761px) {
}

@media (max-width: 760px) {
  .site-header .bar { padding: 0.85rem 1.1rem; }
  .site-name { font-size: 1.25rem; }
  .site-nav ul { gap: 1.2rem; }
  .site-nav a { font-size: 0.95rem; }
  .banner-text { padding-top: 6rem; }

  main { padding: 1rem 0 3.5rem; }

  .intro { grid-template-columns: 1fr; gap: 2rem; }
  .portrait { max-width: 15rem; margin-top: -4.5rem; }
  .bio { padding-top: 0; }

  .paper-title { font-size: 1.3rem; }
  .paper-body { padding-right: 0.25rem; }

  .entries li { grid-template-columns: 1fr; }
  .entry-date { text-align: left; }

  .hours { padding: 1.2rem 1.1rem; column-gap: 0.75rem; }
  .hours .time { white-space: normal; }
  .mode { padding: 0.05rem 0.45rem; font-size: 0.7rem; }
  .facts { grid-template-columns: 1fr; gap: 0.1rem; }
  .ev-lg { display: none; }
  .ev-sm { display: inline; }
  .ev-table th, .ev-table td { padding: 0.8rem 0.4rem; }
  .ev-table th:first-child, .ev-table td:first-child { padding-left: 0; }
  .ev-table th:last-child, .ev-table td:last-child { padding-right: 0; }
  .ev-table thead th { white-space: normal; }
  .refs { grid-template-columns: 1fr; grid-auto-rows: auto; }
  .facts dd { margin-bottom: 0.9rem; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

@media print {
  :root { --bg: #fff; --ink: #000; --ink-strong: #000; --muted: #444; --rule: #ccc; }
  .site-header, .banner, .site-footer, .skip-link, .cv-actions, .contact-links { display: none; }
  main { padding: 0; }
  a { color: inherit; text-decoration: none; }
}
