/*
 * custom.css — CSS ajouté de l'espace client (/app) et de la vitrine (/).
 *
 * Les feuilles app.css, marius.css et posts.css sont des copies de la maquette validée
 * (webroot/theme_app/) : on n'y écrit pas. Tout style supplémentaire va ici, jamais dans les vues.
 * Chaque lot ajoute ses règles dans sa propre section délimitée, sans toucher aux autres :
 *
 *   / * === Lot Lxx — objet === * /
 *   …
 *   / * === Fin Lot Lxx === * /
 *
 * Lot L40N (vague 8) : l'espace client est rendu par React + Inertia (resources/css/), qui ne charge pas cette feuille.
 * Les règles de l'ancien front dont aucune classe n'apparaît plus dans un gabarit, le PHP ou un script ont été
 * retirées (relevé : docs/rapports/L40N.md) ; restent celles des pages CakePHP qui chargent encore custom.css (vitrine,
 * pages d'erreur, rapport partagé, éléments des rapports et de l'aide) et la section « rapport PDF » de L30.
 */

/* === Lot L06 — socle (pages provisoires, pages d'erreur, contexte) === */
/* === Fin Lot L06 === */

/* === Lot L09 — kit UI de l'espace client (layouts app / auth, éléments, graphiques, cartes, guide) === */

.content:focus {
    outline: none;
}

