/* ══════════════════════════════════════════════════════════════
   Event List — Liste des événements
   ══════════════════════════════════════════════════════════════ */

.event-list {
    padding: var(--spacing-xl) 0 var(--spacing-3xl);
}

.event-list__header {
    margin-bottom: var(--spacing-lg);
}

.event-list__title {
    font-size: var(--font-size-2xl);
    font-weight: 300;
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

@media (min-width: 640px) {
    .event-list__title { font-size: var(--font-size-3xl); }
}

.event-list__subtitle {
    margin-top: var(--spacing-xs);
    color: var(--color-text-light);
}

/* Onglets */
.event-list__tabs {
    display: flex;
    gap: var(--spacing-xs);
    margin-bottom: var(--spacing-xl);
    border-bottom: 2px solid var(--color-border);
}

.event-list__tab {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    padding: var(--spacing-sm) var(--spacing-lg);
    margin-bottom: -2px;
    font-size: var(--font-size-sm);
    font-weight: 500;
    text-decoration: none;
    color: var(--color-text-light);
    border-bottom: 2px solid transparent;
    transition: color 0.15s ease, border-color 0.15s ease;
}

.event-list__tab:hover {
    color: var(--color-text);
}

.event-list__tab--active {
    color: var(--color-primary);
    border-bottom-color: var(--color-primary);
    font-weight: 600;
}

.event-list__tab-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.25rem;
    height: 1.25rem;
    padding: 0 0.3rem;
    border-radius: 100px;
    font-size: 0.6875rem;
    font-weight: 700;
    line-height: 1;
    background: var(--color-primary-light);
    color: var(--color-primary);
}

.event-list__tab--active .event-list__tab-count {
    background: var(--color-primary);
    color: #fff;
}

.event-list__grid {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-md);
}

.event-list__empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--spacing-md);
    padding: var(--spacing-3xl) var(--spacing-md);
    color: var(--color-text-light);
    text-align: center;
}

.event-list__empty svg { opacity: 0.4; }

/* ══════════════════════════════════════════════════════════════
   Event Card — Card liste (reprise du style agenda homepage)
   ══════════════════════════════════════════════════════════════ */

.event-card {
    background: #fff;
    border-radius: var(--radius-md);
    overflow: hidden;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
    transition: box-shadow 0.2s ease;
}

.event-card:hover {
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
}

.event-card__link {
    display: flex;
    align-items: stretch;
    text-decoration: none;
    color: inherit;
}

/* Date column */
.event-card__date {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.125rem;
    min-width: 5rem;
    padding: var(--spacing-md);
    background: var(--color-primary);
    color: #fff;
}

.event-card__date--partner { background: #16a34a; }

.event-card__date-block {
    display: flex;
    flex-direction: column;
    align-items: center;
    line-height: 1;
}

.event-card__day {
    font-size: var(--font-size-xl);
    font-weight: 700;
}

.event-card__month {
    font-size: var(--font-size-xs);
    font-weight: 600;
    opacity: 0.85;
}

.event-card__date-arrow {
    opacity: 0.6;
}

.event-card__year {
    font-size: 0.625rem;
    opacity: 0.6;
    margin-top: 0.125rem;
}

/* Body */
.event-card__body {
    display: flex;
    flex-direction: column;
    flex: 1;
    padding: var(--spacing-md) var(--spacing-lg);
    min-width: 0;
}

.event-card__tags {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-xs);
    margin-bottom: var(--spacing-xs);
}

.event-card__type-badge {
    font-size: var(--font-size-xs);
    font-weight: 600;
    color: var(--color-primary);
}

.event-card__format-badge {
    font-size: 0.625rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 0.0625rem 0.375rem;
    border-radius: var(--radius-sm);
    background: var(--color-bg-light);
    color: var(--color-text-light);
}

.event-card__format-badge--online { background: #e8f5e9; color: #2e7d32; }
.event-card__format-badge--hybrid { background: #fff3e0; color: #e65100; }

.event-card__organizer {
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
}

.event-card__type-badge + .event-card__organizer::before,
.event-card__format-badge + .event-card__organizer::before {
    content: '·';
    margin-right: var(--spacing-xs);
}

.event-card__title {
    font-size: var(--font-size-base);
    font-weight: 600;
    line-height: var(--line-height-tight);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

@media (min-width: 640px) {
    .event-card__title { font-size: var(--font-size-lg); }
}

.event-card__excerpt {
    margin-top: var(--spacing-xs);
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.event-card__meta {
    margin-top: auto;
    padding-top: var(--spacing-sm);
}

.event-card__location {
    display: flex;
    align-items: center;
    gap: var(--spacing-xs);
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
}

.event-card__arrow {
    flex-shrink: 0;
    align-self: center;
    color: var(--color-border);
    margin-right: var(--spacing-md);
    transition: color 0.15s ease, transform 0.15s ease;
}

.event-card:hover .event-card__arrow {
    color: var(--color-primary);
    transform: translateX(2px);
}

/* ══════════════════════════════════════════════════════════════
   Event Show — Détail simple événement
   ══════════════════════════════════════════════════════════════ */

.event-show {
    padding: var(--spacing-xl) 0 var(--spacing-3xl);
}

.event-show__container {
    max-width: 56rem;
    margin: 0 auto;
    padding: 0 var(--spacing-md);
}

.event-show__header {
    padding-bottom: var(--spacing-xl);
    border-bottom: 1px solid var(--color-border);
    margin-bottom: var(--spacing-xl);
}

.event-show__badges {
    display: flex;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-md);
}

.event-show__type-badge {
    display: inline-flex;
    padding: 0.1875rem 0.625rem;
    border-radius: 100px;
    font-size: var(--font-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    background: var(--color-primary-light);
    color: var(--color-primary);
}

.event-show__format-badge {
    display: inline-flex;
    padding: 0.1875rem 0.625rem;
    border-radius: 100px;
    font-size: var(--font-size-xs);
    font-weight: 600;
    background: var(--color-bg-light);
    color: var(--color-text-light);
}

.event-show__title {
    font-size: var(--font-size-2xl);
    font-weight: 700;
    line-height: var(--line-height-tight);
    margin-bottom: var(--spacing-lg);
}

@media (min-width: 640px) {
    .event-show__title { font-size: var(--font-size-3xl); }
}

.event-show__key-info {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
}

.event-show__info-item {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.event-show__info-item svg { flex-shrink: 0; color: var(--color-primary); }

.event-show__cta {
    margin-top: var(--spacing-lg);
}

.event-show__register-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-sm);
    padding: 0.625rem 1.5rem;
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-decoration: none;
    color: #fff;
    background: var(--color-primary);
    transition: background-color 0.15s ease;
}

.event-show__register-btn:hover { background: var(--color-primary-dark); }

.event-show__description {
    font-size: var(--font-size-lg);
    line-height: var(--line-height-base);
    color: var(--color-text-light);
    margin-bottom: var(--spacing-xl);
}

.event-show__section-title {
    font-size: var(--font-size-lg);
    font-weight: 600;
    margin-bottom: var(--spacing-md);
}

.event-show__venue {
    margin-top: var(--spacing-xl);
    padding-top: var(--spacing-xl);
    border-top: 1px solid var(--color-border);
}

.event-show__venue-card {
    padding: var(--spacing-md) var(--spacing-lg);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.event-show__venue-name { font-weight: 600; }
.event-show__venue-address { font-size: var(--font-size-sm); color: var(--color-text-light); margin-top: var(--spacing-xs); }

.event-show__footer {
    display: flex;
    align-items: center;
    gap: var(--spacing-md);
    margin-top: var(--spacing-xl);
    padding-top: var(--spacing-xl);
    border-top: 1px solid var(--color-border);
}

.event-show__share-label { font-size: var(--font-size-sm); font-weight: 600; color: var(--color-text-light); }
.event-show__share-links { display: flex; gap: var(--spacing-sm); }

/* ══════════════════════════════════════════════════════════════
   Event Minisite — Layout, navigation, pages
   ══════════════════════════════════════════════════════════════ */

/* `position: fixed` (aligné newsletter) : la barre reste visible en
   permanence au scroll, indépendamment du parent `<header>` qui se
   termine quand on entre dans `<main>`. Compensation hauteur via
   padding-top sur `.minisite-header` pour éviter que le hero soit
   masqué au chargement. */
.minisite-header__bar {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 10;
    background: linear-gradient(135deg, var(--color-navy) 0%, var(--color-primary-dark) 100%);
    color: #fff;
}

.minisite-header {
    padding-top: 3rem;
}

/* Aligné sur `nl-minisite-header__bar-inner` (newsletter) : ligne flex
   à 3rem de haut, retour à gauche / centre / actions à droite. */
.minisite-header__bar-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 3rem;
}

.minisite-header__back {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    font-size: var(--font-size-sm);
    color: rgba(255, 255, 255, 0.8);
    transition: color 0.15s ease;
}

.minisite-header__back:hover {
    color: #fff;
}

.minisite-header__info {
    display: none;
    align-items: center;
    gap: 0.5rem;
    padding-inline: 1rem;
    font-size: var(--font-size-xs);
    color: rgba(255, 255, 255, 0.85);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
    flex: 1;
    justify-content: center;
}

@media (min-width: 640px) {
    .minisite-header__info { display: flex; }
}

.minisite-header__title {
    font-weight: 600;
    color: #fff;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

/* Le détail (date · ville) est masqué tant que la largeur ne libère pas
   au moins lg (1024px) : sur tablette / petit desktop, le lien retour
   long et les 6 boutons d'actions ne laissent pas assez de place pour
   afficher titre + détail sans tronquer brutalement. */
.minisite-header__detail {
    display: none;
    opacity: 0.75;
    overflow: hidden;
    text-overflow: ellipsis;
}

@media (min-width: 1024px) {
    .minisite-header__detail { display: inline; }
}

/* Actions à droite : partage, impression, marque-page.
   Alignées sur le pattern `nl-minisite-header__actions` (newsletter). */
.minisite-header__actions {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
}

/* Boutons de partage sur fond navy : pastille carrée arrondie légère,
   texte blanc translucide qui s'éclaire au survol. Surcharge la
   couleur sombre + flat de `.list-hero__share-buttons` (content.css).
   Trois groupes séparés visuellement : partage social · impression · bookmark. */
.minisite-header__actions .list-hero__share-buttons {
    gap: 0.25rem;
}

.minisite-header__actions .list-hero__share-buttons .share-buttons__btn--print,
.minisite-header__actions .list-hero__share-buttons .share-buttons__btn--bookmark {
    margin-left: 0.5rem;
}

.minisite-header__actions .list-hero__share-buttons .share-buttons__btn {
    width: 1.75rem;
    height: 1.75rem;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: rgba(255, 255, 255, 0.8);
    background: rgba(255, 255, 255, 0.08);
    border-radius: 0.4375rem;
    opacity: 1;
}

.minisite-header__actions .list-hero__share-buttons .share-buttons__btn:hover,
.minisite-header__actions .list-hero__share-buttons .share-buttons__btn:focus-visible,
.minisite-header__actions .list-hero__share-buttons .share-buttons__btn--active {
    color: #fff;
    background: rgba(255, 255, 255, 0.18);
}

/* Bookmark actif : vert ANCESU institutionnel + pastille assortie.
   Spec (0,5,0) bat l'override blanc (0,3,0) et le default content.css
   (0,2,0). */
.minisite-header__actions .list-hero__share-buttons .share-buttons__btn--bookmark.share-buttons__btn--active {
    color: var(--color-section-ancesu);
    background: rgba(174, 189, 21, 0.22);
}

/* ── Variante « menu nommé » du partage, sur fond navy ──
   Même composant que /portraits (`share-dropdown-group`), dont les pilules
   sont dessinées pour un fond clair : bordure grise et texte sombre y
   deviendraient illisibles. On rejoue ici le vocabulaire de la barre —
   translucide sur navy, éclaircissement au survol.

   Cette variante remplace la bulle flottante `.share-fab` sur le minisite :
   le partage vit dans la barre fixe, plus rien ne recouvre le programme. */
.minisite-header__share {
    display: flex;
    align-items: center;
    gap: 0.25rem;
}

.minisite-header__share .share-dropdown-group__btn,
.minisite-header__share .share-dropdown__summary {
    min-height: 1.75rem;
    padding: 0.25rem 0.5rem;
    border: 0;
    border-radius: 0.4375rem;
    background: rgba(255, 255, 255, 0.08);
    color: rgba(255, 255, 255, 0.85);
    font-size: var(--font-size-xs);
}

.minisite-header__share .share-dropdown-group__btn:hover,
.minisite-header__share .share-dropdown-group__btn:focus-visible,
.minisite-header__share .share-dropdown__summary:hover,
.minisite-header__share .share-dropdown__summary:focus-visible,
.minisite-header__share .share-dropdown[open] > .share-dropdown__summary {
    background: rgba(255, 255, 255, 0.18);
    color: #fff;
}

/* Bookmark actif : vert ANCESU, même signal que la variante en icônes. */
.minisite-header__share .share-dropdown-group__btn--active {
    color: var(--color-section-ancesu);
    background: rgba(174, 189, 21, 0.22);
}

/* Le menu retombe sur fond clair : il sort de la barre, il ne doit pas en
   hériter la palette. */
.minisite-header__share .share-dropdown__menu {
    color: var(--color-text);
}

/* Sous 48em, « Lire plus tard » et « Imprimer » perdent leur libellé au
   profit de leur icône : trois pilules nommées plus le lien de retour ne
   tiennent pas dans une barre de 3 rem. « Partager » garde le sien, c'est
   l'action que la barre existe pour offrir. Repli visuel seulement
   (`clip-path`), pas `display: none` — le nom reste lu à voix haute. */
@media (max-width: 48rem) {
    .minisite-header__share .share-dropdown-group__btn > span {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .minisite-header__share .share-dropdown-group__btn {
        position: relative;
        width: 1.75rem;
        padding-inline: 0;
        justify-content: center;
    }
}

.minisite-banner {
    background: linear-gradient(135deg, var(--color-navy) 0%, var(--color-primary-dark) 100%);
    color: #fff;
}

.minisite-banner--cover {
    position: relative;
    background: none;
    padding-block: var(--spacing-lg);
    overflow: hidden;
}

.minisite-banner__image {
    display: block;
    width: 100%;
    max-width: 60rem;
    height: auto;
    margin-inline: auto;
    border-radius: var(--radius-md);
}

/* ── Bandeau court des pages intérieures ──
   Le dégradé de `.minisite-banner` reste dessous : si l'image ne couvre pas
   toute la bande (format inattendu, chargement en cours), le fond n'est
   jamais blanc et le titre reste lisible. */
.minisite-banner--band {
    position: relative;
    overflow: hidden;
    min-height: clamp(7rem, 12vw, 10rem);
    display: flex;
    align-items: center;
}

/* Les trois plans sont numérotés EXPLICITEMENT. Sans cela, l'ordre de peinture
   suit le DOM : un `::before` est le premier enfant, donc l'image (déclarée
   après) le recouvrait et le voile ne servait à rien — le titre blanc
   disparaissait dans l'affiche. */
.minisite-banner__band-image {
    position: absolute;
    inset: 0;
    z-index: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
}

/* Voile obligatoire, pas décoratif : le titre est en blanc sur une image
   quelconque, dont on ne connaît ni la luminosité ni le contraste. Sans lui,
   la lisibilité dépendrait de la photo téléversée. Plus dense à gauche, où
   se pose le texte, plus transparent à droite pour laisser voir l'image.
   Volontairement DENSE, y compris à droite : une affiche porte le plus souvent
   le titre de l'événement, qui se retrouverait écrit deux fois dans la même
   bande et concurrencerait le vrai titre. L'image doit se lire comme une
   texture, pas comme un second message. */
.minisite-banner--band::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(
        to right,
        color-mix(in srgb, var(--color-navy) 94%, transparent) 0%,
        color-mix(in srgb, var(--color-navy) 88%, transparent) 45%,
        color-mix(in srgb, var(--color-navy) 72%, transparent) 100%
    );
}

.minisite-banner--band > .container {
    position: relative;
    z-index: 2;
    width: 100%;
}

/* Sur mobile le texte occupe TOUTE la largeur : un dégradé qui s'éclaircit à
   droite y laisserait le titre par-dessus la partie la moins couverte. Voile
   uniforme et dense. */
@media (max-width: 48rem) {
    .minisite-banner--band::before {
        background: color-mix(in srgb, var(--color-navy) 90%, transparent);
    }
}

.minisite-badge {
    display: inline-flex;
    padding: 0.1875rem 0.625rem;
    border-radius: 100px;
    font-size: var(--font-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    background: rgba(255, 255, 255, 0.15);
    color: #fff;
}

.minisite-banner__meta {
    margin-top: var(--spacing-sm);
    font-size: var(--font-size-sm);
    opacity: 0.85;
}

/* Navigation onglets */
.minisite-nav {
    background: #eef2f8;
}

/* Le conteneur porte les onglets ET l'appel à l'action, qui n'est pas un
   onglet : il est poussé à droite et visuellement distinct pour ne pas être
   lu comme une page de plus. Sous 48rem il repasse en pleine largeur, sous
   les onglets. */
.minisite-nav > .container {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--spacing-sm);
}

.minisite-nav > .container > .minisite-nav__list {
    flex: 1 1 auto;
}

.minisite-nav__cta {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    flex: 0 0 auto;
    margin: var(--spacing-xs) 0;
    padding: 0.4rem 0.9rem;
    border-radius: var(--radius-sm);
    background-color: var(--section-color, var(--color-primary));
    color: #fff;
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.minisite-nav__cta:hover {
    background-color: var(--color-primary-dark);
}

.minisite-nav__cta--disabled {
    background-color: transparent;
    border: 1px solid var(--color-border);
    color: var(--color-text-light);
    font-weight: 500;
}

@media (max-width: 48rem) {
    .minisite-nav__cta {
        flex: 1 1 100%;
        justify-content: center;
    }
}

.minisite-nav__list {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    list-style: none;
    padding: 0;
    margin: 0;
}

.minisite-nav__item { list-style: none; }

/* Sous 64em, la barre défile horizontalement au lieu de se replier — motif
   `.search-tabs` de /recherche. Cinq onglets en majuscules produisaient trois
   rangées centrées, soit ~150 px avalés avant le moindre contenu, et un ordre
   de lecture brisé (la troisième rangée d'un seul onglet centré ne se lit plus
   comme une suite). Le repli était d'autant plus coûteux que la barre est déjà
   précédée d'une topbar fixe et d'un bandeau d'affiche. */
@media (max-width: 63.9375em) {
    .minisite-nav > .container {
        justify-content: flex-start;
        /* La bande touche les deux bords de l'écran : un onglet coupé au ras
           du bord est le seul indice fiable qu'il reste des onglets à droite
           (le site n'utilise pas de masque en dégradé). */
        padding-inline: 0;
    }

    .minisite-nav__list {
        flex-wrap: nowrap;
        justify-content: flex-start;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        white-space: nowrap;
        scroll-padding-inline: var(--spacing-md);
    }

    .minisite-nav__list::-webkit-scrollbar { display: none; }

    .minisite-nav__item { flex: 0 0 auto; }

    .minisite-nav__link {
        padding-inline: var(--spacing-md);
    }

    .minisite-nav__link::after {
        left: var(--spacing-md);
        right: var(--spacing-md);
    }

    /* Un menu déroulant en `position: absolute` serait rogné par le
       conteneur défilant, et il n'est de toute façon pas atteignable au
       doigt : il s'ouvre sur `:hover`/`:focus-within`, alors qu'une tape
       déclenche la navigation. L'onglet mène à sa page, qui liste les
       mêmes entrées. */
    .minisite-nav__dropdown { display: none; }
    .minisite-nav__caret { display: none; }

    .minisite-nav__cta {
        margin-inline: var(--spacing-md);
    }
}

.minisite-nav__link {
    position: relative;
    display: block;
    padding: var(--spacing-md) var(--spacing-lg);
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    text-decoration: none;
    color: var(--color-text-light);
    transition: color 0.25s ease;
}

.minisite-nav__link::after {
    content: '';
    position: absolute;
    left: var(--spacing-lg);
    right: var(--spacing-lg);
    bottom: 0.5rem;
    height: 2px;
    background: var(--color-primary);
    transform: scaleX(0);
    transform-origin: center;
    transition: transform 0.3s cubic-bezier(0.65, 0, 0.35, 1);
}

.minisite-nav__link:hover,
.minisite-nav__link:focus-visible {
    color: var(--color-primary);
}

.minisite-nav__link:hover::after,
.minisite-nav__link:focus-visible::after {
    transform: scaleX(1);
}

.minisite-nav__item--active .minisite-nav__link {
    color: var(--color-primary);
}

.minisite-nav__item--active .minisite-nav__link::after {
    transform: scaleX(1);
}

/* Contenu minisite */
.minisite-content__intro {
    max-width: 48rem;
}

.minisite-content__page-title {
    font-size: var(--font-size-xl);
    font-weight: 300;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin-bottom: var(--spacing-xl);
}

.minisite-content__highlights {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--spacing-md);
    margin-top: var(--spacing-xl);
}

@media (min-width: 640px) {
    .minisite-content__highlights { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1024px) {
    .minisite-content__highlights { grid-template-columns: repeat(3, 1fr); }
}

.minisite-highlight {
    display: flex;
    gap: var(--spacing-md);
    padding: var(--spacing-md);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.minisite-highlight svg { flex-shrink: 0; color: var(--color-primary); margin-top: 0.125rem; }
.minisite-highlight__label { font-size: var(--font-size-xs); color: var(--color-text-light); }
.minisite-highlight__value { font-weight: 600; }

.minisite-content__cta { margin-top: var(--spacing-xl); }

/* Cap la largeur du programme sur celle de l'image hero (60rem ≈ 960px)
   pour une cohérence visuelle entre l'en-tête et le contenu. Le
   `.container` global (max-width 68.125rem) est resserré localement. */
.programme > .container {
    max-width: 60rem;
}

/* Programme — header (titre + toolbar : vue + imprimer) */
.programme__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-lg);
}

/* Le h2 hérite d'un `margin-bottom: var(--spacing-xl)` qui décale son
   centre visuel en flex `align-items: center` (la boîte flex inclut le
   margin). On l'annule dans le header — le gap horizontal et le
   margin-bottom du header gèrent l'espace. Font-weight relevé en local
   (l'override global `font-weight: 300` du minisite-content__page-title
   reste light sur les autres pages minisite). */
.programme__title-row .minisite-content__page-title {
    margin-bottom: 0;
    line-height: 1;
    font-weight: 600;
}

/* Titre à gauche, actions de la page à droite, sur une seule rangée. */
.programme__title-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--spacing-md);
    width: 100%;
    flex-wrap: wrap;
}

/* Les trois actions partagent un seul vocabulaire : même pastille, même
   poids. Elles portaient trois traitements différents — pilule ourlée pour
   le téléchargement, segment gris pour la vue, pastille pleine pour les
   filtres — qui hiérarchisaient sans raison des gestes de même rang. */
.programme__actions {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    flex-shrink: 0;
}

.programme__action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.375rem;
    min-height: 2.25rem;
    padding: 0 0.75rem;
    border: 1px solid var(--color-border);
    border-radius: 999px;
    background: transparent;
    color: var(--color-primary);
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: background 150ms ease, color 150ms ease, border-color 150ms ease;
}

.programme__action:hover {
    background: var(--color-bg-light);
    border-color: var(--color-primary);
}

.programme__action:focus-visible {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}

.programme__action.is-active {
    background: var(--color-primary);
    border-color: var(--color-primary);
    color: #fff;
}

/* Sous 64em, les actions se réduisent à leur icône : le titre « PROGRAMME »
   et trois libellés ne cohabitent pas dans 412 px, et c'est cet
   empilement-là qui donnait à la tête de page son air encombré. Repli
   visuel seulement — le nom reste lu à voix haute, et `title` le rend au
   survol sur les appareils qui en ont un. */
@media (max-width: 63.9375em) {
    .programme__action {
        width: 2.75rem;
        min-height: 2.75rem;
        padding: 0;
        position: relative;
    }

    .programme__action-label {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .programme__action--print { display: none; }
}

.programme__filters-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1rem;
    height: 1rem;
    padding: 0 0.3125rem;
    margin-left: 0.125rem;
    border-radius: 999px;
    background: var(--color-accent);
    color: white;
    font-size: 0.625rem;
    font-weight: 700;
    line-height: 1;
}

.programme__action.is-active .programme__filters-badge {
    background: white;
    color: var(--color-primary);
}

/* En mobile le libellé disparaît : la pastille de compteur devient le seul
   signe qu'un filtre est posé. Elle se détache donc sur le coin de l'icône,
   au lieu de suivre un texte qui n'est plus là. */
@media (max-width: 63.9375em) {
    .programme__filters-badge {
        position: absolute;
        top: -0.125rem;
        right: -0.125rem;
        margin-left: 0;
        border: 2px solid #fff;
    }
}

/* Tracks (parcours) — badges header (legacy, n'est plus rendu côté
   programme depuis l'introduction des facets, conservé au cas où une
   autre surface les réutilise). */
.programme__tracks {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-xl);
}

