/* ============================================
   VARIABLES CSS (typographie, espacements)
   Palettes : assets/css/themes.css (data-theme)
   ============================================ */
:root {
    --radius: 8px;
    --radius-md: 10px;

    /* Tailles de police */
    --font-xs: 0.75rem;
    --font-sm: 0.875rem;
    --font-base: 1rem;
    --font-xl: 1.75rem;
    --font-2xl: 2.5rem;
    --font-3xl: 3rem;

    /* Espacements */
    --spacing-xs: 0.25rem;
    --spacing-sm: 0.5rem;
    --spacing-md: 1rem;
    --spacing-lg: 1.5rem;
    --spacing-xl: 2rem;
}

/* ============================================
   RESET & BASE
   ============================================ */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Segoe UI', Roboto, system-ui, sans-serif;
    font-size: var(--font-base);
    line-height: 1.6;
    background-color: var(--bg-primary);
    color: var(--text-primary);
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

/* ============================================
   TYPOGRAPHIE
   ============================================ */
h1, h2, h3, h4, h5, h6 {
    margin-bottom: var(--spacing-md);
    font-weight: 600;
    line-height: 1.2;
    color: var(--text-primary);
}

h1 { font-size: var(--font-3xl); }
h2 { font-size: var(--font-2xl); }
h3 { font-size: var(--font-xl); }

a {
    color: var(--accent);
    text-decoration: none;
    transition: color 0.2s, background-color 0.2s;
}

a:hover {
    color: var(--accent-hover);
}

p {
    margin-bottom: var(--spacing-md);
}

.text-secondary { color: var(--text-secondary); }
.text-accent { color: var(--accent); }
.text-sm { font-size: var(--font-sm); }

/* ============================================
   LAYOUT & CONTAINERS
   ============================================ */
.container {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 var(--spacing-md);
}

/* Pages admin : largeur généreuse pour tableaux et formulaires multi-colonnes */
body.layout-admin .container {
    max-width: min(1920px, calc(100vw - 2 * var(--spacing-md)));
}

/* Liste invitations : largeur maximale pour le tableau et les cartes (sans plafond 1920px) */
body.layout-admin .container.inv-admin-invitations-page {
    max-width: min(100%, calc(100vw - 1rem));
    padding-left: var(--spacing-sm);
    padding-right: var(--spacing-sm);
}

/* Page invitations admin : mode ultra-large pour afficher plus de colonnes */
body.layout-admin-invitations-wide .layout-shell.container {
    max-width: calc(100vw - 0.5rem);
    padding-left: 0.25rem;
    padding-right: 0.25rem;
}

body.layout-admin-invitations-wide .container.inv-admin-invitations-page {
    max-width: calc(100vw - 0.5rem);
    padding-left: 0.25rem;
    padding-right: 0.25rem;
}

body.layout-admin-invitations-wide .inv-admin-invitations-page table {
    min-width: 2200px;
}
/* Garder le tableau stats identique au dashboard (ne pas l'étirer en mode invitations-wide) */
#invitations-filter-form.invitations-filter-form {
    display: block;
}

#invitations-filter-form .inv-filter-layout {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: var(--spacing-md);
}

#invitations-filter-form .inv-filter-event-col {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
    flex: 0 0 auto;
    min-width: 150px;
    max-width: min(220px, 100%);
}

#invitations-filter-form .inv-filter-fields-row {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--spacing-md);
    flex: 1 1 320px;
    min-width: 0;
}

#invitations-filter-form.inv-filter-form--loading {
    opacity: 0.72;
    pointer-events: none;
}

body.layout-admin-invitations-wide .inv-admin-invitations-page #admin-invitation-stats table {
    min-width: 0;
}

/* ------------------------------------------------------------------
   Tableau participants (admin) : zone d'affichage du tableau

   Objectifs (V4) :
   - Afficher TOUTES les lignes de la page (50 par défaut, configurable)
     en hauteur naturelle, SANS scroll interne vertical : c'est la page
     entière qui se défile.
   - Conserver le scroll HORIZONTAL pour le tableau "wide" (min-width
     2200 px) qui dépasse la largeur de l'écran.
   - L'en-tête (`<thead>`) reste visible en haut du navigateur lorsque
     l'utilisateur descend dans la page : ce comportement viewport-level
     est implémenté en JS via un clone fixe (cf. `inv_admin_list_sticky_head.js`),
     car `position: sticky` ne peut pas s'attacher au viewport tant
     que son conteneur a `overflow: auto` (limitation CSS standard).
   - La règle `position: sticky` ci-dessous est conservée comme FALLBACK
     no-JS : sans JavaScript, l'en-tête reste au moins collé en haut
     du wrapper.
   ------------------------------------------------------------------ */
body.layout-admin .inv-admin-invitations-page #inv-list-print-table-wrap.table-responsive {
    /* Scroll horizontal seulement : la zone grandit verticalement avec
       le contenu (auto-height), pas de défilement vertical interne. */
    overflow-x: auto;
    overflow-y: visible;
    -webkit-overflow-scrolling: touch;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    /* On NEUTRALISE toute hauteur fixée par d'anciennes versions du JS
       ou par un onglet resté ouvert avec l'ancien code (cache navigateur
       agressif). C'est cette protection qui supprime définitivement les
       effets "grossit puis rétrécit" rapportés en production. */
    height: auto !important;
    min-height: 0 !important;
    max-height: none !important;
    /* `resize` n'a plus de sens sans hauteur fixée : on neutralise pour
       éviter qu'une poignée résiduelle traîne dans le coin inférieur droit. */
    resize: none;
}

/* ------------------------------------------------------------------
   En-tête flottant (clone JS) du tableau participants

   Ce conteneur est créé dynamiquement par `inv_admin_list_sticky_head.js`.
   Il est positionné `fixed` en haut du viewport et n'apparaît que lorsque
   le vrai `<thead>` est sorti de l'écran (l'utilisateur a scrollé la page
   au-delà du haut du tableau). Sa position horizontale et son scroll
   sont synchronisés avec ceux du wrapper, pour qu'il reste parfaitement
   aligné avec les colonnes du tableau réel.
   ------------------------------------------------------------------ */
.inv-list-thead-floating {
    /* Positionnement : épinglé en haut du viewport, sur toute la largeur
       que le JS lui donne (= largeur visible du wrapper). */
    position: fixed;
    top: 0;
    left: 0;
    z-index: 40;
    /* Masque la portion du tableau cloné qui dépasserait latéralement
       (synchronisée via `margin-left` négatif côté JS). */
    overflow: hidden;
    /* Visuel similaire au header sticky d'origine pour la continuité. */
    background-color: var(--bg-secondary);
    box-shadow: 0 2px 0 var(--border-color), 0 4px 12px rgba(0, 0, 0, 0.08);
    /* Caché par défaut : le JS l'affiche uniquement quand utile. */
    display: none;
}

.inv-list-thead-floating > table {
    border-collapse: separate;
    border-spacing: 0;
    margin: 0;
    /* Largeur explicite imposée par le JS pour matcher le tableau réel. */
    table-layout: fixed;
}

.inv-list-thead-floating th {
    /* Mêmes styles visuels que les <th> du tableau réel, pour que
       l'utilisateur ne perçoive aucun saut au moment du basculement. */
    background-color: var(--bg-secondary);
    white-space: nowrap;
    line-height: 1.25;
    vertical-align: bottom;
    padding: 0.55rem 0.7rem;
    text-align: left;
    border-bottom: 2px solid var(--border-color);
    box-sizing: border-box;
}

/* L'en-tête flottant ne doit pas s'afficher pendant l'impression
   (les @media print suppriment déjà la plupart des éléments d'UI, mais
   on est explicite ici pour zéro ambiguïté). */
@media print {
    .inv-list-thead-floating {
        display: none !important;
    }
}

body.inv-list-printing .inv-list-thead-floating {
    display: none !important;
}

body.layout-admin .inv-admin-invitations-page #inv-list-print-table {
    overflow: visible;
    border-collapse: separate;
    border-spacing: 0;
    margin: 0;
    width: 100%;
}

body.layout-admin-invitations-wide .inv-admin-invitations-page #inv-list-print-table {
    min-width: 2200px;
}

body.layout-admin .inv-admin-invitations-page #inv-list-print-table thead th {
    position: sticky;
    top: 0;
    z-index: 25;
    background-color: var(--bg-secondary);
    box-shadow: 0 2px 0 var(--border-color);
    white-space: nowrap;
    line-height: 1.25;
    vertical-align: bottom;
}

body.layout-admin .inv-admin-invitations-page #inv-list-print-table .inv-th-label-nowrap {
    white-space: nowrap;
}

/* Plus aucune surcharge de hauteur sur mobile : le wrapper reste en
   `height: auto` et la page se défile. La règle `position: sticky`
   (fallback no-JS) garde l'en-tête en haut du wrapper sur mobile,
   et le clone JS prend le relais en haut du viewport sinon. */

.logo {
    font-size: var(--font-xl);
    margin: 0;
}

.logo a {
    color: var(--accent);
    text-decoration: none;
}

.logo-with-toggle {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
}

.header-menu-toggle {
    border: 1px solid var(--border-color);
    background: transparent;
    color: var(--text-primary);
    border-radius: var(--radius);
    width: 2.2rem;
    height: 2.2rem;
    font-size: 1.1rem;
    line-height: 1;
    cursor: pointer;
}

.header-menu-toggle--floating {
    position: fixed;
    top: var(--spacing-sm);
    left: var(--spacing-sm);
    z-index: 1200;
    background: var(--bg-secondary);
}

.nav {
    display: flex;
    gap: var(--spacing-lg);
    flex-wrap: wrap;
}

.nav-link {
    color: var(--text-primary);
    font-weight: 500;
    padding: var(--spacing-xs) 0;
    border-bottom: 2px solid transparent;
}

.nav-link:hover {
    color: var(--accent);
    border-bottom-color: var(--accent);
}

.main {
    flex: 1;
    padding: var(--spacing-xl) 0;
}

.layout-shell {
    display: block;
}

.left-sidebar {
    width: min(320px, 84vw);
    position: fixed;
    top: 0;
    left: 0;
    height: 100vh;
    border: 1px solid var(--border-color);
    background: var(--bg-secondary);
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
    padding: var(--spacing-sm);
    display: flex;
    flex-direction: column;
    max-height: 100vh;
    z-index: 1300;
    transform: translateX(-105%);
    opacity: 0;
    pointer-events: none;
    transition: transform 0.28s ease, opacity 0.28s ease;
}

.sidebar-close-btn {
    align-self: flex-end;
    border: 1px solid var(--border-color);
    background: transparent;
    color: var(--text-primary);
    border-radius: var(--radius);
    width: 2rem;
    height: 2rem;
    line-height: 1;
    cursor: pointer;
    margin: var(--spacing-xs);
}

.left-sidebar-scroll {
    overflow-y: auto;
    padding: var(--spacing-sm);
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
}

.left-sidebar-brand {
    font-size: var(--font-xl);
    font-weight: 700;
    text-decoration: none;
    margin-bottom: 0;
}

.left-sidebar-brand-block {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    margin-bottom: var(--spacing-sm);
}

.left-sidebar-about-link {
    font-size: var(--font-sm);
    font-weight: 500;
    color: var(--text-secondary);
    padding-left: 0.15rem;
}

.left-sidebar-about-link:hover,
.left-sidebar-about-link:focus-visible {
    color: var(--accent);
}

.about-contubernium-panel {
    position: fixed;
    inset: 0;
    z-index: 1200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--spacing-md);
}

.about-contubernium-panel[hidden] {
    display: none !important;
}

.about-contubernium-panel__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.55);
}

.about-contubernium-panel__dialog {
    position: relative;
    z-index: 1;
    width: min(720px, 100%);
    max-height: min(88vh, 900px);
    overflow: auto;
    margin: 0;
    padding: var(--spacing-lg);
    box-shadow: 0 12px 40px var(--shadow);
}

.about-contubernium-panel__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-md);
}

.about-contubernium-panel__title {
    margin: 0;
    font-size: var(--font-xl);
    color: var(--accent);
}

.about-contubernium-panel__close {
    border: 0;
    background: transparent;
    color: var(--text-secondary);
    font-size: 1.25rem;
    line-height: 1;
    cursor: pointer;
    padding: 0.15rem 0.35rem;
    border-radius: var(--radius);
}

.about-contubernium-panel__close:hover,
.about-contubernium-panel__close:focus-visible {
    color: var(--text-primary);
    background: var(--overlay-subtle);
}

.about-contubernium-panel__text p {
    margin-bottom: var(--spacing-md);
}

.about-contubernium-panel__text p:last-child {
    margin-bottom: 0;
}

.about-contubernium-panel__figure {
    margin: var(--spacing-lg) 0 0;
}

.about-contubernium-panel__image {
    display: block;
    width: 100%;
    height: auto;
    border-radius: var(--radius-md);
}

body.about-contubernium-open {
    overflow: hidden;
}

body.sidebar-open .left-sidebar {
    transform: translateX(0);
    opacity: 1;
    pointer-events: auto;
}

.left-sidebar-link {
    color: var(--text-primary);
    text-decoration: none;
    font-weight: 600;
}

.left-sidebar-link:hover {
    color: var(--accent);
}

.admin-bar-session {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 0.5rem 0.75rem;
    margin-left: auto;
    line-height: 1.25;
    white-space: nowrap;
}

.admin-bar-logout-link {
    font-size: var(--font-sm);
    font-weight: 600;
    color: var(--text-secondary);
    text-decoration: none;
}

.admin-bar-logout-link:hover,
.admin-bar-logout-link:focus-visible {
    color: var(--accent);
}

.admin-bar-user-meta {
    font-size: var(--font-sm);
    color: var(--success, #4caf50);
    font-weight: 600;
}

.admin-bar-user-name {
    font-weight: 600;
    color: var(--text-primary);
}

/* Navigation admin : barre horizontale (desktop) / menu latéral (mobile) */
.left-sidebar-admin-nav {
    display: none;
    flex-direction: column;
    gap: var(--spacing-sm);
    margin-top: var(--spacing-sm);
    padding-top: var(--spacing-sm);
    border-top: 1px solid var(--border-color);
}

.home-announcement-banner {
    border: 1px solid rgba(67, 160, 71, 0.5);
    border-radius: var(--radius-md);
    padding: var(--spacing-md) var(--spacing-lg);
    margin-bottom: var(--spacing-lg);
}

.home-announcement-banner h3 {
    margin: 0 0 var(--spacing-xs) 0;
    color: var(--accent);
}

.home-announcement-banner p {
    margin-bottom: var(--spacing-sm);
}

.home-announcement-banner--fullscreen {
    position: relative;
    width: 100%;
    margin-left: 0;
    height: auto;
    min-height: 100%;
    max-height: none;
    margin-top: 0;
    margin-bottom: 0;
    border-radius: 0;
    border: 0;
    overflow: hidden;
    display: flex;
    align-items: center;
    flex: 1 1 auto;
}

.home-announcement-banner__picture {
    display: block;
    width: 100%;
}

.home-announcement-banner__bg {
    position: relative;
    display: block;
    width: 100%;
    height: auto;
    object-fit: cover;
    object-position: center;
}

.home-announcement-banner__video {
    position: relative;
    display: block;
    width: 100%;
    height: auto;
    max-height: 100vh;
    object-fit: cover;
    object-position: center;
    background-color: #000;
    pointer-events: none;
}

.home-announcement-banner--video {
    background-color: #000;
}

.home-announcement-banner--fullscreen::before {
    content: none;
}

@media (max-width: 768px) {
    .home-announcement-banner--fullscreen {
        min-height: 0;
        max-height: none;
        margin-top: 0;
    }

    body.home-fullscreen .main {
        flex: 0 0 auto;
    }
}

body.home-fullscreen .layout-shell.container {
    width: 100%;
    max-width: 100%;
    padding-left: 0;
    padding-right: 0;
}

body.home-fullscreen .main {
    display: block;
    min-height: 0;
    padding-top: 0;
    padding-bottom: 0;
}

body.home-fullscreen {
    background-color: var(--home-body-background-color, var(--bg-primary));
}

.home-main-banner-placeholder {
    min-height: 260px;
    border: 2px dashed var(--border-color);
    border-radius: var(--radius-md);
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    color: var(--text-secondary);
    background: var(--overlay-muted, rgba(255, 255, 255, 0.02));
}

.footer {
    background-color: var(--bg-secondary);
    padding: var(--spacing-lg) 0;
    text-align: center;
    margin-top: auto;
    border-top: 1px solid var(--border-color);
}

.footer-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--spacing-sm);
    text-align: center;
}

/* Lien discret vers la connexion gestion (non mis en avant dans le menu) */
.footer-admin-access {
    display: block;
    margin: 0 auto;
    font-size: var(--font-xs);
    color: var(--text-secondary);
    opacity: 0.4;
    text-decoration: none;
    text-align: center;
}

.footer-admin-access:hover {
    opacity: 0.75;
    color: var(--text-secondary);
}

.footer-copyright {
    margin: 0 auto;
    font-size: var(--font-sm);
    color: var(--text-secondary);
    text-align: center;
}

.footer-legal-nav {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    align-content: center;
    gap: 0.35rem 1.25rem;
    margin: 0 auto;
    padding: 0;
    max-width: 100%;
    text-align: center;
}

.footer-legal-nav__link {
    font-size: var(--font-sm);
    color: var(--text-secondary);
    text-decoration: underline;
    text-underline-offset: 2px;
    white-space: nowrap;
}

.footer-legal-nav__link:hover,
.footer-legal-nav__link:focus-visible {
    color: var(--text-secondary);
    opacity: 0.85;
}

.legal-page {
    max-width: 52rem;
    margin-bottom: var(--spacing-xl);
}

.legal-page__title {
    margin-top: 0;
    margin-bottom: var(--spacing-lg);
}

.legal-page__content {
    line-height: 1.6;
}

.legal-page__content h2 {
    margin-top: var(--spacing-lg);
    margin-bottom: var(--spacing-sm);
    font-size: 1.15rem;
}

.legal-page__content h2:first-child {
    margin-top: 0;
}

.legal-page__content ul {
    padding-left: 1.25rem;
}

.legal-table {
    width: 100%;
    border-collapse: collapse;
    margin: var(--spacing-md) 0;
    font-size: var(--font-sm);
}

.legal-table th,
.legal-table td {
    border: 1px solid var(--border-color);
    padding: var(--spacing-sm);
    text-align: left;
    vertical-align: top;
}

.legal-table th {
    background: var(--overlay-subtle, rgba(255, 255, 255, 0.04));
}

.cookie-consent {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1000;
    background: var(--bg-secondary);
    border-top: 1px solid var(--border-color);
    box-shadow: 0 -4px 16px var(--shadow);
    padding: var(--spacing-md) 0;
}

.cookie-consent__inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--spacing-md);
}

.cookie-consent__text {
    margin: 0;
    flex: 1 1 16rem;
    font-size: var(--font-sm);
    line-height: 1.5;
}

.cookie-consent__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
}

/* ============================================
   CARTES (Événements, Invitations, Forms)
   ============================================ */
.card-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: var(--spacing-lg);
    margin-top: var(--spacing-lg);
}

/* Largeur cible d'une carte « Événements à venir » (grille 3 colonnes dans .container 1200px) */
:root {
    --event-card-grid-min: 300px;
    --event-card-grid-max: calc((1200px - 2 * var(--spacing-md) - 2 * var(--spacing-lg)) / 3);
}

.card {
    background-color: var(--bg-card);
    border-radius: 8px;
    padding: var(--spacing-lg);
    box-shadow: 0 4px 6px var(--shadow);
    transition: transform 0.2s, box-shadow 0.2s;
}

.card-title {
    font-size: var(--font-xl);
    color: var(--accent);
    margin-bottom: var(--spacing-sm);
}

.card-meta {
    color: var(--text-secondary);
    font-size: var(--font-sm);
    margin-bottom: var(--spacing-md);
}

.event-card {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 0;
    height: 100%;
}

/* Page publique — Événements à venir */
.events-upcoming-page > h2 {
    margin-bottom: 12px;
}

