/* Finition commune des cartes publiques, après les compositions et la lisibilité.
   Ne pas appliquer ces règles aux heroes, couvertures, menus ou à l'admin. */
.site-page {
    --card-content-padding: clamp(1rem, 1.25vw, 1.4rem);
}

/* Réduire le padding entre le bord de la carte et son contenu uniquement.
   Les espacements entre cartes restent définis par les grilles existantes. */
.site-page :is(.service-card, .project-card, .news-card) > .card-body {
    padding: var(--card-content-padding);
}
.site-page.page-services:not(.page-variant-service-detail) .service-card .card-body {
    padding: clamp(1rem, 1.5vw, 1.6rem);
}
.site-page.page-news:not(.page-variant-article-detail) .news-card .card-body,
.site-page.page-news .editorial-list .news-card .card-body {
    padding: var(--card-content-padding);
}
.site-page.page-news .editorial-list .news-magazine > .news-lead .card-body {
    padding: clamp(1.15rem, 2vw, 2.2rem);
}
/* Les petites cartes horizontales ont déjà peu de padding. Ne pas l'augmenter. */
.site-page.page-home .home-projects .cards-grid > .project-card:not(:first-child) .card-body,
.site-page.page-home .home-news .news-grid > .news-card:not(:first-child) .card-body {
    padding: 1rem;
}
@media (min-width: 601px) {
    .site-page.page-home .home-projects .cards-grid.count-2 > .project-card .card-body,
    .site-page.page-home .home-news .news-grid.count-2 > .news-card .card-body {
        padding: var(--card-content-padding);
    }
}

.site-page :is(.service-card, .project-card, .news-card) .card-body > h3 {
    margin: 0 0 .75rem;
}
.site-page :is(.service-card, .project-card, .news-card) .card-body > p {
    margin: 0 0 .8rem;
}
.site-page :is(.service-card, .project-card) .card-type-icon { margin-bottom: .65rem; }
.site-page :is(.project-card, .news-card) .card-body > :is(.tags, .card-meta) {
    margin-bottom: .65rem;
}
.site-page :is(.project-card, .news-card) .card-body > :is(.tags, p):empty {
    display: none;
    margin: 0;
}
.site-page .news-card .news-card-footer {
    padding-top: .75rem;
    gap: .55rem .75rem;
}
.site-page.page-news .editorial-list .news-lead .news-card-footer { margin-top: .75rem; }
/* L'alignement en bas reste automatique et la cible tactile reste confortable. */
.site-page :is(.service-card, .project-card, .news-card) .card-body .text-link {
    min-height: 44px;
}
.site-page .services-grid-editorial > .service-card-accent {
    gap: 1.5rem;
    padding: clamp(1.35rem, 2.5vw, 2.6rem);
}

/* Les photos remplissent leur cadre sans déformation et sont recadrées au centre.
   Conserver les ratios/hauteurs spécifiques déjà validés sur chaque page. */
.site-page :is(.service-card, .project-card, .news-card) .media:not(.media-placeholder) > img {
    /* Sortir du sizing intrinsèque de la grille : height:100% seul pouvait
       garder la hauteur native et décaler le recadrage dans un cadre à ratio. */
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    min-width: 0;
    min-height: 0;
    object-fit: cover;
    object-position: 50% 50%;
    transform-origin: center;
}
/* Un logo n'est pas une photo : centrer le groupe, sans l'étirer ni le recadrer.
   Annule les anciens offsets grid et le décalage de 50 % des services. */
.site-page :is(.service-card, .project-card, .news-card) .media-placeholder {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .55rem;
}
.site-page :is(.service-card, .project-card, .news-card) .media-placeholder > img {
    width: 50px;
    height: 63px;
    flex: 0 0 auto;
    align-self: auto;
    margin: 0;
    opacity: 1;
    object-fit: contain;
    object-position: 50% 50%;
    transform-origin: center;
}
.site-page :is(.service-card, .project-card, .news-card) .media-placeholder > span {
    align-self: auto;
    margin: 0;
    padding: 0;
    text-align: center;
}
.site-page .service-card .service-visual .media-placeholder > span { display: none; }

@media (max-width: 600px) {
    .site-page.page-news .editorial-list .news-magazine > .news-lead .card-body { padding: 1rem; }
}
