/* =============================================================================
   components.css — Composants réutilisables
   Organisation par bloc : boutons, hero, trust bar, sections de page, cards,
   éditoriaux, formulaires, événements, articles, partenaires, about, FAQ, etc.
   ============================================================================= */

/* --- Boutons (3 variantes × 2 tailles) --------------------------------------- */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    padding: var(--space-3) var(--space-5);
    min-height: 48px;
    border-radius: 999px;
    font-weight: 600;
    font-size: var(--fs-sm);
    text-decoration: none;
    cursor: pointer;
    border: 2px solid transparent;
    transition: transform .15s ease, background-color .2s ease, color .2s ease;
    white-space: nowrap;
}

.btn:active {
    transform: translateY(1px);
}

.btn-primary {
    background: var(--forest-700);
    color: var(--white);
}

.btn-primary:hover {
    background: var(--forest-900);
    color: var(--white);
}

.btn-accent {
    background: var(--terracotta);
    color: var(--white);
}

.btn-accent:hover {
    background: var(--terracotta-2);
    color: var(--white);
}

.btn-outline {
    background: transparent;
    color: var(--forest-900);
    border-color: var(--forest-900);
}

.btn-outline:hover {
    background: var(--forest-900);
    color: var(--white);
}

.btn-ghost {
    background: transparent;
    color: var(--forest-900);
}

.btn-ghost:hover {
    background: var(--forest-100);
}

.btn-lg {
    padding: var(--space-4) var(--space-6);
    min-height: 56px;
    font-size: var(--fs-base);
}

/* --- Hero -------------------------------------------------------------------- */

.hero {
    position: relative;
    padding: var(--space-8) 0;
    background:
        radial-gradient(ellipse at top left, var(--forest-100), transparent 60%),
        radial-gradient(ellipse at bottom right, var(--cream-2), transparent 60%),
        var(--cream);
}

.hero-grid {
    display: grid;
    gap: var(--space-6);
    align-items: center;
}

@media (min-width: 900px) {
    .hero-grid {
        grid-template-columns: 1.15fr 1fr;
        gap: var(--space-8);
    }
}

.hero h1 {
    margin-bottom: var(--space-5);
    color: var(--rose-900);
}

/* Potta One n'a pas d'italique → on neutralise <em> avec un changement de teinte */
.hero h1 em {
    font-style: normal;
    color: var(--green-700);
}

.hero-cta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    margin-top: var(--space-6);
}

.hero-visual {
    position: relative;
    aspect-ratio: 4 / 5;
    border-radius: var(--r-xl);
    overflow: hidden;
    box-shadow: var(--shadow-lg);
    background: linear-gradient(135deg, var(--green-700), var(--rose-900));
}

.hero-visual video,
.hero-visual .hero-poster {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* La vidéo recouvre le poster <img> (rendu après elle dans le DOM, sert de
   fallback). Sous prefers-reduced-motion la vidéo est masquée → le poster reste.

   Anti-flash : la vidéo démarre invisible (opacity 0) au-dessus du poster, et
   n'apparaît en fondu (.is-playing, posé par JS sur l'événement `playing`) que
   lorsqu'elle a assez de données pour jouer. Évite le saut sec poster → 1re
   frame. Le poster reste dessous comme fallback (vidéo en échec / no-JS). */
.hero-visual video {
    z-index: 1;
    opacity: 0;
    transition: opacity .6s ease;
}

.hero-visual video.is-playing {
    opacity: 1;
}

.hero-visual .hero-poster {
    display: grid;
    place-items: center;
    color: var(--cream);
    font-size: 5rem;
    /* L'image de fond (background-image) est posée en inline depuis le template
       via une variable ACF (poster_url), pour rester éditable côté admin. */
}

.hero-visual::after {
    content: "";
    position: absolute;
    inset: auto 0 0 0;
    height: 30%;
    background: linear-gradient(to top, rgba(0, 0, 0, .55), transparent);
    pointer-events: none;
}

.hero-visual .hero-caption {
    position: absolute;
    left: var(--space-5);
    bottom: var(--space-5);
    right: var(--space-5);
    color: var(--cream);
    font-size: var(--fs-xs);
    text-shadow: 0 1px 4px rgba(0, 0, 0, .5);
    z-index: 2;
}

/* Bouton pause/lecture vidéo (toggle accessible) */
.video-toggle {
    position: absolute;
    top: var(--space-4);
    right: var(--space-4);
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: 0;
    /* Fond assez opaque pour garantir le contraste de l'icône quel que soit le
       contenu (vidéo/poster) derrière le bouton — WCAG 1.4.11 (composant). */
    background: rgba(0, 0, 0, .85);
    color: var(--cream);
    cursor: pointer;
    display: grid;
    place-items: center;
    z-index: 3;
    transition: background .2s ease;
}

.video-toggle:hover {
    background: rgba(0, 0, 0, .92);
}

/* Focus clavier visible (WCAG 2.4.7) — aligné sur le pattern projet. */
.video-toggle:focus-visible {
    outline: 3px solid var(--focus);
    outline-offset: 2px;
}

/* `hidden` doit l'emporter sur `display: grid` (no-JS : bouton retiré). */
.video-toggle[hidden] {
    display: none;
}

.video-toggle svg {
    width: 20px;
    height: 20px;
    /* Hérite de `color: var(--cream)` du bouton (sinon fill par défaut = noir
       → icône noire sur fond noir, invisible). */
    fill: currentColor;
}

.video-toggle .icon-pause { display: block; }
.video-toggle .icon-play  { display: none; }

/* Vidéo en pause → on propose de la relire (icône play). Piloté par data-state
   (et non aria-pressed, retiré : sémantique ambiguë pour un toggle play/pause). */
.video-toggle[data-state="paused"] .icon-pause { display: none; }
.video-toggle[data-state="paused"] .icon-play  { display: block; }

/* prefers-reduced-motion : masque la vidéo, laisse le poster fixe */
@media (prefers-reduced-motion: reduce) {
    .hero-visual video { display: none; }
    .video-toggle      { display: none; }
}

/* --- Trust bar --------------------------------------------------------------- */

.trust-bar {
    background: var(--forest-900);
    color: var(--cream);
    padding: var(--space-5) 0;
}

.trust-bar .container {
    display: grid;
    gap: var(--space-5);
}

@media (min-width: 720px) {
    .trust-bar .container {
        grid-template-columns: repeat(4, 1fr);
    }
}

.trust-item {
    text-align: center;
}

.trust-item strong {
    display: block;
    font-family: var(--font-serif);
    font-size: var(--fs-2xl);
    color: var(--white);
    font-weight: 600;
}

.trust-item span {
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .1em;
    opacity: .85;
}

/* --- Section heads ----------------------------------------------------------- */

.section-head {
    margin-bottom: var(--space-7);
    max-width: 720px;
}

.section-head.center {
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}

/* --- Services (cards grid) --------------------------------------------------- */

.grid-services {
    display: grid;
    gap: var(--space-5);
    grid-template-columns: 1fr;
}