/* Compte à rebours — cartes « Événements à venir » */
.event-countdown {
    display: flex;
    align-items: flex-start;
    justify-content: center;
    flex-wrap: wrap;
    gap: 0.15rem 0.35rem;
    padding: 12px;
    background: linear-gradient(180deg, var(--countdown-bg-start, #12142e) 0%, var(--background) 100%);
    border-bottom: 1px solid var(--countdown-border, rgba(132, 145, 199, 0.12));
}

.event-countdown__unit {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-width: 3.25rem;
}

.event-countdown__value {
    font-size: clamp(1.85rem, 4.5vw, 2.65rem);
    font-weight: 700;
    line-height: 1;
    color: var(--countdown-value, #c5cce8);
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.02em;
}

.event-countdown__label {
    margin-top: 0.45rem;
    font-size: 0.72rem;
    font-weight: 500;
    color: var(--countdown-label, #8f9bc8);
    text-transform: capitalize;
    letter-spacing: 0.02em;
}

.event-countdown__sep {
    align-self: flex-start;
    margin-top: 0.2rem;
    padding: 0 0.1rem;
    font-size: clamp(1.6rem, 3.5vw, 2.2rem);
    font-weight: 700;
    line-height: 1;
    color: var(--countdown-value, #c5cce8);
    user-select: none;
}

.event-countdown--ended .event-countdown__value,
.event-countdown--ended .event-countdown__sep {
    opacity: 0.55;
}

/* Compte à rebours — téléphone : léger padding, tailles intermédiaires */
@media (max-width: 768px) {
    .event-countdown {
        padding: 12px;
        gap: 0.12rem 0.3rem;
    }

    .event-countdown__unit {
        min-width: 2.85rem;
    }

    .event-countdown__value {
        font-size: clamp(1.55rem, 5.8vw, 2.05rem);
    }

    .event-countdown__label {
        margin-top: 0.32rem;
        font-size: 0.68rem;
    }

    .event-countdown__sep {
        margin-top: 0.15rem;
        padding: 0 0.05rem;
        font-size: clamp(1.35rem, 4.5vw, 1.8rem);
    }
}

@media (max-width: 480px) {
    .event-countdown {
        padding: 12px;
        gap: 0.08rem 0.22rem;
    }

    .event-countdown__unit {
        min-width: 2.55rem;
    }

    .event-countdown__value {
        font-size: clamp(1.42rem, 6.2vw, 1.78rem);
    }

    .event-countdown__label {
        margin-top: 0.26rem;
        font-size: 0.64rem;
    }

    .event-countdown__sep {
        margin-top: 0.1rem;
        font-size: clamp(1.22rem, 4.2vw, 1.55rem);
    }
}

@media (max-width: 380px) {
    .event-countdown {
        padding: 12px;
    }

    .event-countdown__unit {
        min-width: 2.35rem;
    }

    .event-countdown__value {
        font-size: clamp(1.32rem, 6.5vw, 1.62rem);
    }

    .event-countdown__label {
        font-size: 0.62rem;
    }
}

.event-card > .card-content {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding: 12px;
}

.event-card-text {
    flex: 1 1 auto;
    min-height: 0;
}

.event-card-cta {
    align-self: flex-start;
    margin-top: var(--spacing-md);
}

/* Cartes événements : rendu visuel aligné sur le CTA hero, sans modifier .home-hero__cta */
a.btn.btn-primary.event-card-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 1rem 2.25rem;
    background: var(--home-hero-btn-bg);
    color: var(--home-hero-btn-fg);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    font-size: 0.95rem;
    font-weight: 600;
    border: 1px solid var(--home-hero-btn-border);
    border-radius: 0;
    transition: background-color 0.2s ease, color 0.2s ease;
}

a.btn.btn-primary.event-card-cta:hover,
a.btn.btn-primary.event-card-cta:focus-visible {
    background: var(--home-hero-btn-hover-bg);
    color: var(--home-hero-btn-hover-fg);
    border-color: var(--home-hero-btn-border);
    outline: none;
}

.card-image {
    width: 100%;
    height: 180px;
    overflow: hidden;
    background-color: var(--bg-secondary);
    display: flex;
    align-items: center;
    justify-content: center;
}

.card-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
}
/* Focus visible uniquement sur les liens et boutons */
a:focus, button:focus {
    outline: 3px solid var(--accent);
    outline-offset: 2px;
}

.skip-link:focus {
    top: 10px;
    left: 10px;
}
/* Lien d'évitement pour le clavier */
.skip-link {
    position: absolute;
    top: -40px;
    left: 0;
    background: var(--accent);
    color: #000;
    padding: 8px 16px;
    z-index: 100;
    text-decoration: none;
}
.skip-link:focus {
    top: 0;
}
/* Masque les éléments pour les lecteurs de screen */
/* Messages admin invitations : aperçu (3 mots) + fenêtre plein texte */
.inv-admin-msg-wrap {
    max-width: min(18rem, 100%);
    min-width: 0;
}

.inv-send-pdf-btn {
    min-width: 2.35rem;
    padding-left: 0.45rem;
    padding-right: 0.45rem;
    transition: background-color 0.35s ease, border-color 0.35s ease, color 0.35s ease, transform 0.2s ease;
}

.inv-send-pdf-btn__icon {
    display: inline-block;
    font-size: 1.05rem;
    line-height: 1;
}

.inv-send-pdf-btn--sending .inv-send-pdf-btn__icon {
    animation: invSendPdfFly 0.65s ease-in-out infinite;
}

.inv-send-pdf-btn--sent {
    background-color: var(--success, #16a34a) !important;
    border-color: var(--success, #16a34a) !important;
    color: #fff !important;
    cursor: default;
    opacity: 1;
}

.inv-send-pdf-btn--sent .inv-send-pdf-btn__icon {
    animation: invSendPdfDone 0.5s cubic-bezier(0.22, 1, 0.36, 1);
    filter: brightness(1.05);
}

@keyframes invSendPdfFly {
    0%,
    100% {
        transform: translateY(0) scale(1);
    }
    45% {
        transform: translateY(-5px) scale(1.18);
    }
}

@keyframes invSendPdfDone {
    from {
        transform: scale(0.75) rotate(-8deg);
        opacity: 0.65;
    }
    to {
        transform: scale(1) rotate(0deg);
        opacity: 1;
    }
}

@media (prefers-reduced-motion: reduce) {
    .inv-send-pdf-btn--sending .inv-send-pdf-btn__icon,
    .inv-send-pdf-btn--sent .inv-send-pdf-btn__icon {
        animation: none;
    }
}

.inv-admin-msg-open {
    width: 100%;
    text-align: left;
    white-space: normal;
    line-height: 1.35;
    font-size: var(--font-sm, 0.875rem);
}

.inv-admin-msg-open--unread {
    border: 3px solid #ffd400 !important;
    border-radius: 0 !important;
    background: transparent !important;
}

.inv-admin-msg-block + .inv-admin-msg-block {
    margin-top: 1rem;
}

.inv-admin-msg-block-title {
    font-size: var(--font-sm, 0.875rem);
    font-weight: 700;
    line-height: 1.35;
    margin-bottom: 0.35rem;
}

.inv-admin-msg-card {
    padding: 0.65rem 0.75rem;
    border-radius: var(--radius-md, 8px);
    border: 1px solid var(--border-color, #3a3a3a);
    background: rgba(255, 255, 255, 0.04);
    font-size: var(--font-sm, 0.875rem);
    line-height: 1.45;
}

.inv-admin-msg-card--reply {
    background: rgba(255, 215, 0, 0.08);
    border-color: rgba(255, 215, 0, 0.22);
}

.inv-admin-msg-replies {
    margin-top: 0.75rem;
}

.inv-admin-msg-conversation-entry + .inv-admin-msg-conversation-entry {
    margin-top: 0.75rem;
}

.inv-admin-msg-line + .inv-admin-msg-line {
    margin-top: 0.3rem;
}

.inv-admin-msg-line {
    font-size: inherit;
    line-height: 1.45;
    word-break: break-word;
}

.inv-admin-msg-line--stamp {
    font-size: 0.75rem;
    line-height: 1.3;
    color: var(--text-secondary, #b0b0b0);
    margin-bottom: 0.15rem;
}

.inv-admin-msg-reply-form textarea {
    width: 100%;
    min-height: 6rem;
    resize: vertical;
}

.inv-admin-msg-reply-submit--sent {
    background-color: var(--success, #16a34a) !important;
    border-color: var(--success, #16a34a) !important;
    color: #fff !important;
    cursor: default;
    opacity: 1;
}

.inv-admin-msg-mark-read--done {
    background-color: var(--success, #16a34a) !important;
    border-color: var(--success, #16a34a) !important;
    color: #fff !important;
    cursor: default;
    opacity: 1;
    animation: invAdminMsgMarkReadDone 0.35s ease-out;
}

@keyframes invAdminMsgMarkReadDone {
    from {
        opacity: 0.6;
        transform: scale(0.96);
    }
    to {
        opacity: 1;
        transform: scale(1);
    }
}

.inv-admin-msg-open--unread.inv-admin-msg-open--read-pending {
    border-color: rgba(255, 212, 0, 0.45) !important;
    transition: border-color 0.35s ease, background 0.35s ease;
}

.inv-admin-msg-reply-form--out {
    overflow: hidden;
    pointer-events: none;
    animation: invAdminMsgFormOut 0.42s ease-in forwards;
}

.inv-admin-msg-conversation-entry--enter {
    animation: invAdminMsgEntryIn 0.55s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.inv-admin-msg-card--pulse {
    animation: invAdminMsgReplyPulse 0.75s ease-out;
}

@keyframes invAdminMsgFormOut {
    from {
        opacity: 1;
        max-height: 280px;
        margin-top: 0.9rem;
    }
    to {
        opacity: 0;
        max-height: 0;
        margin-top: 0;
        padding-top: 0;
        padding-bottom: 0;
    }
}

@keyframes invAdminMsgEntryIn {
    from {
        opacity: 0;
        transform: translateY(14px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes invAdminMsgReplyPulse {
    0% {
        box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.5);
    }
    70% {
        box-shadow: 0 0 0 12px rgba(76, 175, 80, 0);
    }
    100% {
        box-shadow: none;
    }
}

@media (prefers-reduced-motion: reduce) {
    .inv-admin-msg-reply-form--out,
    .inv-admin-msg-conversation-entry--enter,
    .inv-admin-msg-card--pulse {
        animation: none;
    }
}

.inv-admin-msg-dialog::backdrop {
    background: rgba(0, 0, 0, 0.45);
}

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border-width: 0;
}
/* Bannière page détail événement */
.event-banner {
    width: 100%;
    max-height: min(600px, 72vh);
    overflow: hidden;
    border-radius: var(--radius);
    margin-bottom: var(--spacing-lg);
    background-color: var(--bg-secondary);
}

.event-banner__picture,
.event-banner > img {
    display: block;
    width: 100%;
    height: min(600px, 72vh);
    margin: 0;
    overflow: hidden;
}

.event-banner__picture img,
.event-banner > img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
}

@media (max-width: 768px) {
    .event-banner {
        max-height: none;
        overflow: visible;
    }

    .event-banner__picture,
    .event-banner > img {
        height: auto;
        overflow: visible;
    }

    .event-banner__picture img,
    .event-banner > img {
        height: auto;
        max-height: none;
        object-fit: contain;
        object-position: center top;
    }
}

.card-image picture,
.card-image picture img {
    display: block;
    width: 100%;
    height: 100%;
}

.card-image picture img {
    object-fit: cover;
    object-position: center;
}

/* Texte de description d'événement : plus lisible sur grands écrans */
.event-description p {
    font-size: clamp(1rem, 0.35vw + 0.95rem, 1.2rem);
    line-height: 1.75;
    max-width: 90ch;
}

.event-description-content {
    font-size: clamp(1rem, 0.35vw + 0.95rem, 1.2rem);
    line-height: 1.75;
    max-width: 90ch;
}

.event-description-content > div,
.event-description-content > p,
.event-description-content p,
.event-description-content ul,
.event-description-content ol,
.event-description-content blockquote {
    margin-top: 0;
    margin-bottom: 0.4rem;
}

.event-description-content > div:empty,
.event-description-content > p:empty {
    display: none;
    margin: 0;
    padding: 0;
    min-height: 0;
}

.event-description-content > div:has(> br:only-child):not(.reglement-section-break),
.event-description-content > p:has(> br:only-child) {
    display: none;
    margin: 0;
    padding: 0;
}

/* Règlement public : espacement entre sections, titres « … : » proches du texte suivant */
.reglement-public-content .reglement-para {
    margin: 0 0 1.15rem;
    line-height: 1.6;
}

.reglement-public-content .reglement-para:last-child {
    margin-bottom: 0;
}

.reglement-public-content > div,
.reglement-public-content > p {
    margin-top: 0;
    margin-bottom: 0.85rem;
    line-height: 1.6;
}

.reglement-public-content > div:last-child,
.reglement-public-content > p:last-child {
    margin-bottom: 0;
}

.reglement-public-content > div.reglement-line-heading,
.reglement-public-content > div.reglement-line-heading + div {
    margin-bottom: 0.2rem;
}

.reglement-public-content > div.reglement-line-heading + div {
    margin-bottom: 0.85rem;
}

.reglement-public-content .reglement-section-break {
    display: block;
    min-height: 1rem;
    margin: 0;
    padding: 0;
}

.reglement-public-content .reglement-line-heading,
.reglement-public-content strong.reglement-line-heading,
.reglement-public-content .reglement-line-heading strong {
    font-weight: 700;
}

.rich-text-editor .reglement-line-heading strong {
    font-weight: 700;
}

.event-description-content img {
    max-width: 100%;
    height: auto;
    border-radius: 6px;
}

.event-description-content img.event-desc-img--zoomable {
    max-width: min(100%, 420px);
    cursor: zoom-in;
    transition: opacity 0.15s ease, box-shadow 0.15s ease;
}

.event-description-content img.event-desc-img--zoomable:hover,
.event-description-content img.event-desc-img--zoomable:focus-visible {
    opacity: 0.92;
    box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.45);
    outline: none;
}

.event-desc-image-lightbox {
    position: fixed;
    inset: 0;
    z-index: 10050;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1.25rem;
    box-sizing: border-box;
}

.event-desc-image-lightbox[hidden] {
    display: none !important;
}

.event-desc-image-lightbox__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.78);
    border: none;
    padding: 0;
    margin: 0;
    cursor: zoom-out;
}

.event-desc-image-lightbox__close {
    position: absolute;
    top: 0.75rem;
    right: 0.75rem;
    z-index: 2;
    width: 2.5rem;
    height: 2.5rem;
    border: none;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.14);
    color: #fff;
    font-size: 1.5rem;
    line-height: 1;
    cursor: pointer;
}

.event-desc-image-lightbox__close:hover,
.event-desc-image-lightbox__close:focus-visible {
    background: rgba(255, 255, 255, 0.28);
    outline: 2px solid rgba(34, 197, 94, 0.6);
    outline-offset: 2px;
}

.event-desc-image-lightbox__stage {
    position: relative;
    z-index: 1;
    margin: 0;
    padding: 0;
    animation: event-desc-image-lightbox-in 0.22s ease;
}

.event-desc-image-lightbox__stage img {
    display: block;
    width: auto;
    height: auto;
    max-width: 96vw !important;
    max-height: 90vh !important;
    border-radius: 8px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.55);
    object-fit: contain;
}

@keyframes event-desc-image-lightbox-in {
    from {
        opacity: 0;
        transform: scale(0.96);
    }
    to {
        opacity: 1;
        transform: scale(1);
    }
}

body.event-desc-image-lightbox-open {
    overflow: hidden;
}

/* Infos événement : texte plus grand + titres en vert/rouge */
.event-meta p {
    font-size: clamp(1.05rem, 0.45vw + 1rem, 1.35rem);
    line-height: 1.7;
    margin-bottom: var(--spacing-sm);
}

.event-meta p strong {
    font-size: clamp(1.08rem, 0.5vw + 1rem, 1.4rem);
    font-weight: 700;
}

.event-meta p:nth-child(odd) strong {
    color: #22c55e; /* vert */
}

.event-meta p:nth-child(even) strong {
    color: #ef4444; /* rouge */
}

.card-image.placeholder {
    font-size: 3rem;
    color: var(--text-secondary);
}

.card-content {
    padding: var(--spacing-lg);
}

/* Encadré aide bannière (admin : création / édition événement) */
.banner-upload-hint {
    margin-top: var(--spacing-md);
    padding: var(--spacing-md);
    font-size: var(--font-sm);
    line-height: 1.55;
    background-color: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: var(--radius);
    color: var(--text-primary);
}

.banner-upload-hint__title {
    margin: 0 0 var(--spacing-sm);
    font-weight: 600;
    font-size: var(--font-sm);
    color: var(--text-secondary);
}

.banner-upload-hint__list {
    margin: 0 0 var(--spacing-sm);
    padding-left: 1.25rem;
}

.banner-upload-hint__list li {
    margin-bottom: var(--spacing-sm);
}

.banner-upload-hint__list li:last-child {
    margin-bottom: 0;
}

.banner-upload-hint__file {
    margin: 0;
    padding-top: var(--spacing-sm);
    border-top: 1px solid var(--border-color);
    color: var(--text-secondary);
    font-size: var(--font-sm);
}

/* ============================================
   FORMULAIRES
   ============================================ */
.form-group {
    margin-bottom: var(--spacing-lg);
}

label,
.field-label {
    display: block;
    margin-bottom: var(--spacing-xs);
    color: var(--text-secondary);
    font-size: var(--font-sm);
    font-weight: 500;
}

input, select, textarea {
    width: 100%;
    padding: var(--spacing-sm) var(--spacing-md);
    background-color: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 4px;
    color: var(--text-primary);
    font-size: var(--font-base);
    transition: border-color 0.2s;
}

input:focus, select:focus, textarea:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 2px rgba(83, 150, 231, 0.2);
}

/* Checkbox et radio */
input[type="checkbox"], input[type="radio"] {
    width: auto;
    margin-right: var(--spacing-sm);
    accent-color: var(--accent);
}

/* Formulaire public inscription : plus lisible et plus compact */
.event-public-registration-form {
    max-width: 760px;
    margin-left: auto;
    margin-right: auto;
    padding: clamp(0.85rem, 1.8vw, 1.1rem);
}

/* Page événement — « Inscription à cet événement » : pleine largeur (sans marges latérales ~164px) */
.event-detail .event-public-registration-form {
    max-width: none;
    margin-left: 0;
    margin-right: 0;
}

.event-detail .erf-form-section .event-public-registration-form {
    box-shadow: none;
    background: transparent;
    padding: 0;
    border-radius: 0;
}

.event-public-registration-form label,
.event-public-registration-form .field-label,
.event-public-registration-form legend {
    font-size: clamp(1rem, 1.7vw, 1.08rem);
    color: var(--text-primary);
    font-weight: 600;
}

.event-public-registration-form input,
.event-public-registration-form select,
.event-public-registration-form textarea {
    font-size: clamp(1rem, 1.8vw, 1.12rem);
    line-height: 1.35;
    padding: 0.75rem 0.85rem;
}

/* Date de naissance : icône calendrier blanche */

.event-public-registration-form input[type="date"]::-webkit-calendar-picker-indicator {
    filter: invert(1);
    opacity: 1;
    cursor: pointer;
}

.event-public-registration-form .form-group {
    margin-bottom: clamp(0.7rem, 1.5vw, 0.95rem);
}

.form-group-checkbox .checkbox-label {
    display: flex;
    align-items: flex-start;
    gap: var(--spacing-sm);
    cursor: pointer;
    margin-bottom: 0;
    font-weight: 400;
    color: var(--text-primary);
}

.form-group-checkbox .checkbox-label input[type="checkbox"] {
    margin-top: 0.2rem;
    flex-shrink: 0;
}

/* Case règlement : texte compact sur petit écran */
@media (max-width: 768px) {
    .event-detail .event-public-registration-form label[for^="rules_ack"] .rules-ack-text,
    .event-public-registration-form label[for^="rules_ack"] .rules-ack-text,
    .event-public-registration-form .rules-ack-text {
        font-size: 13px;
        line-height: 1.35;
        font-weight: 400;
    }

    .event-detail .event-public-registration-form .rules-ack-text a,
    .event-public-registration-form .rules-ack-text a {
        font-size: inherit;
    }
}

@media (max-width: 480px) {
    .event-detail .event-public-registration-form label[for^="rules_ack"] .rules-ack-text,
    .event-public-registration-form label[for^="rules_ack"] .rules-ack-text,
    .event-public-registration-form .rules-ack-text {
        font-size: 12px;
        line-height: 1.32;
    }
}

/* ============================================
   BOUTONS
   ============================================ */
.btn {
    display: inline-block;
    padding: var(--spacing-sm) var(--spacing-lg);
    background-color: var(--bg-secondary);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
    border-radius: 4px;
    font-size: var(--font-base);
    font-weight: 500;
    text-align: center;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}

.btn:hover {
    background-color: var(--list-hover);
    border-color: var(--border-light);
    color: var(--text-primary);
}

.btn-primary {
    background-color: var(--accent);
    color: #ffffff;
    border-color: var(--accent);
}

.btn-primary:hover {
    background-color: var(--accent-hover);
    border-color: var(--accent-hover);
    color: #ffffff;
}

.btn-danger {
    background-color: var(--danger);
    border-color: var(--danger);
    color: white;
}

.btn-danger:hover {
    background-color: #c0392b;
}

.btn-sm {
    padding: var(--spacing-xs) var(--spacing-md);
    font-size: var(--font-sm);
}

.btn-md {
    padding: calc(var(--spacing-xs) + var(--spacing-sm)) var(--spacing-lg);
    font-size: var(--font-base);
}

/* Liste admin invitations : modifier + envoi email côte à côte, boutons compacts */
.inv-actions-inline {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    flex-wrap: nowrap;
}

.inv-actions-inline .btn {
    padding: 0.2rem 0.45rem;
    font-size: var(--font-sm);
    line-height: 1.2;
    min-width: auto;
}

/* Ancre de retour après envoi PDF (#inv-admin-row-id) : évite que la ligne soit sous l’en-tête */
[id^="inv-admin-row-"] {
    scroll-margin-top: 5rem;
}

/* Couleur admin (tribunes / parkings) */
.admin-color-field label {
    display: block;
    margin-bottom: 0.25rem;
    font-size: var(--font-sm);
}

.admin-color-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

.admin-color-hex {
    width: 7.5rem;
    max-width: 100%;
    margin: 0;
}

.admin-color-native {
    width: 2.25rem;
    height: 2.25rem;
    padding: 0;
    border: 1px solid var(--border-color, #ccc);
    border-radius: 6px;
    cursor: pointer;
    background: transparent;
}

.admin-color-details {
    margin-top: 0.35rem;
}

.admin-color-details summary {
    cursor: pointer;
    font-size: var(--font-sm);
    color: var(--accent);
    user-select: none;
    list-style: none;
}

.admin-color-details summary::-webkit-details-marker {
    display: none;
}

.admin-color-presets {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    margin-top: 0.5rem;
}

.admin-color-swatch {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 1px solid rgba(0, 0, 0, 0.22);
    padding: 0;
    cursor: pointer;
    flex-shrink: 0;
}

.admin-color-field--compact {
    display: inline-flex;
    flex-direction: column;
    vertical-align: middle;
    max-width: 14rem;
}

.tribune-update-form .admin-color-field--compact {
    margin: 0;
    flex: 0 0 auto;
}

.tribune-update-form .admin-color-field--compact .admin-color-row {
    flex-wrap: nowrap;
    align-items: center;
}

.tribune-update-form .admin-color-field--compact .admin-color-native {
    flex: 0 0 auto;
}

.admin-color-field--compact .admin-color-details {
    margin-top: 0.15rem;
}

.admin-color-field--compact .admin-color-details summary {
    font-size: 0.8rem;
}

/* Lignes de tableau cliquables (scroll vers le détail parking / tribune) */
tr.admin-summary-row-scroll {
    cursor: pointer;
}

tr.admin-summary-row-scroll:hover {
    background-color: var(--list-hover);
}

/* Invitations admin : même prénom + nom qu’un autre invité du même événement */
tr.inv-row-dup {
    background-color: rgba(230, 126, 34, 0.22);
    box-shadow: inset 3px 0 0 0 rgba(230, 126, 34, 0.95);
}

tr.inv-row-dup:hover {
    background-color: rgba(230, 126, 34, 0.3);
}

/* Ligne marquée « exclu » du détecteur de doublons (sans doublon actif) */
tr.inv-row-dup-excluded:not(.inv-row-dup) {
    background-color: rgba(127, 140, 141, 0.14);
    box-shadow: inset 3px 0 0 0 rgba(127, 140, 141, 0.75);
}

tr.inv-row-dup-excluded:not(.inv-row-dup):hover {
    background-color: rgba(127, 140, 141, 0.22);
}

tr.inv-admin-inv-main[data-dup-expand="1"] {
    cursor: pointer;
}

tr.inv-admin-inv-main--dup.inv-expand-main--open {
    background-color: rgba(230, 126, 34, 0.28);
}

tr.inv-row-dup-excluded.inv-admin-inv-main--dup.inv-expand-main--open:not(.inv-row-dup) {
    background-color: rgba(127, 140, 141, 0.26);
}

/* Modification enregistrée par l’invité (lien e-mail) — distinct des doublons */
tr.inv-row-invitee-pending {
    background-color: rgba(52, 152, 219, 0.16);
    box-shadow: inset 3px 0 0 0 rgba(41, 128, 185, 0.92);
}

tr.inv-row-invitee-pending:hover {
    background-color: rgba(52, 152, 219, 0.24);
}

tr.inv-row-invitee-history {
    box-shadow: inset 3px 0 0 0 rgba(52, 152, 219, 0.45);
}

tr.inv-row-invitee-pending.inv-row-dup {
    background: linear-gradient(90deg, rgba(52, 152, 219, 0.14) 0%, rgba(230, 126, 34, 0.2) 100%);
    box-shadow: inset 3px 0 0 0 rgba(41, 128, 185, 0.85), inset 6px 0 0 0 rgba(230, 126, 34, 0.75);
}

tr.inv-row-return-highlight {
    outline: 2px solid rgba(41, 128, 185, 0.85);
    outline-offset: -2px;
}

tr.inv-admin-inv-main--invitee.inv-expand-main--open.inv-row-invitee-pending {
    background-color: rgba(52, 152, 219, 0.22);
}

tr.inv-invitee-edit-detail-row .inv-invitee-edit-detail-cell {
    padding: var(--spacing-sm) var(--spacing-md);
    background-color: rgba(41, 128, 185, 0.08);
    border-top: 1px solid rgba(41, 128, 185, 0.28);
    vertical-align: top;
}

tr.inv-invitee-edit-detail-row .inv-invitee-edit-detail-inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-sm);
    margin-bottom: 0.35rem;
}

tr.inv-invitee-edit-detail-row .inv-invitee-edit-detail-label {
    font-weight: 600;
}

ul.inv-invitee-edit-lines {
    margin: 0.25rem 0 0;
    padding-left: 1.35rem;
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 0.95rem;
    line-height: 1.45;
    color: var(--text-primary, #1a1a1a);
}

ul.inv-invitee-edit-lines li {
    margin-bottom: 0.2rem;
}

p.inv-invitee-edit-fallback {
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 0.92rem;
}

.inv-change-block--sep {
    margin-top: 0.75rem;
    padding-top: 0.75rem;
    border-top: 1px dashed rgba(41, 128, 185, 0.35);
}

.inv-change-block-head {
    font-size: 0.92rem;
    margin-bottom: 0.2rem;
    font-weight: 600;
}

.inv-change-block-source {
    font-weight: 600;
}

tr.inv-dup-detail-row .inv-dup-detail-cell {
    padding: var(--spacing-sm) var(--spacing-md);
    background-color: rgba(0, 0, 0, 0.06);
    border-top: 1px solid rgba(230, 126, 34, 0.25);
    vertical-align: middle;
}

tr.inv-dup-detail-row .inv-dup-detail-inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-sm);
}

tr.inv-dup-detail-row .inv-dup-detail-label {
    margin-right: var(--spacing-sm);
}

tr.inv-dup-detail-row .inv-dup-detail-actions {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-sm);
}

/* Admin : création multiple d’invitations (lignes = champs) */
table.bulk-invite-table {
    margin: 0;
    background-color: transparent;
}

.bulk-invite-table thead th {
    background-color: var(--bg-secondary);
}

.bulk-invite-table tbody tr:nth-child(odd) {
    background-color: rgba(240, 243, 255, 0.05);
}

.bulk-invite-table tbody tr:nth-child(even) {
    background-color: var(--bg-secondary);
}

.bulk-invite-table tbody tr:hover {
    background-color: var(--list-hover);
}

.bulk-invite-table th,
.bulk-invite-table td {
    vertical-align: middle;
}

.bulk-invite-table .bulk-invite-input {
    width: 100%;
    min-width: 0;
    margin: 0;
}

.bulk-invite-table .bulk-row-remove {
    padding: 0.12rem 0.4rem;
    font-size: 0.8rem;
    line-height: 1.15;
    min-width: 0;
    border-radius: 4px;
}

/* Admin - page tribunes */
.admin-horizontal-scroll {
    width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
}

.admin-page-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-lg);
}

.tribune-fixed-header {
    min-width: 720px;
}

.tribune-form-grid {
    display: grid;
    grid-template-columns: minmax(180px, 1fr) minmax(140px, 1fr) minmax(180px, 1fr) auto;
    gap: var(--spacing-md);
    align-items: end;
}

.tribune-fixed-grid {
    min-width: 760px;
}

.form-group-compact {
    margin-bottom: 0;
}

.tribune-list-title {
    margin-top: var(--spacing-xl);
}

.tribune-help-text {
    margin-bottom: var(--spacing-md);
}

.tribune-summary-row {
    cursor: pointer;
    scroll-margin-top: 1rem;
}

.admin-tribunes-save-toast {
    position: fixed;
    bottom: 1.25rem;
    right: 1.25rem;
    z-index: 10000;
    max-width: min(420px, 92vw);
    margin: 0;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
    font-weight: 600;
}

.tribune-detail-save-actions {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.65rem;
}

.tribune-save-status {
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--success, #15803d);
    opacity: 0;
    transition: opacity 0.2s ease;
}

.tribune-save-status--visible {
    opacity: 1;
}

.tribune-detail-save-btn--ok {
    background: var(--success, #16a34a) !important;
    border-color: var(--success, #16a34a) !important;
}

.tribune-update-form {
    display: inline-flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: var(--spacing-sm);
}

.tribune-update-form > * {
    flex-shrink: 0;
}

.tribune-actions-cell {
    min-width: 30rem;
}

.tribune-actions-wrap {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-sm);
    flex-wrap: nowrap;
    white-space: nowrap;
}

.tribune-update-input {
    margin: 0;
}

.tribune-update-input-name {
    width: 10rem;
}

.tribune-update-input-capacity {
    width: 6rem;
}

.tribune-detail-cell {
    background: var(--bg-secondary, #f5f5f5);
    padding: var(--spacing-md);
}

.tribune-empty-invites {
    margin: var(--spacing-sm) 0 0;
}

.tribune-detail-table-wrap {
    margin-top: var(--spacing-sm);
}

.tribune-invite-email {
    font-size: 0.9em;
}

.tribune-delete-btn {
    display: inline-block;
    width: auto;
    margin: 0;
}

.tribune-form-grid-top {
    grid-template-columns:
        minmax(160px, 1fr)
        minmax(140px, 1fr)
        minmax(220px, 1.4fr)
        minmax(160px, 1fr)
        auto;
    align-items: start;
}

.tribune-capacity-readout-label {
    display: block;
    font-weight: 600;
    margin-bottom: var(--spacing-xs);
}

.tribune-capacity-readout {
    font-size: 1.25rem;
    display: block;
}

.tribune-capacity-hint {
    display: block;
    margin-top: var(--spacing-xs);
}

.tribune-parties-summary-group {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
}

.tribune-parties-summary-group .tribune-capacity-readout-label {
    display: inline-block;
    margin-bottom: 0;
    flex-shrink: 0;
}

.tribune-parties-summary-readout {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px;
    margin-top: 0;
    flex: 1;
    min-width: 0;
}

.tribune-party-pill {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 0;
    margin: 0;
    font-size: 0.88rem;
    vertical-align: middle;
    background: transparent;
    border: none;
    border-radius: 0;
}

.tribune-party-pill .tribune-grid-legend-swatch {
    flex-shrink: 0;
}

.tribune-party-pill-label {
    font-weight: 500;
    white-space: nowrap;
    max-width: 12rem;
    overflow: hidden;
    text-overflow: ellipsis;
}

.admin-tribune-expand .tribune-parties-cell {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px;
    white-space: normal;
    vertical-align: middle;
    max-width: 22rem;
}

.tribune-inline-cap-label {
    margin-right: var(--spacing-sm);
    white-space: nowrap;
}

.tribune-detail-sep {
    margin: var(--spacing-lg) 0;
    border: none;
    border-top: 1px solid rgba(0, 0, 0, 0.1);
}

/* Formulaire ajout tribune : carte champs + carte grille superposée */
.tribune-add-form-stack {
    display: flex;
    flex-direction: column;
    gap: 0;
    margin-bottom: var(--spacing-xl);
}

.tribune-add-head-card {
    position: relative;
    z-index: 1;
}

.tribune-grid-overlap-wrap {
    position: relative;
    z-index: 2;
    margin-top: calc(-1 * var(--spacing-lg));
    padding-top: var(--spacing-md);
}

/* Formulaire « Ajouter une tribune » : espace réduit (~15px) entre la carte et « Interaction avec la grille » */
.tribune-add-form-stack > .tribune-grid-overlap-wrap {
    margin-top: calc(-1 * var(--spacing-xl));
    padding-top: 15px;
}

.tribune-add-form-stack > .tribune-grid-overlap-wrap[hidden] {
    margin-top: 0;
    padding-top: 0;
}

.tribune-add-form-stack .tribune-grid-mode-fieldset {
    margin-top: 0;
}

.tribune-save-after-editor {
    margin-top: var(--spacing-md);
    margin-bottom: var(--spacing-lg);
}

.tribune-save-after-editor[hidden] {
    display: none !important;
}

/* Éditeur grille tribune */
.tribune-grid-editor {
    margin-top: 0;
    padding-top: 0;
    border-top: none;
}

.tribune-detail-cell .tribune-grid-editor {
    margin-top: var(--spacing-md);
}

.tribune-grid-toolbar {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-md);
}

.tribune-grid-toolbar-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-sm);
}