.programme__track-badge {
    padding: 0.25rem 0.75rem;
    border-radius: 100px;
    font-size: var(--font-size-xs);
    font-weight: 600;
    background: var(--track-color, var(--color-primary-light));
    color: var(--color-text);
}

/* Facets de filtrage : 3 rangées (Type, Parcours, Thématique) + bouton
   « Tout désélectionner ». Chaque chip est un bouton toggle. */
.programme__facets {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-xl);
    padding: var(--spacing-md);
    border-radius: var(--radius-md);
    background: var(--color-bg-light);
}

/* Le panneau dans le flux est la surface DESKTOP. Sous 1024px — le seuil de
   `.filters-overlay` — c'est le tiroir bas qui prend le relais ; les deux
   partagent `filtersOpen`, donc sans cette bascule ils s'ouvriraient ensemble,
   l'un derrière l'autre. */
@media (max-width: 1023px) {
    .programme > .container > .programme__facets { display: none !important; }
}

/* Dans le tiroir, les facettes ne sont plus une carte posée sur la page :
   le panneau porte déjà son fond et ses marges, et chaque axe prend sa
   hauteur plutôt que de tenir sur une ligne. */
.programme__facets--sheet {
    margin-bottom: 0;
    padding: 0;
    background: transparent;
    gap: var(--spacing-lg);
}

.programme__facets--sheet .programme__facet {
    flex-direction: column;
    align-items: stretch;
    gap: var(--spacing-sm);
}

/* Plancher tactile de `mobile.css` : les pastilles de facette font 0,25 rem
   de padding pour 0,75 rem de texte en desktop, soit une cible bien sous les
   2,75 rem exigés au doigt. */
.programme__facets--sheet .programme__chip {
    min-height: 2.75rem;
    padding-inline: var(--spacing-md);
    font-size: var(--font-size-sm);
}

.programme__facets--sheet .programme__facet-label {
    min-width: 0;
}