@media (min-width: 640px) { .grid-services { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 980px) { .grid-services { grid-template-columns: repeat(4, 1fr); } }

.service-card {
    display: flex;
    flex-direction: column;
    padding: var(--space-6);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    text-decoration: none;
    color: var(--ink);
    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
    position: relative;
    overflow: hidden;
}

.service-card:hover,
.service-card:focus-visible {
    transform: translateY(-4px);
    box-shadow: var(--shadow-md);
    border-color: var(--forest-500);
    color: var(--ink);
}

.service-icon {
    width: 56px;
    height: 56px;
    border-radius: var(--r-md);
    background: var(--forest-100);
    display: grid;
    place-items: center;
    font-size: 1.75rem;
    margin-bottom: var(--space-4);
}

.service-card h3 {
    margin-bottom: var(--space-2);
    font-family: var(--font-serif);
}

.service-card-title {
    font-size: var(--fs-xl);
    margin-bottom: var(--space-2);
    overflow-wrap: anywhere;
}

.service-card p {
    color: var(--ink-2);
    font-size: var(--fs-sm);
    margin-bottom: var(--space-4);
    flex: 1;
}

.service-card .card-link {
    color: var(--forest-700);
    font-weight: 600;
    font-size: var(--fs-sm);
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
}

.service-card .card-link::after {
    content: "→";
    transition: transform .2s ease;
}

.service-card:hover .card-link::after {
    transform: translateX(4px);
}

/* --- Audiences --------------------------------------------------------------- */

.audiences {
    background: var(--cream-2);
}

.audience-grid {
    display: grid;
    gap: var(--space-4);
    list-style: none;
    padding-left: 0;
    margin: 0;
}

@media (min-width: 640px) { .audience-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 960px) { .audience-grid { grid-template-columns: repeat(3, 1fr); } }

.audience-item {
    padding: var(--space-5);
    background: var(--white);
    border-left: 4px solid var(--forest-700);
    border-radius: var(--r-md);
}

.audience-item :is(h3, h4) {
    margin: 0 0 var(--space-2);
    color: var(--forest-900);
}

.audience-item p {
    font-size: var(--fs-sm);
    color: var(--ink-2);
    margin: 0;
}

/* --- Book feature ------------------------------------------------------------ */

.book-feature {
    display: grid;
    gap: var(--space-6);
    background: var(--forest-900);
    color: var(--cream);
    border-radius: var(--r-xl);
    padding: var(--space-7) var(--space-6);
    align-items: center;
    position: relative;
    overflow: hidden;
}

@media (min-width: 900px) {
    .book-feature {
        grid-template-columns: 1fr 1.3fr;
        padding: var(--space-8);
    }
}

.book-feature::before {
    content: "";
    position: absolute;
    inset: 0;
    background: radial-gradient(circle at 20% 80%, rgba(164, 60, 20, .25), transparent 50%);
    pointer-events: none;
}

.book-feature h2,
.book-feature h3 {
    color: var(--white);
}

.book-feature .eyebrow {
    color: var(--forest-100);
}

.book-feature p {
    color: rgba(247, 243, 236, .88);
}

/* Effet livre 3D : couverture inclinée + épaisseur de pages.
   Le wrapper .book-3d crée le contexte de perspective ; .book-3d__cover
   porte la rotation 3D et les pseudo-éléments (tranche + ombre au sol). */
.book-3d {
    --book-thickness: 34px;       /* épaisseur des pages */
    --book-rotate: 29deg;         /* inclinaison au repos */
    max-width: 260px;
    margin: 0 auto;
    perspective: 1600px;
}

/* Le conteneur pivote en bloc ; les faces vivent dans son espace 3D. */
.book-3d__cover {
    position: relative;
    transform-style: preserve-3d;
    transform: rotateY(calc(var(--book-rotate) * -1));
    transition: transform .5s cubic-bezier(.22, .61, .36, 1);
    will-change: transform;
}

/* Tranche de pages : face verticale collée au bord droit de la couverture,
   pivotée à 90° pour fuir vers l'arrière sur toute l'épaisseur du livre.
   transform-origin au centre + translateX/Z la place pile dans le prolongement
   du bord droit, sans laisser apparaître le fond dans les angles. */
.book-3d__cover::before {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    width: var(--book-thickness);
    height: 100%;
    /* Stries verticales fines = pages empilées vues par la tranche. */
    background:
        linear-gradient(to right, rgba(0,0,0,.12), rgba(0,0,0,0) 30%),
        repeating-linear-gradient(
            to right,
            #f3e8d6 0,
            #f3e8d6 1px,
            #d9c8ac 1px,
            #d9c8ac 2.5px
        );
    transform: translateX(50%) rotateY(90deg);
    transform-origin: center center;
    backface-visibility: hidden;
}

/* Ombre portée au sol, posée à plat sous le livre. */
.book-3d__cover::after {
    content: "";
    position: absolute;
    left: 8%;
    right: -6%;
    bottom: -8%;
    height: 28px;
    background: radial-gradient(ellipse at center, rgba(0, 0, 0, .45), transparent 70%);
    filter: blur(6px);
    transform: rotateX(72deg);
    transform-origin: center top;
    z-index: -1;
}

/* La couverture elle-même (image réelle OU placeholder). */
.book-cover {
    display: block;
    width: 100%;
    aspect-ratio: 2 / 3;
    object-fit: cover;
    position: relative;
    /* Avancée d'une demi-épaisseur : la couverture est la face avant du volume,
       la tranche se déploie derrière elle jusqu'au dos. */
    transform: translateZ(calc(var(--book-thickness) / 2));
    /* Arrondi uniquement côté reliure (gauche) ; bord droit franc pour
       épouser la tranche de pages sans laisser apparaître le fond. */
    border-radius: var(--r-sm) 0 0 var(--r-sm);
    /* Ombre interne sur le bord gauche = creux de la reliure. */
    box-shadow:
        inset 6px 0 12px -6px rgba(0, 0, 0, .55),
        0 18px 40px rgba(0, 0, 0, .4);
}

/* Placeholder maquette (pas de visuel ACF). */
.book-cover--placeholder {
    background: linear-gradient(145deg, var(--terracotta), var(--gold));
    display: grid;
    place-items: center;
    color: var(--cream);
    font-family: var(--font-serif);
    font-weight: 700;
    text-align: center;
    padding: var(--space-5);
}

.book-cover span {
    font-size: var(--fs-lg);
}

.book-cover small {
    display: block;
    font-family: var(--font-sans);
    font-weight: 400;
    font-size: var(--fs-xs);
    letter-spacing: .15em;
    text-transform: uppercase;
    margin-top: var(--space-3);
    opacity: .85;
}

/* Au survol (souris) : le livre se redresse légèrement vers la face. */
@media (hover: hover) {
    .book-3d:hover .book-3d__cover {
        transform: rotateY(-8deg) translateY(-4px);
    }
}

/* Pas d'animation si l'utilisateur réduit les mouvements. */
@media (prefers-reduced-motion: reduce) {
    .book-3d__cover {
        transition: none;
    }
    .book-3d:hover .book-3d__cover {
        transform: rotateY(calc(var(--book-rotate) * -1));
    }
}

.book-meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    margin: var(--space-5) 0;
    font-size: var(--fs-sm);
}