.tribune-grid-toolbar-row--wrap {
    align-items: flex-end;
}

.tribune-grid-inline-label {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    font-size: 0.92rem;
}

.tribune-grid-num-input {
    width: 4.5rem;
    margin-left: 0.25rem;
}

.tribune-grid-text-input {
    min-width: 10rem;
    margin-left: 0.25rem;
}

.tribune-grid-select {
    min-width: 8rem;
}

.tribune-grid-color-input {
    width: 2.5rem;
    height: 2rem;
    padding: 0;
    border: none;
    vertical-align: middle;
    cursor: pointer;
}

.tribune-grid-new-cat {
    padding: var(--spacing-sm);
    background: var(--bg-secondary, #f8fafc);
    border-radius: 8px;
}

.tribune-grid-legend-swatch {
    width: 1rem;
    height: 1rem;
    border-radius: 3px;
    border: 1px solid rgba(0, 0, 0, 0.15);
}

.tribune-grid-category-stats-wrap {
    margin: var(--spacing-md) 0;
    overflow-x: auto;
}

.tribune-grid-category-stats-empty {
    margin: 0;
    font-size: 0.9rem;
}

.tribune-grid-category-stats-table {
    width: 100%;
    max-width: 52rem;
    border-collapse: collapse;
    font-size: 0.92rem;
}

.tribune-grid-category-stats-table th,
.tribune-grid-category-stats-table td {
    padding: var(--spacing-xs) var(--spacing-sm);
    text-align: left;
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}

.tribune-grid-category-stats-table th:nth-child(2),
.tribune-grid-category-stats-table td:nth-child(2),
.tribune-grid-category-stats-table th:nth-child(3),
.tribune-grid-category-stats-table td:nth-child(3),
.tribune-grid-category-stats-table td.tribune-grid-category-stats-num {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.tribune-grid-category-stats-th-actions {
    text-align: right;
    white-space: nowrap;
}

.tribune-grid-category-stats-row--editable td {
    vertical-align: middle;
}

.tribune-grid-category-stats-label-cell {
    vertical-align: middle;
}

.tribune-grid-category-stats-label-input {
    min-width: 7rem;
    max-width: 14rem;
    width: 100%;
}

.tribune-grid-category-stats-priority-cell {
    cursor: pointer;
    text-align: right;
    vertical-align: middle;
}

.tribune-grid-category-stats-priority-select {
    min-width: 5.5rem;
}

.tribune-grid-category-stats-td-color {
    text-align: left;
    vertical-align: middle;
    min-width: 3rem;
}

.tribune-grid-category-stats-color-input {
    width: 2.25rem;
    height: 1.75rem;
    padding: 0;
    border: 1px solid rgba(0, 0, 0, 0.15);
    border-radius: 4px;
    cursor: pointer;
    vertical-align: middle;
    flex-shrink: 0;
}

.tribune-grid-category-stats-actions {
    text-align: right;
    white-space: nowrap;
}

.tribune-grid-category-stats-actions .btn + .btn {
    margin-left: var(--spacing-xs);
}

.tribune-grid-category-stats-row--other td {
    font-style: italic;
}

.tribune-grid-category-stats-row--other td:last-child {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.tribune-grid-category-stats-total {
    margin: var(--spacing-sm) 0 0;
    font-size: 0.88rem;
}

.tribune-grid-scroll {
    display: block;
    width: 100%;
    overflow: visible;
    max-height: none;
    padding: var(--spacing-sm) 0 var(--spacing-md);
    box-sizing: border-box;
}

.tribune-grid-visual-card {
    width: 100%;
    max-width: 100%;
    margin-inline: 0;
    box-sizing: border-box;
    box-shadow: 0 10px 28px rgba(15, 23, 42, 0.12);
}

.tribune-grid-visual-card-inner {
    display: block;
    width: 100%;
}

.tribune-grid-matrix.tribune-grid-matrix--active {
    width: 100%;
    /* On contraint la grille à ne JAMAIS dépasser la largeur de son parent.
       Combiné à `minmax(0, cellPx px)` dans grid-template-columns (cf.
       tribune_grid_editor.js), cela évite que le contenu de l'éditeur
       de tribune déborde du .table-responsive et déclenche une barre de
       défilement horizontale. */
    max-width: 100%;
    margin-inline: 0;
    /* min-width: 0 est requis sur un enfant grid/flex pour qu'il puisse
       réellement se rétracter en dessous de sa taille intrinsèque. */
    min-width: 0;
}

.tribune-grid-matrix .tribune-grid-cell {
    min-width: 0;
    min-height: 0;
}

.tribune-grid-marquee-wrap {
    position: relative;
    width: 100%;
    /* Permet aux enfants (canvas grille) de réellement se rétracter
       en dessous de leur taille intrinsèque dans un contexte flex/grid. */
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
    /* Indispensable pour que la sélection rectangulaire (marquee) en mode tactile
       déclenche pointermove sans être interprétée comme un défilement. */
    touch-action: none;
}

.tribune-grid-marquee {
    position: absolute;
    z-index: 4;
    pointer-events: none;
    display: none;
    box-sizing: border-box;
    border: 2px dashed var(--accent, #2563eb);
    border-radius: 4px;
    background: rgba(37, 99, 235, 0.12);
}

.tribune-grid-mode-fieldset {
    border: 1px solid rgba(0, 0, 0, 0.1);
    border-radius: 8px;
    padding: var(--spacing-sm) var(--spacing-md);
    margin: 0 0 var(--spacing-md);
}

.tribune-grid-mode-legend {
    font-size: 0.88rem;
    font-weight: 600;
    padding: 0 var(--spacing-xs);
}

.tribune-grid-mode-radios {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-md);
}

.tribune-grid-radio-label {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    cursor: pointer;
    font-size: 0.92rem;
}

.tribune-grid-assign-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-sm);
    padding: var(--spacing-md);
    margin-bottom: var(--spacing-md);
    background: var(--bg-secondary, #f1f5f9);
    border-radius: 8px;
    border: 1px solid rgba(0, 0, 0, 0.08);
}

.tribune-grid-assign-bar--above-matrix {
    margin-top: var(--spacing-md);
    margin-bottom: var(--spacing-sm);
}

.tribune-grid-assign-bar-count {
    font-weight: 600;
    margin-right: var(--spacing-sm);
}

.tribune-detail-save-hint {
    margin: var(--spacing-md) 0 var(--spacing-sm);
}

.tribune-detail-save-btn {
    margin-bottom: var(--spacing-md);
}

.tribune-seat-popover {
    position: fixed;
    z-index: 10050;
    min-width: 12rem;
    max-width: min(22rem, calc(100vw - 16px));
    padding: var(--spacing-sm) var(--spacing-md);
    background: var(--bg-card, #fff);
    border-radius: 8px;
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.18);
    border: 1px solid rgba(0, 0, 0, 0.1);
}

.tribune-seat-popover--wide {
    min-width: 16rem;
}

.tribune-seat-popover-hint {
    margin: 0 0 var(--spacing-sm);
    font-size: 0.85rem;
    color: var(--text-secondary, #64748b);
}

.tribune-seat-popover-hint--location {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.75rem;
}

.tribune-seat-popover-occupant {
    font-weight: 600;
    color: var(--text-primary, #0f172a);
}

.tribune-grid-cell--occupied {
    box-shadow: inset 0 0 0 2px rgba(15, 23, 42, 0.5);
}

.tribune-grid-cell--drag-source {
    opacity: 0.45;
    outline: 2px dashed rgba(37, 99, 235, 0.85);
    outline-offset: -2px;
}

.tribune-grid-cell--drop-target {
    outline: 3px solid rgba(22, 163, 74, 0.95);
    outline-offset: -2px;
    z-index: 2;
}

.tribune-grid-seat-ghost {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 10055;
    pointer-events: none;
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    border: 2px solid rgba(15, 23, 42, 0.6);
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0.92;
    box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35), 0 0 0 2px rgba(37, 99, 235, 0.35);
    font-size: 0.55rem;
    font-weight: 600;
    line-height: 1;
    color: #0f172a;
    aspect-ratio: auto;
    /* Taille définie en JS pour reproduire le siège source — fluidité via transform. */
    will-change: transform;
    transform: translate3d(0, 0, 0) scale(1.06);
    transform-origin: center center;
    transition: box-shadow 0.12s ease;
}

.tribune-grid-seat-ghost__label {
    pointer-events: none;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
    padding: 0 1px;
}

.tribune-grid-hover-tip {
    position: fixed;
    z-index: 10060;
    max-width: min(18rem, 90vw);
    padding: 0.35rem 0.55rem;
    border-radius: 6px;
    background: rgba(15, 23, 42, 0.92);
    color: #f8fafc;
    font-size: 0.8rem;
    font-weight: 600;
    line-height: 1.3;
    pointer-events: none;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
}

.tribune-seat-popover-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-xs);
}

.tribune-seat-popover-field {
    margin-bottom: var(--spacing-sm);
    display: flex;
    flex-direction: column;
    gap: var(--spacing-xs);
}

.tribune-seat-popover-field label {
    font-size: 0.82rem;
    font-weight: 600;
}

.tribune-grid-cell--selected {
    outline: 3px solid #1e40af;
    outline-offset: -1px;
    box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.9);
}

