/* Speaker modal — content of the fragment served by /speaker-popup/{id}
   (snippets/agenda/speaker-modal-content.php).

   The dialog chrome (`.agenda-modal*`: backdrop, panel, close button,
   loading/error states, scroll lock) is generic and lives in
   agenda.modal.css — load that first. 1rem = 1px (6.25% root). */

.speaker-modal__header {
    display: flex;
    gap: 24rem;
    align-items: flex-start;
    margin-bottom: 24rem;
}
.speaker-modal__photo {
    width: 120px;
    height: 120px;
    object-fit: cover;
    border-radius: 50%;
    flex-shrink: 0;
}
.speaker-modal__name { margin: 0 0 5rem; font-size: 22rem; }
.speaker-modal__position { color: #555; font-style: italic; margin: 3rem 0; }
.speaker-modal__affiliation { margin: 3rem 0; }
.speaker-modal__social { font-size: 14rem; margin: 5rem 0; }
.speaker-modal__bio {
    line-height: 1.5;
    font-size: 15rem;
    border-top: 1px solid #eee;
    padding-top: 16rem;
}
.speaker-modal__sessions { border-top: 1px solid #eee; padding-top: 16rem; margin-top: 16rem; }
.speaker-modal__sessions h3 { margin: 0 0 8rem; font-size: 16rem; }
.speaker-modal__sessions ul { padding-left: 19rem; margin: 0; }

/* Footer of the fragment. Flex, because modal.js may inject an
   `.agenda-modal__back-link` here (stacked modals) that has to sit at the
   left while "Full profile →" stays at the right edge. */
.speaker-modal__detail-link {
    border-top: 1px solid #eee;
    padding-top: 16rem;
    margin-top: 16rem;
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 16rem;
}