.book-meta li {
    background: rgba(255, 255, 255, .08);
    padding: var(--space-2) var(--space-4);
    border-radius: 999px;
    list-style: none;
}

/* --- Testimonials ------------------------------------------------------------ */

.testimonials-grid {
    display: grid;
    gap: var(--space-5);
}

@media (min-width: 720px)  { .testimonials-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .testimonials-grid { grid-template-columns: repeat(3, 1fr); } }

.testimonial {
    padding: var(--space-6);
    background: var(--white);
    border-radius: var(--r-lg);
    border: 1px solid var(--border);
}

.testimonial blockquote {
    margin: 0;
    font-family: var(--font-serif);
    font-size: var(--fs-md);
    color: var(--ink);
    line-height: 1.5;
}

.testimonial blockquote::before {
    content: "«";
    color: var(--terracotta);
    font-size: 2rem;
    margin-right: .25rem;
    line-height: 0;
    vertical-align: -1rem;
}

.testimonial cite {
    display: block;
    margin-top: var(--space-4);
    font-style: normal;
    font-size: var(--fs-xs);
    color: var(--ink-muted);
    text-transform: uppercase;
    letter-spacing: .08em;
    font-weight: 600;
}

/* --- CTA band ---------------------------------------------------------------- */

.cta-band {
    background: linear-gradient(135deg, var(--forest-700), var(--forest-900));
    color: var(--cream);
    text-align: center;
    padding: var(--space-8) var(--space-5);
    border-radius: var(--r-xl);
    margin: var(--space-6) 0;
}

.cta-band h2 {
    color: var(--white);
    margin-bottom: var(--space-3);
}

.cta-band p {
    color: rgba(247, 243, 236, .88);
    margin: 0 auto var(--space-5);
    max-width: 58ch;
}

/* --- Page header + breadcrumb ------------------------------------------------ */

.page-header {
    background: var(--forest-900);
    color: var(--cream);
    padding: var(--space-8) 0;
}

.page-header .eyebrow {
    color: var(--forest-100);
}

.page-header h1 {
    color: var(--white);
    margin-bottom: var(--space-4);
}

.page-header p {
    color: rgba(247, 243, 236, .85);
    max-width: 62ch;
}

.breadcrumb {
    font-size: var(--fs-xs);
    color: rgba(247, 243, 236, .88);
    margin-bottom: var(--space-4);
}

.breadcrumb a {
    color: rgba(247, 243, 236, .95);
    text-decoration: underline;
    text-underline-offset: 3px;
}

.breadcrumb a:hover {
    color: var(--white);
}

/* --- Article layout (2 colonnes content + sidebar) --------------------------- */

.article-layout {
    display: grid;
    gap: var(--space-7);
}

@media (min-width: 900px) {
    .article-layout {
        grid-template-columns: 1fr 280px;
    }
}

.article-content h2 {
    margin-top: var(--space-7);
}

.article-content h3 {
    margin-top: var(--space-5);
}

.article-content ul {
    padding-left: var(--space-5);
    margin-bottom: var(--space-5);
}

.article-content li {
    margin-bottom: var(--space-2);
}

.sidebar {
    border-top: 1px solid var(--border);
    padding-top: var(--space-6);
}

@media (min-width: 900px) {
    .sidebar {
        border-top: 0;
        border-left: 1px solid var(--border);
        padding: 0 0 0 var(--space-6);
        position: sticky;
        top: calc(var(--header-h) + var(--space-4));
        align-self: start;
    }
}

.sidebar h3 {
    font-size: var(--fs-md);
    margin-bottom: var(--space-3);
}

.sidebar ul {
    list-style: none;
    padding: 0;
    margin: 0 0 var(--space-5);
}

.sidebar li {
    margin-bottom: var(--space-2);
}

/* --- Forms ------------------------------------------------------------------- */

.form-field {
    margin-bottom: var(--space-5);
}

.form-field label {
    display: block;
    font-weight: 600;
    font-size: var(--fs-sm);
    margin-bottom: var(--space-2);
    color: var(--forest-900);
}

.form-field .required {
    color: var(--terracotta);
    margin-left: 2px;
}

.form-field input,
.form-field select,
.form-field textarea {
    width: 100%;
    padding: var(--space-3) var(--space-4);
    background: var(--white);
    border: 2px solid var(--border-strong);
    border-radius: var(--r-md);
    min-height: 48px;
    font-size: var(--fs-base);
}

.form-field textarea {
    min-height: 140px;
    resize: vertical;
}

.form-field input:focus-visible,
.form-field select:focus-visible,
.form-field textarea:focus-visible {
    border-color: var(--forest-700);
    outline: 3px solid var(--focus);
    outline-offset: 1px;
}

.form-help {
    font-size: var(--fs-xs);
    color: var(--ink-muted);
    margin-top: var(--space-2);
}

.field-row {
    display: grid;
    gap: var(--space-4);
}

@media (min-width: 640px) {
    .field-row {
        grid-template-columns: 1fr 1fr;
    }
}

.stepper {
    display: flex;
    gap: var(--space-2);
    margin-bottom: var(--space-6);
    list-style: none;
    padding: 0;
    font-size: var(--fs-xs);
}

.stepper li {
    flex: 1;
    padding: var(--space-3);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-sm);
    text-align: center;
    color: var(--ink-muted);
}

.stepper li[aria-current="step"] {
    background: var(--forest-700);
    color: var(--white);
    border-color: var(--forest-700);
    font-weight: 600;
}

/* --- Events ------------------------------------------------------------------ */

.event-list {
    display: grid;
    gap: var(--space-4);
}

.event {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: var(--space-5);
    padding: var(--space-5);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    align-items: center;
}

.event-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-width: 72px;
    padding: var(--space-3);
    background: var(--forest-100);
    border-radius: var(--r-md);
    text-align: center;
    color: var(--forest-900);
}

.event-date .d {
    font-family: var(--font-serif);
    font-size: var(--fs-2xl);
    font-weight: 700;
    line-height: 1;
}

.event-date .m {
    font-size: var(--fs-xs);
    text-transform: uppercase;
    font-weight: 600;
    letter-spacing: .1em;
    margin-top: 4px;
}

.event h3 {
    font-size: var(--fs-md);
    margin-bottom: var(--space-1);
}

