.groupe-grise > .jstree-anchor {
    opacity: .25;
    pointer-events: none; /* empêche le clic jsTree sur le nœud grisé */
}

/* Mais on garde le radio cliquable même si le nœud est grisé */
.groupe-grise > .jstree-anchor .groupe-radio {
    pointer-events: auto;
    cursor: pointer;
}

/* Alignement du radio dans le badge */
.groupe-radio {
    vertical-align: middle;
    cursor: pointer;
}

/* Conteneur de la barre */
.groupe-progress {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    font-size: .8rem;
    vertical-align: middle;
}

/* Compteur places */
.groupe-progress__label {
    color: #555;
    white-space: nowrap;
    min-width: 4rem;
}

/* Fond de la barre */
.groupe-progress__bar-wrap {
    display: inline-block;
    width: 80px;
    height: 8px;
    background: #e9ecef;
    border-radius: 999px;
    overflow: hidden;
    vertical-align: middle;
}

/* Barre de remplissage */
.groupe-progress__bar {
    display: block;
    height: 100%;
    border-radius: 999px;
    transition: width .4s ease;
}

/* Places restantes */
.groupe-progress__restantes {
    white-space: nowrap;
    color: #888;
    font-style: italic;
}

/* Cas — 0 places */
.groupe-progress__bar.bg-danger ~ .groupe-progress__restantes {
    color: #dc3545;
    font-weight: 600;
    font-style: normal;
}

.progress-updated {
    box-shadow: 0 0 0 2px rgba(59, 130, 246, .5);
    transition: box-shadow .3s ease;
}

.groupe-complet > .jstree-anchor {
    opacity: .45;
    cursor: not-allowed !important;
    pointer-events: none;
}

/* Mais le radio reste visible (même désactivé) */
.groupe-complet > .jstree-anchor .groupe-radio {
    pointer-events: none;
    opacity: .4;
}