/* ==========================================================================
   article.css — composants propres aux articles et à l'index du blog.
   S'inclut APRÈS site.css, en quatrième position.
   Aucun hexadécimal ici : tout passe par tokens.css.

   Onze composants, tous nouveaux au 20 août 2026 :
     fil d'Ariane · ligne de publication · corps d'article · sommaire ·
     figure légendée · citation · encadré · tableau · notes · étiquettes ·
     colonne latérale · billet
   ========================================================================== */

/* --- Hero d'article -------------------------------------------------------- */
/* Le hero d'article est plus bas que celui des pages de compétence : pas de
   photographie, moins de matière. */
.article-hero{padding-bottom:calc(var(--bande-y) + var(--vague-h))}
.article-hero>div{position:relative;z-index:1}
.vague{position:absolute;bottom:-1px;left:0;width:100%;height:var(--vague-h);
 display:block;z-index:2}

/* Le titre d'un article n'est PAS en capitales, contrairement à la règle 3.1.
   Un titre de 107 caractères en capitales devient un pavé illisible. Pour
   revenir à la charte : supprimer ce bloc, h1 de site.css reprend la main. */
.titre-article{text-transform:none;letter-spacing:-.015em;
 font-size:clamp(28px,3.9vw,44px);line-height:1.16;max-width:21ch}

/* --- Fil d'Ariane ---------------------------------------------------------- */
.fil{font-family:var(--mono);font-size:var(--t-mono);text-transform:uppercase;
 letter-spacing:var(--ls-colonne);color:var(--ink-d3);margin-bottom:26px}
.fil a{color:var(--ink-d3)}
.fil a:hover{color:var(--blanc)}
.fil>*+*::before{content:"/";margin:0 9px;color:var(--line-d)}

/* --- Ligne de publication -------------------------------------------------- */
.publication{display:flex;gap:26px;flex-wrap:wrap;max-width:none;
 margin:30px 0 0;padding-top:20px;border-top:1px solid var(--line-d);
 font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;color:var(--ink-d3)}
.publication time{color:var(--ink-d1)}

/* --- Grille corps + colonne latérale --------------------------------------- */
.article-layout{display:grid;grid-template-columns:minmax(0,1fr) 258px;
 gap:58px;align-items:start}

/* --- Corps ----------------------------------------------------------------- */
/* Filet supérieur en couleur de compétence dominante. Seul endroit du corps
   où une couleur de marque apparaît. Repli sur l'encre si la page ne déclare
   aucune compétence. */
.article-corps{border-top:4px solid var(--c-page,var(--ink));padding-top:34px;
 max-width:var(--l-long)}
.article-corps>*+*{margin-top:22px}
.article-corps .intro{font-size:var(--t-chapo);color:var(--ink2)}

/* Titres de section : casse normale, même raison que le h1. Le filet de
   60 × 4 px est remplacé par un séparateur pleine largeur — sur vingt
   sections, la ponctuation du site deviendrait un tic. */
.article-corps h2{text-transform:none;letter-spacing:-.01em;
 font-size:clamp(21px,2.5vw,27px);line-height:1.24;
 margin-top:52px;padding-top:30px;border-top:1px solid var(--line);position:relative}
.article-corps h2::before{content:"";position:absolute;left:0;top:-2px;
 width:var(--filet-titre-w);height:var(--filet-titre-h);background:var(--ink)}
.article-corps h3{margin-top:38px}

.article-corps a{color:var(--ink);border-bottom:1px solid var(--deci)}
.article-corps a:hover{color:var(--action);border-bottom-color:var(--action)}
.article-corps ul{margin:0;padding-left:0;list-style:none;max-width:var(--l-long)}
.article-corps li{position:relative;padding-left:22px;margin-bottom:7px}
.article-corps li::before{content:"";position:absolute;left:0;top:11px;
 width:8px;height:1px;background:var(--ink3)}
.article-corps sup{font-size:11px;line-height:0}

/* --- Figure légendée -------------------------------------------------------- */
/* L'alt décrit le schéma, la légende porte la source : ils ne disent pas la
   même chose et ne se remplacent pas. */
.figure{margin:34px 0;background:var(--card);border:1px solid var(--line)}
.figure img{width:100%;display:block}
.figure figcaption{font-family:var(--mono);font-size:11px;letter-spacing:.09em;
 line-height:1.5;color:var(--ink3);padding:13px 16px;border-top:1px solid var(--line)}
.figure .source{display:block;margin-top:4px;color:var(--line)}

/* --- Citation --------------------------------------------------------------- */
.citation{margin:38px 0;padding-left:26px;border-left:4px solid var(--ink)}
.citation p{font-family:var(--disp);font-size:21px;line-height:1.42;
 font-weight:500;margin:0;max-width:none}
