html, body {
    padding: 0;
    margin: 0;
}


.h1, .h2, .h3, .h4, .h5, .h6{
    color: var(--title-color);
}

.--hide {
    display: none !important;
}

.bg-primary{
    background-color: var(--bdmc-primary) !important;
}

.admin-filter-container label{
    margin-bottom: 0 !important;
}

.admin-filter-container select{
    margin-bottom: 0 !important;
}

/* Badges de filtres actifs (admin/layout/_filters_toolbar.html.twig) : taille plus lisible que le badge par défaut */
.filter-badge {
    font-size: .8125rem;
    padding: .4em .75em;
}

/* Badges de filtres actifs (admin/layout/_filters_toolbar.html.twig) : croix compacte dans le badge */
.filter-badge-close {
    width: .5em;
    height: .5em;
    padding: .25em;
    box-sizing: content-box;
}

/* Modale de choix « Nouveau » (admin/layout/_new_modal.html.twig) : cartes cliquables */
/* Sélecteur à 2 classes : search_banker.css (importé après) redéfinit .card (border: none + ombre) */
.new-choice-card.card {
    color: inherit;
    text-decoration: none;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--bs-border-radius);
    box-shadow: none;
    transition: border-color .15s ease;
}

.new-choice-card.card:hover,
.new-choice-card.card:focus-visible {
    color: inherit;
    border-color: var(--bdmc-primary);
}

.new-choice-card.card:focus-visible {
    outline: 2px solid var(--bdmc-primary);
    outline-offset: 2px;
}

/* Sélecteur à 2 classes : badge.css (importé après app.css) redéfinit .text-bg-* avec
   width: 100% à spécificité égale et écraserait sinon la taille fixe (cercle devenant ellipse) */
.new-choice-card .new-choice-icon {
    width: 4rem;
    height: 4rem;
    font-size: 2rem;
    flex-shrink: 0;
}

/* Les SVG mdi n'ont qu'un viewBox : sans taille explicite ils s'étendent à toute la largeur */
.new-choice-card .new-choice-icon svg {
    width: 1em;
    height: 1em;
}

@media (prefers-reduced-motion: reduce) {
    .new-choice-card.card {
        transition: none;
    }
}

/* Spinner affiché dans le backdrop de l'offcanvas des filtres pendant une requête AJAX :
   centré dans la zone visible (à gauche du panneau de min(100vw, 420px)), sans bloquer les clics du backdrop */
.filter-backdrop-spinner {
    position: absolute;
    top: 50%;
    left: calc((100% - min(100vw, 420px)) / 2);
    transform: translate(-50%, -50%);
    pointer-events: none;
}

.filter-backdrop-spinner .spinner-border {
    --bs-spinner-width: 3rem;
    --bs-spinner-height: 3rem;
}

/* Overlay de chargement quand un filtre est retiré offcanvas fermé (controller admin--filter-panel).
   Même rendu que le backdrop de l'offcanvas (noir, plein écran) pour un affichage unifié ;
   bloque les clics le temps de la requête. */
.filter-list-overlay {
    position: fixed;
    inset: 0;
    z-index: 1040; /* = backdrop offcanvas Bootstrap */
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: rgba(0, 0, 0, .5); /* = opacité du backdrop offcanvas */
    opacity: 0;
    transition: opacity .15s ease;
    cursor: progress;
}

.filter-list-overlay.is-visible {
    opacity: 1;
}

.filter-list-overlay-spinner {
    color: var(--bs-light);
}

.filter-list-overlay-spinner .spinner-border {
    --bs-spinner-width: 3rem;
    --bs-spinner-height: 3rem;
}

@media (prefers-reduced-motion: reduce) {
    .filter-list-overlay {
        transition: none;
    }
}

/* ===== Offcanvas filtres (admin/layout/_filters_offcanvas.html.twig) ===== */
.filter-offcanvas .offcanvas-body {
    padding: 1.25rem;
}

.filter-section-title {
    margin: 0;
    font-size: .7rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
}

.filter-section-title:not(:first-child) {
    margin-top: .75rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--bs-border-color);
}

.filter-block {
    --fb-pad-y: .75rem;
    --fb-pad-x: .875rem;
    --fb-border: 1px;
    padding: var(--fb-pad-y) var(--fb-pad-x);
    border: var(--fb-border) solid var(--bs-border-color);
    border-left: 3px solid var(--bs-border-color);
    border-radius: .5rem;
    background-color: #fff;
    transition: background-color .15s ease, border-color .15s ease;
}

.filter-block.is-active {
    border-color: var(--bdmc-primary);
    background-color: var(--bdmc-primary-light);
}

