/* Landing-page programme refinement. Kept separate from shared reader styles. */
html {
  scroll-behavior: smooth;
  scrollbar-color: color-mix(in srgb, var(--ink) 26%, transparent) var(--bg);
  scrollbar-width: thin;
}

html::-webkit-scrollbar { width: 10px; }
html::-webkit-scrollbar-track { background: var(--bg); }
html::-webkit-scrollbar-thumb {
  border: 3px solid var(--bg);
  border-radius: 999px;
  background: color-mix(in srgb, var(--ink) 26%, transparent);
}

body.landing-page {
  min-width: 0;
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body.landing-page .fred-directory {
  position: relative;
  padding-block: clamp(3rem, 7vw, 6rem) clamp(4rem, 8vw, 7rem);
}

.archive-shell { position: relative; }

.talk-list {
  position: relative;
  width: 100%;
  margin-inline: auto;
  border-top: 0;
  scroll-margin-top: 2rem;
}

/* Session headings provide the only programme dividers; talk rows stay open. */
.talk-list .session-list {
  display: grid;
  gap: clamp(3rem, 6vw, 5rem);
}

.talk-list .session-group + .session-group {
  padding-top: clamp(2.5rem, 5vw, 4rem);
  border-top: 1px solid var(--rule);
}

.talk-list .card-grid {
  grid-template-columns: minmax(0, 1fr);
  gap: 0;
}

.talk-list .session-heading {
  margin: 0 0 clamp(1.4rem, 2.5vw, 2rem);
  padding-top: 0;
  border-top: 0;
  color: var(--ink);
  font-size: clamp(2rem, 4vw, 3rem);
  line-height: 1.08;
}

.talk-list .session-number { color: var(--title-green); }
.talk-list .session-separator { color: var(--muted); }

body.landing-page .talk-list .presentation-card {
  --talk-row-block: clamp(1.8rem, 2.8vw, 2.55rem);
  position: relative;
  display: grid;
  min-height: 0;
  grid-template-columns: minmax(15rem, 25rem) minmax(22rem, 1fr);
  grid-template-rows: auto auto;
  gap: .55rem clamp(2rem, 4vw, 3.1rem);
  padding: var(--talk-row-block) clamp(.85rem, 1.4vw, 1.2rem);
  border: 0;
  border-bottom: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  transform: none;
  transition: background-color 120ms var(--ease-out), box-shadow 120ms var(--ease-out);
}

body.landing-page .talk-list .presentation-card::before,
body.landing-page .talk-list .presentation-card::after {
  display: none;
}

body.landing-page .talk-list .presentation-card::before {
  border: 1px solid color-mix(in srgb, var(--ink) 58%, transparent);
  opacity: .12;
  transform: rotate(45deg) scale(.56);
  transition: transform 120ms var(--ease-out), opacity 120ms var(--ease-out);
}

body.landing-page .talk-list .presentation-card::after {
  clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
  background-image: radial-gradient(circle at .075rem .075rem, var(--ink) 0 .06rem, transparent .07rem);
  background-size: .235rem .235rem;
  opacity: .14;
  transform: scale(.68);
  transition: transform 120ms var(--ease-out), opacity 120ms var(--ease-out);
}

.talk-list__cursor {
  --talk-cursor-y: 0px;
  --talk-cursor-turn: 0deg;
  --talk-cursor-duration: 200ms;
  display: none;
  position: absolute;
  top: 0;
  left: clamp(-2.25rem, -3.1vw, -1.75rem);
  z-index: 3;
  width: 1.45rem;
  height: 1.45rem;
  opacity: 0;
  pointer-events: none;
  transform: translate3d(0, var(--talk-cursor-y), 0) rotate(var(--talk-cursor-turn));
  transform-origin: center;
  transition: transform var(--talk-cursor-duration) cubic-bezier(.77, 0, .175, 1), opacity 120ms var(--ease-out);
}

.talk-list__cursor::before,
.talk-list__cursor::after {
  position: absolute;
  inset: 0;
  content: "";
  transform-origin: center;
  transition: transform 120ms var(--ease-out), opacity 120ms var(--ease-out);
}

.talk-list__cursor::before {
  border: 1px solid color-mix(in srgb, var(--ink) 62%, transparent);
  opacity: .78;
  transform: rotate(45deg) scale(.8);
}

.talk-list__cursor::after {
  clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
  background-image: radial-gradient(circle at .075rem .075rem, var(--ink) 0 .06rem, transparent .07rem);
  background-size: .235rem .235rem;
  opacity: .96;
  transform: rotate(90deg) scale(.8);
}

.talk-list__cursor.is-visible { opacity: 1; }
.talk-list__cursor.is-travelling { will-change: transform; }
.talk-list__cursor.is-travelling::before { opacity: .96; transform: rotate(45deg) scale(1); }
.talk-list__cursor.is-travelling[data-direction="up"]::after { transform: rotate(96deg) scale(.94); }
.talk-list__cursor.is-travelling[data-direction="down"]::after { transform: rotate(84deg) scale(.94); }
.talk-list__cursor.is-instant { transition: none; }

body.landing-page .talk-list .presentation-card > h3 {
  grid-column: 1;
  grid-row: 1;
  max-width: 31ch;
  color: var(--ink);
  font-size: clamp(1.18rem, 1.75vw, 1.52rem);
  font-weight: 540;
  line-height: 1.18;
  letter-spacing: -.025em;
  transition: color 120ms var(--ease-out);
}

body.landing-page .talk-list .presentation-card > .premise {
  grid-column: 2;
  grid-row: 1 / 3;
  max-width: min(76ch, 38.5rem);
  margin: 0;
  color: var(--soft);
  font-size: 1rem;
  line-height: 1.5;
  transition: color 120ms var(--ease-out);
}

body.landing-page .talk-list .presentation-card > .presenters {
  grid-column: 1;
  grid-row: 2;
  margin: .1rem 0 0;
  color: var(--ink);
  font: 560 .69rem/1.45 var(--mono);
}

body.landing-page .talk-list .presenters-label {
  color: var(--muted);
  transition: color 120ms var(--ease-out);
}

body.landing-page .talk-list .presenter-link {
  position: relative;
  z-index: 2;
  color: var(--ink);
  font-weight: 650;
  text-decoration-color: color-mix(in srgb, var(--accent) 50%, transparent);
}

body.landing-page .talk-list .presenter-link .profile-mark { display: none !important; }

body.landing-page .talk-list .presentation-card:active {
  background-color: color-mix(in srgb, var(--ink) 5%, transparent);
  transform: none;
}

body.landing-page .talk-list .presentation-card:focus-within {
  outline: 0;
  background-color: color-mix(in srgb, var(--ink) 3.5%, transparent);
  box-shadow: inset 0 0 0 2px var(--focus);
}

body.landing-page .talk-list .presentation-card:focus-within h3 { color: var(--ink); transition: none; }
body.landing-page .talk-list .presentation-card:focus-within .premise { color: color-mix(in srgb, var(--ink) 78%, transparent); transition: none; }
body.landing-page .talk-list .presentation-card:focus-within .presenters-label { color: color-mix(in srgb, var(--ink) 68%, transparent); transition: none; }
.talk-list.has-shared-cursor .presentation-card:focus-within::before,
.talk-list.has-shared-cursor .presentation-card:focus-within::after { opacity: 0; transform: scale(.5); }
body.landing-page .talk-list .card-hit:focus-visible { outline: 0; }

.site-footer { border-top: 1px solid var(--rule); }
.site-footer__inner {
  display: grid;
  min-height: 5rem;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 1rem;
}

.site-footer a {
  display: inline-flex;
  min-height: 2.75rem;
  grid-column: 2;
  align-items: center;
  justify-self: center;
  gap: .5rem;
  padding: .5rem .65rem;
  border-radius: 4px;
  color: var(--soft);
  font: 620 .68rem/1 var(--mono);
  letter-spacing: .035em;
  text-decoration: none;
  transition: transform 120ms var(--ease-out), color 120ms var(--ease-out), background-color 120ms var(--ease-out), box-shadow 120ms var(--ease-out);
}

.site-footer a:active { transform: scale(.97); }
.site-footer a:focus-visible { outline: 0; box-shadow: 0 0 0 2px var(--focus); }

@media (hover: hover) and (pointer: fine) {
  body.landing-page .talk-list .presentation-card:hover {
    border-color: transparent;
    background: color-mix(in srgb, var(--ink) 4.5%, transparent);
    box-shadow: none;
    transform: none;
    transition-duration: 200ms;
  }

  body.landing-page .talk-list .presentation-card:hover h3 { color: var(--ink); }
  body.landing-page .talk-list .presentation-card:hover .premise { color: color-mix(in srgb, var(--ink) 78%, transparent); }
  body.landing-page .talk-list .presentation-card:hover .presenters-label { color: color-mix(in srgb, var(--ink) 68%, transparent); }
  .talk-list.has-shared-cursor .presentation-card:hover::before,
  .talk-list.has-shared-cursor .presentation-card:hover::after { opacity: 0; transform: scale(.5); }
  body.landing-page .talk-list .presenter-link:hover { color: var(--accent); }
  .site-footer a:hover { color: var(--ink); background: color-mix(in srgb, var(--accent) 4%, transparent); }
}

@media (max-width: 1199px) {
  body.landing-page .talk-list .presentation-card { padding-left: 2.7rem; }
  body.landing-page .talk-list .session-heading { padding-left: 2.7rem; }
  body.landing-page .talk-list .presentation-card::before,
  body.landing-page .talk-list .presentation-card::after { left: .78rem; }
  .talk-list__cursor { left: .68rem; }
}

@media (max-width: 1023px) {
  body.landing-page .talk-list .presentation-card {
    grid-template-columns: minmax(14rem, 21.25rem) minmax(18rem, 1fr);
    gap: .6rem clamp(1.5rem, 4vw, 2.5rem);
  }
}

@media (max-width: 640px) {
  body.landing-page .fred-directory { padding-block: 2.75rem 4rem; }
  body.landing-page .fred-directory::before { height: 2rem; }
  body.landing-page .talk-list .presentation-card {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
    gap: .65rem;
    padding-block: 1.55rem;
    padding-right: .8rem;
  }
  body.landing-page .talk-list .presentation-card > h3,
  body.landing-page .talk-list .presentation-card > .premise,
  body.landing-page .talk-list .presentation-card > .presenters {
    grid-column: 1;
    grid-row: auto;
  }
  body.landing-page .talk-list .premise { font-size: 1rem; }
  .talk-list .talk-list__cursor::after { animation: none; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .talk-list__cursor,
  .talk-list__cursor::before,
  .talk-list__cursor::after,
  body.landing-page .talk-list .presentation-card,
  body.landing-page .talk-list .presentation-card::before,
  body.landing-page .talk-list .presentation-card::after,
  .site-footer a { transition: none !important; }
  .talk-list .talk-list__cursor::after { animation: none !important; }
}
