/*
 * Page Blog (listing) — hero, filtres par catégorie, grille d'articles,
 * pagination.
 */

.blog-hero {
    background: var(--mr-gris-fond-2);
    padding: 44px 0 96px;
}

.blog-hero__arrow {
    display: block;
    width: 110px;
    height: auto;
    margin: 0 auto 4px;
}

.blog-hero__title {
    text-align: center;
    color: var(--mr-brun);
    font-weight: 900;
    font-size: clamp(30px, 2.3vw, 40px);
    line-height: 1.1;
    margin: 0 0 16px;
}

.blog-hero__intro {
    text-align: center;
    font-size: 15px;
    line-height: 1.7;
    color: var(--mr-brun);
    max-width: 640px;
    margin: 0 auto 44px;
}

.blog-filters {
    margin-bottom: 20px;
}

.blog-filters__label {
    margin: 0 0 16px;
    text-align: center;
    font-size: 15px;
    font-weight: 700;
    color: var(--mr-brun);
}

.blog-filters__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    justify-content: center;
}

.filter-pill {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    border-radius: var(--mr-r-pill);
    padding: 10px 20px;
    font-weight: 500;
    font-size: 15px;
    min-height: 44px;
    box-sizing: border-box;
    border: 2px solid transparent;
    background: var(--mr-blanc);
    color: var(--mr-brun);
    text-decoration: none;
    transition: background 0.18s ease, color 0.18s ease;
}

.filter-pill[aria-current='true'] {
    background: var(--mr-brun);
    color: var(--mr-blanc);
    box-shadow: 0 0 0 2px var(--mr-brun);
    font-weight: 900;
}

.filter-pill:hover {
    background: var(--mr-brun) !important;
    color: var(--mr-blanc) !important;
}

.filter-pill:hover .filter-pill__icon {
    filter: brightness(0) invert(1);
}

html.a11y-contrast .filter-pill,
html.a11y-enhanced .filter-pill {
    border-color: var(--mr-encre);
}

/* .blog-card (fond blanc sur le gris-fond-2 de la page, ~2% d'écart de
   ton) : aucun contour propre en temps normal — contrairement à sa
   cousine .article-card, qui elle en a un — d'où son absence de
   définition visuelle en contraste élevé. */
html.a11y-contrast .blog-card,
html.a11y-enhanced .blog-card {
    border: 2px solid var(--mr-encre);
}

.filter-pill__icon {
    display: block;
    width: 20px;
    height: 20px;
}

.blog-count {
    margin: 0 0 34px;
    text-align: center;
    font-size: 15px;
    color: var(--mr-brun);
}

.blog-empty {
    text-align: center;
    color: var(--mr-brun);
    font-size: 15px;
}

/* Flexbox plutôt que CSS Grid : sur un conteneur flex multi-lignes,
   justify-content s'applique indépendamment à CHAQUE ligne — une ligne
   pleine (4 cartes en desktop, largeur cumulée = 100% du conteneur)
   reste donc collée aux bords, tandis qu'une dernière ligne incomplète
   (1, 2 ou 3 cartes, quelle que soit sa position dans la liste) se
   centre automatiquement, sans rien calculer côté PHP. Même technique
   que .search-results (recherche), qui réutilise cette classe. */
.blog-grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    column-gap: 36px;
    row-gap: 60px;
    align-items: stretch;
}

.blog-grid > li {
    flex: 0 1 calc(25% - 27px);
    /* Pas de content-visibility ici : elle impose un confinement du rendu qui
       rogne le bouton « Lire la suite », volontairement en débord (margin-bottom
       négatif) sous la carte. */
}

@media (max-width: 1100px) {
    .blog-grid {
        column-gap: 24px;
        row-gap: 52px;
    }

    .blog-grid > li {
        flex: 0 1 calc(50% - 12px);
    }
}

@media (max-width: 640px) {
    .blog-grid > li {
        flex: 1 1 100%;
    }
}

.blog-card {
    height: 100%;
    background: var(--mr-blanc);
    border-radius: var(--mr-r-m);
    display: flex;
    flex-direction: column;
    padding: 12px 12px 0;
}

.blog-card__media-link {
    display: block;
    position: relative;
    text-decoration: none;
}

.blog-card__media {
    display: block;
    /* 3/2 : le ratio réel de la quasi-totalité des images de couverture
       d'article (1600×1067, 1080×720…) — measured across les 288 articles
       du blog, 85% sont à ~1,5:1 et la médiane tombe exactement dessus.
       5/4 (1,25:1, sensiblement plus carré) rognait donc les bords gauche
       et droit de la quasi-totalité des vignettes (retour utilisateur
       explicite : « les images sont coupées »). */
    aspect-ratio: 3 / 2;
    position: relative;
    overflow: hidden;
    border-radius: var(--mr-r-s);
}

.blog-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.blog-card__media--empty {
    background: linear-gradient(135deg, var(--mr-rose-pale), var(--mr-rose));
}

.blog-card__badge {
    position: absolute;
    top: 14px;
    left: 14px;
    z-index: 2;
}

.blog-card__body {
    padding: 20px 2px 0;
    display: flex;
    flex-direction: column;
    flex: 1;
}

.blog-card__title {
    margin: 0 0 18px;
    font-size: 19px;
    line-height: 1.28;
    text-wrap: pretty;
}

.blog-card__title-link {
    color: var(--mr-brun);
    font-weight: 900;
    text-decoration: none;
}

.blog-card__excerpt {
    margin: 0 0 40px;
    color: var(--mr-brun);
    font-size: 15px;
    line-height: 1.7;
}

.blog-card__cta {
    margin-top: auto;
    margin-bottom: -23px;
    align-self: center;
}
