/**
 * TierBook Editorial program displays: agenda and faculty (includes/Program/ProgramEditorialRenderer.php).
 *
 * Theming contract: every color, font, size and timing is a --tbe-* custom property. The defaults
 * below are neutral and sit in :where(.tbe) (zero specificity), so a theme or companion plugin
 * restyles the displays with a plain `.tbe { --tbe-ink: …; }` rule whatever the load order, and the
 * Elementor style controls ({{WRAPPER}} .tbe) still win over that. Fonts inherit from the site
 * unless --tbe-font / --tbe-font-display are set.
 *
 * Layout follows the width of the display's own container (container queries), not the window,
 * so a full-width section, a two-column row and a phone all get the right arrangement.
 */

:where(.tbe) {
  --tbe-ink: #0d1736;
  --tbe-text: #25324a;
  --tbe-muted: #5b6c7c;
  --tbe-accent: #087da9;
  --tbe-accent-soft: #20a4d8;
  --tbe-on-accent: #ffffff;
  --tbe-on-ink: #ffffff;
  --tbe-tint: #eef6fa;
  --tbe-surface: #ffffff;
  --tbe-danger: #b4233f;
  --tbe-display-weight: 650;
  --tbe-display-tracking: 1;
  --tbe-line: rgb(13 23 54 / 0.1);
  --tbe-line-strong: rgb(13 23 54 / 0.2);
  --tbe-radius: 1.25rem;
  --tbe-radius-sm: 0.625rem;
  --tbe-shadow: 0 1px 2px rgb(13 23 54 / 0.06);
  --tbe-shadow-lg: 0 24px 64px rgb(13 23 54 / 0.14);
  --tbe-ease: cubic-bezier(0.2, 0.8, 0.2, 1);
  --tbe-fast: 140ms;
  --tbe-base: 220ms;
  --tbe-sticky-top: 0px;
  --tbe-time-col: 8.5rem;
  --tbe-faculty-col: 19rem;
  --tbe-photo: 2.75rem;
  --tbe-day-gap: clamp(3rem, 6vw, 5.5rem);
  --tbe-row-pad: 1.5rem;
}

.tbe {
  container: tbe / inline-size;
  /* Inline-size containment gives the display no intrinsic width, so a shrink-to-fit parent (an
     Elementor flex container) would measure it as zero-wide and reserve a huge height. Report the
     viewport width instead; the display still fills whatever width it is given. */
  contain-intrinsic-inline-size: auto 100vw;
  color: var(--tbe-text);
  font-family: var(--tbe-font, inherit);
  font-size: 1rem;
  line-height: 1.6;
  text-align: start;
}

.tbe *,
.tbe *::before,
.tbe *::after {
  box-sizing: border-box;
}

.tbe ::selection {
  background: color-mix(in srgb, var(--tbe-accent-soft) 26%, transparent);
  color: var(--tbe-ink);
}

.tbe :where(h2, h3, h4, h5, p, ol, ul, figure) {
  margin: 0;
}

.tbe :where(ol, ul) {
  list-style: none;
  padding: 0;
}

/* Site-wide styles shield. Elementor's global Site Settings (and many themes) style every
 * button, heading, label and field (".elementor-kit-N button": gradient fill, padding, pill
 * radius, tracking, uppercase, its own font). That outranks a single class, so the displays reset
 * those elements at 0,1,2 ("html .tbe …"), every component rule is scoped under .tbe (0,2,0 and
 * up) to win over the reset, and Elementor style controls use {{WRAPPER}} .tbe .x (0,3,0). */
html .tbe :is(button, input, select, textarea) {
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: inherit;
  font: inherit;
  letter-spacing: inherit;
  text-transform: none;
  text-decoration: none;
  text-shadow: none;
}

html .tbe :is(h1, h2, h3, h4, h5, h6, label) {
  color: inherit;
  font: inherit;
  letter-spacing: inherit;
  text-transform: none;
  text-decoration: none;
}

.tbe :where(a, button, summary, input, select):focus-visible {
  outline: 2px solid var(--tbe-accent);
  outline-offset: 3px;
  border-radius: var(--tbe-radius-sm);
}

.tbe [hidden],
.tbe .tbe-dialog [hidden] {
  display: none !important;
}

.tbe .tbp-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.tbe .tbe-icon {
  flex: none;
  width: 1em;
  height: 1em;
}

.tbe .tbe-empty {
  padding: 2.5rem 0;
  color: var(--tbe-muted);
  font-size: 1.0625rem;
}

/* Elementor widget wrappers (flex items in containers) always take the full row. */
.elementor-widget-tierbook_agenda,
.elementor-widget-tierbook_speakers {
  inline-size: 100%;
}

/* ── Header ─────────────────────────────────────────────────────────────── */

.tbe .tbe-head {
  display: grid;
  gap: 0.75rem;
  margin-block-end: clamp(1.75rem, 3vw, 2.5rem);
}

.tbe .tbe-head__title {
  color: var(--tbe-ink);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(2rem, 4.2cqi, 3rem);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.028em * var(--tbe-display-tracking));
  line-height: 1.08;
  text-wrap: balance;
}

