@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700;800&family=Russo+One&display=swap');
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#08080c;--surface:#11111a;--card:#16161f;--card2:#1c1c26;--border:#2a2a36;
  --accent:#dc2626;--accent-dim:#991b1b;--accent2:#94a3b8;
  --danger:#ef4444;--warn:#f59e0b;--success:#10b981;
  --text:#f1f5f9;--text-dim:#cbd5e1;--muted:#7b8499;--muted2:#6b7280;
  --mono:'JetBrains Mono',ui-monospace,monospace;
  --sans:'Inter',sans-serif;
  --brand:'Russo One',sans-serif;
  --r-sm:4px;--r-md:8px;--r-lg:12px;
  /* ── Tokens direction v1 (additifs, non cassants) ── */
  --accent-hover:#ef4444;--accent-strong:#b91c1c;--accent-text:#fca5a5;
  --red-050:rgba(220,38,38,.08);--red-100:rgba(220,38,38,.14);--red-tint-bg:rgba(220,38,38,.10);--red-tint-bd:rgba(220,38,38,.34);
  --info:#60a5fa;--info-bg:rgba(96,165,250,.10);--info-bd:rgba(96,165,250,.28);--info-text:#93c5fd;
  --danger-bg:rgba(239,68,68,.10);--danger-bd:rgba(239,68,68,.30);--danger-text:#fca5a5;
  --warn-bg:rgba(245,158,11,.10);--warn-bd:rgba(245,158,11,.28);--warn-text:#fcd34d;
  --success-bg:rgba(16,185,129,.10);--success-bd:rgba(16,185,129,.28);--success-text:#6ee7b7;
  --sh-sm:0 1px 2px rgba(0,0,0,.4);--sh-md:0 6px 18px rgba(0,0,0,.45);--sh-lg:0 20px 48px rgba(0,0,0,.55);
  --focus:0 0 0 2px var(--bg),0 0 0 4px rgba(220,38,38,.60);
  /* ── Échelle typographique — harmonisée (25 tailles éparses → 12 paliers nommés). Les tailles
        de corps fréquentes (11–16px) restent distinctes ; demi-pixels arrondis, titres rares regroupés. ── */
  --fs-2xs:10px;--fs-xs:11px;--fs-sm:12px;--fs-base:13px;--fs-md:14px;--fs-lg:15px;--fs-xl:16px;
  --fs-2xl:18px;--fs-3xl:20px;--fs-4xl:24px;--fs-5xl:28px;--fs-6xl:32px;
}
html,body{font-size:var(--fs-xl)}
body{background:var(--bg);color:var(--text);font-family:var(--sans);line-height:1.55;-webkit-font-smoothing:antialiased}
.app{min-height:100vh}
/* ── Focus clavier visible (accessibilité — additif, aucune régression) ── */
a:focus-visible,button:focus-visible,[tabindex]:focus-visible,.tab:focus-visible,.rtab-item:focus-visible,.type-btn:focus-visible,.toggle:focus-visible{outline:none;box-shadow:var(--focus);border-radius:var(--r-sm)}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none;box-shadow:0 0 0 3px var(--red-100)}

/* ── Accessibilité : réduction des animations (préférence OS) ─────────────── */
/* Si l'utilisateur a coché « réduire les animations », on neutralise les
   transitions/animations décoratives. L'intro Matrix (~6,3 s) est en plus
   sautée côté JS (voir playMatrixIntro). Aucun impact pour les autres users. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .matrix-intro{display:none!important}
}

/* ── Header ─────────────────────────────────────────────────────────────── */
/* ── Police Tesla (DaFont, à déposer manuellement dans static/fonts/) ── */
/* Si le fichier tesla.ttf n'est pas présent, la police monospace prend le relais
   automatiquement via le fallback dans font-family de .matrix-text. */
@font-face{
  font-family:'TeslaCustom';
  /* ⚠️ La CASSE compte en production. Le fichier versionné s'appelle TESLA.ttf ;
     sous Windows, `tesla.ttf` le trouvait quand même, mais le serveur Linux a
     répondu 404 sur les deux graphies minuscules et le titre retombait en
     monospace. Le vrai nom est donc listé EN PREMIER. Les variantes restent en
     repli parce que la police se dépose à la main (DaFont) et peut arriver
     nommée autrement. */
  src:url('/static/fonts/TESLA.ttf') format('truetype'),
      url('/static/fonts/tesla.ttf') format('truetype'),
      url('/static/fonts/Tesla.ttf') format('truetype');
  font-weight:normal;font-style:normal;font-display:swap;
}

/* ── Animation Matrix au login (fond noir, pluie rouge, texte noir contour blanc) ── */
/* Timing total : 6.2s (5.5s animation + 0.7s fadeOut) */
/* ⚠️ pointer-events:none n'est PAS cosmétique. Cet overlay couvre tout l'écran en
   z-index 9999 et son animation se termine en opacity:0 avec `forwards` : une fois
   fondu il devient INVISIBLE mais reste dans le DOM jusqu'à son retrait par le
   setTimeout de playMatrixIntro (6,3 s), programmé une centaine de lignes après son
   insertion. Si quoi que ce soit échoue entre les deux, l'application se retrouve
   derrière un piège à clics transparent — écran qui « ne répond plus » sans le
   moindre indice visuel. Rien n'est cliquable ici de toute façon : on laisse donc
   passer les clics en toutes circonstances, et un noeud orphelin devient inoffensif. */