.filter-block-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
}

/* Corps repliable (Bootstrap Collapse) : l'espace sous l'en-tête est un padding du contenu INTERNE,
   pour que la hauteur animée du conteneur retombe à 0 sans saut */
.filter-block-content {
    padding-top: .5rem;
}

/* Chevron réduire / agrandir (admin/layout/_filter_toggle.html.twig) : une icône, pivote selon aria-expanded */
.filter-block-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 1.75rem;
    height: 1.75rem;
    margin: -.25rem 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    line-height: 1;
    color: var(--bs-secondary-color);
}

/* Toute la ligne d'en-tête déplie/replie : le pseudo-élément du vrai <button> couvre l'en-tête
   (stretched-link). « Effacer » et l'aide restent cliquables au-dessus. */
.filter-block-header {
    position: relative;
}

.filter-block-toggle::after {
    content: "";
    position: absolute;
    inset: -.75rem -.875rem; /* déborde sur le padding du bloc : toute la carte réduite est cliquable */
    cursor: pointer;
}

.filter-block-help {
    position: relative;
    z-index: 1;
}

/* Bloc réduit : titre (avec son aide) + chevron, en compact. La pastille « Effacer » reste visible si le
   filtre est actif, pour pouvoir le vider sans déplier. Le padding passe par --fb-pad-y pour que la pastille
   (positionnée avec cette variable) reste calée sur le coin du bloc. */
.filter-block.is-collapsed {
    --fb-pad-y: .5rem;
}

.filter-block-toggle svg {
    transition: transform .2s ease;
}

.filter-block-toggle[aria-expanded="true"] svg {
    transform: rotate(180deg);
}

.filter-block-toggle:hover,
.filter-block-toggle:focus-visible {
    color: var(--bdmc-primary);
}

.filter-block-toggle:focus-visible {
    outline: 2px solid var(--bdmc-primary);
    outline-offset: 1px;
}

@media (prefers-reduced-motion: reduce) {
    .filter-block-toggle svg {
        transition: none;
    }
}

.filter-block-title {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    font-weight: 600;
}

/* Icône du champ (admin/layout/_filter_icon.html.twig) */
.filter-block-icon {
    flex-shrink: 0;
    width: 1.1em;
    height: 1.1em;
    color: var(--bs-secondary-color);
}

.filter-block.is-active .filter-block-icon {
    color: var(--bdmc-primary);
}

/* Libellé <label> dans le titre : neutralise les styles globaux (label 20px, astérisque rouge de
   label.required::before dans layouts/form.css) */
.filter-offcanvas .filter-block-title .filter-block-label {
    margin: 0;
    font-size: inherit;
    font-weight: inherit;
}

.filter-offcanvas .filter-block-title label::before {
    content: none;
}

/* Ordre de l'en-tête : titre, aide (collée au titre), chevron poussé au bord droit */
.filter-block-toggle {
    margin-left: auto;
}

/* Bouton d'aide = icône du champ (admin/layout/_filter_help.html.twig) : discret, zone cliquable 1.75rem */
.filter-block-help {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 1.75rem;
    height: 1.75rem;
    margin: -.25rem -.25rem -.25rem 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    font-size: .95rem;
    line-height: 1;
    color: var(--bs-secondary-color);
}

.filter-block-help:hover,
.filter-block-help:focus-visible {
    color: var(--bdmc-primary);
}

.filter-block-help:focus-visible {
    outline: 2px solid var(--bdmc-primary);
    outline-offset: 1px;
}

/* Popover d'aide des filtres (data-bs-custom-class) : rendu dans <body>, au-dessus de l'offcanvas */
.filter-help-popover {
    --bs-popover-max-width: 260px;
    --bs-popover-body-padding-x: .75rem;
    --bs-popover-body-padding-y: .625rem;
    font-size: .8125rem;
    line-height: 1.4;
}

/* Même taille pour les titres <span> (périodes) et <label> (Type, Statut) :
   neutralise `label { font-size: 20px }` (original.css) et `.form-label` (form.css) */
.filter-offcanvas .filter-block-title {
    font-size: 1rem;
    margin-bottom: 0;
}

/* Pastille « Effacer » (admin/layout/_filter_clear.html.twig) : croix blanche sur fond rouge (même rouge que
   .bg-danger du projet), en absolu sur le coin supérieur droit du bloc, débordant de .5rem (style pastille de
   notification). Le conteneur de positionnement est l'en-tête (position: relative) : les décalages compensent
   donc le padding + la bordure du .filter-block. Le débordement reste dans le padding de .offcanvas-body (1.25rem),
   qui défile toujours : rien n'est coupé. */