.tbe .tbe-head__intro {
  max-inline-size: 62ch;
  color: var(--tbe-text);
  font-size: clamp(1.0625rem, 1.4cqi, 1.1875rem);
  line-height: 1.55;
}

.tbe .tbe-head__summary {
  color: var(--tbe-muted);
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
}

/* ── Day navigation: date chips, sticky while the agenda scrolls ──────────── */

.tbe .tbe-daynav {
  position: relative;
  z-index: 3;
  padding-block: 0.625rem;
  border-block-end: 1px solid var(--tbe-line-strong);
  background: var(--tbe-surface);
}

.tbe.tbe--sticky .tbe-daynav {
  position: sticky;
  top: var(--tbe-sticky-top);
}

/* More dates than fit: fade the edge that has more beyond it. */
.tbe .tbe-daynav.is-overflowing:not(.at-end) .tbe-daynav__track {
  -webkit-mask-image: linear-gradient(
    to right,
    #000 calc(100% - 2.5rem),
    transparent
  );
  mask-image: linear-gradient(to right, #000 calc(100% - 2.5rem), transparent);
}

.tbe .tbe-daynav.is-overflowing.at-end:not(.at-start) .tbe-daynav__track {
  -webkit-mask-image: linear-gradient(
    to left,
    #000 calc(100% - 2.5rem),
    transparent
  );
  mask-image: linear-gradient(to left, #000 calc(100% - 2.5rem), transparent);
}

.tbe .tbe-daynav.is-overflowing:not(.at-start):not(.at-end) .tbe-daynav__track {
  -webkit-mask-image: linear-gradient(
    to right,
    transparent,
    #000 2.5rem,
    #000 calc(100% - 2.5rem),
    transparent
  );
  mask-image: linear-gradient(
    to right,
    transparent,
    #000 2.5rem,
    #000 calc(100% - 2.5rem),
    transparent
  );
}

.tbe .tbe-daynav__track {
  position: relative;
  display: flex;
  gap: 0.375rem;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x proximity;
  scrollbar-width: none;
}

.tbe .tbe-daynav__track::-webkit-scrollbar {
  display: none;
}

/* The active marker slides between chips (public/js/program.js positions it). */
.tbe .tbe-daynav__mark {
  position: absolute;
  inset-block: 0;
  inset-inline-start: 0;
  z-index: 0;
  width: 0;
  border-radius: var(--tbe-radius-sm);
  background: var(--tbe-ink);
  transition:
    transform 420ms var(--tbe-ease),
    opacity var(--tbe-fast) linear;
  pointer-events: none;
}

.tbe .tbe-chip {
  position: relative;
  z-index: 1;
  display: inline-grid;
  flex: none;
  justify-items: center;
  min-inline-size: 4.25rem;
  padding: 0.45rem 0.85rem 0.5rem;
  border: 0;
  border-radius: var(--tbe-radius-sm);
  background: transparent;
  color: var(--tbe-text);
  line-height: 1.1;
  text-decoration: none;
  cursor: pointer;
  scroll-snap-align: start;
  transition:
    color var(--tbe-base) var(--tbe-ease),
    background-color var(--tbe-fast) linear;
}

.tbe .tbe-chip:hover {
  background: var(--tbe-tint);
  color: var(--tbe-ink);
}

.tbe .tbe-chip.is-active {
  color: var(--tbe-on-ink);
}

.tbe .tbe-chip.is-active:hover {
  background: transparent;
}

/* Without the script, the active chip draws its own fill. */
.tbe .tbe-daynav:not(.has-mark) .tbe-chip.is-active {
  background: var(--tbe-ink);
}

.tbe .tbe-chip__dow,
.tbe .tbe-chip__mon {
  font-size: 0.6875rem;
  font-weight: 650;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  opacity: 0.78;
}

.tbe .tbe-chip__num {
  margin-block: 0.15rem 0.1rem;
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: 1.5rem;
  font-variant-numeric: lining-nums tabular-nums;
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.02em * var(--tbe-display-tracking));
}

/* ── Filters ─────────────────────────────────────────────────────────────── */

.tbe .tbe-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 0.625rem;
  margin-block-start: 1.25rem;
}

.tbe .tbe-search,
.tbe .tbe-select {
  position: relative;
  display: inline-flex;
  align-items: center;
  color: var(--tbe-muted);
}

.tbe .tbe-search {
  flex: 1 1 16rem;
  max-inline-size: 26rem;
}

.tbe .tbe-search .tbe-icon {
  position: absolute;
  inset-inline-start: 1rem;
  pointer-events: none;
}

.tbe .tbe-select .tbe-icon {
  position: absolute;
  inset-inline-end: 0.9rem;
  pointer-events: none;
}

.tbe .tbe-search input,
.tbe .tbe-select select {
  inline-size: 100%;
  min-block-size: 2.75rem;
  margin: 0;
  border: 1px solid var(--tbe-line-strong);
  border-radius: 999px;
  background: var(--tbe-surface);
  color: var(--tbe-ink);
  font: inherit;
  font-size: 0.9375rem;
  box-shadow: none;
  transition:
    border-color var(--tbe-fast) linear,
    box-shadow var(--tbe-fast) linear;
}

.tbe .tbe-search input {
  padding: 0.5rem 1rem 0.5rem 2.6rem;
}