.programme__facet {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.programme__facet-label {
    flex-shrink: 0;
    min-width: 5.5rem;
    font-size: 0.6875rem;
    font-weight: 700;
    color: var(--color-text-light);
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.programme__chips {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    flex: 1;
    min-width: 0;
}

.programme__chip {
    --chip-color: var(--color-primary);
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.25rem 0.625rem;
    border: 1px solid transparent;
    border-radius: 999px;
    background: white;
    color: var(--color-text);
    font-size: 0.75rem;
    font-weight: 500;
    cursor: pointer;
    transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
}

.programme__chip:hover {
    border-color: var(--chip-color);
    color: var(--chip-color);
}

.programme__chip.is-active {
    background: var(--chip-color);
    border-color: var(--chip-color);
    color: white;
}

.programme__chip-count {
    font-size: 0.625rem;
    font-weight: 700;
    padding: 0.0625rem 0.375rem;
    border-radius: 999px;
    background: rgba(0, 0, 0, 0.08);
    color: inherit;
}

.programme__chip.is-active .programme__chip-count {
    background: rgba(255, 255, 255, 0.25);
}

.programme__clear-filters {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin-left: auto;
    padding: 0.25rem 0.625rem;
    border: 0;
    border-radius: 999px;
    background: transparent;
    color: var(--color-text-light);
    font-size: 0.75rem;
    font-weight: 500;
    cursor: pointer;
    transition: color 120ms ease;
    flex-shrink: 0;
}

.programme__clear-filters:hover { color: var(--color-primary); }

/* Filtre actif : masquer les éléments qui ne matchent pas. `!important`
   pour overrider l'`x-show` Alpine sur le jour (qui pose un style inline
   `display: none|block` selon la vue). */
.programme__session.is-filter-hidden,
.programme__group.is-filter-hidden,
.programme__slot.is-filter-hidden,
.programme__day.is-filter-hidden {
    display: none !important;
}

/* Tabs jour */
/* Onglets de jour — même motif que la nav du minisite : au-delà de deux ou
   trois jours, un repli coûterait plus de hauteur que le premier créneau. */
.programme__days {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.5rem;
    margin-bottom: var(--spacing-lg);
    border-bottom: 1px solid var(--color-border);
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}

.programme__days::-webkit-scrollbar { display: none; }

.programme__day-tab {
    display: inline-flex;
    flex: 0 0 auto;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.125rem;
    padding: 0.75rem 1.25rem;
    white-space: nowrap;
    border: 0;
    background: transparent;
    border-bottom: 2px solid transparent;
    color: var(--color-text-light);
    cursor: pointer;
    transition: color 150ms ease, border-color 150ms ease;
    margin-bottom: -1px;
}

.programme__day-tab:hover { color: var(--color-primary); }

.programme__day-tab.is-active {
    color: var(--color-primary);
    border-bottom-color: var(--color-primary);
}

.programme__day-tab-label { font-size: var(--font-size-sm); font-weight: 700; }
.programme__day-tab-date { font-size: var(--font-size-xs); font-weight: 500; opacity: 0.8; }

/* Conteneur jour */
.programme__day { padding-top: var(--spacing-sm); }
.programme__day + .programme__day { margin-top: var(--spacing-2xl); }

/* Titre du jour : bande verte ANCESU sticky sous la topbar (3rem) pour
   garder le contexte du jour visible pendant le scroll en vue « Tout
   le programme ». z-index 5 < topbar (10) > contenu (auto). */
.programme__day-title {
    position: sticky;
    top: 3rem;
    z-index: 5;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.75rem;
    margin: 0 0 var(--spacing-lg);
    padding: 0.625rem 1rem;
    border-radius: var(--radius-md);
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
    font-size: var(--font-size-lg);
    font-weight: 700;
}

.programme__day-title-num {
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: var(--font-size-sm);
    font-weight: 800;
    padding: 0.125rem 0.5rem;
    border-radius: var(--radius-sm);
    background: var(--color-section-ancesu);
    color: white;
}

.programme__day-title-date {
    font-size: var(--font-size-base);
    font-weight: 600;
    color: var(--color-section-ancesu);
    text-transform: capitalize;
}

/* Liste de créneaux — retrait latéral symétrique pour centrer le bloc
   sous le bandeau vert ANCESU du jour (qui prend toute la largeur du
   container). */
.programme__slots {
    list-style: none;
    margin: 0;
    padding: 0 1.5rem;
}

.programme__slot {
    display: grid;
    grid-template-columns: 6.5rem 1fr;
    gap: var(--spacing-md);
    align-items: baseline;
    padding: var(--spacing-lg) 0;
}

/* Divider net entre tranches horaires. */
.programme__slot + .programme__slot {
    border-top: 1px solid var(--color-border);
}

.programme__slot:first-child { padding-top: var(--spacing-md); }

.programme__slot-time {
    color: var(--color-primary);
    font-weight: 600;
}

.programme__slot-time-start {
    font-size: var(--font-size-base);
    font-weight: 700;
}

/* Sur téléphone, la colonne d'heures fixe à 6,5 rem mangeait plus du tiers
   de la largeur utile : les titres tombaient sur quatre lignes et les
   pilules d'action s'empilaient une par ligne. L'heure passe donc en
   surtitre pleine largeur, et le contenu récupère ces ~110 px. */
@media (max-width: 640px) {
    .programme__slots { padding: 0; }

    .programme__slot {
        display: block;
        padding: var(--spacing-md) 0;
    }

    .programme__slot-time {
        margin-bottom: var(--spacing-sm);
        font-size: var(--font-size-sm);
        letter-spacing: 0.04em;
    }
}

/* Contenu d'un créneau : un ou plusieurs groupes par type empilés (ET implicite) */
.programme__slot-content {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-lg);
}

/* Groupe de sessions partageant le même type dans un même créneau */
.programme__group { --session-color: var(--color-primary); }
.programme__group--cat-program   { --session-color: var(--color-primary); }
.programme__group--cat-social    { --session-color: var(--color-accent); }
.programme__group--cat-logistics { --session-color: var(--color-text-light); }

/* Sessions logistiques et conviviales (pauses, repas, accueil, networking,
   dîner débat…) : ton désaturé pour les distinguer du programme. Eyebrow
   masqué côté template, titre italique gris uniforme entre les deux. */
.programme__group--cat-logistics .programme__session-title,
.programme__group--cat-social .programme__session-title {
    font-style: italic;
    font-weight: 600;
    color: var(--color-text-light);
}

.programme__group-header {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-bottom: var(--spacing-sm);
}

/* Salle poussée à droite de l'eyebrow du groupe — utilisée uniquement
   dans le cas single session (pour les alternatives, chaque card a sa
   propre salle dans son meta). */
.programme__group-room {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    margin-left: auto;
    font-size: 0.75rem;
    color: var(--color-text-light);
}

.programme__group-type {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.125rem 0.5rem;
    border-radius: var(--radius-sm);
    background: var(--session-color);
    color: white;
    font-size: 0.6875rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.programme__group-choose {
    font-size: 0.75rem;
    font-style: italic;
    color: var(--color-text-light);
}

/* Sessions du groupe — deux régimes seulement :
     - une seule session : pleine largeur, sans cadre ;
     - plusieurs alternatives : la MÊME liste à rail que les sous-sessions
       d'une plénière (`.programme__subsessions`).

   Le cadre gris qui les distinguait portait l'exclusivité — « voici un
   ensemble, prenez-en un » — mais l'eyebrow le dit déjà en toutes lettres,
   « au choix parmi N », juste au-dessus. Le cadre le répétait en plus lourd,
   et tranchait avec un programme par ailleurs sans bordures. Le nombre de
   formes descend de trois à deux : l'ancienne paire côte à côte séparée par
   un « OU » était le même objet — choisir parmi N — sous une troisième
   apparence, dépendante du seul fait qu'il y en ait exactement deux. */
.programme__sessions { display: block; }

.programme__sessions--alternatives {
    display: flex;
    flex-direction: column;
    padding-left: var(--spacing-md);
    border-left: 2px solid var(--session-color, var(--color-primary));
}

.programme__sessions--alternatives > .programme__session + .programme__session {
    border-top: 1px solid var(--color-border);
}

/* Carte session — pas de bordure, typo + espacement. Le titre s'enchaîne
   directement sous l'eyebrow du groupe, qui sert d'attache visuelle. */
.programme__session {
    padding: 0;
    border-radius: var(--radius-md);
    background: transparent;
    border: 0;
}

/* Option d'une liste d'alternatives : même rythme vertical qu'une
   sous-session, pour que les deux se lisent comme une seule famille. */
.programme__sessions--alternatives > .programme__session {
    padding: var(--spacing-sm) 0;
    border-radius: 0;
}

.programme__sessions--alternatives > .programme__session:first-child { padding-top: 0; }
.programme__sessions--alternatives > .programme__session:last-child { padding-bottom: 0; }

/* Le code ne passe jamais à la ligne : il reste la colonne d'attaque de
   la liste. Autorisé à se replier, il repoussait le titre sous lui une
   ligne sur deux, et le bord gauche de la liste devenait dentelé. */
.programme__sessions--alternatives .programme__session-title-row,
.programme__subsession-title-row {
    flex-wrap: nowrap;
    align-items: baseline;
}

/* Dans une liste, le code sert de colonne : largeur plancher commune pour
   que les titres s'alignent malgré des codes de longueurs différentes
   (« A09 » face à « A21a »), et calage sur la première ligne du titre —
   le centrage vertical global le ferait glisser vers le milieu d'un titre
   replié.

   Cadré à GAUCHE dans cette largeur, pas centré : centré, un code d'un
   caractère de plus déborde seul vers la gauche et casse le bord d'attaque
   de la liste. La largeur plancher suffit à aligner les titres — le
   centrage n'y contribuait pas, il ne faisait que déranger les codes. */
.programme__sessions--alternatives .programme__session-code,
.programme__subsession-title-row .programme__session-code {
    align-self: baseline;
    min-width: 3.25rem;
    justify-content: flex-start;
}

/* Title-row : code + titre de session. Les actions (« Voir le résumé »,
   « Voir le replay ») descendent dans .programme__session-actions. */
.programme__session-title-row {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.375rem 0.625rem;
}

.programme__session-title {
    font-size: var(--font-size-base);
    font-weight: 700;
    margin: 0;
    color: var(--color-text);
    line-height: 1.3;
}

/* Code de session (ex : « A3 » pour un atelier) — pastille discrète
   devant le titre. Aide les participants a reperer un atelier sur le
   plan / la signaletique. */
.programme__session-code {
    flex-shrink: 0;
    align-self: center;
    display: inline-flex;
    align-items: center;
    padding: 0.1rem 0.4rem;
    border-radius: 0.3rem;
    background: var(--color-primary-soft, var(--color-surface-muted));
    color: var(--color-primary);
    font-size: var(--font-size-xs);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.02em;
    white-space: nowrap;
}

.programme__session-code--sub {
    font-size: calc(var(--font-size-xs) * 0.95);
    padding: 0.05rem 0.35rem;
}

.programme__session-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin-top: var(--spacing-sm);
}

.programme__session-room,
.programme__session-track {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    font-size: 0.75rem;
    font-weight: 500;
}

.programme__session-room { color: var(--color-text-light); }
.programme__session-track {
    padding: 0.125rem 0.5rem;
    border-radius: var(--radius-sm);
    background: var(--track-color, var(--color-primary-light));
    color: var(--color-text);
}

.programme__session-tag {
    display: inline-flex;
    align-items: center;
    padding: 0.125rem 0.5rem;
    border-radius: var(--radius-sm);
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
    font-size: 0.75rem;
    font-weight: 500;
}

/* Intervenants de la session : « Avec Nom1, Nom2 » sous la description.
   Affiché seulement si event.features.speakers est activé. */
.programme__session-speakers {
    margin-top: var(--spacing-sm);
    font-size: 0.8125rem;
    color: var(--color-text);
}

.programme__session-speakers-label {
    font-weight: 600;
    color: var(--color-text-light);
    margin-right: 0.25rem;
}

.programme__session-speaker {
    color: var(--color-primary);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
    transition: color 120ms ease;
}

.programme__session-speaker:hover { color: var(--color-primary-dark); }

/* Intervenant sans biographie publique : nom affiché en texte simple,
   sans lien (pas d'underline ni de couleur de lien trompeuse). */
.programme__session-speaker--static {
    color: var(--color-text);
    text-decoration: none;
}

.programme__session-speaker-sep {
    margin-right: 0.25rem;
    color: var(--color-text-light);
}

/* Ligne d'actions d'une session : « Voir le résumé » + « Voir le replay »,
   pilules homogènes alignées sur une même ligne (programme → résumés / replays). */
.programme__session-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem;
    margin-top: var(--spacing-sm);
}

.programme__session-action {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.15rem 0.55rem;
    border: 1px solid var(--color-primary);
    border-radius: 999px;
    background: none;
    color: var(--color-primary);
    font: inherit;
    font-size: 0.8125rem;
    line-height: 1.3;
    text-decoration: none;
    cursor: pointer;
    transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
}

.programme__session-action:hover { background: var(--color-primary); color: #fff; }
.programme__session-action-icon { flex: 0 0 auto; }

/* Variante résumé : même pilule, teinte neutre pour distinguer la lecture
   du résumé (texte) de celle du replay (vidéo). */
.programme__session-action--abstract {
    border-color: var(--color-border);
    color: var(--color-text-light);
}

.programme__session-action--abstract:hover {
    background: var(--color-bg-light);
    border-color: var(--color-text-light);
    color: var(--color-text);
}

/* Abstract révélé sous la description par le toggle title-row. */
.programme__session-abstract {
    margin-top: var(--spacing-sm);
    padding: var(--spacing-md);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    color: var(--color-text);
    line-height: 1.6;
}

.programme__session-abstract > :first-child { margin-top: 0; }
.programme__session-abstract > :last-child { margin-bottom: 0; }

/* Bloc parcours + thématique sous la description : signale la
   classification (à qui s'adresse / sur quoi porte la session) une
   fois le contenu lu, plutôt que de polluer l'attaque visuelle. */
.programme__session-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    margin-top: var(--spacing-sm);
}

.programme__session-chips .programme__session-track,
.programme__session-chips .programme__session-tag {
    font-size: 0.75rem;
    font-weight: 500;
}

.programme__session-desc {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    margin-top: var(--spacing-sm);
    line-height: 1.5;
}

/* Sous-sessions — les interventions qui composent une plénière.
   Sans marque d'appartenance, elles se lisaient comme une suite de
   paragraphes détachés du titre qui les gouverne : même graisse, même
   couleur, aucun retrait. Un rail vertical à la couleur du type les
   rattache visuellement à leur session, et un filet fin entre chaque
   entrée redonne un rythme régulier quand elles portent des
   intervenants, un résumé ou un replay de hauteurs inégales. */
.programme__subsessions {
    list-style: none;
    margin: var(--spacing-md) 0 0;
    padding: 0 0 0 var(--spacing-md);
    border-top: 0;
    border-left: 2px solid var(--session-color, var(--color-primary));
}

.programme__subsession {
    padding: var(--spacing-sm) 0;
}

.programme__subsession:first-child { padding-top: 0; }
.programme__subsession:last-child { padding-bottom: 0; }

.programme__subsession + .programme__subsession {
    border-top: 1px solid var(--color-border);
}

.programme__subsession-title-row {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.375rem 0.625rem;
}

.programme__subsession-title {
    font-size: var(--font-size-sm);
    font-weight: 600;
    margin: 0;
    line-height: 1.35;
}

.programme__subsession-desc {
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
    margin-top: var(--spacing-xs);
    line-height: 1.5;
}

/* Sous les interventions, le même rythme que dans une carte session :
   intervenants et actions décollent d'un cran, pas de deux. */
.programme__subsession .programme__session-speakers,
.programme__subsession .programme__session-actions {
    margin-top: var(--spacing-xs);
}

/* ══════════════════════════════════════════════════════════════
   Impression — programme événement

   Stratégie : un programme dense de 2-3 jours doit tenir sur 2 pages
   max — pas 6. Objectifs :
     - masquer header minisite, navigation, toolbar, filtres, footer ;
     - dégrader l'abstract (déjà cachable par toggle) en bruit muet ;
     - réduire fortement padding/gap/font-size sans casser la lecture ;
     - jours enchaînés sans page-break-before systématique : on laisse
       le contenu couler, seul le titre du jour reste solidaire de son
       premier slot ;
     - sessions et slots `page-break-inside: avoid` pour éviter les
       coupes au milieu d'un groupe.

   Le cartouche (`.print-page`) et l'en-tête courant (`@page @top-right`)
   sont gérés par `components/print.css` — on n'y touche pas ici, on se
   contente d'ajouter les hides spécifiques au programme.
   ══════════════════════════════════════════════════════════════ */
