/* ======================================================================
   L'ESPACE DU CONTRIBUTEUR — coquille d'application
   ----------------------------------------------------------------------
   Même parti que /admin : une colonne de navigation à gauche, une en-tête
   minimale, une seule zone de contenu. Les variables viennent de app.css,
   qui est chargé avant : on n'en redéfinit aucune.

   La grille est en deux colonnes sur écran large et une seule sur mobile,
   où la colonne devient un panneau qui glisse. Rien d'autre ne bouge : le
   contenu, lui, est écrit pour être lu sur une colonne.
   ====================================================================== */

body.espace-app { margin:0; background:var(--creme); color:var(--encre); }
body.e-init .e-app { opacity:0; }          /* évite le saut de mise en page au premier rendu */
.e-app { display:grid; grid-template-columns:266px minmax(0,1fr); grid-template-rows:auto 1fr;
  grid-template-areas:"nav top" "nav vue"; min-height:100dvh; transition:opacity .15s ease; }
@media (min-width:1500px) { .e-app { grid-template-columns:292px minmax(0,1fr); } }
@media (min-width:901px) and (max-width:1100px) { .e-app { grid-template-columns:228px minmax(0,1fr); } }

/* ---------- en-tête ---------- */
.e-top { grid-area:top; min-width:0; display:flex; align-items:center; gap:14px; padding:16px 26px;
  background:var(--blanc); border-bottom:1.5px solid var(--ligne); position:sticky; top:0; z-index:5; }