.tbe .tbe-select select {
  max-inline-size: 15rem;
  padding: 0.5rem 2.4rem 0.5rem 1rem;
  appearance: none;
  cursor: pointer;
}

.tbe .tbe-search input::placeholder {
  color: var(--tbe-muted);
  opacity: 1;
}

.tbe .tbe-search input:hover,
.tbe .tbe-select select:hover {
  border-color: color-mix(in srgb, var(--tbe-ink) 40%, transparent);
}

.tbe .tbe-search input:focus,
.tbe .tbe-select select:focus {
  border-color: var(--tbe-accent);
  outline: none;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--tbe-accent) 20%, transparent);
}

.tbe .tbe-filters__empty {
  flex-basis: 100%;
  padding: 1.25rem 1.25rem;
  border-radius: var(--tbe-radius-sm);
  background: var(--tbe-tint);
  color: var(--tbe-ink);
  font-weight: 600;
}

/* ── Days ────────────────────────────────────────────────────────────────── */

.tbe .tbe-day {
  padding-block-start: var(--tbe-day-gap);
  scroll-margin-top: calc(var(--tbe-sticky-top) + 5.5rem);
}

.tbe .tbe-day:first-child {
  padding-block-start: clamp(1.75rem, 3vw, 2.75rem);
}

.tbe.tbe--tabs .tbe-day {
  padding-block-start: clamp(1.75rem, 3vw, 2.75rem);
}

.tbe .tbe-day__head {
  position: relative;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: clamp(0.875rem, 2cqi, 1.75rem);
  align-items: end;
  padding-block-end: clamp(1rem, 2cqi, 1.5rem);
  border-block-end: 1px solid var(--tbe-line-strong);
}

/* The horizon: a short accent rule riding the day's base line. */
.tbe .tbe-day__head::after {
  content: "";
  position: absolute;
  inset-block-end: -2px;
  inset-inline-start: 0;
  inline-size: clamp(3rem, 8cqi, 5.5rem);
  block-size: 3px;
  border-radius: 3px;
  background: var(--tbe-accent-soft);
}

.tbe .tbe-day__num {
  min-inline-size: 1.2em;
  color: var(--tbe-accent);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(3.75rem, 10cqi, 7rem);
  font-variant-numeric: lining-nums;
  font-weight: calc(var(--tbe-display-weight) + 30);
  letter-spacing: calc(-0.05em * var(--tbe-display-tracking));
  line-height: 0.78;
}

.tbe .tbe-day__text {
  display: grid;
  gap: 0.3rem;
  padding-block-end: 0.15rem;
}

.tbe .tbe-day__name {
  color: var(--tbe-ink);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(1.625rem, 3.4cqi, 2.375rem);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.025em * var(--tbe-display-tracking));
  line-height: 1.05;
}

.tbe .tbe-day__meta {
  color: var(--tbe-muted);
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
  font-weight: 550;
}

/* ── Time slots ──────────────────────────────────────────────────────────── */

.tbe .tbe-slot {
  display: grid;
  grid-template-columns: var(--tbe-time-col) minmax(0, 1fr);
  gap: 0 clamp(1.25rem, 3cqi, 2.5rem);
  padding-block: var(--tbe-row-pad);
  border-block-end: 1px solid var(--tbe-line);
}

.tbe .tbe-time {
  display: flex;
  flex-direction: column;
  align-self: start;
  padding-block-start: 0.1rem;
  font-variant-numeric: tabular-nums;
  line-height: 1.3;
  white-space: nowrap;
}

.tbe .tbe-time__start {
  color: var(--tbe-ink);
  font-size: 1.0625rem;
  font-weight: 650;
  letter-spacing: -0.01em;
}

.tbe .tbe-time__sep {
  display: none;
}

.tbe .tbe-time__end {
  color: var(--tbe-muted);
  font-size: 0.875rem;
  font-weight: 500;
}

.tbe .tbe-slot__items {
  display: grid;
  min-inline-size: 0;
}

.tbe .tbe-slot__items > .tbe-session + .tbe-session {
  margin-block-start: 1.375rem;
  padding-block-start: 1.375rem;
  border-block-start: 1px dashed var(--tbe-line-strong);
}

/* Breaks and meals: a quiet band rather than a full row. */
.tbe .tbe-slot--break {
  margin-block: 0.75rem;
  padding: 0.875rem 1.25rem;
  border-block-end: 0;
  border-radius: var(--tbe-radius-sm);
  background: var(--tbe-tint);
  grid-template-columns: calc(var(--tbe-time-col) - 1.25rem) minmax(0, 1fr);
}

.tbe .tbe-slot--break + .tbe-slot {
  border-block-start: 0;
}

.tbe .tbe-slot--break .tbe-time__start {
  font-size: 0.9375rem;
}

.tbe .tbe-slot--break .tbe-session__title {
  color: var(--tbe-ink);
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: 0;
}

.tbe .tbe-slot--break .tbe-meta {
  margin-block-start: 0.2rem;
}

/* ── Sessions ────────────────────────────────────────────────────────────── */