@media print {
    /* ── Hides interface mini-site + outils interactifs ── */
    body > header,
    .minisite-header,
    .minisite-topbar,
    .minisite-nav,
    .minisite-banner,
    .minisite-hero__bookmark,
    .programme__actions,
    .programme__days,
    .programme__facets,
    .filters-overlay,
    .programme__session-actions,
    .programme__session-abstract,
    .floating-actions,
    footer,
    .footer,
    .site-footer { display: none !important; }

    /* ── Container plein papier ── */
    .container { max-width: none; padding: 0; margin: 0; }
    .minisite-content { padding: 0; }
    .programme { padding: 0; }

    /* ── Header de la page ── */
    .programme__header { margin: 0 0 0.2cm; }
    .minisite-content__page-title {
        font-size: 12pt;
        margin: 0;
    }

    /* ── Wrapper : pas de bordure tab ── */
    .programme__wrapper { border: 0; padding: 0; }

    /* ── Reset des marges p/ul héritées de print.css (0.3em sinon)
         qui s'accumulent sur des dizaines de sessions. On gère
         localement avec margin-top par bloc à la place. ── */
    .programme p,
    .programme ul,
    .programme ol,
    .programme h2,
    .programme h3,
    .programme h4,
    .programme h5 {
        margin-top: 0;
        margin-bottom: 0;
    }

    /* ── Jour : enchaîné, le bandeau vert devient un simple titre noir
         pour éviter de gaspiller des aplats colorés à l'impression. ── */
    .programme__day {
        display: block !important;
        page-break-before: auto;
        padding-top: 0;
    }
    .programme__day + .programme__day {
        margin-top: 0.2cm;
        page-break-before: auto;
    }

    .programme__day-title {
        position: static !important;
        display: block;
        margin: 0 0 0.12cm;
        padding: 0.05cm 0 0.08cm;
        border-radius: 0;
        border-bottom: 1.2pt solid #000;
        background: transparent !important;
        color: #000 !important;
        font-size: 10pt;
        page-break-after: avoid;
        page-break-inside: avoid;
        line-height: 1.2;
    }

    .programme__day-title-num {
        display: inline-block;
        padding: 0 0.18cm;
        margin-right: 0.15cm;
        background: #000 !important;
        color: #fff !important;
        font-size: 7.5pt;
    }

    .programme__day-title-date {
        font-size: 9.5pt;
        color: #000 !important;
        font-weight: 600;
    }

    /* ── Slots : grille compacte, pas de padding latéral, divider fin ── */
    .programme__slots { padding: 0 !important; margin: 0; }

    .programme__slot {
        grid-template-columns: 1.4cm 1fr;
        gap: 0.18cm;
        padding: 0.08cm 0;
        /* Pas de `page-break-inside: avoid` ici : un slot qui contient
           plusieurs groupes peut faire 10+ cm et provoquerait un gros
           blanc en bas de page. On laisse couler ; seules les sessions
           individuelles restent solidaires (cf. ci-dessous). */
    }

    .programme__slot:first-child { padding-top: 0; }

    .programme__slot + .programme__slot {
        border-top: 0.4pt solid #ddd;
    }

    .programme__slot-time { color: #000; }
    .programme__slot-time-start { font-size: 8pt; font-weight: 700; }

    /* ── Contenu du slot : gap minimal entre groupes ── */
    .programme__slot-content { gap: 0.12cm; }

    /* ── Groupe : pas de fond, eyebrow noir compact. Pas d'avoid ici
         non plus : sur des plénières avec sous-sessions, le groupe fait
         plusieurs cm et casse la pagination s'il refuse de se couper. ── */
    .programme__group { }
    .programme__group-header {
        gap: 0.15cm;
        margin-bottom: 0.04cm;
    }
    .programme__group-type {
        background: transparent !important;
        color: #000 !important;
        border: 0.5pt solid #000;
        padding: 0 0.12cm;
        font-size: 6.5pt;
        line-height: 1.4;
    }
    .programme__group-room {
        font-size: 7pt;
        color: #000 !important;
    }
    .programme__group-choose {
        font-size: 7pt;
        color: #444 !important;
    }

    /* ── Sessions : suppression aplats, padding réduit ── */
    .programme__session {
        background: transparent !important;
        border: 0 !important;
        padding: 0 !important;
        page-break-inside: avoid;
    }
    /* Alternatives : même rail fin que les sous-sessions, aucun aplat. */
    .programme__sessions--alternatives {
        background: transparent !important;
        padding-left: 0.2cm;
        border-left: 0.5pt solid #999 !important;
    }
    .programme__sessions--alternatives > .programme__session--alternative {
        border: 0 !important;
        padding: 0.03cm 0 !important;
    }
    .programme__sessions--alternatives > .programme__session + .programme__session {
        border-top: 0 !important;
    }

    .programme__session-title-row { gap: 0.1cm 0.4cm; }
    .programme__session-title { font-size: 8.5pt; line-height: 1.2; }
    .programme__session-desc {
        font-size: 7.5pt;
        color: #333 !important;
        margin-top: 0.04cm;
        line-height: 1.25;
    }
    .programme__session-meta { margin-top: 0.02cm; gap: 0.2cm; }
    .programme__session-room { color: #000 !important; font-size: 7pt; }

    /* ── Intervenants compacts : pas d'underline, pas de couleur ── */
    .programme__session-speakers {
        margin-top: 0.04cm;
        font-size: 7.5pt;
        color: #000 !important;
        line-height: 1.25;
    }
    .programme__session-speakers-label { color: #444 !important; font-weight: 600; }
    .programme__session-speaker {
        color: #000 !important;
        text-decoration: none !important;
    }
    .programme__session-speaker-sep { color: #444 !important; }

    /* ── Chips parcours + thématique : texte simple, pas de fond ── */
    .programme__session-chips {
        gap: 0.1cm;
        margin-top: 0.04cm;
    }
    .programme__session-chips .programme__session-track,
    .programme__session-chips .programme__session-tag {
        background: transparent !important;
        color: #444 !important;
        border: 0.4pt solid #ccc;
        padding: 0 0.12cm;
        font-size: 6.5pt;
        line-height: 1.4;
    }

    /* ── Sous-sessions : retrait modéré, rail noir fin ── */
    .programme__subsessions {
        margin: 0.05cm 0 0;
        padding: 0 0 0 0.2cm;
        border-left: 0.5pt solid #999 !important;
    }
    .programme__subsession {
        padding: 0.02cm 0;
        page-break-inside: avoid;
    }
    .programme__subsession + .programme__subsession { border-top: 0 !important; }
    .programme__subsession-title { font-size: 8pt; line-height: 1.2; }
    .programme__subsession-desc { font-size: 7pt; color: #333 !important; line-height: 1.25; margin-top: 0.02cm; }


    /* ── Liens : noir, pas d'underline parasite (déjà géré par le
         reset global de print.css, on insiste sur les surfaces qui
         survivent). ── */
    .programme__session a { color: #000 !important; }
}

/* Intervenants */
.speakers__grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--spacing-md);
}

@media (min-width: 640px) {
    .speakers__grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1024px) {
    .speakers__grid { grid-template-columns: repeat(3, 1fr); }
}

.speakers__card {
    display: flex;
    gap: var(--spacing-md);
    padding: var(--spacing-md);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.speakers__avatar {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 3rem;
    height: 3rem;
    flex-shrink: 0;
    border-radius: 100px;
    background: var(--color-primary-light);
    color: var(--color-primary);
}

.speakers__name { font-weight: 600; }
.speakers__name-link {
    color: var(--color-primary);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
    transition: color 120ms ease;
}
.speakers__name-link:hover { color: var(--color-primary-dark); }
.speakers__role { font-size: var(--font-size-xs); color: var(--color-primary); text-transform: capitalize; }
.speakers__bio { font-size: var(--font-size-sm); color: var(--color-text-light); margin-top: var(--spacing-xs); }
.speakers__session { font-size: var(--font-size-xs); color: var(--color-text-light); margin-top: var(--spacing-xs); font-style: italic; }

/* Infos pratiques */
/* ══════════════════════════════════════════════════════════════
   Pratique (infos) — minisite event

   Layout : container 60rem, TOC sticky sur lg+ (10rem à gauche),
   main content (50rem). Stack mobile (TOC masquée — pour gagner
   de la verticalité). Sections en bandeau vert ANCESU (vocabulaire
   inscription/programme).
   ══════════════════════════════════════════════════════════════ */

.infos { background: white; }

.infos .container {
    max-width: 60rem;
}

.infos__header {
    margin-bottom: var(--spacing-xl);
}

.infos__header .minisite-content__page-title {
    margin-bottom: 0;
    line-height: 1;
    font-weight: 600;
}

/* ── Layout : TOC + main sur lg+, stack sinon ── */
.infos__layout {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--spacing-xl);
}

@media (min-width: 64rem) {
    .infos__layout {
        grid-template-columns: 11rem 1fr;
        gap: var(--spacing-2xl);
    }
}

/* ── TOC sticky : invisible mobile, sticky lg+ ── */
.infos__toc {
    display: none;
}

@media (min-width: 64rem) {
    .infos__toc {
        display: block;
        position: sticky;
        top: var(--spacing-xl);
        align-self: start;
    }
}

.infos__toc-title {
    margin: 0 0 0.75rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid var(--color-border, #e5e7eb);
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--color-text-light);
}

.infos__toc-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
}

.infos__toc-link {
    display: block;
    padding: 0.375rem 0.625rem;
    border-left: 2px solid transparent;
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    text-decoration: none;
    transition: background 150ms ease, color 150ms ease, border-color 150ms ease;
}

.infos__toc-link:hover {
    background: var(--color-bg-light);
    color: var(--color-text);
}

.infos__toc-link.is-active {
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
    border-left-color: var(--color-section-ancesu);
    font-weight: 600;
}

/* ── Main content ── */
.infos__main {
    min-width: 0;
}

.infos__section {
    margin: 0 0 var(--spacing-2xl);
    scroll-margin-top: var(--spacing-xl);
}

.infos__section:last-child {
    margin-bottom: 0;
}

.infos__section-title {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0 0 var(--spacing-md);
    padding: 0.5rem 1rem;
    border-radius: var(--radius-md);
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
    font-size: var(--font-size-base);
    font-weight: 700;
}

.infos__section-title svg {
    flex-shrink: 0;
}

/* ── Lieu : adresse formatée ── */
.infos__venue-name {
    margin: 0;
    font-size: var(--font-size-md);
    font-weight: 700;
    color: var(--color-text);
}

.infos__venue-address {
    margin: 0.25rem 0 0;
    font-style: normal;
    color: var(--color-text-light);
    line-height: 1.5;
}

.infos__access-text {
    margin: 0;
    line-height: 1.6;
}

/* ── Lieu : bouton OSM en outline primary ── */
.infos__map-cta {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin-top: var(--spacing-md);
    padding: 0.4375rem 0.875rem;
    border: 1px solid var(--color-primary);
    border-radius: 999px;
    background: transparent;
    color: var(--color-primary);
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-decoration: none;
    transition: background 150ms ease, color 150ms ease;
}

.infos__map-cta:hover {
    background: var(--color-primary);
    color: white;
}

.infos__map-cta:focus-visible {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}

/* ── Accès en ligne ── */
.infos__online {
    padding: var(--spacing-md) var(--spacing-lg);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
    line-height: 1.6;
}

.infos__online p {
    margin: 0 0 0.5rem;
}

.infos__online p:last-child {
    margin-bottom: 0;
}

.infos__online-label {
    font-weight: 700;
    color: var(--color-text-light);
}

.infos__online-value {
    font-weight: 600;
    color: var(--color-text);
}

.infos__online-hint {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

/* ── Contacts : channels en chips ── */
.infos__contact-channels {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-bottom: var(--spacing-md);
}

.infos__contact-channel {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.5rem 0.875rem;
    border-radius: 999px;
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-decoration: none;
    transition: background 150ms ease;
}

.infos__contact-channel:hover {
    background: var(--color-accent-light, var(--color-bg-light));
}

.infos__contact-channel svg {
    flex-shrink: 0;
}

/* ── Print : pas de TOC ni de carte interactive, sections continues ── */
@media print {
    .infos__toc { display: none; }
    .infos__layout {
        display: block;
        gap: 0;
    }
    .infos__section {
        margin-bottom: 0.5cm;
        page-break-inside: avoid;
    }
    .infos__section-title {
        background: transparent;
        color: var(--color-section-ancesu);
        border-bottom: 1px solid var(--color-section-ancesu-light);
        padding: 0.1cm 0;
        margin-bottom: 0.2cm;
        border-radius: 0;
    }
    .infos__map-cta { display: none; }
    .infos__contact-channels {
        gap: 0.25rem;
    }
    .infos__contact-channel {
        background: transparent;
        color: var(--color-text);
        padding: 0;
        font-weight: 500;
    }
}

/* ══════════════════════════════════════════════════════════════
   Inscription — minisite event

   Reprise du vocabulaire visuel du programme : container 60rem,
   bandeaux de section verts ANCESU, cards sans bordure.

   Structure :
     - header : titre + badge statut (ouvert / early bird / fermé / à venir)
     - cta-zone : grand bouton primary si URL et état ouvert
     - section timeline : étapes ouverture / early / clôture
     - section tarifs : grid cards par PricingTier
     - section moyens de paiement : chips horizontaux
     - section conditions : TipTap render
   ══════════════════════════════════════════════════════════════ */

.inscription { background: white; }

.inscription .container {
    max-width: 60rem;
}

/* ── Header : titre + badge statut accolés ── */
.inscription__header {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-bottom: var(--spacing-xl);
}

.inscription__header .minisite-content__page-title {
    margin-bottom: 0;
    line-height: 1;
    font-weight: 600;
}

.inscription__status {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.25rem 0.75rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

.inscription__status--open {
    background: rgba(34, 197, 94, 0.12);
    color: #166534;
}

.inscription__status--upcoming {
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
}

.inscription__status--closed {
    background: var(--color-bg-light);
    color: var(--color-text-light);
}

/* ── CTA principal : grande zone surlignée ── */
.inscription__cta-zone {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--spacing-md);
    margin: 0 0 var(--spacing-2xl);
    padding: var(--spacing-xl);
    border-radius: var(--radius-md);
    background: var(--color-section-ancesu-light);
}

.inscription__cta-zone--muted {
    background: var(--color-bg-light);
}

.inscription__cta-text {
    flex: 1;
    min-width: 0;
}

.inscription__cta-title {
    margin: 0;
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: var(--color-text);
    line-height: 1.3;
}

.inscription__cta-hint {
    margin: 0.25rem 0 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.inscription__cta-zone--muted .inscription__cta-title {
    color: var(--color-text-light);
}

.inscription__cta-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.625rem 1.5rem;
    background: var(--color-primary);
    color: white;
    border-radius: 999px;
    font-weight: 700;
    text-decoration: none;
    font-size: var(--font-size-sm);
    transition: background 150ms ease, transform 150ms ease;
}

.inscription__cta-btn:hover {
    background: var(--color-primary-dark, var(--color-primary));
    transform: translateY(-1px);
}

.inscription__cta-btn:focus-visible {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}

/* ── Sections : bandeau de titre vert ANCESU style programme__day-title ── */
.inscription__section {
    margin: 0 0 var(--spacing-2xl);
}

.inscription__section-title {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0 0 var(--spacing-md);
    padding: 0.5rem 1rem;
    border-radius: var(--radius-md);
    background: var(--color-section-ancesu-light);
    color: var(--color-section-ancesu);
    font-size: var(--font-size-base);
    font-weight: 700;
}

.inscription__section-title svg {
    flex-shrink: 0;
}

/* ── Timeline : étapes avec marker + ligne reliante.
   Layout vertical par défaut (mobile-first) ; bascule horizontal en
   stepper à partir de lg (1024px) où la largeur du container 60rem
   suffit à présenter 3 étapes côte à côte. ── */
.inscription__timeline {
    list-style: none;
    margin: 0;
    padding: 0 0 0 0.5rem;
    position: relative;
}

.inscription__timeline-step {
    display: grid;
    grid-template-columns: 1.5rem 1fr;
    gap: var(--spacing-md);
    padding: var(--spacing-sm) 0;
    position: relative;
}

/* Ligne verticale qui relie les markers — calée sur le centre du marker
   (0.75rem from left of 1.5rem column + padding-left 0.5rem). */
.inscription__timeline::before {
    content: '';
    position: absolute;
    left: calc(0.5rem + 0.75rem - 1px);
    top: var(--spacing-md);
    bottom: var(--spacing-md);
    width: 2px;
    background: var(--color-border);
    z-index: 0;
}

/* ── Horizontal stepper sur lg+ ──
   Markers en haut, label en dessous, ligne horizontale entre eux.
   Justifie chaque étape sur sa propre colonne flex pour une distribution
   régulière, et redresse le ::before en ligne horizontale alignée sur le
   centre vertical des markers. */
@media (min-width: 64rem) {
    .inscription__timeline {
        display: flex;
        align-items: flex-start;
        gap: var(--spacing-md);
        padding: 0;
    }

    .inscription__timeline-step {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        text-align: center;
        gap: 0.5rem;
        padding: 0;
        min-width: 0;
    }

    /* Ligne horizontale entre les markers extrêmes. On utilise des
       pseudo-positions sur les steps eux-mêmes (::after sur chaque step
       sauf le dernier) pour éviter de dépasser au-delà des markers
       extrêmes — l'approche `::before` global de OL ne sait pas où se
       trouvent les markers du premier/dernier step. */
    .inscription__timeline::before {
        display: none;
    }

    .inscription__timeline-step:not(:last-child)::after {
        content: '';
        position: absolute;
        top: 0.75rem;
        left: 50%;
        right: calc(-50% - var(--spacing-md));
        height: 2px;
        background: var(--color-border);
        z-index: 0;
    }
}

.inscription__timeline-marker {
    width: 1.5rem;
    height: 1.5rem;
    border-radius: 100px;
    background: white;
    border: 2px solid var(--color-border);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-text-light);
    z-index: 1;
    flex-shrink: 0;
}

.inscription__timeline-step--done .inscription__timeline-marker {
    background: var(--color-primary);
    border-color: var(--color-primary);
    color: white;
}

.inscription__timeline-step--current .inscription__timeline-marker {
    background: var(--color-accent, #f59e0b);
    border-color: var(--color-accent, #f59e0b);
    color: white;
    box-shadow: 0 0 0 4px var(--color-accent-light, #fef3c7);
}

.inscription__timeline-body { min-width: 0; }

.inscription__timeline-date {
    margin: 0;
    font-size: var(--font-size-sm);
    font-weight: 700;
    color: var(--color-text);
}

.inscription__timeline-label {
    margin: 0.125rem 0 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.inscription__timeline-step--current .inscription__timeline-date {
    color: var(--color-accent, #b45309);
}

.inscription__timeline-step--pending .inscription__timeline-date,
.inscription__timeline-step--pending .inscription__timeline-label {
    color: var(--color-text-light);
}

/* ── Tarifs : grid cards sans bordure ── */
.inscription__tiers {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
    gap: var(--spacing-md);
}

.inscription__tier {
    padding: var(--spacing-lg);
    border-radius: var(--radius-md);
    background: var(--color-bg-light);
}

.inscription__tier-category {
    margin: 0 0 var(--spacing-sm);
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--color-text-light);
}

.inscription__tier-price {
    margin: 0;
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--color-text);
    line-height: 1.1;
}

/* Mention temporelle sous le prix : « Jusqu'au DATE » avant la deadline,
   « Depuis le DATE » après. Discrète, en italique pour signaler que
   c'est une note de contexte, pas une donnée principale. */
.inscription__tier-mention {
    margin: 0.375rem 0 0;
    font-size: 0.75rem;
    font-style: italic;
    color: var(--color-text-light);
}

/* Prix de bascule visible pendant la période early bird : permet à
   l'utilisateur d'anticiper combien il paiera s'il s'inscrit après la
   deadline. Présenté comme une ligne secondaire — séparée par un
   filet, montant moins prominent que le prix courant mais lisible. */
.inscription__tier-next {
    display: flex;
    align-items: baseline;
    gap: 0.375rem;
    margin: 0.625rem 0 0;
    padding-top: 0.5rem;
    border-top: 1px solid var(--color-border);
}

.inscription__tier-next-amount {
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--color-text);
}

.inscription__tier-next-label {
    font-size: 0.75rem;
    font-style: italic;
    color: var(--color-text-light);
}

/* ── Moyens de paiement : chips horizontaux ── */
.inscription__methods {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    list-style: none;
    margin: 0;
    padding: 0;
}

.inscription__method {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.375rem 0.75rem;
    background: var(--color-bg-light);
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 500;
    color: var(--color-text);
}

.inscription__method svg {
    color: var(--color-text-light);
    flex-shrink: 0;
}

/* ── Note capacité ── */
.inscription__capacity-note {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin: 0 0 var(--spacing-xl);
    padding: 0.5rem 0.875rem;
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
    font-size: 0.75rem;
    color: var(--color-text-light);
}

.inscription__capacity-note svg {
    flex-shrink: 0;
    color: var(--color-text-light);
}

/* ── Conditions + Contacts : bloc TipTap dans bg-light ── */
.inscription__conditions,
.inscription__contacts {
    padding: var(--spacing-lg);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    line-height: 1.6;
}

.inscription__conditions > :first-child,
.inscription__contacts > :first-child { margin-top: 0; }
.inscription__conditions > :last-child,
.inscription__contacts > :last-child { margin-bottom: 0; }

.inscription__excerpt {
    color: var(--color-text-light);
    font-size: var(--font-size-base);
}

@media (max-width: 640px) {
    .inscription__cta-zone { flex-direction: column; align-items: stretch; }
    .inscription__cta-btn { justify-content: center; }
}

/* Partenaires */
.partners__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
    gap: var(--spacing-lg);
}

.partners__card {
    text-align: center;
    padding: var(--spacing-lg);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.partners__logo {
    max-width: 8rem;
    max-height: 4rem;
    object-fit: contain;
    margin: 0 auto var(--spacing-md);
}

.partners__logo-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 4rem;
    height: 4rem;
    margin: 0 auto var(--spacing-md);
    border-radius: var(--radius-md);
    background: var(--color-bg-white);
    color: var(--color-text-light);
}

.partners__name { font-weight: 600; margin-bottom: var(--spacing-xs); }
.partners__desc { font-size: var(--font-size-sm); color: var(--color-text-light); }
.partners__link { display: inline-block; margin-top: var(--spacing-sm); font-size: var(--font-size-sm); color: var(--color-primary); }

.partners__card--link {
    display: block;
    text-decoration: none;
    color: inherit;
    transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}
.partners__card--link:hover,
.partners__card--link:focus-visible {
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
    background: var(--color-bg-white);
}

.partners { background: white; }

.partners .container {
    max-width: 60rem;
}

/* Présentation éditoriale + dossier partenariat */
.partners__intro {
    margin-bottom: var(--spacing-xl);
}

.partners__dossier {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-md);
    align-items: flex-start;
    padding: var(--spacing-lg) var(--spacing-xl);
    margin-bottom: var(--spacing-2xl);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

@media (min-width: 640px) {
    .partners__dossier {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
    }
}

.partners__dossier-text { flex: 1; }
.partners__dossier-eyebrow {
    font-size: var(--font-size-xs);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--color-primary);
    font-weight: 600;
    margin-bottom: var(--spacing-2xs);
}
.partners__dossier-title {
    font-size: var(--font-size-lg);
    font-weight: 600;
    margin-bottom: var(--spacing-2xs);
}
.partners__dossier-hint {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}
.partners__dossier-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    padding: var(--spacing-sm) var(--spacing-lg);
    background: var(--color-primary);
    color: #ffffff;
    border-radius: var(--radius-md);
    text-decoration: none;
    font-weight: 500;
    transition: background 0.18s ease;
    white-space: nowrap;
}
.partners__dossier-btn:hover,
.partners__dossier-btn:focus-visible {
    background: var(--color-primary-dark);
    color: #ffffff;
}

/* Sections par niveau */
.partners__sections {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-2xl);
}

.partners__section-title {
    font-size: var(--font-size-md);
    font-weight: 600;
    margin-bottom: var(--spacing-lg);
    color: var(--color-text);
    padding-bottom: var(--spacing-sm);
    border-bottom: 1px solid var(--color-border-muted, var(--color-bg-light));
}

/* Contributions */
.contributions__list {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-md);
    max-width: 48rem;
}