.citation cite{display:block;margin-top:14px;font-family:var(--mono);
 font-size:var(--t-mono);text-transform:uppercase;letter-spacing:var(--ls-colonne);
 color:var(--ink3);font-style:normal}

/* --- Encadré ---------------------------------------------------------------- */
/* Filet d'encre, jamais une couleur de marque : même raison que les cartes de
   mission (charte 7.3). Un encadré n'est pas une compétence. */
.encadre{margin:34px 0;padding:20px 24px;background:var(--card);
 border-left:4px solid var(--ink)}
.encadre p{margin:0;color:var(--ink2)}
.encadre .etiquette{margin-bottom:8px}

/* --- Tableau ---------------------------------------------------------------- */
/* Filets d'un pixel, aucune zébrure : vocabulaire du plan technique. */
.tableau-cadre{margin:34px 0;overflow-x:auto}
.tableau{width:100%;border-collapse:collapse;background:var(--card);
 font-size:15px;text-align:left}
.tableau caption{font-family:var(--mono);font-size:var(--t-mono);
 text-transform:uppercase;letter-spacing:var(--ls-colonne);color:var(--ink3);
 text-align:left;padding-bottom:11px}
.tableau th,.tableau td{border:1px solid var(--line);padding:11px 14px;
 vertical-align:top}
.tableau th{background:var(--tuile);font-weight:600;font-size:14px}

/* --- Notes de bas de page ---------------------------------------------------- */
.notes{margin-top:56px;padding-top:22px;border-top:1px solid var(--line)}
.notes p{font-size:14px;color:var(--ink2);margin:0 0 8px}

/* --- Étiquettes -------------------------------------------------------------- */
.etiquettes{display:flex;gap:var(--gouttiere);flex-wrap:wrap;align-items:center;
 margin-top:40px;padding-top:24px;border-top:1px solid var(--line);max-width:none}
.etiquettes .etiquette{margin:0 12px 0 0}
.etiquettes a{background:var(--card);border:1px solid var(--line);
 padding:7px 13px;font-size:13.5px;color:var(--ink2)}
.etiquettes a:hover{background:var(--noir);color:var(--blanc);border-color:var(--noir)}

/* --- Colonne latérale --------------------------------------------------------- */
.rail{position:sticky;top:calc(var(--header-h) + 28px);display:grid;gap:var(--gouttiere)}
.rail__bloc{background:var(--card);border:1px solid var(--line);padding:20px 22px}
.rail__bloc p{max-width:none}
.rail__auteur b{display:block;font-family:var(--disp);font-size:16px;font-weight:600}
.rail__auteur span{font-size:13.5px;color:var(--ink2)}

.sommaire{display:grid}
.sommaire a{font-size:14px;line-height:1.4;padding:8px 0 8px 14px;
 border-left:2px solid var(--line);color:var(--ink2)}
.sommaire a:hover{color:var(--ink);border-left-color:var(--ink3)}
.sommaire a.is-on{color:var(--ink);border-left-color:var(--action);font-weight:500}

/* Renvoi vers la compétence dominante : la couleur y désigne bien la page
   pointée, c'est son emploi normal. */
.rail__competence{display:block;background:var(--card);border:1px solid var(--line);
 border-left:4px solid var(--c-page,var(--ink));padding:16px 22px;color:var(--ink)}
.rail__competence b{display:block;font-family:var(--disp);font-size:15.5px;font-weight:600}
.rail__competence span{font-size:13px;color:var(--ink2)}
.rail__competence:hover{background:var(--noir);color:var(--blanc)}
.rail__competence:hover span{color:var(--ink-d2)}

.btn--petit{padding:11px 19px;font-size:13px;font-weight:600}
.sommaire-mobile{display:none}

/* --- Billets (index du blog et articles liés) ---------------------------------- */
.billet{display:block;border-top:4px solid var(--c-billet,var(--ink))}
.billet[data-competence="extinction-automatique"]{--c-billet:var(--c-extinction)}
.billet[data-competence="detection-incendie"]    {--c-billet:var(--c-detection)}
.billet[data-competence="compartimentage"]       {--c-billet:var(--c-compartimentage)}
.billet[data-competence="desenfumage"]           {--c-billet:var(--c-desenfumage)}
.billet[data-competence="evacuation"]            {--c-billet:var(--c-evacuation)}
.billet[data-competence="deci"]                  {--c-billet:var(--c-deci)}

/* Date en rouge : usage déjà prévu par la charte 2.3 */
.billet__date{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;
 color:var(--action)}
.billet h2,.billet h3{font-size:16.5px;line-height:1.32;font-weight:600;
 text-transform:none;letter-spacing:-.01em;margin:12px 0 9px}