.tbe .tbe-session {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 1.125rem clamp(1.5rem, 3.5cqi, 3rem);
  min-inline-size: 0;
  scroll-margin-top: calc(var(--tbe-sticky-top) + 6rem);
}

.tbe .tbe-session:target .tbe-session__title {
  text-decoration: underline;
  text-decoration-color: var(--tbe-accent-soft);
  text-decoration-thickness: 2px;
  text-underline-offset: 0.25em;
}

.tbe .tbe-session__main {
  display: grid;
  align-content: start;
  min-inline-size: 0;
}

.tbe .tbe-session__title {
  max-inline-size: 48rem;
  color: var(--tbe-ink);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(1.125rem, 0.95rem + 0.55cqi, 1.375rem);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.014em * var(--tbe-display-tracking));
  line-height: 1.3;
  text-wrap: pretty;
  overflow-wrap: anywhere;
}

.tbe .tbe-session__subtitle {
  max-inline-size: 48rem;
  margin-block-start: 0.3rem;
  color: var(--tbe-text);
  font-size: 1rem;
}

.tbe .tbe-session.is-cancelled .tbe-session__title {
  color: var(--tbe-muted);
  text-decoration: line-through;
  text-decoration-thickness: 1px;
}

.tbe .tbe-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem 1rem;
  align-items: center;
  margin-block-start: 0.6rem;
  color: var(--tbe-muted);
  font-size: 0.875rem;
  line-height: 1.4;
}

.tbe .tbe-type {
  display: inline-flex;
  gap: 0.45rem;
  align-items: center;
  color: var(--tbe-text);
  font-weight: 600;
}

.tbe .tbe-type::before {
  content: "";
  inline-size: 0.5rem;
  block-size: 0.5rem;
  border-radius: 50%;
  background: var(--tbe-type, var(--tbe-accent-soft));
}

.tbe .tbe-room {
  display: inline-flex;
  gap: 0.3rem;
  align-items: center;
}

.tbe .tbe-room--map {
  padding: 0;
  border: 0;
  background: none;
  color: var(--tbe-accent);
  font-weight: 600;
  text-decoration: underline;
  text-decoration-color: color-mix(in srgb, var(--tbe-accent) 35%, transparent);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
  cursor: pointer;
  transition: text-decoration-color var(--tbe-fast) linear;
}

.tbe .tbe-room--map:hover {
  text-decoration-color: currentColor;
}

.tbe .tbe-tag {
  padding: 0.1rem 0.55rem;
  border: 1px solid var(--tbe-line-strong);
  border-radius: 999px;
  color: var(--tbe-text);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.02em;
}

.tbe .tbe-flag {
  padding: 0.1rem 0.55rem;
  border-radius: 999px;
  background: var(--tbe-danger);
  color: #ffffff;
  font-size: 0.75rem;
  font-weight: 700;
}

.tbe .tbe-until {
  font-variant-numeric: tabular-nums;
}

/* About this session */
.tbe .tbe-about {
  max-inline-size: 65ch;
  margin-block-start: 0.875rem;
  color: var(--tbe-text);
  font-size: 0.9688rem;
}

.tbe .tbe-about summary {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
  color: var(--tbe-accent);
  font-size: 0.875rem;
  font-weight: 650;
  list-style: none;
  cursor: pointer;
}

.tbe .tbe-about summary::-webkit-details-marker {
  display: none;
}

.tbe .tbe-about summary .tbe-icon {
  transition: transform var(--tbe-base) var(--tbe-ease);
}

.tbe .tbe-about[open] summary .tbe-icon {
  transform: rotate(180deg);
}

.tbe .tbe-about__body,
.tbe div.tbe-about {
  display: grid;
  gap: 0.75rem;
}

.tbe .tbe-about__body {
  padding-block-start: 0.625rem;
}

@supports (interpolate-size: allow-keywords) {
  .tbe .tbe-about {
    interpolate-size: allow-keywords;
  }

  .tbe .tbe-about::details-content {
    block-size: 0;
    overflow: clip;
    transition:
      block-size 320ms var(--tbe-ease),
      content-visibility 320ms allow-discrete;
  }

  .tbe .tbe-about[open]::details-content {
    block-size: auto;
  }
}

.tbe .tbe-prose > :where(p, ul, ol) {
  margin: 0 0 0.75rem;
}

.tbe .tbe-prose > :last-child {
  margin-block-end: 0;
}

.tbe .tbe-prose :where(ul, ol) {
  padding-inline-start: 1.25rem;
  list-style: revert;
}

.tbe .tbe-prose a,
.tbe .tbe-dialog__body .tbp-content a {
  color: var(--tbe-accent);
  text-underline-offset: 0.2em;
}

.tbe .tbe-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
  margin-block-start: 0.875rem;
  font-size: 0.875rem;
}

.tbe .tbe-links a {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
  color: var(--tbe-accent);
  font-weight: 650;
  text-decoration: none;
}

.tbe .tbe-links a:hover {
  text-decoration: underline;
  text-underline-offset: 0.22em;
}

/* Supported by */
.tbe .tbe-support {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem 1.5rem;
  margin-block-start: 1rem;
}

.tbe .tbe-support__item {
  display: inline-flex;
  gap: 0.75rem;
  align-items: center;
  color: var(--tbe-muted);
  font-size: 0.8125rem;
}