.contributions__item {
    padding: var(--spacing-lg);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.contributions__title { font-weight: 600; margin-bottom: var(--spacing-xs); }
.contributions__authors { font-size: var(--font-size-sm); color: var(--color-primary); font-weight: 500; }
.contributions__abstract { font-size: var(--font-size-sm); color: var(--color-text-light); margin-top: var(--spacing-xs); }

.contributions__download {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    margin-top: var(--spacing-sm);
    font-size: var(--font-size-sm);
    color: var(--color-primary);
    font-weight: 500;
}

/* Galerie */
.gallery__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(12.5rem, 1fr));
    gap: var(--spacing-sm);
}

.gallery__item {
    aspect-ratio: 4 / 3;
    border-radius: var(--radius-md);
    overflow: hidden;
    cursor: pointer;
    border: 0;
    padding: 0;
    background: var(--color-bg-light);
}

.gallery__item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--transition-base);
}

.gallery__item:hover img { transform: scale(1.05); }

/* Lightbox */
.gallery__lightbox {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: center;
}

.gallery__lightbox-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.9);
}

.gallery__lightbox-content {
    position: relative;
    max-width: 90vw;
    max-height: 80vh;
}

.gallery__lightbox-img {
    max-width: 90vw;
    max-height: 80vh;
    object-fit: contain;
    border-radius: var(--radius-md);
}

.gallery__lightbox-close {
    position: absolute;
    top: -2.5rem;
    right: 0;
    background: none;
    border: none;
    color: #fff;
    cursor: pointer;
    padding: 0.5rem;
}

.gallery__lightbox-prev,
.gallery__lightbox-next {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    background: rgba(255, 255, 255, 0.15);
    border: none;
    color: #fff;
    cursor: pointer;
    padding: 0.75rem;
    border-radius: 50%;
    transition: background var(--transition-fast);
}

.gallery__lightbox-prev:hover,
.gallery__lightbox-next:hover { background: rgba(255, 255, 255, 0.3); }

.gallery__lightbox-prev { left: -3.75rem; }
.gallery__lightbox-next { right: -3.75rem; }

.gallery__lightbox-caption {
    text-align: center;
    color: rgba(255, 255, 255, 0.7);
    font-size: var(--font-size-sm);
    margin-top: var(--spacing-sm);
}

/* Replays */
.replays__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
    gap: var(--spacing-lg);
}

.replays__card {
    display: flex;
    flex-direction: column;
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
    overflow: hidden;
    text-decoration: none;
    color: inherit;
    transition: box-shadow var(--transition-base), transform var(--transition-base);
}

.replays__card:hover {
    box-shadow: var(--shadow-md);
    transform: translateY(-2px);
}

.replays__thumb {
    position: relative;
    aspect-ratio: 16 / 9;
    background: var(--color-navy);
    overflow: hidden;
}

.replays__thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--transition-base);
}

.replays__card:hover .replays__thumb img { transform: scale(1.05); }

.replays__play {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 3rem;
    height: 3rem;
    background: rgba(194, 29, 43, 0.9);
    border-radius: 50%;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform var(--transition-fast), background var(--transition-fast);
}

.replays__card:hover .replays__play {
    transform: translate(-50%, -50%) scale(1.1);
    background: rgba(194, 29, 43, 1);
}

.replays__duration {
    position: absolute;
    bottom: var(--spacing-sm);
    right: var(--spacing-sm);
    padding: 0.125rem 0.5rem;
    border-radius: var(--radius-sm);
    font-size: var(--font-size-xs);
    font-weight: 600;
    background: rgba(0, 0, 0, 0.7);
    color: #fff;
}

.replays__body { padding: var(--spacing-md); }
.replays__title { font-weight: 600; margin-bottom: var(--spacing-xs); }
.replays__speaker { font-size: var(--font-size-sm); color: var(--color-primary); font-weight: 500; }

.replays__desc {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    margin-top: var(--spacing-xs);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ── Replays — bloc « replays de l'événement » en tête du programme ── */
.programme__replays {
    margin: 0 0 var(--spacing-lg);
    padding: var(--spacing-md) var(--spacing-lg);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.programme__replays-title {
    font-size: var(--font-size-sm);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-primary);
    margin: 0 0 var(--spacing-sm);
}

.programme__replays-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
}

.programme__replay-card {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 0.9rem;
    border: 1px solid var(--color-border, #e5e7eb);
    border-radius: var(--radius-sm);
    background: #fff;
    color: var(--color-text);
    font: inherit;
    font-size: var(--font-size-sm);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    transition: border-color 120ms ease, box-shadow 120ms ease;
}

.programme__replay-card:hover {
    border-color: var(--color-primary);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}

.programme__replay-card-icon { flex: 0 0 auto; color: var(--color-primary); }
.programme__replay-card-title { font-weight: 600; }
.programme__replay-card-duration { color: var(--color-text-light); font-size: var(--font-size-xs); }

/* ── Replays sur la fiche simple — rendus en colonne centrale, façon mini-programme ── */
.event-replays {
    margin: var(--spacing-xl) 0 0;
}

.event-replays__title {
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: var(--color-text);
    margin: 0 0 var(--spacing-md);
}

.event-replays__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
}

.event-replays__card {
    display: flex;
    align-items: center;
    gap: var(--spacing-md);
    width: 100%;
    padding: var(--spacing-md) var(--spacing-lg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: #fff;
    color: var(--color-text);
    font: inherit;
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    transition: border-color 120ms ease, box-shadow 120ms ease;
}

.event-replays__card:hover {
    border-color: var(--color-primary);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}

.event-replays__play {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 50%;
    background: var(--color-primary-light);
    color: var(--color-primary);
}

.event-replays__main {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}

.event-replays__heading {
    display: flex;
    align-items: baseline;
    gap: var(--spacing-sm);
    flex-wrap: wrap;
}

.event-replays__time {
    flex: 0 0 auto;
    font-variant-numeric: tabular-nums;
    font-weight: 700;
    color: var(--color-primary);
    font-size: var(--font-size-sm);
}

.event-replays__name {
    font-weight: 600;
}

.event-replays__speakers {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.event-replays__speakers-label {
    font-weight: 600;
}

.event-replays__duration {
    flex: 0 0 auto;
    align-self: center;
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
    white-space: nowrap;
}

/* La modale de lecture vidéo `.replay-modal` (replays event + cartes
   ressource vidéo) vit désormais dans `shared.css` (bundle global
   `app.built.css`) car elle est incluse aussi hors minisite event
   (layout `front`). */

/* Minisite — état vide commun */
.minisite-empty {
    text-align: center;
    padding: var(--spacing-2xl) var(--spacing-lg);
    color: var(--color-text-light);
}

.minisite-empty svg { margin: 0 auto var(--spacing-md); }

@media (max-width: 47.9375em) {
    .inscription__card { flex-direction: column; }
    .gallery__lightbox-prev { left: 0.5rem; }
    .gallery__lightbox-next { right: 0.5rem; }
}

/* ══════════════════════════════════════════════════════════════
   Événements ANCESU — layout sidebar + featured + passés par année
   Classes WordPress (event-layout, event-sidebar, event-featured,
   event-main, event-grid, event-card) — adaptées aux variables locales
   ══════════════════════════════════════════════════════════════ */

/* Page header */
.event-page__header {
    margin-bottom: var(--spacing-xl);
}

.event-page__title {
    font-size: 1.75rem;
    font-weight: 700;
    color: var(--color-text);
    margin: 0 0 var(--spacing-xs);
}

.event-page__subtitle {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    margin: 0;
}

@media (min-width: 48em) {
    .event-page__title { font-size: 2rem; }
}

/* Layout 2 colonnes : sidebar + main */
.event-layout {
    display: flex;
    gap: var(--spacing-2xl);
}

/* Bouton filtres mobile (masqué en desktop) */
.event-filters-toggle {
    display: none;
}

/* Mobile : sidebar masquée, bouton filtres visible */
.event-sidebar {
    display: none;
}

@media (max-width: 63.9375em) {
    .event-filters-toggle {
        display: inline-flex;
        align-items: center;
        gap: var(--spacing-sm);
        padding: 0.625rem var(--spacing-md);
        background: var(--color-bg-light);
        border: 1px solid var(--color-border);
        border-radius: var(--radius-lg);
        font-size: var(--font-size-sm);
        font-weight: 600;
        color: var(--color-text);
        cursor: pointer;
        margin-bottom: var(--spacing-md);
        width: 100%;
        justify-content: center;
        -webkit-tap-highlight-color: transparent;
        transition: background-color var(--transition-fast);
    }

    .event-filters-toggle:active { background: var(--color-border); }

    .event-filters-toggle__badge {
        font-size: var(--font-size-xs);
        font-weight: 700;
        color: var(--color-primary);
        background: var(--color-primary-light);
        padding: 0.125rem 0.5rem;
        border-radius: 100px;
    }

    /* Sidebar mobile : affichée quand filtersOpen via Alpine toggle class */
    .event-sidebar--open {
        display: block;
        width: 100%;
        position: static;
        margin-bottom: var(--spacing-md);
        background: var(--color-bg-light);
        border-radius: var(--radius-lg);
        padding: var(--spacing-md);
        border: 1px solid var(--color-border);
    }

    .event-layout {
        flex-direction: column;
        gap: 0;
    }
}

/* Desktop : sidebar sticky normale */
@media (min-width: 64em) {
    .event-sidebar {
        display: block;
        flex-shrink: 0;
        width: 15rem;
        position: sticky;
        top: 5rem;
        align-self: flex-start;
        max-height: calc(100vh - 6rem);
        overflow-y: auto;
    }
}

.event-sidebar__inner {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-lg);
}

.event-main {
    flex: 1;
    min-width: 0;
}

/* Recherche sidebar */
.event-sidebar__search { margin: 0; }
.event-sidebar__search-field { position: relative; }

.event-sidebar__search-icon {
    position: absolute;
    left: 0.75rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--color-text-light);
    pointer-events: none;
}

.event-sidebar__search-input {
    width: 100%;
    padding: var(--spacing-sm) var(--spacing-sm) var(--spacing-sm) 2.375rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    font-family: inherit;
    font-size: var(--font-size-sm);
    color: var(--color-text);
    background: #fff;
    transition: border-color 0.15s ease;
}

.event-sidebar__search-input:focus {
    outline: none;
    border-color: var(--color-primary);
    box-shadow: 0 0 0 3px rgba(52, 75, 141, 0.12);
}

.event-sidebar__search-input::placeholder { color: var(--color-text-light); }

/* Sections sidebar */
.event-sidebar__section {
    border-top: 1px solid var(--color-border);
    padding-top: var(--spacing-md);
}

.event-sidebar__title {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    font-size: var(--font-size-sm);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--color-text-light);
    margin: 0 0 var(--spacing-sm);
}

.event-sidebar__title svg { flex-shrink: 0; opacity: 0.6; }

.event-sidebar__list { list-style: none; margin: 0; padding: 0; }
.event-sidebar__list li + li { margin-top: 1px; }

.event-sidebar__list-link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--spacing-sm);
    padding: 0.375rem var(--spacing-sm);
    border-radius: var(--radius-sm);
    font-size: var(--font-size-sm);
    color: var(--color-text);
    text-decoration: none;
    transition: all 0.15s ease;
}

.event-sidebar__list-link:hover {
    background: var(--color-bg-light);
    color: var(--color-primary);
}

.event-sidebar__list-link--active {
    background: var(--color-primary-light);
    color: var(--color-primary);
    font-weight: 600;
}

.event-sidebar__count {
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
    background: var(--color-bg-light);
    padding: 1px 0.375rem;
    border-radius: 0.625rem;
    min-width: 1.375rem;
    text-align: center;
}

.event-sidebar__list-link--active .event-sidebar__count {
    background: var(--color-primary);
    color: #fff;
}

.event-sidebar__reset {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    font-size: var(--font-size-sm);
    color: var(--color-primary);
    text-decoration: none;
    padding: var(--spacing-xs) 0;
}

.event-sidebar__reset:hover { text-decoration: underline; }

/* Main header */
.event-main__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: var(--spacing-lg);
    padding-bottom: var(--spacing-sm);
    border-bottom: 1px solid var(--color-border);
}

.event-main__count {
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    margin: 0;
}

/* Section titles */
.event-main__section { margin-bottom: var(--spacing-2xl); }
.event-main__section:last-child { margin-bottom: 0; }

.event-main__section-title {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    font-size: var(--font-size-base);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--color-text-light);
    margin: 0 0 var(--spacing-lg);
}

.event-main__section-title svg { flex-shrink: 0; color: var(--color-primary); }

.event-main__section-count {
    font-size: var(--font-size-xs);
    font-weight: 600;
    color: var(--color-text-light);
    background: var(--color-bg-light);
    padding: 1px 0.375rem;
    border-radius: 0.625rem;
    min-width: 1.375rem;
    text-align: center;
}

/* Featured event — grille image + body */
.event-featured {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--spacing-xl);
    margin-bottom: var(--spacing-xl);
    padding-bottom: var(--spacing-xl);
    border-bottom: 1px solid var(--color-border);
}

.event-featured__image {
    display: block;
    border-radius: var(--radius-lg);
    overflow: hidden;
}

.event-featured__image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.2s ease;
}

.event-featured__image:hover img { transform: scale(1.03); }

.event-featured__body {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: var(--spacing-sm);
}

.event-featured__meta-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
    align-items: center;
}

.event-featured__type {
    display: inline-block;
    padding: 2px var(--spacing-sm);
    background: var(--color-primary-light);
    color: var(--color-primary);
    font-size: var(--font-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    border-radius: var(--radius-sm);
}

.event-featured__title {
    font-size: 1.5rem;
    font-weight: 700;
    line-height: var(--line-height-tight);
    margin: 0;
}

.event-featured__title a { color: var(--color-text); text-decoration: none; }
.event-featured__title a:hover { color: var(--color-primary); }

.event-featured__excerpt {
    color: var(--color-text-light);
    line-height: var(--line-height-base);
    margin: 0;
    font-size: var(--font-size-sm);
}

.event-featured__details {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-md);
}

.event-featured__detail {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.event-featured__detail svg { flex-shrink: 0; opacity: 0.6; }

.event-featured__actions {
    display: flex;
    gap: var(--spacing-sm);
    margin-top: var(--spacing-xs);
}

/* Grid upcoming cards */
.event-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--spacing-lg);
}

/* Card upcoming */
.event-card--upcoming { border-top: 3px solid var(--color-primary); }