.e-titre { margin:0; min-width:0; font-size:19px; font-weight:800;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.e-session { margin:0 0 0 auto; font-size:13.5px; color:var(--gris); }
.e-session strong { color:var(--encre); }
.e-burger { display:none; width:40px; height:40px; flex:none; place-items:center; border:1.5px solid var(--ligne);
  border-radius:10px; background:var(--blanc); color:var(--encre); cursor:pointer; }
.e-burger .ic { width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; }

/* ---------- colonne de navigation ---------- */
.e-nav { grid-area:nav; display:flex; flex-direction:column; gap:6px; padding:20px 16px 18px;
  background:var(--vert-nuit); color:#fff; position:sticky; top:0; height:100dvh; overflow-y:auto; }
.e-logo { display:flex; flex-direction:column; gap:4px; padding:4px 10px 18px; text-decoration:none; color:inherit; }
.e-logo img { width:150px; height:auto; }
.e-logo span { font-size:12px; font-weight:700; letter-spacing:1px; text-transform:uppercase; opacity:.7; }
.e-liens { display:flex; flex-direction:column; gap:3px; }
.e-lien { display:flex; align-items:center; gap:9px; padding:11px 12px; border-radius:10px; text-decoration:none;
  color:rgba(255,255,255,.82); font-weight:600; font-size:15px; border:0; background:none; cursor:pointer;
  font-family:inherit; text-align:left; width:100%; }
.e-lien:hover { background:rgba(255,255,255,.08); color:#fff; }
.e-lien.actif { background:var(--vert); color:#fff; }
.e-lien .ic { width:17px; height:17px; flex:none; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; }
.e-lien .ic-retour { transform:rotate(180deg); }

/* Le pied de colonne : trois sorties, séparées du reste par un filet, parce
   que « se déconnecter » ne se range pas à côté de « mes contributions ». */
.e-nav-pied { margin-top:auto; padding-top:14px; border-top:1px solid rgba(255,255,255,.15); display:flex; flex-direction:column; gap:3px; }
.e-lien-sec { font-size:14px; font-weight:600; color:rgba(255,255,255,.7); }

/* ---------- zone de contenu ---------- */
/* La largeur de lecture s'ouvre avec l'écran plutôt que de rester bloquée à
   1060 px : sur un 27 pouces, deux tiers de la fenêtre restaient blancs, et
   la fiche d'un projet ne pouvait pas se mettre en deux colonnes. Le texte
   courant, lui, garde sa mesure : c'est la grille qui s'élargit, pas les
   paragraphes. */
.e-vue { grid-area:vue; min-width:0; padding:30px 34px 60px; max-width:1180px; width:100%; }
@media (min-width:1500px) { .e-vue { max-width:1340px; padding:34px 44px 70px; } }
.e-vue:focus { outline:none; }
.e-section { margin:0 0 34px; }
.e-section-tete { display:flex; align-items:baseline; justify-content:space-between; gap:16px; flex-wrap:wrap; }
.e-section h2 { margin:0 0 14px; font-size:21px; }
.e-section-tete h2 { margin-bottom:14px; }
.e-plus { font-size:14px; font-weight:700; color:var(--vert); }
.e-note { margin:0 0 14px; font-size:13.5px; line-height:1.55; color:var(--gris); }
.e-vide { margin:0; padding:22px; border-radius:14px; border:1.5px dashed var(--ligne); color:var(--gris); background:var(--blanc); }
.e-attente { color:var(--gris); }
.e-retour { margin:0 0 16px; }
.e-retour a { font-weight:700; color:var(--vert); }
.e-ok { margin:10px 0 0; color:var(--vert); font-weight:600; }

/* ---------- l'état déconnecté ---------- */
body.e-login-mode .e-nav, body.e-login-mode .e-session { display:none; }
body.e-login-mode .e-app { grid-template-columns:1fr; grid-template-areas:"top" "vue"; }
body.e-login-mode .e-vue { max-width:1000px; margin:0 auto; padding-top:44px; }
.e-accueil { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,.8fr); gap:24px; align-items:start; }
.e-carte { padding:26px; border-radius:16px; border:1.5px solid var(--ligne); background:var(--blanc); }
.e-carte h2 { margin:0 0 10px; font-size:19px; }
.e-carte-aide h2 + p { margin-bottom:20px; }
.e-carte-aide h2 { margin-top:0; }
.e-intro { margin:0 0 18px; color:var(--gris); line-height:1.55; }
.e-oubli { margin-top:18px; border-top:1.5px solid var(--ligne); padding-top:14px; }
.e-oubli > summary { cursor:pointer; font-weight:600; font-size:14.5px; }
.e-etat { display:flex; gap:10px; align-items:flex-start; margin-top:14px; padding:13px 15px; border-radius:12px;
  background:var(--vert-pale); color:var(--vert-fonce); font-size:14px; line-height:1.5; }
.e-etat .ic { width:19px; height:19px; flex:none; fill:none; stroke:currentColor; stroke-width:2; }
.btn-bloc { width:100%; justify-content:center; }

/* ---------- le bandeau de chiffres ---------- */
.e-kpi { display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:14px; margin:0 0 32px; }
.e-kpi-case { padding:18px; border:1.5px solid var(--ligne); border-radius:14px; background:var(--blanc); }
.e-kpi-case dt { margin:0; font-size:12px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--gris); }
.e-kpi-case dd { margin:6px 0 0; font-size:26px; font-weight:800; line-height:1.15; color:var(--vert); font-variant-numeric:tabular-nums; }
.e-kpi-aide { margin:8px 0 0; font-size:12.5px; line-height:1.45; color:var(--gris); }

/* ---------- les contributions ---------- */
.e-contribs { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.e-contrib { padding:18px 20px; border-radius:14px; border:1.5px solid var(--ligne); background:var(--blanc);
  display:grid; gap:14px; }
.e-contrib-tete { display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.e-contrib-projet { font-weight:800; font-size:17px; color:var(--encre); text-decoration:underline;
  text-decoration-thickness:1.5px; text-underline-offset:3px; }
.e-contrib-projet:hover { color:var(--vert); }
.e-contrib-meta { margin:8px 0 0; display:flex; flex-wrap:wrap; gap:6px 18px; font-size:14px; color:var(--gris); }
.e-contrib-meta b { color:var(--encre); font-variant-numeric:tabular-nums; }
.e-contrib-actions { display:flex; flex-wrap:wrap; gap:10px 18px; align-items:center; justify-content:space-between; }
.e-contrib-liens { display:flex; flex-wrap:wrap; gap:6px 16px; align-items:center; min-width:0; }
/* Un lien, pas un bouton : même rôle qu'un <a> pour l'œil, et un <button>
   pour le clavier quand l'action n'est pas une navigation. */
.e-lien-doc { padding:0; border:0; background:none; font:inherit; font-size:14px; font-weight:600;
  color:var(--vert); cursor:pointer; text-decoration:underline; text-underline-offset:3px;
  text-decoration-thickness:1.5px; text-align:left; }
.e-lien-doc:hover { color:var(--vert-fonce); }
.e-clos { font-size:13px; color:var(--gris); }

/* ---------- les projets ---------- */
.e-projets { display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:16px; }
.e-projet { display:grid; grid-template-rows:auto 1fr; border-radius:16px; border:1.5px solid var(--ligne);
  background:var(--blanc); text-decoration:none; color:var(--encre); overflow:hidden; transition:border-color .15s ease, transform .15s ease; }
.e-projet:hover { border-color:var(--vert); transform:translateY(-2px); }
.e-projet-vignette { display:block; background:var(--vert-pale); }
.e-projet-vignette img { width:100%; height:auto; aspect-ratio:3/2; object-fit:cover; display:block; }
.e-projet-corps { display:grid; gap:5px; align-content:start; padding:16px 18px 18px; }
.e-projet-methode { font-size:11.5px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--vert); }
.e-projet strong { font-size:17px; line-height:1.25; }
.e-projet-lieu { font-size:13.5px; color:var(--gris); }
.e-projet-vol { margin-top:6px; font-size:14px; font-weight:700; color:var(--encre); font-variant-numeric:tabular-nums; }
.e-projet-suite { margin-top:2px; font-size:12.5px; color:var(--gris); }

/* ---------- les abonnements ---------- */
.e-abos { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.e-abo { display:flex; flex-wrap:wrap; gap:14px; align-items:center; justify-content:space-between;
  padding:16px 20px; border-radius:14px; border:1.5px solid var(--ligne); background:var(--blanc); }
.e-abo strong { display:block; }
.e-abonnement .e-contrib-tete strong { display:inline; }
.badge-vert { background:var(--vert-pale, #e7f4ec); border-color:transparent; color:var(--vert, #1e6b45); }
.e-abo-choix { display:grid; gap:4px; }
.e-abo-label { font-size:12px; font-weight:700; letter-spacing:.8px; text-transform:uppercase; color:var(--gris); }
.e-abo select { padding:9px 12px; border-radius:10px; border:1.5px solid var(--ligne); background:var(--blanc); font:inherit; }

.e-def { display:grid; grid-template-columns:max-content 1fr; gap:8px 18px; margin:0 0 16px; font-size:15px; }
.e-def dt { font-weight:700; color:var(--gris); }
.e-def dd { margin:0; }

/* ---------- le tiroir ---------- */
.e-tiroir { width:min(760px,96vw); max-width:none; height:100dvh; max-height:100dvh; margin:0 0 0 auto; padding:0; border:0;
  background:var(--creme); color:var(--encre); grid-template-rows:auto 1fr; }
.e-tiroir[open] { display:grid; }
.e-tiroir::backdrop { background:rgba(11,42,26,.45); }
.e-tiroir-tete { display:flex; align-items:flex-start; justify-content:space-between; gap:16px;
  padding:20px 22px 16px; border-bottom:1.5px solid var(--ligne); background:var(--blanc); }
.e-tiroir-sur { margin:0; font-size:12px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--gris); }
.e-tiroir-titre { margin:2px 0 0; font-size:21px; }
.e-tiroir-x { width:38px; height:38px; flex:none; display:grid; place-items:center; border:1.5px solid var(--ligne);
  border-radius:10px; background:var(--blanc); color:var(--encre); cursor:pointer; }
.e-tiroir-x .ic { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; }
.e-tiroir-corps { overflow-y:auto; padding:22px; }
.e-tiroir-actions { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 14px; }
.e-tiroir-pdf { width:100%; height:calc(100dvh - 210px); min-height:380px; border:1.5px solid var(--ligne);
  border-radius:12px; background:var(--blanc); display:block; }
.e-verif-ok { margin:0 0 16px; padding:12px 15px; border-radius:12px; background:var(--vert-pale);
  color:var(--vert-fonce); font-weight:600; }

/* ---------- la vue invitée ---------- */
.e-bandeau-invite { margin:0 0 24px; padding:14px 16px; border-radius:12px;
  border:1.5px solid #b98900; background:#fff8e6; color:#4a3a00; font-size:15px; line-height:1.5; }

/* ---------- mobile ---------- */
@media (max-width:900px) {
  /* `1fr` et non `minmax(0,1fr)` laissait la piste prendre la largeur de son
     contenu : à 320 px, l'en-tête et la vue mesuraient 329 px. Neuf pixels ne
     se voient pas, mais ils font déborder la page dès qu'un mot est long. */
  .e-app { grid-template-columns:minmax(0,1fr); grid-template-areas:"top" "vue"; }
  .e-burger { display:grid; }
  .e-nav { position:fixed; inset:0 auto 0 0; width:min(282px,86vw); height:100dvh; z-index:20;
    transform:translateX(-101%); transition:transform .22s var(--ease); }
  .e-nav.ouvert { transform:none; box-shadow:var(--ombre-lg); }
  .e-vue { padding:22px 18px 56px; }
  .e-accueil { grid-template-columns:1fr; }
  .e-session { display:none; }
  .e-tiroir { width:100vw; }
}

/* ======================================================================
   LA FICHE D'UN PROJET, DANS L'ESPACE
   ----------------------------------------------------------------------
   Ces styles vivaient dans pages.css, au temps où l'espace était une page
   du site. La coquille de l'application ne charge plus pages.css : la
   fiche s'affichait donc sans aucune mise en forme, et ça se voyait. Ils
   sont ici, avec le reste de l'espace, parce que c'est le seul endroit
   qui les utilise.
   ====================================================================== */

/* ---------- la fiche du projet ---------- */
.ep { display:grid; gap:26px; }
/* L'EN-TÊTE TENAIT SUR UNE PHOTO PLEINE LARGEUR de six cents pixels de haut :
   il fallait faire défiler pour apprendre quoi que ce soit, et la page
   ressemblait à un album. Sur écran large, la photo prend la moitié gauche et
   l'identité du projet la moitié droite ; tout ce qui compte tient au-dessus
   de la ligne de flottaison. */
.ep-tete { display:grid; gap:18px; align-items:center; }
.ep-photo { display:block; }
.ep-photo img { width:100%; height:auto; aspect-ratio:3/2; object-fit:cover; border-radius:16px; display:block; }
@media (min-width:860px) {
  .ep-tete { grid-template-columns:minmax(0,1.05fr) minmax(0,1fr); gap:26px; }
}
.ep-sur { margin:0; font-size:13px; font-weight:700; color:var(--gris,#6b6b6b); display:flex; align-items:center; gap:6px; }
.ep-sur .ic { width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:2; }
.ep-titre h2 { margin:6px 0 0; font-size:25px; line-height:1.2; }
.ep-type { margin:6px 0 0; color:var(--gris,#6b6b6b); }

/* La part : l'anneau et le chiffre côte à côte. */
.ep-part { display:flex; align-items:center; gap:18px; padding:18px; border-radius:14px;
  border:1.5px solid var(--vert,#17603a); background:var(--blanc,#fff); }
.ep-anneau { width:84px; height:84px; flex:none; }
.ep-anneau-fond { fill:none; stroke:var(--ligne,#e4e0d8); stroke-width:11; }
.ep-anneau-part { fill:none; stroke:var(--vert,#17603a); stroke-width:11; stroke-linecap:round; }
.ep-part-titre { margin:0; font-size:12px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--gris,#6b6b6b); }
.ep-part-chiffre { margin:4px 0 0; font-size:22px; font-weight:800; color:var(--vert,#17603a); font-variant-numeric:tabular-nums; }
.ep-part-detail { margin:6px 0 0; font-size:13px; line-height:1.5; color:var(--gris,#6b6b6b); font-weight:400; }

/* Les sections s'empilaient toutes sur une colonne : sept blocs de texte à la
   file, séparés par un filet, c'est un document, pas un tableau de bord. Les
   blocs courts — chiffres, essences, ODD, méthode — se rangent à droite sur
   grand écran ; le récit et le parcours, qui se lisent, gardent la colonne
   principale. En dessous, tout revient sur une colonne, dans l'ordre du
   gabarit, qui est déjà l'ordre de lecture. */
@media (min-width:1180px) {
  .ep { grid-template-columns:minmax(0,1.55fr) minmax(0,1fr); align-items:start; column-gap:32px; }
  .ep-tete, .ep-part, .ep-mot { grid-column:1 / -1; }
  .ep-bloc[data-col="large"] { grid-column:1; }
  .ep-bloc[data-col="cote"] { grid-column:2; }
}

.ep-bloc { padding-top:22px; border-top:1.5px solid var(--ligne,#e4e0d8); }
.ep-bloc h3 { margin:0 0 12px; font-size:18px; display:flex; align-items:center; gap:8px; }
.ep-bloc h3 .ic { width:19px; height:19px; flex:none; fill:none; stroke:currentColor; stroke-width:2; color:var(--vert,#17603a); }
.ep-bloc p { margin:0 0 10px; line-height:1.6; }
.ep-intro { color:var(--gris,#6b6b6b); font-size:14px; }

.ep-chiffres { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; margin:0; }
.ep-chiffres div { padding:12px 14px; border-radius:11px; background:var(--blanc,#fff); border:1.5px solid var(--ligne,#e4e0d8); }
.ep-chiffres dt { font-size:12px; font-weight:700; letter-spacing:.7px; text-transform:uppercase; color:var(--gris,#6b6b6b); }
.ep-chiffres dd { margin:5px 0 0; font-size:18px; font-weight:800; font-variant-numeric:tabular-nums; }

/* Le parcours : un rail, une pastille par étape. Les étapes à venir sont
   creuses et en pointillé — la différence entre un fait et une échéance doit
   se voir sans lire. */
.ep-parcours { list-style:none; margin:0; padding:0 0 0 26px; position:relative; }
.ep-parcours::before { content:""; position:absolute; left:6px; top:6px; bottom:6px; width:2px; background:var(--ligne,#e4e0d8); }
.ep-etape { position:relative; padding:0 0 20px; }
.ep-etape:last-child { padding-bottom:0; }
.ep-puce { position:absolute; left:-26px; top:4px; width:14px; height:14px; border-radius:50%;
  border:2.5px solid var(--vert,#17603a); background:var(--vert,#17603a); }
.ep-etape.est-avenir .ep-puce { background:var(--creme,#faf8f3); border-style:dashed; border-color:var(--gris,#6b6b6b); }
.ep-etape-date { margin:0; font-size:12.5px; font-weight:700; color:var(--vert,#17603a); text-transform:uppercase; letter-spacing:.6px; }
.ep-etape.est-avenir .ep-etape-date { color:var(--gris,#6b6b6b); }
.ep-avenir { font-weight:400; text-transform:none; letter-spacing:0; }
.ep-etape h4 { margin:4px 0 4px; font-size:16px; }
.ep-etape p { margin:0; font-size:14px; line-height:1.55; color:var(--gris,#6b6b6b); }

.ep-puces { list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:8px; }
.ep-puces li { padding:6px 12px; border-radius:999px; border:1.5px solid var(--ligne,#e4e0d8); background:var(--blanc,#fff); font-size:14px; }

.ep-coben { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.ep-coben li { padding:14px 16px; border-radius:12px; background:var(--blanc,#fff); border:1.5px solid var(--ligne,#e4e0d8); }
.ep-coben strong { display:block; margin:6px 0 0; }
.ep-coben p { margin:6px 0 0; font-size:14px; line-height:1.55; color:var(--gris,#6b6b6b); }
.ep-famille { display:inline-block; font-size:11.5px; font-weight:700; letter-spacing:.8px; text-transform:uppercase;
  padding:3px 9px; border-radius:999px; background:var(--vert,#17603a); color:#fff; }

.ep-odd { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.ep-odd li { display:flex; gap:12px; align-items:flex-start; }
.ep-odd-n { flex:none; width:34px; height:34px; display:grid; place-items:center; border-radius:9px;
  background:var(--vert,#17603a); color:#fff; font-weight:800; font-variant-numeric:tabular-nums; }
.ep-odd p { margin:4px 0 0; font-size:14px; line-height:1.55; color:var(--gris,#6b6b6b); }

.ep-def { display:grid; grid-template-columns:max-content 1fr; gap:8px 16px; margin:0; font-size:14px; }
.ep-def dt { font-weight:700; color:var(--gris,#6b6b6b); }
.ep-def dd { margin:0; }
.ep-note { margin:14px 0 0; font-size:13px; line-height:1.55; color:var(--gris,#6b6b6b); }

.ep-mot { margin:0; padding:18px 20px; border-left:3px solid var(--vert,#17603a); background:var(--blanc,#fff); border-radius:0 12px 12px 0; }
.ep-mot p { margin:0; font-style:italic; line-height:1.6; }
.ep-mot footer { margin:10px 0 0; font-size:13px; font-weight:700; }
.ep-mot footer span { display:block; font-weight:400; color:var(--gris,#6b6b6b); }


/* Les familles de co-bénéfices : sept badges du même vert n'aident personne à
   s'y retrouver. Une couleur par famille, prise dans la palette du site. */
.ep-fam-biodiversite { background:var(--vert); }
.ep-fam-eau { background:#2A6E8F; }
.ep-fam-sol { background:var(--terre); }
.ep-fam-social, .ep-fam-territoire { background:var(--ble); }
.ep-fam-paysage { background:var(--vert-fonce); }
.ep-fam-climat { background:var(--vert-nuit); }

/* Notes sous une contribution : cadeau à venir, renouvellement. */
.e-contrib-note { margin:8px 0 0; font-size:13px; line-height:1.5; color:var(--gris); }

/* « Ce qui va se passer » : la seule section prospective de l'espace. */
.e-suites ul { list-style:none; margin:0; padding:0; display:grid; gap:10px; }
.e-suites li { display:flex; flex-wrap:wrap; gap:6px 16px; align-items:baseline; justify-content:space-between;
  padding:14px 18px; border-radius:12px; background:var(--blanc); border:1.5px solid var(--ligne); }
.e-suites li a { color:var(--encre); text-decoration:none; }
.e-suites li a:hover { color:var(--vert); }
.e-suites li span { font-size:14px; color:var(--vert); font-weight:700; }

/* L'espace vide : il arrive souvent, puisqu'on peut créer son compte avant
   d'avoir contribué. Il doit proposer un chemin, pas constater un manque. */
.e-accueil-vide { padding:34px 30px; border-radius:16px; border:1.5px dashed var(--ligne); background:var(--blanc); }
.e-accueil-vide h2 { margin:0 0 10px; font-size:21px; }
.e-accueil-vide p { margin:0 0 12px; line-height:1.6; max-width:62ch; }
.e-accueil-vide .e-actions { margin-top:20px; }
.e-actions { display:flex; flex-wrap:wrap; gap:10px; align-items:center; }

/* ---------- très petits écrans ----------
   320 px reste une largeur réelle : iPhone SE en zoom, fenêtre réduite à côté
   d'un éditeur, navigateur d'une montre connectée mis à part. Les marges se
   resserrent, les boutons passent pleine largeur, et rien ne déborde. */
@media (max-width:420px) {
  .e-top { padding:12px 14px; gap:10px; }
  .e-titre { font-size:17px; }
  .e-vue { padding:18px 14px 48px; }
  .e-carte, .e-accueil-vide { padding:20px 16px; }
  .e-contrib, .e-abo, .e-suites li { padding:15px 16px; }
  .e-kpi { grid-template-columns:1fr; gap:10px; }
  .e-kpi-case dd { font-size:23px; }
  .e-projets { grid-template-columns:1fr; }
  .e-contrib-actions { align-items:flex-start; }
  .e-contrib-actions .btn { width:100%; justify-content:center; }
  .e-tiroir-corps { padding:16px 14px 30px; }
  .ep-chiffres { grid-template-columns:1fr; }
  .ep-def, .e-def { grid-template-columns:1fr; gap:2px 0; }
  .ep-def dt, .e-def dt { margin-top:8px; }
  .e-abo { display:grid; }
  .e-abo select { width:100%; }
}

/* Entre le téléphone et la tablette, les cartes de contribution gagnent à
   poser leurs boutons sur une ligne pleine plutôt qu'à les serrer. */

/* ---------- ce qui débordait, et pourquoi ----------
   Une piste de grille vaut par défaut `minmax(auto, 1fr)` : sa largeur
   minimale est celle de son contenu, pas zéro. Un code de certificat comme
   « CERT-2026-000042 » ne se coupe nulle part ; il imposait donc sa longueur
   à la carte, la carte à la liste, et la liste à la page. À 320 px, la carte
   mesurait 327. On ferme les deux bouts : les pistes descendent à zéro, et
   les identifiants ont le droit de se couper. */
.e-contribs, .e-abos, .e-suites ul, .e-projets { grid-template-columns:minmax(0,1fr); }
.e-projets { grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr)); }
.e-contrib, .e-abo, .e-suites li, .e-projet, .e-kpi-case { min-width:0; }
.e-contrib-corps, .e-contrib-tete, .e-contrib-meta, .e-contrib-actions, .e-projet-corps { min-width:0; }
.e-contrib-meta, .e-contrib-note, .e-def dd, .ep-def dd { overflow-wrap:anywhere; }
.e-contrib-projet, .e-projet strong, .e-suites li a { overflow-wrap:anywhere; }
.e-tiroir-corps, .e-tiroir-tete { min-width:0; }
.e-tiroir-titre, .e-tiroir-sur { overflow-wrap:anywhere; }
/* La fiche du projet, mêmes causes. */
.ep, .ep-tete, .ep-titre, .ep-bloc, .ep-part { min-width:0; }
.ep-chiffres, .ep-coben, .ep-odd { grid-template-columns:minmax(0,1fr); }
.ep-chiffres { grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr)); }
.ep-chiffres div, .ep-coben li, .ep-odd li { min-width:0; }
.ep-titre h2, .ep-etape h4, .ep-coben strong { overflow-wrap:anywhere; }

/* Découvrir d'autres projets, et le statut « financé » d'un projet suivi. */
.e-projet-finance, .e-projet-proche { display:inline-block; width:max-content; font-size:11.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; border-radius:999px; padding:3px 9px; }
.e-projet-finance { background:var(--vert-pale, #E4EFE7); color:var(--vert, #1F7A3F); }
.e-projet-proche { background:#FFF4DC; color:#7A5A12; }
.e-projet-nouveau { border-style:dashed; }
.e-projet-nouveau:hover, .e-projet-nouveau:focus-visible { border-style:solid; }