.tbe .tbe-support__item img {
  display: block;
  max-inline-size: 7.5rem;
  max-block-size: 1.875rem;
  object-fit: contain;
}

.tbe .tbe-support__item strong {
  color: var(--tbe-ink);
  font-weight: 650;
}

/* Segments */
.tbe .tbe-segments {
  display: grid;
  gap: 1rem;
  margin-block-start: 1.125rem;
  padding-inline-start: 1.125rem;
  border-inline-start: 1px solid var(--tbe-line-strong);
}

.tbe .tbe-session--segment .tbe-session__title {
  font-size: 1.0625rem;
}

.tbe .tbe-segment-time {
  margin-block-end: 0.15rem;
  color: var(--tbe-muted);
  font-size: 0.8125rem;
  font-variant-numeric: tabular-nums;
  font-weight: 650;
}

/* ── Faculty on a session ─────────────────────────────────────────────────── */

.tbe .tbe-people {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  gap: 0.75rem 1.5rem;
  align-content: start;
}

.tbe .tbe-person {
  display: flex;
  gap: 0.8rem;
  align-items: center;
  inline-size: 100%;
  margin: 0;
  padding: 0.25rem;
  margin-inline: -0.25rem;
  border: 0;
  border-radius: var(--tbe-radius-sm);
  background: none;
  text-align: start;
  cursor: pointer;
}

.tbe .tbe-person__photo {
  position: relative;
  display: grid;
  flex: none;
  place-items: center;
  inline-size: var(--tbe-photo);
  block-size: var(--tbe-photo);
  overflow: hidden;
  border-radius: 50%;
  background: var(--tbe-tint);
  box-shadow: 0 0 0 1px var(--tbe-line);
  transition: box-shadow var(--tbe-base) var(--tbe-ease);
}

.tbe .tbe-person__photo img {
  display: block;
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
}

.tbe .tbe-person__photo.is-monogram span {
  color: var(--tbe-accent);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: calc(var(--tbe-photo) * 0.34);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(0.02em * var(--tbe-display-tracking));
}

.tbe .tbe-person__text {
  display: grid;
  gap: 0.1rem;
  min-inline-size: 0;
  line-height: 1.3;
}

.tbe .tbe-person__name {
  color: var(--tbe-ink);
  font-size: 0.9375rem;
  font-weight: 650;
  text-decoration: underline;
  text-decoration-color: transparent;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
  transition: text-decoration-color var(--tbe-fast) linear;
}

.tbe .tbe-cred {
  color: var(--tbe-muted);
  font-weight: 500;
}

.tbe .tbe-person__sub {
  color: var(--tbe-muted);
  font-size: 0.8125rem;
}

.tbe .tbe-person:hover .tbe-person__name {
  text-decoration-color: var(--tbe-accent);
}

.tbe .tbe-person:hover .tbe-person__photo {
  box-shadow:
    0 0 0 2px var(--tbe-surface),
    0 0 0 4px var(--tbe-accent-soft);
}

.tbe .tbe-people--plain .tbe-person {
  padding-block: 0.15rem;
}

/* ── Container widths ────────────────────────────────────────────────────── */

/* Wide (a full-width section): faculty get their own column beside the session. */
@container tbe (min-width: 60rem) {
  .tbe .tbe-session:not(.tbe-session--solo):not(.tbe-session--segment) {
    grid-template-columns: minmax(0, 1fr) var(--tbe-faculty-col);
  }

  .tbe
    .tbe-session:not(.tbe-session--solo):not(.tbe-session--segment)
    > .tbe-people {
    grid-template-columns: minmax(0, 1fr);
    padding-block-start: 0.15rem;
  }
}

/* Medium and narrow: time sits above the session, on one line. */
@container tbe (max-width: 40rem) {
  .tbe .tbe-slot,
  .tbe .tbe-slot--break {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 0.4rem;
  }

  .tbe .tbe-time {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0 0.3rem;
    align-items: baseline;
  }

  .tbe .tbe-time__start {
    color: var(--tbe-accent);
    font-size: 0.9375rem;
  }

  .tbe .tbe-time__sep {
    display: inline;
    color: var(--tbe-muted);
  }

  .tbe .tbe-time__end {
    font-size: 0.9375rem;
  }

  .tbe .tbe-slot--break {
    padding: 0.75rem 1rem;
  }

  .tbe .tbe-slot--break .tbe-time__start {
    color: var(--tbe-ink);
  }

  .tbe .tbe-slot--break .tbe-time__start,
  .tbe .tbe-slot--break .tbe-time__end {
    font-size: 0.875rem;
  }

  /* Six dates fit a phone: tighter chips. */
  .tbe .tbe-chip {
    min-inline-size: 3.4rem;
    padding: 0.4rem 0.4rem 0.45rem;
  }

  .tbe .tbe-chip__num {
    font-size: 1.3125rem;
  }

  .tbe .tbe-daynav__track {
    gap: 0.125rem;
  }

  .tbe .tbe-day__head {
    gap: 0.75rem;
  }

  .tbe .tbe-people {
    gap: 0.625rem;
  }

  .tbe .tbe-filters {
    display: grid;
  }

  .tbe .tbe-search,
  .tbe .tbe-select select {
    max-inline-size: none;
  }
}