/* Date badge overlay sur image */
.event-card__date-badge {
    position: absolute;
    top: var(--spacing-sm);
    left: var(--spacing-sm);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-width: 3rem;
    padding: var(--spacing-xs) var(--spacing-sm);
    background: rgba(255, 255, 255, 0.95);
    border-radius: var(--radius-md);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
    z-index: 1;
}

.event-card__date-day {
    font-size: 1.25rem;
    font-weight: 700;
    line-height: 1;
    color: var(--color-primary);
}

.event-card__date-month {
    font-size: 0.6875rem;
    font-weight: 600;
    text-transform: uppercase;
    color: var(--color-primary);
    letter-spacing: 0.5px;
}

.event-card__image-link {
    display: block;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    position: relative;
}

.event-card__image--placeholder {
    background: var(--color-bg-light);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
}

/* Empty */
.event-empty {
    text-align: center;
    padding: var(--spacing-3xl) var(--spacing-md);
    color: var(--color-text-light);
}

.event-empty svg { margin-bottom: var(--spacing-md); }
.event-empty p { font-size: var(--font-size-lg); margin-bottom: var(--spacing-xl); }

/* ── Agenda card (liste avec bloc date bleu) ── */
.event-agenda__card {
    display: flex;
    align-items: stretch;
    text-decoration: none;
    color: inherit;
    background: #fff;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    overflow: hidden;
    margin-bottom: var(--spacing-md);
    transition: box-shadow 0.2s ease, transform 0.2s ease;
}

.event-agenda__card:hover {
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
    transform: translateY(-1px);
}

.event-agenda__body {
    flex: 1;
    min-width: 0;
    padding: var(--spacing-md);
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
}

/* Legacy — garder pour compatibilité */
.event-past__year {
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: var(--color-text);
    margin: var(--spacing-xl) 0 var(--spacing-sm);
    padding-bottom: var(--spacing-xs);
    border-bottom: 2px solid var(--color-border);
}

.event-past__year:first-child { margin-top: 0; }

.event-past__item { border-bottom: 1px solid var(--color-border); }
.event-past__item:last-of-type { border-bottom: none; }

.event-past__link {
    display: flex;
    align-items: flex-start;
    gap: var(--spacing-md);
    padding: var(--spacing-md) var(--spacing-sm);
    text-decoration: none;
    color: inherit;
    border-radius: var(--radius-sm);
    transition: background 0.15s ease;
}

.event-past__link:hover { background: var(--color-bg-light); }

.event-past__date {
    flex-shrink: 0;
    min-width: 10rem;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    padding-top: 0.125rem;
    line-height: var(--line-height-base);
}

.event-past__body {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
}

.event-past__title {
    display: block;
    font-size: var(--font-size-base);
    font-weight: 600;
    color: var(--color-text);
    line-height: var(--line-height-tight);
}

.event-past__link:hover .event-past__title { color: var(--color-primary); }

.event-past__location {
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
}

.event-past__arrow {
    flex-shrink: 0;
    color: var(--color-text-light);
    margin-top: 0.375rem;
    transition: color 0.15s ease, transform 0.15s ease;
}

.event-past__link:hover .event-past__arrow {
    color: var(--color-primary);
    transform: translateX(2px);
}

/* ── Responsive ── */
@media (max-width: 63.9375em) {
    .event-featured { grid-template-columns: 1fr; }
    .event-featured__image { max-height: 17.5rem; }
}

@media (max-width: 47.9375em) {
    .event-grid { grid-template-columns: 1fr; }
    .event-featured__title { font-size: 1.375rem; }
    .event-featured__details { flex-direction: column; gap: var(--spacing-xs); }

    .event-past__link { flex-direction: column; gap: var(--spacing-xs); }
    .event-past__date { min-width: auto; }
}

@media (max-width: 35.9375em) {
    .event-sidebar__inner { flex-direction: column; }
    .event-sidebar__section { min-width: 0; }
}

@media print {
    .event-sidebar, .event-main__header { display: none; }
    .event-layout { display: block; }
}

/* ══════════════════════════════════════════════════════════════
   Fiche événement « simple » (sans minisite) — sidebar blocs
   ══════════════════════════════════════════════════════════════
   Le layout `.article-single` (zones/article.css) porte la grille
   contenu + sidebar. Cette section ajoute uniquement les blocs
   propres à la fiche événement : nom + adresse du lieu, et bouton
   CTA d'inscription pleine largeur en sidebar.
   ══════════════════════════════════════════════════════════════ */

.event-single__panel {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-xs);
}

.event-single__venue-name {
    margin: 0;
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: var(--color-text);
}

.event-single__venue-address {
    margin: 0;
    font-size: var(--font-size-xs);
    line-height: var(--line-height-base);
    color: var(--color-text-light);
}

/* CTA inscription : version pleine largeur dans la sidebar pour
   appeler à l'action sans noyer le visuel. */
.event-single__register-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.375rem;
    width: 100%;
}

/* ── Hero `_list_hero` variante `event` ─────────────────────────
   La fiche événement utilise une image de fond sur la card et
   n'a pas besoin du dégradé navy par défaut autour du breadcrumb.
   On annule donc le fond du hero parent et on accentue le radius
   de la card editoriale pour un visuel un peu plus marqué. */
/* SEULE exception a la bande de tete du site (choix editorial 2026-08-06) : la
   fiche evenement reste sur fond blanc. Elle etend `front.html.twig`, donc son
   `main` porterait le degrade ; c'est `.front-main:has(> .list-hero--event)`
   (app.css) qui le retire. Cette classe reste donc le MARQUEUR de l'exception,
   meme sans declaration de fond : la supprimer readmettrait la bande. */
.list-hero--event {
    background: none;
}

.list-hero--event .list-hero__container {
    border-radius: 1.5rem;
}

/* ── Section « À l'agenda également » en pied de fiche ──
   Reprend `.article-single__related` (article.css) pour la coquille
   externe ; ce bloc ne fait qu'ajouter le CTA aligné à droite vers
   /agenda. La grille interne réutilise `.content-list__grid--agenda`
   (agenda.css) pour conserver le rythme image-background. */
.event-single__related-cta {
    display: flex;
    justify-content: flex-end;
    margin: var(--spacing-lg) 0 0;
}

.event-single__related-link {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: var(--color-primary);
    text-decoration: none;
    transition: gap 0.15s ease, color 0.15s ease;
}

.event-single__related-link:hover {
    color: var(--color-primary-dark, var(--color-primary));
    gap: 0.625rem;
}

/* ══════════════════════════════════════════════════════════════
   Accueil minisite (show) — landing page de l'événement

   Style landing percutant : grosses citations, gros nombres, cards
   avec shadow et hover lift, CTA gradient. Couleur de section prise
   sur `var(--section-color)` qui adapte automatiquement la palette
   selon le `body.section--*` (colloques rouge pour event minisite,
   etc.). Hero rendu par le layout `event-minisite.html.twig`.

   Sections :
     - status-bar : badge temporel + CTA pill rapide
     - excerpt : citation éditoriale grande typo + accent latéral
     - body : TipTap rendu via `|body|raw`
     - stats : très gros nombres (3xl), nu, séparateurs verticaux
     - section : eyebrow + titre éditorial + contenu
     - programme-preview : cards avec time chunk en section-color
     - speakers : cards avec avatar large + hover lift + shadow
     - cta-final : bandeau gradient avec gros bouton primary
   ══════════════════════════════════════════════════════════════ */

.show { background: white; }

.show .container {
    max-width: 56rem;
}

/* ── Status bar : badge + CTA rapide accolés ── */
.show__status-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-xl);
}

.show__status {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.3125rem 0.875rem;
    border-radius: 999px;
    font-size: 0.6875rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.show__status--upcoming {
    background: var(--section-color);
    color: white;
}

.show__status--ongoing {
    background: #166534;
    color: white;
}

.show__status--past {
    background: var(--color-bg-light);
    color: var(--color-text-light);
}

.show__quick-cta {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.4375rem 1rem;
    border: 2px solid var(--section-color);
    border-radius: 999px;
    background: transparent;
    color: var(--section-color);
    font-size: var(--font-size-sm);
    font-weight: 700;
    text-decoration: none;
    transition: background 150ms ease, color 150ms ease;
}

.show__quick-cta:hover {
    background: var(--section-color);
    color: white;
}

.show__quick-cta:focus-visible {
    outline: 2px solid var(--section-color);
    outline-offset: 2px;
}

/* ── Excerpt : grande citation éditoriale avec accent latéral ── */
.show__excerpt {
    position: relative;
    margin: 0 0 var(--spacing-2xl);
    padding: 0.5rem 0 0.5rem 1.5rem;
    border-left: 4px solid var(--section-color);
}

.show__excerpt p {
    margin: 0;
    font-size: clamp(1.125rem, 2vw, 1.375rem);
    line-height: 1.45;
    color: var(--color-text);
    font-weight: 500;
}

/* ── Body éditorial : prose, espacement supérieur sobre ── */
.show__body {
    margin-bottom: var(--spacing-2xl);
    font-size: var(--font-size-md);
    line-height: 1.65;
}

/* ── CTA inscription final : bandeau gradient section-color + gros bouton ── */
.show__cta-final {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--spacing-lg);
    margin: var(--spacing-2xl) 0 0;
    padding: var(--spacing-xl) var(--spacing-2xl);
    border-radius: var(--radius-lg);
    background: linear-gradient(135deg, var(--section-color) 0%, var(--color-primary) 100%);
    color: white;
    box-shadow: var(--shadow-lg);
}

.show__cta-text {
    flex: 1;
    min-width: 0;
}

.show__cta-eyebrow {
    margin: 0 0 0.25rem;
    font-size: 0.6875rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    opacity: 0.8;
}

.show__cta-title {
    margin: 0;
    font-size: clamp(1.25rem, 2.5vw, 1.625rem);
    font-weight: 700;
    color: white;
    line-height: 1.2;
}

.show__cta-hint {
    margin: 0.375rem 0 0;
    font-size: var(--font-size-sm);
    color: rgba(255, 255, 255, 0.85);
}

.show__cta-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.875rem 1.75rem;
    background: white;
    color: var(--section-color);
    border-radius: 999px;
    font-weight: 800;
    text-decoration: none;
    font-size: var(--font-size-base);
    transition: transform 150ms ease, box-shadow 150ms ease;
}

.show__cta-btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
}

.show__cta-btn:focus-visible {
    outline: 3px solid white;
    outline-offset: 3px;
}

/* ── Print : status bar et CTA masqués, chapô en blockquote sobre ── */
@media print {
    .show__status-bar,
    .show__quick-cta,
    .show__cta-final { display: none; }
    .show__excerpt {
        border-left: 2px solid var(--color-text);
        padding: 0 0 0 0.4cm;
    }
}

/* ═════════════════════════════════════════════════════════════════════
   Appel à communications — liste d'appels + formulaire de soumission
   ═════════════════════════════════════════════════════════════════════ */

.contributions {
    padding: clamp(2rem, 4vw, 3rem) 0;
}

.contributions__container {
    max-width: 56rem;
}

.contributions__header {
    text-align: center;
    margin-bottom: 2rem;
}

.contributions__heading {
    font-size: clamp(1.5rem, 3vw, 2rem);
    font-weight: 700;
    color: var(--color-text);
    margin: 0 0 0.5rem;
}

.contributions__lead {
    font-size: 1rem;
    line-height: 1.6;
    color: var(--color-text-light);
    margin: 0 auto;
    max-width: 36rem;
}

.contributions__empty {
    text-align: center;
    padding: 3rem 1rem;
    background: var(--color-surface-muted, #f8f8f8);
    border-radius: 0.75rem;
    color: var(--color-text-light);
}

.contributions__empty p {
    margin: 0.75rem 0 0;
    font-size: 0.95rem;
}

.contributions__breadcrumb {
    font-size: 0.875rem;
    color: var(--color-text-light);
    margin: 0 0 1.5rem;
}

.contributions__breadcrumb a {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted currentColor;
}

.contributions__breadcrumb a:hover {
    color: var(--section-color, var(--color-primary));
}

/* Grid d'index des appels */
.contributions__grid {
    display: grid;
    gap: 1.25rem;
    grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
}

.contributions-card {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    padding: 1.5rem;
    background: var(--color-surface, #fff);
    border: 1px solid var(--color-border);
    border-top: 3px solid var(--section-color, var(--color-primary));
    border-radius: 0.75rem;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
    transition: box-shadow 0.15s, transform 0.15s;
}

.contributions-card:hover {
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
    transform: translateY(-2px);
}

.contributions-card--closed {
    opacity: 0.7;
    border-top-color: var(--color-border);
}

.contributions-card--closed:hover {
    transform: none;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}

.contributions-card__header {
    border-bottom: 1px solid var(--color-border);
    padding-bottom: 0.75rem;
}

.contributions-card__type {
    display: inline-block;
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--section-color, var(--color-primary));
    margin-bottom: 0.5rem;
}

.contributions-card__title {
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--color-text);
    margin: 0;
    line-height: 1.3;
}

.contributions-card__description {
    font-size: 0.95rem;
    line-height: 1.55;
    color: var(--color-text);
    margin: 0;
}

.contributions-card__meta {
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: 0.375rem 0.875rem;
    margin: 0;
    font-size: 0.875rem;
}

.contributions-card__meta dt {
    font-weight: 600;
    color: var(--color-text-subtle);
}

.contributions-card__meta dd {
    margin: 0;
    color: var(--color-text);
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
}

.contributions-card__footer {
    margin-top: auto;
    padding-top: 0.5rem;
    border-top: 1px solid var(--color-border);
}

.contributions-card__status {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 0.875rem;
    background: var(--color-surface-muted, #f8f8f8);
    color: var(--color-text-light);
    border-radius: 0.5rem;
    font-size: 0.875rem;
}

/* Dropdown nav minisite (onglet Contributions avec sous-menu) */
.minisite-nav__item--has-dropdown {
    position: relative;
}

.minisite-nav__caret {
    margin-left: 0.25rem;
    transition: transform 0.15s;
}

.minisite-nav__item--has-dropdown:hover .minisite-nav__caret,
.minisite-nav__item--has-dropdown:focus-within .minisite-nav__caret {
    transform: rotate(180deg);
}

.minisite-nav__dropdown {
    position: absolute;
    top: 100%;
    left: 0;
    z-index: 50;
    min-width: 18rem;
    margin: 0;
    padding: 0.5rem;
    list-style: none;
    background: var(--color-surface, #fff);
    border: 1px solid var(--color-border);
    border-top: 3px solid var(--section-color, var(--color-primary));
    border-radius: 0.5rem;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-4px);
    transition: opacity 0.15s, transform 0.15s, visibility 0.15s;
}

.minisite-nav__item--has-dropdown:hover > .minisite-nav__dropdown,
.minisite-nav__item--has-dropdown:focus-within > .minisite-nav__dropdown {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

.minisite-nav__dropdown-link {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
    padding: 0.625rem 0.875rem;
    border-radius: 0.375rem;
    text-decoration: none;
    color: var(--color-text);
    transition: background 0.1s;
}

.minisite-nav__dropdown-link:hover,
.minisite-nav__dropdown-link:focus-visible {
    background: var(--color-surface-muted, #f8f8f8);
}

.minisite-nav__dropdown-title {
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--color-text);
}

.minisite-nav__dropdown-meta {
    font-size: 0.75rem;
    color: var(--color-text-subtle);
}

/* Carte d'appel */
.call-card {
    background: var(--color-surface, #fff);
    border: 1px solid var(--color-border);
    border-radius: 0.75rem;
    padding: clamp(1rem, 3vw, 2rem);
    margin-bottom: 2rem;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}

.call-card__header {
    border-bottom: 1px solid var(--color-border);
    padding-bottom: 1rem;
    margin-bottom: 1.5rem;
}

.call-card__title-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.call-card__title {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--section-color, var(--color-text));
    margin: 0;
}

.call-card__type {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    font-size: 0.8rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--section-color, var(--color-primary));
    background: var(--section-color-light, var(--color-surface-muted));
    padding: 0.25rem 0.625rem;
    border-radius: 999px;
}

.call-card__dates {
    margin: 0.25rem 0 0;
    font-size: 0.875rem;
    color: var(--color-text-light);
}

.call-card__status {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin: 0.5rem 0 0;
    padding: 0.375rem 0.75rem;
    font-size: 0.875rem;
    font-weight: 600;
    border-radius: 0.5rem;
}

.call-card__status--closed {
    background: var(--color-surface-muted, #f8f8f8);
    color: var(--color-text-light);
}

.call-card__description {
    font-size: 1rem;
    line-height: 1.6;
    color: var(--color-text);
    margin: 0 0 1rem;
}

.call-card__body {
    font-size: 0.95rem;
    line-height: 1.6;
    margin-bottom: 1.5rem;
}

.call-card__pdf {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0 0 1.5rem;
    font-size: 0.9rem;
}

.call-card__pdf a {
    color: var(--section-color, var(--color-primary));
    text-decoration: underline;
}

/* Formulaire de soumission */
.call-card__form {
    margin-top: 1.5rem;
}

.call-card__fieldset {
    border: 1px solid var(--color-border);
    border-radius: 0.5rem;
    padding: 1.25rem;
    margin: 0 0 1.5rem;
}

.call-card__fieldset legend {
    padding: 0 0.5rem;
    font-size: 0.875rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--section-color, var(--color-text));
}

.call-card__field {
    display: flex;
    flex-direction: column;
    gap: 0.375rem;
    margin-bottom: 1rem;
}

.call-card__field:last-child {
    margin-bottom: 0;
}

.call-card__label {
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--color-text);
}

