@font-face {
  font-family: "SiteText";
  src: url("assets/fonts/88843132c16a6dd1371411bb.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
:root {
  --bg: #000;
  --fg: #fff;
  --page-pad: clamp(18px, 2.6vw, 44px);
  --header-h: 46px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; background: var(--bg); }
body {
  margin: 0;
  background: var(--bg);
  color: var(--fg);
  font-family: "SiteText", Helvetica, Arial, sans-serif;
  font-weight: 500;
  line-height: 1.18;
  letter-spacing: .012em;
  text-rendering: geometricPrecision;
  isolation: isolate;
}
a { color: inherit; text-decoration: none; }
a:hover { opacity: .7; }
a:focus-visible { outline: 2px solid white; outline-offset: 5px; }
.site-header {
  position: fixed;
  inset: 0 0 auto;
  z-index: 20;
  min-height: 46px;
  padding: 2px var(--page-pad);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  background: rgba(0,0,0,.9);
  font-size: clamp(21.45px, 1.5675vw, 28.05px);
}
.site-header::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  height: 16px;
  background: linear-gradient(to bottom, rgba(0,0,0,.9), transparent);
  pointer-events: none;
}
.wordmark { white-space: nowrap; letter-spacing: .025em; line-height: 1.18; }
.caps { letter-spacing: .025em; }
.nav { display: flex; justify-content: flex-end; gap: clamp(18px, 2.2vw, 40px); }
.nav a { white-space: nowrap; }
main { padding-top: var(--header-h); }
.page-map { position: fixed; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; opacity: .5; }
.page-map img {
  position: absolute;
  top: calc(50% + var(--header-h));
  width: 100%;
  height: auto;
  transform: translateY(-50%) translate3d(var(--map-x, 0px), var(--map-y, 0px), 0);
}
.hero-visual { position: relative; padding: 10px var(--page-pad) 70px; }
.hero-logo { width: min(66.3vw, 1020px); margin: 0 auto; pointer-events: none; }
.hero-logo img { display: block; width: 100%; height: auto; }
.hero-subtitle {
  position: absolute;
  top: 20px;
  left: var(--page-pad);
  width: clamp(280px, 25vw, 480px);
  height: auto;
}
.section {
  scroll-margin-top: calc(var(--header-h) + 20px);
  display: grid;
  grid-template-columns: minmax(150px, 1fr) minmax(0, 3fr);
  gap: clamp(24px, 5vw, 100px);
  padding: clamp(64px, 10vw, 160px) var(--page-pad);
}
.section-label { position: sticky; top: calc(var(--header-h) + 20px); align-self: start; font-size: clamp(24px, 1.8vw, 33px); }
.section-content { max-width: 1120px; min-width: 0; }
.abstract-copy { max-width: 980px; }
.abstract-copy p { margin: 0 0 1.1em; font-size: clamp(24px, 2.65vw, 48px); line-height: 1.08; }
.abstract-copy .lead { margin-bottom: clamp(64px, 8vw, 120px); font-size: clamp(30px, 4vw, 72px); }
.abstract-copy em { font-style: normal; }
.programme-date { margin: .25em 0 0; font-size: inherit; line-height: inherit; font-weight: inherit; }
.abstract-section { align-items: start; }
.abstract-copy .lead { margin-top: 0; }
.schedule-item {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  column-gap: 20px;
  row-gap: 18px;
  padding: 0 0 clamp(46px, 5vw, 84px);
}
.schedule-item > div { display: contents; }
.schedule-item time, .schedule-item h3, .schedule-item h4 {
  margin: 0;
  font-size: clamp(30px, 3.4vw, 60px);
  line-height: 1.08;
  font-weight: 500;
}
.schedule-item time { grid-column: 1; grid-row: 1; text-align: left; }
.schedule-item h3 { grid-column: 2; grid-row: 1; text-align: right; }
.schedule-item h4 { grid-column: 2; text-align: right; margin-top: -.22em; }
.schedule-item p {
  grid-column: 1 / -1;
  margin: 0;
  font-size: clamp(24px, 2.025vw, 37.5px);
  line-height: 1.25;
}
.institute { font-size: .76em; }
.schedule-item .meta { margin-top: .55em; }
.schedule-item .meta > span:first-child:not(.speaker) { display: inline-block; font-size: .76em; }
.footer { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; padding: 32px var(--page-pad) 50px; font-size: clamp(24px, 1.8vw, 33px); }
.footer > :last-child { text-align: right; }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
@media (max-width: 1100px) {
  .site-header { align-items: flex-start; flex-direction: column; gap: 6px; }
  .nav { width: 100%; justify-content: flex-start; gap: 12px 22px; flex-wrap: wrap; }
  .section { grid-template-columns: 1fr; gap: 34px; padding-top: 70px; padding-bottom: 88px; }
  .section-label { position: static; }
  .abstract-copy p { font-size: clamp(24px, 6vw, 40px); }
  .abstract-copy .lead { font-size: clamp(34px, 8.8vw, 58px); }
  .footer { grid-template-columns: 1fr; }
  .footer > :last-child { text-align: left; }
}
@media (max-width: 1000px) {
  .hero-visual { display: flex; flex-direction: column; padding-top: 8px; gap: 30px; }
  .hero-logo { order: 0; width: min(85%, 680px); }
  .hero-subtitle { order: 1; position: static; width: min(76%, 530px); }
}
@media (max-width: 480px) {
  .wordmark { font-size: 23.1px; }
  .nav { font-size: 21.45px; }
  .schedule-item { column-gap: 12px; }
  .schedule-item time, .schedule-item h3, .schedule-item h4 { font-size: 30px; }
  .schedule-item p { font-size: 24px; }
}
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
@media (prefers-reduced-motion: reduce), (hover: none), (pointer: coarse) { .page-map img { transform: translateY(-50%); } }

.footer { align-items: center; }
.footer-logos img { display: block; width: 100%; max-width: 850px; height: auto; margin-left: auto; }
@media (max-width: 1100px) {
  .footer-logos img { margin-left: 0; }
  .abstract-section { gap: 0; }
}

/* Intro uses the same type size as the abstract; paragraphs use indents. */
.abstract-copy .lead {
  font-size: clamp(24px, 2.65vw, 48px);
  line-height: 1.08;
  margin-bottom: 1em;
}
.abstract-copy p:not(.lead) { margin: 0; }
.abstract-copy p:not(.lead) + p:not(.lead) { text-indent: 1em; }
@media (max-width: 1100px) {
  .abstract-copy .lead { font-size: clamp(24px, 6vw, 40px); }
}

/* Programme uses one size; only affiliations retain their smaller size. */
.programme-section { --programme-size: clamp(24px, 2.025vw, 37.5px); }
.programme-section .section-label,
.programme-section .programme-date,
.programme-section .schedule-item time,
.programme-section .schedule-item h3,
.programme-section .schedule-item h4,
.programme-section .schedule-item p,
.programme-section .schedule-item .meta > span:first-child:not(.speaker) {
  font-size: var(--programme-size);
  line-height: 1.25;
}
.programme-section .schedule-item .institute { font-size: .76em; }

/* Align the subtitle’s visible left edge with the navigation title. */
.hero-subtitle { transform: translateX(-6px); }

/* Navigation matches section labels; use the shared, moderate tracking. */
.site-header, .site-header .wordmark, .site-header .nav {
  font-size: clamp(24px, 1.8vw, 33px);
  letter-spacing: .012em;
  line-height: 1.18;
}

/* Narrow screens: size the map by viewport height and keep it centered. */
@media (max-width: 1000px) {
  .page-map img {
    top: 50%;
    left: 50%;
    width: auto;
    height: 100svh;
    transform: translate(-50%, -50%) translate3d(var(--map-x, 0px), var(--map-y, 0px), 0);
  }
}
@media (max-width: 1000px) and (prefers-reduced-motion: reduce),
       (max-width: 1000px) and (hover: none),
       (max-width: 1000px) and (pointer: coarse) {
  .page-map img { transform: translate(-50%, -50%); }
}

/* Keep the map below the measured bar, its 16px fade and pointer movement. */
.page-map { top: calc(var(--header-h) + 28px); }
.page-map img {
  top: 0;
  transform: translate3d(var(--map-x, 0px), var(--map-y, 0px), 0);
}
@media (max-width: 1000px) {
  .page-map img {
    top: 0;
    left: 50%;
    transform: translateX(-50%) translate3d(var(--map-x, 0px), var(--map-y, 0px), 0);
  }
}
@media (prefers-reduced-motion: reduce), (hover: none), (pointer: coarse) {
  .page-map img { transform: none; }
}
@media (max-width: 1000px) and (prefers-reduced-motion: reduce),
       (max-width: 1000px) and (hover: none),
       (max-width: 1000px) and (pointer: coarse) {
  .page-map img { transform: translateX(-50%); }
}