/* Texte réservé aux lecteurs d'écran. */
.visuellement-masque {
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Focus visible (WCAG 2.4.7) sur les contrôles de la maquette. */
.app a:focus-visible,
.app button:focus-visible,
.app input:focus-visible,
.app select:focus-visible,
.app textarea:focus-visible,
.app [tabindex]:focus-visible,
.auth-body a:focus-visible,
.auth-body button:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

/* Avatar d'un utilisateur sans photo (dégradé de la maquette). */
span.avatar {
    background: linear-gradient(135deg, #2563eb, #4f86ff);
}

img.avatar {
    background: var(--bg-soft);
}

/* Formulaires POST du layout (déconnexion) : sans effet sur la mise en page de la maquette. */
.account > form,
.menu-list > form {
    display: contents;
}

.menu-list > form .menu-item {
    width: 100%;
    border: 0;
    background: none;
    font: inherit;
    text-align: left;
    cursor: pointer;
}

/* Menu compte (menu-hover) refermé au clavier (Échap) tant que le focus reste dedans. */
.menu-hover.ferme > .dropdown {
    opacity: 0;
    visibility: hidden;
    transform: translateY(-6px);
}

/* Carte stat : suffixe « /100 » (remplace le style inline de la maquette). */
.stat-val small.muted-cell {
    font-size: 16px;
}

/* Segment en liens (filtres GET) : même apparence que les boutons. */
.seg a {
    padding: 5px 12px;
    border-radius: var(--r-full);
    font-size: 12.5px;
    font-weight: 600;
    color: var(--muted);
    font-family: var(--font-display);
}

.seg a.on {
    background: #fff;
    color: var(--ink);
    box-shadow: var(--shadow-xs);
}

/* Carte repliable : titre et sous-titre dans le bouton. */
.card-toggle .card-title,
.card-toggle .card-sub {
    display: block;
}

/* Anneau de score : couleurs (remplace le style inline de la maquette). */
.score-ring .val.succes { stroke: var(--success); }
.score-ring .val.or { stroke: var(--gold); }
.score-ring .val.danger { stroke: var(--danger); }

/* Barres de répartition : couleurs et légende (remplacent les styles inline de la maquette). */
.rep-bar span.succes { background: var(--success); }
.rep-bar span.or { background: var(--gold); }
.rep-bar span.encre { background: var(--ink-2); }
.repart-legend .leg i.r-top3 { background: var(--success); }
.repart-legend .leg i.r-top10 { background: var(--primary); }
.repart-legend .leg i.r-top20 { background: #9db8f5; }
.repart-legend .leg i.r-out { background: var(--line-strong); }

.leg.leg-droite {
    margin-left: auto;
    color: var(--muted);
}

/* Modale de contenu (élément app/modale) : masquée tant qu'elle porte l'attribut hidden. */
.rw-modal[hidden] {
    display: none;
}

.rw-modal-msg > :last-child {
    margin-bottom: 0;
}

/* Graphiques ECharts (élément app/graphique). */
.graphique {
    width: 100%;
    padding: 4px 16px 16px;
}

/* Largeur des barres (rep-bar, repart) : data-largeur="0…100" → pourcentage (aucun attribut style). */
[data-largeur="0"] { width: 0%; }
[data-largeur="1"] { width: 1%; }
[data-largeur="2"] { width: 2%; }
[data-largeur="3"] { width: 3%; }
[data-largeur="4"] { width: 4%; }
[data-largeur="5"] { width: 5%; }
[data-largeur="6"] { width: 6%; }
[data-largeur="7"] { width: 7%; }
[data-largeur="8"] { width: 8%; }
[data-largeur="9"] { width: 9%; }
[data-largeur="10"] { width: 10%; }
[data-largeur="11"] { width: 11%; }
[data-largeur="12"] { width: 12%; }
[data-largeur="13"] { width: 13%; }
[data-largeur="14"] { width: 14%; }
[data-largeur="15"] { width: 15%; }
[data-largeur="16"] { width: 16%; }
[data-largeur="17"] { width: 17%; }
[data-largeur="18"] { width: 18%; }
[data-largeur="19"] { width: 19%; }
[data-largeur="20"] { width: 20%; }
[data-largeur="21"] { width: 21%; }
[data-largeur="22"] { width: 22%; }
[data-largeur="23"] { width: 23%; }
[data-largeur="24"] { width: 24%; }
[data-largeur="25"] { width: 25%; }
[data-largeur="26"] { width: 26%; }
[data-largeur="27"] { width: 27%; }
[data-largeur="28"] { width: 28%; }
[data-largeur="29"] { width: 29%; }
[data-largeur="30"] { width: 30%; }
[data-largeur="31"] { width: 31%; }
[data-largeur="32"] { width: 32%; }
[data-largeur="33"] { width: 33%; }
[data-largeur="34"] { width: 34%; }
[data-largeur="35"] { width: 35%; }
[data-largeur="36"] { width: 36%; }
[data-largeur="37"] { width: 37%; }
[data-largeur="38"] { width: 38%; }
[data-largeur="39"] { width: 39%; }
[data-largeur="40"] { width: 40%; }
[data-largeur="41"] { width: 41%; }
[data-largeur="42"] { width: 42%; }
[data-largeur="43"] { width: 43%; }
[data-largeur="44"] { width: 44%; }
[data-largeur="45"] { width: 45%; }
[data-largeur="46"] { width: 46%; }
[data-largeur="47"] { width: 47%; }
[data-largeur="48"] { width: 48%; }
[data-largeur="49"] { width: 49%; }
[data-largeur="50"] { width: 50%; }
[data-largeur="51"] { width: 51%; }
[data-largeur="52"] { width: 52%; }
[data-largeur="53"] { width: 53%; }
[data-largeur="54"] { width: 54%; }
[data-largeur="55"] { width: 55%; }
[data-largeur="56"] { width: 56%; }
[data-largeur="57"] { width: 57%; }
[data-largeur="58"] { width: 58%; }
[data-largeur="59"] { width: 59%; }
[data-largeur="60"] { width: 60%; }
[data-largeur="61"] { width: 61%; }
[data-largeur="62"] { width: 62%; }
[data-largeur="63"] { width: 63%; }
[data-largeur="64"] { width: 64%; }
[data-largeur="65"] { width: 65%; }
[data-largeur="66"] { width: 66%; }
[data-largeur="67"] { width: 67%; }
[data-largeur="68"] { width: 68%; }
[data-largeur="69"] { width: 69%; }
[data-largeur="70"] { width: 70%; }
[data-largeur="71"] { width: 71%; }
[data-largeur="72"] { width: 72%; }
[data-largeur="73"] { width: 73%; }
[data-largeur="74"] { width: 74%; }
[data-largeur="75"] { width: 75%; }
[data-largeur="76"] { width: 76%; }
[data-largeur="77"] { width: 77%; }
[data-largeur="78"] { width: 78%; }
[data-largeur="79"] { width: 79%; }
[data-largeur="80"] { width: 80%; }
[data-largeur="81"] { width: 81%; }
[data-largeur="82"] { width: 82%; }
[data-largeur="83"] { width: 83%; }
[data-largeur="84"] { width: 84%; }
[data-largeur="85"] { width: 85%; }
[data-largeur="86"] { width: 86%; }
[data-largeur="87"] { width: 87%; }
[data-largeur="88"] { width: 88%; }
[data-largeur="89"] { width: 89%; }
[data-largeur="90"] { width: 90%; }
[data-largeur="91"] { width: 91%; }
[data-largeur="92"] { width: 92%; }
[data-largeur="93"] { width: 93%; }
[data-largeur="94"] { width: 94%; }
[data-largeur="95"] { width: 95%; }
[data-largeur="96"] { width: 96%; }
[data-largeur="97"] { width: 97%; }
[data-largeur="98"] { width: 98%; }
[data-largeur="99"] { width: 99%; }
[data-largeur="100"] { width: 100%; }

/* === Fin Lot L09 === */

/* === Lot L18 — facturation : Mon abonnement, souscription (docs/modules/facturation-ecrans.md) === */
/* Bannière d'état de l'abonnement : message (Flash) + bouton d'action sur la même ligne (aucune brique du kit
   ne combine un message et un bouton de formulaire POST). */
.message.bandeau-facturation {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    width: 100%;
    margin: 0;
}
.message.bandeau-facturation form {
    margin: 0;
}
.usage-row .link.txt-sm {
    display: inline-block;
    margin-top: 6px;
}
button.link.abo-repli {
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
    text-align: left;
}
/* === Fin Lot L18 === */

/* === Lot L20 — base de connaissance : vue réseau, liste, « À valider », parcours, complétude, fiche nœud === */
.graphe-onglets .seg {
    flex-wrap: wrap;
}
.graphe-impactes,
.graphe-filtres-liste,
.graphe-masse.card {
    margin-bottom: 16px;
}

.graphe-panneau-tete .card-title {
    margin: 0;
}

.graphe-relation-form .fx-select {
    min-width: 150px;
}
.graphe-fiche .row-actions form,
.graphe-proposition-actions form,
.graphe-fiche .form-actions form,
.graphe-carte .row-actions form {
    display: inline-flex;
    margin: 0;
}

/* === Fin Lot L20 === */

/* === Lot L32 — centre d'aide et demandes de support (docs/modules/support.md) === */

.aide-categorie .chan {
    margin-bottom: 10px;
}

.aide-categorie .card-sub {
    margin: 4px 0 8px;
}

/* Fil d'une demande : messages de l'assistant, du système et notes internes (back-office). */
.bubble-row.support-ia .bubble {
    background: #fff;
    border-color: var(--primary-100);
    border-left: 3px solid var(--primary);
}

.bubble-row.support-ia .bubble-avatar.support {
    color: var(--primary);
    background: var(--primary-050);
}

.bubble-row.support-systeme {
    align-self: center;
    max-width: 100%;
}

.bubble-row.support-systeme .bubble {
    background: transparent;
    border-style: dashed;
}

.bubble-row.support-systeme .bubble-text {
    font-size: 12.5px;
    color: var(--muted);
}

.bubble-row.support-note .bubble {
    background: var(--gold-bg);
    border: 1px dashed #e8b86b;
}

.aide-note .chip {
    cursor: pointer;
    color: var(--gold, #d18a00);
}

.aide-note .chip input {
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
}

.aide-note .chip:has(input:checked) {
    background: var(--gold-bg);
    border-color: #e8b86b;
}

.aide-note .chip:has(input:focus-visible) {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

.aide-statut-action .inline-form,
.aide-statut-action .btn {
    width: 100%;
}

.aide-statut-action .btn {
    justify-content: center;
}

/* Zone d'ajout de fichiers : la règle `.field label` du kit l'emporterait sur `.file-drop` (colonne centrée). */
.field label.file-drop {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

/* === Fin Lot L32 === */

/* === Lot L29 — chat IA : bouton flottant, panneau, page /app/chat (docs/modules/chat.md) === */
.chat-ia.ouvert .chat-ia-bouton { transform: scale(.92); }
.chat-ia-message.utilisateur {
    align-self: flex-end;
    background: var(--primary);
    color: #fff;
    padding: 10px 14px;
    border-radius: var(--r) var(--r) 4px var(--r);
}
.chat-ia-message.utilisateur p { margin: 0; white-space: pre-wrap; }
.chat-ia-message.assistant {
    align-self: flex-start;
    background: var(--surface);
    color: var(--ink);
    padding: 12px 14px;
    border: 1px solid var(--line);
    border-radius: var(--r) var(--r) var(--r) 4px;
    width: 92%;
}
.chat-ia-message.assistant.erreur { border-color: var(--danger); }
.chat-ia-carte-pied .btn { padding: 6px 12px; font-size: 12.5px; }
.chat-ia-suggestions .chip { cursor: pointer; text-align: left; white-space: normal; }
.chat-page-conversations li.actif { background: var(--primary-050); }
.chat-page-conversation .chat-ia-message.assistant { width: 80%; }
@media (max-width: 600px) {
            .chat-ia-message, .chat-ia-message.assistant,
    .chat-page-conversation .chat-ia-message, .chat-page-conversation .chat-ia-message.assistant { max-width: 100%; width: auto; }
}
/* === Fin Lot L29 === */

/* === Lot L21 — mots-clés et positions (docs/modules/mots-cles-ecrans.md) === */
/* Suggestions de Marius : la maquette retire la marge haute dans le corps de la carte (style en ligne). */
.card-body > .mots-cles-suggestions { margin-top: 0; }
/* Onglets de la page Positions (segment sous l'en-tête). Règles sur des classes du kit limitées aux pages du lot
   (`body[data-page]` = entrée de menu : `motscles`, `positions`). */
body[data-page="positions"] .content > .seg { align-self: flex-start; }
body[data-page="motscles"] .row-actions form,
body[data-page="motscles"] .head-actions form,
body[data-page="positions"] .row-actions form,
body[data-page="positions"] .head-actions form { display: inline-flex; }
.outils-groupes .link { display: inline-flex; align-items: center; gap: 6px; }
/* « Gérer les groupes » : bouton à l'apparence d'un lien (plus de règle `button.link` globale depuis L18-bis). */
.outils-groupes button.link { background: none; border: 0; padding: 0; cursor: pointer; }
/* === Fin Lot L21 === */

/* === Lot L28 — citations locales (docs/modules/citations.md) === */
/* Légende de la propagation (remplace les `style="background:…"` de la maquette). */
.propag-legend .leg i.citations-leg-on { background: var(--success); }
.propag-legend .leg i.citations-leg-cours { background: var(--primary); }
.propag-legend .leg i.citations-leg-plan { background: var(--primary-050); border: 1px solid var(--primary-100); }
/* Aperçu flouté (offre sans citations) : données fictives, non interactives. */
.citations-apercu-flou { filter: blur(4px); opacity: .75; pointer-events: none; user-select: none; margin-top: 16px; }
/* Pagination de la liste (au-delà de la maquette). */
.citations-pagination { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 12px 16px; border-top: 1px solid var(--line); }
/* Carte de propagation : date du rejeu. */
.citations-carte-date { margin: 0; padding: 8px 20px 12px; min-height: 1.4em; text-align: right; }
/* === Fin Lot L28 === */

/* === Lot L17 — comptes & équipe : codes de secours, étapes de la 2FA, widget Turnstile (docs/modules/comptes.md) === */
.auth-card .cf-turnstile { margin: 4px 0 16px; }
.auth-card .field-row .txt-sm { white-space: nowrap; }
.onglets-compte .seg { flex-wrap: nowrap; white-space: nowrap; margin-bottom: 0; }
.membre-cellule .wheel-meta { display: flex; flex-direction: column; }
/* === Fin Lot L17 === */

/* === Lot L30 — audit SEO : écran /app/audit, historique, rapport PDF (docs/modules/audit.md) === */
/* Pastilles des moteurs IA (couleurs de la maquette audit.html, portées par des classes au lieu de style=). */
.chan.chan-ia { color: #fff; font-size: 11px; font-weight: 700; }
.chan.chan-ia-chatgpt { background: #10a37f; }
.chan.chan-ia-gemini { background: #4f7cf7; }
.chan.chan-ia-perplexity { background: #111827; }
.chan.chan-ia-claude { background: #d97757; }
/* Avatars du tableau « Vous et vos concurrents » (dégradés de la maquette). */
.avatar.audit-avatar-1 { background: linear-gradient(135deg, #2f80ed, #56ccf2); color: #fff; }
.avatar.audit-avatar-2 { background: linear-gradient(135deg, #eb5757, #f2994a); color: #fff; }
.avatar.audit-avatar-3 { background: linear-gradient(135deg, #27ae60, #6fcf97); color: #fff; }
.avatar.audit-avatar-4 { background: linear-gradient(135deg, #9b51e0, #bb6bd9); color: #fff; }
.head-actions form { display: inline-flex; margin: 0; }
/* Suivi d'un audit en cours, premier audit, formulaires. */
.audit-progression .rep-bar span { transition: width .4s ease; }
.card-head button.link { background: none; border: 0; padding: 0; cursor: pointer; font: inherit; }
#audit-form-concurrents .field { margin-bottom: 12px; }
/* Note Google d'un tableau défilant : le texte masqué (visuellement-masque, position absolue) des étoiles ne doit pas
   sortir du conteneur `table-scroll` (défilement horizontal de la page sur mobile). */
.table-scroll td:has(> .stars) { position: relative; }

/* --- L30 : rapport PDF (dompdf) --- */
/* Lu par App\Service\Audit\RapportPdf (dompdf : pas de variables CSS ni de flex ; police DejaVu Sans). */
.pdf-audit { font-family: "DejaVu Sans", sans-serif; font-size: 10.5px; color: #0f1b33; margin: 0; }
.pdf-entete { width: 100%; border-collapse: collapse; border-bottom: 2px solid #2f80ed; margin-bottom: 14px; }
.pdf-entete td { vertical-align: middle; padding: 0 0 10px; }
.pdf-droite { text-align: right; width: 110px; }
.pdf-marque { color: #2f80ed; font-weight: bold; font-size: 11px; letter-spacing: .5px; }
.pdf-titre { font-size: 22px; margin: 4px 0 2px; }
.pdf-sous-titre { color: #5b6b86; font-size: 11px; }
.pdf-h2 { font-size: 14px; margin: 18px 0 6px; color: #0f1b33; border-bottom: 1px solid #e3e8f1; padding-bottom: 4px; }
.pdf-h3 { font-size: 11.5px; margin: 12px 0 4px; }
.pdf-h3.pdf-critique { color: #c0392b; }
.pdf-h3.pdf-important { color: #b9791a; }
.pdf-h3.pdf-conseil { color: #2f80ed; }
.pdf-h3.pdf-corrige { color: #27ae60; }
.pdf-texte { margin: 0 0 6px; line-height: 1.45; }
.pdf-liste { margin: 0 0 6px 16px; padding: 0; }
.pdf-groupes { width: 100%; border-collapse: collapse; }
.pdf-groupes td { padding: 4px 0; vertical-align: middle; }
.pdf-groupe-nom { width: 42%; }
.pdf-groupe-valeur { width: 14%; text-align: right; font-weight: bold; }
.pdf-problemes { width: 100%; border-collapse: collapse; }
.pdf-problemes td { padding: 6px 8px; border: 1px solid #e3e8f1; vertical-align: top; }
.pdf-probleme-titre { font-weight: bold; margin-bottom: 2px; }
.pdf-probleme-texte { color: #33415c; line-height: 1.4; }
.pdf-probleme-reco { margin-top: 3px; color: #0f1b33; }
.pdf-probleme-pages { margin-top: 3px; color: #7a879c; font-size: 9px; }
.pdf-tableau { width: 100%; border-collapse: collapse; }
.pdf-tableau th { text-align: left; background: #f4f7fb; padding: 5px 6px; font-size: 9.5px; color: #5b6b86; }
.pdf-tableau td { padding: 5px 6px; border-bottom: 1px solid #e3e8f1; }
.pdf-vous td { background: #eef5ff; }
.pdf-discret { color: #7a879c; font-size: 9px; }
.pdf-pied { margin-top: 20px; color: #7a879c; font-size: 9px; text-align: center; }
/* --- Fin L30 : rapport PDF --- */
/* === Fin Lot L30 === */

/* === Lot L24 — page Connexions (docs/modules/connexions.md) === */
/* === Fin Lot L24 === */

/* === Lot L26 — fiche Google : posts (calendrier commun avec les articles), avis, photos, fiche, statistiques,
   réglages, sollicitation (docs/modules/google-ecrans.md). posts.css (maquette) n'est pas modifié. === */

.google-onglets .seg {
    flex-wrap: nowrap;
}

.google-onglets .seg a {
    white-space: nowrap;
}

.google-bandeau .link {
    margin-left: 6px;
    font-weight: 600;
}

.photos-televersement .field {
    flex: 1 1 320px;
    margin: 0;
}

.fiche-jour .error-message {
    flex-basis: 100%;
    margin: 0;
}

.fiche-formulaire > .card,
.google-reglages .card {
    margin-bottom: 16px;
}

.sollicitation-lien .field {
    flex: 1 1 240px;
    margin: 0;
}

/* === Fin Lot L26 === */

/* === Lot L27 — grille locale (onglet Maps) et visibilité IA (onglet IA) de la page Positions
   (docs/modules/grille-visibilite.md §4) === */
.grille-bloc > .card {
    min-width: 0;
}
.reponse-ia-tete .card-title {
    overflow-wrap: anywhere;
}
.reponses-ia-pied .link + .link {
    margin-left: 12px;
}
/* === Fin Lot L27 === */

/* === Lot L25 — articles : liste, éditeur, ligne éditoriale (docs/modules/articles-ecrans.md) === */
/* Miniatures : image de couverture, sinon un dégradé de la maquette (indice stable dérivé de l'uuid). */
.art-thumb-c1 { background: linear-gradient(135deg, #d7e5ff, #4f86ff); }
.art-cell .error-message { margin-top: 2px; }

/* Éditeur : barre de la maquette pilotant CKEditor 5, zone éditable. */
.editor-bar button.is-actif { background: var(--primary-050); color: var(--primary); }
.editor-body.ck.ck-editor__editable,
.editor-body.ck.ck-editor__editable.ck-focused:not(.ck-editor__nested-editable) {
    border: 0;
    box-shadow: none;
    outline: 0;
}
/* CKEditor applique ses propres marges et sa police à la zone éditable : celles de la maquette sont rétablies. */
.editor .editor-body.ck.ck-editor__editable_inline {
    padding: 22px 26px;
    font-family: var(--font-body, inherit);
    font-size: 15px;
    line-height: 1.7;
    color: var(--ink-2);
}
.editor .editor-body.ck-content h2 { font-size: 20px; margin: 22px 0 8px; }
.editor .editor-body.ck-content h3 { font-size: 16px; margin: 18px 0 6px; }
.editor .editor-body.ck-content p { margin: 0 0 12px; }
.editor .editor-body.ck-content ul,
.editor .editor-body.ck-content ol { margin: 0 0 12px; padding-left: 20px; }
.editor-body .marius-cta {
    margin: 16px 0;
    padding: 14px 16px;
    border-radius: var(--r-sm);
    background: var(--primary-050);
    border: 1px solid var(--primary-100);
}
.editor-body figure.image img { max-width: 100%; height: auto; }
.articles-progression .check-list { margin-top: 8px; }
.check-list li.etape-a-venir { color: var(--muted); }
.check-list li.etape-a-venir svg { color: var(--muted); }
.form-actions .articles-supprimer { margin-right: auto; color: var(--danger); }
.serp.serp-mobile { max-width: 340px; }
.field-hint-inline.is-limite { color: var(--danger); font-weight: 700; }

.faq-ligne .field { grid-column: 1; margin: 0; }

/* Boutons à l'apparence d'un lien (« Ajouter à la FAQ », « Insérer », « Corriger », « Comparer », « Restaurer »). */
.roue-form button.link { background: none; border: 0; padding: 0; cursor: pointer; font: inherit; white-space: nowrap; }

/* Ligne éditoriale. */
.ligne-editoriale fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
.ligne-editoriale-jours .switch { padding: 6px 0; }
.ligne-editoriale .check-list { margin: 0 0 18px; }
@media (max-width: 760px) {
    /* Pied de l'éditeur : 4 boutons au plus, sur plusieurs lignes (sans débordement hors de l'écran). */
    .roue-form .form-actions { flex-wrap: wrap; }
        }
/* === Fin Lot L25 === */

/* === Lot L33B — échange de backlinks : page /app/backlinks, réglages, lien Marius dans l'éditeur
   (docs/modules/backlinks-ecrans.md) === */
.backlinks-stats { margin-bottom: 16px; }
.backlinks-participation .badge + .badge { margin-left: 4px; }
#recus, #heberges, #historique { margin-bottom: 16px; }
#recus td small, #heberges td small, #historique td small { display: block; margin-top: 2px; }
.backlinks-credits.up { color: var(--success, #16a34a); }
.backlinks-credits.down { color: var(--danger, #dc2626); }
.backlinks-activation .form-actions,
.backlinks-desactivation .form-actions,
.backlinks-reglages .form-actions { margin-top: 14px; }
#participation, #preferences { margin-bottom: 16px; }
.lien-marius-maillage .badge { margin-right: 4px; }
/* === Fin Lot L33B === */

/* === Lot L34 — tableau de bord, fil d'activité, centre de notifications, préférences
   (docs/modules/tableau-notifications.md) === */
/* Courbe « Visibilité sur Google » : graphique du kit dans le `chart-wrap` de la maquette, légende de la maquette. */
.chart-wrap .graphique { padding: 0; }
.leg i.leg-top20 { background: var(--primary); }
.leg i.leg-top10 { background: var(--success); }
.leg i.leg-article { background: var(--gold); width: 12px; height: 2px; border-radius: 1px; }
.card:has(#visibilite) > .card-head .seg a { white-space: nowrap; }
@media (max-width: 640px) {
    .card:has(#visibilite) > .card-head { flex-wrap: wrap; gap: 10px; }
}
/* Tuile « Citations » d'une offre sans citations. */
.stat-verrouillee .offre-lock { margin-top: 12px; }
.tableau-kpis strong .stars { color: var(--gold); }
.card-body > .tableau-kpis:last-child { margin-bottom: 0; }
.notif-centre .notif-item { align-items: center; }
.preferences-table .switch { justify-content: center; position: relative; }
/* Libellé de l'interrupteur (« Avis : par e-mail ») gardé pour les lecteurs d'écran, masqué à l'écran. */
.preferences-table .switch-txt {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.preferences-table .kw-name .notif-ico { width: 28px; height: 28px; flex-shrink: 0; }
@media (max-width: 640px) {
            .notif-centre .notif-item { flex-wrap: wrap; }
    }
/* === Fin Lot L34 === */

/* === Lot L33 — rapports mensuels : liste /app/rapports, consultation, page publique de partage
   (docs/modules/rapports.md). Le PDF a sa propre feuille : webroot/css/rapport.css === */
.rapport .rapport-section,
.rapport-gestion { margin-top: 16px; }
.rapport .rapport-section:first-child { margin-top: 0; }
.rapport .stats + .stats,
.rapport .stats + p,
.rapport .stats + .table-scroll,
.rapport .stats + .chart-wrap,
.rapport .stats + .rep-list,
.rapport .stats + .repart { margin-top: 14px; }
.rapport .rapport-temps-forts { margin-bottom: 16px; }
.rapport .rapport-synthese p { margin: 0 0 10px; line-height: 1.6; }
.rapport .rapport-synthese ul { margin: 0 0 10px 20px; }
.rapport .rapport-origine { margin: 4px 0 0; }
.rapport .rapport-h3 { font-size: 14px; margin: 18px 0 8px; }
.rapport .rapport-tableau .rapport-cellule-texte { white-space: normal; overflow-wrap: break-word; min-width: 180px; }
.rapport .rapport-mouvements { margin-top: 4px; }
.rapport .rapport-etiquettes { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 8px; }
.rapport .rapport-liste,
.rapport .rapport-recommandations,
.rapport .rapport-avis-liste { margin: 0 0 8px 18px; }
.rapport .rapport-liste li,
.rapport .rapport-recommandations li,
.rapport .rapport-avis-liste li { margin: 0 0 8px; line-height: 1.5; }
.rapport .rapport-grille { display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start; }
.rapport .rapport-grille-image { width: 180px; height: 180px; flex: none; }
.rapport .rapport-grille-chiffres p { margin: 0 0 6px; }
.rapport .rapport-graphique { display: block; width: 100%; max-width: 640px; height: auto; margin: 10px 0; }
.rapport .rapport-legende { color: var(--muted); font-size: 12.5px; margin: 12px 0 0; }
.rapport .rapport-vide { padding: 18px 0; }
.rapport-note { margin: 0 0 14px; }
.rapport-bandeau { margin: 0 0 16px; }
/* Texte masqué d'un tableau défilant : positionné dans le tableau, sans élargir la page. */
.rapport .table-scroll { position: relative; }
/* Liste : cartes du kit (`rapport-grid`, `rapport-card`, `rapport-kpis`, marius.css). */
.rapport-card-tete { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.rapport-card-tete .rapport-mois { margin: 0; }
.rapport-card p { margin: 0; }
.rapport-card .head-actions { margin-top: auto; }
.rapport-reglages .switch { margin-bottom: 14px; }
.rapport-destinataires { margin: 4px 0 16px; }
.rapport-gestion .head-actions { flex-wrap: wrap; }
.rapport-gestion .lien-box { margin-bottom: 12px; }

/* Page publique (/rapports/partage/…) : document autonome, sans barre latérale. */
.rapport-partage-corps { background: var(--bg); }
.rapport-partage { max-width: 1120px; margin: 0 auto; padding: 28px 20px 40px; }
.rapport-partage-marque { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; }
.rapport-partage-pied { margin-top: 24px; text-align: center; }
.rapport-partage .rapport { margin-top: 22px; }

@media (max-width: 860px) {
    .rapport .rapport-grille-image { width: 150px; height: 150px; }
}
@media (max-width: 560px) {
    .rapport-partage { padding: 18px 14px 32px; }
    .rapport .rapport-tableau .rapport-cellule-texte { min-width: 150px; }
}
/* === Fin Lot L33 === */

/* === Lot L36 — onboarding (assistant en 8 étapes, ajout d'un business, checklist « Bien démarrer ») et paramètres
   du site (docs/modules/onboarding-parametres.md). Barre d'étapes : composant `stepper` du kit, resserré pour 8
   étapes (libellés lus par les lecteurs d'écran seulement). === */
.onboarding-carte fieldset,
.parametres fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
.onboarding-etapes .step:not(:last-child)::after { margin: 0 6px; }
.onboarding-etapes .step.done a.step-num:hover,
.onboarding-etapes .step.done a.step-num:focus-visible { color: #fff; }
.onboarding-progression .rep-bar { max-width: 560px; }
.onboarding-relances .btn { max-width: 100%; white-space: normal; text-align: left; height: auto; }
.onboarding-connexions .cms-card .btn { align-self: flex-start; }
.onboarding-jours .switch { padding: 6px 0; }
.onboarding-checklist-barre { margin: 0 0 14px; }
.onboarding-checklist li a { color: var(--ink); font-weight: 600; }
.check-list.onboarding-checklist li.ok { color: var(--muted); }
@media (max-width: 560px) {
            .onboarding-etapes .step:not(:last-child)::after { margin: 0 3px; }
                    .onboarding-actions .btn { flex: 1 1 auto; justify-content: center; }
}
/* === Fin Lot L36 === */