/* ── Faculty showcase ────────────────────────────────────────────────────── */

.tbe .tbe-filters--faculty {
  margin-block: 0 clamp(1.5rem, 3vw, 2.25rem);
}

.tbe .tbe-roster {
  --tbe-card-min: 12.5rem;
  display: grid;
  grid-template-columns: repeat(
    auto-fill,
    minmax(min(100%, var(--tbe-card-min)), 1fr)
  );
  gap: clamp(1.75rem, 3.5cqi, 3rem) clamp(1rem, 2.5cqi, 2rem);
}

.tbe.tbe--cols-2 .tbe-roster {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.tbe.tbe--cols-3 .tbe-roster {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.tbe.tbe--cols-4 .tbe-roster {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
.tbe.tbe--cols-5 .tbe-roster {
  grid-template-columns: repeat(5, minmax(0, 1fr));
}
.tbe.tbe--cols-6 .tbe-roster {
  grid-template-columns: repeat(6, minmax(0, 1fr));
}

@container tbe (max-width: 52rem) {
  .tbe.tbe--cols-4 .tbe-roster,
  .tbe.tbe--cols-5 .tbe-roster,
  .tbe.tbe--cols-6 .tbe-roster {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@container tbe (max-width: 36rem) {
  .tbe .tbe-roster,
  .tbe.tbe--cols-3 .tbe-roster,
  .tbe.tbe--cols-4 .tbe-roster,
  .tbe.tbe--cols-5 .tbe-roster,
  .tbe.tbe--cols-6 .tbe-roster {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@container tbe (max-width: 20rem) {
  .tbe .tbe-roster,
  .tbe[class*="tbe--cols-"] .tbe-roster {
    grid-template-columns: minmax(0, 1fr);
  }
}

.tbe .tbe-roster__item[hidden] {
  display: none;
}

.tbe .tbe-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 1rem;
  align-content: start;
  inline-size: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  text-align: start;
  cursor: pointer;
}

.tbe .tbe-card__photo {
  position: relative;
  display: grid;
  place-items: center;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--tbe-radius);
  background: var(--tbe-tint);
  box-shadow: var(--tbe-shadow);
  isolation: isolate;
}

.tbe.tbe--photo-square .tbe-card__photo {
  aspect-ratio: 1;
}

.tbe.tbe--photo-circle .tbe-card__photo {
  aspect-ratio: 1;
  border-radius: 50%;
}

.tbe .tbe-card__photo::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: inset 0 0 0 1px rgb(13 23 54 / 0.08);
  pointer-events: none;
}

.tbe .tbe-card__photo img {
  position: absolute;
  inset: 0;
  display: block;
  inline-size: 100%;
  block-size: 100%;
  max-inline-size: none;
  object-fit: cover;
  object-position: 50% 22%;
  transition: transform 600ms var(--tbe-ease);
}

/* No photo: the initials, set large on the event tint with a horizon rule. */
.tbe .tbe-card__photo.is-monogram {
  background:
    linear-gradient(
      to top,
      color-mix(in srgb, var(--tbe-accent-soft) 14%, transparent),
      transparent 55%
    ),
    var(--tbe-tint);
}

.tbe .tbe-card__photo.is-monogram span {
  color: var(--tbe-accent);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(2.5rem, 7cqi, 3.75rem);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.03em * var(--tbe-display-tracking));
  line-height: 1;
}

.tbe .tbe-card__photo.is-monogram::before {
  content: "";
  position: absolute;
  inset-inline: 22%;
  inset-block-end: 24%;
  block-size: 2px;
  border-radius: 2px;
  background: var(--tbe-accent-soft);
  opacity: 0.55;
}

.tbe.tbe--photo-circle .tbe-card__photo.is-monogram::before {
  inset-block-end: 26%;
  inset-inline: 32%;
}

.tbe .tbe-card__text {
  display: grid;
  gap: 0.2rem;
  line-height: 1.35;
}

.tbe .tbe-card__name {
  color: var(--tbe-ink);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(1.0625rem, 0.95rem + 0.4cqi, 1.25rem);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.015em * var(--tbe-display-tracking));
  text-decoration: underline;
  text-decoration-color: transparent;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
  transition: text-decoration-color var(--tbe-fast) linear;
}

.tbe .tbe-card__cred {
  color: var(--tbe-accent);
  font-size: 0.8125rem;
  font-weight: 650;
  letter-spacing: 0.01em;
}

.tbe .tbe-card__role {
  margin-block-start: 0.2rem;
  color: var(--tbe-text);
  font-size: 0.875rem;
}

.tbe .tbe-card__org {
  color: var(--tbe-muted);
  font-size: 0.875rem;
}

.tbe .tbe-card__bio {
  margin-block-start: 0.35rem;
  color: var(--tbe-text);
  font-size: 0.875rem;
  line-height: 1.5;
}

.tbe .tbe-card__sessions {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
  margin-block-start: 0.5rem;
  color: var(--tbe-accent);
  font-size: 0.8125rem;
  font-variant-numeric: tabular-nums;
  font-weight: 650;
}

.tbe .tbe-card__sessions .tbe-icon {
  transition: transform var(--tbe-base) var(--tbe-ease);
}

.tbe .tbe-card:hover .tbe-card__photo img {
  transform: scale(1.035);
}

.tbe .tbe-card:hover .tbe-card__name {
  text-decoration-color: var(--tbe-accent);
}

.tbe .tbe-card:hover .tbe-card__sessions .tbe-icon {
  transform: translateX(3px);
}

.tbe .tbe-card:focus-visible {
  outline-offset: 6px;
}

/* ── Dialog: faculty profile and room map ────────────────────────────────── */

.tbe .tbe-dialog {
  inline-size: min(42rem, calc(100vw - 2rem));
  max-block-size: min(88vh, 54rem);
  padding: 0;
  border: 0;
  border-radius: var(--tbe-radius);
  background: var(--tbe-surface);
  color: var(--tbe-text);
  box-shadow: var(--tbe-shadow-lg);
  font-family: var(--tbe-font, inherit);
  line-height: 1.6;
  overflow: auto;
  overscroll-behavior: contain;
  opacity: 1;
  transform: none;
  transition:
    opacity var(--tbe-base) var(--tbe-ease),
    transform 380ms var(--tbe-ease),
    overlay var(--tbe-base) allow-discrete,
    display var(--tbe-base) allow-discrete;
}

@starting-style {
  .tbe .tbe-dialog[open] {
    opacity: 0;
    transform: translateY(14px) scale(0.985);
  }
}

.tbe .tbe-dialog::backdrop {
  background: rgb(8 15 38 / 0.5);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
}

.tbe .tbe-dialog:has(.tbp-map) {
  inline-size: min(68rem, calc(100vw - 2rem));
}

.tbe .tbe-dialog form {
  position: sticky;
  top: 0;
  z-index: 2;
  display: flex;
  justify-content: flex-end;
  block-size: 0;
}

.tbe .tbe-dialog__close {
  display: grid;
  place-items: center;
  inline-size: 2.5rem;
  block-size: 2.5rem;
  margin: 0.875rem 0.875rem 0 0;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: color-mix(in srgb, var(--tbe-surface) 82%, transparent);
  color: var(--tbe-ink);
  cursor: pointer;
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  box-shadow: 0 0 0 1px var(--tbe-line);
  transition: background-color var(--tbe-fast) linear;
}

.tbe .tbe-dialog__close:hover {
  background: var(--tbe-tint);
}

.tbe .tbe-dialog__close .tbe-icon {
  inline-size: 1.15rem;
  block-size: 1.15rem;
}

.tbe .tbe-dialog__body {
  display: grid;
  gap: 1rem;
  padding: clamp(1.5rem, 4vw, 2.5rem);
}

.tbe .tbe-dialog__body .tbp-dialog-head {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 1.25rem;
  align-items: end;
  padding-inline-end: 2.5rem;
}

.tbe .tbe-dialog__body .tbp-dialog-head img {
  inline-size: 6.5rem;
  block-size: 8rem;
  border-radius: var(--tbe-radius-sm);
  object-fit: cover;
  object-position: 50% 22%;
  box-shadow: var(--tbe-shadow);
}

.tbe .tbe-dialog__body h3 {
  color: var(--tbe-ink);
  font-family: var(--tbe-font-display, var(--tbe-font, inherit));
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  font-weight: var(--tbe-display-weight);
  letter-spacing: calc(-0.022em * var(--tbe-display-tracking));
  line-height: 1.12;
  text-wrap: balance;
}

.tbe .tbe-dialog__body .tbp-dialog-sub {
  margin-block-start: 0.35rem;
  color: var(--tbe-muted);
  font-size: 0.9375rem;
  line-height: 1.45;
}

.tbe .tbe-dialog__body .tbp-content {
  max-inline-size: 65ch;
  color: var(--tbe-text);
}

.tbe .tbe-dialog__body .tbp-content > :where(p, ul, ol) {
  margin: 0 0 0.75rem;
}

.tbe .tbe-dialog__body .tbp-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
  font-size: 0.875rem;
}

.tbe .tbe-dialog__body .tbp-links a {
  color: var(--tbe-accent);
  font-weight: 650;
  text-underline-offset: 0.22em;
}

.tbe .tbe-dialog__body h4 {
  margin-block-start: 0.5rem;
  padding-block-start: 1rem;
  border-block-start: 1px solid var(--tbe-line);
  color: var(--tbe-ink);
  font-size: 0.9375rem;
  font-weight: 650;
}

.tbe .tbe-dialog__body .tbp-dialog-sessions {
  display: grid;
  gap: 0.625rem;
  margin: 0;
  padding: 0;
  list-style: none;
  color: var(--tbe-muted);
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
}

.tbe .tbe-dialog__body .tbp-dialog-sessions :where(a, strong) {
  display: block;
  color: var(--tbe-ink);
  font-size: 0.9688rem;
  font-weight: 600;
  line-height: 1.35;
}

.tbe .tbe-dialog__body .tbp-dialog-sessions a {
  text-decoration: underline;
  text-decoration-color: color-mix(in srgb, var(--tbe-accent) 40%, transparent);
  text-underline-offset: 0.22em;
}

.tbe .tbe-dialog__body .tbp-dialog-sessions a:hover {
  color: var(--tbe-accent);
  text-decoration-color: currentColor;
}

.tbe .tbe-dialog__body .tbp-dialog-when {
  display: block;
  margin-block-start: 0.15rem;
}

.tbe .tbe-dialog__body .tbp-dash {
  display: none;
}

.tbe .tbe-dialog .tbp-map {
  position: relative;
  line-height: 0;
}

.tbe .tbe-dialog .tbp-map img {
  display: block;
  inline-size: 100%;
  block-size: auto;
  border-radius: var(--tbe-radius-sm);
}

.tbe .tbe-dialog .tbp-map svg {
  position: absolute;
  inset: 0;
  inline-size: 100%;
  block-size: 100%;
  overflow: visible;
}

.tbe .tbe-dialog .tbp-map polygon {
  fill: transparent;
  stroke: color-mix(in srgb, var(--tbe-accent) 35%, transparent);
  stroke-width: 2;
  vector-effect: non-scaling-stroke;
}

.tbe .tbe-dialog .tbp-map polygon.is-target {
  fill: color-mix(in srgb, var(--tbe-accent-soft) 32%, transparent);
  stroke: var(--tbe-accent);
  stroke-width: 3;
}

.tbe .tbe-dialog .tbp-map-label {
  fill: var(--tbe-ink);
  font-weight: 700;
  text-anchor: middle;
  dominant-baseline: middle;
  paint-order: stroke;
  stroke: #ffffff;
  stroke-width: 4px;
  vector-effect: non-scaling-stroke;
}

/* On phones the dialog is a bottom sheet. */
@media (max-width: 40rem) {
  .tbe .tbe-dialog {
    inline-size: 100vw;
    max-inline-size: 100vw;
    max-block-size: 90vh;
    margin: auto 0 0;
    border-end-start-radius: 0;
    border-end-end-radius: 0;
  }

  @starting-style {
    .tbe .tbe-dialog[open] {
      opacity: 1;
      transform: translateY(100%);
    }
  }

  .tbe .tbe-dialog__body .tbp-dialog-head {
    grid-template-columns: minmax(0, 1fr);
    padding-inline-end: 0;
  }

  .tbe .tbe-dialog__body .tbp-dialog-head img {
    inline-size: 5.5rem;
    block-size: 6.75rem;
  }
}

/* ── Theme resets ────────────────────────────────────────────────────────────
 * Themes style every button and link (Hello Elementor: a filled hover/focus state, nowrap,
 * padding and a border; others underline links). These selectors outrank those rules so the
 * displays look the same on any theme. */

.tbe button.tbe-chip,
.tbe button.tbe-person,
.tbe button.tbe-card,
.tbe button.tbe-room--map,
.tbe button.tbe-dialog__close {
  min-block-size: 0;
  white-space: normal;
  text-transform: none;
  user-select: auto;
  box-sizing: border-box;
}

.tbe a.tbe-chip,
.tbe a.tbe-chip:is(:hover, :focus, :visited),
.tbe .tbe-links a,
.tbe .tbe-links a:visited {
  text-decoration: none;
}

.tbe a.tbe-chip:is(:hover, :focus),
.tbe button.tbe-chip:is(:hover, :focus) {
  border-radius: var(--tbe-radius-sm);
  background: var(--tbe-tint);
  color: var(--tbe-ink);
}

.tbe :is(a, button).tbe-chip.is-active:is(:hover, :focus) {
  background: transparent;
  color: var(--tbe-on-ink);
}

.tbe
  .tbe-daynav:not(.has-mark)
  :is(a, button).tbe-chip.is-active:is(:hover, :focus) {
  background: var(--tbe-ink);
}

.tbe a.tbe-chip:visited:not(.is-active) {
  color: var(--tbe-text);
}

.tbe button.tbe-person:is(:hover, :focus),
.tbe button.tbe-card:is(:hover, :focus) {
  border-radius: var(--tbe-radius-sm);
  background: none;
  color: inherit;
  border-color: transparent;
}

.tbe button.tbe-card:is(:hover, :focus) {
  border-radius: 0;
}

.tbe button.tbe-room--map:is(:hover, :focus) {
  border-radius: 0;
  background: none;
  color: var(--tbe-accent);
}

.tbe .tbe-dialog button.tbe-dialog__close:is(:hover, :focus) {
  border-radius: 50%;
  background: var(--tbe-tint);
  color: var(--tbe-ink);
  border-color: transparent;
}

/* ── Motion and print ────────────────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
  .tbe *,
  .tbe *::before,
  .tbe *::after,
  .tbe .tbe-dialog {
    transition-duration: 1ms !important;
  }

  .tbe .tbe-card:hover .tbe-card__photo img {
    transform: none;
  }
}

@media print {
  .tbe .tbe-daynav,
  .tbe .tbe-filters,
  .tbe .tbe-dialog {
    display: none !important;
  }

  .tbe .tbe-day[hidden] {
    display: block !important;
  }

  .tbe .tbe-slot,
  .tbe .tbe-card {
    break-inside: avoid;
  }

  .tbe .tbe-about::details-content {
    block-size: auto;
    content-visibility: visible;
  }
}