.billet p{font-size:14px;color:var(--ink2);margin:0}
.billet__pied{display:flex;gap:12px;flex-wrap:wrap;margin-top:16px;
 padding-top:12px;border-top:1px solid var(--line);
 font-family:var(--mono);font-size:10px;letter-spacing:var(--ls-colonne);
 text-transform:uppercase;color:var(--ink3)}
.billet:hover{background:var(--tuile)}

.billets{grid-template-columns:repeat(3,1fr)}

/* --- Index du blog en liste ------------------------------------------------
   Un article par ligne : image sur le premier tiers, texte sur les deux
   autres. Remplace la grille a trois colonnes, qui a 23 articles demandait de
   lire en zigzag. Demande de Ronan, 23 aout 2026.

   L'IMAGE EST COLLEE A GAUCHE et sans marge interieure : elle touche le bord
   de la carte. object-position:left, pas center — consigne explicite. Et
   object-fit CONTAIN, pas cover : la plupart de ces images sont des schemas
   — architecture reseau, chaine ECS, protocole d'essai — que le recadrage
   amputait de leur legende ou de la moitie de leur propos.

   Son alt est VIDE a dessein : elle est decorative, le titre juste a cote dit
   deja ou mene le lien.

   [hidden] EXPLICITE : sans cette regle, le display:grid l'emporte sur la
   feuille du navigateur et le filtre ne masque rien. Le bogue a existe. */
.billets--liste{display:grid;grid-template-columns:1fr;gap:26px}
.billet--ligne{display:grid;grid-template-columns:1fr 2fr;gap:0;
 align-items:stretch;background:var(--card);border:1px solid var(--line);
 border-top:4px solid var(--c-billet,var(--ink))}
.billet--ligne[hidden]{display:none}
.billet--ligne>.billet__vignette{width:100%;height:100%;min-height:168px;
 object-fit:contain;object-position:left center;padding:0;
 filter:grayscale(1);opacity:.85}
.billet--ligne:hover>.billet__vignette{filter:none;opacity:1}
.billet--ligne>div{padding:24px 28px 26px}
.billet--ligne h2{margin-top:10px}
.billet--ligne p{max-width:var(--l-accompagne)}
.billet--ligne:hover{border-color:var(--ink3)}

@media(max-width:760px){
 .billet--ligne{grid-template-columns:1fr}
 .billet--ligne>.billet__vignette{height:180px;min-height:0;
  object-position:center}
}

/* --- Filtre en colonne laterale --------------------------------------------
   Meme composant que le filtre horizontal, empile. Ce sont des BOUTONS et non
   des liens : un filtre n'est pas une adresse, il ne doit pas fabriquer cinq
   fausses pages. Masque tant que le script n'a pas pris la main, sinon il
   afficherait des boutons inertes. */
.filtre--rail{flex-direction:column;align-items:stretch;gap:0;margin:0}
.filtre--rail .filtre__b{text-align:left;border:0;border-top:1px solid var(--line);
 padding:11px 2px;background:none}
.filtre--rail .filtre__b:first-of-type{border-top:0}
.filtre--rail .filtre__b.is-on{color:var(--action);font-weight:600}
.filtre__compte{display:block;font-family:var(--mono);font-size:10px;
 letter-spacing:var(--ls-mono);text-transform:uppercase;color:var(--ink3);
 margin-top:14px}

/* --- Filtre du blog ------------------------------------------------------------ */
.filtre{display:flex;gap:var(--gouttiere);flex-wrap:wrap;align-items:center;
 margin-bottom:34px}
.filtre .etiquette{margin:0 12px 0 0}
.filtre__b{background:var(--card);border:1px solid var(--line);color:var(--ink2);
 font-family:var(--body);font-size:13.5px;padding:9px 15px;cursor:pointer}
.filtre__b:hover{color:var(--ink);border-color:var(--ink3)}
.filtre__b.is-on{background:var(--noir);color:var(--blanc);border-color:var(--noir)}
.filtre__vide{color:var(--ink2)}

/* --- Points de rupture ---------------------------------------------------------- */
@media(max-width:980px){
 .article-layout{grid-template-columns:1fr;gap:0}
 .rail{display:none}
 .sommaire-mobile{display:block;background:var(--card);
  border:1px solid var(--line);margin-bottom:34px}
 .sommaire-mobile summary{font-family:var(--mono);font-size:10.5px;
  text-transform:uppercase;letter-spacing:var(--ls-colonne);color:var(--ink3);
  padding:15px 20px;cursor:pointer}
 .sommaire-mobile .sommaire{padding:0 20px 16px}
 .article-corps{max-width:none}
 .billets{grid-template-columns:1fr}
}

/* --- Articles liés -------------------------------------------------------
   Bloc de fin d'article, dans la bande claire du corps depuis que le
   bandeau des six compétences en a été retiré (23/08/2026). */
.article-lies{margin-top:var(--bande-y);padding-top:var(--bande-y);
 border-top:1px solid var(--line)}
