/* =========================================================================
   fiche.css — Vue 2 « Fiche société » (#/fiche/{no}).
   Header L8 XL DÉFILANT (MISSION2 2.1) + mini-barre sticky compacte qui
   surgit quand le header sort de l'écran — tous deux en verre FROST pur
   depuis MISSION3 3.1 (la lentille SVG produisait des fantômes au scroll) ;
   corps 2 colonnes : rail CRM collant à GAUCHE (MISSION2 2.3 / MISSION3 3.2
   — saisie d'interactions à la place de « Prochaine action & note »),
   dossier en accordéons à droite. Couleurs prises dans les variables
   d'app.css (thème NUIT unique) — aucune couleur accent en dur.
   MISSION4 2-3 & 6 : palette sémantique FIXE (--gold favoris, --rdv agenda,
   --task relances dues, --notif non-vu) posée par app.css — chaque usage ici
   porte un repli local var(--x, #hex) tant que les tokens ne sont pas livrés.
   La lumière = information (jamais décorative), reduced-motion respecté.
   Pas d'animation d'ambiance ici (css/anim.css, phase finale) —
   transitions d'interaction ≤ 200 ms uniquement.
   ========================================================================= */

/* ---------- 1. Header L8 XL (défile normalement) --------------------------- */
/* MISSION3 3.1 : header & mini-barre en verre FROST pur — plus de lentille
   SVG (fantômes de texte au bord des cadres pendant le scroll). Le flou fort
   + reflet spéculaire viennent de la classe PARTAGÉE `.glass-frost`
   (app.css §14) posée par fiche.js — ne rester ici que le spécifique vue. */
.fiche-head{position:relative;z-index:40;border-radius:var(--radius);
  /* ombre profonde de l'ancienne lentille conservée */
  box-shadow:0 12px 34px rgba(0,0,0,.30),inset 0 1px 0 var(--rim);
  /* MISSION4 6 : le fondu d'extinction du glow « non vue » (~0,9 s). */
  transition:box-shadow .9s ease}
@media (prefers-reduced-motion:reduce){
  /* Reduced-motion : le glow disparaît sèchement, sans fondu. */
  .fiche-head{transition:none}
}
/* MISSION4 6 + MISSION5 §1 : société non-vue — à l'ouverture le header
   s'allume (~2 s, classe posée puis retirée par fiche.js) : moment « lu ».
   Le liseré ROUGE --notif a disparu au profit d'un HALO DE LUMIÈRE partagé
   (--glow-strong / --lum d'app.css §16b, mêmes tokens que la liste, le
   kanban et l'agenda) + flottement `.lum-float` posé par fiche.js.
   Spécificité .glass.fiche-head.seen-glow (0-3-0) : bat les surcharges
   .glass d'app.css (fiche.css est chargé après) — sans quoi `.lum-glow`
   (0-1-0) resterait sans effet ici.
   Repli local si les tokens F1 ne sont pas livrés : blanc chaud #fff7e6. */