.matrix-intro{position:fixed;inset:0;background:#000000;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;animation:matrix-fadeOut .7s ease-in 5.5s forwards;overflow:hidden;pointer-events:none}
.matrix-rain{position:absolute;inset:0;pointer-events:none;opacity:1}
.matrix-rain canvas{display:block;width:100%;height:100%}

/* Container du wordmark.
   Lettres en remplissage BLANC plein (plus de contour blanc + intérieur noir). */
.matrix-text{font-family:'TeslaCustom','Orbitron','JetBrains Mono','Courier New',monospace;font-size:clamp(60px,11vw,160px);color:#ffffff;letter-spacing:.04em;font-weight:700;position:relative;z-index:2;user-select:none;line-height:1;-webkit-text-stroke:0;text-stroke:0;display:inline-block}
/* Deux lignes : "Rec" puis "Offensive" empilées verticalement */
.matrix-line{display:flex;align-items:center}
/* "Offensive" est INDENTÉE pour que son "O" tombe entre le R et le e de "Rec" */
.matrix-line.line-offensive{margin-top:.08em;margin-left:1em}
.matrix-text span{display:inline-block;transition:color .5s ease,opacity .5s ease}
.matrix-text span.locked{color:#ffffff}
.matrix-text span.scramble{color:rgba(255,255,255,.35)}

/* Le "O" de la police Tesla passe du blanc au ROUGE pendant le morphing. */
.matrix-text span.o-red{color:#dc2626;transition:color .6s ease}

/* Le span du "i" est point d'ancrage relative pour la cible enfant.
   La cible est centrée sur le glyph "i" — avec un offset CSS qui compense
   l'advance width de la police Tesla (le glyph "i" est dans la moitié
   gauche de son cadre, donc le centre 50% du span tombe trop à droite). */
.matrix-text span#matrix-i-anchor{position:relative}

/* Grosse cible : image PNG fournie par le détective dans /static/cible.png.
   Centrée sur le glyph "i" via un offset CSS calibré (left:25% au lieu de 50%
   pour compenser le décalage du glyph dans son cadre). */
.matrix-bigtarget{width:clamp(180px,30vw,440px);height:clamp(180px,30vw,440px);position:absolute;left:25%;top:50%;z-index:-1;pointer-events:none;opacity:0;transform:translate(-50%,-50%) scale(.3) rotate(-90deg);transition:opacity .7s ease,transform 1s cubic-bezier(.34,1.56,.64,1)}
.matrix-bigtarget.show{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0)}
.matrix-bigtarget img{width:100%;height:100%;display:block;object-fit:contain;filter:drop-shadow(0 0 18px rgba(220,38,38,.5))}

@keyframes matrix-fadeOut{from{opacity:1}to{opacity:0;visibility:hidden}}

/* ── BANDEAU PRINCIPAL : logo + titre + sous-titre seuls ──────────────── */
.hdr{padding:0;border-bottom:1px solid var(--accent-dim);background:linear-gradient(180deg,#000 0%,var(--surface) 100%);position:relative}
.hdr-inner{display:flex;align-items:center;gap:32px;padding:32px 36px;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}

/* ── SOUS-BANDEAU NAVIGATION : tous les menus + user-chip + version ───── */
.subhdr{background:var(--card);border-bottom:1px solid var(--border);padding:0;position:relative;z-index:2}
.subhdr-inner{display:flex;flex-direction:column;align-items:stretch;gap:10px;padding:12px 36px;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
/* ⚠️ Depuis l'ajout du bouton « Accueil », la rangée compte 5 entrées + le
   user-chip : sous ~1150px elle dépassait et poussait le user-chip hors de
   l'écran (débordement horizontal de toute la page). D'où flex-wrap + padding
   resserré : le chip se replie proprement sur une 2e ligne au lieu de sortir. */
.subhdr-nav{display:flex;align-items:stretch;gap:12px;width:100%;flex-wrap:wrap}
.subhdr-nav .hdr-nav-btn{flex:1 1 auto;justify-content:center;padding:13px 20px;font-size:var(--fs-lg)}
.subhdr-nav .user-chip{flex:0 0 auto;margin-left:auto}
@media(max-width:1150px){
  .subhdr-nav .hdr-nav-btn{padding:11px 12px;font-size:var(--fs-md)}
}
.subhdr-admin{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}
.admin-zone{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;padding:5px 8px;border:1px solid rgba(220,38,38,.35);border-radius:var(--r-md);background:rgba(220,38,38,.05)}
.admin-zone-label{font-family:var(--mono);font-size:var(--fs-2xs);font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--accent);padding:0 6px 0 4px;border-right:1px solid rgba(220,38,38,.3);margin-right:2px;align-self:stretch;display:inline-flex;align-items:center}
.hdr::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,transparent 0%,var(--accent) 50%,transparent 100%);opacity:.6}
.hdr-main{display:flex;align-items:center;gap:30px;min-width:0;flex:1;width:100%}
.hdr-logo{max-height:110px;max-width:340px;width:auto;display:block;object-fit:contain;flex-shrink:0;transition:opacity .3s}
.hdr-titles{display:flex;flex-direction:column;gap:10px;min-width:0;border-left:3px solid var(--accent-dim);padding-left:30px;flex:1}
.hdr-title{font-family:var(--brand);font-size:var(--fs-6xl);font-weight:400;color:var(--text);letter-spacing:.02em;text-transform:uppercase;line-height:1.15}
.hdr-title em{color:var(--accent);font-style:normal}
.hdr-subtitle{font-family:var(--sans);font-size:var(--fs-md);color:var(--muted);letter-spacing:.02em;line-height:1.5}
.hdr-subtitle strong{color:var(--accent);font-weight:600;letter-spacing:.1em;text-transform:uppercase}
.hdr-actions{display:flex;align-items:center;gap:14px;flex-shrink:0}
.user-chip{font-family:var(--sans);font-size:var(--fs-lg);padding:9px 16px;border:1px solid var(--border);color:#fff;border-radius:var(--r-sm);margin-left:auto;display:flex;align-items:center;gap:12px;background:var(--card);font-weight:500}
.user-chip strong{color:#fff;font-weight:700;font-size:var(--fs-lg)}
.user-chip button{background:none;border:none;color:var(--muted);cursor:pointer;font-family:var(--sans);font-size:var(--fs-xl);padding:0 0 0 12px;border-left:1px solid var(--border)}
.user-chip button:hover{color:var(--danger)}
.badge{font-family:var(--mono);font-size:var(--fs-sm);padding:4px 10px;border:1px solid var(--accent);color:var(--accent);border-radius:var(--r-sm)}

/* ── Mobile (<700px) : bandeau en pile — logo réduit AU-DESSUS des titres.
   Sans ça, le logo (flex-shrink:0, ~270px rendus) écrasait la colonne titres
   et le texte « Plateforme d'investigation OSINT » sortait de l'écran
   (scroll horizontal global sur TOUS les écrans connectés). Aucun effet ≥700px. */
@media(max-width:700px){
  .hdr-inner{padding:18px 16px;gap:14px}
  .hdr-main{flex-direction:column;align-items:flex-start;gap:12px}
  .hdr-logo{max-height:60px;max-width:70vw}
  .hdr-titles{border-left:none;padding-left:0;gap:6px}
  .hdr-title{font-size:var(--fs-4xl)}
  .subhdr-inner{padding:10px 16px}
}

/* ── Tabs (anciens onglets horizontaux, conservés pour les autres écrans) ── */
.tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid var(--border);background:var(--surface);max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
.tab{padding:14px 18px;font-size:var(--fs-base);font-weight:600;letter-spacing:.04em;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;transition:all .2s;text-transform:uppercase;white-space:nowrap}
.tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.tab:hover:not(.active){color:var(--text)}
.tab-count{background:var(--danger);color:#fff;font-size:var(--fs-xs);padding:2px 7px;border-radius:10px;margin-left:6px;font-weight:700}

/* ── Rapport : layout 2 colonnes (sidebar onglets + contenu) ───────────── */
.report-layout{display:flex;gap:0;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box;align-items:flex-start}
.report-sidebar{position:sticky;top:0;flex:0 0 230px;width:230px;align-self:flex-start;max-height:100vh;overflow-y:auto;background:var(--surface);border-right:1px solid var(--border);padding:18px 0;box-sizing:border-box;scrollbar-width:thin}
.report-sidebar::-webkit-scrollbar{width:6px}
.report-sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.08);border-radius:3px}
.rtab-title{font-family:var(--sans);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;padding:0 22px 12px;font-weight:700;border-bottom:1px solid rgba(255,255,255,.04);margin-bottom:10px}
.rtab-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 22px;font-family:var(--sans);font-size:var(--fs-md);font-weight:600;letter-spacing:.01em;color:var(--muted);cursor:pointer;border-left:3px solid transparent;transition:all .15s;text-transform:none;white-space:nowrap;line-height:1.3}
.rtab-item:hover:not(.active){color:var(--text);background:rgba(255,255,255,.025);border-left-color:rgba(220,38,38,.3)}
.rtab-item.active{color:var(--accent-text);background:var(--red-050);border-left-color:var(--accent)}
.rtab-item .tab-count{background:var(--danger);color:#fff;font-size:var(--fs-2xs);padding:1px 6px;border-radius:9px;margin:0;font-weight:700;min-width:18px;text-align:center}
.rtab-item.active .tab-count{background:var(--accent)}
.report-main{flex:1;min-width:0;padding:0;box-sizing:border-box}
/* En cas d'écran étroit (<980px) on bascule en horizontal scrollable */
@media (max-width:980px){
  .report-layout{flex-direction:column}
  .report-sidebar{position:relative;width:100%;flex:0 0 auto;max-height:none;border-right:none;border-bottom:1px solid var(--border);display:flex;overflow-x:auto;padding:0}
  .rtab-title{display:none}
  .rtab-item{flex-shrink:0;border-left:none;border-bottom:3px solid transparent;padding:14px 16px}
  .rtab-item.active{border-left-color:transparent;border-bottom-color:var(--accent);background:transparent}
}

/* ── Form ───────────────────────────────────────────────────────────────── */
.form-body{padding:24px 26px;display:flex;flex-direction:column;gap:18px;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
.row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.row.full{grid-template-columns:1fr}
.field label{display:block;font-family:var(--sans);font-size:var(--fs-sm);color:var(--muted);letter-spacing:.05em;margin-bottom:6px;text-transform:uppercase;font-weight:600}
.field input,.field textarea,.field select{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);padding:11px 14px;color:var(--text);font-family:var(--mono);font-size:var(--fs-md);outline:none;transition:border .2s}
.field input:focus,.field textarea:focus{border-color:var(--accent)}
.field input::placeholder,.field textarea::placeholder{color:var(--muted2)}
.field-help{font-family:var(--sans);font-size:var(--fs-base);color:var(--muted);margin-top:6px;line-height:1.55}
.field-help strong{color:var(--text-dim);font-weight:600}

/* ── Grille comptes sociaux ─────────────────────────────────────────────── */
.social-block{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:14px 16px}
.social-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 16px}
@media (max-width:760px){.social-grid{grid-template-columns:1fr}}
.social-field{display:grid;grid-template-columns:140px 1fr;align-items:center;gap:10px;transition:opacity .2s}
.social-label{font-family:var(--sans);font-size:var(--fs-base);color:var(--text-dim);display:flex;align-items:center;gap:8px;margin-bottom:0 !important;text-transform:none !important;letter-spacing:0 !important;font-weight:500;cursor:pointer}
.social-icon{font-size:var(--fs-lg);line-height:1;width:18px;text-align:center;flex-shrink:0}
.social-field input{font-size:var(--fs-base);padding:8px 11px}
.social-field.is-url input{border-color:var(--accent);background:rgba(220,38,38,.05)}
.social-field.is-yes input{border-color:var(--warn);background:rgba(245,158,11,.06);color:var(--warn);font-weight:700;text-transform:uppercase}
.field textarea{resize:vertical;min-height:90px;line-height:1.6;font-family:var(--sans)}
/* ── Widget commune (code postal + ville avec autocomplétion) ── */
.commune-widget{display:grid;grid-template-columns:140px 1fr;gap:14px;align-items:start}
.commune-widget .field{margin:0}
.commune-ville{position:relative}
.commune-suggest{position:absolute;top:100%;left:0;right:0;z-index:40;margin-top:4px;max-height:280px;overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);box-shadow:0 12px 32px rgba(0,0,0,.5)}
.commune-suggest[hidden]{display:none}
.commune-suggest-item{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:9px 13px;cursor:pointer;border-bottom:1px solid var(--border)}
.commune-suggest-item:last-child{border-bottom:none}
.commune-suggest-item:hover,.commune-suggest-item.active{background:var(--card2)}
.commune-suggest-item .cs-nom{font-family:var(--sans);font-size:var(--fs-md);color:var(--text)}
.commune-suggest-item .cs-cp{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);white-space:nowrap}
/* Date de naissance : 3 listes déroulantes jour / mois / année */
.dob-widget{display:flex;gap:10px}
.dob-widget select{cursor:pointer}
.dob-widget #dobJour{flex:0 0 84px}
.dob-widget #dobMois{flex:1 1 auto}
.dob-widget #dobAnnee{flex:0 0 96px}
/* Domicile structuré : numéro étroit + rue large, complément pleine largeur */
.addr-grid{display:grid;grid-template-columns:120px 1fr;gap:14px;align-items:start}
.addr-grid .field{margin:0}
@media(max-width:560px){
  .commune-widget,.addr-grid{grid-template-columns:1fr}
  /* Formulaires : les rangées 2 colonnes passent en 1 colonne (confort de saisie).
     Concerne aussi les modales (mandat). Aucun effet ≥560px. */
  .row{grid-template-columns:1fr}
  /* Tableaux du rapport : filet anti-débordement pour les jetons insécables
     (URLs de sources, emails en mono) + colonne libellés de la Synthèse
     assouplie (200px fixes → trop pour un petit écran). */
  .tbl td,.tbl th{overflow-wrap:anywhere}
  .synth-tbl th{width:120px}
  /* Bandeau de sous-titre : un cran plus petit, et le compteur repasse à la ligne
     au lieu d'être collé à droite (sinon le titre se casse mot à mot). */
  .synth-title{font-size:var(--fs-2xl);padding:9px 12px;letter-spacing:.03em}
  .synth-title .count{margin-left:0}
}
.type-toggle{display:flex;border:1px solid var(--border);border-radius:var(--r-sm);overflow:hidden}
.type-btn{flex:1;padding:12px;font-family:var(--sans);font-size:var(--fs-base);font-weight:600;text-align:center;cursor:pointer;color:var(--muted);transition:all .2s}
.type-btn.active{background:var(--accent);color:#fff;font-weight:700}
.submit-area{padding:18px 26px;border-top:1px solid var(--border);background:var(--surface);display:flex;gap:12px;align-items:center;flex-wrap:wrap;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
/* Le bouton principal (Suivant / Lancer) passe sur sa propre ligne et fait toute la largeur du formulaire au-dessus */
.submit-area .btn-next,.submit-area .btn-launch{flex:1 0 100%;margin-left:0;padding:14px;background:var(--accent);color:#fff;font-family:var(--mono);font-size:var(--fs-md);font-weight:700;letter-spacing:.08em;text-transform:uppercase;border:none;border-radius:var(--r-sm);cursor:pointer;transition:all .2s;white-space:nowrap}
.submit-area .btn-next:hover,.submit-area .btn-launch:hover{filter:brightness(1.08)}
.submit-area .btn-next:disabled,.submit-area .btn-launch:disabled{opacity:.4;cursor:not-allowed}
/* Compat : si btn-launch est utilisé ailleurs (cookie modal etc.) on garde un style raisonnable */
.btn-launch{padding:14px;background:var(--accent);color:#fff;font-family:var(--mono);font-size:var(--fs-md);font-weight:700;letter-spacing:.08em;text-transform:uppercase;border:none;border-radius:var(--r-sm);cursor:pointer;transition:all .2s}
.btn-next{padding:11px 22px;background:var(--accent);color:#fff;font-family:var(--mono);font-size:var(--fs-base);font-weight:700;letter-spacing:.06em;text-transform:uppercase;border:none;border-radius:var(--r-sm);cursor:pointer;transition:all .2s;white-space:nowrap}
.btn-ghost{background:transparent;border:1px solid var(--border);color:var(--text-dim);padding:11px 18px;font-family:var(--sans);font-size:var(--fs-md);font-weight:600;border-radius:var(--r-sm);cursor:pointer;transition:all .2s;white-space:nowrap}
.btn-ghost:hover{border-color:var(--text);color:var(--text)}
.toggle-row{display:flex;align-items:center;gap:10px;font-family:var(--sans);font-size:var(--fs-base);color:var(--text-dim)}
.toggle{width:42px;height:24px;background:var(--border);border-radius:12px;cursor:pointer;position:relative;transition:background .2s}
.toggle.on{background:var(--accent2)}
.toggle::after{content:'';position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}
.toggle.on::after{transform:translateX(18px)}

/* ── Login ──────────────────────────────────────────────────────────────── */
.login-wrap{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px;background:radial-gradient(ellipse at top,rgba(220,38,38,.08) 0%,transparent 60%)}
.login-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:48px 44px;max-width:520px;width:100%;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.4)}
.login-logo{max-height:110px;max-width:340px;margin:0 auto 28px;display:block}
.login-banner-title{font-family:var(--brand);font-size:var(--fs-4xl);font-weight:400;color:var(--text);letter-spacing:.02em;text-transform:uppercase;line-height:1.2;margin-bottom:10px}
.login-banner-title em{color:var(--accent);font-style:normal}
.login-banner-sub{font-family:var(--sans);font-size:var(--fs-base);color:var(--muted);letter-spacing:.02em;line-height:1.6;margin-bottom:28px;padding-bottom:24px;border-bottom:1px solid var(--border)}
.login-banner-sub strong{color:var(--accent);font-weight:600;letter-spacing:.1em;text-transform:uppercase}
.login-title{font-family:var(--sans);font-size:var(--fs-2xl);font-weight:700;margin:0 0 6px;color:var(--text-dim);text-align:left}
.login-sub{font-family:var(--sans);font-size:var(--fs-md);color:var(--muted);margin-bottom:22px;line-height:1.7;text-align:left}
.login-err{font-family:var(--sans);font-size:var(--fs-base);color:var(--danger);margin-top:10px;min-height:18px;text-align:left}

/* ── Research ───────────────────────────────────────────────────────────── */
.research-wrap{padding:26px;display:flex;flex-direction:column;gap:18px;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
.status-bar{display:flex;align-items:center;gap:12px;padding:14px 18px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md)}
.status-bar span{font-size:var(--fs-md)}
.spinner{width:18px;height:18px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;flex-shrink:0}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes ajpulse{0%,100%{opacity:1}50%{opacity:.3}}
.ajc-dot{animation:ajpulse 1.4s ease-in-out infinite}
.terminal{background:#080a0f;border:1px solid var(--border);border-radius:var(--r-md);padding:18px;font-family:var(--mono);font-size:var(--fs-base);height:340px;overflow-y:auto;line-height:1.65}
.log-line{display:flex;gap:14px;padding:3px 0}
.log-time{color:#3b4568;min-width:74px;flex-shrink:0;font-size:var(--fs-sm)}
.log-msg{color:#8892a8}
.log-msg.ok{color:var(--accent)}
.log-msg.search{color:var(--info)}
.log-msg.err{color:var(--danger)}
.log-msg.warn{color:var(--warn)}
.progress-bar{height:5px;background:var(--border);border-radius:3px;overflow:hidden}
.progress-fill{height:100%;background:linear-gradient(90deg,var(--accent2),var(--accent));border-radius:3px;transition:width .4s ease}
/* ── Bandeau animé du pipeline d'enquête (au-dessus des logs) ─────────────── */
.scan-pipe{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:16px 20px 12px}
.scan-steps{display:flex;align-items:flex-start}
.scan-step{flex:1;display:flex;flex-direction:column;align-items:center;position:relative;min-width:0;--sp-c:var(--muted)}
.scan-step:not(:first-child)::before{content:"";position:absolute;top:16px;left:-50%;width:100%;height:2px;background:var(--border);z-index:0;transition:background .35s ease}
.scan-step.reached::before{background:var(--sp-c)}
.scan-node{position:relative;z-index:1;width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid var(--sp-c);color:var(--sp-c);background:var(--card);font-size:var(--fs-lg);line-height:1;opacity:.38;transition:opacity .25s ease,border-color .25s ease}
.scan-step.active .scan-node,.scan-step.done .scan-node{opacity:1}
.scan-step.active .scan-node{background:var(--sp-bg);animation:spPulse 1.4s ease-out infinite}
.scan-step.done .scan-node{border-color:var(--success);color:var(--success);background:var(--success-bg);font-size:var(--fs-xl)}
@keyframes spPulse{0%{box-shadow:0 0 0 0 var(--sp-ring)}70%{box-shadow:0 0 0 8px transparent}100%{box-shadow:0 0 0 0 transparent}}
.scan-lbl{margin-top:8px;font-size:var(--fs-xs);line-height:1.25;text-align:center;color:var(--muted);font-family:var(--mono)}
.scan-step.active .scan-lbl,.scan-step.done .scan-lbl{color:var(--text-dim)}
.scan-sub{display:block;font-size:var(--fs-2xs);color:var(--muted2);margin-top:1px}
.scan-step.llm{--sp-c:#a78bfa;--sp-bg:rgba(167,139,250,.14);--sp-ring:rgba(167,139,250,.42)}
.scan-step.auto{--sp-c:var(--accent);--sp-bg:rgba(220,38,38,.14);--sp-ring:rgba(220,38,38,.4)}
.scan-step.failed .scan-node{opacity:1;border-color:var(--danger);color:var(--danger);background:var(--danger-bg)}
.scan-step.failed .scan-lbl{color:var(--danger)}
.scan-legend{display:flex;gap:20px;justify-content:center;margin-top:14px;font-size:var(--fs-xs);color:var(--muted);font-family:var(--mono)}
.scan-legend span{display:inline-flex;align-items:center;gap:7px}
.scan-legend i{width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0}
/* ── Timeline alternée du suivi d'enquête (nœuds décalés de la ligne) ───────── */
.jp-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:18px 14px 10px;overflow-x:auto}
.jp-track{position:relative;display:flex;min-width:780px;height:158px}
.jp-step{position:relative;flex:1;min-width:0;--c:var(--muted);--bg:transparent}
.jp-track::before{content:"";position:absolute;left:0;right:0;top:78px;height:2px;background:var(--border);z-index:0}
.jp-prog{position:absolute;left:0;top:78px;height:2px;max-width:100%;background:linear-gradient(90deg,var(--accent2),var(--accent));z-index:1;transition:width .9s linear}
.jp-node{position:absolute;left:50%;transform:translateX(-50%);width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:var(--fs-xl);line-height:1;border:2px solid var(--c);color:var(--c);background:var(--card);z-index:2;opacity:.5;transition:opacity .25s ease,border-color .25s ease}
.jp-step.active .jp-node,.jp-step.done .jp-node,.jp-step.failed .jp-node{opacity:1}
.jp-step.active .jp-node,.jp-step.done .jp-node{background:var(--bg)}
.jp-step.active .jp-node{animation:jpPulse 1.5s ease-out infinite}
.jp-node::after{content:"";position:absolute;left:50%;transform:translateX(-50%);width:2px;height:9px;background:var(--c);z-index:1}
.jp-step.up .jp-node{top:32px}
.jp-step.up .jp-node::after{top:100%}
.jp-step.up .jp-lbl{top:-2px}
.jp-step.down .jp-node{top:88px}
.jp-step.down .jp-node::after{bottom:100%}
.jp-step.down .jp-lbl{top:130px}
.jp-lbl{position:absolute;left:50%;transform:translateX(-50%);width:120px;text-align:center;font-family:var(--mono);font-size:var(--fs-xs);line-height:1.2;color:var(--muted)}
.jp-sub{display:block;font-size:var(--fs-2xs);color:var(--muted2);margin-top:3px;font-family:var(--sans)}
.jp-step.active .jp-lbl,.jp-step.done .jp-lbl{color:var(--text-dim)}
.jp-step.auto{--c:var(--muted);--bg:rgba(220,38,38,.14)}
.jp-step.auto.active{--c:var(--accent)}
.jp-step.auto.done{--c:var(--success)}
.jp-step.llm{--c:#a78bfa;--bg:rgba(167,139,250,.16)}
.jp-step.llm.done{--c:#a78bfa}
.jp-step.failed{--c:var(--danger);--bg:var(--danger-bg)}
@keyframes jpPulse{0%{box-shadow:0 0 0 0 var(--bg)}70%{box-shadow:0 0 0 7px transparent}100%{box-shadow:0 0 0 0 transparent}}
.jp-legend{display:flex;gap:24px;justify-content:center;margin-top:22px;font-size:var(--fs-xs);color:var(--muted);font-family:var(--mono);text-transform:uppercase;letter-spacing:.07em}
.jp-legend span{display:inline-flex;align-items:center;gap:7px}
.jp-legend i{width:9px;height:9px;border-radius:3px;display:inline-block;flex-shrink:0}
.err-box{background:var(--danger-bg);border:1px solid var(--danger-bd);border-radius:var(--r-md);padding:18px}
.err-title{font-family:var(--sans);font-size:var(--fs-md);color:var(--danger);margin-bottom:8px;font-weight:600}
.err-body{font-family:var(--sans);font-size:var(--fs-md);color:var(--text-dim);margin-bottom:14px;line-height:1.7}
.tip-box{background:var(--info-bg);border:1px solid var(--info-bd);border-radius:var(--r-sm);padding:14px 16px;font-family:var(--sans);font-size:var(--fs-base);color:var(--text-dim);line-height:1.7}

/* ── Report ─────────────────────────────────────────────────────────────── */
.report-hdr{padding:22px 26px;background:var(--card);border-bottom:1px solid var(--border);box-shadow:var(--sh-sm);display:flex;align-items:center;gap:18px;flex-wrap:wrap;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
.report-meta{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);letter-spacing:.08em;margin-bottom:4px;text-transform:uppercase}
.subject-name{font-size:var(--fs-5xl);font-weight:700;color:var(--text);line-height:1.2;letter-spacing:-.01em}
.score-pill{font-family:var(--mono);font-size:var(--fs-xl);padding:9px 18px;border-radius:999px;font-weight:700;line-height:1;box-shadow:var(--sh-sm)}
.score-cap{font-family:var(--sans);font-size:var(--fs-xs);color:var(--muted);margin-top:4px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600}
.conf-badge{font-family:var(--sans);font-size:var(--fs-base);font-weight:500;padding:6px 12px;border:1px solid var(--border);color:var(--text-dim);border-radius:var(--r-sm);margin-left:auto}

.sec{padding:22px 26px;border-bottom:1px solid var(--border);max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
.sec-title{font-family:var(--sans);font-size:var(--fs-lg);color:var(--accent);letter-spacing:.06em;text-transform:uppercase;margin-bottom:14px;display:flex;align-items:center;gap:10px;font-weight:700}
.sec-title::after{content:'';flex:1;height:1px;background:var(--border)}
.sec-sub{font-family:var(--sans);font-size:var(--fs-md);color:var(--muted);margin-bottom:14px;line-height:1.5}

.prose{font-size:var(--fs-lg);line-height:1.85;color:var(--text-dim);max-width:880px}
.prose p{margin-bottom:14px}
.prose strong{color:var(--text);font-weight:600}
.prose em{color:var(--accent2);font-style:normal}
.prose code{background:var(--card);padding:1px 6px;border-radius:3px;font-family:var(--mono);font-size:var(--fs-md);color:var(--accent)}
.prose ul{margin:10px 0 14px 22px}
.prose ul li{margin-bottom:6px}
.prose h3{font-size:var(--fs-xl);font-weight:700;color:var(--text);margin:18px 0 8px;font-family:var(--sans)}

/* ═══ Uniformisation web ↔ PDF (2026-07-24, RÉVERSIBLE) ═══
   Le texte du rapport est JUSTIFIÉ en vue web comme à l'export PDF. text-align-last:left
   garde la DERNIÈRE ligne (et les lignes avant un <br>) alignée à gauche ; hyphens:auto
   (document lang="fr") évite les grands trous. Scopé à .report-main → n'affecte PAS les
   formulaires ni les Paramètres. Miroir de la règle #print-container de pdf.css.
   ↩ Pour revenir en arrière : supprimer ce bloc. */
.report-main .prose, .report-main .prose p, .report-main p,
.report-main li, .report-main .synth-sub, .report-main .sec-sub{
  text-align:justify; text-align-last:left; -webkit-hyphens:auto; hyphens:auto;
}

.alert-card{display:flex;gap:14px;padding:14px 16px;border-radius:var(--r-sm);border:1px solid;margin-bottom:10px;background:var(--card)}
.alert-card.critique{background:var(--danger-bg);border-color:var(--danger-bd)}
.alert-card.élevé{background:var(--warn-bg);border-color:var(--warn-bd)}
.alert-card.moyen{background:rgba(253,224,71,.05);border-color:rgba(253,224,71,.22)}
.alert-card.faible{background:var(--info-bg);border-color:var(--info-bd)}
.adot{width:10px;height:10px;border-radius:50%;margin-top:7px;flex-shrink:0}
.alert-card.critique .adot{background:var(--danger)}
.alert-card.élevé .adot{background:var(--warn)}
.alert-card.moyen .adot{background:#fde047}
.alert-card.faible .adot{background:var(--info)}
.atitle{font-size:var(--fs-lg);font-weight:700;color:var(--text);margin-bottom:4px}
.adetail{font-size:var(--fs-md);color:var(--text-dim);font-family:var(--sans);line-height:1.65}

.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
.info-cell{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);padding:13px 14px}
.ikey{font-family:var(--sans);font-size:var(--fs-sm);color:var(--muted);letter-spacing:.05em;text-transform:uppercase;margin-bottom:6px;font-weight:700}
.ival{font-size:var(--fs-md);color:var(--text);font-family:var(--mono);overflow-wrap:anywhere;line-height:1.5}

.pill{display:inline-block;font-family:var(--mono);font-size:var(--fs-sm);padding:4px 10px;border-radius:3px;margin:3px}
.pill.blue{background:rgba(59,130,246,.12);color:#93c5fd;border:1px solid rgba(59,130,246,.25)}
.pill.green{background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-bd)}
.pill.purple{background:rgba(124,92,252,.12);color:#c4b5fd;border:1px solid rgba(124,92,252,.25)}
.pill.red{background:var(--danger-bg);color:var(--danger-text);border:1px solid var(--danger-bd)}
.pill.amber{background:var(--warn-bg);color:var(--warn-text);border:1px solid var(--warn-bd)}
/* Pastilles à double rendu (emails/tél de l'Identité) : web = annotation complète (.v-full),
   PDF/impression = valeur compacte (.v-core). Par défaut on masque la version compacte. */
.v-core{display:none}

.tbl{width:100%;border-collapse:collapse;font-size:var(--fs-base);font-family:var(--mono)}
.tbl th{text-align:left;padding:10px 14px;font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);font-weight:600;background:var(--surface)}
.tbl td{padding:11px 14px;border-bottom:1px solid rgba(255,255,255,.04);color:var(--text-dim);vertical-align:top;line-height:1.6}
.tbl tr:hover{background:rgba(255,255,255,.02)}
.tbl strong{color:var(--text)}
.sdot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
.sdot.actif{background:var(--accent)} .sdot.inactif{background:var(--muted)} .sdot.introuvable{background:var(--danger)}

.graph-wrap{width:100%;height:min(85vh,1400px);min-height:900px;background:var(--surface);border-radius:var(--r-md);overflow:hidden;position:relative}
.graph-toolbar{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px;align-items:center;padding:10px 14px;background:var(--surface);border-radius:var(--r-sm)}
.graph-mode-btn{padding:7px 14px;font-size:var(--fs-sm);font-weight:600;font-family:var(--mono);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:var(--r-sm);cursor:pointer;transition:all .15s}
.graph-mode-btn:hover{color:var(--text);border-color:var(--accent)}
.graph-mode-btn.active{color:var(--accent);background:rgba(220,38,38,.08);border-color:var(--accent)}
.graph-stats{margin-left:auto;font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.04em}

/* ── Timeline ─────────────────────────────────────────────────────────── */
.timeline-alerts{background:rgba(249,115,22,.04);border:1px solid rgba(249,115,22,.2);border-radius:var(--r-md);padding:14px 16px;margin:16px 0}
.timeline-alerts-hdr{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.timeline-alerts-list{display:flex;flex-direction:column;gap:6px}
.timeline-alert{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;background:var(--surface);border-radius:var(--r-sm);cursor:pointer;border:1px solid transparent;transition:all .15s}
.timeline-alert:hover{border-color:var(--border)}
.timeline-alert-badge{font-family:var(--mono);font-size:var(--fs-2xs);font-weight:700;letter-spacing:.06em;padding:3px 7px;border-radius:3px;flex-shrink:0;min-width:42px;text-align:center}
.timeline-alert.level-haute .timeline-alert-badge{background:rgba(239,68,68,.15);color:#ef4444}
.timeline-alert.level-moyenne .timeline-alert-badge{background:rgba(249,115,22,.15);color:#f97316}
.timeline-alert.level-basse .timeline-alert-badge{background:rgba(107,117,146,.15);color:#94a3b8}
.timeline-alert-msg{font-family:var(--mono);font-size:var(--fs-sm);color:var(--text-dim);line-height:1.5}

.timeline-filters{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:16px 0 10px}
.timeline-filters-label{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-right:8px}
.timeline-chip{font-family:var(--mono);font-size:var(--fs-xs);padding:6px 12px;border:1px solid;border-radius:14px;background:transparent;cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:4px;opacity:.55}
.timeline-chip.active{opacity:1;background:rgba(255,255,255,.04)}
.timeline-chip:hover{opacity:1}
.timeline-chip-count{font-size:var(--fs-2xs);background:rgba(255,255,255,.08);padding:1px 6px;border-radius:8px;margin-left:4px}

.timeline-zoom-controls{display:flex;gap:6px;align-items:center;margin:10px 0;padding:8px 10px;background:var(--surface);border-radius:var(--r-sm)}
.timeline-zoom-controls .btn-ghost{padding:5px 12px;font-size:var(--fs-md);min-width:30px}

.timeline-wrap{width:100%;height:480px;background:var(--surface);border-radius:var(--r-md);overflow:hidden;position:relative}
.timeline-wrap svg{cursor:grab}
.timeline-wrap svg:active{cursor:grabbing}

.timeline-legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:12px}
.graph-legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:12px}
.leg-item{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:var(--fs-sm);color:var(--text-dim)}
.leg-dot{width:10px;height:10px;border-radius:50%}

.score-track{height:8px;background:var(--surface);border-radius:4px;overflow:hidden;margin:10px 0}
.score-fill{height:100%;border-radius:4px}
.score-labels{display:flex;justify-content:space-between;font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted)}
.no-data{font-family:var(--sans);font-size:var(--fs-md);color:var(--muted);padding:18px 0;text-align:center;font-style:italic}

.src-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.04)}
.src-idx{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);min-width:30px;font-weight:600}
.src-text{font-size:var(--fs-base);font-family:var(--mono);color:var(--text-dim);overflow-wrap:anywhere;line-height:1.6}
.src-text a{color:var(--accent2);text-decoration:none}
.src-text a:hover{text-decoration:underline}

/* ── Journal d'enquête ──────────────────────────────────────────────────── */
.step-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:16px 18px;margin-bottom:12px}
.step-head{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.step-num{background:var(--accent2);color:#fff;font-family:var(--mono);font-size:var(--fs-base);font-weight:700;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.step-obj{font-size:var(--fs-lg);font-weight:600;color:var(--text);flex:1}
.step-row{display:grid;grid-template-columns:120px 1fr;gap:14px;padding:6px 0;font-size:var(--fs-md);line-height:1.7}
.step-row .k{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.08em;text-transform:uppercase;padding-top:3px}
.step-row .v{color:var(--text-dim);font-family:var(--mono);word-break:break-word}
.step-row .v.value{color:var(--accent)}
.step-row .v code{background:var(--surface);padding:2px 8px;border-radius:3px;color:var(--text);font-size:var(--fs-base);display:inline-block;margin:1px 0}

.query-list{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:14px 18px}
.query-item{display:flex;gap:12px;padding:8px 0;border-bottom:1px solid var(--border);font-family:var(--mono);font-size:var(--fs-base)}
.query-item:last-child{border-bottom:none}
.query-item .qi{color:var(--muted);min-width:30px}
.query-item .qt{color:var(--text-dim);overflow-wrap:anywhere;line-height:1.6}

/* ── HIBP breach card ───────────────────────────────────────────────────── */
.breach-card{background:var(--danger-bg);border:1px solid var(--danger-bd);border-radius:var(--r-sm);padding:14px 16px;margin-bottom:10px}
.breach-name{font-size:var(--fs-md);font-weight:700;color:var(--danger);margin-bottom:4px}
.breach-meta{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);margin-bottom:8px}
.breach-desc{font-size:var(--fs-base);color:var(--text-dim);line-height:1.6;margin-bottom:8px}

/* ── Trace d'investigation ──────────────────────────────────────────────── */
.trace-step{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:18px 20px;margin-bottom:14px}
.trace-head{display:flex;align-items:flex-start;gap:14px;margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--border)}
.trace-num{background:var(--accent2);color:#fff;font-family:var(--mono);font-size:var(--fs-base);font-weight:700;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.trace-query{flex:1;min-width:0}
.trace-label{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px;font-weight:500}
.trace-q{display:block;background:var(--surface);padding:8px 12px;border-radius:var(--r-sm);font-family:var(--mono);font-size:var(--fs-md);color:var(--accent);border:1px solid var(--border);word-break:break-word;line-height:1.5}
.trace-section{margin-top:14px}
.trace-results{list-style:none;margin:0;padding:0}
.trace-results li{display:flex;flex-direction:column;gap:2px;padding:8px 0;border-bottom:1px dashed var(--border)}
.trace-results li:last-child{border-bottom:none}
.trace-rank{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);font-weight:600;margin-right:8px}
.trace-title{font-size:var(--fs-md);color:var(--text);font-weight:500}
.trace-title:hover{color:var(--accent2)}
a.trace-title{text-decoration:none}
.trace-url{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);overflow-wrap:anywhere;padding-left:24px}
.trace-noresult{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);font-style:italic;padding:6px 0}
.trace-narr{font-size:var(--fs-md);line-height:1.7;background:var(--surface);padding:12px 14px;border-radius:var(--r-sm);border-left:3px solid var(--accent2);max-width:none}
.trace-narr p{margin-bottom:8px}

/* ── Mandat actif (bannière au-dessus du formulaire) ───────────────────── */
/* Bannière du FORMULAIRE (mandat actif) — verte. Classes distinctes de la
   bannière historique plus bas (même préfixe avant = collision → forme jamais verte). */
.mandat-form-banner{display:flex;align-items:center;gap:18px;padding:14px 26px;background:var(--success-bg);border-bottom:1px solid var(--success-bd);max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
.mandat-form-banner.mandat-banner-empty{background:var(--danger-bg);border-bottom-color:var(--danger-bd)}
.mandat-banner-content{flex:1;min-width:0}
.mandat-form-label{font-family:var(--mono);font-size:var(--fs-xs);color:var(--accent);letter-spacing:.08em;text-transform:uppercase;font-weight:600;margin-bottom:4px}
.mandat-banner-info{font-size:var(--fs-md);color:var(--text);line-height:1.4}

/* ── Vue Historique ─────────────────────────────────────────────────────── */
.history-view{padding:30px 22px;max-width:1600px;margin:0 auto;width:100%;box-sizing:border-box}
/* Bandeau "Enquêtes du mandat actif" affiché au-dessus du tableau */
.mandat-banner{display:flex;align-items:center;gap:16px;padding:18px 24px;margin-bottom:18px;background:linear-gradient(135deg,rgba(220,38,38,.18) 0%,rgba(220,38,38,.06) 100%);border:1px solid rgba(220,38,38,.45);border-radius:var(--r-md)}
.mandat-banner-icon{font-size:var(--fs-4xl);flex-shrink:0}
.mandat-banner-text{flex:1;min-width:0}
.mandat-banner-label{font-family:var(--sans);font-size:var(--fs-md);color:#fff;text-transform:uppercase;letter-spacing:.08em;font-weight:700;margin-bottom:6px}
.mandat-banner-title{font-size:var(--fs-2xl);color:#fff;font-weight:700;line-height:1.3;display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-family:var(--sans)}
.mandat-banner-title strong{font-family:var(--mono);color:#fff;background:rgba(255,255,255,.12);padding:2px 10px;border-radius:4px}
.mandat-banner-client{color:#fff;font-size:var(--fs-xl);font-weight:500;opacity:.95}
.mandat-banner-clear{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.3);color:#fff;padding:9px 16px;font-size:var(--fs-base);font-family:var(--sans);font-weight:600;border-radius:var(--r-sm);cursor:pointer;flex-shrink:0;transition:all .15s}
.mandat-banner-clear:hover{background:rgba(255,255,255,.18);border-color:#fff}
/* Barre de recherche et filtres au-dessus du tableau */
.history-filters{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center;padding:12px 14px;background:var(--surface);border-radius:var(--r-md);border:1px solid var(--border)}
.history-filters input[type="text"]{flex:2 1 320px;min-width:220px;padding:10px 14px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text);font-size:var(--fs-md);font-family:var(--sans)}
.history-filters input[type="text"]:focus{outline:none;border-color:var(--accent)}
.history-filters select{flex:1 1 160px;min-width:140px;padding:10px 12px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text);font-size:var(--fs-md);font-family:var(--sans);font-weight:500;cursor:pointer}
.history-filters select:focus{outline:none;border-color:var(--accent)}
.history-filters-clear{padding:10px 14px;background:transparent;border:1px solid var(--border);border-radius:var(--r-sm);color:var(--muted);font-size:var(--fs-base);font-family:var(--sans);font-weight:600;cursor:pointer;transition:all .15s}
.history-filters-clear:hover{color:var(--danger);border-color:var(--danger)}
.history-filters-count{font-family:var(--sans);font-size:var(--fs-base);color:var(--muted);font-weight:500;letter-spacing:.01em;margin-left:auto}
.history-hdr{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;flex-wrap:wrap;margin-bottom:28px;padding-bottom:24px;border-bottom:1px solid var(--border)}
.history-title{font-family:var(--brand);font-size:var(--fs-5xl);color:var(--text);font-weight:400;letter-spacing:.02em;line-height:1.2}
.history-sub{font-family:var(--sans);font-size:var(--fs-md);color:var(--muted);margin-top:6px;letter-spacing:.01em}
/* ── Comparaison de synthèses (admin) ── */
.cmp-picker{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin:22px 0 8px;padding:18px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm)}
.cmp-picker-field{flex:1;min-width:260px;display:flex;flex-direction:column;gap:7px}
.cmp-picker-field select{padding:10px 12px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--r-sm);font-family:var(--sans);font-size:var(--fs-md);width:100%}
.cmp-picker-vs{font-size:var(--fs-3xl);color:var(--muted);padding-bottom:10px}
.cmp-badge{display:inline-block;font-family:var(--sans);font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 9px;border-radius:3px;color:#fff}
.cmp-badge-a{background:#2563eb}
.cmp-badge-b{background:#7c3aed}
.cmp-result{margin-top:20px}
.cmp-summary{display:flex;align-items:stretch;gap:14px;flex-wrap:wrap;background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);padding:16px 18px;margin-bottom:20px}
.cmp-summary-side{flex:1;min-width:200px;display:flex;flex-direction:column;gap:5px;justify-content:center}
.cmp-summary-side-b{align-items:flex-end;text-align:right}
.cmp-summary-side strong{font-family:var(--sans);font-size:var(--fs-lg);color:var(--text)}
.cmp-meta{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted)}
.cmp-summary-center{display:flex;flex-direction:column;gap:4px;justify-content:center;padding:0 18px;border-left:1px solid var(--border);border-right:1px solid var(--border)}
.cmp-summary-fig{font-family:var(--sans);font-size:var(--fs-base);color:var(--text-dim);white-space:nowrap}
.cmp-summary-fig b{font-family:var(--mono);font-size:var(--fs-lg)}
.cmp-fig-a{color:#2563eb}.cmp-fig-b{color:#a855f7}
.cmp-warn{background:rgba(234,179,8,.08);border:1px solid rgba(234,179,8,.35);color:var(--warn);border-radius:var(--r-sm);padding:11px 15px;font-family:var(--sans);font-size:var(--fs-base);margin-bottom:18px}
.cmp-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);margin-bottom:14px;overflow:hidden}
.cmp-card-hdr{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;background:var(--bg);border-bottom:1px solid var(--border);font-family:var(--sans);font-size:var(--fs-md);font-weight:600;color:var(--text)}
.cmp-tags{display:flex;gap:6px;flex-wrap:wrap}
.cmp-tag{font-family:var(--mono);font-size:var(--fs-xs);font-weight:600;padding:2px 8px;border-radius:3px}
.cmp-tag-a{background:rgba(37,99,235,.14);color:#60a5fa}
.cmp-tag-b{background:rgba(124,58,237,.16);color:#c084fc}
.cmp-tag-common{background:rgba(120,120,120,.16);color:var(--muted)}
.cmp-card-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1px;background:var(--border)}
.cmp-cell{background:var(--card);padding:12px 14px}
.cmp-cell-lbl{font-family:var(--sans);font-size:var(--fs-2xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.cmp-lbl-a{color:#60a5fa}.cmp-lbl-b{color:#c084fc}.cmp-lbl-common{color:var(--muted)}
.cmp-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.cmp-list li{font-family:var(--sans);font-size:var(--fs-base);line-height:1.4;color:var(--text-dim);padding:6px 9px;border-radius:4px;word-break:break-word}
.cmp-only-a li{background:rgba(37,99,235,.07);border-left:2px solid #2563eb}
.cmp-only-b li{background:rgba(124,58,237,.08);border-left:2px solid #7c3aed}
.cmp-common li{background:rgba(120,120,120,.06);border-left:2px solid var(--border)}
.cmp-empty{font-family:var(--sans);font-size:var(--fs-base);color:var(--muted2);font-style:italic;padding:6px 2px}
@media(max-width:820px){.cmp-card-grid{grid-template-columns:1fr}.cmp-summary-center{border:none;padding:12px 0}}
/* ── Approche d'analyse (Paramètres) ── */
/* Sous-titres de section de la page Paramètres (mis en évidence) */
.set-subhead{font-family:var(--sans);font-size:var(--fs-lg);font-weight:700;color:var(--text);letter-spacing:.05em;text-transform:uppercase;margin:0 0 12px;padding:0 0 8px;border-bottom:2px solid rgba(220,38,38,.35);display:flex;align-items:center;gap:9px}
.set-subhead .ss-ic{font-size:var(--fs-xl);line-height:1}
.ctemp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;max-width:900px;margin:0 auto}
.ctemp-card{text-align:left;background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:16px;cursor:pointer;transition:border-color .15s,background .15s;color:var(--text);font-family:var(--sans);display:flex;flex-direction:column;gap:8px}
.ctemp-card:hover{border-color:var(--muted)}
.ctemp-card.active{border-color:var(--accent);background:rgba(220,38,38,.06)}
.ctemp-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ctemp-emoji{font-size:var(--fs-2xl)}
.ctemp-name{font-size:var(--fs-lg);font-weight:700}
.ctemp-tag{font-family:var(--mono);font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border:1px solid var(--border);border-radius:3px;padding:1px 6px}
.ctemp-val{font-family:var(--mono);font-size:var(--fs-sm);color:var(--accent);font-weight:600}
.ctemp-desc{font-size:var(--fs-base);line-height:1.5;color:var(--text-dim)}
.ctemp-check{font-family:var(--mono);font-size:var(--fs-xs);color:var(--accent);font-weight:700;margin-top:2px}
.history-toggle{display:flex;border:1px solid var(--border);border-radius:var(--r-sm);overflow:hidden}
.hist-toggle-btn{padding:11px 18px;font-family:var(--sans);font-size:var(--fs-md);font-weight:600;color:var(--text-dim);background:transparent;border:none;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.04em}
.hist-toggle-btn.active{background:var(--accent);color:#fff}
.hist-toggle-btn:hover:not(.active){background:var(--card)}
.history-tbl{width:100%;border-collapse:collapse;font-size:var(--fs-md);background:var(--card);border-radius:var(--r-md);overflow:hidden}
.history-tbl th{text-align:center;padding:14px 16px;font-family:var(--sans);font-size:var(--fs-sm);color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-weight:700;background:var(--surface);border-bottom:1px solid var(--border)}
.history-tbl td{padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.04);color:var(--text-dim);vertical-align:middle;text-align:center;white-space:nowrap}
.history-tbl tr:hover td{background:rgba(220,38,38,.04)}
.history-tbl tr:last-child td{border-bottom:none}
.history-tbl strong{color:var(--text)}
.history-tbl .actions-col{text-align:center;width:440px}
.history-tbl [data-hist-reuse]{color:var(--accent);border-color:rgba(220,38,38,.35)}
.history-tbl [data-hist-reuse]:hover{background:rgba(220,38,38,.08);border-color:var(--accent)}
/* ── Écran étroit (<980px) : les tableaux de listes (Enquêtes, Mandats, admin)
   gardent leurs colonnes larges (white-space:nowrap + actions-col 440px) et
   deviennent scrollables horizontalement au lieu de faire déborder toute la
   page (mesuré : 1168px de large pour 375px de viewport). CSS pur, aucun
   changement de markup — display:block rend le <table> scrollable. */
@media(max-width:980px){
  .history-tbl{display:block;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
}
/* Boutons d'action en colonne : icône grande + libellé court en dessous,
   tous de même largeur pour un alignement parfait entre les lignes */
.hist-actions{display:inline-flex;gap:8px;align-items:stretch;justify-content:center}
.hist-action-vert{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-width:82px;padding:8px 10px;background:transparent;border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-dim);cursor:pointer;font-family:var(--mono);transition:all .15s;line-height:1.1}
.hist-action-vert:hover{background:rgba(255,255,255,.04);color:var(--text);border-color:rgba(255,255,255,.18)}
.hist-action-vert .ha-icon{font-size:var(--fs-2xl);line-height:1}
.hist-action-vert .ha-lbl{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.06em;font-weight:600;white-space:nowrap}
.hist-action-vert.action-danger{color:var(--danger-text);border-color:var(--danger-bd)}
.hist-action-vert.action-danger:hover{background:var(--danger-bg);border-color:var(--danger);color:var(--danger)}
.hist-action-vert.action-accent{color:var(--accent);border-color:rgba(220,38,38,.35)}
.hist-action-vert.action-accent:hover{background:rgba(220,38,38,.08);border-color:var(--accent)}
.hist-action-vert.action-archive{color:#a78bfa;border-color:rgba(139,92,246,.3)}
.hist-action-vert.action-archive:hover{background:rgba(139,92,246,.08);border-color:rgba(139,92,246,.55)}
.hist-action-placeholder{display:inline-block;min-width:82px;padding:8px 10px}
.hist-action{padding:7px 12px;font-size:var(--fs-sm);margin-left:6px}
.hist-del:hover{color:var(--danger);border-color:var(--danger)}
.hdr-nav-btn{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;font-size:var(--fs-md);font-weight:600}
.hdr-nav-btn .nav-ic{width:16px;height:16px;flex-shrink:0;opacity:.85}
.hdr-nav-btn:hover .nav-ic{opacity:1}
.hdr-nav-btn.active{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}
.hdr-nav-btn.active .nav-ic{opacity:1}
.admin-zone .hdr-nav-btn{font-size:var(--fs-md);padding:7px 13px}
.nav-ic{width:16px;height:16px;flex-shrink:0;vertical-align:middle}

.hist-banner{background:rgba(124,92,252,.06);border:1px solid rgba(124,92,252,.3);border-radius:var(--r-md);padding:14px 20px;margin:20px auto 0;max-width:1600px;width:100%;box-sizing:border-box;font-family:var(--mono);font-size:var(--fs-base);color:var(--text-dim);display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap}
.hist-banner strong{color:var(--accent2)}
.hist-banner-close{padding:6px 14px;font-size:var(--fs-sm)}

/* ── Synthèse complète (Résumé) ─────────────────────────────────────────── */
.synth-block{margin:32px 0 0;padding-bottom:24px;border-bottom:1px solid var(--border)}
.synth-block:first-child{margin-top:0}
.synth-block:last-child{border-bottom:none}
/* Sous-titre de section : bandeau à filet rouge, capitales, police de marque.
   Il doit s'attraper à l'œil dans un long rapport déroulé d'une seule page. */
.synth-title{font-family:var(--brand);font-size:var(--fs-3xl);color:var(--text);margin:0 0 18px;
  font-weight:400;letter-spacing:.045em;text-transform:uppercase;line-height:1.25;
  padding:11px 16px;border-left:4px solid var(--accent);border-radius:0 var(--r-sm) var(--r-sm) 0;
  background:linear-gradient(90deg,rgba(220,38,38,.15),rgba(220,38,38,.03) 55%,transparent);
  display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.synth-title .count{margin-left:auto;font-family:var(--mono);font-size:var(--fs-xs);color:var(--text-dim);
  font-weight:500;letter-spacing:.08em;text-transform:none;padding:3px 10px;border-radius:99px;
  background:rgba(255,255,255,.05);border:1px solid var(--border)}
/* Intertitre à l'intérieur d'un bloc (ex. « Liens familiaux » / « Autres relations ») */
.synth-sublabel{font-family:var(--mono);font-size:var(--fs-xs);color:var(--accent2);letter-spacing:.1em;
  text-transform:uppercase;font-weight:600;margin:18px 0 9px}
.synth-sublabel:first-of-type{margin-top:4px}
.synth-tbl{width:100%;border-collapse:collapse}
.synth-tbl th{text-align:left;padding:9px 14px 9px 0;font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-weight:500;width:200px;vertical-align:top;border-bottom:1px solid rgba(255,255,255,.04)}
.synth-tbl td{padding:9px 0;color:var(--text);font-size:var(--fs-md);vertical-align:top;border-bottom:1px solid rgba(255,255,255,.04);line-height:1.6}
.synth-tbl tr:last-child th, .synth-tbl tr:last-child td{border-bottom:none}
.synth-list{list-style:none;padding:0;margin:0}
.synth-list li{padding:11px 16px;background:var(--card);border-left:3px solid var(--accent-dim);border-radius:0 var(--r-sm) var(--r-sm) 0;margin-bottom:7px;font-size:var(--fs-md);line-height:1.6}
.synth-list li a{color:var(--accent2);text-decoration:none;overflow-wrap:anywhere}
.synth-list li a:hover{color:var(--accent);text-decoration:underline}
.synth-list ol{list-style:none;counter-reset:src}
.synth-list.ordered li{counter-increment:src;position:relative;padding-left:42px}
.synth-list.ordered li::before{content:'['counter(src)']';position:absolute;left:14px;top:11px;font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);font-weight:600}
.synth-sub{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);margin-top:5px;line-height:1.55}
.synth-quote{font-style:italic;color:var(--text-dim);margin-top:7px;padding:6px 0 6px 12px;border-left:2px solid var(--accent-dim);font-size:var(--fs-md);line-height:1.6}
.synth-row{font-size:var(--fs-md);padding:5px 0;line-height:1.6}
.synth-row strong{color:var(--text);font-weight:600}
/* ── Pièces jointes ─────────────────────────────────────────────────────── */
.att-zone{margin-top:4px}
.att-drop{display:flex;align-items:center;gap:14px;padding:18px 20px;border:1.5px dashed var(--border);border-radius:var(--r-md);cursor:pointer;transition:all .2s;background:var(--surface)}
.att-drop:hover{border-color:var(--accent);background:var(--card)}
.att-icon{font-size:var(--fs-4xl);opacity:.7}
.att-msg{font-family:var(--mono);font-size:var(--fs-base);color:var(--text-dim);line-height:1.6}
.att-sub{color:var(--muted);font-size:var(--fs-sm)}
.att-list{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.att-item{display:flex;flex-direction:column;gap:8px;padding:10px 12px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);font-family:var(--mono);font-size:var(--fs-base)}
.att-item-main{display:flex;align-items:center;gap:10px}
.att-name{flex:1;color:var(--text);overflow-wrap:anywhere}
.att-size{color:var(--muted);font-size:var(--fs-sm);white-space:nowrap}
.att-del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:var(--fs-md);padding:2px 6px;border-radius:3px}
.att-del:hover{color:var(--danger);background:rgba(255,77,77,.1)}

/* ── Carte Leaflet interactive (Phase 3.4 GEOINT) ───────────────────── */
.geomap-wrap{margin:16px 0 28px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden}
.geomap-controls{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}
.geomap-legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center}
.geo-legend-item{font-family:var(--mono);font-size:var(--fs-sm);color:var(--text-dim);display:inline-flex;align-items:center;gap:6px;letter-spacing:.02em}
.geo-legend-dot{width:10px;height:10px;border-radius:50%;display:inline-block}
#geo-map{width:100%;height:580px;background:#0f0f17}
#geo-map .leaflet-tile{filter:brightness(.85) contrast(1.05)}
/* Marqueurs custom (DivIcon Leaflet) */
.geo-marker-wrap{background:transparent !important;border:none !important}
.geo-marker{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--fs-2xl);color:#fff;cursor:pointer;border:2px solid rgba(255,255,255,.9);transition:transform .15s}
.geo-marker:hover{transform:scale(1.15)}
/* Popup Leaflet override pour matcher la charte */
.leaflet-popup-content-wrapper{background:var(--card) !important;color:var(--text) !important;border-radius:var(--r-md) !important;border:1px solid var(--border)}
.leaflet-popup-tip{background:var(--card) !important;border:1px solid var(--border)}
.leaflet-popup-content{margin:14px 16px !important;font-family:var(--mono) !important;font-size:var(--fs-base) !important}
.geo-popup-hdr{padding-bottom:8px;margin-bottom:8px;border-bottom:2px solid;font-family:var(--mono);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em}
.geo-popup-title{font-size:var(--fs-md);color:var(--text);font-weight:700;margin-bottom:6px}
.geo-popup-desc{font-size:var(--fs-sm);color:var(--text-dim);line-height:1.5;margin-bottom:8px}
.geo-popup-meta{font-size:var(--fs-xs);color:var(--muted);line-height:1.6;border-top:1px solid var(--border);padding-top:8px;margin-top:8px}
.geo-popup-meta code{background:var(--surface);padding:1px 5px;border-radius:3px;color:var(--text);font-size:var(--fs-2xs)}
.geo-popup-actions{display:flex;gap:6px;margin-top:10px;padding-top:8px;border-top:1px solid var(--border);flex-wrap:wrap}
.geo-popup-actions a{font-size:var(--fs-xs);padding:4px 10px;background:var(--surface);border:1px solid var(--border);border-radius:4px;color:var(--accent) !important;text-decoration:none !important}
.geo-popup-actions a:hover{background:rgba(220,38,38,.08)}
/* Cluster Leaflet override */
.marker-cluster div{background:var(--card) !important;color:var(--text) !important;border:2px solid var(--accent) !important;font-family:var(--mono) !important;font-weight:700 !important}
.marker-cluster{background:rgba(220,38,38,.2) !important}
.geo-textonly-hint{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);background:var(--surface);padding:10px 12px;border-radius:var(--r-sm);margin-bottom:12px;line-height:1.5}
.geo-geocode-btn{cursor:pointer;font-family:inherit;background:transparent}

/* ── Onglet Carte / lieux géolocalisés (Phase 3.3 GEOINT) ───────────── */
.geo-section{margin-bottom:28px}
.geo-section-title{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);letter-spacing:.08em;text-transform:uppercase;font-weight:600;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.geo-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:14px 18px;margin-bottom:10px;transition:border-color .15s}
.geo-card:hover{border-color:rgba(220,38,38,.3)}
.geo-card-precise{border-left:3px solid #10b981}
.geo-card-text{border-left:3px solid #f59e0b}
.geo-card-hdr{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.geo-badge{font-family:var(--mono);font-size:var(--fs-2xs);font-weight:700;letter-spacing:.05em;padding:3px 9px;border-radius:10px;border:1px solid;display:inline-flex;align-items:center;gap:4px;text-transform:uppercase}
.geo-confidence{font-family:var(--mono);font-size:var(--fs-2xs);padding:3px 9px;border-radius:10px;border:1px solid;font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.geo-coords{font-family:var(--mono);font-size:var(--fs-sm);color:var(--text-dim)}
.geo-coords code{background:var(--surface);padding:2px 8px;border-radius:3px;color:var(--text);font-weight:600}
.geo-card-body{margin-bottom:10px}
.geo-label{font-size:var(--fs-lg);color:var(--text);font-weight:600;margin-bottom:5px}
.geo-desc{font-size:var(--fs-base);color:var(--text-dim);line-height:1.5;margin-bottom:6px}
.geo-meta{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);line-height:1.5}
.geo-meta-key{font-weight:600;color:var(--muted)}
.geo-card-actions{display:flex;gap:8px;flex-wrap:wrap;padding-top:10px;border-top:1px solid var(--border)}
.geo-link{font-family:var(--mono);font-size:var(--fs-sm);padding:5px 12px;border:1px solid var(--border);border-radius:4px;color:var(--text-dim);text-decoration:none;transition:all .15s}
.geo-link:hover{border-color:var(--accent);color:var(--accent);background:rgba(220,38,38,.04)}

/* ── Analyse visuelle (Phase 3.2 GEOINT) ────────────────────────────── */
.visuel-item{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:18px 20px;margin-bottom:18px}
.visuel-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.visuel-type{font-family:var(--mono);font-size:var(--fs-base);color:var(--accent);font-weight:600;letter-spacing:.02em}
.visuel-fname{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted)}
.visuel-block{margin:14px 0}
.visuel-label{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.08em;text-transform:uppercase;font-weight:600;margin-bottom:8px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.visuel-confbadge{font-size:var(--fs-2xs);padding:2px 8px;border-radius:10px;border:1px solid;text-transform:none;letter-spacing:.02em;font-weight:600}
.visuel-text{font-size:var(--fs-md);color:var(--text-dim);line-height:1.6}
.visuel-loc-grid{display:flex;flex-direction:column;gap:6px;background:var(--surface);padding:12px 14px;border-radius:var(--r-sm)}
.visuel-loc-row{display:grid;grid-template-columns:140px 1fr;gap:14px;align-items:baseline;font-size:var(--fs-base);line-height:1.5}
.visuel-loc-key{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.visuel-loc-val{color:var(--text-dim);word-break:break-word}
.visuel-loc-val strong{color:var(--text)}
.visuel-exif-concord{color:#10b981;font-family:var(--mono);font-size:var(--fs-sm)}
.visuel-person{background:var(--surface);padding:10px 14px;border-radius:var(--r-sm);margin-bottom:6px}
.visuel-pdesc{font-size:var(--fs-base);color:var(--text)}
.visuel-pid{font-size:var(--fs-sm);color:var(--text-dim);margin-top:4px;line-height:1.5}
.visuel-pid-tag{display:inline-block;font-family:var(--mono);font-size:var(--fs-2xs);font-weight:700;padding:2px 7px;border-radius:3px;background:rgba(220,38,38,.15);color:var(--accent);text-transform:uppercase;letter-spacing:.06em;margin-right:8px;vertical-align:middle}
.visuel-tags{display:flex;flex-wrap:wrap;gap:6px}
.visuel-tag{font-family:var(--mono);font-size:var(--fs-sm);padding:4px 10px;background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:12px;color:var(--text-dim)}
.visuel-todo{background:rgba(245,158,11,.05);border:1px solid rgba(245,158,11,.2);border-radius:var(--r-sm);padding:12px 14px;margin-top:14px}
.visuel-todo .visuel-label{color:#f97316}
.visuel-todo-list{margin:0;padding-left:22px;color:var(--text-dim);font-size:var(--fs-base);line-height:1.7}
.visuel-todo-list li{padding:2px 0}

/* ── Détection d'homonymes (bandeau d'alerte tête de rapport) ──────── */
.homonyme-banner{max-width:1600px;width:100%;margin:18px auto 0;padding:0;border-radius:var(--r-md);border:2px solid;overflow:visible;box-sizing:border-box;display:block}
.homonyme-high{background:linear-gradient(180deg,rgba(239,68,68,.10) 0%,rgba(239,68,68,.04) 100%);border-color:#ef4444;box-shadow:0 0 0 4px rgba(239,68,68,.06)}
.homonyme-medium{background:linear-gradient(180deg,rgba(245,158,11,.08) 0%,rgba(245,158,11,.03) 100%);border-color:#f59e0b}
.homonyme-hdr{display:flex;align-items:flex-start;gap:16px;padding:16px 22px;cursor:default;flex-wrap:wrap;box-sizing:border-box;width:100%}
.homonyme-icon{font-size:var(--fs-5xl);flex-shrink:0;line-height:1}
.homonyme-high .homonyme-icon{filter:drop-shadow(0 0 6px rgba(239,68,68,.6))}
.homonyme-hdr-text{flex:1 1 280px;min-width:0;max-width:100%}
.homonyme-title{font-size:var(--fs-lg);font-weight:700;color:var(--text);letter-spacing:.01em;line-height:1.35;white-space:normal !important;word-break:break-word;overflow-wrap:break-word;max-width:100%}
.homonyme-high .homonyme-title{color:#fca5a5}
.homonyme-medium .homonyme-title{color:#fbbf24}
.homonyme-score{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);margin-top:4px;letter-spacing:.02em;white-space:normal;word-break:break-word;overflow-wrap:break-word}
.homonyme-score strong{color:var(--text)}
.homonyme-toggle{margin-left:auto;padding:6px 14px;font-size:var(--fs-sm);flex-shrink:0;align-self:center}
.homonyme-body{padding:0 22px 18px;display:none;border-top:1px solid rgba(255,255,255,.05);box-sizing:border-box;width:100%;max-width:100%;overflow:hidden}
.homonyme-body.show{display:block}
.homonyme-signal{padding:10px 14px;background:rgba(255,255,255,.03);border-left:3px solid;border-radius:var(--r-sm);margin-top:10px;box-sizing:border-box;width:100%;max-width:100%;display:block;overflow:hidden}
.homonyme-signal.sev-high{border-left-color:#ef4444}
.homonyme-signal.sev-medium{border-left-color:#f59e0b}
.homonyme-signal.sev-low{border-left-color:#94a3b8}
.homonyme-signal-msg{font-size:var(--fs-md);color:var(--text);line-height:1.55;font-weight:600;white-space:normal !important;word-break:break-word;overflow-wrap:break-word;display:block;max-width:100%}
.homonyme-evidence{margin:8px 0 0;padding:0 0 0 22px;font-family:var(--mono);font-size:var(--fs-sm);color:var(--text-dim);line-height:1.7;list-style:disc;list-style-position:outside;box-sizing:border-box;max-width:100%;width:100%}
.homonyme-evidence li{padding:2px 0;word-break:break-word;overflow-wrap:break-word;white-space:normal !important;display:list-item;max-width:100%;box-sizing:border-box}
.homonyme-reco{margin-top:14px;padding:10px 14px;background:rgba(220,38,38,.08);border:1px solid rgba(220,38,38,.25);border-radius:var(--r-sm);font-size:var(--fs-base);color:#fca5a5;font-weight:600;line-height:1.55;white-space:normal !important;word-break:break-word;overflow-wrap:break-word;box-sizing:border-box;max-width:100%}
.homonyme-criteres{margin-top:10px;padding:10px 14px;background:var(--surface);border-radius:var(--r-sm);box-sizing:border-box;width:100%;max-width:100%;display:block}
.homonyme-criteres-title{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600;margin-bottom:6px}
.homonyme-criteres ul{margin:0;padding:0 0 0 22px;font-size:var(--fs-base);color:var(--text-dim);line-height:1.7;list-style:disc;box-sizing:border-box;max-width:100%}
.homonyme-criteres ul li{padding:2px 0;word-break:break-word;overflow-wrap:break-word;white-space:normal !important;max-width:100%}

/* ── Reverse image search (Phase 3.5 GEOINT) ─────────────────────────── */
.rev-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:8px 12px;background:rgba(220,38,38,.04);border:1px solid rgba(220,38,38,.15);border-radius:var(--r-sm);margin-top:4px}
.rev-label{font-family:var(--mono);font-size:var(--fs-xs);color:var(--accent);text-transform:uppercase;letter-spacing:.06em;font-weight:600;flex-shrink:0}
.rev-buttons{display:flex;gap:6px;flex-wrap:wrap;flex:1;justify-content:flex-end}
.rev-btn{font-family:var(--mono);font-size:var(--fs-sm);font-weight:600;padding:5px 12px;background:var(--surface);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);cursor:pointer;transition:all .15s}
.rev-btn:hover{background:rgba(220,38,38,.08);border-color:var(--accent);color:var(--text)}
.rev-btn.rev-yandex:hover{background:rgba(255,204,0,.1);border-color:#ffcc00;color:#ffcc00}
.rev-btn.rev-google:hover{background:rgba(66,133,244,.1);border-color:#4285f4;color:#4285f4}
.rev-btn.rev-tineye:hover{background:rgba(252,114,28,.1);border-color:#fc721c;color:#fc721c}
.rev-btn.rev-bing:hover{background:rgba(0,165,131,.1);border-color:#00a583;color:#00a583}
.rev-btn.rev-dl{padding:5px 10px}
.rev-btn.rev-dl:hover{background:rgba(167,139,250,.1);border-color:#a78bfa;color:#a78bfa}

.rev-toast{margin-top:14px;padding:14px 18px;border-radius:var(--r-sm);font-family:var(--mono);font-size:var(--fs-base);line-height:1.6;animation:rev-toast-in .3s ease-out}
.rev-toast kbd{display:inline-block;background:var(--surface);border:1px solid var(--border);border-radius:3px;padding:1px 7px;font-family:var(--mono);font-size:var(--fs-xs);font-weight:700;color:var(--text);box-shadow:0 1px 0 var(--border)}
.rev-toast-info{background:rgba(59,130,246,.08);border:1px solid rgba(59,130,246,.25);color:#93c5fd}
.rev-toast-success{background:rgba(16,185,129,.08);border:1px solid rgba(16,185,129,.3);color:#6ee7b7}
.rev-toast-warn{background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.3);color:#fbbf24}
.rev-toast-error{background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.3);color:#fca5a5}
@keyframes rev-toast-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}

/* ── EXIF (Phase 3.1 GEOINT) ─────────────────────────────────────────── */
.exif-block{margin-top:4px;padding:10px 12px;background:var(--surface);border:1px solid rgba(220,38,38,.15);border-radius:var(--r-sm);display:flex;flex-direction:column;gap:5px}
.exif-row{display:flex;align-items:baseline;gap:10px;font-size:var(--fs-sm);line-height:1.5}
.exif-key{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:var(--fs-2xs);font-weight:600;flex-shrink:0;min-width:90px}
.exif-val{color:var(--text-dim);font-family:var(--mono);overflow-wrap:anywhere}
.exif-val .exif-sub{color:var(--muted);font-size:var(--fs-xs)}
.exif-link{color:var(--accent);text-decoration:none;font-weight:600;border-bottom:1px dashed rgba(220,38,38,.4)}
.exif-link:hover{color:#ff8090;border-bottom-color:#ff8090}
.exif-alt{color:var(--muted);font-size:var(--fs-xs);margin-left:8px;font-style:italic}
.exif-gps{background:rgba(220,38,38,.05);padding:4px 8px;border-radius:3px;margin:-4px -8px 0}
.exif-empty{color:var(--muted2);font-style:italic;font-size:var(--fs-sm)}

/* ── Outils OSINT (onglet) ──────────────────────────────────────────────── */
.tool-block{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:18px 20px;margin-bottom:18px}
.tool-header{display:flex;align-items:center;gap:14px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}
.tool-badge{font-family:var(--mono);font-size:var(--fs-xs);font-weight:700;letter-spacing:.12em;padding:5px 11px;border-radius:3px;background:var(--accent);color:#fff;text-transform:uppercase}
.tool-desc{font-family:var(--sans);font-size:var(--fs-md);color:var(--text-dim)}
.tool-row{display:grid;grid-template-columns:200px 1fr;gap:18px;padding:14px 0;border-bottom:1px dashed var(--border)}
.tool-row:last-child{border-bottom:none;padding-bottom:0}
.tool-key{font-family:var(--mono);font-size:var(--fs-md);color:var(--text);font-weight:600;overflow-wrap:anywhere}
.tool-sub{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);font-weight:400;margin-top:4px;line-height:1.5}
.tool-val{min-width:0}
.tool-val.err{color:var(--danger);font-family:var(--mono);font-size:var(--fs-base)}
.tool-val .muted{color:var(--muted);font-style:italic;font-family:var(--mono);font-size:var(--fs-base)}
.tool-count{display:inline-block;background:var(--accent);color:#fff;font-family:var(--mono);font-size:var(--fs-xs);font-weight:700;padding:2px 8px;border-radius:10px;margin-right:8px}
.tools-tbl{margin-top:6px}
.tools-tbl a{color:var(--accent2);text-decoration:none}
.tools-tbl a:hover{color:var(--accent);text-decoration:underline}

/* ── Réseaux sociaux (onglet Réseaux + modale cookies) ──────────────────── */
/* Sections dépliables par plateforme : sous-titre MAJUSCULE, grande police. */
.social-group{margin-bottom:22px;border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:rgba(148,163,184,.03)}
.social-group-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;padding:14px 18px;user-select:none;background:rgba(148,163,184,.05)}
.social-group-summary::-webkit-details-marker{display:none}
.social-group-summary:hover{background:rgba(148,163,184,.09)}
.social-group-caret{font-size:var(--fs-xl);color:var(--muted);transition:transform .15s ease;display:inline-block}
details[open]>.social-group-summary .social-group-caret{transform:rotate(90deg)}
.social-group-icon{font-size:var(--fs-4xl);line-height:1}
.social-group-name{font-size:var(--fs-2xl);font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--text);flex:1;min-width:0}
.social-group-count{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);background:var(--surface);padding:3px 10px;border-radius:999px;white-space:nowrap}
.social-group-body{padding:16px 18px 4px}
.social-group-body .social-card{margin-bottom:16px}
.social-card{background:var(--card);border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:var(--r-md);padding:18px 20px;margin-bottom:20px}
.social-card-head{display:flex;align-items:flex-start;gap:14px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}
.social-card-icon{font-size:var(--fs-5xl)}
.social-card-title{flex:1;min-width:0}
.social-card-title > div:first-child{font-family:var(--mono);font-size:var(--fs-md);font-weight:700;color:var(--text)}
.social-card-title a{color:var(--accent2);text-decoration:none}
.social-card-title a:hover{color:var(--accent);text-decoration:underline}
.social-card-meta{font-size:var(--fs-base);color:var(--text-dim);margin-top:6px;line-height:1.5}
.social-card-stats{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);margin-top:6px}
.social-card-count{font-family:var(--mono);font-size:var(--fs-xs);font-weight:700;padding:5px 11px;border-radius:3px;background:var(--accent);color:#fff;text-transform:uppercase;align-self:flex-start;white-space:nowrap}
.social-errs{font-family:var(--mono);font-size:var(--fs-sm);color:var(--warning,#f0a020);padding:6px 10px;background:rgba(240,160,32,.08);border-radius:4px;margin-bottom:12px}
.social-posts{display:flex;flex-direction:column;gap:12px}
.social-photos{margin:4px 0 14px}
.social-photos-title{font-family:var(--mono);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600;margin-bottom:8px}
.social-photos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.social-photo-thumb{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:var(--r-sm);cursor:zoom-in;border:1px solid var(--border);transition:transform .12s ease,box-shadow .12s ease}
.social-photo-thumb:hover{transform:scale(1.03);box-shadow:0 4px 16px rgba(0,0,0,.35)}
.social-post{padding:12px 14px;background:rgba(255,255,255,.02);border:1px solid var(--border);border-radius:var(--r-sm)}
.social-post-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted)}
.social-post-date{color:var(--text-dim);font-weight:600}
.social-post-eng{color:var(--text-dim)}
.social-post-link{margin-left:auto;color:var(--accent2);text-decoration:none}
.social-post-link:hover{color:var(--accent)}
.social-post-text{font-size:var(--fs-md);line-height:1.55;color:var(--text);white-space:pre-wrap;word-break:break-word}
.social-post-media{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}
.social-media-thumb{width:80px;height:80px;object-fit:cover;border-radius:4px;background:var(--border);display:flex;align-items:center;justify-content:center;font-size:var(--fs-4xl)}
.social-post-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.social-post-comments{margin-top:10px;padding-top:8px;border-top:1px dashed var(--border)}
.social-post-comments-title{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}
.social-post-comment{font-size:var(--fs-base);line-height:1.5;color:var(--text-dim);padding:3px 0}
.social-post-comment-author{font-weight:700;color:var(--text)}
.social-post-comment-date{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted)}

/* Modale gestion des cookies */
.cookie-modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}
.cookie-modal{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);max-width:720px;width:100%;max-height:90vh;overflow:auto;padding:24px 28px}
.cookie-modal h3{font-family:var(--mono);font-size:var(--fs-xl);margin:0 0 6px;color:var(--text)}
.cookie-modal .cookie-help{font-size:var(--fs-base);color:var(--text-dim);margin-bottom:18px;line-height:1.6}
.cookie-modal .cookie-help code{font-family:var(--mono);background:rgba(255,255,255,.05);padding:1px 6px;border-radius:3px;font-size:var(--fs-sm)}
.cookie-session-row{display:flex;align-items:center;gap:12px;padding:10px 14px;background:rgba(255,255,255,.03);border:1px solid var(--border);border-radius:var(--r-sm);margin-bottom:8px}
.cookie-session-platform{font-family:var(--mono);font-size:var(--fs-base);font-weight:600;flex:1}
.cookie-session-meta{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted)}
.cookie-form{margin-top:18px;padding-top:18px;border-top:1px solid var(--border)}
.cookie-form .row{display:flex;gap:10px;margin-bottom:10px}
.cookie-form select, .cookie-form textarea{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--r-sm);padding:10px 12px;color:var(--text);font-family:var(--mono);font-size:var(--fs-base)}
.cookie-form textarea{min-height:160px;resize:vertical}
.cookie-form .err{color:var(--danger);font-family:var(--mono);font-size:var(--fs-sm);margin-top:6px}
.cookie-form .ok{color:var(--accent);font-family:var(--mono);font-size:var(--fs-sm);margin-top:6px}
.cookie-btn-row{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}

/* ── PDF / Print ────────────────────────────────────────────────────────── */
#print-container{display:none}
body.printing #print-container{display:block}

@media print {
  @page{ size: A4; margin: 1.5cm }
  html,body{ background:#fff !important; color:#0a0a14 !important; font-size:10.5pt; font-family:'Inter',sans-serif }
  /* Cache toute l'UI normale */
  body > .app{ display:none !important }
  body.printing #print-container{ display:block !important }
  #print-container{ display:none }
  /* Couverture */
  .pdf-cover{ page-break-after:always; padding-top:2.4cm; text-align:center }
  .pdf-cover-title{ font-family:'TeslaCustom','Russo One',sans-serif; font-size:44pt; line-height:1.04; letter-spacing:.02em; color:#111; text-transform:uppercase; margin-bottom:1.3cm }
  .pdf-logo-img{ display:block; width:15cm; max-width:84%; height:auto; margin:0 auto 1.5cm; object-fit:contain }
  .pdf-cover-subject-lbl{ font-size:10.5pt; color:#666; text-transform:uppercase; letter-spacing:.14em; margin-bottom:2pt }
  .pdf-cover-subject{ font-size:22pt; font-weight:800; color:#b91c1c; margin-bottom:1.4cm }
  .pdf-logo{ display:none }
  .pdf-title{ font-size:32pt; font-weight:800; text-align:center; margin-bottom:.4cm; color:#0a0a14 }
  .pdf-sub{ font-size:14pt; color:#555; text-align:center; margin-bottom:1.8cm }
  .pdf-meta{ border-collapse:collapse; margin:0 auto 2.5cm; width:80% }
  .pdf-meta th{ text-align:left; padding:8pt 12pt; width:35%; background:#f4f4f6; color:#444; font-family:'JetBrains Mono',monospace; font-size:9pt; text-transform:uppercase; letter-spacing:.06em; font-weight:600; border:1px solid #e0e0e6 }
  .pdf-meta td{ padding:8pt 12pt; border:1px solid #e0e0e6; color:#0a0a14 }
  .pdf-disclaimer{ font-size:8.5pt; color:#888; text-align:center; font-style:italic; padding:0 2cm; line-height:1.6 }
  /* Sommaire */
  .pdf-toc .toc-list{ list-style:none; margin:1.2cm 0 0; padding:0 }
  .pdf-toc .toc-list li{ display:flex; align-items:baseline; gap:14pt; padding:9pt 2pt; border-bottom:1px dotted #c8c8ce; font-size:13pt; break-inside:avoid }
  .pdf-toc .toc-num{ min-width:1.7em; text-align:center; background:#b91c1c; color:#fff; border-radius:5px; font-weight:700; font-size:11pt; padding:1pt 0; flex-shrink:0; -webkit-print-color-adjust:exact; print-color-adjust:exact }
  .pdf-toc .toc-label{ font-weight:600; color:#0a0a14 }
  /* Pages de contenu — chaque section démarre sur une nouvelle page */
  .pdf-page{ break-before:page; page-break-before:always; padding-top:.4cm }
  .pdf-h2{ font-size:27pt; color:#b91c1c; border-bottom:2.5pt solid #b91c1c; padding-bottom:7pt; margin-bottom:16pt; font-weight:800; line-height:1.15; break-after:avoid; page-break-after:avoid }
  .pdf-h2 .pdf-h2-num{ display:inline-block; background:#b91c1c; color:#fff; border-radius:6px; padding:0 .32em; margin-right:.3em; font-size:.78em; vertical-align:2pt; -webkit-print-color-adjust:exact; print-color-adjust:exact }
  /* Adapte les sections */
  #print-container .sec{ padding:0; border:none }
  #print-container .sec-title{ color:#b91c1c; font-size:13pt; font-weight:700; border-bottom:1pt solid #d0d0d6; padding-bottom:4pt; margin:16pt 0 8pt; break-after:avoid; page-break-after:avoid }
  #print-container .sec-title::after{ display:none }
  /* Bandeau de sous-titre : version encre (filet rouge, pas d'aplat de fond) */
  #print-container .synth-title{ font-family:'Inter',sans-serif; color:#b91c1c; font-size:13pt; font-weight:800; background:none; border-left:3pt solid #b91c1c; border-radius:0; padding:0 0 4pt 9pt; margin:16pt 0 8pt; break-after:avoid; page-break-after:avoid }
  #print-container .synth-title .count{ background:none; border:none; padding:0; margin-left:8pt; color:#7a7f8c }
  #print-container .synth-sublabel{ font-family:'Inter',sans-serif; color:#3a3a46; font-size:10.5pt; font-weight:700; margin:10pt 0 5pt }
  /* Emoji en graisse 400 : sinon Chromium ne dessine pas le glyphe à l'impression (cf. pdf.css) */
  #print-container .pdf-emoji{ font-weight:400 !important; font-style:normal; letter-spacing:0; text-transform:none }
  #print-container .sec-sub{ color:#666; margin-bottom:8pt; font-size:9pt }
  #print-container .prose{ color:#1a1a24; font-size:10.5pt; line-height:1.7; max-width:none }
  #print-container .prose strong{ color:#000 }
  #print-container .prose em{ color:#5b3fc7; font-style:italic }
  #print-container .prose code{ background:#f0f0f4; color:#00805a; padding:1pt 4pt; border-radius:2pt }
  #print-container .prose h3{ font-size:12pt; color:#0a0a14; margin-top:12pt; break-after:avoid; page-break-after:avoid }
  /* Tables */
  #print-container .tbl{ font-size:9pt; width:100%; border:1px solid #ddd }
  #print-container .tbl th{ background:#f4f4f6; color:#444; border-bottom:1px solid #d0d0d6; padding:6pt 8pt }
  #print-container .tbl td{ padding:6pt 8pt; border-bottom:1px solid #eee; color:#1a1a24 }
  #print-container .tbl strong{ color:#000 }
  /* Pills */
  #print-container .pill{ font-size:8.5pt; padding:2pt 6pt; border:1px solid #ccc; background:#f8f8fa; color:#333 }
  #print-container .pill.red{ background:#fee; color:#900; border-color:#fbb }
  #print-container .pill.green{ background:#efe; color:#070; border-color:#bda }
  #print-container .pill.blue{ background:#eef; color:#249; border-color:#bcd }
  #print-container .pill.purple{ background:#f3f0ff; color:#5b3fc7; border-color:#d0c8ee }
  #print-container .pill.amber{ background:#fef6e7; color:#7a5500; border-color:#e8d3a0 }
  /* Impression : version compacte des emails/tél (l'annotation complète .v-full est masquée) */
  #print-container .v-full{ display:none }
  #print-container .v-core{ display:inline }
  /* Cards */
  #print-container .alert-card, #print-container .breach-card, #print-container .step-card,
  #print-container .trace-step, #print-container .info-cell {
    background:#fff !important; border:1px solid #ddd; page-break-inside:avoid;
    box-shadow:none; color:#1a1a24
  }
  #print-container .alert-card.critique{ border-left:3pt solid #c00 }
  #print-container .alert-card.élevé{ border-left:3pt solid #d97700 }
  #print-container .alert-card.moyen{ border-left:3pt solid #b8860b }
  #print-container .alert-card.faible{ border-left:3pt solid #007050 }
  #print-container .atitle{ color:#0a0a14 }
  #print-container .adetail{ color:#333 }
  #print-container .breach-name{ color:#c00 }
  #print-container .breach-meta{ color:#666 }
  #print-container .breach-desc{ color:#333 }
  /* Trace */
  #print-container .trace-q{ background:#f0f0f4; color:#00805a; border:1px solid #d0d0d6 }
  #print-container .trace-title{ color:#0a0a14 }
  #print-container .trace-url{ color:#666 }
  #print-container .trace-narr{ background:#f8f8fa; border-left:3pt solid #5b3fc7; color:#1a1a24 }
  #print-container .trace-num, #print-container .step-num{ background:#5b3fc7; color:#fff }
  /* Info cells */
  #print-container .ikey{ color:#666 }
  #print-container .ival{ color:#0a0a14 }
  /* Liens */
  #print-container a{ color:#5b3fc7 !important; text-decoration:underline }
  /* Score */
  #print-container .score-pill{ background:#f4f4f6; border:1px solid #ccc }
  /* Images scrapées (photos réseaux, posts) — impression fidèle */
  #print-container img{ max-width:100%; height:auto }
  #print-container .social-photos-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(3cm,1fr)); gap:6pt; margin-top:6pt }
  #print-container .social-photo-thumb, #print-container .social-media-thumb{
    break-inside:avoid; page-break-inside:avoid; transform:none !important; box-shadow:none !important; border:1px solid #ddd
  }
  /* Cartes sociales : forcer un fond clair (le thème sombre n'est pas repris en PDF) */
  #print-container .social-card, #print-container .social-post{
    background:#fff !important; border:1px solid #ddd; color:#1a1a24; break-inside:avoid; page-break-inside:avoid
  }
  #print-container .social-card{ border-left:3pt solid #b91c1c }
  #print-container .social-group, #print-container .social-group-summary, #print-container .social-group-body{ background:#fff !important; border-color:#ddd }
  #print-container .social-group-name, #print-container .social-card-title > div:first-child{ color:#0a0a14 }
  #print-container .social-card-meta, #print-container .social-card-stats,
  #print-container .social-post-head, #print-container .social-post-date, #print-container .social-post-eng{ color:#444 }
  #print-container .social-card-count{ -webkit-print-color-adjust:exact; print-color-adjust:exact }
  #print-container .social-group-caret{ display:none }
  /* Carte statique (remplace la carte Leaflet, non imprimable) + adresse domicile */
  #print-container .geomap-wrap{ border:none; padding:0; background:none }
  #print-container #geo-map{ height:auto !important; min-height:0 !important; background:none }
  #print-container .pdf-geo-img{ display:block; width:100%; height:auto; border:1px solid #ccc; border-radius:4px; break-inside:avoid; page-break-inside:avoid }
  #print-container .pdf-home-address{ display:flex; gap:8px; align-items:baseline; background:#f4f4f6; border:1px solid #e0e0e6; border-left:3pt solid #b91c1c; padding:8pt 12pt; margin:4pt 0 10pt; font-size:11pt; color:#0a0a14; break-inside:avoid }
  #print-container .pdf-geo-empty{ padding:22pt; text-align:center; color:#888; font-size:10pt; border:1px dashed #ccc; border-radius:4px }
  /* Cache éléments non-pertinents en PDF */
  #print-container .graph-wrap, #print-container button{ display:none !important }
}

/* ══════════════════════════════════════════════════════════════════════════
   ÉCRAN ACCUEIL (S.step === 'home')
   ⚠️ Toutes les classes sont préfixées .hm- À DESSEIN : le monofichier partage
   cette feuille avec tout le reste de l'app, et des noms génériques comme
   .step-num, .badge ou .card sont DÉJÀ pris ailleurs. Ne pas dépréfixer.
   ══════════════════════════════════════════════════════════════════════════ */
/* ⚠️ Grille CALÉE SUR LE CHROME DE L'APP : .hdr-inner et .subhdr-inner utilisent
   max-width:1600px + padding 36px. Toute autre valeur (le mockup était à 1180px)
   décale visiblement le contenu par rapport au logo et aux boutons de nav — sur un
   écran 1980px, l'écart était de 200px. Ne pas désaligner ces deux valeurs. */
/* --hm-ia : violet SÉMANTIQUE réservé aux temps de raisonnement Claude (comme
   --info/--success sont sémantiques). Ce n'est pas une 2e couleur de marque —
   ne pas l'employer ailleurs, sa valeur tient à sa rareté. */
.hm{--hm-maxw:1600px;--hm-pad:36px;--hm-ia:#a78bfa}
.hm-wrap{max-width:var(--hm-maxw);margin:0 auto;padding:0 var(--hm-pad)}
.hm-band{padding:88px 0;border-bottom:1px solid var(--border)}
.hm-band.hm-tight{padding:64px 0}

.hm-eyebrow{font-family:var(--mono);font-size:var(--fs-xs);letter-spacing:.18em;text-transform:uppercase;
  color:var(--accent);display:flex;align-items:center;gap:12px;margin:0 0 18px}
.hm-eyebrow::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,var(--border),transparent)}
.hm-h2{font-family:var(--brand);font-size:var(--fs-5xl);font-weight:400;letter-spacing:.01em;
  text-transform:uppercase;margin:0 0 14px;line-height:1.2;text-wrap:balance}
.hm-lede{font-size:var(--fs-2xl);color:var(--text-dim);max-width:64ch;margin:0 0 34px;line-height:1.65}
.hm-body{color:var(--muted);max-width:66ch;font-size:var(--fs-lg)}

/* ── Hero ── */
.hm-hero{position:relative;overflow:hidden;border-bottom:1px solid var(--border)}
/* La carte et la couche de visée partagent EXACTEMENT la même boîte, calée sur la
   grille du chrome : le bord droit de la carte s'aligne sur celui de la barre de nav
   (plus de fond qui file au bord de l'écran pendant que le texte reste au milieu),
   et le réticule ne peut pas dériver de la carte puisqu'il mesure la même boîte. */
.hm-hero-media{position:absolute;top:0;bottom:0;left:50%;transform:translateX(-50%);
  width:100%;max-width:var(--hm-maxw);pointer-events:none;z-index:1}
.hm-hero-plate{position:absolute;inset:0;background-size:cover;
  background-position:center right;opacity:.82;background-image:url('/static/hero-plate.webp');
  -webkit-mask-image:linear-gradient(90deg,transparent 2%,#000 42%);
  mask-image:linear-gradient(90deg,transparent 2%,#000 42%)}
.hm-hero-bg{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(900px 480px at 72% 42%,rgba(220,38,38,.13),transparent 62%)}
.hm-hero-inner{position:relative;z-index:2;max-width:var(--hm-maxw);margin:0 auto;
  padding:92px var(--hm-pad) 82px;min-height:660px;display:flex;align-items:center}
.hm-hero-text{max-width:600px}
.hm-h1{font-family:var(--brand);font-weight:400;font-size:clamp(23px,2.9vw,38px);line-height:1.14;
  letter-spacing:.005em;text-transform:uppercase;margin:0 0 22px}
.hm-h1 em{font-style:normal;color:var(--accent)}
.hm-sub{font-size:var(--fs-2xl);color:var(--text-dim);max-width:56ch;margin:0 0 32px;line-height:1.62}
.hm-cta{display:flex;gap:13px;flex-wrap:wrap}
.hm-btn{display:inline-flex;align-items:center;gap:9px;padding:14px 26px;border-radius:var(--r-md);
  font-size:var(--fs-lg);font-weight:600;border:1px solid transparent;transition:.18s;
  text-decoration:none;cursor:pointer;font-family:var(--sans)}
.hm-btn-primary{background:var(--accent);color:#fff;box-shadow:0 6px 22px rgba(220,38,38,.28)}
.hm-btn-primary:hover{background:var(--accent-hover);transform:translateY(-1px)}
.hm-btn-ghost{background:transparent;border-color:var(--border);color:var(--text-dim)}
.hm-btn-ghost:hover{border-color:var(--accent-dim);color:var(--text)}
/* ── Réticule mobile ────────────────────────────────────────────────────────
   Le réticule se déplace SUR la carte de France du fond. Ses coordonnées sont
   calculées en JS depuis la géométrie réelle de l'image (cover + center right),
   pas devinées en % du viewport — sinon il dérive de la carte selon le format.
   Cycle : déplacement → scan → libellés → effacement → déplacement suivant. */
.hm-ret-layer{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden}
.hm-ret{position:absolute;left:50%;top:50%;width:210px;height:210px;overflow:visible;
  transform:translate(-50%,-50%);opacity:.92;
  transition:left 2.1s cubic-bezier(.66,0,.34,1),top 2.1s cubic-bezier(.66,0,.34,1)}
.hm-ret-out{transform-origin:200px 200px;animation:hm-spin 34s linear infinite}
.hm-ret-mid{transform-origin:200px 200px;animation:hm-spin 22s linear infinite reverse}
.hm-ret-scan{transform-origin:200px 200px;animation:hm-spin 4.6s cubic-bezier(.4,0,.6,1) infinite}
@keyframes hm-spin{to{transform:rotate(360deg)}}
.hm-ret-core{animation:hm-beat 3.1s ease-in-out infinite}
@keyframes hm-beat{0%,100%{opacity:1}50%{opacity:.45}}
/* Accroche : les équerres se resserrent et le balayage accélère pendant le scan */
.hm-ret-brackets{opacity:0;transform-box:view-box;transform-origin:200px 200px;transform:scale(1.28);
  transition:opacity .45s ease,transform .55s cubic-bezier(.34,1.4,.64,1)}
.hm-ret.hm-scanning .hm-ret-brackets{opacity:1;transform:scale(1)}
.hm-ret.hm-scanning .hm-ret-scan{animation-duration:1.15s}

/* Libellés d'acquisition */
.hm-ret-label{position:absolute;transform:translateY(-50%);white-space:nowrap;
  font-family:var(--mono);font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent-text);background:rgba(8,8,12,.74);border:1px solid var(--red-tint-bd);
  padding:5px 10px;border-radius:3px;opacity:0;transition:opacity .45s ease}
.hm-ret-label.hm-on{opacity:1}

/* ── Piliers ── */
.hm-pillars{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.hm-pillar{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:26px 24px;transition:.2s}
.hm-pillar:hover{border-color:var(--accent-dim);transform:translateY(-2px);box-shadow:var(--sh-md)}
.hm-pillar-ref{font-family:var(--mono);font-size:var(--fs-2xs);letter-spacing:.1em;text-transform:uppercase;
  color:var(--accent);margin-bottom:12px}
.hm-pillar h3{font-family:var(--brand);font-size:var(--fs-2xl);font-weight:400;text-transform:uppercase;
  letter-spacing:.02em;margin:0 0 10px;line-height:1.25}
.hm-pillar p{margin:0;color:var(--muted);font-size:var(--fs-md);line-height:1.65}

/* ── Déroulé ── */
/* Colonne gauche = les 5 étapes lisibles par le détective.
   Colonne droite = les 9 étapes réellement exécutées, collante pour rester en vue
   pendant la lecture, et qui se remplit au MÊME rythme que le rail de gauche. */
/* align-items:stretch + colonne flex : la frise fait exactement la hauteur du
   déroulé de gauche, et ses 9 lignes se répartissent l'espace (flex:1 chacune). */
.hm-flow-grid{display:grid;grid-template-columns:minmax(0,1.22fr) minmax(0,.78fr);
  gap:64px;align-items:stretch;max-width:1460px}
.hm-flow{position:relative;margin-top:12px}

.hm-pipe{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--border);
  border-radius:var(--r-lg);padding:26px 26px 24px;margin-top:12px}
.hm-pipe-title{margin:0 0 20px;font-family:var(--mono);font-size:var(--fs-xs);
  letter-spacing:.18em;text-transform:uppercase;color:var(--accent)}
.hm-pipe-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px;
  position:relative;flex:1}
.hm-pipe-item{display:grid;grid-template-columns:38px minmax(0,1fr);gap:14px;align-items:center;
  flex:1;min-height:0;padding:10px 14px;border-radius:var(--r-sm);border:1px solid transparent;
  transition:background .4s ease,border-color .4s ease,opacity .4s ease;opacity:.38}
.hm-pipe-n{font-family:var(--mono);font-size:var(--fs-sm);font-weight:700;letter-spacing:.06em;
  color:var(--muted2);transition:color .4s ease}
.hm-pipe-lbl{font-size:var(--fs-lg);color:var(--text-dim);display:flex;align-items:baseline;
  gap:10px;flex-wrap:wrap}
.hm-pipe-lbl em{font-style:normal;font-family:var(--mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;padding:3px 8px;border-radius:3px;
  color:var(--hm-ia);border:1px solid rgba(167,139,250,.42);background:rgba(167,139,250,.12)}
/* Étape franchie */
.hm-pipe-item.hm-on{opacity:1;background:var(--card2);border-color:var(--border)}
.hm-pipe-item.hm-on .hm-pipe-n{color:var(--accent)}
/* Les 2 temps de raisonnement : c'est LÀ que l'IA apporte quelque chose. */
.hm-pipe-item.hm-ia.hm-on{background:rgba(167,139,250,.10);border-color:rgba(167,139,250,.38);
  box-shadow:0 0 18px rgba(167,139,250,.18)}
.hm-pipe-item.hm-ia.hm-on .hm-pipe-n{color:var(--hm-ia)}
.hm-pipe-item.hm-ia.hm-on .hm-pipe-lbl{color:var(--text)}
.hm-rail{position:absolute;left:23px;top:16px;bottom:16px;width:2px;background:var(--border)}
/* Le rail se remplit AU FIL DU DÉFILEMENT (progression pilotée en JS), pas en une
   seule fois : la lecture du déroulé devient elle-même la progression de l'enquête. */
.hm-rail-fill{position:absolute;left:0;top:0;width:2px;height:0;
  background:linear-gradient(180deg,var(--accent-dim),var(--accent));
  box-shadow:0 0 12px rgba(220,38,38,.55)}
/* Tête lumineuse en bout de rail */
.hm-rail-head{position:absolute;left:-3px;width:8px;height:8px;border-radius:50%;
  background:var(--accent);box-shadow:0 0 14px 3px rgba(220,38,38,.75);opacity:0;transition:opacity .4s}
.hm-flow.hm-lit .hm-rail-head{opacity:1}
/* ⚠️ Les étapes restent TOUJOURS en place (pas d'opacity:0 initial) : la mise en
   avant est portée par les états hm-done / hm-current pilotés au défilement.
   Un fade d'entrée en plus produirait un tremblement au scroll. */
.hm-step{display:grid;grid-template-columns:48px minmax(0,1fr);gap:22px;align-items:start;padding:16px 0 30px}
.hm-dot{width:48px;height:48px;border-radius:50%;background:var(--bg);border:2px solid var(--border);
  display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:var(--fs-md);
  font-weight:700;color:var(--muted);position:relative;z-index:2;
  transition:border-color .45s ease,color .45s ease,background .45s ease,transform .45s cubic-bezier(.34,1.4,.64,1)}
/* L'étape franchie par le rail s'allume ; celle qu'on lit est mise en avant. */
.hm-step.hm-done .hm-dot{border-color:var(--accent);color:var(--accent-text);background:#140a0c}
.hm-step.hm-current .hm-dot{transform:scale(1.14);box-shadow:0 0 0 6px rgba(220,38,38,.10),0 0 22px rgba(220,38,38,.45)}
.hm-step h3{font-family:var(--brand);font-size:var(--fs-3xl);font-weight:400;text-transform:uppercase;
  letter-spacing:.02em;margin:10px 0 8px;line-height:1.2;color:var(--muted);transition:color .45s ease}
.hm-step.hm-done h3{color:var(--text)}
.hm-step p{margin:0;color:var(--muted);font-size:var(--fs-lg);max-width:62ch;
  opacity:.55;transition:opacity .45s ease}
.hm-step.hm-done p{opacity:1}

/* ── Signature homonymes ── */
.hm-sig{background:linear-gradient(180deg,#0b0b11,var(--bg));border-bottom:1px solid var(--border)}
/* Le conteneur va jusqu'à 1600px pour aligner les BORDS sur le chrome, mais les
   blocs denses en texte sont bridés : à pleine largeur les lignes deviendraient
   illisibles (90+ caractères). */
/* Le schéma prend la part large : c'est la démonstration, pas une illustration. */
.hm-sig-grid{display:grid;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);gap:52px;
  align-items:center;max-width:1520px}
.hm-canvas-shell{position:relative;border:1px solid var(--border);border-radius:var(--r-lg);
  background:#0a0a10;overflow:hidden;box-shadow:var(--sh-lg)}
.hm-canvas-shell::before{content:'RÉSOLUTION D IDENTITÉ — EXEMPLE FICTIF';position:absolute;top:14px;left:18px;
  z-index:2;font-family:var(--mono);font-size:var(--fs-2xs);letter-spacing:.14em;color:var(--muted2)}
/* aspect-ratio plutôt qu'une hauteur fixe : le canvas est dessiné en coordonnées
   fixes et mis à l'échelle par CSS — une hauteur fixe le déformerait selon la
   largeur de colonne. Le ratio DOIT suivre celui des attributs width/height. */
.hm-canvas-shell canvas{display:block;width:100%;aspect-ratio:1200/780}
.hm-legend{display:flex;gap:20px;padding:11px 14px;border-top:1px solid var(--border);
  font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted);flex-wrap:wrap}
.hm-legend i{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:7px;vertical-align:middle}
.hm-quote{border-left:3px solid var(--accent);padding-left:20px;margin:26px 0 0;
  font-size:var(--fs-2xl);line-height:1.55;color:var(--text)}
.hm-quote cite{display:block;margin-top:10px;font-style:normal;font-family:var(--mono);
  font-size:var(--fs-sm);color:var(--muted);letter-spacing:.05em}

/* ── Sources ── */
.hm-caps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.hm-cap{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);padding:22px;transition:.2s}
.hm-cap:hover{border-color:var(--accent-dim);background:var(--card2)}
.hm-cap svg{width:32px;height:32px;color:var(--accent);margin-bottom:14px}
.hm-cap h3{font-size:var(--fs-xl);font-weight:600;margin:0 0 7px;letter-spacing:.01em}
.hm-cap p{margin:0;color:var(--muted);font-size:var(--fs-md);line-height:1.6}

/* ── Conformité ── */
/* Même largeur totale que la rangée des 3 piliers au-dessus : les bords gauche et
   droit doivent coïncider. Le texte, lui, reste bridé (voir .hm-clist li span) —
   sinon les lignes atteindraient ~95 caractères et deviendraient pénibles à lire. */
.hm-comp{display:grid;grid-template-columns:repeat(2,1fr);gap:22px}
.hm-comp-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:30px 28px}
.hm-comp-card.hm-cnaps{border-top:3px solid var(--accent)}
.hm-comp-card.hm-rgpd{border-top:3px solid var(--info)}
.hm-comp-card h3{font-family:var(--brand);font-size:var(--fs-3xl);font-weight:400;text-transform:uppercase;
  letter-spacing:.02em;margin:0 0 6px}
.hm-comp-sub{font-family:var(--mono);font-size:var(--fs-sm);color:var(--muted);margin:0 0 22px;letter-spacing:.04em}
.hm-comp-sub a{color:inherit;text-decoration:underline;text-underline-offset:3px;
  text-decoration-color:rgba(255,255,255,.22);transition:.15s}
.hm-comp-sub a:hover{color:var(--accent-text);text-decoration-color:currentColor}
/* Référence juridique cliquable : reprend l'aspect de <code> et signale qu'elle
   mène au texte officiel (Légifrance / CNIL). Voir aussi .hm-clist li code. */
.hm-legal{font-family:var(--mono);font-size:var(--fs-sm);color:var(--accent-text);
  background:rgba(220,38,38,.09);padding:1px 6px;border-radius:3px;white-space:nowrap;
  text-decoration:none;border-bottom:1px solid rgba(252,165,165,.45);transition:.15s}
.hm-legal:hover{background:rgba(220,38,38,.2);border-bottom-color:var(--accent-text)}
.hm-clist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:15px}
.hm-clist li{display:grid;grid-template-columns:20px minmax(0,1fr);gap:13px;align-items:start;
  font-size:var(--fs-md);color:var(--text-dim);line-height:1.62}
.hm-clist li svg{width:17px;height:17px;margin-top:3px;color:var(--success);flex-shrink:0}
.hm-clist li > span{max-width:72ch}
.hm-clist li b{color:var(--text);font-weight:600}
.hm-clist li code{font-family:var(--mono);font-size:var(--fs-sm);color:var(--accent-text);
  background:rgba(220,38,38,.09);padding:1px 6px;border-radius:3px}

/* ── Formules ── */
.hm-plans{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;align-items:stretch}
.hm-plan{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:28px 24px;
  display:flex;flex-direction:column;position:relative;transition:.2s}
.hm-plan:hover{transform:translateY(-3px);box-shadow:var(--sh-md)}
.hm-plan.hm-feature{border-color:var(--accent);background:linear-gradient(180deg,rgba(220,38,38,.07),var(--card) 42%)}
.hm-plan.hm-feature::before{content:'LE PLUS DEMANDÉ';position:absolute;top:-10px;left:50%;transform:translateX(-50%);
  font-family:var(--mono);font-size:8.5px;font-weight:700;letter-spacing:.14em;
  background:var(--accent);color:#fff;padding:4px 11px;border-radius:3px;white-space:nowrap}
.hm-plan h3{font-family:var(--brand);font-size:var(--fs-2xl);font-weight:400;text-transform:uppercase;
  letter-spacing:.03em;margin:0 0 6px}
.hm-plan-who{font-size:var(--fs-base);color:var(--muted);margin:0 0 20px;min-height:38px}
.hm-price{padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--border);
  font-family:var(--brand);font-size:var(--fs-2xl);color:var(--muted);letter-spacing:.04em}
.hm-plan ul{list-style:none;margin:0 0 24px;padding:0;display:flex;flex-direction:column;gap:11px;flex:1}
.hm-plan li{display:grid;grid-template-columns:16px minmax(0,1fr);gap:11px;font-size:var(--fs-md);
  color:var(--text-dim);line-height:1.55}
.hm-plan li svg{width:14px;height:14px;margin-top:4px;color:var(--accent);flex-shrink:0}
.hm-plan li b{color:var(--text);font-weight:600}
.hm-plan .hm-btn{width:100%;justify-content:center}
/* ── FAQ ── */
.hm-faq{display:flex;flex-direction:column;gap:11px;max-width:900px}
.hm-qa{background:var(--card);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;transition:.2s}
.hm-qa[open]{border-color:var(--accent-dim);background:var(--card2)}
.hm-qa summary{list-style:none;cursor:pointer;padding:18px 22px;font-size:var(--fs-xl);font-weight:600;
  display:flex;align-items:center;justify-content:space-between;gap:18px}
.hm-qa summary::-webkit-details-marker{display:none}
.hm-qa summary::after{content:'+';font-family:var(--mono);font-size:var(--fs-3xl);color:var(--accent);
  line-height:1;flex-shrink:0;transition:transform .22s}
.hm-qa[open] summary::after{transform:rotate(45deg)}
.hm-qa-body{padding:0 22px 20px;color:var(--muted);font-size:var(--fs-lg);line-height:1.7;max-width:72ch}
.hm-qa-body b{color:var(--text-dim)}

/* ── Clôture ── */
.hm-final{text-align:center;padding:86px 0;border-bottom:1px solid var(--border)}
.hm-final h2{font-family:var(--brand);font-size:clamp(26px,3.2vw,40px);font-weight:400;text-transform:uppercase;
  margin:0 0 16px;line-height:1.15;text-wrap:balance}
.hm-final p{color:var(--muted);font-size:var(--fs-2xl);max-width:56ch;margin:0 auto 30px}
.hm-final .hm-cta{justify-content:center}
.hm-foot{padding:34px 0 46px;font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted2);
  letter-spacing:.04em;line-height:1.7;max-width:82ch}

/* ── Responsive ── */
@media(max-width:1000px){
  /* Le réticule et la carte forment un tout : sous cette largeur le texte
     occupe toute la place, on garde la carte en fond mais on retire la visée
     (plus assez d'espace pour que le déplacement soit lisible). */
  .hm-ret-layer{display:none}
  .hm-hero-plate{opacity:.5;-webkit-mask-image:linear-gradient(90deg,transparent 10%,#000 78%);
    mask-image:linear-gradient(90deg,transparent 10%,#000 78%)}
  .hm-hero-inner{padding:60px var(--hm-pad);min-height:0}
  .hm-hero-text{max-width:none}
  .hm-sig-grid{grid-template-columns:1fr;gap:34px}
  /* La frise passe sous les étapes ; les lignes reprennent leur hauteur naturelle. */
  .hm-flow-grid{grid-template-columns:1fr;gap:34px}
  .hm-pipe-item{flex:0 0 auto}
  .hm-pillars,.hm-caps,.hm-plans,.hm-comp{grid-template-columns:1fr}
  .hm-band{padding:60px 0}
}