.filter-block-clear {
    position: absolute;
    top: calc(-1 * (var(--fb-pad-y) + var(--fb-border)) - .5rem);
    right: calc(-1 * (var(--fb-pad-x) + var(--fb-border)) - .5rem);
    z-index: 2; /* au-dessus du ::after (stretched-link) du chevron */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.375rem;
    height: 1.375rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background-color: var(--bdmc-danger);
    box-shadow: 0 0 0 2px #fff;
    font-size: .9rem;
    line-height: 1;
    color: #fff;
    transition: filter .15s ease;
}

.filter-block-clear:hover {
    filter: brightness(.88);
}

.filter-block-clear:focus-visible {
    outline: 2px solid var(--bdmc-danger);
    outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
    .filter-block-clear {
        transition: none;
    }
}

.filter-block:not(.is-active) .filter-block-clear {
    display: none;
}

.filter-range {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    column-gap: .5rem;
}

.filter-range-arrow {
    color: var(--bs-secondary-color);
}

.filter-offcanvas .form-control,
.filter-offcanvas .form-select {
    background-color: #fff;
    border-radius: .375rem;
}

.filter-offcanvas .form-control:focus,
.filter-offcanvas .form-select:focus {
    border-color: var(--bdmc-primary);
    box-shadow: 0 0 0 .2rem rgba(49, 197, 199, .25);
}

/* Disquette « sauvegarder mes filtres » (en-tête de l'offcanvas) : grise = inactif, primaire = actif */
.filter-save-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 1.75rem;
    height: 1.75rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    font-size: 1.1rem;
    line-height: 1;
    color: var(--bs-secondary-color);
    transition: color .15s ease;
}

.filter-save-toggle .filter-save-icon {
    width: 1em;
    height: 1em;
}

.filter-save-toggle:hover {
    color: var(--bs-body-color);
}

.filter-save-toggle.is-active,
.filter-save-toggle.is-active:hover {
    color: var(--bdmc-primary);
}

.filter-save-toggle:focus-visible {
    outline: 2px solid var(--bdmc-primary);
    outline-offset: 1px;
}

@media (prefers-reduced-motion: reduce) {
    .filter-save-toggle {
        transition: none;
    }
}

.filter-offcanvas-footer {
    background-color: var(--bs-body-bg);
    box-shadow: 0 -2px 6px rgba(0, 0, 0, .05);
}

td textarea{
    resize: both;
}


.bd-callout {
    --bs-link-color-rgb: var(--bd-callout-link);
    --bs-code-color: var(--bd-callout-code-color);
    padding: 1.25rem;
    margin-top: 1.25rem;
    margin-bottom: 1.25rem;
    color: var(--bd-callout-color, inherit);
    background-color: var(--bd-callout-bg, var(--bs-gray-100));
    border-left: .25rem solid var(--bd-callout-border, var(--bs-gray-300));
    font-size: 16px !important;
}

.bd-callout-warning {
    --bd-callout-color: var(--bs-warning-text-emphasis);
    --bd-callout-bg: var(--bs-warning-bg-subtle);
    --bd-callout-border: var(--bs-warning-border-subtle);
}

.nav-link {
    color: #777;
    text-decoration: none;
    padding: 15px;
}

.nav-link:hover{
    color: #333;
    background-color: transparent;
    text-decoration: none;
}

.card.panel > .card-header {
    background-color: white;
    border: 0;
    position: relative;
}

.panel {
    margin-bottom: 16px;
    background-color: #fff;
    border: 1px solid transparent;
    border-radius: 4px;
    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}

.panel-primary {
    border-color: var(--bdmc-primary);
}

.panel-heading {
    padding: 10px 15px;
    border-bottom: 1px solid transparent;
    border-top-right-radius: 3px;
    border-top-left-radius: 3px;
}

.panel-primary>.panel-heading {
    color: #fff;
    background-color: var(--bdmc-primary);
    border-color: var(--bdmc-primary);
}

.panel-title {
    margin-top: 0;
    margin-bottom: 0;
    font-size: 16px;
    color: inherit;
}

.nav-pills .nav-link.active, .nav-pills .show>.nav-link
{
    background-color: var(--bdmc-primary);
}








/* Icône du champ portée par le bouton d'aide : la couleur suit le bouton (survol / focus),
   turquoise si le filtre est actif ; l'icône reste alignée sur le bord gauche du bloc */
.filter-block-help .filter-block-icon {
    color: inherit;
}

.filter-block.is-active .filter-block-help {
    color: var(--bdmc-primary);
}

.filter-block-title .filter-block-help {
    margin-left: -.35rem;
}