.call-card__label em {
    color: var(--color-danger, #c62828);
    font-style: normal;
    margin-left: 0.25rem;
}

.call-card__hint {
    font-size: 0.8rem;
    color: var(--color-text-light);
    margin: 0.25rem 0 0;
}

.call-card__field input[type="text"],
.call-card__field input[type="email"],
.call-card__field input[type="number"],
.call-card__field input[type="date"],
.call-card__field input[type="url"],
.call-card__field textarea,
.call-card__field select {
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--color-border);
    border-radius: 0.375rem;
    font-size: 0.95rem;
    font-family: inherit;
    background: var(--color-surface, #fff);
    color: var(--color-text);
    transition: border-color 0.15s, box-shadow 0.15s;
}

.call-card__field input[type="file"] {
    padding: 0.5rem 0;
    font-size: 0.875rem;
}

.call-card__field input:focus,
.call-card__field textarea:focus,
.call-card__field select:focus {
    outline: none;
    border-color: var(--section-color, var(--color-primary));
    box-shadow: 0 0 0 3px var(--section-color-light, rgba(0, 0, 0, 0.05));
}

.call-card__honeypot {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.call-card__regulation {
    display: flex;
    align-items: flex-start;
    gap: 0.625rem;
    padding: 1rem 1.25rem;
    margin: 1.5rem 0 0;
    background: var(--section-color-light, var(--color-surface-muted));
    border-left: 3px solid var(--section-color, var(--color-primary));
    border-radius: 0.5rem;
    font-size: 0.9rem;
    line-height: 1.5;
    color: var(--color-text);
    cursor: pointer;
}

.call-card__regulation input[type="checkbox"] {
    flex-shrink: 0;
    width: 1rem;
    height: 1rem;
    margin-top: 0.15rem;
    accent-color: var(--section-color, var(--color-primary));
}

.call-card__regulation em {
    color: var(--color-danger, #c62828);
    font-style: normal;
    margin-left: 0.15rem;
}

/* Styles ALTCHA partagés dans components/altcha-widget.css */

.call-card__actions {
    display: flex;
    justify-content: flex-end;
    margin: 1.5rem 0;
}

.call-card__legal {
    font-size: 0.8rem;
    color: var(--color-text-light);
    line-height: 1.5;
    margin: 0;
    padding-top: 1rem;
    border-top: 1px solid var(--color-border);
}

/* ═════════════════════════════════════════════════════════════════════
   Page de consultation auteur d'une soumission
   ═════════════════════════════════════════════════════════════════════ */

.submission {
    padding: clamp(2rem, 4vw, 3rem) 0;
}

.submission__container {
    max-width: 48rem;
}

.submission__breadcrumb {
    font-size: 0.875rem;
    color: var(--color-text-light);
    margin: 0 0 1rem;
}

.submission__breadcrumb a {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted currentColor;
}

.submission__breadcrumb a:hover {
    color: var(--section-color, var(--color-primary));
}

.submission__breadcrumb span {
    margin: 0 0.5rem;
    color: var(--color-text-subtle);
}

.submission__header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.submission__title {
    font-size: clamp(1.5rem, 3vw, 2rem);
    font-weight: 700;
    color: var(--color-text);
    margin: 0;
    flex: 1;
    min-width: 60%;
}

.submission__status {
    display: inline-flex;
    align-items: center;
    padding: 0.375rem 0.875rem;
    font-size: 0.875rem;
    font-weight: 600;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.submission__status--submitted { background: #e3f2fd; color: #1565c0; }
.submission__status--under_review { background: #fff3e0; color: #e65100; }
.submission__status--accepted { background: #e8f5e9; color: #2e7d32; }
.submission__status--rejected { background: #ffebee; color: #c62828; }
.submission__status--withdrawn { background: #f5f5f5; color: #757575; }

.submission__meta {
    font-size: 0.875rem;
    color: var(--color-text-light);
    margin: 0 0 2rem;
}

.submission__section {
    margin: 0 0 2rem;
    padding: 1.25rem;
    background: var(--color-surface, #fff);
    border: 1px solid var(--color-border);
    border-radius: 0.5rem;
}

.submission__section--review {
    background: var(--section-color-light, #fff3e0);
    border-color: var(--section-color, #e65100);
}

.submission__section-title {
    font-size: 0.875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--section-color, var(--color-text));
    margin: 0 0 1rem;
}

.submission__details {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 0.5rem 1rem;
    margin: 0;
}

.submission__details dt {
    font-weight: 600;
    color: var(--color-text-light);
    font-size: 0.875rem;
}

.submission__details dd {
    margin: 0;
    color: var(--color-text);
}

.submission__coauthors {
    list-style: none;
    padding: 0;
    margin: 0;
}

.submission__coauthors li {
    padding: 0.5rem 0;
    border-bottom: 1px solid var(--color-border);
}

.submission__coauthors li:last-child {
    border-bottom: none;
}

.submission__attachments {
    list-style: none;
    padding: 0;
    margin: 0;
}

.submission__attachments li {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.625rem 0;
    border-bottom: 1px solid var(--color-border);
}

.submission__attachments li:last-child {
    border-bottom: none;
}

.submission__attachment-meta {
    margin-left: auto;
    font-size: 0.8rem;
    color: var(--color-text-light);
}

.submission__actions {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    margin-top: 2rem;
}

.submission__locked {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 1rem;
    background: var(--color-surface-muted, #f8f8f8);
    border-radius: 0.5rem;
    font-size: 0.9rem;
    color: var(--color-text-light);
    margin-top: 2rem;
}

.submission__edit summary {
    cursor: pointer;
    user-select: none;
}

.submission__edit-form {
    margin-top: 1rem;
    padding: 1.25rem;
    background: var(--color-surface-muted, #f8f8f8);
    border-radius: 0.5rem;
}

.submission__field {
    display: flex;
    flex-direction: column;
    gap: 0.375rem;
    margin-bottom: 1rem;
}

.submission__field input {
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--color-border);
    border-radius: 0.375rem;
    font-size: 0.95rem;
}

.submission__hint {
    font-size: 0.85rem;
    color: var(--color-text-light);
    margin: 0.5rem 0;
}

.submission__form-actions,
.submission__withdraw {
    display: flex;
    justify-content: flex-end;
    margin: 0;
}

@media (max-width: 600px) {
    .submission__details {
        grid-template-columns: 1fr;
    }
}

/* ══════════════════════════════════════════════════════════════
   Résumé d'une communication — minisite event

   Page focale /evenements/{slug}/resumes/{sessionSlug} : titre +
   métadonnées (jour, horaire, parcours, salle), accroche, corps
   TipTap, puis liste des intervenants (lien vers /biographies/{slug}
   si biographie publique consentie). Layout resserré sur 48rem pour
   le confort de lecture.
   ══════════════════════════════════════════════════════════════ */

.minisite-content__breadcrumb {
    /* Aligné sur la colonne `.resume` (48rem centrée) : le « Retour au
       programme » suit le bord gauche du contenu, pas le bord du conteneur. */
    max-width: 48rem;
    margin: 0 auto var(--spacing-lg);
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.minisite-content__breadcrumb a {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted currentColor;
}

.minisite-content__breadcrumb a:hover {
    color: var(--color-primary);
}

.resume {
    max-width: 48rem;
    margin-inline: auto;
}

.resume__header {
    margin-bottom: var(--spacing-xl);
}

/* Contexte de la session mère (communication = sous-session). */
.resume__parent {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin: 0 0 var(--spacing-sm);
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: var(--color-text-light);
}

.resume__parent svg {
    flex-shrink: 0;
    color: var(--color-primary);
}

/* Badge de format de la session mère (plénière, atelier, table ronde…). */
.resume__parent-type {
    display: inline-flex;
    align-items: center;
    padding: 0.1rem 0.5rem;
    border-radius: 999px;
    background: var(--color-primary-light, #e8eef5);
    color: var(--color-primary);
    font-size: var(--font-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.resume__header .minisite-content__page-title {
    margin-bottom: var(--spacing-md);
    line-height: 1.15;
    font-weight: 600;
}

.resume__meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm) var(--spacing-md);
    margin: 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.resume__meta-item {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
}

.resume__meta-item svg {
    flex-shrink: 0;
    color: var(--color-primary);
}

.resume__intro {
    margin-top: var(--spacing-lg);
    padding-left: var(--spacing-md);
    border-left: 3px solid var(--color-primary-light);
}

.resume__intro p {
    margin: 0;
}

.resume__body {
    margin-top: var(--spacing-lg);
}

/* Titre de section (Replay, etc.) aligné sur le titre Intervenants. */
.resume__section-title {
    margin: 0 0 var(--spacing-md);
    font-size: var(--font-size-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--color-text-light);
}

/* ── Replay intégré ── */
.resume__replay-player {
    margin: 0;
}

.resume__replay-fallback {
    margin: 0;
}

.resume__replay-link {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.4rem 0.9rem;
    border: 1px solid var(--color-primary);
    border-radius: 999px;
    color: var(--color-primary);
    text-decoration: none;
    font-weight: 600;
    font-size: var(--font-size-sm);
    transition: background 120ms ease, color 120ms ease;
}

.resume__replay-link:hover {
    background: var(--color-primary);
    color: #fff;
}

.resume__replay-link svg {
    flex-shrink: 0;
}

/* ── Intervenants ── */
.resume__speakers {
    margin-top: var(--spacing-2xl);
    padding-top: var(--spacing-xl);
    border-top: 1px solid var(--color-border);
}

.resume__speakers-title {
    margin: 0 0 var(--spacing-md);
    font-size: var(--font-size-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--color-text-light);
}

.resume__speakers-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--spacing-md);
}

.resume__speaker {
    display: flex;
    gap: var(--spacing-md);
    padding: var(--spacing-md);
    background: var(--color-bg-light);
    border-radius: var(--radius-md);
}

.resume__speaker-avatar {
    flex: 0 0 auto;
    width: 4.5rem;
    height: 4.5rem;
    border-radius: 50%;
    object-fit: cover;
    background: var(--color-border);
}

.resume__speaker-body {
    flex: 1 1 auto;
    min-width: 0;
}

.resume__speaker-name {
    margin: 0;
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.5rem;
    font-weight: 600;
}

.resume__speaker-name a {
    color: var(--color-primary);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
    transition: color 120ms ease;
}

.resume__speaker-name a:hover {
    color: var(--color-primary-dark);
}

.resume__speaker-role {
    font-size: var(--font-size-xs);
    font-weight: 400;
    color: var(--color-text-light);
    text-transform: capitalize;
}

.resume__speaker-presentation {
    margin: var(--spacing-2xs) 0 0;
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.resume__speaker-bio {
    margin: var(--spacing-xs) 0 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
    line-height: 1.5;
}

.resume__speaker-bio.prose-content {
    color: var(--color-text);
}

.resume__speaker-bio.prose-content > :first-child {
    margin-top: 0;
}

.resume__speaker-bio.prose-content > :last-child {
    margin-bottom: 0;
}

.resume__speaker-more {
    margin: var(--spacing-sm) 0 0;
    font-size: var(--font-size-sm);
}

.resume__speaker-more a {
    color: var(--color-primary);
    font-weight: 600;
    text-decoration: none;
}

.resume__speaker-more a:hover {
    text-decoration: underline;
}

/* ══════════════════════════════════════════════════════════════════════════
   Blocs TipTap événement — présentation pilotée par `EventBlockLayout`
   ══════════════════════════════════════════════════════════════════════════
   Les réglages du rédacteur arrivent en `data-*` sur `.tiptap-event-block`
   (largeur, fond, variante, colonnes). Le RESPONSIVE n'en fait pas partie :
   il est porté ici par `auto-fit`, pour que le rédacteur n'ait jamais à
   garantir une propriété que la feuille de style garantit déjà. Le nombre de
   colonnes est donc un PLAFOND, pas une contrainte.

   `data-*` non déclaré dans `html_sanitizer.yaml` (`tiptap.sanitizer.trusted`)
   = attribut retiré en silence. Tout nouveau réglage se whiteliste là-bas.
   ────────────────────────────────────────────────────────────────────────── */

.tiptap-event-block {
    --tiptap-event-cols: 3;

    margin: var(--spacing-xl) 0;
}

/* ── Largeur ─────────────────────────────────────────────────────────────── */

.tiptap-event-block[data-width="large"] {
    /* Déborde symétriquement de la colonne de texte, sans casser le flux. */
    margin-inline: calc(var(--spacing-2xl) * -1);
}

.tiptap-event-block[data-width="pleine-largeur"] {
    /* Pleine largeur de la fenêtre depuis un conteneur centré, sans JS. */
    margin-inline: calc(50% - 50vw);
    padding-inline: var(--spacing-xl);
}

@media (max-width: 60rem) {
    /* Sous cette largeur, la colonne de texte occupe déjà tout l'écran :
       déborder n'a plus de sens et provoquerait un défilement horizontal. */
    .tiptap-event-block[data-width="large"],
    .tiptap-event-block[data-width="pleine-largeur"] {
        margin-inline: 0;
        padding-inline: 0;
    }
}

/* ── Fond ────────────────────────────────────────────────────────────────── */

.tiptap-event-block[data-bg="teinte"],
.tiptap-event-block[data-bg="accentue"] {
    padding: var(--spacing-xl);
    border-radius: var(--radius-md);
}

.tiptap-event-block[data-bg="teinte"] {
    background-color: var(--color-bg-light);
}

.tiptap-event-block[data-bg="accentue"] {
    background-color: var(--section-color, var(--color-primary));
    color: #fff;
}

.tiptap-event-block[data-bg="accentue"] a {
    color: inherit;
}

/* ── Colonnes ────────────────────────────────────────────────────────────── */

.tiptap-event-block[data-cols="2"] { --tiptap-event-cols: 2; }
.tiptap-event-block[data-cols="3"] { --tiptap-event-cols: 3; }
.tiptap-event-block[data-cols="4"] { --tiptap-event-cols: 4; }

.tiptap-event-block[data-variant="grille"] .tiptap-event-speakers__grid,
.tiptap-event-block[data-variant="grille"] .tiptap-event-sponsors__grid,
.tiptap-event-block[data-variant="logos"] .tiptap-event-sponsors__grid {
    display: grid;
    grid-template-columns: repeat(
        auto-fit,
        minmax(calc((100% - (var(--tiptap-event-cols) - 1) * var(--spacing-md)) / var(--tiptap-event-cols)), 1fr)
    );
    gap: var(--spacing-md);
    margin: 0;
    padding: 0;
    list-style: none;
}

.tiptap-event-block[data-variant="liste"] .tiptap-event-speakers__grid,
.tiptap-event-block[data-variant="liste"] .tiptap-event-sponsors__grid {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
    margin: 0;
    padding: 0;
    list-style: none;
}

/* ── Titres de bloc ──────────────────────────────────────────────────────── */

.tiptap-event-block > h3 {
    margin: 0 0 var(--spacing-md);
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: inherit;
}

.tiptap-event-block[data-variant="compact"] > h3 {
    font-size: var(--font-size-base);
}

/* ── Intervenants ────────────────────────────────────────────────────────── */

.tiptap-event-speakers__card {
    padding: var(--spacing-md);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background-color: #fff;
}

.tiptap-event-speakers__name {
    margin: 0;
    font-weight: 600;
    color: var(--color-text);
}

.tiptap-event-speakers__name-link {
    color: var(--color-primary);
    text-decoration: none;
}

.tiptap-event-speakers__name-link:hover {
    text-decoration: underline;
}

.tiptap-event-speakers__org {
    margin: var(--spacing-xs) 0 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.tiptap-event-speakers__sessions {
    margin: var(--spacing-sm) 0 0;
    padding: 0;
    list-style: none;
    font-size: var(--font-size-sm);
}

.tiptap-event-speakers__sessions li + li {
    margin-top: var(--spacing-xs);
}

.tiptap-event-speakers__role {
    display: inline-block;
    margin-right: var(--spacing-xs);
    font-size: var(--font-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--color-primary);
}

.tiptap-event-speakers__session {
    color: var(--color-text-light);
}

/* ── Partenaires ─────────────────────────────────────────────────────────── */

.tiptap-event-sponsors__item {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 5rem;
    padding: var(--spacing-md);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background-color: #fff;
}

.tiptap-event-sponsors__link {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    text-decoration: none;
}

.tiptap-event-sponsors__logo {
    max-width: 100%;
    max-height: 4rem;
    /* Un mur de logos mélange des formats très hétérogènes : `contain` évite
       qu'un logo panoramique écrase la hauteur de sa ligne. */
    object-fit: contain;
}

/* Les partenaires de premier rang méritent d'être vus comme tels. */
.tiptap-event-sponsors__item[data-level="institutional"],
.tiptap-event-sponsors__item[data-level="platinum"] {
    grid-column: span 2;
    min-height: 7rem;
}

.tiptap-event-sponsors__item[data-level="institutional"] .tiptap-event-sponsors__logo,
.tiptap-event-sponsors__item[data-level="platinum"] .tiptap-event-sponsors__logo {
    max-height: 5.5rem;
}

.tiptap-event-sponsors__name {
    font-weight: 600;
    text-align: center;
    color: var(--color-text);
}

/* ── Programme ───────────────────────────────────────────────────────────── */

.tiptap-event-program__day {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--spacing-xs) var(--spacing-sm);
    margin: var(--spacing-lg) 0 var(--spacing-sm);
    font-size: var(--font-size-base);
    font-weight: 700;
    color: var(--color-primary);
}

.tiptap-event-program__day-date,
.tiptap-event-program__day-theme {
    font-weight: 400;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.tiptap-event-program__session {
    display: grid;
    grid-template-columns: minmax(6rem, max-content) 1fr;
    gap: var(--spacing-xs) var(--spacing-md);
    padding: var(--spacing-sm) 0;
    border-top: 1px solid var(--color-border);
}

@media (max-width: 40rem) {
    .tiptap-event-program__session {
        grid-template-columns: 1fr;
    }
}

.tiptap-event-program__time {
    font-variant-numeric: tabular-nums;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

.tiptap-event-program__session-title {
    font-weight: 600;
    color: var(--color-text);
}

.tiptap-event-program__meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-xs);
    grid-column: 2;
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
}

@media (max-width: 40rem) {
    .tiptap-event-program__meta,
    .tiptap-event-program__desc {
        grid-column: 1;
    }
}

.tiptap-event-program__track,
.tiptap-event-program__room {
    padding: 0.1rem 0.4rem;
    border-radius: var(--radius-sm);
    background-color: var(--color-bg-light);
}

.tiptap-event-program__desc {
    grid-column: 2;
    margin: 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-light);
}

/* ── États vides ─────────────────────────────────────────────────────────── */

.tiptap-event-speakers__empty,
.tiptap-event-sponsors__empty,
.tiptap-event-program__empty {
    margin: 0;
    font-size: var(--font-size-sm);
    font-style: italic;
    color: var(--color-text-light);
}

/* ── Appel à l'action ────────────────────────────────────────────────────── */

.tiptap-event-cta {
    text-align: center;
}

.tiptap-event-cta__title {
    margin: 0;
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: inherit;
}

.tiptap-event-cta__subtitle {
    margin: var(--spacing-xs) 0 0;
    font-size: var(--font-size-sm);
    color: inherit;
    opacity: 0.85;
}

.tiptap-event-cta__action {
    margin: var(--spacing-md) 0 0;
}

.tiptap-event-cta__note {
    margin: var(--spacing-sm) 0 0;
    font-size: var(--font-size-sm);
    font-style: italic;
    color: inherit;
    opacity: 0.85;
}

/* Sur fond accentué, le bouton primaire disparaîtrait dans la couleur de
   marque : on l'inverse. */
.tiptap-event-block[data-bg="accentue"] .tiptap-event-cta__action .btn--primary {
    background-color: #fff;
    color: var(--color-primary);
}

/* ── Foire aux questions ─────────────────────────────────────────────────── */

.tiptap-event-faq__toc {
    margin: var(--spacing-md) 0 var(--spacing-lg);
    padding: var(--spacing-sm) var(--spacing-md);
    border-radius: var(--radius-md);
    background-color: var(--color-bg-light);
}

.tiptap-event-faq__toc ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: var(--spacing-2xs);
}

.tiptap-event-faq__toc a {
    font-size: var(--font-size-sm);
    color: var(--color-primary);
    text-decoration: none;
}

.tiptap-event-faq__toc a:hover,
.tiptap-event-faq__toc a:focus-visible {
    text-decoration: underline;
}

.tiptap-event-faq__list {
    display: grid;
    gap: var(--spacing-xs);
}

.tiptap-event-faq__item {
    border-bottom: 1px solid var(--color-border);
    padding-bottom: var(--spacing-sm);
}

.tiptap-event-faq__item:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}

/* `list-style: none` seul ne retire pas le triangle sous Safari : il faut
   aussi neutraliser le pseudo-element WebKit. */
.tiptap-event-faq__question {
    list-style: none;
    cursor: pointer;
    padding: var(--spacing-sm) 0;
    font-size: var(--font-size-base);
    font-weight: 600;
    color: var(--color-text);
}

.tiptap-event-faq__question::-webkit-details-marker {
    display: none;
}

/* Chevron dessine en CSS : il tourne a l'ouverture, sans image ni script. */
.tiptap-event-faq__question::before {
    content: '';
    display: inline-block;
    width: 0.45em;
    height: 0.45em;
    margin-right: var(--spacing-xs);
    border-right: 2px solid var(--color-primary);
    border-bottom: 2px solid var(--color-primary);
    transform: rotate(-45deg) translateY(-0.1em);
    transition: transform 0.15s ease;
}

.tiptap-event-faq__item[open] > .tiptap-event-faq__question::before {
    transform: rotate(45deg) translateY(-0.15em);
}

.tiptap-event-faq__answer {
    padding: 0 0 var(--spacing-sm) 1.1em;
    font-size: var(--font-size-sm);
    line-height: 1.65;
    color: var(--color-text-light);
}

@media (prefers-reduced-motion: reduce) {
    .tiptap-event-faq__question::before {
        transition: none;
    }
}

/* ── Code de conduite ────────────────────────────────────────────────────── */

.minisite-conduct__pledge {
    margin: var(--spacing-lg) 0 0;
    padding: var(--spacing-md) var(--spacing-lg);
    border-radius: var(--radius-md);
    background-color: var(--color-bg-light);
}

.minisite-conduct__pledge-title {
    margin: 0 0 var(--spacing-2xs);
    font-weight: 700;
    color: var(--color-text);
}

.minisite-conduct__pledge p:last-child {
    margin: 0;
    color: var(--color-text-light);
}

.minisite-conduct__report {
    margin: var(--spacing-xl) 0 0;
    padding: var(--spacing-lg);
    border-radius: var(--radius-md);
    background-color: var(--color-bg-light);
}

.minisite-conduct__report-title {
    margin: 0 0 var(--spacing-2xs);
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: var(--color-text);
}

.minisite-conduct__report p {
    margin: 0;
    color: var(--color-text-light);
}

.minisite-conduct__report-channels {
    margin: var(--spacing-md) 0 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-md);
}

.minisite-conduct__report-channels a {
    font-weight: 600;
    color: var(--color-primary);
}

/* ── Indicateurs d'accès au lieu ─────────────────────────────────────────── */

.access-routes {
    margin: 0 0 var(--spacing-md);
    padding: 0;
    list-style: none;
    display: grid;
    gap: var(--spacing-sm);
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.access-routes__item {
    display: flex;
    align-items: flex-start;
    gap: var(--spacing-sm);
    padding: var(--spacing-sm) var(--spacing-md);
    border-radius: var(--radius-md);
    background-color: var(--color-bg-light);
}

.access-routes__icon {
    flex: none;
    display: inline-flex;
    color: var(--color-primary);
}

.access-routes__body {
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
    min-width: 0;
}

.access-routes__mode {
    display: block;
    font-size: var(--font-size-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-text-light);
}

.access-routes__label {
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.access-routes__time {
    font-size: var(--font-size-base);
    font-weight: 700;
    color: var(--color-primary);
}

.access-routes__details {
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
}

/* Sur fond accentué, les jetons doivent rester lisibles sur la couleur de
   marque : on les repose sur un voile clair plutôt que sur le fond de page. */
.tiptap-event-block[data-bg="accentue"] .access-routes__item {
    background-color: rgb(255 255 255 / 0.14);
}

.tiptap-event-block[data-bg="accentue"] .access-routes__icon,
.tiptap-event-block[data-bg="accentue"] .access-routes__time,
.tiptap-event-block[data-bg="accentue"] .access-routes__label,
.tiptap-event-block[data-bg="accentue"] .access-routes__mode,
.tiptap-event-block[data-bg="accentue"] .access-routes__details {
    color: inherit;
}

/* ── Bloc « Le lieu » ────────────────────────────────────────────────────── */

.tiptap-event-venue__name {
    margin: 0 0 var(--spacing-2xs);
    font-size: var(--font-size-lg);
    font-weight: 700;
    color: inherit;
}

.tiptap-event-venue__address {
    margin: 0 0 var(--spacing-md);
    font-style: normal;
    font-size: var(--font-size-sm);
    color: inherit;
    opacity: 0.85;
}

.tiptap-event-venue__access-text {
    margin: 0 0 var(--spacing-md);
    font-size: var(--font-size-sm);
    color: inherit;
}

.tiptap-event-venue__more {
    margin: 0;
}

.tiptap-event-venue__more a {
    font-weight: 600;
    color: var(--color-primary);
}

.tiptap-event-block[data-bg="accentue"] .tiptap-event-venue__more a {
    color: inherit;
    text-decoration: underline;
}

/* ── Pied de page du mini-site ───────────────────────────────────────────── */

.minisite-footer {
    margin-top: var(--spacing-2xl);
    background-color: var(--color-navy, #10203a);
    color: #fff;
}

.minisite-footer__grid {
    display: grid;
    gap: var(--spacing-xl);
    padding: var(--spacing-2xl) 0;
    grid-template-columns: 1fr;
}

@media (min-width: 48rem) {
    .minisite-footer__grid {
        /* Quatre colonnes possibles ; celles qui n'ont rien à dire ne sont
           pas rendues, la grille se resserre d'elle-même. */
        grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
    }
}

.minisite-footer__title {
    margin: 0 0 var(--spacing-xs);
    font-size: var(--font-size-lg);
    font-weight: 700;
}

.minisite-footer__meta {
    margin: 0 0 var(--spacing-md);
    font-size: var(--font-size-sm);
    line-height: 1.6;
    opacity: 0.8;
}

.minisite-footer__back {
    margin: 0;
}

.minisite-footer__back a {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-2xs);
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: #fff;
    text-decoration: none;
}

.minisite-footer__back a:hover,
.minisite-footer__back a:focus-visible {
    text-decoration: underline;
}

.minisite-footer__heading {
    margin: 0 0 var(--spacing-sm);
    font-size: var(--font-size-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    opacity: 0.65;
}

.minisite-footer__nav ul,
.minisite-footer__editions ul,
.minisite-footer__contact ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: var(--spacing-2xs);
}

.minisite-footer__nav a,
.minisite-footer__editions a,
.minisite-footer__contact a {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-2xs);
    font-size: var(--font-size-sm);
    color: #fff;
    text-decoration: none;
    opacity: 0.85;
}

.minisite-footer__nav a:hover,
.minisite-footer__nav a:focus-visible,
.minisite-footer__editions a:hover,
.minisite-footer__editions a:focus-visible,
.minisite-footer__contact a:hover,
.minisite-footer__contact a:focus-visible {
    opacity: 1;
    text-decoration: underline;
}

/* L'édition en cours se distingue des archives : c'est le seul lien de la
   colonne qui mène vers l'avant. */
.minisite-footer__edition--latest {
    font-weight: 700;
    opacity: 1;
}

/* Grille explicite plutôt que flex + espace blanc : dans un conteneur flex,
   le nœud de texte blanc entre l'année et le titre est SUPPRIMÉ, et rien ne
   les sépare plus si le `gap` fait défaut. C'est ce qui donnait
   « 2017Oser pour enseigner ». Deux colonnes alignent en prime les années
   entre elles. */
/* Sélecteur volontairement redondant (`a.classe`) : la règle partagée avec la
   navigation et les contacts est `.minisite-footer__editions a`, plus
   spécifique qu'une classe seule. Écrite en classe seule, cette règle était
   perdante et le `display: inline-flex` partagé continuait de s'appliquer —
   la grille n'avait alors aucun effet, seul le maigre `gap` restait, d'où
   l'année collée au titre.
   Le lien « plus récente » n'a PAS cette classe : c'est un seul nœud de texte,
   qui dans une colonne de 2,75 rem se casserait à chaque mot. */
.minisite-footer__editions a.minisite-footer__edition {
    display: grid;
    grid-template-columns: 2.75rem 1fr;
    gap: var(--spacing-sm);
    align-items: baseline;
}

.minisite-footer__edition-year {
    font-variant-numeric: tabular-nums;
    opacity: 0.7;
}

.minisite-footer__legal {
    border-top: 1px solid rgb(255 255 255 / 0.14);
}

.minisite-footer__legal .container {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--spacing-sm) var(--spacing-lg);
    padding-top: var(--spacing-md);
    padding-bottom: var(--spacing-md);
}

.minisite-footer__brand-link {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-sm);
    text-decoration: none;
}

/* Le logo garde ses couleurs, sur une pastille claire.
   Une silhouette blanche (`filter: brightness(0) invert(1)`) a été essayée et
   écartée : la marque est un hexagone qui CONTIENT le texte « ASSOCIATION
   NATIONALE DES CESU ». Tout blanchir remplit la forme et efface le texte —
   il ne restait qu'une tache. Le pied de page général n'a pas ce problème,
   son fond est déjà clair. */
.minisite-footer__logo {
    display: block;
    height: 2.75rem;
    width: auto;
    padding: 0.25rem 0.4rem;
    border-radius: var(--radius-sm, 0.375rem);
    background-color: #fff;
}

.minisite-footer__copyright {
    margin: 0;
    font-size: var(--font-size-xs);
    color: #fff;
    opacity: 0.65;
}

/* Le menu CMS `footer-legal` rend sa propre liste de liens : la mise en
   ligne vaut donc pour nos ancres comme pour les siennes. */
.minisite-footer__legal-links,
.minisite-footer__legal-links ul {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-xs) var(--spacing-lg);
    margin: 0;
    padding: 0;
    list-style: none;
}

.minisite-footer__legal-links a {
    font-size: var(--font-size-xs);
    color: #fff;
    text-decoration: none;
    opacity: 0.65;
}

.minisite-footer__legal-links a:hover,
.minisite-footer__legal-links a:focus-visible {
    opacity: 1;
    text-decoration: underline;
}

/* ── Fil des communications (page de résumé) ─────────────────────────────── */

.resume-pager {
    display: grid;
    gap: var(--spacing-md);
    margin-top: var(--spacing-2xl);
    padding-top: var(--spacing-lg);
    border-top: 1px solid var(--color-border);
    grid-template-columns: 1fr;
}

@media (min-width: 48rem) {
    .resume-pager {
        grid-template-columns: 1fr auto 1fr;
        align-items: center;
    }

    /* La cible « suivante » est alignée à droite : sa place dans la grille dit
       déjà le sens de la lecture, l'alignement le confirme. */
    .resume-pager__link--next {
        text-align: right;
        justify-items: end;
    }
}

.resume-pager__link {
    display: grid;
    gap: var(--spacing-2xs);
    padding: var(--spacing-sm) var(--spacing-md);
    border-radius: var(--radius-md);
    text-decoration: none;
    background-color: var(--color-bg-light);
}

.resume-pager__link:hover,
.resume-pager__link:focus-visible {
    background-color: var(--color-primary-light);
}

.resume-pager__label {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    font-size: var(--font-size-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-primary);
}

.resume-pager__title {
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.resume-pager__position {
    margin: 0;
    font-size: var(--font-size-xs);
    color: var(--color-text-light);
    white-space: nowrap;
}

/* Réserve la colonne de gauche quand il n'y a pas de précédente, pour que la
   suivante reste à droite au lieu de glisser au centre. */
.resume-pager__spacer {
    display: none;
}

@media (min-width: 48rem) {
    .resume-pager__spacer {
        display: block;
    }
}
