/* =========================================================
   LISTING FILTRÉ RÉUTILISABLE — recherche pleine largeur en
   haut, filtres + bouton en colonne gauche, résultats en
   colonne droite (3 cartes par rangée). Utilisé par
   Actualités, Projects Archive, et à terme Projets.
   ========================================================= */
.bp-filtered-listing{
  display:grid;
  grid-template-columns:280px 1fr;
  /* 4e rangée vide (« . results ») : elle absorbe la hauteur des
     résultats. Sans elle, l'excédent allonge la rangée des filtres et
     repousse « Réinitialiser » tout en bas de la colonne. */
  grid-template-areas:
    "search  search"
    "filters results"
    "actions results"
    ".       results";
  grid-template-rows:auto auto auto 1fr;
  gap:1rem 2rem;
  align-items:start;
}

/* Aplatit le <div> wrapper ET le <form> pour que les vrais champs
   deviennent des enfants directs de la grille ci-dessus. */
.bp-filtered-listing__form,
.bp-filtered-listing__form .views-exposed-form{
  display:contents;
}

/* Recherche */
.bp-filtered-listing__form .form-item-combine{
  grid-area:search;
  position:relative;
}
.bp-filtered-listing__form .form-item-combine .form-item__label{
  font-weight:600;
  margin-bottom:.4rem;
  display:block;
}
.bp-filtered-listing__form .form-item-combine input{
  width:100%;
  padding-left:3.5rem;
}
.bp-filtered-listing__form .form-item-combine::after{
  font-size:1.8em;
  font-family:"bootstrap-icons";
  content:"\f52a";
  position:absolute;
  left:.75rem;
  bottom:.3rem;
  color:var(--text-secondary);
  pointer-events:none;
}

/* Croix "effacer" la recherche (Drupal.behaviors.bpSearchClear) */
.bp-filtered-listing__form .bp-search-clear{
  position:absolute;
  right:.6rem;
  bottom:.55rem;
  background:none;
  border:none;
  color:var(--text-secondary);
  font-size:1.8rem;
  line-height:1;
  cursor:pointer;
  display:none;
  padding:.2rem;
}
.bp-filtered-listing__form .bp-search-clear.is-visible{
  display:block;
}

/* Regroupement de TOUS les filtres (Thématique/Quartier/Statut/
   Édition) dans un seul conteneur — voir bp_content.module,
   $form['bp_filters_group']. Empile proprement en flex, évite la
   superposition que CSS Grid provoque quand plusieurs éléments
   partagent la même grid-area. */
.bp-filtered-listing__form .bp-filters-group{
  grid-area:filters;
  display:flex;
  flex-direction:column;
  gap:1rem;
}
.bp-filtered-listing__form .bp-filters-group fieldset{
  grid-area:auto;
}

/* Fieldsets de filtres (Catégorie, Quartier, Thématique...) */
.bp-filtered-listing__form fieldset{
  grid-area:filters;
  border:1px solid var(--border);
  border-radius:var(--radius);
  padding:0 1rem;
  margin:0;
}
.fieldset__legend{
  background-color:transparent;
}
.fieldset__wrapper--group{
  padding:0;
}
.bp-filtered-listing__form .fieldset__legend--composite{
  font-size:.85rem;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.03em;
  color:var(--text-secondary);
  float:none;
  width:auto;
  padding:0 .3rem;
}
.bp-filtered-listing__form .fieldset__label--group{
  font-size:.85rem !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.03em !important;
  color:var(--text-secondary) !important;
  padding:0 .3rem !important;
}
.bp-filtered-listing__form .fieldset__label{
  padding:0;
  color:var(--text-secondary) !important;
}
.bp-filtered-listing__form .fieldset__wrapper{
  padding:0;
}
.bp-filtered-listing__form .form-type-checkbox{
  margin-block:10px;
}
.bp-filtered-listing__form .form-checkbox{
  width:20px;
  height:20px;
}

/* Légende des fieldsets custom (Statut, Édition) — même style que
   les fieldsets natifs, ciblé via notre propre classe. */
.bp-custom-fieldset > legend{
  font-size:.85rem;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.03em;
  color:var(--text-secondary);
  padding:0 .3rem;
  width:auto;
  float:none;
}

/* "Voir plus / Voir moins" (Drupal.behaviors.bpFilterShowMore) */
.bp-filter-hidden{
  display:none;
}
.bp-filter-toggle{
  background:none;
  border:none;
  color:var(--primary);
  font-weight:600;
  font-size:.85rem;
  padding:.4rem 0 0;
  cursor:pointer;
  text-decoration:underline;
}

/* Bouton "Appliquer" masqué : BEF soumet déjà automatiquement au
   changement (data-bef-auto-submit), le bouton est redondant. */
.bp-filtered-listing__form #edit-submit-news,
.bp-filtered-listing__form #edit-submit-projects-archive,
.bp-filtered-listing__form #edit-submit-projects-current-edition{
  display:none;
}

.bp-filtered-listing__form .form-actions{
  grid-area:actions;
  margin-top:.5rem;
}
.bp-filtered-listing__form .form-actions .button{
  font-size:.9rem;
  height:32px;
  width:100%;
}

/* Lien "Réinitialiser" custom (voir $form['bp_reset_link'] dans
   bp_content.module) — toujours affiché, indépendant de la logique
   d'affichage conditionnel du bouton natif de Views. */
.bp-filtered-listing__form .bp-reset-link{
  grid-area:actions;
  display:inline-block;
  margin-top:.5rem;
  color:var(--text-secondary);
  text-decoration:underline;
  font-size:.85rem;
}

.bp-filtered-listing__results{
  grid-area:results;
}

/* Views enveloppe chaque résultat dans .views-row, un niveau AU-DESSUS
   de .col-md-4 — la règle Bootstrap générique ".row > *" donne donc
   100% de largeur à .views-row (le vrai enfant direct de .row). On
   reprend la largeur de colonne directement sur .views-row. */
.bp-filtered-listing__results .row > .views-row{
  width:auto;
  max-width:none;
  flex:0 0 100%;
  padding-right:calc(var(--bs-gutter-x) * .5);
  padding-left:calc(var(--bs-gutter-x) * .5);
}
@media (min-width:768px){
  .bp-filtered-listing__results .row > .views-row{
    flex:0 0 33.3333%;
  }
}

/* Fix générique : la marge par défaut d'Olivero entre .field
   consécutifs crée un espace vide indésirable sous l'image de
   couverture d'une carte. */
.card .field--type-image:not(:last-child){
  margin-block-end:0;
}
/* Indication "Fusionné avec [titre]" sur une carte projet enfant
   (voir bp_project.module, bp_project_preprocess_views_view_fields()) */
.bp-merge-indicator{
  font-size:.85rem;
  color:var(--text-secondary);
}
.bp-merge-indicator a{
  color:inherit;
  text-decoration:underline;
}

@media (max-width:991px){
  .bp-filtered-listing{
    grid-template-columns:1fr;
    grid-template-areas:
      "search"
      "filters"
      "actions"
      "results";
  }
}