.event p {
    margin: 0;
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

/* --- Articles grid ----------------------------------------------------------- */

.article-grid {
    display: grid;
    gap: var(--space-5);
}

@media (min-width: 640px) { .article-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 980px) { .article-grid { grid-template-columns: repeat(3, 1fr); } }

.article-card {
    display: flex;
    flex-direction: column;
    background: var(--white);
    border-radius: var(--r-lg);
    overflow: hidden;
    border: 1px solid var(--border);
    text-decoration: none;
    color: var(--ink);
    transition: transform .2s ease, box-shadow .2s ease;
}

.article-card:hover {
    transform: translateY(-4px);
    box-shadow: var(--shadow-md);
    color: var(--ink);
}

.article-cover {
    aspect-ratio: 16 / 10;
    background: linear-gradient(135deg, var(--forest-500), var(--forest-900));
    display: grid;
    place-items: center;
    color: var(--cream);
    font-size: 2.5rem;
}

.article-card .body {
    padding: var(--space-5);
}

.article-card .tag {
    font-size: var(--fs-xs);
    text-transform: uppercase;
    font-weight: 600;
    color: var(--terracotta);
    letter-spacing: .1em;
}

.article-card h3 {
    font-size: var(--fs-lg);
    margin: var(--space-2) 0;
}

.article-card .meta {
    font-size: var(--fs-xs);
    color: var(--ink-muted);
}

/* --- Partners ---------------------------------------------------------------- */

.partners {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-5);
    justify-content: center;
    align-items: center;
}

