html {
    scrollbar-gutter: stable;
}

header.navbar.sticky-top {
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}

/* Supprime l'icône (croix rouge / coche verte) que Bootstrap injecte sur les champs invalides */
.form-control.is-invalid,
.form-select.is-invalid {
    background-image: none !important;
    padding-right: 0.75rem !important;
}
.form-control.is-valid,
.form-select.is-valid {
    background-image: none !important;
    padding-right: 0.75rem !important;
}

/* Custom compact select group */
.form-selectgroup-sm .form-selectgroup-label {
    padding: 0.125rem 0.5rem;
    font-size: 0.75rem;
    line-height: 1.5;
    min-width: 2.5rem;
}

/* TomSelect — hide selected items, show only input (used for multi-select with custom cards) */
.ts-hidden-items .ts-control > .item { display: none !important; }
.ts-hidden-items .ts-control { display: flex; }
.ts-hidden-items .ts-control > input { flex-grow: 1; width: 100% !important; margin: 0 !important; }

/* Auth pages — loading spinner inside buttons */
.btn-spinner { margin-right: 0.5rem; }
/* Tabler input-group inline error messages */
.invalid-feedback { display: block; }

/* Nav badge compact (ex: counter "le point" dans la navbar) */
.nav-badge-sm { font-size: 0.65rem; padding: 0.2em 0.45em; }

.toast-container { z-index: 1095; }

/* Colonne n° + réf interne des listes : largeur plancher pour aligner le libellé
   d'une ligne à l'autre, sans jamais couper une référence en plein milieu. */
.list-ref-col {
    min-width: 9rem;
    word-break: normal;
    white-space: nowrap;
}

/* Notifications — une notif lue reste dans la cloche, simplement atténuée, jusqu'à ce qu'elle soit retirée */
.notification-item.notification-read .notification-title,
.notification-item.notification-read .text-muted {
    opacity: 0.6;
}

.notification-item .notification-dismiss {
    opacity: 0.4;
    transition: opacity 0.15s ease-in-out;
}

.notification-item .notification-dismiss:hover,
.notification-item .notification-dismiss:focus-visible {
    opacity: 1;
}

/* Toast "Annuler" du retrait d'une notification : au-dessus du dropdown de la cloche */
.notification-undo-container { z-index: 1096; }


/* --- Compacité écrans portables (<= 1400) -------------------------------------
   Les postes en 1366 et 1680 n'ont pas la place que suppose la mise en page :
   ce bloc rend compressible ce qui refusait de l'être. Rien ne change au-dessus
   de 1400, les règles sont soit neutres, soit sous media query. */

/* Un badge de tableau se tronque au lieu de mordre sur la colonne voisine.
   .badge est un inline-flex centré : sans justify-content, la troncature
   ronge le début du texte au lieu de la fin. */
.table td .badge {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    justify-content: flex-start;
}

/* Une référence métier ou une date ne se coupe jamais en plein milieu. */
.no-break {
    overflow-wrap: normal;
    word-break: normal;
    white-space: nowrap;
}

/* Une ancre de contenu ne se cache pas derrière la barre collante. */
[id^="pane-"],
[id^="tab-"] {
    scroll-margin-top: 5rem;
}

/* Les états vides des widgets tiennent dans la hauteur imposée par la grille. */
.grid-stack .empty {
    padding-top: 1.5rem;
    padding-bottom: 1.5rem;
}
.grid-stack .empty-img svg {
    width: 72px;
    height: 72px;
}

/* Une colonne de navigation ne s'enroule pas : ses items se dimensionneraient
   sur leur contenu et non sur la colonne, et l'ellipsis tomberait hors cadre. */
#threads-list-container {
    flex-wrap: nowrap;
}

@media (max-width: 1399.98px) {
    /* Cinq filtres dans une colonne de 285 px : on resserre plutôt que de déborder. */
    #ref-type-filter .btn {
        padding-inline: 0.35rem;
        font-size: 0.75rem;
    }
}

/* Le nom de l'organisme devient compressible : il gardait 478 px en dur et
   poussait tout le menu hors de l'écran. Nom complet disponible en infobulle. */
header.navbar .navbar-brand {
    min-width: 0;
    flex: 0 1 auto;
    overflow: hidden;
}
header.navbar .navbar-brand a {
    min-width: 0;
    overflow: hidden;
}
header.navbar .navbar-brand span {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 1.05rem;
}
header.navbar .nav-link-title {
    white-space: nowrap;
}