.tribune-grid-corner {
    min-width: 2rem;
    min-height: 1.5rem;
}

.tribune-grid-axis {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--text-secondary, #64748b);
    user-select: none;
    line-height: 1;
}

.tribune-grid-axis--col {
    padding-bottom: 2px;
}

.tribune-grid-axis--row {
    min-width: 2rem;
    padding-right: 6px;
    justify-content: flex-end;
    font-size: 0.78rem;
}

.tribune-grid-cell {
    aspect-ratio: 1;
    min-width: 22px;
    min-height: 22px;
    width: 100%;
    height: 100%;
    padding: 0;
    border: 1px solid rgba(15, 23, 42, 0.2);
    border-radius: 4px;
    cursor: pointer;
    font-size: 0.55rem;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    transition: transform 0.05s ease, box-shadow 0.1s ease;
    /* Empêche le navigateur tactile (tablette) de prendre le geste pour un défilement,
       ce qui faisait avorter les pointermove (glisser-déposer / sélection des sièges). */
    touch-action: none;
    -webkit-user-select: none;
    user-select: none;
}

.tribune-grid-cell:focus-visible {
    outline: 2px solid var(--accent, #2563eb);
    outline-offset: 1px;
}

.tribune-grid-cell--seat {
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.25);
}

.tribune-grid-cell--aisle {
    background: transparent !important;
    border-color: transparent;
    opacity: 0.35;
    cursor: pointer;
    box-shadow: inset 0 0 0 1px rgba(100, 116, 139, 0.35);
}

.tribune-grid-cell--aisle::after {
    content: '';
    display: block;
    width: 40%;
    height: 70%;
    margin: auto;
    border-radius: 2px;
    background: repeating-linear-gradient(
        -45deg,
        #cbd5e1,
        #cbd5e1 2px,
        transparent 2px,
        transparent 4px
    );
}

.tribune-grid-cell--empty {
    background: repeating-linear-gradient(
        45deg,
        rgba(148, 163, 184, 0.15),
        rgba(148, 163, 184, 0.15) 3px,
        transparent 3px,
        transparent 6px
    ) !important;
    opacity: 0.55;
    border-style: dashed;
}

.tribune-grid-cell-label {
    pointer-events: none;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
    padding: 0 1px;
}

/* Editeur riche admin (description d'événement) */
.editor-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-xs);
    margin-bottom: var(--spacing-sm);
    align-items: center;
}

.editor-color-label {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    margin: 0;
    font-size: var(--font-sm);
    color: var(--text-secondary);
}

.editor-color-input {
    width: 2rem;
    height: 2rem;
    padding: 0;
    border-radius: 4px;
}

.rich-text-editor {
    min-height: 220px;
    padding: var(--spacing-md);
    background-color: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 6px;
    color: var(--text-primary);
    overflow-wrap: anywhere;
}

.rich-text-editor:focus {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

.rich-text-editor img {
    max-width: 100%;
    height: auto;
}

.rich-text-editor > div,
.rich-text-editor > p {
    margin-top: 0;
    margin-bottom: 0.35rem;
}

.rich-text-editor > div:empty,
.rich-text-editor > div:has(> br:only-child) {
    display: none;
    margin: 0;
    padding: 0;
    min-height: 0;
}

.rich-text-editor .reglement-section-break {
    display: block;
    min-height: 0.75rem;
    margin: 0;
    padding: 0;
}

.rich-text-editor .reglement-line-heading {
    margin-bottom: 0.15rem;
    font-weight: 600;
}

/* ============================================
   TABLEAUX (Admin)
   ============================================ */
.table-responsive {

    overflow-x: auto;
    border-radius: 8px;
   
}

table {
    width: 100%;
    border-collapse: collapse;
    margin: var(--spacing-lg) 0;
    background-color: var(--bg-card);
    border-radius: 8px;
    overflow: hidden;
}

th, td {
    padding: var(--spacing-sm);
    text-align: center;
    border-bottom: 1px solid var(--border-color);
}

th {
    background-color: var(--bg-secondary);
    color: var(--accent);
    font-weight: 600;
    font-size: var(--font-sm);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

tr:last-child td {
    border-bottom: none;
}

tr:hover {
    background-color: var(--list-hover);
}

.th-sortable {
    white-space: nowrap;
}

a.th-sort-link {
    color: inherit;
    text-decoration: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 0.25em;
}

a.th-sort-link:hover,
a.th-sort-link:focus {
    text-decoration: underline;
}

.table-sort-indicator {
    font-size: 1.1em;
    opacity: 0.9;
}

/* ============================================
   STATUTS (Badges colorés)
   ============================================ */
.badge {
    display: inline-block;
    padding: 0.25em 0.6em;
    font-size: var(--font-xs);
    font-weight: 600;
    border-radius: 12px;
    text-transform: uppercase;
}

.badge-pending {
    background-color: var(--warning);
    color: #000;
}

/* Lien "Oui (×N)" : au survol, on change le fond, pas la couleur du texte */
a.badge.badge-pending:hover,
a.badge.badge-pending:focus-visible {
    background-color: #e0a800;
    color: #000;
    text-decoration: none;
}

.badge-confirmed {
    background-color: var(--success);
    color: white;
}

.badge-controlled {
    background-color: var(--success);
    color: white;
}

/* Page publique : confirmation d’annulation (ton posé, texte lisible) */
.cancel-confirm-page {
    max-width: 560px;
}
.cancel-confirm-page .cancel-confirm-card {
    text-align: left;
    font-size: 1.125rem;
    line-height: 1.6;
}
.cancel-confirm-title {
    color: var(--text-primary);
    font-size: 1.35rem;
    font-weight: 600;
    margin-top: 0;
    margin-bottom: var(--spacing-md);
}
.cancel-confirm-title--calm {
    font-size: 1.65rem;
    font-weight: 700;
    color: #2e7d32;
    margin-bottom: var(--spacing-sm);
}
.cancel-confirm-subtitle {
    font-size: 1.2rem;
    color: var(--text-secondary);
    margin: 0 0 var(--spacing-lg);
    line-height: 1.55;
}
.cancel-confirm-eventbox {
    background: var(--bg-secondary);
    border-left: 4px solid #2e7d32;
    border-radius: var(--radius);
    padding: var(--spacing-md) var(--spacing-lg);
    margin-bottom: var(--spacing-lg);
}
.cancel-confirm-event-title {
    margin: 0 0 var(--spacing-sm);
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--text-primary);
}
.cancel-confirm-event-meta {
    margin: 0.35rem 0 0;
    font-size: 1.1rem;
    color: var(--text-secondary);
}
.cancel-confirm-event-meta strong {
    color: #e65100;
}
.cancel-confirm-note {
    font-size: 1.05rem;
    color: var(--text-secondary);
    margin: 0 0 var(--spacing-lg);
    padding: var(--spacing-md);
    background: rgba(198, 40, 40, 0.08);
    border-radius: var(--radius);
    border: 1px solid rgba(198, 40, 40, 0.25);
}
.cancel-confirm-note strong {
    color: #c62828;
}
.cancel-confirm-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-md);
    align-items: center;
    justify-content: flex-start;
    margin-top: var(--spacing-lg);
}

@media (min-width: 1024px) {
    .cancel-confirm-page {
        max-width: 900px;
    }
    .cancel-confirm-page .cancel-confirm-card {
        font-size: 1.25rem;
        line-height: 1.7;
        padding: calc(var(--spacing-lg) * 1.25);
    }
    .cancel-confirm-title {
        font-size: 1.6rem;
    }
    .cancel-confirm-title--calm {
        font-size: 2rem;
    }
    .cancel-confirm-subtitle {
        font-size: 1.35rem;
    }
    .cancel-confirm-event-title {
        font-size: 1.55rem;
    }
    .cancel-confirm-event-meta {
        font-size: 1.2rem;
    }
    .cancel-confirm-note {
        font-size: 1.15rem;
    }
}

/* Formulaire public inscription : enregistrer + annuler — espacement fiable sur téléphone */
.invitation-form-actions {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-md);
    margin-top: var(--spacing-lg);
    align-items: stretch;
}
@media (min-width: 481px) {
    .invitation-form-actions {
        flex-direction: row;
        flex-wrap: wrap;
        align-items: center;
    }
}

/* Page après annulation confirmée */
.cancel-success-page {
    max-width: 560px;
}
.cancel-success-page .cancel-success-card {
    text-align: left;
}
.cancel-success-banner {
    margin-bottom: var(--spacing-lg);
}
.cancel-success-lead {
    margin: 0;
    font-size: 1.35rem;
    font-weight: 700;
    line-height: 1.4;
}
.cancel-success-text {
    font-size: 1.1rem;
    line-height: 1.55;
    margin: 0 0 var(--spacing-md);
}
.cancel-success-hint {
    font-size: var(--font-sm);
    margin: 0;
}

@media (min-width: 1024px) {
    .cancel-success-page {
        max-width: 900px;
    }
    .cancel-success-page .cancel-success-card {
        padding: calc(var(--spacing-lg) * 1.25);
    }
    .cancel-success-lead {
        font-size: 2rem;
        line-height: 1.35;
    }
    .cancel-success-text {
        font-size: 1.25rem;
        line-height: 1.65;
    }
    .cancel-success-hint {
        font-size: 1.05rem;
    }
}

/* Liens titre événement → gestion invitations (admin) */
.admin-table-event-title-link {
    color: var(--accent);
    font-weight: 600;
    text-decoration: none;
}
.admin-table-event-title-link:hover,
.admin-table-event-title-link:focus {
    text-decoration: underline;
}
.event-detail-title-admin-link {
    color: inherit;
    text-decoration: none;
}
.event-detail-title-admin-link:hover,
.event-detail-title-admin-link:focus {
    color: var(--accent);
    text-decoration: underline;
}

/* Statistiques places — admin invitations (haut de page) */
.inv-stats-card--hint {
    padding: var(--spacing-md) var(--spacing-lg);
}
.inv-stats-title {
    margin-top: 0;
    margin-bottom: var(--spacing-sm);
    font-size: 1.25rem;
}
.inv-stats-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-sm);
    align-items: center;
    margin-bottom: var(--spacing-lg);
}
.admin-card-with-close {
    position: relative;
    padding-top: calc(var(--spacing-lg) + 0.45rem);
}
.admin-card-close-btn {
    position: absolute;
    top: 0.45rem;
    right: 0.7rem;
    display: inline-block;
    color: #ffffff;
    border: 0;
    background: transparent;
    font-size: 1.35rem;
    font-weight: 700;
    line-height: 1;
    text-decoration: none;
}
.admin-card-close-btn:hover,
.admin-card-close-btn:focus {
    color: #ffffff;
    text-decoration: none;
    opacity: 0.85;
}
.inv-stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-lg);
}
.inv-stats-block {
    background: var(--bg-secondary);
    border-radius: var(--radius);
    padding: var(--spacing-md);
    border: 1px solid var(--border-color);
    min-width: 0;
    overflow: visible;
}
.inv-stats-block-inner {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    overflow-x: auto;
    overflow-y: hidden;
}
.inv-stats-grid .inv-stats-table th,
.inv-stats-grid .inv-stats-table td {
    padding: 0.2rem 0.35rem;
    font-size: 0.8rem;
}
.inv-stats-grid .inv-stats-table th {
    font-size: 0.76rem;
    line-height: 1.2;
}
.inv-stats-grid .inv-stat-num {
    font-size: 1.05rem;
    line-height: 1.1;
}
.inv-stats-block--cancel {
    border-left: 4px solid var(--danger);
}
.inv-stats-block-title {
    margin: 0 0 var(--spacing-sm);
    font-size: 1rem;
    font-weight: 600;
    color: var(--text-primary);
}
.inv-stats-subtitle {
    margin: var(--spacing-lg) 0 var(--spacing-sm);
    font-size: 1rem;
    font-weight: 600;
}

.inv-stats-layout-labels-wrap .inv-stats-layout-labels-title,
.inv-stats-par-tribune-title {
    margin-bottom: 15px;
}
.inv-stats-cancel-count {
    margin: 0;
    font-size: 1.15rem;
}
.inv-stats-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: var(--font-sm);
}
.inv-stats-table th,
.inv-stats-table td {
    padding: var(--spacing-xs) var(--spacing-sm);
    text-align: left;
    border-bottom: 1px solid var(--border-color);
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: break-word;
}
.inv-stats-table th {
    color: var(--text-secondary);
    font-weight: 600;
    font-size: var(--font-sm);
}
.inv-stats-table--wide th,
.inv-stats-table--wide td {
    padding: var(--spacing-sm) var(--spacing-md);
}
.inv-stats-table--wide th:first-child {
    font-size: var(--font-base);
}
.inv-stats-name-cell {
    font-weight: 600;
    font-size: 1.22rem;
    line-height: 1.35;
    max-width: 20rem;
    word-break: break-word;
    vertical-align: middle;
    color: var(--text-primary);
}
.inv-stat-num {
    display: inline-block;
    font-size: 1.35rem;
    font-weight: 700;
    line-height: 1.25;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.02em;
}
.inv-stat-num--neutral {
    color: var(--text-primary);
}
.inv-stat-tone--na {
    color: var(--text-secondary);
    font-weight: 600;
}
.inv-stat-tone--low {
    color: var(--danger);
}
.inv-stat-tone--over {
    color: var(--danger);
    font-weight: 700;
}
.inv-stat-tone--mid {
    color: var(--warning);
}
.inv-stat-tone--high {
    color: var(--success);
}