.partner {
    padding: var(--space-4) var(--space-5);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    font-weight: 600;
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

/* --- About hero + timeline --------------------------------------------------- */

.about-hero {
    display: grid;
    gap: var(--space-6);
    align-items: center;
}

@media (min-width: 900px) {
    .about-hero {
        grid-template-columns: 1fr 1.2fr;
    }
}

.about-photo {
    aspect-ratio: 1;
    border-radius: var(--r-xl);
    background: linear-gradient(135deg, var(--forest-700), var(--forest-500));
    box-shadow: var(--shadow-lg);
    display: grid;
    place-items: center;
    color: var(--cream);
    font-size: 5rem;
}

.timeline {
    margin: var(--space-7) 0;
    border-left: 2px solid var(--forest-500);
    padding-left: var(--space-5);
}

.timeline li {
    list-style: none;
    margin-bottom: var(--space-5);
    position: relative;
}

.timeline li::before {
    content: "";
    position: absolute;
    left: -30px;
    top: 8px;
    width: 14px;
    height: 14px;
    background: var(--forest-700);
    border-radius: 50%;
    border: 3px solid var(--cream);
}

.timeline .year {
    font-family: var(--font-serif);
    font-weight: 700;
    color: var(--terracotta);
    font-size: var(--fs-md);
    display: block;
    margin-bottom: var(--space-1);
}

/* --- Two-col content (générique) -------------------------------------------- */

.cols-2 {
    display: grid;
    gap: var(--space-6);
}

@media (min-width: 800px) {
    .cols-2 {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* --- Details / FAQ accordion ------------------------------------------------- */

details {
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    padding: var(--space-4) var(--space-5);
    margin-bottom: var(--space-3);
}

details[open] {
    border-color: var(--forest-500);
}

details summary {
    font-weight: 600;
    font-size: var(--fs-md);
    cursor: pointer;
    color: var(--forest-900);
    list-style: none;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

details summary::-webkit-details-marker {
    display: none;
}

details summary::after {
    content: "+";
    font-size: 1.5rem;
    font-family: var(--font-serif);
    transition: transform .2s ease;
}

details[open] summary::after {
    transform: rotate(45deg);
}

details p {
    margin-top: var(--space-3);
    margin-bottom: 0;
    color: var(--ink-2);
}

/* --- Feature list ------------------------------------------------------------ */

.feature-list {
    list-style: none;
    padding: 0;
    margin: 0 0 var(--space-5);
}

.feature-list li {
    padding: var(--space-3) 0 var(--space-3) var(--space-6);
    position: relative;
    border-bottom: 1px solid var(--border);
}

.feature-list li::before {
    content: "✓";
    position: absolute;
    left: 0;
    top: var(--space-3);
    width: 24px;
    height: 24px;
    background: var(--forest-100);
    color: var(--forest-700);
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-size: 0.75rem;
    font-weight: 700;
}

/* --- Pages services (sous-pages enfants de /services) ------------------------ */

/* Hero d'une sous-page service : lead + image optionnelle */

.service-hero {
    padding: var(--space-6) 0;
}

.service-hero-grid {
    display: grid;
    gap: var(--space-6);
    align-items: start;
}

@media (min-width: 900px) {
    .service-hero-grid {
        grid-template-columns: 1.2fr 1fr;
        gap: var(--space-7);
    }

    /* Un seul bloc (texte OU image) → pleine largeur, pas de colonne vide. */
    .service-hero-grid.is-single {
        grid-template-columns: 1fr;
    }
}

.service-hero .lead {
    font-size: var(--fs-lg);
    color: var(--ink-2);
    line-height: 1.55;
}

.service-hero-visual img {
    width: 100%;
    height: auto;
    border-radius: var(--r-lg);
    display: block;
}

/* Références « Ils nous ont fait confiance » (Repeater jmp_service_references) */

.service-references {
    padding: var(--space-6) 0;
}

.reference-list {
    list-style: none;
    margin: var(--space-6) 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
}

.reference-card {
    display: grid;
    gap: var(--space-5);
    /* Centrage vertical : le bloc texte (souvent plus court) est centré sur la
       hauteur de la colonne image, et inversement. */
    align-items: center;
    color: inherit;
}

@media (min-width: 800px) {
    .reference-card {
        grid-template-columns: minmax(0, 480px) 1fr;
        gap: var(--space-7);
    }

    /* Alternance : items impairs → photo à droite, texte à gauche. */
    .reference-item.is-reversed .reference-card {
        grid-template-columns: 1fr minmax(0, 480px);
    }
    .reference-item.is-reversed .reference-photo {
        order: 2;
    }
}

.reference-photo {
    margin: 0;
    min-width: 0; /* évite le débordement de la grille */
}

/* Ratio natif préservé (ni portrait ni paysage recadrés). */
.reference-photo img {
    width: 100%;
    height: auto;
    border-radius: var(--r-lg);
    display: block;
}

.reference-body {
    font-size: var(--fs-md);
    color: var(--ink-2);
    line-height: 1.6;
}

.reference-title {
    font-size: var(--fs-lg);
    margin: 0 0 var(--space-2);
    line-height: 1.3;
}

.reference-title a {
    color: inherit;
    text-decoration: none;
}

.reference-title a:hover,
.reference-title a:focus-visible {
    text-decoration: underline;
}

.reference-body p {
    margin: 0 0 var(--space-2);
}

.reference-body p:last-child {
    margin-bottom: 0;
}

/* Affordance de lien — utilisée quand il y a un lien mais pas de titre. */
.reference-link {
    display: inline-block;
    margin-top: var(--space-3);
    font-weight: 600;
    color: var(--terracotta);
    text-decoration: none;
}

.reference-link:hover,
.reference-link:focus-visible {
    text-decoration: underline;
}

/* --- Carrousel (item avec plusieurs photos) --- */

.reference-carousel {
    position: relative;
}

/* Piste scrollable. Sans JS : scroll horizontal natif au doigt/trackpad.
   scroll-snap pour caler chaque photo.

   Hauteur FIGÉE : le carrousel garde une hauteur stable (ne « saute » pas
   entre une slide portrait et une slide paysage). Chaque image est ensuite
   centrée verticalement dans cette zone (letterbox), cf. .carousel-slide img.
   La hauteur suit la largeur de la colonne (≈480px) sur un format portrait
   confortable, bornée pour ne pas exploser sur petit écran. */
.carousel-track {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    gap: var(--space-3);
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    -webkit-overflow-scrolling: touch;
    border-radius: var(--r-lg);
    height: min(90vw, 540px);
}

/* Masque la scrollbar quand le JS prend le relais (flèches + points). */
.reference-carousel.is-enhanced .carousel-track {
    scrollbar-width: none;
}
.reference-carousel.is-enhanced .carousel-track::-webkit-scrollbar {
    display: none;
}

.carousel-slide {
    flex: 0 0 100%;
    scroll-snap-align: center;
    min-width: 0;
    /* Centre l'image dans la hauteur figée du track (letterbox vertical). */
    display: flex;
    align-items: center;
    justify-content: center;
}

/* L'image tient entièrement dans la zone (contain) et est centrée. Une image
   paysage laisse un espace neutre au-dessus/dessous au lieu d'être collée en
   haut ; un portrait remplit la hauteur. Pas de recadrage. */
.carousel-slide img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    border-radius: var(--r-lg);
    display: block;
}

/* Flèches prev/next (injectées par JS, donc absentes sans JS). */
.carousel-btn {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 50%;
    background: var(--cream);
    color: var(--ink);
    box-shadow: var(--shadow-md, 0 2px 8px rgba(0, 0, 0, .18));
    cursor: pointer;
    font-size: 1.25rem;
    line-height: 1;
}

.carousel-btn:hover {
    background: var(--white, #fff);
}

/* En début / fin de carrousel, la flèche inutile est masquée (plutôt
   qu'estompée) — évite un état grisé sous le seuil de contraste AAA. */
.carousel-btn[disabled] {
    visibility: hidden;
}

.carousel-btn--prev { left: var(--space-2); }
.carousel-btn--next { right: var(--space-2); }

/* Points indicateurs (injectés par JS). */
.carousel-dots {
    list-style: none;
    margin: var(--space-3) 0 0;
    padding: 0;
    display: flex;
    justify-content: center;
    gap: var(--space-2);
}

.carousel-dots button {
    width: 12px;
    height: 12px;
    padding: 0;
    border: 2px solid var(--terracotta);
    border-radius: 50%;
    background: transparent;
    cursor: pointer;
}

.carousel-dots button[aria-current="true"] {
    background: var(--terracotta);
}

@media (prefers-reduced-motion: reduce) {
    .carousel-track {
        scroll-behavior: auto;
    }
}

/* Formats / thématiques (Repeater jmp_service_formats) */

.service-formats {
    padding: var(--space-6) 0;
}

.format-list {
    display: grid;
    gap: var(--space-5);
    list-style: none;
    padding: 0;
    margin: 0;
}

@media (min-width: 800px) {
    .format-list {
        grid-template-columns: repeat(2, 1fr);
    }
}

.format-item {
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    padding: var(--space-5) var(--space-5) var(--space-4);
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
}

.format-item h3 {
    margin: 0;
    color: var(--forest-900);
    font-family: var(--font-serif);
    font-size: var(--fs-lg);
}

.format-meta {
    margin: 0;
    color: var(--ink-muted);
    font-size: var(--fs-sm);
    font-weight: 500;
}

.format-description {
    color: var(--ink-2);
    font-size: var(--fs-sm);
}

.format-description p {
    margin: 0 0 var(--space-2);
}

.format-description p:last-child {
    margin-bottom: 0;
}

.format-tags {
    list-style: none;
    margin: var(--space-1) 0 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
}

.format-tag {
    background: var(--cream-2);
    color: var(--forest-900);
    padding: 4px var(--space-3);
    border-radius: 999px;
    font-size: var(--fs-xs);
    font-weight: 500;
}

/* Section publics : surcharge padding (le visuel vient des classes audiences) */

.service-publics {
    padding: var(--space-6) 0;
}

/* FAQ : details/summary natifs accessibles */

.service-faq {
    padding: var(--space-6) 0;
}

.faq-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
}

.faq-item {
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    overflow: hidden;
}

.faq-item summary {
    cursor: pointer;
    padding: var(--space-4) var(--space-5);
    font-weight: 600;
    color: var(--forest-900);
    list-style: none;
    position: relative;
    padding-right: var(--space-7);
}

.faq-item summary::-webkit-details-marker {
    display: none;
}

.faq-item summary::after {
    content: "+";
    position: absolute;
    right: var(--space-5);
    top: 50%;
    transform: translateY(-50%);
    font-size: 1.5rem;
    color: var(--forest-700);
    font-weight: 400;
    line-height: 1;
    transition: transform .2s ease;
}

.faq-item[open] summary::after {
    content: "−";
}

.faq-item summary:focus-visible {
    outline: 3px solid var(--focus);
    outline-offset: -3px;
}

.faq-answer {
    padding: var(--space-4) var(--space-5) var(--space-5);
    color: var(--ink-2);
    font-size: var(--fs-base);
    border-top: 1px solid var(--border);
}

.faq-answer p {
    margin: 0 0 var(--space-3);
}

.faq-answer p:last-child {
    margin-bottom: 0;
}

/* --- Archives agenda + category (J4b) ---------------------------------------- */

.page-header-desc {
    color: var(--ink-2);
    margin-top: var(--space-3);
}

.page-header-desc p {
    margin: 0 0 var(--space-2);
}

.page-header-desc p:last-child {
    margin-bottom: 0;
}

/* Event card link — étend .event de J2 en cliquable */

a.event {
    text-decoration: none;
    color: var(--ink);
    transition: transform .15s ease, box-shadow .2s ease, border-color .2s ease;
}

a.event:hover,
a.event:focus-visible {
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
    border-color: var(--forest-700);
}

.event-body h3 {
    color: var(--forest-900);
}

.event-meta {
    margin: 4px 0 0 !important;
    font-size: var(--fs-sm);
    color: var(--ink-muted);
}

.event-excerpt {
    margin: var(--space-2) 0 0 !important;
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

/* Pagination WP standard */

.pagination {
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin: var(--space-6) 0 0;
}

.pagination .page-numbers {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 44px;
    min-height: 44px;
    padding: 0 var(--space-3);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    color: var(--ink);
    text-decoration: none;
    font-weight: 600;
    transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

.pagination .page-numbers:hover,
.pagination .page-numbers:focus-visible {
    background: var(--forest-100);
    border-color: var(--forest-700);
    color: var(--forest-900);
}

.pagination .page-numbers.current {
    background: var(--forest-700);
    color: var(--white);
    border-color: var(--forest-700);
}

.pagination .page-numbers.dots {
    background: transparent;
    border: none;
}

/* Filtres taxos en bas de l'archive agenda */

.agenda-filters {
    padding: var(--space-6) 0;
    background: var(--cream-2);
}

.taxo-filter + .taxo-filter {
    margin-top: var(--space-5);
}

.taxo-filter h3 {
    margin: 0 0 var(--space-3);
    font-family: var(--font-sans);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
}

.taxo-chips {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
}

.taxo-chip {
    display: inline-block;
    padding: var(--space-2) var(--space-4);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: 999px;
    color: var(--forest-900);
    text-decoration: none;
    font-size: var(--fs-sm);
    font-weight: 500;
    transition: background-color .2s ease, border-color .2s ease;
}

.taxo-chip:hover,
.taxo-chip:focus-visible {
    background: var(--forest-100);
    border-color: var(--forest-700);
}

/* Liens & messages utilitaires de l'agenda */

.agenda-empty {
    text-align: center;
    padding: var(--space-7) var(--space-5);
    background: var(--cream-2);
    border-radius: var(--r-lg);
    color: var(--ink-2);
    font-size: var(--fs-md);
}

.agenda-back {
    margin: var(--space-6) 0 0;
    text-align: center;
}

/* Cover image quand l'article a une featured image */

.article-cover--has-image {
    aspect-ratio: 16 / 10;
    background: var(--cream-2);
    overflow: hidden;
}

.article-cover--has-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* --- Page Livre (J4c) -------------------------------------------------------- */

.livre-hero {
    padding: var(--space-6) 0;
}

/* Le livre est le sujet de la page : un peu plus grand qu'en home (260px). */
.livre-hero .book-3d {
    max-width: 300px;
}

.livre-hero-body {
    color: var(--cream);
}

.livre-sous-titre {
    font-size: var(--fs-lg);
    color: rgba(247, 243, 236, 0.9);
    margin-bottom: var(--space-5);
}

.livre-cta-note {
    font-size: var(--fs-xs);
    color: rgba(247, 243, 236, 0.7);
    margin-top: var(--space-3);
}

.livre-synopsis {
    padding: var(--space-7) 0;
}

.livre-meta {
    padding: var(--space-6) 0;
    background: var(--cream-2);
}

.livre-meta-list {
    margin: 0;
    display: grid;
    gap: var(--space-3);
}

@media (min-width: 640px) {
    .livre-meta-list { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 960px) {
    .livre-meta-list { grid-template-columns: repeat(3, 1fr); }
}

.livre-meta-row {
    background: var(--white);
    border-radius: var(--r-md);
    padding: var(--space-4) var(--space-5);
    border-left: 3px solid var(--forest-700);
}

.livre-meta-row dt {
    margin: 0 0 4px;
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
    font-weight: 600;
}

.livre-meta-row dd {
    margin: 0;
    color: var(--forest-900);
    font-weight: 600;
}

.livre-extraits {
    padding: var(--space-6) 0;
}

.livre-extraits-list {
    display: grid;
    gap: var(--space-5);
}

.livre-extrait {
    margin: 0;
    padding: var(--space-5);
    background: var(--white);
    border: 1px solid var(--border);
    border-left: 4px solid var(--terracotta);
    border-radius: var(--r-lg);
}

.livre-extrait-chapitre {
    margin: 0 0 var(--space-3);
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
    font-weight: 600;
}

.livre-extrait-texte {
    margin: 0;
    padding: 0;
    font-family: var(--font-serif);
    font-style: italic;
    color: var(--ink);
    font-size: var(--fs-lg);
    line-height: 1.55;
    border: none;
}

.livre-extrait-texte p {
    margin: 0 0 var(--space-3);
}

.livre-extrait-texte p:last-child {
    margin-bottom: 0;
}

/* --- Page On en parle (J4c) -------------------------------------------------- */

.oep-articles,
.oep-agenda,
.oep-presse {
    padding: var(--space-7) 0;
}

.oep-articles { background: var(--cream); }
.oep-agenda   { background: var(--white); }
.oep-presse   { background: var(--cream-2); }

.oep-agenda-link {
    margin: var(--space-5) 0 0;
    text-align: center;
}

.presse-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    gap: var(--space-4);
}

.presse-item {
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    padding: var(--space-5);
}

.presse-meta {
    margin: 0 0 var(--space-2);
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
}

.presse-media {
    font-weight: 600;
    color: var(--terracotta);
}

.presse-titre {
    margin: 0 0 var(--space-2);
    font-size: var(--fs-lg);
}

.presse-titre a {
    color: var(--forest-900);
    text-decoration: none;
}

.presse-titre a:hover,
.presse-titre a:focus-visible {
    text-decoration: underline;
}

.presse-extrait {
    margin: var(--space-2) 0 0;
    color: var(--ink-2);
    font-style: italic;
    font-size: var(--fs-sm);
}

/* --- Page Contact (J4c) ------------------------------------------------------ */

.contact-layout {
    padding: var(--space-7) 0;
}

.contact-grid {
    display: grid;
    gap: var(--space-6);
}

@media (min-width: 960px) {
    .contact-grid {
        grid-template-columns: 1.6fr 1fr;
        gap: var(--space-7);
    }
}

/* Devis form placeholder */

.devis-form {
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    padding: var(--space-5);
    display: grid;
    gap: var(--space-5);
}

.devis-placeholder-note {
    margin: 0 0 var(--space-3);
    padding: var(--space-4);
    background: var(--cream-2);
    border-radius: var(--r-md);
    color: var(--ink-2);
    font-size: var(--fs-sm);
}

.devis-placeholder-note strong {
    color: var(--forest-900);
    display: block;
    margin-bottom: 4px;
}

.devis-step {
    margin: 0;
    border: none;
    padding: 0;
    display: grid;
    gap: var(--space-3);
}

.devis-step legend {
    font-family: var(--font-serif);
    font-size: var(--fs-lg);
    font-weight: 600;
    color: var(--forest-900);
    display: flex;
    align-items: center;
    gap: var(--space-3);
    margin-bottom: var(--space-2);
    padding: 0;
}

.devis-step-num {
    display: inline-grid;
    place-items: center;
    width: 32px;
    height: 32px;
    background: var(--forest-100);
    color: var(--forest-900);
    border-radius: 50%;
    font-size: var(--fs-sm);
    font-weight: 700;
    flex-shrink: 0;
}

.devis-field {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.devis-field label {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
}

.devis-field input,
.devis-field select,
.devis-field textarea {
    padding: var(--space-3);
    border: 1px solid var(--border-strong);
    border-radius: var(--r-md);
    font-family: inherit;
    font-size: var(--fs-base);
    background: var(--white);
    color: var(--ink);
    min-height: 48px;
}

.devis-field textarea {
    min-height: 120px;
    resize: vertical;
}

.devis-field input:disabled,
.devis-field select:disabled,
.devis-field textarea:disabled {
    background: var(--cream-2);
    color: var(--ink-muted);
    cursor: not-allowed;
}

.devis-field-row {
    display: grid;
    gap: var(--space-3);
}

@media (min-width: 600px) {
    .devis-field-row { grid-template-columns: repeat(2, 1fr); }
}

.devis-submit {
    margin: 0;
}

.devis-submit button {
    width: 100%;
}

/* Champ caché (cf. inc/form-devis.php) */
.devis-extra {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

/* Consentement RGPD */
.devis-consent {
    margin: var(--space-3) 0 var(--space-4);
}

.devis-consent label {
    display: flex;
    align-items: flex-start;
    gap: var(--space-2);
    font-size: 0.95rem;
    line-height: 1.5;
    cursor: pointer;
}

.devis-consent input[type="checkbox"] {
    appearance: none;
    -webkit-appearance: none;
    width: 1.25rem;
    height: 1.25rem;
    margin: 0.15em 0 0;
    flex-shrink: 0;
    display: grid;
    place-content: center;
    background: var(--white);
    border: 2px solid var(--border-strong);
    border-radius: 4px;
    cursor: pointer;
    transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
}

.devis-consent input[type="checkbox"]:hover {
    border-color: var(--rose-700);
}

.devis-consent input[type="checkbox"]:focus-visible {
    outline: 3px solid var(--focus);
    outline-offset: 2px;
}

.devis-consent input[type="checkbox"]:checked {
    background: var(--rose-700);
    border-color: var(--rose-700);
}

/* Coche dessinée en CSS (pas de SVG) — coin inférieur-droit d'un carré tourné à 45°. */
.devis-consent input[type="checkbox"]:checked::after {
    content: "";
    width: 0.4rem;
    height: 0.7rem;
    border: solid var(--white);
    border-width: 0 2px 2px 0;
    transform: translateY(-1px) rotate(45deg);
}

@media (prefers-reduced-motion: reduce) {
    .devis-consent input[type="checkbox"] { transition: none; }
}

/* Messages de retour après soumission (success / error) */
.devis-feedback {
    margin: 0 0 var(--space-4);
    padding: var(--space-3) var(--space-4);
    border-radius: var(--r-md);
    border-left: 4px solid;
    font-size: 0.95rem;
}

.devis-feedback--success {
    background: var(--cream-2);
    border-left-color: var(--green-deep, #1A4D3E);
    color: var(--dark);
}

.devis-feedback--partial {
    background: #fef7e6;
    border-left-color: #b45309;
    color: #78350f;
}

.devis-feedback--error {
    background: #fdf2f2;
    border-left-color: #b91c1c;
    color: #7f1d1d;
}

/* Coordonnées aside */

.contact-aside {
    align-self: start;
}

.contact-coords {
    background: var(--cream-2);
    border-radius: var(--r-lg);
    padding: var(--space-5);
}

.contact-coords h2 {
    margin: 0 0 var(--space-4);
    font-size: var(--fs-lg);
}

.contact-coords-list {
    margin: 0 0 var(--space-5);
}

.contact-coords-row {
    margin-bottom: var(--space-3);
}

.contact-coords-row dt {
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
    font-weight: 600;
    margin-bottom: 2px;
}

.contact-coords-row dd {
    margin: 0;
    color: var(--forest-900);
}

.contact-coords-row dd a {
    color: var(--terracotta);
    font-weight: 600;
}

.contact-socials h3 {
    margin: 0 0 var(--space-2);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
}

.contact-socials ul {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
}

/* Réseaux en pills : icône colorée + label, fond doux qui s'inverse au hover.
   Format compact qui marche autant pour 2 réseaux (Insta + LinkedIn) que pour
   une liste plus large (page Contact agrège principaux + secondaires). */
.contact-socials a {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-4);
    background: var(--cream-2);
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--forest-900);
    font-weight: 500;
    text-decoration: none;
    transition: background-color .2s ease, color .2s ease, border-color .2s ease, transform .15s ease;
}

.contact-socials-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--forest-700);
    transition: color .2s ease;
}

.contact-socials a:hover,
.contact-socials a:focus-visible {
    background: var(--forest-700);
    color: var(--white);
    text-decoration: none;
    transform: translateY(-1px);
}

.contact-socials a:hover .contact-socials-icon,
.contact-socials a:focus-visible .contact-socials-icon {
    color: var(--white);
}

.contact-rgpd {
    margin-top: var(--space-5);
    padding: var(--space-4);
    background: var(--cream-2);
    border-radius: var(--r-md);
}

.contact-rgpd h3 {
    margin: 0 0 var(--space-2);
    font-size: var(--fs-sm);
    color: var(--forest-900);
}

.contact-rgpd-text {
    font-size: var(--fs-xs);
    color: var(--ink-muted);
    line-height: 1.6;
}

.contact-rgpd-text p {
    margin: 0 0 var(--space-2);
}

.contact-rgpd-text p:last-child {
    margin-bottom: 0;
}

/* --- Pages légales (J6a) ----------------------------------------------------- */

.legal-content {
    padding: var(--space-7) 0;
}

.legal-content h2 {
    margin-top: var(--space-6);
    margin-bottom: var(--space-3);
    font-size: var(--fs-xl);
}

.legal-content h2:first-of-type {
    margin-top: 0;
}

.legal-content p {
    margin: 0 0 var(--space-3);
    line-height: 1.7;
}

.legal-content ul {
    margin: 0 0 var(--space-3) 0;
    padding-left: var(--space-5);
    line-height: 1.7;
}

.legal-content ul li {
    margin-bottom: var(--space-2);
}

.legal-content a:focus-visible {
    outline: 3px solid var(--focus);
    outline-offset: 2px;
    border-radius: 2px;
}

/* --- Page 404 (J6b) ---------------------------------------------------------- */

.error-404 {
    padding: var(--space-8) 0;
    text-align: center;
}

.error-404-code {
    font-family: var(--font-display);
    font-size: clamp(5rem, 12vw, 9rem);
    line-height: 1;
    margin: 0 0 var(--space-3);
    color: var(--rose-700);
    opacity: 0.85;
}

.error-404 h1 {
    margin: 0 0 var(--space-4);
    font-size: var(--fs-2xl);
}

.error-404-message {
    max-width: 560px;
    margin: 0 auto var(--space-5);
    color: var(--ink-2);
    line-height: 1.7;
}

.error-404-message p {
    margin: 0 0 var(--space-2);
}

.error-404-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    justify-content: center;
}

/* --- Singles (J4d) ----------------------------------------------------------- */

.single-meta {
    color: var(--ink-muted);
    font-size: var(--fs-sm);
    margin-top: var(--space-3);
}

.single-author {
    font-weight: 500;
}

/* Cover image article single (entre page-header et content) */

.single-cover {
    margin: 0;
    padding: var(--space-5) 0 var(--space-6);
}

.single-cover img {
    width: 100%;
    max-height: 540px;
    height: auto;
    object-fit: cover;
    border-radius: var(--r-lg);
    display: block;
}

/* Sidebar articles liés (cards compactes) */

.sidebar-related {
    display: grid;
    gap: var(--space-3);
    margin-bottom: var(--space-6);
}

.sidebar-related .article-card {
    box-shadow: none;
}

.sidebar-related .article-card:hover {
    transform: none;
    box-shadow: var(--shadow-sm);
}

.sidebar-related .article-cover {
    aspect-ratio: 16 / 10;
    font-size: 1.5rem;
}

.sidebar-related .article-card .body {
    padding: var(--space-4);
}

.sidebar-related .article-card h3 {
    font-size: var(--fs-md);
    margin: var(--space-1) 0 var(--space-2);
}

.sidebar-related .article-card .meta {
    margin: 0;
}

/* Sidebar CTA card */

.sidebar-cta {
    background: var(--forest-100);
    border-radius: var(--r-lg);
    padding: var(--space-5);
    text-align: center;
}

.sidebar-cta h3 {
    margin: 0 0 var(--space-2);
    color: var(--forest-900);
}

.sidebar-cta p {
    margin: 0 0 var(--space-3);
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

.sidebar-cta .btn {
    width: 100%;
}

/* Event single — sidebar event-aside */

.event-header-meta {
    font-size: var(--fs-md);
    color: var(--ink-2);
}

.event-header-date {
    color: var(--forest-900);
    font-weight: 600;
}

.event-aside {
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    padding: var(--space-5);
    display: grid;
    gap: var(--space-4);
}

.event-aside-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: var(--space-4) var(--space-5);
    background: var(--forest-100);
    color: var(--forest-900);
    border-radius: var(--r-md);
}

.event-aside-date .d {
    font-family: var(--font-serif);
    font-size: var(--fs-3xl);
    font-weight: 700;
    line-height: 1;
}

.event-aside-date .m {
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .1em;
    font-weight: 600;
    margin-top: 6px;
}

.event-aside-list {
    margin: 0;
    display: grid;
    gap: var(--space-3);
}

.event-aside-row {
    margin: 0;
}

.event-aside-row dt {
    font-size: var(--fs-xs);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink-muted);
    font-weight: 600;
    margin-bottom: 2px;
}

.event-aside-row dd {
    margin: 0;
    color: var(--ink);
    font-size: var(--fs-sm);
    line-height: 1.5;
}

.event-aside-cta {
    width: 100%;
}

/* Boutons dans une sidebar étroite (~280px) : autoriser le wrap du libellé
   pour éviter l'overflow horizontal (la classe .btn globale a white-space:nowrap). */
.sidebar .btn {
    white-space: normal;
    line-height: 1.3;
    height: auto;
    text-align: center;
}

/* Défense en profondeur pour les cards sidebar : forcer le wrap des mots trop
   longs (URL collée, nom de structure sans espace, etc.) */
.event-aside,
.sidebar-cta,
.event-aside-row dd {
    overflow-wrap: anywhere;
}

/* --- Gutenberg blocs core + patterns starter -------------------------------- */

/* Classes utilitaires de couleur de fond compatibles palette theme.json.
   Nécessaires car `wp_enqueue_global_styles` est dequeueé en J7b — sans ça
   les `backgroundColor` posés par Gutenberg/patterns sont morts côté front. */
.has-rose-100-background-color  { background-color: var(--rose-100); }
.has-rose-700-background-color  { background-color: var(--rose-700); }
.has-green-100-background-color { background-color: var(--green-100); }
.has-green-700-background-color { background-color: var(--green-700); }
.has-cream-background-color     { background-color: var(--cream); }
.has-cream-2-background-color   { background-color: var(--cream-2); }
.has-white-background-color     { background-color: var(--white); }

/* Bloc Quote standard (core/quote) — bordure rose Romane, serif italique,
   guillemet typographique en accent décoratif. */
.wp-block-quote {
    position: relative;
    margin: var(--space-6) 0;
    padding: var(--space-2) 0 var(--space-2) var(--space-7);
    border-left: 3px solid var(--rose-700);
    background: transparent;
    font-family: var(--font-serif);
    font-style: italic;
    font-size: var(--fs-md);
    line-height: 1.55;
    color: var(--ink);
}

.wp-block-quote::before {
    content: "\201C";
    position: absolute;
    left: var(--space-3);
    top: -.25rem;
    color: var(--rose-700);
    font-family: var(--font-serif);
    font-style: normal;
    font-size: 3rem;
    font-weight: 600;
    line-height: 1;
}

.wp-block-quote p {
    margin: 0 0 var(--space-3);
}

.wp-block-quote p:last-child {
    margin-bottom: 0;
}

.wp-block-quote cite {
    display: block;
    margin-top: var(--space-3);
    font-family: var(--font-sans);
    font-style: normal;
    font-size: var(--fs-xs);
    color: var(--ink-muted);
    text-transform: uppercase;
    letter-spacing: .08em;
    font-weight: 600;
}

/* Pattern « Éclairage Romane » — encart avis perso, fond rose pâle aéré.
   On masque le guillemet décoratif : le fond suffit comme accent visuel. */
.wp-block-quote.jmp-eclairage-romane {
    border-left: none;
    background: var(--rose-100);
    border-radius: var(--r-lg);
    padding: var(--space-5) var(--space-6);
}

.wp-block-quote.jmp-eclairage-romane::before {
    content: none;
}

/* Pattern « Citation témoignage » — accent vert (voix externe vs rose Romane) */
.wp-block-quote.jmp-citation-temoignage {
    border-left-color: var(--green-700);
}

.wp-block-quote.jmp-citation-temoignage::before {
    color: var(--green-700);
}

/* Pattern « Définition encadrée » — fond crème géré via has-cream-2-background-color
   (palette theme.json). On ajoute juste la cohérence interne du Group. */
.jmp-definition > :first-child {
    margin-top: 0;
}

.jmp-definition > :last-child {
    margin-bottom: 0;
}

/* Pattern « Image légendée » — figure aérée + caption serif italique centré */
.wp-block-image.jmp-image-legendee {
    margin: var(--space-6) 0;
}

.wp-block-image.jmp-image-legendee img {
    max-width: 100%;
    height: auto;
    border-radius: var(--r-md);
}

.wp-block-image.jmp-image-legendee figcaption,
.wp-block-image.jmp-image-legendee .wp-element-caption {
    margin-top: var(--space-2);
    text-align: center;
    font-family: var(--font-serif);
    font-style: italic;
    font-size: var(--fs-sm);
    color: var(--ink-muted);
}

/* Pattern « Séparateur décoratif » — 3 points rose au lieu d'une ligne pleine */
.wp-block-separator.is-style-decorative {
    border: none;
    height: auto;
    margin: var(--space-7) auto;
    text-align: center;
    background: transparent;
    color: var(--rose-500);
}

.wp-block-separator.is-style-decorative::before {
    content: "• • •";
    display: block;
    font-size: 1.5rem;
    letter-spacing: .5em;
    line-height: 1;
}

/* Embed YouTube — <lite-youtube> gère son propre aspect-ratio 16:9 via ::after.
   Neutraliser le ::before natif WP (padding-top: 56.25%) qui ferait doublon
   et créerait un grand vide vertical avant la vidéo.
   Spécificité bumpée à 4 classes pour battre les règles WP du bloc embed. */
.wp-embed-responsive .wp-block-embed.is-provider-youtube .wp-block-embed__wrapper::before {
    content: none;
}

/* Pattern « Carte Instagram » — fond géré via has-rose-100-background-color.
   On ajoute hover discret + cohérence interne. */
.jmp-instagram-card > :first-child {
    margin-top: 0;
}

.jmp-instagram-card > :last-child {
    margin-bottom: 0;
}

.jmp-instagram-card .wp-block-image img {
    max-width: 100%;
    height: auto;
    border-radius: var(--r-md);
}

.jmp-instagram-card a {
    font-weight: 600;
}