.glass.fiche-head.seen-glow{
  box-shadow:var(--glow-strong,
    0 0 0 1.5px color-mix(in srgb, #fff7e6 82%, transparent),
    0 0 18px color-mix(in srgb, #fff7e6 60%, transparent),
    0 0 46px color-mix(in srgb, #fff7e6 34%, transparent),
    inset 0 0 26px color-mix(in srgb, #fff7e6 16%, transparent))}
.fiche-head .lg-content{padding:28px}
.fh-row1{display:flex;gap:18px;align-items:flex-start}
.fh-back{flex:none}
.fh-id{flex:1;min-width:0}
.fh-name{font-size:clamp(24px,3vw,32px);font-weight:800;letter-spacing:-.03em;line-height:1.15;margin:4px 0 12px;overflow-wrap:anywhere}
.fh-chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.fh-chips .chip{max-width:340px;overflow:hidden;text-overflow:ellipsis}
.chip-more{cursor:pointer;background:none;font:inherit;transition:border-color .16s,color .16s}
.chip-more:hover{border-color:var(--accent-ink);color:var(--accent-ink)}
.fh-extra{display:none;flex-wrap:wrap;gap:8px;align-items:center}
.fh-extra.open{display:flex}
/* Audit M5 : chip cliquable « Site web » (identité) — même forme que les
   autres chips, couleur d'accent pour dire qu'elle ouvre quelque chose. */
a.chip-site{text-decoration:none;color:var(--accent-ink);cursor:pointer;
  transition:border-color .16s,background .16s}
a.chip-site:hover{border-color:var(--accent-ink);
  background:color-mix(in srgb, var(--accent) 12%, transparent)}
a.chip-site .ic{flex:none}
/* MISSION5 §11a : badge « Ajout manuel » — discret mais lisible, teinte
   violette de la palette sémantique (ni accent, ni couleur d'alerte : ce
   n'est pas un problème, c'est une PROVENANCE). */
.chip.manual-chip{display:inline-flex;align-items:center;gap:5px;
  color:color-mix(in srgb, var(--violet) 45%, var(--txt));
  border-color:color-mix(in srgb, var(--violet) 45%, transparent);
  background:color-mix(in srgb, var(--violet) 14%, transparent)}
.chip.manual-chip .ic{flex:none}

/* Anneau de score SVG 84 px + lettre de note au centre */
.fh-score{flex:none;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:118px;text-align:center}
.ring-wrap{position:relative;width:84px;height:84px}
.ring-svg{width:84px;height:84px;display:block}
.ring-track{fill:none;stroke:var(--line);stroke-width:7}
.ring-val{fill:none;stroke:var(--accent);stroke-width:7;stroke-linecap:round}
.ring-note{position:absolute;inset:0;display:grid;place-items:center;font-size:26px;font-weight:800;letter-spacing:-.02em}
.ring-note[data-note="A"]{color:var(--ok)}
.ring-note[data-note="B"]{color:var(--accent-ink)}
.ring-note[data-note="C"]{color:var(--warn)}
.ring-note[data-note="D"],.ring-note[data-note="E"],.ring-note[data-note="—"]{color:var(--dim)}
.fh-on100{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}
.fh-on100 .den{color:var(--dim);font-weight:600}
.fh-conf{font-size:11.5px;color:var(--muted);max-width:150px;line-height:1.4}

/* Jauges d'axes (Attractivité du dossier / Ouverture à une cession) */
.fh-axes{display:flex;flex-wrap:wrap;gap:14px 28px;margin-top:20px}
.axg{width:220px;max-width:100%}
.axg-head{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;font-weight:640;margin-bottom:5px}
.axg-lbl{color:var(--muted)}
.axg-val{font-variant-numeric:tabular-nums;color:var(--txt)}
.axg-track{height:6px;border-radius:4px;background:var(--line);overflow:hidden}
.axg-fill{display:block;height:100%;border-radius:4px;
  background:linear-gradient(90deg,var(--accent),var(--accent2))}

/* Barre d'actions */
.fh-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:20px}
.fh-actions .btn[disabled]{opacity:.45;cursor:not-allowed;transform:none}
/* MISSION4 2-3 : étoile favori DORÉE partout (palette sémantique fixe —
   plus jamais la couleur accent). Remplie or + halo doux PERMANENT
   (drop-shadow léger) ; le pop à l'ajout reste App.starPop (core).
   Vaut pour le header ET la mini-barre (même classe .fh-star). */
.fh-star .ic{transition:color .16s,filter .2s}
.fh-star.on{background:color-mix(in srgb, var(--gold,#ffd60a) 16%, transparent);
  border-color:color-mix(in srgb, var(--gold,#ffd60a) 60%, transparent)}
.fh-star.on .ic{color:var(--gold,#ffd60a);fill:var(--gold,#ffd60a);
  filter:drop-shadow(0 0 5px color-mix(in srgb, var(--gold,#ffd60a) 70%, transparent))}

/* Popover RDV (MISSION2 2.2 : formulaire → enregistrement → choix d'agenda) */
.rdv-wrap{position:relative}
/* Fond solide autonome (PAS de .glass : backdrop-filter imbriqué dans la
   lentille du header = artefacts de rendu). */
.rdv-pop{position:absolute;top:calc(100% + 8px);left:0;z-index:60;width:320px;
  padding:14px;background:var(--panel-solid);border:1px solid var(--line);
  border-radius:16px;box-shadow:0 18px 44px rgba(0,0,0,.35)}
.rdv-pop.right{left:auto;right:0}
.rdv-form,.rdv-choices{display:flex;flex-direction:column;gap:10px}
.rdv-form.hidden,.rdv-choices.hidden{display:none}
.rdv-cap{font-weight:700;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rdv-pop .fld label{display:block;font-size:11.5px;color:var(--muted);margin-bottom:4px}
.rdv-hint{font-size:11.5px;color:var(--dim);line-height:1.45}
.rdv-row{display:flex;gap:10px}
.rdv-row .fld{flex:1;min-width:0}
/* Le datetime-local français (« 23/07/2026 10:00 ») a besoin de ~175 px :
   à 50/50 les minutes étaient rognées hors du champ. */
.rdv-row .fld-dt{flex:1.7;min-width:175px}
.rdv-choice{display:flex;gap:10px;align-items:center;padding:9px 10px;border-radius:11px;
  border:1px solid var(--line);background:var(--glass);color:var(--txt);text-decoration:none;
  transition:border-color .16s,background .16s}
.rdv-choice:hover{border-color:color-mix(in srgb, var(--accent) 55%, transparent);
  background:color-mix(in srgb, var(--accent) 9%, transparent)}
/* MISSION4 2-3 : l'agenda parle --rdv, jusque dans le choix des agendas. */
.rdv-choice .ic{flex:none;color:color-mix(in srgb, var(--rdv,#64d2ff) 78%, var(--txt))}
.rc-body{flex:1;min-width:0;display:flex;flex-direction:column}
.rc-lbl{font-size:13px;font-weight:700}
.rc-sub{font-size:11.5px;color:var(--dim);line-height:1.4}

/* MISSION4 2-3 : boutons calendrier (header b22 + mini-barre b4) en --rdv —
   icône teintée + liseré discret, glow léger au survol (lumière = info). */
.rdv-btn .ic{color:color-mix(in srgb, var(--rdv,#64d2ff) 78%, var(--txt))}
.btn.b22.rdv-btn,.btn.b4.rdv-btn{
  border-color:color-mix(in srgb, var(--rdv,#64d2ff) 36%, transparent)}
.btn.b22.rdv-btn:hover,.btn.b4.rdv-btn:hover{
  border-color:color-mix(in srgb, var(--rdv,#64d2ff) 62%, transparent);
  background:color-mix(in srgb, var(--rdv,#64d2ff) 10%, transparent);
  box-shadow:0 0 12px -3px color-mix(in srgb, var(--rdv,#64d2ff) 55%, transparent)}

/* ---------- 1bis. Mini-barre sticky compacte (MISSION2 2.1) ----------------
   Fixée en haut (56 px, verre) ; invisible tant que le header est à l'écran,
   apparition 200 ms quand il en sort (classe .show via IntersectionObserver).
   z-index 100 : au-dessus du wordmark (90) et des pastilles du coin haut-gauche
   (95), qui s'imprimaient PAR-DESSUS le nom de la société ; SOUS le chat (120) et
   tout ce qui doit couvrir la page (toast 400, recherche 460, modale 500,
   écran de connexion 560, tooltip global 640). */
.fiche-minibar{position:fixed;top:10px;left:12px;right:12px;margin:0 auto;
  max-width:1136px;z-index:100;border-radius:16px;
  opacity:0;transform:translateY(-14px);pointer-events:none;
  transition:opacity .2s ease,transform .2s ease}
.fiche-minibar.show{opacity:1;transform:none;pointer-events:auto}
@media (prefers-reduced-motion:reduce){
  .fiche-minibar{transition:none}
}
/* width:100% : neutralise le centrage grid de `.lens` (kit) sur ce contenu. */
.fiche-minibar .lg-content.mb-inner{display:flex;align-items:center;gap:12px;
  min-height:56px;padding:8px 14px;width:100%}
/* Teinte de fond : garde le contenu net lisible par-dessus la page. */
.fiche-minibar{background:color-mix(in srgb, var(--panel-solid) 86%, transparent)}
.mb-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-weight:760;font-size:15px;letter-spacing:-.01em}
.mb-score{flex:none;font-weight:740;font-variant-numeric:tabular-nums;font-size:13px}
.mb-score .den{color:var(--dim);font-weight:600}
.mb-actions{display:flex;gap:8px;align-items:center;flex:none}
.mb-actions .btn.b4{width:38px;height:38px}
.mb-actions .btn[disabled]{opacity:.45;cursor:not-allowed;transform:none}
@media (max-width:560px){
  .fiche-minibar .note-badge,.mb-score{display:none}
}
/* Généralisation du correctif M3, qui ne couvrait que le wordmark sous 640 px
   en supposant qu'« en desktop la barre centrée démarre après le logo » —
   hypothèse fausse. Le wordmark (left 20 px), la pastille du profil (118 px)
   et le slot voisin (262 px) sont fixés en haut à GAUCHE, la barre est
   CENTRÉE : son bord gauche vaut max(12px, (100vw - 1136px)/2), donc reste
   dans la zone des pastilles tant que la fenêtre n'est pas très large. Le
   chevauchement est le cas NORMAL, pas un cas limite mobile.
   La barre passant désormais au-dessus (z-index 100), ce trio s'efface tant
   qu'elle est là — sinon il resterait visible sous le verre.
   PORTÉE (correctif d'audit) : masquer CE QUI NE SE CHEVAUCHE PAS coûte une
   fonction sans rien régler — le menu profil (donc la déconnexion) devenait
   inatteignable pendant toute la lecture d'une fiche, y compris sur un écran
   où rien ne se superpose. Le trio s'étend jusqu'à ~382 px (slot à 262 px +
   sa pastille) ; la barre démarre après lui dès que (100vw - 1136)/2 ≥ 382,
   soit 1960 px. Au-delà, on ne masque plus rien.
   visibility:hidden (appliqué APRÈS le fondu, d'où le délai) sort aussi ces
   commandes du parcours clavier : sans lui on tabulerait sur des boutons
   invisibles. Tout revient dès qu'on remonte (la classe tombe) ou qu'on quitte
   la fiche (cleanupBar, js/views/fiche.js).
   Deux pilotes pour le même état : `body.minibar-on`, posé par la vue fiche
   (qui ne touche AUCUN nœud appartenant à un autre module), et `:has(.show)`
   — le levier d'origine du correctif M3 — gardé en filet si la classe venait
   à manquer.
   Le slot voisin porte les MÊMES règles dans la feuille injectée par SON
   module : une feuille de style est servie à tout le monde, elle ne doit donc
   nommer aucun module à privilège (invariant d'étanchéité du bundle commun). */
@media (max-width:1959px){
  body.minibar-on .wordmark,
  body.minibar-on #auth-chip,
  body:has(.fiche-minibar.show) .wordmark,
  body:has(.fiche-minibar.show) #auth-chip{
    opacity:0;pointer-events:none;visibility:hidden;
    transition:opacity .16s ease,visibility 0s linear .16s}
}
/* Fondu au RETOUR : .wordmark porte déjà sa transition (app.css §3), pas la
   pastille de profil. */
#auth-chip{transition:opacity .16s ease}
@media (prefers-reduced-motion:reduce){
  body.minibar-on .wordmark,body.minibar-on #auth-chip,
  body:has(.fiche-minibar.show) .wordmark,
  body:has(.fiche-minibar.show) #auth-chip{transition:none}
}

/* ---------- 2. Corps 2 colonnes : rail à GAUCHE (MISSION2 2.3) ------------- */
.fiche-body{display:grid;grid-template-columns:380px 1fr;gap:20px;margin-top:20px;align-items:start}
.fiche-main{min-width:0}
.fiche-main .acc:first-child{margin-top:0}

@media (max-width:1100px){
  .fiche-body{grid-template-columns:1fr}
  /* Le rail (1er dans le DOM) passe naturellement au-dessus du dossier.
     !important : la règle sticky de la section 8 vient plus loin dans le
     fichier et gagnerait sinon. */
  .crm-rail{position:static!important;top:auto!important}
}
@media (max-width:640px){
  .fiche-head .lg-content{padding:18px}
  .fh-row1{flex-wrap:wrap}
  /* Le nom prend toute la largeur — le bloc score passe dessous au lieu
     d'écraser le titre (coupe lettre à lettre via overflow-wrap:anywhere). */
  .fh-id{flex:1 1 100%}
  .fh-score{align-items:flex-start;text-align:left}
}

/* ---------- 3. Carte « Pourquoi cette société » + décomposition ----------- */
.lead{font-size:16px;line-height:1.6;margin:0 0 4px;color:var(--txt)}
.rank-line{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;margin:10px 0 0;font-size:13px;color:var(--muted)}
.rank-pos{font-weight:800;color:var(--accent-ink);font-variant-numeric:tabular-nums}
.rank-neigh{font-size:12.5px;color:var(--dim);margin-top:2px}
.contrib{margin-top:14px}
.contrib-cap{font-size:12px;color:var(--dim);margin-bottom:2px}
.crit{padding:9px 0;border-bottom:1px solid var(--line)}
.crit:last-child{border-bottom:none}
.crit-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline;font-size:13.5px}
.crit-lbl{font-weight:660;min-width:0}
.crit-pts{flex:none;font-weight:760;color:var(--accent-ink);font-variant-numeric:tabular-nums}
.cbar{height:6px;border-radius:4px;background:var(--line);overflow:hidden;margin:6px 0 5px}
.cbar>span{display:block;height:100%;border-radius:4px;
  background:linear-gradient(90deg,var(--accent),var(--accent2))}
.crit-phrase{font-size:12.5px;color:var(--muted)}
.crit-expl{font-size:12px;color:var(--dim);margin-top:3px;line-height:1.5}
.axe-cap{font-size:12px;font-weight:760;color:var(--accent-ink);letter-spacing:.02em;
  text-transform:uppercase;margin:16px 0 2px}
.axe-cap:first-child{margin-top:0}
.tech-note{font-size:11.5px;color:var(--dim);margin-top:12px}

/* ---------- 4. Finances (tables, sparklines, benchmarks, indicateurs) ----- */
.ftbl-wrap{overflow-x:auto;margin:4px 0 6px}
.ftbl{width:100%;border-collapse:collapse;font-size:13px;min-width:460px}
.ftbl th{font-weight:640;color:var(--muted);text-align:right;padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.ftbl th:first-child{text-align:left}
.ftbl td{padding:7px 10px;text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line);white-space:nowrap}
.ftbl tr:last-child td{border-bottom:none}
.ftbl td.lbl{text-align:left;color:var(--muted);font-weight:600;white-space:normal}
.ftbl td.na{color:var(--dim)}
.spark-cap{font-size:12px;color:var(--dim);margin:12px 0 3px}
.sparkline{display:block;max-width:100%}
.sparkline path{stroke:var(--accent)}
.sparkline circle{fill:var(--accent)}
.bm{padding:11px 0;border-bottom:1px solid var(--line)}
.bm:last-child{border-bottom:none}
.bm-head{display:flex;justify-content:space-between;gap:10px;font-size:13px;margin-bottom:7px}
.bm-lbl{font-weight:660;min-width:0}
.bm-val{flex:none;color:var(--muted)}
.bm-scale{position:relative;height:22px;border-radius:7px;
  background:linear-gradient(90deg,
    color-mix(in srgb, var(--accent) 7%, transparent),
    color-mix(in srgb, var(--accent) 22%, transparent))}
.bm-q{position:absolute;top:3px;bottom:3px;width:2px;border-radius:1px;background:var(--dim);opacity:.65}
.bm-marker{position:absolute;top:50%;width:13px;height:13px;margin:-6.5px 0 0 -6.5px;border-radius:50%;
  background:var(--accent);border:2px solid var(--panel-solid);box-shadow:0 2px 6px rgba(0,0,0,.35)}
.bm-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:6px;font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums}
.finx{margin-top:14px;border-top:1px solid var(--line)}
.finx-item{padding:9px 0;border-bottom:1px solid var(--line)}
.finx-item:last-child{border-bottom:none}
.finx-head{display:flex;justify-content:space-between;gap:10px;font-size:13px}
.finx-lbl{font-weight:660}
.finx-val{flex:none;font-weight:740;color:var(--accent-ink);font-variant-numeric:tabular-nums}
.finx-expl{font-size:12px;color:var(--dim);margin-top:3px;line-height:1.5}

/* ---------- 5. Dirigeants -------------------------------------------------- */
.dir{display:flex;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}
.dir:last-child{border-bottom:none}
.dir-orb{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;flex:none;
  background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent-ink)}
.dir-body{flex:1;min-width:0}
.dir-name{font-weight:700;font-size:14px}
.dir-meta{display:flex;flex-wrap:wrap;gap:5px 12px;font-size:12.5px;color:var(--muted);margin-top:2px;align-items:center}
.dir .btn{flex:none}

/* ---------- 6. Signaux ----------------------------------------------------- */
.sig{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.sig:last-child{border-bottom:none}
.sig .status-dot{margin-top:5px}
.sig.off .status-dot{background:var(--dim);opacity:.45}
.sig-lbl{font-size:13.5px;font-weight:660}
.sig.off .sig-lbl{color:var(--muted);font-weight:600}
.sig-expl{font-size:12px;color:var(--dim);margin-top:2px;line-height:1.5}
.sig-cap{font-size:12px;color:var(--dim);margin:14px 0 2px}
.sig-cap:first-child{margin-top:0}
.sigrow{display:flex;gap:10px;align-items:center;padding:7px 0;font-size:13px;border-bottom:1px solid var(--line)}
.sigrow:last-child{border-bottom:none}
.sigrow .ic{color:var(--muted);flex:none}
.sigrow-body{flex:1;min-width:0}
.sigrow-t{font-weight:640}
.sigrow-s{font-size:11.5px;color:var(--dim)}
.sigrow-aside{flex:none;font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums}

/* ---------- 7. Groupe / autres profils / provenance / historique ----------- */
.grp-total{display:flex;justify-content:space-between;gap:10px;align-items:baseline;
  padding:10px 12px;border-radius:11px;margin-bottom:8px;
  background:color-mix(in srgb, var(--accent) 9%, transparent);
  border:1px solid color-mix(in srgb, var(--accent) 26%, transparent)}
.grp-total-lbl{font-size:12.5px;color:var(--muted)}
.grp-total-val{font-weight:800;color:var(--accent-ink);font-variant-numeric:tabular-nums}
.grp-item{display:flex;gap:10px;align-items:center;width:100%;padding:9px 10px;border-radius:11px;
  border:none;background:none;color:var(--txt);font:inherit;font-size:13px;text-align:left;
  transition:background .16s}
button.grp-item{cursor:pointer}
button.grp-item:hover{background:color-mix(in srgb, var(--accent) 9%, transparent)}
.grp-item.current{background:var(--glass);cursor:default}
.grp-den{flex:1;min-width:0;font-weight:640;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grp-tres{flex:none;color:var(--muted);font-variant-numeric:tabular-nums}

.palt{display:flex;gap:10px;align-items:center;width:100%;padding:9px 10px;border-radius:11px;
  border:none;background:none;color:var(--txt);font:inherit;font-size:13.5px;text-align:left;
  cursor:pointer;transition:background .16s}
.palt:hover{background:color-mix(in srgb, var(--accent) 9%, transparent)}
.palt.current{background:color-mix(in srgb, var(--accent) 13%, transparent);cursor:default}
.palt-lbl{flex:1;min-width:0}
.palt-cur{font-size:11px;color:var(--dim)}
.palt-score{flex:none;font-weight:760;font-variant-numeric:tabular-nums}

.prov-note{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;color:var(--muted);
  line-height:1.5;padding:10px 12px;border-radius:11px;margin-bottom:6px;
  background:rgba(48,209,88,.09);border:1px solid rgba(48,209,88,.28)}
.prov-note .ic{color:var(--ok);flex:none;margin-top:1px}
.prov-row{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--line)}
.prov-row:last-child{border-bottom:none}
.prov-row .ic{color:var(--muted);flex:none;margin-top:2px}
.prov-body{flex:1;min-width:0}
.prov-src{font-weight:700;font-size:13.5px}
.prov-meta{font-size:12px;color:var(--muted);margin-top:2px}
.prov-meta a{color:var(--accent-ink)}
.prov-fields{flex:none;font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums;margin-top:3px}

.tl{display:flex;flex-direction:column}
.tl-item{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-bottom:1px solid var(--line)}
.tl-item:last-child{border-bottom:none}
.tl-kind{flex:none;margin-top:1px}
/* MISSION4 2-3 : les RDV de la timeline (Historique + Interactions) en --rdv
   — texte patiné vers --txt pour la lisibilité, la lumière (liseré + halo)
   reste le --rdv pur. */
.tl-kind.rdv{color:color-mix(in srgb, var(--rdv,#64d2ff) 72%, var(--txt));
  border-color:color-mix(in srgb, var(--rdv,#64d2ff) 46%, transparent);
  background:color-mix(in srgb, var(--rdv,#64d2ff) 10%, transparent);
  box-shadow:0 0 10px -3px color-mix(in srgb, var(--rdv,#64d2ff) 50%, transparent)}
.tl-body{flex:1;min-width:0}
.tl-sum{font-size:13px;line-height:1.45;overflow-wrap:anywhere}
.tl-date{font-size:11.5px;color:var(--dim);margin-top:1px}

/* ---------- 8. Rail CRM collant (colonne GAUCHE — MISSION2 2.3) ------------ */
/* top = hauteur mini-barre (56) + marge haute (10) + respiration (18).
   MISSION5 §7.1 : ordre vertical = Interactions → Tâches & relances →
   Parcours (stepper) → Brouillons (posé par fiche.js, pas par le CSS).
   MISSION5 §7.2 : le rail est nettement plus VOYANT — verre plus lumineux,
   liseré haut spéculaire, séparateurs et titres de section plus marqués. */
.crm-rail{position:sticky;top:84px;padding:18px;display:flex;flex-direction:column;
  background:color-mix(in srgb, #ffffff 5%, var(--glass));
  border-color:color-mix(in srgb, var(--lum,#fff7e6) 20%, var(--line));
  box-shadow:0 10px 30px rgba(0,0,0,.26),
    inset 0 1px 0 color-mix(in srgb, var(--lum,#fff7e6) 34%, transparent),
    inset 0 0 40px color-mix(in srgb, var(--lum,#fff7e6) 5%, transparent)}
.rail-title{display:flex;gap:9px;align-items:center;font-size:15.5px;font-weight:800;
  letter-spacing:-.01em;padding-bottom:12px;
  border-bottom:1px solid color-mix(in srgb, var(--lum,#fff7e6) 18%, var(--line))}
.rail-title .ic{color:var(--accent-ink)}
.rail-sec{padding:14px 0;border-bottom:1px solid var(--line)}
.rail-sec:last-child{padding-bottom:0;border-bottom:none}
/* Titre de section plus marqué : plus contrasté, avec un tiret lumineux. */
.rail-cap{display:flex;align-items:center;gap:8px;
  font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  color:color-mix(in srgb, var(--txt) 72%, var(--dim));margin-bottom:9px}
.rail-cap::before{content:"";flex:none;width:3px;height:13px;border-radius:2px;
  background:color-mix(in srgb, var(--lum,#fff7e6) 58%, var(--accent));
  box-shadow:0 0 8px color-mix(in srgb, var(--lum,#fff7e6) 40%, transparent)}

/* MISSION5 §7.2 — illumination à l'AJOUT : halo lumière multicouche + léger
   scale ~2 s, puis fondu vers l'état normal. `.lum-flash` = tâche créée
   (FORT) ; `.lum-flash-soft` = interaction ou bloc ajouté (plus doux).
   Les classes sont posées puis retirées par fiche.js (~2,1 s). */
@keyframes sfaLumFlash{
  0%{box-shadow:
      0 0 0 1.5px color-mix(in srgb, var(--lum,#fff7e6) 92%, transparent),
      0 0 22px color-mix(in srgb, var(--lum,#fff7e6) 72%, transparent),
      0 0 58px 6px color-mix(in srgb, var(--lum,#fff7e6) 38%, transparent),
      inset 0 0 26px color-mix(in srgb, var(--lum,#fff7e6) 22%, transparent);
     transform:scale(1.03);
     background:color-mix(in srgb, var(--lum,#fff7e6) 20%, transparent)}
  40%{box-shadow:
      0 0 0 1.5px color-mix(in srgb, var(--lum,#fff7e6) 78%, transparent),
      0 0 18px color-mix(in srgb, var(--lum,#fff7e6) 54%, transparent),
      0 0 46px 3px color-mix(in srgb, var(--lum,#fff7e6) 26%, transparent),
      inset 0 0 22px color-mix(in srgb, var(--lum,#fff7e6) 14%, transparent);
     transform:scale(1.012);
     background:color-mix(in srgb, var(--lum,#fff7e6) 13%, transparent)}
  100%{box-shadow:0 0 0 0 transparent;transform:none;background:transparent}
}
@keyframes sfaLumFlashSoft{
  0%{box-shadow:var(--glow-soft,0 0 0 1px rgba(255,247,230,.58),0 0 14px rgba(255,247,230,.34));
     background:color-mix(in srgb, var(--lum,#fff7e6) 10%, transparent)}
  100%{box-shadow:0 0 0 0 transparent;background:transparent}
}
.lum-flash{animation:sfaLumFlash 2s ease-out;position:relative;z-index:1;
  will-change:transform,box-shadow}
.lum-flash-soft{animation:sfaLumFlashSoft 2s ease-out;position:relative;z-index:1;
  will-change:box-shadow}
/* Les cibles sans rayon propre (ligne de tâche, ligne de timeline) en
   reçoivent un le temps de l'illumination — le halo ne doit pas dessiner un
   rectangle à angles vifs. Les blocs `.tb-block` gardent le leur (12 px). */
.task-row.lum-flash,.tl-item.lum-flash-soft{border-radius:10px}
/* Hook de CAPTURE uniquement (?newtask=…, posé par fiche.js) : fige
   l'animation sur sa première image pour photographier l'illumination —
   sous temps virtuel headless, les 2 s sont écoulées avant le screenshot. */
.lum-flash.lum-hold,.lum-flash-soft.lum-hold{animation-play-state:paused}
@media (prefers-reduced-motion:reduce){
  /* Mouvement réduit : surbrillance STATIQUE (aucun scale, aucun fondu) —
     retirée par le même setTimeout de fiche.js. */
  .lum-flash,.lum-flash-soft{animation:none;transform:none;
    box-shadow:var(--glow-soft,0 0 0 1px rgba(255,247,230,.58));
    background:color-mix(in srgb, var(--lum,#fff7e6) 12%, transparent)}
}

/* Stepper vertical des 5 étapes */
.stepper{display:flex;flex-direction:column;gap:2px}
.step{display:flex;gap:10px;align-items:center;width:100%;padding:7px 8px;border-radius:10px;
  border:none;background:none;cursor:pointer;color:var(--muted);font:inherit;font-size:13.5px;
  text-align:left;transition:background .16s,color .16s}
.step:hover{background:color-mix(in srgb, var(--accent) 8%, transparent);color:var(--txt)}
.step.on{color:var(--accent-ink);font-weight:740;
  background:color-mix(in srgb, var(--accent) 14%, transparent);cursor:default}
.step-mark{position:relative;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  flex:none;border:1px solid var(--line);background:var(--glass);font-size:11px;font-weight:740;
  color:var(--dim);transition:border-color .16s,background .16s}
.step-mark .ic{width:12px;height:12px}
.step.done .step-mark{color:var(--ok);border-color:rgba(48,209,88,.55)}
.step.on .step-mark{color:var(--accent-ink);
  border-color:color-mix(in srgb, var(--accent) 65%, transparent);
  background:color-mix(in srgb, var(--accent) 22%, transparent)}
.step:not(:last-child) .step-mark::after{content:"";position:absolute;top:25px;left:50%;
  width:1px;height:13px;background:var(--line)}
.step-lbl{flex:1;min-width:0}
.step-guard-hint{font-size:11px;color:var(--dim);margin:6px 0 0 42px;line-height:1.45}

/* Prochaine action (N7) */
.next-action{display:flex;gap:9px;align-items:flex-start;padding:10px 12px;border-radius:11px;
  background:color-mix(in srgb, var(--accent) 9%, transparent);
  border:1px solid color-mix(in srgb, var(--accent) 26%, transparent);
  font-size:13px;line-height:1.5;margin-bottom:10px}
.next-action .ic{color:var(--accent-ink);flex:none;margin-top:1px}

/* Saisie du rail */
.rail-input,.rail-select,.rail-note{width:100%;padding:9px 12px;border-radius:11px;
  background:var(--glass);border:1px solid var(--line);color:var(--txt);
  font:inherit;font-size:13px;outline:none;transition:border-color .16s}
.rail-input:focus,.rail-select:focus,.rail-note:focus{
  border-color:color-mix(in srgb, var(--accent) 55%, transparent)}
.rail-note{min-height:74px;resize:vertical;line-height:1.5}
.rail-select{cursor:pointer}
.rail-select option{color:#1b1f27;background:#fff}
.rail-form{display:flex;flex-direction:column;gap:8px}
.rail-form-row{display:flex;gap:8px}
.rail-form-row .rail-input{flex:1;min-width:0}
.rail-form-row .rail-select{width:auto;flex:0 0 118px}
.rail-meta{font-size:11.5px;color:var(--dim)}

/* Tâches / relances */
.task-row{display:flex;gap:9px;align-items:center;padding:6px 0;font-size:13px}
.task-cb{width:20px;height:20px;border-radius:7px;border:1px solid var(--line);background:none;
  cursor:pointer;color:transparent;display:grid;place-items:center;flex:none;padding:0;
  transition:border-color .16s,color .16s}
.task-cb .ic{width:12px;height:12px}
.task-cb:hover{color:var(--ok);border-color:var(--ok)}
.task-titre{flex:1;min-width:0;line-height:1.4;overflow-wrap:anywhere}
.task-due{flex:none;font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums}
/* MISSION4 2-3 : échéance dépassée OU du jour = --task, liseré lumineux
   discret (lumière = information — statique, aucune animation). */
.task-row.due{margin:3px 0;padding:6px 9px;border-radius:10px;
  background:color-mix(in srgb, var(--task,#ff9f0a) 8%, transparent);
  border-left:2px solid var(--task,#ff9f0a);
  box-shadow:-1px 0 12px -4px color-mix(in srgb, var(--task,#ff9f0a) 60%, transparent)}
.task-row.due .task-due{color:color-mix(in srgb, var(--task,#ff9f0a) 80%, var(--txt));
  font-weight:740}
/* RETARD : voyant insistant, et qui LE RESTE tant que la tâche n'est pas
   cochée — teinte plus dense, liseré plus épais, halo plus large, titre
   appuyé, plus une pastille pulsée (ci-dessous). */
.task-row.due.overdue{border-left-width:3px;
  background:color-mix(in srgb, var(--task,#ff9f0a) 15%, transparent);
  box-shadow:-1px 0 18px -4px color-mix(in srgb, var(--task,#ff9f0a) 85%, transparent),
    inset 0 0 0 1px color-mix(in srgb, var(--task,#ff9f0a) 22%, transparent)}
.task-row.due.overdue .task-titre{font-weight:650}
.task-row.due.overdue .task-due{color:var(--task,#ff9f0a);font-weight:800}
/* Pastille d'état du retard. Le halo statique porte déjà l'information ;
   la pulsation (sfaPulse, anim.css) n'est qu'un renfort et disparaît en
   mouvement réduit — la pastille, elle, reste. */
.task-dot{width:8px;height:8px;border-radius:50%;flex:none;
  background:var(--task,#ff9f0a);
  box-shadow:0 0 8px color-mix(in srgb, var(--task,#ff9f0a) 70%, transparent)}
@media (prefers-reduced-motion:no-preference){
  .task-row.overdue .task-dot{animation:sfaPulse 2s ease-in-out infinite}
}
/* Compteur --task dans le titre du bloc « Tâches & relances » */
.task-count{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;
  margin-left:7px;border-radius:9px;font-size:11px;font-weight:800;letter-spacing:0;
  text-transform:none;color:#241500;background:var(--task,#ff9f0a);
  font-variant-numeric:tabular-nums;vertical-align:middle;
  box-shadow:0 0 10px color-mix(in srgb, var(--task,#ff9f0a) 45%, transparent)}
/* « + Rappel » mis en avant (teinte --task) — spécificité .btn.b22.task-add :
   gagne sur les styles b22 du kit (app.css). */
.btn.b22.task-add{border-color:color-mix(in srgb, var(--task,#ff9f0a) 44%, transparent);
  background:color-mix(in srgb, var(--task,#ff9f0a) 10%, transparent)}
.btn.b22.task-add:hover{border-color:color-mix(in srgb, var(--task,#ff9f0a) 65%, transparent);
  background:color-mix(in srgb, var(--task,#ff9f0a) 17%, transparent)}
.btn.b22.task-add .ic{color:color-mix(in srgb, var(--task,#ff9f0a) 80%, var(--txt))}

/* Brouillons + garde-fou (O4) */
.o4band{display:flex;gap:9px;align-items:flex-start;padding:10px 12px;border-radius:11px;
  background:rgba(255,159,10,.12);border:1px solid rgba(255,159,10,.4);
  font-size:12.5px;line-height:1.5;margin-bottom:10px}
.o4band .ic{color:var(--warn);flex:none;margin-top:1px}
.o4band.danger{background:rgba(255,69,58,.12);border-color:rgba(255,69,58,.4)}
.o4band.danger .ic{color:var(--danger)}
/* Le corps du brouillon est ÉDITABLE (textarea auto-grow) : même allure que
   l'ancien aperçu monospace, mais on peut retoucher et enregistrer. */
.draft-edit{display:block;width:100%;min-height:120px;max-height:320px;overflow-y:hidden;
  resize:vertical;margin:0;box-sizing:border-box;
  font:12.5px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--txt);
  background:rgba(0,0,0,.2);border:1px solid var(--line);border-radius:11px;padding:12px;
  outline:none;transition:border-color .16s}
.draft-edit:focus{border-color:color-mix(in srgb, var(--accent) 55%, transparent)}
.draft-head{display:flex;gap:8px;align-items:center;margin:8px 0}
.draft-head .rail-select{flex:1;min-width:0}
.draft-actions{display:flex;gap:8px;align-items:center;margin-top:8px}
.draft-actions .btn{margin-left:auto}
/* Marqueur « modifications non enregistrées » — teinte --task (attention). */
.draft-dirty{font-size:11px;font-weight:700;letter-spacing:.02em;
  color:color-mix(in srgb, var(--task,#ff9f0a) 80%, var(--txt))}
.draft-dirty::before{content:"● "}
.btn.b22.draft-save[disabled]{opacity:.45;cursor:default;pointer-events:none}
.draft-model{font-size:11px;color:var(--dim);margin-top:6px}

/* Saisie d'interaction RELOGÉE : elle a quitté le rail (« Suivi de cette
   société ») pour l'accordéon « Historique », au-dessus du journal. */
.ixf-form{margin-bottom:14px}
.ixf-input{min-height:72px;overflow-y:hidden;resize:none}
.ixf-bar .btn{margin-left:auto}

/* ---------- 9. MISSION5 §11b — « Notes de l'équipe » par section ------------
   Encart verre DISTINCT posé sous le contenu de chacune des 10 sections du
   dossier : blocs libres (note / lien / tableau) signés, modifiables et
   supprimables par toute l'équipe. Rendu 100 % DOM sûr côté JS ; ici, rien
   que de la mise en forme, sur les variables d'app.css. */
.tblocks{margin-top:16px;padding:13px 14px 14px;border-radius:14px;
  background:color-mix(in srgb, var(--lum,#fff7e6) 4%, var(--glass));
  border:1px solid color-mix(in srgb, var(--lum,#fff7e6) 16%, var(--line));
  box-shadow:inset 0 1px 0 color-mix(in srgb, var(--lum,#fff7e6) 22%, transparent)}
/* Encart vide : plus effacé encore — il ne doit jamais concurrencer la
   section elle-même, juste offrir la porte d'entrée « + Ajouter ». */
.tblocks.tb-empty{background:transparent;box-shadow:none;
  border-style:dashed;border-color:color-mix(in srgb, var(--line) 85%, transparent)}
.tb-head{display:flex;align-items:center;gap:8px}
.tb-head .ic{color:color-mix(in srgb, var(--lum,#fff7e6) 55%, var(--muted));flex:none}
.tb-title{font-size:11.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  color:color-mix(in srgb, var(--txt) 66%, var(--dim))}
.tb-count{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;
  border-radius:9px;font-size:11px;font-weight:800;font-variant-numeric:tabular-nums;
  color:var(--txt);background:color-mix(in srgb, var(--txt) 14%, transparent)}
.tb-count.hidden{display:none}
/* « + Ajouter » : discret (b22 compact), s'anime au survol seulement. */
.btn.b22.tb-add{margin-left:auto;padding:5px 11px;font-size:12.5px;
  border-color:color-mix(in srgb, var(--lum,#fff7e6) 26%, var(--line))}
.btn.b22.tb-add .ic{width:14px;height:14px}
.btn.b22.tb-add:hover{border-color:color-mix(in srgb, var(--lum,#fff7e6) 52%, transparent);
  background:color-mix(in srgb, var(--lum,#fff7e6) 12%, transparent)}

/* Menu de choix du type */
.tb-menu{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.tb-menu.hidden{display:none}
.tb-mi{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border-radius:10px;
  border:1px solid var(--line);background:var(--glass);color:var(--txt);
  font:inherit;font-size:13px;cursor:pointer;transition:border-color .16s,background .16s}
.tb-mi:hover{border-color:color-mix(in srgb, var(--accent) 55%, transparent);
  background:color-mix(in srgb, var(--accent) 10%, transparent)}
.tb-mi .ic{color:var(--muted);flex:none}

/* Éditeur (création ET modification — le même, pré-rempli) */
.tb-editor{margin-top:10px;padding:12px;border-radius:12px;
  background:var(--panel-solid);border:1px solid var(--line)}
.tb-editor.hidden{display:none}
.tb-ed-cap{font-size:12px;font-weight:760;color:var(--muted);margin-bottom:9px}
.tb-fields{display:flex;flex-direction:column;gap:9px}
.tb-fields .fld label{display:block;font-size:11.5px;color:var(--muted);margin-bottom:4px}
.tb-textarea{min-height:96px;resize:vertical}
.tb-ed-bar{display:flex;justify-content:flex-end;gap:8px;margin-top:11px}
.tb-tbar{display:flex;gap:8px;align-items:center}
.tb-tbar .rail-select.tb-cols{width:auto;flex:0 0 140px}
.btn.b22.tb-addrow{padding:6px 11px;font-size:12.5px}
.btn.b22.tb-addrow[disabled]{opacity:.45;cursor:not-allowed}
/* Grille de saisie du tableau : autant de colonnes que demandé + colonne
   de suppression de ligne. Défilement horizontal borné au-delà de 3-4 col. */
.tb-grid{display:flex;flex-direction:column;gap:6px;overflow-x:auto;padding-bottom:2px}
.tb-grow{display:grid;grid-template-columns:repeat(var(--tbc,2),minmax(112px,1fr)) 26px;
  gap:6px;align-items:center}
.tb-grow .rail-input.tb-cell{padding:7px 9px;font-size:12.5px}
.tb-ghead .rail-input.tb-cell{font-weight:740}
.tb-rowx-spacer{width:26px;height:1px}
.tb-rowx{width:26px;height:26px;border-radius:8px;border:1px solid var(--line);
  background:none;color:var(--dim);display:grid;place-items:center;cursor:pointer;padding:0;
  transition:color .16s,border-color .16s}
.tb-rowx:hover{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, transparent)}

/* Liste des blocs */
.tb-list{margin-top:11px;display:flex;flex-direction:column;gap:9px}
.tb-none{font-size:12.5px;color:var(--dim);margin:0}
.tb-block{padding:10px 11px;border-radius:12px;
  background:color-mix(in srgb, var(--txt) 4%, transparent);
  border:1px solid var(--line)}
.tb-top{display:flex;align-items:center;gap:9px}
.tb-sig{display:flex;align-items:center;gap:8px;min-width:0;flex:1}
.tb-avatar{width:22px;height:22px;font-size:10.5px;flex:none}
.tb-user{font-size:12.5px;font-weight:760;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Audit M5 : hors session (auth off), la signature vaut « Session locale » —
   ton discret, pas de pastille (plus de double tiret qui ressemblait à un
   champ vide). */
.tb-user-anon{font-weight:640;color:var(--muted)}
.tb-when{font-size:11.5px;color:var(--dim);white-space:nowrap}
.tb-kind{font-size:10.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;
  color:var(--dim);padding:2px 7px;border-radius:8px;border:1px solid var(--line);white-space:nowrap}
.tb-acts{display:flex;gap:5px;flex:none}
.tb-act{width:26px;height:26px;border-radius:8px;border:1px solid transparent;background:none;
  color:var(--dim);display:grid;place-items:center;cursor:pointer;padding:0;
  transition:color .16s,border-color .16s,background .16s}
.tb-act:hover{color:var(--txt);border-color:var(--line);background:var(--glass)}
.tb-del:hover{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, transparent)}
.tb-note{margin:8px 0 0;font-size:13px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}
.tb-linkrow{margin:8px 0 0}
.tb-link{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--accent-ink);
  text-decoration:none;overflow-wrap:anywhere}
.tb-link:hover{text-decoration:underline}
.tb-link .ic{flex:none;color:var(--muted)}
.tb-table-wrap{overflow-x:auto;margin-top:9px}
/* Audit M5 — affordance de défilement : dégradé de bord + mention, visibles
   UNIQUEMENT quand le tableau déborde (classe posée en JS), et le dégradé
   s'efface quand on atteint la fin. */
.tb-table-box.tb-overflow .tb-table-wrap{
  -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 38px),transparent);
  mask-image:linear-gradient(to right,#000 calc(100% - 38px),transparent)}
.tb-table-box.tb-overflow.tb-at-end .tb-table-wrap{
  -webkit-mask-image:none;mask-image:none}
.tb-scroll-hint{display:none;align-items:center;gap:6px;margin:6px 0 0;
  font-size:11.5px;color:var(--dim)}
.tb-scroll-hint .ic{flex:none}
.tb-table-box.tb-overflow .tb-scroll-hint{display:flex}
.tb-table-box.tb-overflow.tb-at-end .tb-scroll-hint{display:none}
.tb-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:280px}
.tb-table th{text-align:left;font-weight:760;color:var(--muted);padding:6px 9px;
  border-bottom:1px solid var(--line);white-space:nowrap}
.tb-table td{padding:6px 9px;border-bottom:1px solid var(--line);
  vertical-align:top;overflow-wrap:anywhere}
.tb-table tr:last-child td{border-bottom:none}
.tb-table td.tb-td-empty{color:var(--dim);text-align:center}

/* Historique : la timeline vit dans son conteneur (le repeint d'une nouvelle
   interaction ne doit pas emporter l'encart des blocs — MISSION5 §11b). */
.hist-inner{min-height:0}