/* Statistiques admin — bloc centré, format compact (~1500×600 max), responsive */
.inv-stats-shell {
    width: 100%;
    margin: 0 auto var(--spacing-lg);
    box-sizing: border-box;
}
.inv-stats-card.inv-stats-card--compact {
    width: 100%;
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
    padding: var(--spacing-sm) var(--spacing-md);
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    min-height: 0;
}
/* En admin, aligner la largeur des stats sur le container principal */
body.layout-admin .inv-stats-card.inv-stats-card--compact {
    max-width: 1200px;
}
.inv-stats-compact-header {
    flex-shrink: 0;
}
.inv-stats-compact-scroll {
    flex: none;
    min-width: 0;
    overflow: visible;
}
.inv-stats-card--compact .inv-stats-title {
    margin-bottom: 0.35rem;
    font-size: 1.05rem;
    line-height: 1.3;
}
.inv-stats-card--compact .inv-stats-actions {
    margin-bottom: 0.5rem;
    gap: 0.35rem;
}
.inv-stats-card--compact .inv-stats-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.45rem;
    margin-bottom: 0.5rem;
}
.inv-stats-card--compact .inv-stats-block {
    padding: 0.45rem 0.55rem;
}
.inv-stats-card--compact .inv-stats-block-title {
    margin-bottom: 0.35rem;
    font-size: 0.82rem;
}
.inv-stats-metrics {
    display: flex;
    flex-wrap: wrap;
    gap: 0.45rem 0.75rem;
    align-items: flex-end;
}
.inv-stats-metric {
    display: flex;
    flex-direction: column;
    gap: 0.06rem;
    min-width: 0;
}
.inv-stats-metric-label {
    font-size: 0.72rem;
    font-weight: 600;
    color: var(--text-secondary);
    line-height: 1.15;
}
.inv-stats-card--compact .inv-stats-cancel-count {
    font-size: 0.88rem;
}
.inv-stats-card--compact .inv-stat-num {
    font-size: 1rem;
    line-height: 1.2;
}
.inv-stats-card--compact .inv-stats-cancel-count .inv-stat-num {
    font-size: 1.05rem;
}
.inv-stats-details-row {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.65rem;
    align-items: start;
}
.inv-stats-detail-panel {
    min-width: 0;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child {
    grid-column: 1;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:last-child {
    grid-column: 2;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel.inv-stats-detail-panel--registrations {
    grid-column: 4;
}
/* Colonne gauche : tous les tableaux wide = même largeur + même grille colonnes que « Par tribune » */
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-detail-wrap {
    width: 100%;
    max-width: 100%;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide {
    width: 100%;
    margin-right: auto;
    margin-bottom: 0;
    table-layout: fixed;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide thead th {
    white-space: normal;
    line-height: 1.2;
    vertical-align: bottom;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide th:first-child,
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide td:first-child {
    width: 28%;
    overflow-wrap: break-word;
    word-break: break-word;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide th:nth-child(n + 2),
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide td:nth-child(n + 2) {
    width: 24%;
    text-align: left;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide td:nth-child(n + 2) {
    white-space: normal;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table--wide th,
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table--wide td {
    padding: 0.22rem 0.32rem;
    font-size: 0.76rem;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table--wide thead th {
    font-size: 0.72rem;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-name-cell {
    font-size: 0.8rem;
    line-height: 1.2;
}
.inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide .inv-stat-num {
    font-size: 0.78rem;
    font-weight: 700;
}
/* Évite que les lignes soient rognées : pas de largeur max artificielle dans les tableaux du détail */
.inv-stats-detail-panel .inv-stats-name-cell {
    max-width: none;
}
.inv-stats-detail-panel .inv-stats-table {
    max-width: 100%;
}
.inv-stats-details-row .inv-stats-table th:nth-child(n + 2),
.inv-stats-details-row .inv-stats-table td:nth-child(n + 2) {
    text-align: left;
    white-space: normal;
    vertical-align: middle;
    hyphens: manual;
}
.inv-stats-details-row .inv-stats-table thead th {
    line-height: 1.15;
}
.inv-stats-details-row .inv-stats-table td:nth-child(n + 2) .inv-stat-num {
    font-size: 0.8rem;
    font-weight: 700;
    display: inline;
    letter-spacing: 0;
    line-height: 1.3;
}
.inv-stats-card--compact .inv-stats-table th,
.inv-stats-card--compact .inv-stats-table td {
    padding: 0.28rem 0.45rem;
    font-size: 0.8rem;
}
.inv-stats-card--compact .inv-stats-table--wide th,
.inv-stats-card--compact .inv-stats-table--wide td {
    padding: 0.28rem 0.45rem;
}
.inv-stats-card--compact .inv-stats-table th {
    font-size: 0.76rem;
}
.inv-stats-card--compact .inv-stats-name-cell {
    font-size: 0.88rem;
    line-height: 1.25;
}
.inv-stats-card--compact .inv-stats-detail-panel .inv-stats-name-cell {
    max-width: none;
}
.inv-stats-card--compact .inv-stats-detail-panel .inv-stats-table--wide th:first-child {
    font-size: 0.76rem;
}
.inv-stats-card--compact .inv-stats-detail-panel .inv-stats-table th,
.inv-stats-card--compact .inv-stats-detail-panel .inv-stats-table td {
    padding: 0.2rem 0.28rem;
}
.inv-stats-card--compact .inv-stats-subtitle {
    margin: 0.6rem 0 0.28rem;
    font-size: 0.85rem;
}
.inv-stats-card--compact .inv-stats-layout-labels-wrap .inv-stats-layout-labels-title,
.inv-stats-card--compact .inv-stats-par-tribune-title {
    margin-bottom: 0.35rem;
}

/* « Par tribune » / « Par parking » : même présentation que « Total par libellé » (titre + tableau) */
.inv-stats-detail-wrap--par-tribune,
.inv-stats-detail-wrap--par-parking {
    min-width: 0;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-table,
.inv-stats-detail-wrap--par-parking .inv-stats-table {
    margin-bottom: 0;
    table-layout: fixed;
    width: 100%;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-table thead th,
.inv-stats-detail-wrap--par-parking .inv-stats-table thead th {
    white-space: normal;
    line-height: 1.2;
    vertical-align: bottom;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-table th:first-child,
.inv-stats-detail-wrap--par-tribune .inv-stats-table td:first-child,
.inv-stats-detail-wrap--par-parking .inv-stats-table th:first-child,
.inv-stats-detail-wrap--par-parking .inv-stats-table td:first-child {
    width: 28%;
    overflow-wrap: break-word;
    word-break: break-word;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-table th:nth-child(n + 2),
.inv-stats-detail-wrap--par-tribune .inv-stats-table td:nth-child(n + 2),
.inv-stats-detail-wrap--par-parking .inv-stats-table th:nth-child(n + 2),
.inv-stats-detail-wrap--par-parking .inv-stats-table td:nth-child(n + 2) {
    width: 24%;
    text-align: left;
}
.inv-stats-th-full,
.inv-stats-th-short {
    display: inline-block;
    white-space: nowrap;
}
.inv-stats-th-short {
    display: none;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-table td:nth-child(n + 2),
.inv-stats-detail-wrap--par-parking .inv-stats-table td:nth-child(n + 2) {
    white-space: normal;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-name-cell,
.inv-stats-detail-wrap--par-parking .inv-stats-name-cell {
    max-width: none;
}
.inv-stats-detail-wrap--par-tribune .inv-stat-num,
.inv-stats-detail-wrap--par-parking .inv-stat-num {
    font-size: 0.78rem;
}
.inv-stats-detail-wrap--par-tribune .inv-stats-tribune-sub-row .inv-stats-name-cell {
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--text-secondary);
    padding-left: 1rem;
}
.inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-table th,
.inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-table td,
.inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-table th,
.inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-table td {
    padding: 0.22rem 0.32rem;
    font-size: 0.76rem;
}
.inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-table thead th,
.inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-table thead th {
    font-size: 0.72rem;
}
/* Même taille de libellé tribune / parking que la colonne « Par tribune » (panneau gauche) */
.inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-name-cell,
.inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-name-cell {
    font-size: 0.8rem;
    line-height: 1.2;
}
.inv-stats-trib-toggle {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.2rem 0.35rem;
    width: 100%;
    max-width: 100%;
    margin: 0;
    padding: 0.15rem 0;
    border: 0;
    background: transparent;
    font: inherit;
    font-weight: 600;
    color: var(--text-primary);
    cursor: pointer;
    text-align: left;
    box-sizing: border-box;
}
.inv-stats-trib-toggle-name {
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: break-word;
    word-break: break-word;
}
.inv-stats-trib-toggle-hint {
    flex: 0 0 auto;
    font-size: 0.7rem;
    font-weight: 500;
}
.inv-stats-trib-toggle-icon {
    flex: 0 0 auto;
    font-size: 0.65rem;
    opacity: 0.85;
}
.inv-stats-tribune-name-only {
    display: block;
    overflow-wrap: break-word;
    word-break: break-word;
}

@media (max-width: 960px) {
    .inv-stats-card--compact .inv-stats-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .inv-stats-details-row {
        grid-template-columns: 1fr;
    }
    .inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child,
    .inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:last-child {
        grid-column: auto;
    }
    .inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel.inv-stats-detail-panel--registrations {
        grid-column: auto;
    }
}
@media (max-width: 540px) {
    .inv-stats-th-full {
        display: none;
    }
    .inv-stats-th-short {
        display: inline-block;
    }
    .inv-stats-card--compact .inv-stats-grid {
        grid-template-columns: 1fr;
    }
    .inv-stats-card.inv-stats-card--compact {
        max-height: none;
        padding-inline: var(--spacing-sm);
    }
    .inv-stats-shell {
        margin-bottom: var(--spacing-md);
    }
}

/* Grands écrans : version plus lisible (texte/boutons/espaces agrandis) */
@media (min-width: 1400px) {
    .inv-stats-card.inv-stats-card--compact {
        max-width: 1400px;
        padding: var(--spacing-md) var(--spacing-lg);
    }
    body.layout-admin .inv-stats-card.inv-stats-card--compact {
        max-width: 1400px;
    }
    .inv-stats-card--compact .inv-stats-title {
        font-size: 1.3rem;
    }
    .inv-stats-card--compact .inv-stats-actions {
        gap: 0.55rem;
    }
    .inv-stats-card--compact .inv-stats-actions .btn {
        font-size: 0.95rem;
        padding: 0.5rem 0.75rem;
    }
    .inv-stats-card--compact .inv-stats-block {
        padding: 0.7rem 0.85rem;
    }
    .inv-stats-card--compact .inv-stats-block-title {
        font-size: 1rem;
    }
    .inv-stats-metric-label {
        font-size: 0.84rem;
    }
    .inv-stats-card--compact .inv-stat-num {
        font-size: 1.25rem;
    }
    .inv-stats-card--compact .inv-stats-table th,
    .inv-stats-card--compact .inv-stats-table td {
        font-size: 0.92rem;
        padding: 0.4rem 0.55rem;
    }
    .inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-table thead th,
    .inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-table thead th {
        font-size: 0.84rem;
    }
    .inv-stats-card--compact .inv-stats-name-cell {
        font-size: 1rem;
    }
    .inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-name-cell,
    .inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-name-cell {
        font-size: 1rem;
        line-height: 1.2;
    }
    .inv-stats-detail-wrap--par-tribune .inv-stat-num,
    .inv-stats-detail-wrap--par-parking .inv-stat-num,
    .inv-stats-card--compact .inv-stats-details-row > .inv-stats-detail-panel:first-child .inv-stats-table.inv-stats-table--wide .inv-stat-num {
        font-size: 0.95rem;
    }
}

/* Téléphone : version compacte mobile, boutons plus faciles à toucher */
@media (max-width: 680px) {
    .inv-stats-card--compact .inv-stats-title {
        font-size: 0.98rem;
    }
    .inv-stats-card--compact .inv-stats-actions {
        gap: 0.45rem;
    }
    .inv-stats-card--compact .inv-stats-actions .btn {
        font-size: 0.82rem;
        padding: 0.4rem 0.55rem;
    }
    .inv-stats-card--compact .inv-stats-table th,
    .inv-stats-card--compact .inv-stats-table td {
        font-size: 0.74rem;
        padding: 0.2rem 0.24rem;
    }
    .inv-stats-card--compact .inv-stats-subtitle {
        font-size: 0.8rem;
    }
}

/* Statistiques admin : version agrandie, proportionnelle, sans débordement */
body.layout-admin .inv-stats-shell {
    overflow-x: hidden;
}
body.layout-admin .inv-stats-card.inv-stats-card--compact {
    max-width: min(1700px, calc(100vw - 1.2rem));
    padding: 1rem 1.15rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-compact-scroll {
    overflow-x: auto;
}
body.layout-admin .inv-stats-card--compact .inv-stats-title {
    font-size: 1.45rem;
    line-height: 1.25;
}
body.layout-admin .inv-stats-card--compact .inv-stats-actions .btn {
    font-size: 1rem;
    padding: 0.55rem 0.82rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-grid {
    gap: 0.7rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-block {
    padding: 0.78rem 0.95rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-block-title {
    font-size: 1.08rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-metric {
    flex-direction: row;
    align-items: baseline;
    gap: 0.45rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-metric-label {
    font-size: 0.98rem;
    white-space: nowrap;
}
body.layout-admin .inv-stats-card--compact .inv-stat-num {
    font-size: 1.34rem;
    line-height: 1.1;
}
body.layout-admin .inv-stats-card--compact .inv-stats-details-row {
    gap: 0.9rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap {
    min-width: 0;
}
body.layout-admin .inv-stats-card--compact .inv-stats-subtitle {
    font-size: 1.2rem;
    margin: 0.75rem 0 0.45rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-table,
body.layout-admin .inv-stats-card--compact .inv-stats-table.inv-stats-table--wide {
    width: 100%;
    table-layout: fixed;
}
body.layout-admin .inv-stats-card--compact .inv-stats-table th,
body.layout-admin .inv-stats-card--compact .inv-stats-table td {
    font-size: 1.02rem;
    padding: 0.42rem 0.52rem;
    overflow: hidden;
    text-overflow: ellipsis;
}
body.layout-admin .inv-stats-card--compact .inv-stats-table thead th {
    font-size: 1.04rem;
    white-space: nowrap;
    line-height: 1.2;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table thead th {
    font-size: 0.72rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table td {
    font-size: 0.76rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table td .inv-stat-num {
    font-size: 0.76rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table th,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table td {
    padding: 0.22rem 0.32rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table th .inv-stats-th-full,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table td .inv-stat-num {
    display: block;
    width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap:not(.inv-stats-detail-wrap--par-tribune):not(.inv-stats-detail-wrap--par-parking) .inv-stats-table .inv-stats-name-cell {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
body.layout-admin .inv-stats-card--compact .inv-stats-name-cell {
    font-size: 1.04rem;
    white-space: nowrap;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap--par-tribune .inv-stats-name-cell,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-wrap--par-parking .inv-stats-name-cell,
body.layout-admin .inv-stats-card--compact .inv-stats-layout-labels-wrap .inv-stats-name-cell {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stat-num.inv-stat-num--neutral {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stat-num.inv-stat-tone--na,
body.layout-admin .inv-stats-card--compact .inv-stat-num.inv-stat-tone--low,
body.layout-admin .inv-stats-card--compact .inv-stat-num.inv-stat-tone--mid,
body.layout-admin .inv-stats-card--compact .inv-stat-num.inv-stat-tone--high {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stats-table td:nth-child(n + 2),
body.layout-admin .inv-stats-card--compact .inv-stats-table th:nth-child(n + 2) {
    white-space: nowrap;
}
body.layout-admin .inv-stats-card--compact .inv-stats-table td .inv-stat-num {
    font-size: 1.3rem;
    white-space: nowrap;
}
body.layout-admin .inv-stats-card--compact .inv-stats-trib-toggle {
    flex-wrap: nowrap;
    gap: 0.3rem;
}
body.layout-admin .inv-stats-card--compact .inv-stats-trib-toggle-hint,
body.layout-admin .inv-stats-card--compact .inv-stats-trib-toggle-icon {
    white-space: nowrap;
}
/* Harmoniser aussi les blocs globaux + tableau Par parking */
body.layout-admin .inv-stats-card--compact .inv-stats-block-title {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stats-metric-label {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stats-cancel-count {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stats-cancel-count .inv-stat-num {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-name-cell,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stat-num {
    font-size: 1.3rem !important;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-table.inv-stats-table--wide th:first-child,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-table.inv-stats-table--wide td:first-child {
    width: 28%;
    overflow-wrap: break-word;
    word-break: break-word;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-table.inv-stats-table--wide th:nth-child(n + 2),
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-table.inv-stats-table--wide td:nth-child(n + 2) {
    width: 24%;
    text-align: left;
}
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-table.inv-stats-table--wide th,
body.layout-admin .inv-stats-card--compact .inv-stats-detail-panel:last-child .inv-stats-table.inv-stats-table--wide td {
    overflow: visible;
    text-overflow: clip;
}

/* Filtre spécial (annulés / doublons) — admin invitations */
.filter-special-group select {
    max-width: 100%;
}

/* Barre action groupée : select + bouton « Appliquer » sur la même ligne */
.inv-bulk-action-bar {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    flex-wrap: nowrap;
}

.inv-bulk-action-bar #bulk-action {
    /* Annule width:100% global des champs de formulaire */
    width: auto;
    min-width: 12rem;
    max-width: min(100%, 22rem);
    flex: 0 1 auto;
}

.inv-bulk-action-bar .btn {
    flex: 0 0 auto;
    white-space: nowrap;
}

/* Cases à cocher sélection groupée (invitation_ids[]) — légèrement agrandies, coins arrondis */
body.layout-admin .inv-admin-invitations-page #inv-list-print-table input.invitation-cb,
body.layout-admin .inv-admin-invitations-page #inv-list-print-table #select-all {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    width: 1.25rem;
    height: 1.25rem;
    min-width: 1.25rem;
    min-height: 1.25rem;
    margin: 0;
    padding: 0;
    cursor: pointer;
    border: 1.5px solid var(--border-color);
    border-radius: 0.3rem;
    background-color: var(--bg-secondary);
    vertical-align: middle;
    flex-shrink: 0;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}

body.layout-admin .inv-admin-invitations-page #inv-list-print-table input.invitation-cb:hover,
body.layout-admin .inv-admin-invitations-page #inv-list-print-table #select-all:hover {
    border-color: var(--accent);
}

body.layout-admin .inv-admin-invitations-page #inv-list-print-table input.invitation-cb:focus-visible,
body.layout-admin .inv-admin-invitations-page #inv-list-print-table #select-all:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

body.layout-admin .inv-admin-invitations-page #inv-list-print-table input.invitation-cb:checked,
body.layout-admin .inv-admin-invitations-page #inv-list-print-table #select-all:checked {
    background-color: var(--accent);
    border-color: var(--accent);
    /* SVG inline auto-hébergé (pas de CDN) */
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3 8.5L6.5 12L13 4' stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 0.8rem 0.8rem;
}

/* Colonne de sélection : centrage */
body.layout-admin .inv-admin-invitations-page #inv-list-print-table thead th:first-child,
body.layout-admin .inv-admin-invitations-page #inv-list-print-table tbody td:first-child {
    text-align: center;
    vertical-align: middle;
    width: 2.5rem;
    min-width: 2.5rem;
    padding-left: 0.35rem;
    padding-right: 0.35rem;
}

@media (prefers-reduced-motion: reduce) {
    body.layout-admin .inv-admin-invitations-page #inv-list-print-table input.invitation-cb,
    body.layout-admin .inv-admin-invitations-page #inv-list-print-table #select-all {
        transition: none;
    }
}

/* Admin invitations : ligne entière pour les annulés (texte rouge et gras) */
.inv-row-cancelled td {
    color: var(--danger);
    font-weight: 700;
}

/* Admin invitations : billet PDF envoyé — invité traité (fond #252630, texte gras) */
tr.inv-row-pdf-sent:not(.inv-row-cancelled) td {
    background-color: #252630;
    color: #f4f4f5;
    font-weight: 700;
}

tr.inv-row-pdf-sent:not(.inv-row-cancelled) td .text-secondary {
    color: #c4c4c8;
}

tr.inv-row-pdf-sent:not(.inv-row-cancelled) td .btn,
tr.inv-row-pdf-sent:not(.inv-row-cancelled) td .badge,
tr.inv-row-pdf-sent:not(.inv-row-cancelled) td input[type="checkbox"] {
    font-weight: 700;
}

tr.inv-row-pdf-sent:not(.inv-row-cancelled) .inv-pdf-preview-link {
    color: #a7f3d0;
}

/* Traitée + doublon : fond doublon uniquement sur civilité, nom, prénom */
tr.inv-row-pdf-sent.inv-row-dup:not(.inv-row-cancelled) {
    background-color: transparent;
    box-shadow: none;
}

tr.inv-row-pdf-sent.inv-row-dup:not(.inv-row-cancelled):hover {
    background-color: transparent;
}

tr.inv-row-pdf-sent.inv-row-dup:not(.inv-row-cancelled) td.inv-col-identity {
    background-color: rgba(230, 126, 34, 0.22);
    color: var(--text-primary);
    font-weight: 700;
}

tr.inv-row-pdf-sent.inv-row-dup:not(.inv-row-cancelled) td.inv-col-civ {
    box-shadow: inset 3px 0 0 0 rgba(230, 126, 34, 0.95);
}

tr.inv-row-pdf-sent.inv-row-dup:not(.inv-row-cancelled):hover td.inv-col-identity {
    background-color: rgba(230, 126, 34, 0.3);
}

tr.inv-row-pdf-sent.inv-row-dup:not(.inv-row-cancelled) td.inv-col-identity .text-secondary {
    color: var(--text-secondary);
}

.inv-row-cancelled td .btn,
.inv-row-cancelled td .badge,
.inv-row-cancelled td input[type="checkbox"] {
    font-weight: 600;
}

/* Lien « PDF » au-dessus du marqueur d’envoi (colonne admin) */
.inv-pdf-preview-link {
    display: inline-block;
    font-size: 0.8125rem;
    font-weight: 600;
    text-decoration: underline;
    color: var(--primary, #22c55e);
}
.inv-pdf-preview-link:hover,
.inv-pdf-preview-link:focus {
    text-decoration: none;
}
.inv-pdf-sent-mark {
    margin-top: 0.15rem;
    line-height: 1.2;
}

.inv-row-cancelled .inv-pdf-preview-link {
    color: var(--primary, #22c55e);
}

.badge-cancelled {
    background-color: var(--danger);
    color: white;
}

/* ============================================
   MESSAGES FLASH (Alertes)
   ============================================ */
.alert {
    padding: var(--spacing-md);
    border-radius: 4px;
    margin-bottom: var(--spacing-lg);
    border-left: 4px solid;
}

.alert-success {
    background-color: rgba(76, 175, 80, 0.15);
    border-left-color: var(--success);
    color: var(--success);
}

.alert-error {
    background-color: rgba(166, 51, 63, 0.15);
    border-left-color: var(--danger);
    color: var(--danger);
}

.alert-error-invalid-link {
    margin-left: 60px;
    font-size: 1.4rem;
    font-weight: 600;
}

.alert-warning {
    background-color: rgba(255, 152, 0, 0.15);
    border-left-color: var(--warning);
    color: var(--warning);
}

.alert-info {
    background-color: rgba(33, 150, 243, 0.15);
    border-left-color: var(--info);
    color: var(--info);
}

/* ============================================
   RESPONSIVE
   ============================================ */
@media (max-width: 768px) {
    .card-grid {
        grid-template-columns: 1fr;
    }

    .layout-shell {
        display: block;
    }

    .header-menu-toggle {
        width: 2rem;
        height: 2rem;
    }

    .left-sidebar {
        width: min(300px, 88vw);
    }

    body.layout-admin .left-sidebar-admin-nav {
        display: flex;
    }

    body.layout-admin .admin-bar .admin-bar-nav {
        display: none;
    }

    /* Mobile : utiliser toute la largeur (éviter les paddings de conteneurs imbriqués) */
    body:not(.home-fullscreen) .container {
        max-width: 100%;
        padding-left: max(0.4rem, env(safe-area-inset-left, 0px));
        padding-right: max(0.4rem, env(safe-area-inset-right, 0px));
    }

    body.layout-admin .layout-shell.container,
    body.layout-admin-invitations-wide .layout-shell.container {
        max-width: 100%;
        padding-left: max(0.4rem, env(safe-area-inset-left, 0px));
        padding-right: max(0.4rem, env(safe-area-inset-right, 0px));
    }

    body.layout-admin .main {
        padding-top: var(--spacing-md);
        padding-bottom: var(--spacing-md);
    }

    body.layout-admin .main > .container,
    body.layout-admin .container.admin-bar,
    body.layout-admin .container.inv-admin-invitations-page,
    body.layout-admin-invitations-wide .container.inv-admin-invitations-page {
        max-width: 100%;
        width: 100%;
        padding-left: max(0.4rem, env(safe-area-inset-left, 0px));
        padding-right: max(0.4rem, env(safe-area-inset-right, 0px));
    }

    body.layout-admin .card,
    body.layout-admin .card-content,
    body.layout-admin .event-card > .card-content {
        width: 100%;
        max-width: 100%;
        box-sizing: border-box;
    }

    body.layout-admin .card,
    body.layout-admin .card-content {
        padding: var(--spacing-md);
    }

    body.layout-admin .inv-stats-shell {
        width: 100%;
        max-width: 100%;
        margin-left: 0;
        margin-right: 0;
    }

    body.layout-admin .inv-stats-card.inv-stats-card--compact {
        max-width: 100%;
        width: 100%;
        margin-left: 0;
        margin-right: 0;
        padding: var(--spacing-md);
    }

    body.layout-admin .inv-stats-card--compact .inv-stats-grid {
        grid-template-columns: 1fr;
        gap: var(--spacing-sm);
    }

    body.layout-admin .inv-stats-card--compact .inv-stats-block {
        padding: var(--spacing-md);
    }

    body.layout-admin .inv-stats-card--compact .inv-stats-table th,
    body.layout-admin .inv-stats-card--compact .inv-stats-table td {
        font-size: 0.85rem;
        padding: 0.35rem 0.45rem;
    }

    body.layout-admin .inv-stats-card--compact .inv-stats-metric {
        flex-direction: column;
        align-items: flex-start;
        gap: 0.2rem;
    }

    body.layout-admin .inv-stats-card--compact .inv-stats-metric-label {
        white-space: normal;
    }

    .card-grid {
        gap: var(--spacing-md);
        margin-top: var(--spacing-md);
    }

    .card,
    .card-content {
        padding: var(--spacing-md);
    }

    .event-card > .card-content {
        padding: 12px;
    }
    
    h1 { font-size: var(--font-2xl); }
    h2 { font-size: var(--font-xl); }
    
    .table-responsive {
        font-size: var(--font-sm);
    }
    
    th, td {
        padding: var(--spacing-sm);
    }

    .tribune-fixed-header {
        min-width: 680px;
    }

    .tribune-fixed-grid {
        min-width: 700px;
    }

    .event-public-registration-form {
        max-width: 100%;
        padding: 0.9rem;
        border-radius: 6px;
    }
}

@media (max-width: 480px) {
    body:not(.home-fullscreen) .container,
    body.layout-admin .layout-shell.container,
    body.layout-admin .main > .container,
    body.layout-admin .container.admin-bar,
    body.layout-admin .container.inv-admin-invitations-page {
        padding-left: max(0.25rem, env(safe-area-inset-left, 0px));
        padding-right: max(0.25rem, env(safe-area-inset-right, 0px));
    }

    body.layout-admin .card,
    body.layout-admin .card-content,
    .card,
    .card-content {
        padding: var(--spacing-sm) var(--spacing-md);
    }

    .event-card > .card-content {
        padding: 12px;
    }

    body.layout-admin .inv-stats-card.inv-stats-card--compact {
        padding: var(--spacing-sm) var(--spacing-md);
    }

    .btn {
        display: block;
        width: 100%;
        margin-bottom: var(--spacing-sm);
    }

    .cancel-confirm-actions,
    .invitation-form-actions {
        flex-direction: column;
        align-items: stretch;
    }

    .cancel-confirm-actions .btn,
    .invitation-form-actions .btn {
        margin-bottom: 0;
    }

    .tribune-fixed-header .btn,
    .tribune-fixed-grid .btn,
    .tribune-actions-wrap .btn {
        display: inline-block;
        width: auto;
        margin-bottom: 0;
    }

    .event-public-registration-form label,
    .event-public-registration-form .field-label,
    .event-public-registration-form legend {
        font-size: 1.02rem;
    }

    .event-detail .event-public-registration-form label[for^="rules_ack"] .rules-ack-text,
    .event-public-registration-form label[for^="rules_ack"] .rules-ack-text {
        font-size: 12px;
        line-height: 1.32;
        font-weight: 400;
    }

    .event-public-registration-form input,
    .event-public-registration-form select,
    .event-public-registration-form textarea {
        font-size: 1.04rem;
        padding: 0.72rem 0.78rem;
    }
}

/* Import CSV admin : zone de dépôt (label : clic = ouvrir le sélecteur ; JS : glisser-déposer) */
.csv-dropzone {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 160px;
    padding: var(--spacing-lg);
    border: 2px dashed var(--border-color);
    border-radius: 8px;
    background: var(--bg-secondary);
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}

.csv-dropzone:hover,
.csv-dropzone--active {
    border-color: var(--accent);
    background: var(--list-hover);
}

.csv-dropzone__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--spacing-sm);
    text-align: center;
    max-width: 28rem;
    pointer-events: none;
}

.csv-dropzone__title {
    font-weight: 600;
    color: var(--text-primary);
}

.csv-dropzone__hint {
    font-size: 0.9rem;
}

.csv-dropzone__btn {
    margin-top: var(--spacing-xs);
    pointer-events: none;
}

.csv-dropzone--has-file {
    border-color: var(--primary, #22c55e);
    background: color-mix(in srgb, var(--primary, #22c55e) 8%, transparent);
}

.csv-dropzone--has-file .csv-dropzone__title {
    word-break: break-all;
}

.import-format-details {
    margin: 0;
}

.import-format-details__summary {
    cursor: pointer;
    font-weight: 600;
    color: var(--text-primary);
    list-style: none;
    padding: var(--spacing-xs) 0;
}

.import-format-details__summary::-webkit-details-marker {
    display: none;
}

.import-format-details__summary::before {
    content: '▸ ';
    display: inline-block;
    transition: transform 0.15s ease;
}

.import-format-details[open] .import-format-details__summary::before {
    transform: rotate(90deg);
}

.import-format-details__body {
    margin-top: var(--spacing-sm);
    padding-top: var(--spacing-sm);
    border-top: 1px solid var(--border-color, #e2e8f0);
}

/* Liste des postes — contrôle d’accès (téléphone / tablette) */
.access-control-page__title {
    font-size: clamp(1.35rem, 5vw, 1.85rem);
    line-height: 1.2;
    margin-bottom: var(--spacing-sm);
}

.access-control-page__intro {
    font-size: clamp(0.95rem, 3.2vw, 1.05rem);
    line-height: 1.55;
    max-width: 42rem;
    margin-bottom: var(--spacing-lg);
}

.access-control-page {
    --access-control-card-width: min(36rem, 100%);
}

.access-control-layout {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-lg);
    align-items: stretch;
}

.access-control-layout__form {
    width: 100%;
    max-width: var(--access-control-card-width);
    order: 1;
}

.access-control-layout__posts {
    min-width: 0;
    width: 100%;
    order: 2;
}

.access-control-form-disclosure {
    margin: 0;
}

.access-control-form-disclosure__summary {
    list-style: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--spacing-sm);
    margin: 0;
    padding: 0;
    font-size: 1.15rem;
    font-weight: 600;
    line-height: 1.3;
    color: var(--text-primary);
    user-select: none;
}

.access-control-form-disclosure__summary::-webkit-details-marker {
    display: none;
}

.access-control-form-disclosure__title {
    flex: 1 1 auto;
    min-width: 0;
}

.access-control-form-disclosure__chevron {
    flex-shrink: 0;
    width: 0.55rem;
    height: 0.55rem;
    margin-top: -0.15rem;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
    transition: transform 0.2s ease;
    opacity: 0.75;
}

.access-control-form-disclosure[open] .access-control-form-disclosure__chevron {
    transform: rotate(-135deg);
    margin-top: 0.1rem;
}

.access-control-form-disclosure__body {
    margin-top: var(--spacing-md);
    padding-top: var(--spacing-md);
    border-top: 1px solid var(--border-color, #e2e8f0);
}

.access-control-form-disclosure__form {
    margin: 0;
}

.access-control-form-hint {
    display: block;
    margin-top: 0.35rem;
    font-size: 0.9rem;
}

.access-control-form-card,
.access-control-post-card {
    width: 100%;
    max-width: var(--access-control-card-width);
    margin-left: 0;
    margin-right: 0;
    box-sizing: border-box;
}

.access-control-form-card {
    margin-bottom: 0;
}

.access-control-form-card__control {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

.access-control-posts-heading {
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--text-secondary);
    margin: 0 0 var(--spacing-sm);
    line-height: 1.3;
}

.access-control-posts-empty {
    margin: 0;
    font-size: 0.95rem;
}

.access-control-post-list {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--spacing-md);
    margin: 0;
}

@media (min-width: 900px) {
    .access-control-layout {
        display: grid;
        grid-template-columns: var(--access-control-card-width) minmax(0, 1fr);
        column-gap: clamp(1.25rem, 3vw, 2rem);
        align-items: start;
    }

    .access-control-layout__form,
    .access-control-layout__posts {
        order: unset;
    }

    .access-control-form-disclosure__summary {
        cursor: default;
        pointer-events: none;
    }

    .access-control-form-disclosure__chevron {
        display: none;
    }

    .access-control-form-disclosure__body {
        margin-top: 0;
        padding-top: 0;
        border-top: none;
    }

    .access-control-post-list {
        grid-template-columns: repeat(2, minmax(0, var(--access-control-card-width)));
        justify-content: start;
    }
}

@media (min-width: 1280px) {
    .access-control-post-list {
        grid-template-columns: repeat(3, minmax(0, var(--access-control-card-width)));
    }
}

.access-control-post-card {
    margin: 0;
    text-align: left;
    display: flex;
    flex-direction: column;
    height: 100%;
}

.access-control-post-card__name {
    margin: 0 0 var(--spacing-xs);
    font-size: clamp(1.05rem, 3.5vw, 1.25rem);
    line-height: 1.25;
    color: var(--text-primary);
}

.access-control-post-card__controller {
    margin: 0 0 var(--spacing-xs);
    font-size: clamp(0.9rem, 2.8vw, 0.98rem);
    line-height: 1.45;
}

.access-control-post-card__event {
    margin: 0 0 var(--spacing-sm);
    font-size: clamp(0.9rem, 3vw, 1rem);
    line-height: 1.45;
    word-break: break-word;
}

.access-control-post-card__type {
    margin: 0 0 var(--spacing-md);
}

.access-control-post-card__type-label {
    display: block;
    font-weight: 600;
    color: var(--text-secondary);
    text-transform: uppercase;
    font-size: 0.75rem;
    letter-spacing: 0.04em;
    margin-bottom: 0.35rem;
}

.access-control-post-card__type-badge {
    display: inline-block;
    padding: 0.35rem 0.65rem;
    border-radius: var(--radius, 8px);
    background: var(--accent);
    color: #fff;
    font-weight: 700;
    font-size: 0.95rem;
    line-height: 1.35;
    word-break: break-word;
}

.access-control-post-card[data-post-scope="entry_parking"] .access-control-post-card__type-badge {
    background: #1a5f4a;
}

.access-control-post-card__type-repair {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
    margin: 0;
}

.access-control-post-card__type-repair .btn-sm {
    align-self: flex-start;
    font-size: 0.88rem;
    padding: 0.4rem 0.75rem;
}

.access-control-post-card__actions {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-sm);
    margin-top: auto;
    padding-top: var(--spacing-sm);
    border-top: 1px solid var(--border-color);
}

@media (min-width: 480px) {
    .access-control-post-card__actions {
        flex-direction: row;
        flex-wrap: wrap;
        align-items: stretch;
    }

    .access-control-post-card__scan {
        flex: 1 1 10rem;
        min-width: 0;
        text-align: center;
    }

    .access-control-post-card__delete-form {
        flex: 1 1 8rem;
        margin: 0;
        min-width: 0;
    }

    .access-control-post-card__delete-form .btn {
        width: 100%;
    }
}

@media (max-width: 479px) {
    .access-control-post-card__delete-form {
        margin: 0;
    }

    .access-control-post-card__delete-form .btn {
        width: 100%;
    }
}

@media (max-width: 480px) {
    .access-control-page.container {
        padding-left: max(var(--spacing-sm), env(safe-area-inset-left, 0));
        padding-right: max(var(--spacing-sm), env(safe-area-inset-right, 0));
    }
}

.access-control-page__stats-link-wrap {
    margin-bottom: var(--spacing-lg);
}

.access-control-stats-page .ac-stats-event-form {
    margin-bottom: 0;
}

.ac-stats-summary-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--spacing-md);
    margin-bottom: var(--spacing-xl);
}

@media (min-width: 600px) {
    .ac-stats-summary-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 960px) {
    .ac-stats-summary-grid {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

.ac-stats-metric-card {
    margin: 0;
}

.ac-stats-metric-card__title {
    font-size: 0.95rem;
    margin: 0 0 var(--spacing-xs);
    color: var(--text-secondary);
    font-weight: 600;
}

.ac-stats-metric-card__value {
    font-size: clamp(1.5rem, 4vw, 2rem);
    font-weight: 700;
    margin: 0;
    line-height: 1.2;
}

.ac-stats-metric-card__hint {
    font-size: 0.85rem;
    margin: var(--spacing-sm) 0 0;
}

.ac-stats-subheading {
    font-size: clamp(1.05rem, 3vw, 1.25rem);
    margin: var(--spacing-xl) 0 var(--spacing-md);
}

.ac-stats-subheading__kind {
    font-weight: 400;
    color: var(--text-secondary);
}

#ac-stats-detail-heading,
#ac-stats-posts-heading {
    scroll-margin-top: var(--spacing-lg);
}

.ac-stats-detail-host {
    position: relative;
    margin-top: var(--spacing-md);
    overflow-anchor: none;
}

.ac-stats-detail-host--loading {
    pointer-events: none;
}

.ac-stats-detail-host__overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--spacing-lg);
    background: color-mix(in srgb, var(--bg-primary, #fff) 82%, transparent);
    color: var(--text-secondary);
    font-size: 0.95rem;
}

.ac-stats-detail-host__overlay[hidden] {
    display: none !important;
}

.ac-stats-detail-loading,
.ac-stats-detail-error,
.ac-stats-detail-empty {
    margin: var(--spacing-md) 0;
}

.ac-stats-detail-filters {
    margin-bottom: var(--spacing-md);
    padding: var(--spacing-md) var(--spacing-lg);
}

.ac-stats-detail-filters__title {
    margin: 0 0 var(--spacing-md);
    font-size: 1rem;
    font-weight: 600;
}

.ac-stats-detail-filters__grid {
    display: grid;
    gap: var(--spacing-md);
    grid-template-columns: 1fr;
}

@media (min-width: 600px) {
    .ac-stats-detail-filters__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 900px) {
    .ac-stats-detail-filters__grid {
        grid-template-columns: 2fr 1.2fr 1.2fr auto;
        align-items: end;
    }
}

.ac-stats-detail-filters__field {
    margin: 0;
}

.ac-stats-detail-filters__actions {
    margin: 0;
    display: flex;
    align-items: flex-end;
    gap: var(--spacing-sm);
    flex-wrap: wrap;
}

.ac-stats-table__parking {
    white-space: nowrap;
}

.ac-stats-table__parking .admin-hex-swatch {
    vertical-align: middle;
    margin-right: 0.35rem;
}

.ac-stats-detail-filters__count {
    margin: var(--spacing-sm) 0 0;
    font-size: 0.9rem;
}

.ac-stats-table-wrap {
    padding: 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.ac-stats-detail-table-wrap {
    max-height: min(70vh, 36rem);
    overflow-y: auto;
}

.ac-stats-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.92rem;
}

.ac-stats-table th,
.ac-stats-table td {
    padding: 0.65rem 0.85rem;
    text-align: left;
    border-bottom: 1px solid var(--border-color);
    vertical-align: top;
}

.ac-stats-table thead th {
    background: var(--bg-secondary, rgba(0, 0, 0, 0.04));
    font-weight: 600;
    position: sticky;
    top: 0;
    z-index: 1;
}

.ac-stats-table__num {
    text-align: right;
    white-space: nowrap;
}

.ac-stats-table__nowrap {
    white-space: nowrap;
}

.ac-stats-table__row--current {
    background: var(--bg-secondary, rgba(0, 0, 0, 0.06));
}

.ac-stats-post-link {
    color: var(--text-primary);
    font-weight: 600;
    text-decoration: none;
}

.ac-stats-post-link:hover {
    text-decoration: underline;
}

.ac-stats-posts-hint {
    margin: var(--spacing-sm) 0 var(--spacing-lg);
    font-size: 0.9rem;
}

.ac-stats-parking-filter-card {
    margin-bottom: var(--spacing-lg);
}

.ac-stats-parking-filter-hint {
    margin: var(--spacing-md) 0 0;
    font-size: 0.9rem;
}

.ac-stats-filter-banner {
    margin-bottom: var(--spacing-md);
    padding: var(--spacing-md) var(--spacing-lg);
}

.ac-stats-filter-banner__title {
    margin: 0 0 var(--spacing-sm);
    font-size: 1rem;
    font-weight: 700;
    color: var(--text-primary);
}

.ac-stats-filter-banner__list {
    margin: 0 0 var(--spacing-md);
    padding-left: 1.25rem;
}

.ac-stats-filter-banner__list li {
    margin-bottom: var(--spacing-xs);
}

.ac-stats-filter-banner__actions {
    margin: 0;
}

/* Scanner contrôle d'accès (QR caméra) */
.access-scanner-reader {
    max-width: 420px;
    margin: 1rem 0;
    border-radius: 8px;
    overflow: hidden;
    border: 2px solid var(--border-color, #444);
}

.access-scanner-result {
    margin-top: 1.25rem;
    padding: 1.25rem 1.5rem;
    border-radius: 8px;
    font-size: 1.05rem;
}

.access-scanner-result--ok {
    background: rgba(34, 139, 34, 0.2);
    border: 2px solid #228b22;
    color: var(--text-primary, #eee);
}

.access-scanner-result--ko {
    background: rgba(180, 40, 40, 0.25);
    border: 2px solid #c62828;
    color: var(--text-primary, #eee);
}

.access-scanner-result-panel.access-scanner-result--ok {
    background: linear-gradient(180deg, rgba(20, 85, 28, 0.97) 0%, rgba(12, 50, 16, 0.99) 100%);
    border: none;
    border-top: 5px solid #66bb6a;
    color: #f1f8f1;
}

.access-scanner-result-panel.access-scanner-result--ko {
    background: linear-gradient(180deg, rgba(115, 25, 25, 0.97) 0%, rgba(70, 12, 12, 0.99) 100%);
    border: none;
    border-top: 5px solid #ef5350;
    color: #fff5f5;
}

.access-scanner-result-panel.access-scanner-result--duplicate.access-scanner-result--ko {
    background: linear-gradient(180deg, rgba(120, 75, 15, 0.97) 0%, rgba(75, 45, 8, 0.99) 100%);
    border-top: 5px solid #ffb74d;
    color: #fff8e8;
}

.access-scanner-result--duplicate.access-scanner-result--ko .access-scanner-result-headline {
    color: #ffe0a3;
}

.access-scanner-result-msg {
    font-weight: 700;
    font-size: 1.2rem;
    margin-bottom: 0.75rem;
}

.access-scanner-result-details {
    margin: 0;
    padding-left: 1.25rem;
    line-height: 1.5;
}

.access-scanner-manual {
    max-width: 36rem;
    margin-top: 1.5rem;
}

.access-scanner-manual-input {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    font-family: ui-monospace, monospace;
    font-size: 0.9rem;
}

@media (max-width: 768px) {
    .access-scanner-manual-input {
        font-size: 16px;
    }
}

/* Page scanner : optimisée tablette / téléphone */
body.access-scanner-layout footer.footer {
    display: none;
}

body.access-scanner-layout .layout-shell.container {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    min-height: 0;
}

body.access-scanner-layout .main {
    flex: 1 1 auto;
    min-height: 0;
    padding-left: max(0.5rem, env(safe-area-inset-left, 0));
    padding-right: max(0.5rem, env(safe-area-inset-right, 0));
}

body.access-scanner-layout .admin-bar {
    flex-shrink: 0;
}

.access-scanner-layout .access-scanner-page {
    max-width: min(32rem, calc(100vw - 16px));
    margin-left: 0;
    margin-right: auto;
    padding-left: max(0px, env(safe-area-inset-left, 0));
    padding-right: max(0px, env(safe-area-inset-right, 0));
    padding-bottom: max(1rem, env(safe-area-inset-bottom, 0));
    box-sizing: border-box;
    /* Même colonne : lecteur QR, aide, saisie manuelle */
    --access-scanner-qr-width: min(340px, calc(100vw - 20px));
    --access-scanner-qr-max: min(360px, calc(100vw - 16px));
}

.access-scanner-context {
    margin: 0 0 0.65rem;
    padding: 0;
    text-align: center;
    line-height: 1.4;
    word-break: break-word;
}

.access-scanner-context p {
    margin: 0 0 0.2rem;
}

.access-scanner-context p:last-child {
    margin-bottom: 0;
}

.access-scanner-context__post {
    font-size: clamp(1.05rem, 4vw, 1.35rem);
    font-weight: 700;
    color: var(--text-primary, #141414);
}

.access-scanner-context__event {
    font-size: clamp(0.92rem, 3.4vw, 1.05rem);
    font-weight: 600;
    color: var(--text-secondary, #4a4a4a);
}

.access-scanner-context__control,
.access-scanner-context__controller {
    font-size: clamp(0.85rem, 3.1vw, 0.95rem);
    color: var(--text-secondary, #4a4a4a);
}

.access-scanner-back .btn {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
}

.access-scanner-hint {
    font-size: clamp(0.88rem, 3.2vw, 0.95rem);
    line-height: 1.5;
    word-break: break-word;
}

.access-scanner-hint {
    margin-top: 0.35rem;
    margin-bottom: 0.75rem;
}

/* Largeur du texte d’aide = largeur du cadre lecteur QR (page scanner admin) */
.access-scanner-layout .access-scanner-reader-stack {
    width: var(--access-scanner-qr-width);
    max-width: var(--access-scanner-qr-max);
    margin: 0.75rem 0;
    box-sizing: border-box;
}

@keyframes access-scanner-new-qr-pulse {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(83, 150, 231, 0.5);
    }
    55% {
        transform: scale(1.035);
        box-shadow: 0 0 0 12px rgba(83, 150, 231, 0.1);
    }
    100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 transparent;
    }
}

.access-scanner-reader-stack--new-qr {
    animation: access-scanner-new-qr-pulse 0.42s ease-out;
    border-radius: 12px;
}

/* Animation festive (confettis) — couche au-dessus du contenu, sans bloquer les clics */
.festive-celebration-canvas {
    position: fixed;
    inset: 0;
    z-index: 9998;
    pointer-events: none;
    width: 100%;
    height: 100%;
}

@media (prefers-reduced-motion: reduce) {
    .festive-celebration-canvas {
        display: none !important;
    }
}

/* Page publique événement (lien / QR type …/events&action=show&id=…) */
body.event-public-show .main {
    padding-bottom: max(var(--spacing-lg), env(safe-area-inset-bottom, 0px));
}

@media (max-width: 768px) {
    body.event-public-show #main-content,
    body.event-public-show .main {
        padding-top: 5px;
    }

    body.event-public-show .header-menu-toggle--floating {
        top: max(0.65rem, env(safe-area-inset-top, 0px));
        right: max(0.5rem, env(safe-area-inset-right, 0px));
    }

    body.event-public-show .event-detail h1 {
        font-size: clamp(1.45rem, 5.5vw, 1.9rem);
    }

    body.event-public-show .event-detail .event-meta p {
        font-size: 1rem;
        line-height: 1.5;
    }

    body.event-public-show #inscription-evenement {
        margin-bottom: 12px;
        scroll-margin-top: 4.5rem;
    }
}

.access-scanner-layout .access-scanner-reader-stack .access-scanner-reader {
    width: 100%;
    max-width: 100%;
    margin: 0;
}

.access-scanner-layout .access-scanner-reader-stack .access-scanner-hint {
    max-width: 100%;
    margin-top: 0.4rem;
    margin-bottom: 0.65rem;
    box-sizing: border-box;
}

.access-scanner-layout .access-scanner-manual {
    width: var(--access-scanner-qr-width);
    max-width: var(--access-scanner-qr-max);
    margin-left: 0;
    margin-right: auto;
    margin-top: 1rem;
    padding: 0.65rem 0.85rem;
    box-sizing: border-box;
}

.access-scanner-layout .access-scanner-manual .card-title {
    font-size: clamp(1rem, 3.2vw, 1.2rem);
    margin-top: 0;
    margin-bottom: 0.35rem;
}

.access-scanner-layout .access-scanner-manual > p {
    margin: 0 0 0.45rem;
}

.access-scanner-layout .access-scanner-manual .access-scanner-manual-input {
    margin-top: 0.2rem;
    padding: 0.4rem 0.5rem;
    min-height: 3.25rem;
    resize: vertical;
}

.access-scanner-layout .access-scanner-manual .btn {
    margin-top: 0.25rem;
    width: 100%;
}

/* Lecteur QR : cadre carré (largeur héritée du stack parent). */
.access-scanner-layout .access-scanner-reader {
    aspect-ratio: 1;
    height: auto;
    max-height: min(320px, 56vh);
    overflow: hidden;
    display: block;
    box-sizing: border-box;
}

.access-scanner-layout #access-scanner-reader video,
.access-scanner-layout #access-scanner-reader canvas {
    width: 100% !important;
    height: 100% !important;
    max-width: 100% !important;
    max-height: 100% !important;
    object-fit: cover !important;
    display: block;
}

.access-scanner-layout #access-scanner-reader #qr-shaded-region,
.access-scanner-layout #access-scanner-reader .qr-shaded-region {
    max-width: 100% !important;
    max-height: 100% !important;
}

.access-scanner-result-panel {
    position: fixed;
    left: auto;
    right: 0;
    bottom: 0;
    width: 90%;
    max-width: min(90vw, 58rem);
    transform: none;
    z-index: 300;
    margin: 0;
    border-radius: 16px 0 0 0;
    padding: 2.75rem 1rem calc(1rem + env(safe-area-inset-bottom, 12px));
    max-height: min(72vh, 560px);
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    box-shadow: 0 -10px 40px rgba(0, 0, 0, 0.5);
    overflow-wrap: anywhere;
    word-break: break-word;
    box-sizing: border-box;
}

/* [hidden] doit primer sur display:flex des variantes (sinon le panneau reste visible après la croix) */
#access-scanner-result[hidden] {
    display: none !important;
    pointer-events: none;
}

.access-scanner-result-close {
    position: absolute;
    top: max(0.45rem, env(safe-area-inset-top, 0px));
    right: max(0.45rem, env(safe-area-inset-right, 0px));
    z-index: 2;
    width: 2.25rem;
    height: 2.25rem;
    min-width: 44px;
    min-height: 44px;
    margin: 0;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.38);
    color: #fff;
    font-size: 1.5rem;
    line-height: 1;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    -webkit-tap-highlight-color: transparent;
}

.access-scanner-result-close:hover {
    background: rgba(0, 0, 0, 0.52);
}

.access-scanner-result-close:focus-visible {
    outline: 2px solid #fff;
    outline-offset: 2px;
}

.access-scanner-result-panel.access-scanner-result--ok .access-scanner-result-close {
    background: rgba(0, 0, 0, 0.28);
}

.access-scanner-result-panel.access-scanner-result--ok .access-scanner-result-close:hover {
    background: rgba(0, 0, 0, 0.42);
}

.access-scanner-result-headline {
    font-size: clamp(1.85rem, 8vw, 3rem);
    font-weight: 800;
    letter-spacing: 0.03em;
    text-align: center;
    line-height: 1.1;
    margin: 0 0 0.5rem;
    text-transform: uppercase;
}

.access-scanner-result--ok .access-scanner-result-headline {
    color: #b8f5b8;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}

.access-scanner-result--ko .access-scanner-result-headline {
    color: #ffcdd2;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}

.access-scanner-result-sub {
    font-size: clamp(1rem, 4.2vw, 1.4rem);
    text-align: center;
    line-height: 1.35;
    font-weight: 600;
    margin: 0;
}

/* Consigne pièce d’identité (doublon scan) */
.access-scanner-result-id-check {
    margin: 0.4rem 0 0;
    padding: 0;
    color: #ff2a2a;
    font-size: clamp(1rem, 4.2vw, 1.4rem);
    line-height: 1.35;
    text-align: center;
    font-weight: 700;
    letter-spacing: 0.01em;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-id-check {
    color: #ff1a1a;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}

.access-scanner-result-panel .access-scanner-result-details {
    font-size: clamp(0.95rem, 3.8vw, 1.15rem);
    margin: 0.85rem 0 0;
    padding-left: 0;
    list-style: none;
    line-height: 1.55;
}

/* Infos invité / contrôle : plus lisibles sur le poste scanner */
.access-scanner-result-panel.access-scanner-result--has-person {
    max-height: min(80vh, 680px);
    padding: 2.85rem 1.1rem calc(1.2rem + env(safe-area-inset-bottom, 14px));
}

/* DÉJÀ CONTRÔLÉ : même tailles de police que « ACCÈS AUTORISÉ », sans défilement */
.access-scanner-result-panel.access-scanner-result--duplicate {
    max-height: min(92dvh, 820px);
    overflow-y: hidden;
    overflow-x: hidden;
    padding-top: 2.75rem;
    padding-bottom: calc(1rem + env(safe-area-inset-bottom, 12px));
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.12rem;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-headline,
.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-sub,
.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-id-check {
    flex-shrink: 0;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-headline {
    margin: 0 0 0.1rem;
    line-height: 1.05;
    letter-spacing: 0.02em;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-sub {
    margin: 0;
    line-height: 1.2;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-id-check {
    margin: 0.05rem 0 0;
    line-height: 1.15;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-person-layout {
    flex: 1 1 auto;
    min-height: 0;
    margin-top: 0.35rem;
    gap: 0.3rem;
    overflow: hidden;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-person-line {
    line-height: 1.1;
    letter-spacing: 0.01em;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-person-nid {
    margin-top: 0.05rem;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-band {
    gap: 0.1rem;
    padding: 0.45rem 0.6rem;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-band-sub {
    line-height: 1.15;
}

.access-scanner-result-panel.access-scanner-result--duplicate.access-scanner-result--has-person {
    max-height: min(92dvh, 820px);
    padding: 2.85rem 1.1rem calc(1.2rem + env(safe-area-inset-bottom, 14px));
}

.access-scanner-result-person-layout {
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    margin: 0.85rem 0 0;
    align-items: stretch;
}

.access-scanner-result-person-line {
    margin: 0;
    padding: 0;
    font-size: clamp(1.15rem, 4.8vw, 1.85rem);
    font-weight: 700;
    line-height: 1.25;
    text-align: center;
    letter-spacing: 0.02em;
}

.access-scanner-result-person-nid {
    margin: 0.15rem 0 0;
    font-size: clamp(0.9rem, 3.2vw, 1.05rem);
    opacity: 0.9;
    text-align: center;
}

.access-scanner-result-person-nid-label {
    font-weight: 700;
    font-size: 0.72em;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    margin-right: 0.25rem;
}

/* Véhicule (QR parking) : immatriculation en évidence, texte noir */
.access-scanner-result-person-plate {
    margin: 0.35rem 0 0;
    text-align: center;
}

.access-scanner-result-person-plate-label {
    display: block;
    font-size: clamp(0.75rem, 2.8vw, 0.85rem);
    font-weight: 600;
    color: #ffffff;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    margin-bottom: 0.15rem;
}

.access-scanner-result-person-plate-value {
    margin: 0;
    font-size: clamp(1.65rem, 9vw, 2.75rem);
    font-weight: 800;
    line-height: 1.1;
    color: #ffffff;
    letter-spacing: 0.06em;
    font-variant-numeric: tabular-nums;
}

.access-scanner-result-person-plate-missing {
    color: rgba(255, 255, 255, 0.75);
    font-weight: 600;
    letter-spacing: 0;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-person-plate {
    margin-top: 0.1rem;
}

.access-scanner-result-panel.access-scanner-result--duplicate .access-scanner-result-person-plate-value {
    font-size: clamp(1.45rem, 7.5vw, 2.2rem);
}

.access-scanner-result-band {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: center;
    gap: 0.3rem 0.45rem;
    padding: 0.55rem 0.75rem;
    border-radius: 10px;
    text-align: center;
    box-sizing: border-box;
    border: 2px solid rgba(255, 255, 255, 0.28);
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12);
}

.access-scanner-result-band--neutral {
    background: rgba(255, 255, 255, 0.1);
    color: rgba(255, 255, 255, 0.95);
    border-style: dashed;
}

.access-scanner-result-band-k,
.access-scanner-result-band-name,
.access-scanner-result-band-sub,
.access-scanner-result-band-values .access-scanner-result-band-sep {
    font-size: clamp(1.12rem, 3.8vw, 1.55rem);
    line-height: 1.22;
}

.access-scanner-result-band-k {
    font-weight: 800;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    opacity: 0.92;
    white-space: nowrap;
    flex-shrink: 0;
}

.access-scanner-result-band-name {
    font-weight: 800;
    flex: 0 1 auto;
    min-width: 0;
}

.access-scanner-result-band-sub {
    font-weight: 600;
    opacity: 0.95;
    min-width: 0;
}

/* Tribune : nom et libellé regroupés (tiret « — » géré en HTML pour écrans moyens / desktop) */
.access-scanner-result-band-values {
    display: inline-flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: center;
    gap: 0;
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
}

.access-scanner-result-band-values .access-scanner-result-band-sep {
    font-weight: 600;
    opacity: 0.9;
    flex-shrink: 0;
    white-space: pre;
}

/* Téléphone : vue scanner plein écran sans menu admin ni défilement de page inutile */
@media (max-width: 768px) {
    body.access-scanner-layout {
        min-height: 100vh;
    }

    body.access-scanner-layout .header-menu-toggle {
        display: none !important;
    }

    body.access-scanner-layout .admin-bar-nav {
        display: none !important;
    }

    body.access-scanner-layout .admin-bar {
        padding-top: 0.35rem;
        padding-bottom: 0.35rem;
    }

    body.access-scanner-layout .main {
        flex: 1 1 auto;
        min-height: 0;
        display: flex;
        flex-direction: column;
        padding-top: var(--spacing-sm);
        padding-bottom: var(--spacing-sm);
        overflow: hidden;
    }

    body.access-scanner-layout .main > .alert {
        flex-shrink: 0;
        padding: 0.4rem 0.65rem;
        margin-bottom: 0.35rem;
        font-size: 0.88rem;
    }

    body.access-scanner-layout .access-scanner-page {
        flex: 1 1 auto;
        min-height: 0;
        display: flex;
        flex-direction: column;
        align-items: center;
        max-width: 100%;
        width: 100%;
        margin: 0;
        padding-left: max(0.35rem, env(safe-area-inset-left, 0));
        padding-right: max(0.35rem, env(safe-area-inset-right, 0));
        padding-bottom: max(0.35rem, env(safe-area-inset-bottom, 0));
        overflow: hidden;
        --access-scanner-qr-width: min(280px, calc(100vw - 1.25rem));
        --access-scanner-qr-max: min(280px, calc(100vw - 1.25rem));
    }

    body.access-scanner-layout .access-scanner-context {
        flex-shrink: 0;
        width: 100%;
        max-width: var(--access-scanner-qr-max);
        margin-bottom: 0.35rem;
        padding: 0 0.15rem;
    }

    body.access-scanner-layout .access-scanner-context__post {
        font-size: clamp(0.98rem, 3.8vw, 1.15rem);
    }

    body.access-scanner-layout .access-scanner-context__event {
        font-size: clamp(0.88rem, 3.2vw, 0.98rem);
    }

    body.access-scanner-layout .access-scanner-context__control,
    body.access-scanner-layout .access-scanner-context__controller {
        font-size: clamp(0.82rem, 2.9vw, 0.9rem);
    }

    .access-scanner-result-panel .access-scanner-result-band {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 0.15rem;
    }

    .access-scanner-result-panel .access-scanner-result-band-k {
        white-space: normal;
        text-align: center;
    }

    .access-scanner-result-panel .access-scanner-result-band-values {
        flex-direction: column;
        align-items: center;
        width: 100%;
        gap: 0.12rem;
    }

    .access-scanner-result-panel .access-scanner-result-band-values .access-scanner-result-band-sep {
        display: none;
    }

    .access-scanner-layout .access-scanner-back {
        flex-shrink: 0;
        margin-bottom: 0.25rem;
        align-self: center;
        width: 100%;
        text-align: center;
    }

    .access-scanner-layout .access-scanner-reader-stack {
        flex: 1 1 auto;
        min-height: 0;
        display: flex;
        flex-direction: column;
        margin-top: 0.35rem;
        margin-bottom: 0.25rem;
        width: var(--access-scanner-qr-width);
        max-width: var(--access-scanner-qr-max);
        margin-left: auto;
        margin-right: auto;
        align-self: center;
    }

    .access-scanner-layout .access-scanner-reader-stack .access-scanner-hint {
        flex-shrink: 0;
        margin-top: 0.25rem;
        margin-bottom: 0;
        font-size: 0.78rem;
        line-height: 1.3;
        text-align: center;
        max-width: 100%;
    }

    .access-scanner-layout .access-scanner-reader-stack .access-scanner-reader {
        flex: 0 0 auto;
        width: 100%;
        max-width: 100%;
        aspect-ratio: 1;
        max-height: min(72vw, 300px, 50dvh);
        margin-left: auto;
        margin-right: auto;
        align-self: center;
    }

    .access-scanner-layout #access-scanner-result {
        flex-shrink: 0;
    }

    /* Message de contrôle après scan : pleine largeur écran sur téléphone */
    body.access-scanner-layout .access-scanner-result-panel,
    .access-scanner-layout .access-scanner-result-panel {
        left: 0;
        right: 0;
        width: 100%;
        max-width: 100%;
        margin-left: 0;
        margin-right: 0;
        border-radius: 14px 14px 0 0;
        padding-left: max(0.85rem, env(safe-area-inset-left, 0px));
        padding-right: max(0.85rem, env(safe-area-inset-right, 0px));
    }
}

/* Tablette / écran moyen : « Tribune » / « Parking » sur la 1re ligne ; nom — libellé (tribune) sur la ligne du dessous ; parking idem */
@media (min-width: 769px) and (max-width: 1199px) {
    .access-scanner-result-panel .access-scanner-result-band {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 0.28rem;
    }

    .access-scanner-result-panel .access-scanner-result-band-k {
        white-space: normal;
        text-align: center;
    }

    .access-scanner-result-panel .access-scanner-result-band-values {
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: center;
        align-items: baseline;
    }

    .access-scanner-result-panel .access-scanner-result-person-layout {
        flex-direction: column;
        align-items: stretch;
    }
}

@media (min-width: 768px) {
    .access-scanner-layout .access-scanner-page {
        max-width: min(40rem, calc(100vw - 24px));
        --access-scanner-qr-width: min(300px, 42vw);
        --access-scanner-qr-max: 320px;
    }

    .access-scanner-layout .access-scanner-reader-stack .access-scanner-reader {
        max-height: min(320px, 50vh);
    }
}

/* Formulaire public « Compléter votre venue » : options de groupe plus lisibles */
.card-attendance-party-options label {
    font-size: clamp(1.08rem, 2.8vw, 1.3rem);
    line-height: 1.45;
}

.card-attendance-party-options .card-attendance-party-hint {
    font-size: clamp(1rem, 2.4vw, 1.15rem);
    line-height: 1.5;
}

.card-attendance-party-size > label {
    font-size: clamp(1.08rem, 2.8vw, 1.3rem);
}

.card-attendance-party-size select {
    font-size: clamp(1rem, 2.4vw, 1.15rem);
    min-height: 2.5rem;
    padding: 0.35rem 0.6rem;
}

/* ============================================
   Admin invitations : impression liste
   ============================================ */
.inv-list-print-header {
    display: none;
    margin-bottom: 1rem;
    padding-bottom: 0.65rem;
    border-bottom: 1px solid #ccc;
}

.inv-list-print-header__title {
    margin: 0 0 0.35rem;
    font-size: 1.35rem;
    font-weight: 700;
    color: #111;
}

.inv-list-print-header__meta {
    margin: 0;
    font-size: 0.9rem;
    color: #444;
}

.inv-list-print-dialog {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 10001;
    max-height: min(92vh, 640px);
    overflow: auto;
    margin: 0;
}

/* Filtre statut : menu dans l'en-tête de colonne du tableau */
.inv-th-status-filter {
    position: relative;
}

.inv-th-status-filter__wrap {
    position: relative;
    display: inline-block;
    max-width: 100%;
}

.inv-th-status-filter__label {
    text-transform: uppercase;
    letter-spacing: 0.02em;
}

.inv-th-status-filter__btn {
    appearance: none;
    border: none;
    background: transparent;
    color: inherit;
    font: inherit;
    font-weight: inherit;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0;
    margin: 0;
    max-width: 100%;
    white-space: nowrap;
}

.inv-th-status-filter__btn:hover,
.inv-th-status-filter__btn:focus-visible {
    text-decoration: underline;
    outline: 2px solid var(--accent, #4a5d23);
    outline-offset: 2px;
}

.inv-th-status-filter__active-dot {
    display: inline-block;
    width: 0.45rem;
    height: 0.45rem;
    border-radius: 50%;
    background: var(--accent, #4a5d23);
    flex-shrink: 0;
}

.inv-th-status-filter__caret {
    font-size: 0.75em;
    opacity: 0.75;
    line-height: 1;
}

.inv-th-status-filter__menu {
    position: fixed;
    z-index: 10002;
    min-width: 12.5rem;
    max-width: min(18rem, 92vw);
    margin: 0;
    padding: 0.35rem 0;
    list-style: none;
    background: var(--bg-card, #fff);
    color: var(--text-primary, #111);
    border: 1px solid var(--border-color, #ccc);
    border-radius: var(--radius-sm, 6px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.14);
}

.inv-th-status-filter__option {
    display: block;
    width: 100%;
    box-sizing: border-box;
    text-align: left;
    border: none;
    background: transparent;
    color: inherit;
    font: inherit;
    font-size: var(--font-sm, 0.875rem);
    line-height: 1.35;
    padding: 0.45rem 0.75rem;
    cursor: pointer;
}

.inv-th-status-filter__option:hover,
.inv-th-status-filter__option:focus-visible {
    background: var(--list-hover, rgba(0, 0, 0, 0.05));
    outline: none;
}

.inv-th-status-filter__option--active {
    font-weight: 700;
    background: rgba(74, 93, 35, 0.1);
}

@media (prefers-reduced-motion: reduce) {
    .inv-th-status-filter__menu {
        transition: none;
    }
}

@media print {
    body.inv-list-printing {
        background: #fff !important;
        color: #111 !important;
    }

    /* Marges de page : limite l’espace réservé aux en-têtes / pieds du navigateur (URL, date…). */
    @page {
        margin: 10mm 8mm 10mm 8mm;
    }

    body.inv-list-printing .skip-link,
    body.inv-list-printing .header-menu-toggle,
    body.inv-list-printing .left-sidebar,
    body.inv-list-printing .admin-bar,
    body.inv-list-printing .footer,
    body.inv-list-printing .inv-no-print,
    body.inv-list-printing dialog,
    body.inv-list-printing .inv-list-print-header,
    body.inv-list-printing .about-contubernium-panel,
    body.inv-list-printing .flash-messages {
        display: none !important;
    }

    /* Pas d’affichage des URL après les liens dans le contenu imprimé. */
    body.inv-list-printing a[href]::after {
        content: none !important;
    }

    body.inv-list-printing .layout-shell.container {
        max-width: 100% !important;
        padding: 0 !important;
        margin: 0 !important;
    }

    body.inv-list-printing .main {
        padding: 0 !important;
    }

    body.inv-list-printing .inv-admin-invitations-page {
        max-width: 100% !important;
        padding: 0.4rem !important;
    }

    body.inv-list-printing .inv-print-zone {
        box-shadow: none !important;
        border: none !important;
        background: transparent !important;
        padding: 0 !important;
        margin: 0 !important;
    }

    body.inv-list-printing .inv-list-print-header {
        display: none !important;
    }

    body.inv-list-printing #inv-list-print-table-wrap {
        overflow: visible !important;
        max-height: none !important;
        border: none !important;
    }

    body.inv-list-printing #inv-list-print-table {
        min-width: 0 !important;
        width: 100% !important;
        border-collapse: collapse;
        font-size: 9pt;
        page-break-inside: auto;
    }

    body.inv-list-printing #inv-list-print-table thead th {
        position: static;
        box-shadow: none;
    }

    /* En-tête du tableau : une seule fois (1re page), pas répété sur chaque page. */
    body.inv-list-printing #inv-list-print-table thead {
        display: table-row-group;
    }

    body.inv-list-printing #inv-list-print-table tr[data-inv-print-row="1"] {
        page-break-inside: avoid;
    }

    body.inv-list-printing #inv-list-print-table th,
    body.inv-list-printing #inv-list-print-table td {
        border: 1px solid #bbb;
        padding: 0.25rem 0.35rem;
        vertical-align: top;
        color: #111 !important;
        background: #fff !important;
    }

    body.inv-list-printing #inv-list-print-table thead th {
        background: #eee !important;
        font-weight: 700;
        font-size: 7.5pt;
        line-height: 1.2;
        white-space: normal;
        text-align: center;
        vertical-align: middle;
    }

    body.inv-list-printing .inv-print-col-hidden,
    body.inv-list-printing .inv-print-row-hidden {
        display: none !important;
    }

    body.inv-list-printing .inv-print-plain {
        border: none !important;
        background: transparent !important;
        box-shadow: none !important;
        padding: 0 !important;
        margin: 0 !important;
        color: inherit !important;
        font: inherit !important;
        text-align: left !important;
        white-space: normal !important;
        opacity: 1 !important;
        cursor: default !important;
        pointer-events: none !important;
    }

    body.inv-list-printing .badge {
        border: 1px solid #888;
        color: #111 !important;
        background: #f5f5f5 !important;
    }

    body.inv-list-printing tr.inv-row-pdf-sent td,
    body.inv-list-printing tr.inv-row-dup td,
    body.inv-list-printing tr.inv-row-cancelled td {
        background: #fff !important;
        font-weight: normal !important;
    }

    body.inv-list-printing [data-inv-print-col="message"] .btn,
    body.inv-list-printing [data-inv-print-col="message"] dialog {
        display: none !important;
    }
}

/* Import invitations — progression AJAX */
.import-progress-panel {
    margin: var(--spacing-md) 0 var(--spacing-lg);
    padding: var(--spacing-md);
    border: 1px solid var(--border-color, #e2e8f0);
    border-radius: var(--radius-md, 8px);
    background: var(--surface-muted, #f8fafc);
}
.import-progress-panel__status {
    margin: 0 0 var(--spacing-sm);
    font-weight: 600;
}
.import-progress-panel__detail {
    margin: var(--spacing-sm) 0 0;
    font-size: 0.9rem;
}
.import-progress-bar {
    height: 10px;
    border-radius: 999px;
    background: var(--border-color, #e2e8f0);
    overflow: hidden;
}
.import-progress-bar__fill {
    height: 100%;
    width: 0;
    border-radius: 999px;
    background: var(--primary, #22c55e);
    transition: width 0.25s ease;
}
.import-progress-panel__warnings {
    margin: var(--spacing-md) 0 0;
    padding: var(--spacing-sm) var(--spacing-md);
    padding-left: 1.25rem;
    max-height: 12rem;
    overflow-y: auto;
    font-size: 0.875rem;
    color: #92400e;
    background: #fffbeb;
    border: 1px solid #fcd34d;
    border-radius: var(--radius-md, 8px);
    list-style: disc;
}
.import-progress-panel__errors {
    margin: var(--spacing-md) 0 0;
    padding-left: 1.25rem;
    max-height: 12rem;
    overflow-y: auto;
    font-size: 0.875rem;
    color: var(--danger, #b91c1c);
}
.import-progress-panel--error .import-progress-bar__fill {
    background: var(--danger, #b91c1c);
}

/* ------------------------------------------------------------------
   Page d'accueil — hero, parallax vidéo, section finale
   (tokens --home-* : assets/css/themes.css)
   ------------------------------------------------------------------ */

body.home-fullscreen .header-menu-toggle--floating {
    top: clamp(1rem, 2.5vh, 1.75rem);
    left: clamp(1rem, 2.5vw, 1.75rem);
}

.home-hero {
    position: relative;
    z-index: 2;
    width: 100%;
    height: auto;
    min-height: 50vh;
    background: var(--home-hero-bg);
    color: var(--home-hero-text);
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    padding: clamp(5rem, 12vh, 9rem) clamp(1.5rem, 6vw, 6rem) clamp(2rem, 5vw, 4rem);
    overflow: hidden;
    border-radius: 0;
}

/* Texte à gauche (position d'origine) + cartes à droite, même ligne */
.hero-wrapper {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: flex-start;
    justify-content: flex-start;
    gap: 40px;
    width: 100%;
}

.hero-wrapper > .home-hero__inner {
    flex: 1 1 auto;
    min-width: 0;
}

.hero-wrapper > .home-hero__events {
    flex: 0 0 auto;
    width: min(100%, var(--event-card-grid-max));
    max-width: var(--event-card-grid-max);
    min-width: var(--event-card-grid-min);
    /* Sommet de la carte légèrement plus haut que le bloc texte / haut de section */
    margin-top: clamp(-2.5rem, -4vh, -1.25rem);
    align-self: flex-start;
}

.home-hero__inner {
    max-width: 1100px;
    display: flex;
    flex-direction: column;
    gap: clamp(0.5rem, 1.2vw, 1rem);
}

.home-hero__events {
    min-width: 0;
    position: relative;
}

.home-hero__events-empty {
    margin: 0;
    font-size: clamp(0.95rem, 1.2vw, 1.05rem);
    line-height: 1.5;
}

/* Accueil : même grille et gabarit que .events-upcoming-page .card-grid */
.home-hero__events .card-grid {
    margin-top: 0;
    width: 100%;
}

.home-hero__events-track--static.card-grid > .event-card {
    width: 100%;
    max-width: min(100%, var(--event-card-grid-max));
    justify-self: start;
}

/* > 3 événements : navigation carrousel au-dessus des cartes (colonne droite) */
.home-hero__events--carousel {
    display: flex;
    flex-direction: column;
    align-items: stretch;
}

.home-hero__events-nav {
    display: flex;
    justify-content: flex-end;
    gap: 0.35rem;
    margin-bottom: 0.5rem;
}

.home-hero__events-nav-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    padding: 0;
    border: 1px solid var(--home-hero-btn-border, rgba(255, 255, 255, 0.35));
    background: var(--home-hero-btn-bg, transparent);
    color: var(--home-hero-btn-fg, inherit);
    font-size: 1.35rem;
    line-height: 1;
    cursor: pointer;
    border-radius: 0;
    transition: background-color 0.2s ease, color 0.2s ease;
}

.home-hero__events-nav-btn:hover,
.home-hero__events-nav-btn:focus-visible {
    background: var(--home-hero-btn-hover-bg, rgba(255, 255, 255, 0.12));
    color: var(--home-hero-btn-hover-fg, inherit);
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

.home-hero__events-track--carousel.card-grid {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    grid-template-columns: unset;
    gap: var(--spacing-lg);
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 0.35rem;
    scrollbar-width: thin;
    scrollbar-color: var(--home-hero-accent, var(--accent)) transparent;
}

.home-hero__events-track--carousel.card-grid > .event-card {
    flex: 0 0 var(--event-card-grid-min);
    width: var(--event-card-grid-min);
    min-width: var(--event-card-grid-min);
    max-width: var(--event-card-grid-min);
    scroll-snap-align: start;
    scroll-snap-stop: always;
    height: auto;
}

.home-hero__events-track--carousel:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 4px;
}

@media (prefers-reduced-motion: reduce) {
    .home-hero__events-track--carousel {
        scroll-behavior: auto;
    }
}

.home-hero__eyebrow {
    margin: 0;
    text-transform: uppercase;
    letter-spacing: 0.35em;
    font-size: 1.85rem;
    color: var(--home-hero-accent);
}

.home-hero__title {
    margin: 0;
    color: var(--home-hero-text);
    font-size: clamp(2.5rem, 7vw, 5.5rem);
    line-height: 1.05;
    font-weight: 700;
    letter-spacing: -0.01em;
}

.home-hero__lede {
    margin: 0;
    max-width: 640px;
    font-size: clamp(1rem, 1.4vw, 1.2rem);
    line-height: 1.55;
    color: var(--home-hero-text-soft);
}

.home-hero__cta {
    align-self: flex-start;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-top: clamp(0.5rem, 1.5vw, 1.25rem);
    padding: 1rem 2.25rem;
    background: var(--home-hero-btn-bg);
    color: var(--home-hero-btn-fg);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    font-size: 0.95rem;
    font-weight: 600;
    border: 1px solid var(--home-hero-btn-border);
    border-radius: 0;
    transition: background-color 0.2s ease, color 0.2s ease;
}

.home-hero__cta:hover,
.home-hero__cta:focus-visible {
    background: var(--home-hero-btn-hover-bg);
    color: var(--home-hero-btn-hover-fg);
    outline: none;
}

.home-parallax-stage {
    position: relative;
    z-index: 1;
    width: 100%;
    height: 200vh;
    background: #000;
}

.home-parallax-video {
    position: sticky;
    top: 0;
    width: 100%;
    height: 100vh;
    overflow: hidden;
    background: #000;
    border-radius: 0;
}

.home-parallax-video__media,
.home-parallax-video__fallback,
.home-parallax-video__poster {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    display: block;
    border-radius: 0;
}

.home-parallax-video__poster {
    z-index: 1;
    background: #0a0c10;
}

.home-parallax-video__poster--hidden {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 0.4s ease;
}

.home-parallax-video__media {
    z-index: 2;
    background: transparent;
}

.home-parallax-video__fallback {
    z-index: 0;
}

.home-parallax-video__placeholder {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, #1f242b 0%, #0a0c10 100%);
}

.home-final-section {
    position: relative;
    z-index: 2;
    width: 100%;
    min-height: 20vh;
    background: var(--home-final-bg);
    color: var(--home-final-text);
    padding: clamp(1.5rem, 3vw, 3rem) clamp(1.5rem, 6vw, 6rem);
    border-radius: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}

.home-final-section__inner {
    max-width: 1200px;
    margin: 0 auto;
}

.home-final-section__eyebrow {
    margin: 0 0 1rem;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    font-size: 0.85rem;
    color: var(--home-final-accent);
}

.home-final-section__title {
    margin: 0 0 clamp(2rem, 4vw, 3.5rem);
    font-size: clamp(2rem, 4.5vw, 3.5rem);
    line-height: 1.1;
    font-weight: 700;
    color: var(--home-final-text);
    letter-spacing: -0.01em;
}

.home-final-section__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: clamp(1rem, 2vw, 2rem);
}

.home-final-card {
    background: var(--home-final-bg);
    color: var(--home-final-text);
    padding: clamp(1.5rem, 2.5vw, 2.25rem);
    border: 1px solid var(--home-final-border);
    border-radius: 0;
}

.home-final-card__title {
    margin: 0 0 1rem;
    font-size: 1.25rem;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: var(--home-final-text);
}

.home-final-card__text {
    margin: 0;
    color: var(--home-final-text-soft);
    line-height: 1.6;
}

.home-final-section__cta-row {
    margin-top: 0;
}

.home-final-section__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 1rem 2.25rem;
    background: var(--home-final-btn-bg);
    color: var(--home-final-btn-fg);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    font-size: 0.95rem;
    font-weight: 600;
    border: 1px solid var(--home-final-btn-border);
    border-radius: 0;
    transition: background-color 0.2s ease, color 0.2s ease;
}

.home-final-section__cta:hover,
.home-final-section__cta:focus-visible {
    background: var(--home-final-btn-hover-bg);
    color: var(--home-final-btn-hover-fg);
    outline: none;
}

body.home-fullscreen .main {
    padding: 0;
}

body.home-fullscreen .footer {
    position: relative;
    z-index: 3;
}

@media (max-width: 992px) {
    .hero-wrapper {
        flex-direction: column;
        align-items: stretch;
        gap: clamp(1.25rem, 3vw, 2rem);
    }

    .hero-wrapper > .home-hero__events {
        width: 100%;
        max-width: 100%;
        margin-top: 0;
    }

    .home-hero__events-track--static.card-grid > .event-card {
        max-width: 100%;
        justify-self: stretch;
    }

    .home-hero__events-track--carousel.card-grid > .event-card {
        flex: 0 0 min(100%, var(--event-card-grid-min));
        width: min(100%, var(--event-card-grid-min));
        min-width: min(100%, var(--event-card-grid-min));
        max-width: 100%;
    }
}

@media (max-width: 768px) {
    .home-hero__events-track--carousel.card-grid > .event-card {
        flex: 0 0 100%;
        width: 100%;
        min-width: 0;
        max-width: 100%;
    }

    .home-hero {
        min-height: auto;
        padding: 4.5rem 1.25rem 2rem;
        align-items: flex-start;
    }

    .hero-wrapper {
        gap: 1.25rem;
    }

    .home-hero__inner {
        padding-top: 0;
        gap: 0.65rem;
        max-width: 100%;
    }

    .home-hero__eyebrow {
        font-size: clamp(1rem, 4.2vw, 1.35rem);
        letter-spacing: 0.12em;
        line-height: 1.2;
    }

    .home-hero__title {
        font-size: clamp(1.65rem, 7.5vw, 2.35rem);
        line-height: 1.1;
    }

    .home-hero__lede {
        font-size: clamp(0.9rem, 3.8vw, 1.05rem);
        line-height: 1.5;
        max-width: 100%;
    }

    .home-hero__cta {
        align-self: stretch;
        width: 100%;
        max-width: 100%;
        margin-top: 0.75rem;
        padding: 0.85rem 1rem;
        font-size: 0.78rem;
        letter-spacing: 0.1em;
        text-align: center;
        white-space: normal;
    }

    a.btn.btn-primary.event-card-cta {
        align-self: stretch;
        width: 100%;
        max-width: 100%;
        padding: 0.85rem 1rem;
        font-size: 0.78rem;
        letter-spacing: 0.1em;
        text-align: center;
        white-space: normal;
    }

    .home-final-section {
        padding: 1.25rem 1.25rem;
    }

    .home-final-section__inner {
        width: 100%;
        max-width: 100%;
    }

    .home-final-section__cta {
        width: 100%;
        max-width: 100%;
        padding: 0.85rem 1rem;
        font-size: 0.78rem;
        letter-spacing: 0.1em;
        text-align: center;
        white-space: normal;
    }
}

@media (max-width: 480px) {
    .home-hero {
        padding: 4rem 1rem 1.5rem;
    }

    .home-hero__inner {
        gap: 0.5rem;
    }

    .home-hero__eyebrow {
        font-size: clamp(0.95rem, 5vw, 1.15rem);
        letter-spacing: 0.08em;
    }

    .home-hero__title {
        font-size: clamp(1.45rem, 8vw, 1.85rem);
    }

    .home-hero__lede {
        font-size: 0.875rem;
    }

    .home-hero__cta,
    .home-final-section__cta {
        padding: 0.75rem 0.85rem;
        font-size: 0.72rem;
        letter-spacing: 0.08em;
    }

    a.btn.btn-primary.event-card-cta {
        padding: 0.75rem 0.85rem;
        font-size: 0.72rem;
        letter-spacing: 0.08em;
    }

    .home-final-section {
        padding: 1rem;
    }
}

@supports not (position: sticky) {
    .home-parallax-stage {
        height: auto;
    }

    .home-parallax-video {
        position: relative;
        height: 100vh;
    }
}

img.defer-img:not(.defer-img--loaded) {
    background-color: var(--bg-secondary, #1a1f26);
}