/* ═══════════════════════════════════════════════════════════════════
   Donna — Prospection prédictive (desktop)
   Tokens scopés via .pp-scope[data-theme] pour cohabitation Light/Noir
   sur le design canvas.
   ═══════════════════════════════════════════════════════════════════ */

.pp-scope{
  --bg:#f7f8fa; --surface:#ffffff; --s2:#f1f3f7; --s3:#e7ebf2;
  --border:#e4e7ee; --border-hi:#d3d8e3;
  --text:#14161f; --text-dim:#4a5169; --muted:#8a93ab;
  --accent:#6b5cf5; --accent-hi:#564bd8; --accent-dim:rgba(107,92,245,.09);
  --chaud:#d64560; --tiede:#c08a2e; --froid:#3d7fc2; --green:#22a06b;
  --shadow-sm:0 1px 2px rgba(20,22,31,.05);
  --shadow:0 1px 2px rgba(20,22,31,.04), 0 6px 16px rgba(20,22,31,.05);
  --shadow-lg:0 16px 40px rgba(20,22,31,.14);
  --radius-sm:3px; --radius:9px; --radius-lg:12px;
  --font:-apple-system,BlinkMacSystemFont,'Inter','Segoe UI',sans-serif;
  --font-display:'Inter',var(--font);
  --mono:'JetBrains Mono',ui-monospace,monospace;
  background:var(--bg); color:var(--text);
  font-family:var(--font); -webkit-font-smoothing:antialiased;
  line-height:1.4;
}
.pp-scope[data-theme="noir"]{
  /* [v1348] Tokens alignés EXACTEMENT sur le global donna noir adouci
     (tc.css :root[data-theme="noir"] v1149 type Linear, gris-bleuté).
     Avant v1348 j'avais mis #000/#0a0a0c en pensant matcher "les autres
     pages" — mais le global est adouci depuis v1149. Du coup le scope
     prospection contrastait visuellement avec le reste. Cohérence
     visuelle parfaite maintenant. */
  --bg:#0f1115; --surface:#16181d; --s2:#1c1e24; --s3:#23262d;
  --border:rgba(255,255,255,.07); --border-hi:rgba(255,255,255,.12);
  --text:#e7e9ee; --text-dim:#a8adbd; --muted:#6a7080;
  --accent:#8b7bff; --accent-hi:#a89dff; --accent-dim:rgba(139,123,255,.13);
  --chaud:#ff6680; --tiede:#f0c050; --froid:#5ca8ff; --green:#4fd49a;
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 20px rgba(0,0,0,.5);
  --shadow-lg:0 20px 48px rgba(0,0,0,.6);
  --radius-sm:2px; --radius:3px; --radius-lg:6px;
  color-scheme:dark;
}

/* [v1343/1348] Dark mode tweaks pour composants qui hardcodent du clair (alignés global) */
[data-theme="noir"] .pp-leads-map-host{ background:#1c1e24 }
[data-theme="noir"] .pp-map-legend--ml{ background:#16181d; border-color:rgba(255,255,255,.07) }
[data-theme="noir"] .maplibregl-popup-content{ background:#16181d !important; color:#e7e9ee !important }
[data-theme="noir"] .maplibregl-popup-tip{ border-top-color:#16181d !important; border-bottom-color:#16181d !important }
[data-theme="noir"] .pp-urg .photo.has-map{ background:#1c1e24 }
[data-theme="noir"] .pp-c-hero .photo.has-map{ background:#1c1e24 }
/* [b2479] LE KIT CARTE EST EXCLU DE CE RESET, ET C'ETAIT LA CAUSE DE
   QUATRE BUILDS DE CORRECTIONS INUTILES SUR LA « PEEKBOX ».
   Ce reset et les regles du kit ont EXACTEMENT la meme specificite (0,1,0) :
   `.pp-scope *` contre `.aqlm-chip`, `.aqlm-peek`, `.aqlm-pk-f`... A
   specificite egale c'est l'ORDRE qui tranche, et cette feuille est chargee
   APRES la sienne (index.html l.115 contre l.78). Elle gagnait donc sur
   `margin` et `padding` a l'interieur de tout le chrome de la carte : plus
   un seul retrait, ni dans le peek, ni dans ses puces, ni dans son pied.
   J'ai corrige la feuille du kit trois fois de suite sans jamais voir ca —
   la capture DevTools d'Anthony le montrait en une ligne, `.aqlm *` barre
   juste sous `.pp-scope *`.

   C'est la fuite du CRM VERS le kit, exactement le motif de b2435 sur la
   fiche. Mais on ne peut PAS y repondre par un `all:revert` scope comme
   la-bas : les regles de Margot sont ici en UNE seule classe (`.aqlm-chip`),
   donc une isolation en (0,1,2) passerait DEVANT elles et les effacerait —
   c'est le desastre de b2475, a l'identique.

   ON EXCLUT DONC, PAR `:where()`, DONT LA SPECIFICITE EST NULLE : ce reset
   garde son poids exact (0,1,0) et son comportement partout ailleurs, et
   le kit garde ses retraits. */
.pp-scope *:not(:where(.aqlm, .aqlm *)){box-sizing:border-box; margin:0; padding:0}
.pp-scope button{background:transparent; border:none; color:inherit; cursor:pointer; font:inherit}
.pp-scope svg{flex-shrink:0}

/* ═══════════ Shell (sidenav slim + page) ═══════════ */


/* [v1342] Slider score min stylé donna (input range natif customisé) */
.pp-filters .opt[data-act]{ cursor:pointer; user-select:none }
.pp-filters .pill[data-act]{ cursor:pointer; user-select:none }
.pp-filters .grp-ttl .clear{ cursor:pointer }

/* ═══════════ Topbar ═══════════ */

/* Buttons */
.pp-btn{
  display:inline-flex; align-items:center; gap:7px;
  height:32px; padding:0 13px;
  border-radius:var(--radius);
  font-family:var(--font); font-size:12.5px; font-weight:600;
  color:var(--text); background:var(--s2);
  border:1px solid var(--border);
  white-space:nowrap; transition:background .12s;
}
.pp-btn:hover{ background:var(--s3) }
.pp-btn.primary{
  background:var(--text); color:var(--bg); border-color:transparent;
}
.pp-btn.primary:hover{ background:var(--text-dim) }
.pp-btn.ghost{ background:transparent; border-color:transparent; color:var(--text-dim) }
.pp-btn.ghost:hover{ background:var(--s2); color:var(--text) }
.pp-btn.sm{ height:26px; padding:0 9px; font-size:11.5px; gap:5px }
.pp-btn.lg{ height:38px; padding:0 16px; font-size:13.5px }

/* ═══════════ Page wrap ═══════════ */
.pp-page{ padding:24px 28px 40px; max-width:1320px; }
.pp-page.wide{ max-width:none }

/* ═══════════ [v2066] S1 — Skeleton de chargement ═══════════
   Remplace l'écran « Donna interroge ta base… ». Placeholders animés (shimmer)
   mimant le layout final : bande header + bande filtres + KPI + liste. */
.pp-page--skeleton{ padding:0; max-width:none; }
.pp-scope .pp-sk-wrap{ display:block; }

/* Placeholder de base : fond teinté + shimmer glissant */
.pp-scope .pp-sk{
  position:relative;
  display:inline-block;
  background:color-mix(in srgb, var(--text) 7%, transparent);
  border-radius:6px;
  overflow:hidden;
}
.pp-scope .pp-sk::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(90deg, transparent 0%,
    color-mix(in srgb, var(--text) 9%, transparent) 50%, transparent 100%);
  background-size:200% 100%; background-repeat:no-repeat;
  animation:pp-sk-shim 1.4s ease-in-out infinite;
}
@keyframes pp-sk-shim{ 0%{ background-position:-100% 0; } 100%{ background-position:200% 0; } }

/* Bande header placeholder (mime .dchrome-head : 48px, bord-à-bord, bordure basse) */
.pp-scope .pp-sk-head{
  height:48px; display:flex; align-items:center; gap:12px;
  padding:0 28px; border-bottom:1px solid var(--border);
}
.pp-scope .pp-sk-dot{ width:18px; height:18px; border-radius:50%; }
.pp-scope .pp-sk-title{ width:150px; height:16px; }
.pp-scope .pp-sk-count{ width:64px; height:12px; }
.pp-scope .pp-sk-actions{ margin-left:auto; display:flex; align-items:center; gap:8px; }
.pp-scope .pp-sk-pill{ width:104px; height:26px; border-radius:8px; }

/* Bande filtres placeholder (mime .dchrome-filters : 44px, bordure basse) */
.pp-scope .pp-sk-filters{
  height:44px; display:flex; align-items:center; gap:12px;
  padding:0 28px; border-bottom:1px solid var(--border);
}
.pp-scope .pp-sk-lead{ width:56px; height:12px; }
.pp-scope .pp-sk-chips{ display:flex; align-items:center; gap:6px; }
.pp-scope .pp-sk-chip{ width:82px; height:26px; border-radius:var(--radius, 8px); }

/* Corps : KPI + liste */
.pp-scope .pp-sk-body{ padding:18px 28px 40px; }
.pp-scope .pp-sk-kpis{ display:flex; gap:12px; flex-wrap:wrap; }
.pp-scope .pp-sk-kpi{
  display:flex; flex-direction:column; gap:8px;
  min-width:150px; padding:14px 16px;
  background:var(--surface); border:1px solid var(--border); border-radius:12px;
}
.pp-scope .pp-sk-kpi-l{ width:70px; height:10px; }
.pp-scope .pp-sk-kpi-v{ width:48px; height:20px; }
.pp-scope .pp-sk-list{ display:flex; flex-direction:column; gap:8px; margin-top:18px; }
.pp-scope .pp-sk-row{
  display:flex; align-items:center; gap:14px;
  padding:14px 16px;
  background:var(--surface); border:1px solid var(--border); border-radius:12px;
}
.pp-scope .pp-sk-avatar{ width:34px; height:34px; border-radius:9px; flex-shrink:0; }
.pp-scope .pp-sk-row-lines{ flex:1; min-width:0; display:flex; flex-direction:column; gap:8px; }
.pp-scope .pp-sk-line{ height:12px; }
.pp-scope .pp-sk-line--lg{ width:58%; }
.pp-scope .pp-sk-line--sm{ width:38%; height:10px; }
.pp-scope .pp-sk-score{ width:46px; height:24px; border-radius:8px; flex-shrink:0; }

@media (prefers-reduced-motion: reduce){
  .pp-scope .pp-sk::after{ animation:none; }
}

/* ═══════════ Hero (greeting) ═══════════ */
.pp-hero{
  display:flex; gap:32px; align-items:flex-end;
  padding:8px 0 22px; margin-bottom:22px;
  border-bottom:1px solid var(--border);
}

/* [v1337] Hero compact donna-style : virage marketing → KPI strip */

/* ═══════════ [v1356] Page header aligné PIXEL-PERFECT sur .ph officiel ═══════════
   Anthony : "padding top avec header, padding left, button en haut a droite header"
   → Screen de référence : Clients (.ph officiel page-header.css).
   Changements vs v1352 :
   - margin-bottom 20px (au lieu de 12px) → match .ph v981 "20px partout"
   - margin-right -24px (au lieu de -28px) → match var(--shellv2-main-px, 24px)
   - margin-left -24px (au lieu de -28px) → idem
   - padding 0 calc(14px + 24px) = 0 38px symétrique (au lieu de 0 24px 0 38px asym)
   - margin-top 0 (au lieu de -24px) → on neutralise le padding-top de .pp-page
     via la règle .pp-page--has-ph plus bas qui simule le hack body.shell-v2-on
     .shellv2-main { padding-top:0 } de page-header.css.
   Boutons : .pp-btn migrés vers les classes standards .b / .b.primary
   (cf shell-v2.css L343 .shellv2-root .b) → cohérence parfaite avec Clients.
   ═══════════════════════════════════════════════════════════════════════════ */
.pp-ph{
  display:flex; align-items:center; justify-content:space-between;
  height:40px;
  background:var(--surface);
  border-bottom:1px solid var(--border);
  position:sticky; top:0; z-index:60;
  /* Margin/padding strictement identiques à .ph (cf page-header.css L48-56) */
  margin: 0 calc(-1 * var(--shellv2-main-px, 24px)) 20px;
  padding: 0 calc(14px + var(--shellv2-main-px, 24px));
  flex-shrink:0;
  user-select:none;
  box-sizing:border-box;
}
/* Quand la page prospection contient un .pp-ph, on annule le padding-top
   du .pp-page pour que le header colle au top.
   [v1357] FIX root cause v1356 : `:has(> .pp-ph)` ne matchait JAMAIS car
   le .pp-ph est un SIBLING de .pp-page (pas un enfant). La structure HTML
   réelle injectée par render() (prospection.js L1240) est :
     #page-prospection.pp-scope
       ├── .pp-ph (header)
       └── .pp-page (content)
   Donc on utilise le combinator sibling adjacent `+` qui marche. */
.pp-ph + .pp-page{
  padding-top: 0;
}
/* Fallback historique conservé (au cas où une future variante mette le
   .pp-ph en enfant direct). Inoffensif si pas matché. */
.pp-page:has(> .pp-ph){
  padding-top: 0;
}
.pp-ph-l{
  display:flex; align-items:center; gap:8px; min-width:0; flex:1;
}
.pp-ph-icon{
  width:18px; height:18px;
  display:grid; place-items:center;
  color:var(--text-dim); flex-shrink:0;
}
.pp-ph-icon svg{ width:14px; height:14px; display:block }
.pp-ph-crumb{
  display:inline-flex; align-items:center; gap:6px;
  min-width:0; font-size:13px;
}
.pp-ph-crumb-link{
  display:inline-flex; align-items:center;
  height:22px; padding:0 4px;
  border-radius:4px;
  color:var(--text-dim); font-weight:500;
  text-decoration:none; white-space:nowrap; cursor:pointer;
  transition:background 80ms, color 80ms;
  font-family:var(--font);
}
/* [v1350] Premier crumb-link : pas de padding-left pour coller à l'icône
   (matche pixel-perfect le .ph-title officiel donna sur les autres pages) */
.pp-ph-crumb-link:first-child{ padding-left:0 }
.pp-ph-crumb-link:hover{
  background:var(--s2);
  color:var(--text);
}
.pp-ph-crumb-sep{
  display:inline-grid; place-items:center;
  color:var(--border-hi); flex-shrink:0;
  font-size:14px; line-height:1;
}
.pp-ph-crumb-current{
  font-size:13px; font-weight:600; letter-spacing:-.005em;
  color:var(--text); white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis;
  padding:0 4px;
  font-family:var(--font);
}
.pp-ph-r{
  display:flex; align-items:center; gap:6px; flex-shrink:0;
}
/* [v1358] Override scoped : .ph-add.ghost est icon-only par défaut dans
   page-header.css (width:26px, padding:0) — destiné aux boutons icône
   carrés. Mais dans le header Prospection, on l'utilise avec des labels
   ("Ma zone · 6 CP", "Retour aux leads"). Sans cet override, le bouton
   garde sa largeur 26px et le texte déborde sur le bouton suivant
   (bug v1357 reporté par Anthony : "Sai≡ Toustles deCPs"). On force
   width:auto + padding inline label, en gardant tous les autres styles
   .ph-add.ghost (height 26, transparent, border, text-dim). */
.pp-ph-r .ph-add.ghost{
  width: auto;
  padding: 0 10px 0 8px;
}
/* [v1359] Restaure le styling .ph-add (fond accent noir, texte clair).
   Root cause : la règle reset L51 `.pp-scope button{background:transparent;...}`
   a une spécificité (0,1,1) > .ph-add (0,1,0), donc elle écrase le
   `background: var(--text)` officiel de page-header.css et le bouton
   primaire apparaît avec fond transparent au lieu de noir.
   Fix : override `.pp-ph-r .ph-add:not(.ghost)` (spec 0,3,0) restore les
   couleurs Margot officielles pour les .ph-add primaires.
   Anthony : "tout est bon sauf le bouton tous les leads qui doit etre noir". */
.pp-ph-r .ph-add:not(.ghost){
  background: var(--text);
  color: var(--bg);
}
.pp-ph-r .ph-add:not(.ghost):hover{
  background: var(--text-dim);
}
/* [v1356] .pp-btn déprécié : on laisse les règles pour compat ascendante
   (si un autre fichier l'utilise encore) mais le HTML doit maintenant émettre
   directement .b / .b.primary qui sont stylés par shell-v2.css L343+
   et matchent EXACTEMENT le pattern Clients. Pas de surcharge custom ici. */
.pp-ph-r .pp-btn{
  height:26px; padding:0 10px 0 8px; font-size:12px; font-weight:500; gap:6px;
}
.pp-ph-r .pp-btn svg{ width:12px; height:12px }
.pp-ph-r .pp-btn.primary{ font-weight:500 }

/* [v1337] Styles pour la vraie carte MapLibre */
.pp-leads-map-host{
  position:relative;
  min-height:600px;
  border-radius:8px;
  overflow:hidden;
  background:var(--s2);
}
.pp-map-legend--ml{
  position:absolute;
  bottom:16px; left:16px;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:8px;
  padding:10px 14px;
  font-family:var(--font);
  box-shadow:var(--shadow-sm);
  z-index:5;
}
.pp-map-legend--ml .lbl{
  font-family:var(--mono); font-size:10px; letter-spacing:1.2px;
  text-transform:uppercase; color:var(--muted); font-weight:600;
  margin-bottom:8px;
}
.pp-ml-scale{
  display:flex; align-items:center; gap:6px;
  font-size:11px; color:var(--text-dim);
}
.pp-ml-dot{
  display:inline-block; width:10px; height:10px; border-radius:50%;
  border:1.5px solid rgba(255,255,255,0.95);
  margin-right:2px;
}
.pp-ml-dot:not(:first-child){ margin-left:8px }
/* Override MapLibre default popup style pour s'aligner sur donna */
.maplibregl-popup-content{
  font-family:var(--font);
  border-radius:8px !important;
  padding:16px !important;
  box-shadow:var(--shadow-lg) !important;
}
/* [v1440] Bouton de fermeture × : décalé du bord, vrai petit bouton */
.maplibregl-popup-close-button{
  right:8px !important; top:8px !important;
  width:24px !important; height:24px !important;
  font-size:17px !important; line-height:1 !important;
  color:var(--muted) !important;
  border-radius:7px !important;
  display:flex !important; align-items:center; justify-content:center;
  transition:background .12s, color .12s;
}
.maplibregl-popup-close-button:hover{
  background:var(--s2) !important; color:var(--text) !important;
}
.maplibregl-ctrl-attrib{ font-size:9px !important; opacity:0.6 }

.pp-hero .body{ flex:1; min-width:0 }
.pp-hero .eye{
  font-family:var(--mono); font-size:11px; letter-spacing:1.6px;
  text-transform:uppercase; color:var(--accent); font-weight:600;
  display:inline-flex; align-items:center; gap:8px;
  margin-bottom:10px;
}
.pp-hero .eye .pulse{
  width:6px; height:6px; border-radius:50%; background:var(--accent);
  box-shadow:0 0 0 0 var(--accent);
  animation:pp-pulse 2s infinite;
}
@keyframes pp-pulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 50%, transparent)}
  70%{box-shadow:0 0 0 8px transparent}
  100%{box-shadow:0 0 0 0 transparent}
}
.pp-hero h1{
  font-family:var(--font-display); font-weight:700;
  font-size:34px; line-height:1.15; letter-spacing:-.7px;
  color:var(--text); text-wrap:pretty;
  max-width:780px;
}
.pp-hero h1 .num{
  font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg, var(--accent), var(--accent-hi));
  -webkit-background-clip:text; background-clip:text; color:transparent;
  font-weight:800;
}
.pp-hero h1 .arrow{
  display:inline-block;
  color:var(--accent); margin-left:6px; transform:translateY(-2px);
}
.pp-hero .sig{
  margin-top:10px; display:flex; gap:14px; align-items:center;
  font-family:var(--mono); font-size:10.5px; letter-spacing:.4px;
  color:var(--muted);
}
.pp-hero .sig b{ color:var(--text-dim); font-weight:600 }
.pp-hero .sig .sep{ color:var(--border-hi) }
.pp-hero .acts{ display:flex; gap:8px; flex-shrink:0 }

/* ═══════════ KPI strip ═══════════ */
.pp-kpis{
  display:grid; grid-template-columns:repeat(4, 1fr); gap:0;
  border:1px solid var(--border); border-radius:var(--radius-lg);
  background:var(--surface);
  margin-bottom:22px;
  overflow:hidden;
}
.pp-kpi{
  padding:16px 18px; border-right:1px solid var(--border);
  display:flex; flex-direction:column; gap:5px;
  position:relative;
}
.pp-kpi:last-child{ border-right:none }
.pp-kpi .lbl{
  font-family:var(--mono); font-size:10px; letter-spacing:1.4px;
  text-transform:uppercase; color:var(--muted); font-weight:600;
}
.pp-kpi .val{
  font-family:var(--font-display); font-weight:700;
  font-size:28px; letter-spacing:-.5px; color:var(--text);
  font-variant-numeric:tabular-nums;
  line-height:1.05;
}
.pp-kpi .val .unit{
  font-size:14px; color:var(--muted); font-weight:500;
  margin-left:4px;
}
.pp-kpi .delta{
  font-family:var(--mono); font-size:11px; letter-spacing:.3px;
  color:var(--green); font-weight:600;
  display:inline-flex; align-items:center; gap:5px;
  font-variant-numeric:tabular-nums;
}
.pp-kpi .delta.down{ color:var(--chaud) }
.pp-kpi .delta.neutral{ color:var(--text-dim) }
.pp-kpi .sub{
  font-size:11.5px; color:var(--text-dim); line-height:1.35;
  margin-top:1px;
}

/* mini sparkline track inside KPI */
.pp-spark{
  position:absolute; right:14px; top:14px;
  width:60px; height:22px;
  opacity:.9;
}

/* ═══════════ Section header ═══════════ */
.pp-sect-hd{
  display:flex; align-items:baseline; gap:14px;
  margin:24px 0 12px;
}
.pp-sect-hd h2{
  font-family:var(--font-display); font-weight:700;
  font-size:17px; letter-spacing:-.3px; color:var(--text);
}
.pp-sect-hd .meta{
  font-family:var(--mono); font-size:10.5px; letter-spacing:.5px;
  color:var(--muted);
}
.pp-sect-hd .right{ margin-left:auto; display:flex; gap:6px; align-items:center }

/* ═══════════ Lead cards (urgents) ═══════════ */
.pp-urg-grid{
  display:grid; grid-template-columns:repeat(5, 1fr); gap:12px;
}
.pp-urg{
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius-lg);
  padding:14px 14px 12px;
  cursor:pointer;
  transition:border-color .12s, transform .12s;
  display:flex; flex-direction:column; gap:10px;
  position:relative; overflow:hidden;
}
.pp-urg:hover{ border-color:var(--border-hi); transform:translateY(-1px) }
.pp-urg .photo{
  height:96px; border-radius:var(--radius);
  background:
    repeating-linear-gradient(135deg,
      color-mix(in srgb, var(--accent) 6%, var(--s2)) 0 6px,
      var(--s2) 6px 12px);
  position:relative; overflow:hidden;
  border:1px solid var(--border);
}
/* [v1340] Quand on a une vraie mini-carte cadastre, on masque le pattern rayé */
.pp-urg .photo.has-map{ background:var(--s2) }
.pp-urg .photo.has-map .maplibregl-canvas{ outline:none }
.pp-urg .photo.has-map .pin,
.pp-urg .photo.has-map .score-badge{ z-index:5 }
.pp-urg .photo .pin{
  position:absolute; top:8px; left:8px;
  font-family:var(--mono); font-size:10px; font-weight:700;
  padding:3px 6px; background:color-mix(in srgb, var(--text) 88%, transparent);
  color:var(--bg); border-radius:3px; letter-spacing:.5px;
  display:flex; align-items:center; gap:5px;
}
.pp-urg .photo .pin::before{
  content:''; width:5px; height:5px; border-radius:50%; background:var(--accent);
}
.pp-urg .photo .score-badge{
  position:absolute; bottom:8px; right:8px;
  width:42px; height:42px; border-radius:50%;
  background:var(--surface); border:2px solid var(--border);
  display:grid; place-items:center;
  font-family:var(--font-display); font-weight:800; font-size:14px;
  color:var(--text); font-variant-numeric:tabular-nums;
  box-shadow:var(--shadow-sm);
}
.pp-urg .photo .score-badge[data-zone="chaud"]{ border-color:var(--chaud); color:var(--chaud) }
.pp-urg .photo .score-badge[data-zone="tiede"]{ border-color:var(--tiede); color:var(--tiede) }
.pp-urg .photo .score-badge[data-zone="froid"]{ border-color:var(--froid); color:var(--froid) }
.pp-urg .addr{
  font-size:13px; font-weight:600; color:var(--text);
  line-height:1.3;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden;
}
.pp-urg .meta{
  font-family:var(--mono); font-size:10px; letter-spacing:.3px;
  color:var(--text-dim); display:flex; gap:6px; align-items:center;
  font-variant-numeric:tabular-nums;
}
.pp-urg .meta .dt{ width:3px; height:3px; border-radius:50%; background:var(--muted) }
.pp-urg .trig{
  font-size:11.5px; color:var(--text-dim); line-height:1.35;
  border-top:1px solid var(--border); padding-top:8px; margin-top:auto;
  display:flex; align-items:center; gap:6px;
}
.pp-urg .trig::before{
  content:''; width:4px; height:4px; border-radius:50%;
  background:var(--accent); flex-shrink:0;
}
.pp-urg .trig b{ font-weight:600; color:var(--text) }

/* ═══════════ Score gauge (large, radial-ish) ═══════════ */
.pp-gauge{
  width:170px; height:170px;
  position:relative;
  display:grid; place-items:center;
}
.pp-gauge svg{ width:100%; height:100%; transform:rotate(-90deg) }
.pp-gauge .track{ fill:none; stroke:var(--s3); stroke-width:9 }
.pp-gauge .fill{ fill:none; stroke-width:9; stroke-linecap:round;
  transition:stroke-dashoffset .6s cubic-bezier(.2,.7,.3,1);
}
.pp-gauge .fill[data-zone="chaud"]{ stroke:var(--chaud) }
.pp-gauge .fill[data-zone="tiede"]{ stroke:var(--tiede) }
.pp-gauge .fill[data-zone="froid"]{ stroke:var(--froid) }
.pp-gauge .inner{
  position:absolute; inset:0;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
}
.pp-gauge .inner .num{
  font-family:var(--font-display); font-weight:800;
  font-size:46px; letter-spacing:-1.5px; color:var(--text);
  font-variant-numeric:tabular-nums; line-height:1;
}
.pp-gauge .inner .label{
  font-family:var(--mono); font-size:10px; letter-spacing:1.6px;
  text-transform:uppercase; font-weight:700;
}
.pp-gauge .inner .label[data-zone="chaud"]{ color:var(--chaud) }
.pp-gauge .inner .label[data-zone="tiede"]{ color:var(--tiede) }
.pp-gauge .inner .label[data-zone="froid"]{ color:var(--froid) }
.pp-gauge .conf{
  position:absolute; bottom:-22px; left:50%; transform:translateX(-50%);
  font-family:var(--mono); font-size:10px; letter-spacing:.3px;
  color:var(--muted); white-space:nowrap;
}
.pp-gauge .conf b{ color:var(--text-dim); font-weight:600 }

/* small inline gauge used in lists */
.pp-gauge-sm{
  width:36px; height:36px; position:relative;
  display:grid; place-items:center;
}
.pp-gauge-sm svg{ width:100%; height:100%; transform:rotate(-90deg); grid-area:1/1 }
.pp-gauge-sm .track{ fill:none; stroke:var(--s3); stroke-width:3 }
.pp-gauge-sm .fill{ fill:none; stroke-width:3; stroke-linecap:round }
.pp-gauge-sm .fill[data-zone="chaud"]{ stroke:var(--chaud) }
.pp-gauge-sm .fill[data-zone="tiede"]{ stroke:var(--tiede) }
.pp-gauge-sm .fill[data-zone="froid"]{ stroke:var(--froid) }
/* [v1370] Fix score qui débordait du cercle bas-droit (screen Anthony liste leads).
   Root cause : .num avait position:absolute SANS inset:0 ni align, donc se positionnait
   au top-left du parent et débordait selon largeur du contenu.
   Fix : on superpose .num sur le svg via grid-area:1/1 (même cellule grid que le
   svg), + place-items:center du parent centre nativement le contenu. */
.pp-gauge-sm .num{
  grid-area:1/1;
  display:grid; place-items:center;
  font-family:var(--font-display); font-weight:800;
  font-size:12px; color:var(--text); font-variant-numeric:tabular-nums;
  line-height:1;
}

/* ═══════════ Demi-vie curve ═══════════ */
.pp-curve{
  background:var(--s2);
  border:1px solid var(--border); border-radius:var(--radius);
  padding:16px 18px 12px;
}
.pp-curve-hd{
  display:flex; align-items:baseline; gap:10px; margin-bottom:8px;
}
.pp-curve-hd .lbl{
  font-family:var(--mono); font-size:10px; letter-spacing:1.4px;
  text-transform:uppercase; font-weight:700; color:var(--text-dim);
}
.pp-curve-hd .seg{
  font-size:12px; color:var(--text); font-weight:600;
}
.pp-curve-hd .right{
  margin-left:auto;
  font-family:var(--mono); font-size:10.5px; color:var(--muted);
}
.pp-curve-hd .right b{ color:var(--accent); font-weight:700 }

.pp-curve-svg{ width:100%; height:88px; display:block }
.pp-curve-svg .area{ fill:color-mix(in srgb, var(--accent) 10%, transparent) }
.pp-curve-svg .line{ fill:none; stroke:var(--accent); stroke-width:1.5 }
.pp-curve-svg .median{
  stroke:var(--border-hi); stroke-width:1; stroke-dasharray:3 3; fill:none;
}
.pp-curve-svg .marker-line{ stroke:var(--text); stroke-width:1.5 }
.pp-curve-svg .marker-dot{ fill:var(--text); stroke:var(--surface); stroke-width:2 }

.pp-curve-axis{
  display:flex; justify-content:space-between;
  font-family:var(--mono); font-size:9.5px; letter-spacing:.3px;
  color:var(--muted); margin-top:2px;
  font-variant-numeric:tabular-nums;
}
.pp-curve-note{
  font-size:12.5px; color:var(--text-dim); line-height:1.45; margin-top:10px;
  border-top:1px solid var(--border); padding-top:10px;
}
.pp-curve-note b{ color:var(--text); font-weight:600 }
.pp-curve-note .pct{
  font-family:var(--mono); font-weight:700; color:var(--accent);
  font-variant-numeric:tabular-nums;
}

/* ═══════════ Triggers chips ═══════════ */
.pp-trigs{
  display:flex; flex-direction:column; gap:6px;
}
.pp-trig{
  display:grid; grid-template-columns:auto 1fr auto; gap:10px;
  align-items:center;
  padding:9px 12px;
  border:1px solid var(--border); border-radius:var(--radius);
  background:var(--surface);
  font-size:13px; color:var(--text);
}
.pp-trig.on{ border-color:color-mix(in srgb, var(--accent) 35%, var(--border)); background:var(--accent-dim) }
.pp-trig .dot{
  width:14px; height:14px; border-radius:50%;
  border:1.5px solid var(--border-hi); background:transparent;
  display:grid; place-items:center;
  flex-shrink:0;
}
.pp-trig.on .dot{ background:var(--accent); border-color:var(--accent) }
.pp-trig.on .dot::after{
  content:''; width:4px; height:6px;
  border-right:1.5px solid #fff; border-bottom:1.5px solid #fff;
  transform:rotate(45deg) translate(-1px,-1px);
}
.pp-trig .lbl{
  font-weight:500; color:var(--text-dim); line-height:1.35;
}
.pp-trig.on .lbl{ color:var(--text); font-weight:500 }
.pp-trig .lbl b{ color:var(--text); font-weight:600 }
.pp-trig .weight{
  font-family:var(--mono); font-size:10.5px; letter-spacing:.3px;
  color:var(--muted); font-variant-numeric:tabular-nums;
}
.pp-trig.on .weight{ color:var(--accent); font-weight:700 }
/* [v1415] Carte trigger MALUS (saturation copro) : rouge, point "−", valeur "-X%" */
.pp-trig.malus{ border-color:color-mix(in srgb, var(--chaud) 35%, var(--border)); background:color-mix(in srgb, var(--chaud) 9%, var(--surface)) }
.pp-trig.malus .dot{ background:var(--chaud); border-color:var(--chaud) }
.pp-trig.malus .dot::after{ content:''; width:6px; height:1.5px; background:#fff; border-radius:1px }
.pp-trig.malus .lbl{ color:var(--text); font-weight:500 }
.pp-trig.malus .weight{ color:var(--chaud); font-weight:700 }

/* ═══════════ Card / panel container ═══════════ */
.pp-card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  padding:18px 20px;
}
.pp-card.flush{ padding:0 }
.pp-card-hd{
  display:flex; align-items:baseline; gap:10px;
  padding-bottom:12px; margin-bottom:14px;
  border-bottom:1px solid var(--border);
}
.pp-card.flush .pp-card-hd{ padding:14px 18px; margin-bottom:0 }
.pp-card-hd h3{
  font-family:var(--font-display); font-weight:700;
  font-size:14px; letter-spacing:-.2px; color:var(--text);
}
.pp-card-hd .meta{
  font-family:var(--mono); font-size:10px; letter-spacing:1.2px;
  text-transform:uppercase; color:var(--muted); font-weight:600;
}
.pp-card-hd .right{ margin-left:auto; display:flex; gap:6px; align-items:center }

/* ═══════════ Activity feed ═══════════ */
.pp-feed{ display:flex; flex-direction:column }
.pp-feed-row{
  display:grid; grid-template-columns:auto 1fr auto; gap:12px;
  align-items:center;
  padding:11px 18px; border-bottom:1px solid var(--border);
  font-size:12.5px;
}
.pp-feed-row:last-child{ border-bottom:none }
.pp-feed-row .ic{
  width:24px; height:24px; border-radius:6px;
  background:var(--s2); color:var(--text-dim);
  display:grid; place-items:center; flex-shrink:0;
}
.pp-feed-row .ic[data-t="lettre"]{ background:color-mix(in srgb, var(--accent) 15%, transparent); color:var(--accent) }
.pp-feed-row .ic[data-t="visite"]{ background:color-mix(in srgb, var(--green) 15%, transparent); color:var(--green) }
.pp-feed-row .ic[data-t="convert"]{ background:color-mix(in srgb, var(--chaud) 15%, transparent); color:var(--chaud) }
.pp-feed-row .body{ min-width:0 }
.pp-feed-row .body .ttl{ color:var(--text); line-height:1.35 }
.pp-feed-row .body .ttl b{ font-weight:600 }
.pp-feed-row .body .sub{
  font-family:var(--mono); font-size:10px; color:var(--muted);
  letter-spacing:.3px; margin-top:2px;
}
.pp-feed-row .time{
  font-family:var(--mono); font-size:10.5px; color:var(--muted);
  white-space:nowrap;
}

/* ═══════════ Screen B — Filters sidebar ═══════════ */
.pp-b-grid{
  display:grid; grid-template-columns:248px 1fr;
  gap:18px; align-items:start;
}

/* [v1385→v1386] D.10 J5b — Layout map-centric REFINED
   - Sidebar 248px (match #page-clients .clients-layout, pas 280 comme v1385)
   - Hero kpi-strip-card (pattern Dossiers .kpi-strip-card)
   - View-seg inline droite du hero (pas de résa bar séparée)
   - Bouton collapse INSIDE sidebar header (pattern Biens S1 "FILTRES «")
   - Plus de .pp-resbar--compact (killé, dette à cleanup)
*/
/* [v1385→v1388→v1389] D.10 J5e — Map FIXED HEIGHT viewport-based
   
   Anthony v1389 : "ça va pas du tout il faut que la carte soit hauteur ecran fixe"
   
   ROOT CAUSE de l'échec v1388 flex stretch : la chain flex se casse à
   #page-prospection qui n'est pas un flex container (juste un div avec padding
   layout-tokens). Donc mon flex:1 sur .pp-page--mapcentric était ignoré
   (pas de parent flex pour stretch). Map host gardait sa height auto = mapEl
   height 100% de auto = 0 ou mini → MapLibre rendait à minimum.
   
   FIX v1389 : viewport-based fixed height directement sur le map host.
   Calcul du chrome : shellv2-main 25 (top padding via layout-tokens) + 40
   (bottom padding) = 65. Page : ~40 breadcrumb + 14 (pp-page top) + 50 hero
   + 10 margin + 18 (pp-page bottom) = 132. Total ~197. height calc(100vh-180)
   donne ~10-20px d'espace blanc en bas (margin de sécurité, négligeable).
   
   Quand chips actifs apparaissent (~35px de plus), la page overflow d'autant,
   le shellv2-main overflow-y:auto gère le scroll. Acceptable pour cas rare.
*/
.pp-page--mapcentric{
  padding:0 24px 40px;  /* [v1450] = padding inline de #page-clients (0 24px 40px) : 24px gauche/droite, 40px bas. #page-prospection n'a aucun padding inline (contrairement à #page-clients), c'est donc .pp-page qui le porte. */
  max-width:none;
  display:flex; flex-direction:column;
  box-sizing:border-box;
}
.pp-page--mapcentric .pp-hero-row{
  margin-bottom:6px;
  flex-shrink:0;
}
.pp-hero-row{
  display:flex; align-items:center;
  gap:12px;
}
.pp-hero-row .kpi-strip-card{
  margin:0;
  flex:0 0 auto;
}
.pp-hero-row .page-view-switcher{
  margin:0 0 0 auto;
}
.pp-b-grid--mapcentric{
  grid-template-columns:248px 1fr;
  gap:18px;
}
.pp-b-grid--mapcentric.is-collapsed{
  grid-template-columns:44px 1fr;
}
.pp-b-grid--mapcentric .pp-filters{
  max-height:calc(100vh - 180px);
  overflow:auto;
}
.pp-b-grid--mapcentric .pp-leads-map-host{
  height:calc(100vh - 180px);
  min-height:0;                  /* override base min-height:600px */
}
/* [v2066] S3/S4 : colonne latérale retirée (contrôles carte dans la barre du
   chrome) -> carte/liste pleine largeur. Garde la hauteur viewport de la carte
   (règle .pp-b-grid--mapcentric .pp-leads-map-host ci-dessus). */
.pp-b-grid--nofilters{ grid-template-columns:1fr !important; gap:0 !important; }
/* Popovers de la barre hébergeant les panneaux modules (Marché / Mes dossiers).
   Un peu plus larges que les dropdowns de filtre standard pour loger les
   contrôles (années/métrique/gradient/comparaison, segments/consultant). */
.df-pop.pp-bar-pop{ min-width:250px; max-width:300px; padding:12px; }
.pp-scope .df-pop.pp-bar-pop{ padding:12px; }

/* [v2066] Vues sauvegardées (DonnaViews) relogées dans la barre : le bouton est
   stylé width:100% (colonne verticale) par le module -> on le rend compact et
   horizontal, aligné sur les autres chips de la barre. */
.pp-views-slot{ display:inline-flex; align-items:center; flex-shrink:0; }
.pp-views-slot .donna-views-btn{
  width:auto !important; margin:0 !important;
  height:26px !important; padding:0 12px !important;
  border-radius:8px !important; box-sizing:border-box;
}
/* [v2070] Marché dans la barre : le chip porte déjà le titre + l'année ->
   l'en-tête « MARCHÉ · VENTES IRIS » + chevron du panneau est redondant dans le
   popover, on le masque et on force le corps déplié. */
.df-pop.pp-bar-pop .pp-mkt-head{ display:none !important; }
.df-pop.pp-bar-pop .pp-mkt.is-collapsed .pp-mkt-body{ display:block !important; }
/* [v1386→DEAD v1387→cleanup v1388] .pp-hero-actions plus utilisée (markup retiré) */

/* [v1386] Sidebar header avec bouton collapse « (remplace pp-resbar killée) */
.pp-filters-head{
  display:flex; align-items:center; justify-content:space-between;
  padding:10px 16px;
  border-bottom:1px solid var(--border);
}
.pp-filters-title{
  font-family:var(--mono); font-size:10px; letter-spacing:1.4px;
  text-transform:uppercase; color:var(--muted); font-weight:700;
}
.pp-filters-collapse{
  width:24px; height:24px; border-radius:6px;
  background:transparent; border:1px solid var(--border);
  color:var(--text-dim); cursor:pointer;
  display:grid; place-items:center;
  font-size:13px; line-height:1; font-weight:600;
  transition:all .15s ease;
}
.pp-filters-collapse:hover{
  background:var(--surface-2, var(--s2, #f9fafb));
  color:var(--text); border-color:var(--border-hi, var(--border));
}

/* [v1386] Chips filtres actifs (pattern Clients/Biens, dans pg-hero) */
.pp-chip{
  display:inline-flex; align-items:center; gap:6px;
  padding:4px 10px;
  background:var(--accent-bg, color-mix(in srgb, var(--accent, #6366f1) 12%, transparent));
  color:var(--accent, #6366f1);
  border:1px solid color-mix(in srgb, var(--accent, #6366f1) 25%, transparent);
  border-radius:14px;
  font-size:11.5px; font-weight:500;
  cursor:pointer;
  transition:all .15s ease;
}
.pp-chip:hover{
  background:color-mix(in srgb, var(--accent, #6366f1) 18%, transparent);
}
.pp-chip .x{
  font-size:10px; opacity:.7;
  font-weight:600;
}
.pp-chip:hover .x{ opacity:1 }
.pp-chip-clear{
  background:transparent; border:none;
  color:var(--text-dim); font-size:11.5px;
  cursor:pointer; padding:4px 6px;
  text-decoration:underline; text-decoration-style:dotted;
}
.pp-chip-clear:hover{ color:var(--text) }

/* [v1386] Sidebar mode RAIL (44px collapsed) */
.pp-filters--rail{
  width:44px; padding:6px 4px;
  display:flex; flex-direction:column; gap:4px;
  align-items:center;
}
.pp-rail-toggle, .pp-rail-btn{
  width:36px; height:36px;
  border-radius:8px;
  background:transparent; border:none;
  color:var(--text-dim); cursor:pointer;
  display:grid; place-items:center;
  position:relative;
  transition:all .15s ease;
}
.pp-rail-toggle{
  background:var(--surface-2, var(--s2, #f9fafb));
  border:1px solid var(--border);
  font-size:13px; font-weight:600;
  margin-bottom:8px;
}
.pp-rail-toggle:hover, .pp-rail-btn:hover{
  background:var(--surface-2, var(--s2, #f9fafb)); color:var(--text);
}
.pp-rail-btn.is-active{
  background:color-mix(in srgb, var(--accent, #6366f1) 12%, transparent);
  color:var(--accent, #6366f1);
}
.pp-rail-btn svg{ width:16px; height:16px }
.pp-rail-dot{
  position:absolute; top:5px; right:5px;
  width:7px; height:7px; border-radius:50%;
  background:var(--accent, #6366f1);
  box-shadow:0 0 0 2px var(--surface, #fff);
}

/* [v1385→v1386] DEAD : pp-resbar--compact, pp-collapse-toggle (killés en J5b) */
/* À cleanup phase D.11 si confirmé inutile */

.pp-filters{
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius-lg);
  padding:6px 0;
  position:sticky; top:18px;
  font-size:12.5px;
}
.pp-filters .grp{
  padding:12px 16px; border-bottom:1px solid var(--border);
}
.pp-filters .grp:last-child{ border-bottom:none }
.pp-filters .grp-ttl{
  font-family:var(--mono); font-size:10px; letter-spacing:1.4px;
  text-transform:uppercase; color:var(--muted); font-weight:700;
  margin-bottom:10px;
  display:flex; align-items:center; justify-content:space-between;
}
.pp-filters .grp-ttl .clear{
  font-family:var(--font); font-size:10.5px; text-transform:none;
  letter-spacing:0; color:var(--accent); font-weight:600;
}
.pp-filters .opt{
  display:flex; align-items:center; gap:9px;
  padding:5px 0; cursor:pointer; line-height:1.3;
  color:var(--text-dim);
}
.pp-filters .opt:hover{ color:var(--text) }
.pp-filters .opt .cb{
  width:14px; height:14px; border-radius:3px;
  border:1.5px solid var(--border-hi); background:var(--surface);
  flex-shrink:0;
}
.pp-filters .opt.on .cb{
  background:var(--text); border-color:var(--text);
  position:relative;
}
.pp-filters .opt.on .cb::after{
  content:''; position:absolute; left:3px; top:1px;
  width:4px; height:7px;
  border-right:1.5px solid var(--bg); border-bottom:1.5px solid var(--bg);
  transform:rotate(45deg);
}
.pp-filters .opt.on{ color:var(--text) }
.pp-filters .opt .ct{
  margin-left:auto;
  font-family:var(--mono); font-size:10.5px;
  color:var(--muted); font-variant-numeric:tabular-nums;
}
.pp-filters .pills{
  display:flex; flex-wrap:wrap; gap:5px;
}
.pp-filters .pill{
  padding:4px 9px; border-radius:99px;
  font-family:var(--mono); font-size:10.5px; letter-spacing:.3px;
  border:1px solid var(--border); color:var(--text-dim);
  cursor:pointer;
}
.pp-filters .pill.on{
  background:var(--text); color:var(--bg); border-color:var(--text);
}
/* [v1373] Pill dim (compteur=0, p.ex. bucket sans aucun lead) — visible mais
   désactivée visuellement. Reste cliquable au cas où on veut filtrer "rien". */
.pp-filters .pill.dim{
  opacity:.45;
}
/* [v1373] Compteur intégré au pill (utilisé pour les buckets temps).
   Plus discret qu'un badge externe, intégré dans la pill elle-même. */
.pp-filters .pill .ct{
  margin-left:6px; opacity:.7;
  font-variant-numeric:tabular-nums;
}
.pp-filters .pill.on .ct{ opacity:.85 }
.pp-filters .range{
  position:relative; height:32px; padding-top:18px;
}
.pp-filters .range-lbl{
  display:flex; justify-content:space-between;
  font-family:var(--mono); font-size:10px; color:var(--muted);
  margin-top:6px; font-variant-numeric:tabular-nums;
}

/* ═══════════ Screen B — Mode toggle + result bar ═══════════ */

/* ═══════════ Screen B — Map ═══════════ */
.pp-map{
  height:560px; border-radius:var(--radius-lg);
  border:1px solid var(--border);
  background:var(--s2);
  position:relative; overflow:hidden;
}
.pp-map-grid{
  position:absolute; inset:0;
  background-image:
    linear-gradient(var(--border) 1px, transparent 1px),
    linear-gradient(90deg, var(--border) 1px, transparent 1px);
  background-size:80px 80px;
  opacity:.55;
}
/* parcels = svg in JS */
.pp-map-parcel{
  cursor:pointer;
  transition:stroke-width .12s, filter .12s;
}
.pp-map-parcel:hover{ stroke-width:2; filter:brightness(1.15) }
.pp-map-parcel.selected{ stroke:var(--text); stroke-width:2.5 }
.pp-map-street{
  font-family:var(--mono); font-size:10px; font-weight:600;
  fill:var(--muted); letter-spacing:.5px;
  text-transform:uppercase;
  pointer-events:none;
}

.pp-map-legend{
  position:absolute; bottom:16px; left:16px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius); padding:10px 13px;
  box-shadow:var(--shadow);
  font-size:11px;
}
.pp-map-legend .lbl{
  font-family:var(--mono); font-size:9.5px; letter-spacing:1.2px;
  text-transform:uppercase; color:var(--muted); font-weight:600;
  margin-bottom:8px;
}
.pp-map-legend .scale{
  display:flex; align-items:center; gap:0; width:160px; height:6px;
  border-radius:99px;
  background:linear-gradient(90deg, var(--froid), var(--tiede), var(--chaud));
}
.pp-map-legend .ticks{
  display:flex; justify-content:space-between; margin-top:4px;
  font-family:var(--mono); font-size:9.5px; color:var(--muted);
  font-variant-numeric:tabular-nums;
}

.pp-map-tools{
  position:absolute; top:16px; right:16px;
  display:flex; flex-direction:column; gap:4px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius);
  padding:4px;
  box-shadow:var(--shadow);
}
.pp-map-tools button{
  width:28px; height:28px; border-radius:3px;
  color:var(--text-dim); display:grid; place-items:center;
}
.pp-map-tools button:hover{ background:var(--s2); color:var(--text) }
.pp-map-tools .div{ height:1px; background:var(--border); margin:2px 4px }

/* side panel from map click */
.pp-map-side{
  position:absolute; top:16px; left:16px;
  width:300px; background:var(--surface);
  border:1px solid var(--border-hi); border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);
  padding:14px 14px 12px;
}
.pp-map-side .anon-row{
  display:flex; align-items:center; gap:8px; margin-bottom:8px;
  font-family:var(--mono); font-size:10px; letter-spacing:.5px;
  color:var(--muted); text-transform:uppercase;
}
.pp-map-side .anon-row .dot{
  width:5px; height:5px; border-radius:50%; background:var(--accent);
}
.pp-map-side .addr{
  font-size:14px; font-weight:600; color:var(--text); line-height:1.35;
  margin-bottom:2px;
}
.pp-map-side .sub{
  font-family:var(--mono); font-size:11px; color:var(--text-dim);
  margin-bottom:12px;
}
.pp-map-side .row{
  display:flex; align-items:center; gap:8px; padding:6px 0;
  border-top:1px solid var(--border);
  font-size:12px; color:var(--text-dim);
}
.pp-map-side .row .lbl{ width:78px; color:var(--muted);
  font-family:var(--mono); font-size:10px; letter-spacing:.3px; text-transform:uppercase }
.pp-map-side .row .val{ font-weight:500; color:var(--text); font-variant-numeric:tabular-nums }
.pp-map-side .acts{
  margin-top:12px; display:flex; gap:6px;
}

/* ═══════════ Screen B — List/Table ═══════════ */
/* [v1462] Scroll interne + thead figé : même bande que le host carte
   (calc(100vh - 180px)). Bordure/radius/scroll portés par .pp-list-scroll,
   la table n'a plus d'overflow:hidden (qui couperait le thead sticky). */
.pp-list-host{ display:flex; flex-direction:column; gap:10px; }

.pp-checkbox-cell{ width:30px }
.pp-checkbox{
  width:16px; height:16px; border-radius:4px;
  display:inline-block; vertical-align:middle; box-sizing:border-box;
  border:1.5px solid var(--border-hi); background:var(--surface);
  cursor:pointer;
}
.pp-checkbox.on{
  background:var(--text); border-color:var(--text);
  position:relative;
}
.pp-checkbox.on::after{
  content:''; position:absolute; left:5px; top:1.5px;
  width:4px; height:8px;
  border-right:2px solid var(--bg); border-bottom:2px solid var(--bg);
  transform:rotate(45deg);
}

/* batch action bar (sticky on selection) */
.pp-batch{
  display:flex; align-items:center; gap:14px;
  padding:12px 16px;
  background:var(--text); color:var(--bg);
  border-radius:var(--radius);
  margin-bottom:12px;
  box-shadow:var(--shadow);
}
.pp-batch .ct{
  font-family:var(--mono); font-size:11px; letter-spacing:.4px;
  font-weight:600;
}
.pp-batch .ct b{ font-variant-numeric:tabular-nums }
.pp-batch .acts{ margin-left:auto; display:flex; gap:6px }
.pp-batch .acts .pp-btn{
  background:transparent; border-color:color-mix(in srgb, var(--bg) 25%, transparent);
  color:var(--bg);
}
.pp-batch .acts .pp-btn:hover{ background:color-mix(in srgb, var(--bg) 12%, transparent) }
.pp-batch .acts .pp-btn.primary{
  background:var(--bg); color:var(--text);
}

/* ═══════════ Screen C — Fiche structure ═══════════ */

/* [v1361] Grid global fiche : hero + Pourquoi + Action + Historique en col
   gauche, Donna Predict + Décomposition en col droite. Anthony : "tu réduis
   la largeur du hero en haut pour faire remonter la colonne de droite".
   [v1362] Anthony : "mets les mêmes proportions que sur S1 pour que ce soit
   harmonieux" → alignement PIXEL-PERFECT sur le pattern Margot officiel
   .fiche/.fiche-main/.fiche-rail (cf client-page-v2.css L72-104) :
   - Col droite : 340px (vs 380 v1361) → match exact fiche client
   - .pp-c-fiche-main : flex column + gap 16px (au lieu de margins inline)
   - .pp-c-fiche-main : min-height calc(100vh - 80px) pour sticky rail (cf
     comment fix v898 dans client-page-v2.css : sans ça, si rail > main,
     le grid prend la hauteur de la rail et sticky n'a pas de room)
   - .pp-c-fiche-side : flex column + gap 14px (pattern fiche-rail) */
.pp-c-fiche-grid{
  display:grid;
  grid-template-columns: minmax(0, 1fr) 340px;
  gap:20px;
  align-items:start;
}
.pp-c-fiche-main{
  min-width:0;
  display: flex;
  flex-direction: column;
  gap: 16px;
  min-height: calc(100vh - 80px);
}
.pp-c-fiche-side{
  display:flex; flex-direction:column;
  gap:14px;
  position:sticky; top:60px;          /* colle sous le header sticky */
}

/* Hero "inline" : variante du hero standard sans margin-bottom (le gap du
   grid s'en charge) et sans la colonne gauge (déplacée dans Donna Predict).
   Du coup grid-template-columns: photo + body (sans 3e col). */
.pp-c-hero.pp-c-hero--inline{
  grid-template-columns: 240px 1fr;
  margin-bottom: 0;
  padding: 18px;
  gap: 18px;
}
.pp-c-hero.pp-c-hero--inline .photo{
  width: 240px; height: 180px;
}
.pp-c-hero.pp-c-hero--inline h1{
  font-size: 22px;
}

/* ─── [v1361] CARD DONNA PREDICT (inspirée DONNA INSTINCT PWA) ─── */
.pp-c-predict{
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--accent) 4%, var(--surface)),
    color-mix(in srgb, var(--accent) 8%, var(--surface)));
  border: 1px solid color-mix(in srgb, var(--accent) 24%, var(--border));
  border-radius: var(--radius-lg);
  padding: 16px;
  box-shadow: var(--shadow-sm);
  display: flex; flex-direction: column;
  gap: 12px;
}
.pp-c-predict-head{
  display:flex; align-items:center; justify-content:space-between;
  padding-bottom: 10px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 12%, var(--border));
}
.pp-c-predict-id{
  display:flex; align-items:center; gap:8px;
}
.pp-c-predict-ico{
  width: 24px; height: 24px;
  border-radius: 50%;
  background: var(--accent);
  color: var(--bg);
  display: grid; place-items: center;
}
.pp-c-predict-ico svg{ width: 13px; height: 13px; }
.pp-c-predict-lbl{
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--accent);
}
.pp-c-predict-time{
  font-family: var(--mono);
  font-size: 10.5px;
  color: var(--muted);
  text-transform: lowercase;
}
.pp-c-predict-score{
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 6px 0;
}
.pp-c-predict-num{
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 44px;
  line-height: 1;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.pp-c-predict-bar{
  height: 8px;
  background: color-mix(in srgb, var(--text) 8%, transparent);
  border-radius: 99px;
  overflow: hidden;
  position: relative;
}
.pp-c-predict-bar-fill{
  height: 100%;
  border-radius: 99px;
  transition: width 600ms cubic-bezier(.16,1,.3,1);
}
.pp-c-predict-status{
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: 4px;
}
.pp-c-predict-status.status-chaud{
  background: color-mix(in srgb, var(--chaud) 14%, transparent);
  color: var(--chaud);
}
.pp-c-predict-status.status-tiede{
  background: color-mix(in srgb, var(--tiede) 14%, transparent);
  color: var(--tiede);
}
.pp-c-predict-status.status-froid{
  background: color-mix(in srgb, var(--froid) 14%, transparent);
  color: var(--froid);
}
.pp-c-predict-narr{
  font-size: 13px;
  line-height: 1.5;
  color: var(--text);
}
.pp-c-predict-narr b{
  font-weight: 600;
  color: var(--text);
}
.pp-c-predict-meta{
  font-family: var(--mono);
  font-size: 10.5px;
  color: var(--muted);
  text-transform: lowercase;
  letter-spacing: .3px;
}
/* ─── [Phase C] Bloc Signal Succession ─────────────────────────────────────
   Affiché dans la card Donna Predict si lead.deces_signal_intensity n'est
   pas null. Indique la pression succession du secteur sans nominatif (RGPD).
   3 intensités : high (chaud), medium (tiede), low (froid).
*/
/* [v1380] Bloc Volume Successions DÉPLACÉ de la card Donna Predict (col droite)
 * vers la colonne gauche, sous "Triggers détectés". Le margin-top de 18px
 * (au lieu de 8px) le sépare visuellement des trigs au-dessus. Le margin-top
 * spécifique s'applique uniquement quand le bloc est dans .pp-why-col (= col
 * gauche). Dans la card Donna Predict (au cas où resté quelque part), le
 * margin original 8px restait préservé. */
.pp-c-deces{
  margin: 8px 0;
  border-radius: var(--radius);
  border: 1px solid var(--border);
  background: var(--s2);
  overflow: hidden;
}
.pp-why-col .pp-c-deces{
  margin-top: 18px;
}
.pp-c-deces[data-intensity="high"]{
  border-color: color-mix(in srgb, var(--chaud) 32%, var(--border));
  background: color-mix(in srgb, var(--chaud) 6%, var(--s2));
}
.pp-c-deces[data-intensity="medium"]{
  border-color: color-mix(in srgb, var(--tiede) 32%, var(--border));
  background: color-mix(in srgb, var(--tiede) 6%, var(--s2));
}
.pp-c-deces[data-intensity="low"]{
  border-color: color-mix(in srgb, var(--froid) 20%, var(--border));
  background: var(--s2);
}
.pp-c-deces-hd{
  display: flex; align-items: center; gap: 8px;
  padding: 8px 12px 6px;
  font-family: var(--mono); font-size: 10px; font-weight: 700;
  letter-spacing: 1.2px; text-transform: uppercase;
}
.pp-c-deces[data-intensity="high"] .pp-c-deces-hd{ color: var(--chaud) }
.pp-c-deces[data-intensity="medium"] .pp-c-deces-hd{ color: var(--tiede) }
.pp-c-deces[data-intensity="low"] .pp-c-deces-hd{ color: var(--froid) }
.pp-c-deces-ico{ font-size: 12px; line-height: 1 }
.pp-c-deces-body{
  padding: 0 12px 10px;
  display: flex; flex-direction: column; gap: 4px;
}
.pp-c-deces-msg{
  font-size: 12.5px; line-height: 1.4; color: var(--text);
}
.pp-c-deces-stats{
  font-size: 11.5px; color: var(--text-dim);
  font-variant-numeric: tabular-nums;
}
.pp-c-deces-stats b{ color: var(--text); font-weight: 700 }
.pp-c-deces-stats .dim{ color: var(--muted) }
.pp-c-deces-foot{
  font-family: var(--mono); font-size: 9.5px;
  color: var(--muted); letter-spacing: .3px;
  text-transform: lowercase;
  margin-top: 2px;
}
/* ─── [v1363] Wrappers actions intégrés dans la card Donna Predict ───
   Anciennes règles .pp-c-predict-sugs, -sug-, -cta- supprimées [b2591 : la séquence étoile-slash du texte d origine fermait ce commentaire trop tôt et le navigateur mangeait la règle suivante — vide, sans impact ; neutralisée] (les "suggestions"
   et le CTA "Demander à donna" ont été retirés par Anthony — la card absorbe
   maintenant les 4 vraies actions concrètes + feedback, réutilisant les
   classes existantes .pp-actions/.pp-action/.pp-feedback).
   [v1364] Bloc .pp-c-predict-reveal aussi supprimé (revealHtml retiré du
   rendu car data propriétaire pas disponible — voir commentaire v1364
   dans prospection.js). Si on réinjecte reveal plus tard, on remettra
   les règles ici. */

/* Actions concrètes intégrées : on hérite tout de .pp-actions/.pp-action
   (définis plus bas, ils sont déjà parfaits visuellement). Wrapper modificateur
   sans override de fond — les actions gardent leur fond surface/text. */
.pp-actions.pp-c-predict-actions{
  /* hérite display:flex;flex-direction:column;gap:6px de .pp-actions */
}

/* Feedback dans la card Predict : la .pp-feedback est stylée pour avoir
   un margin-top + border-top (cf bas du fichier), ça marche aussi dans
   notre card. Léger override couleur border-top pour rester cohérent
   avec le fond violet doux de la card. */
.pp-c-predict .pp-feedback{
  border-top-color: color-mix(in srgb, var(--accent) 12%, var(--border));
}

/* ─── Grid legacy (encore utilisée par d'autres écrans Prospection) ─── */

.pp-c-hero{
  display:grid; grid-template-columns:300px 1fr auto;
  gap:22px; align-items:center;
  padding:22px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius-lg);
  margin-bottom:20px;
}
.pp-c-hero .photo{
  width:300px; height:200px;
  border-radius:var(--radius);
  background:
    linear-gradient(180deg,
      color-mix(in srgb, var(--froid) 14%, var(--s2)),
      color-mix(in srgb, var(--accent) 8%, var(--s2)));
  position:relative; overflow:hidden;
  border:1px solid var(--border);
}
.pp-c-hero .photo::before{
  content:''; position:absolute; inset:0;
  background:
    repeating-linear-gradient(135deg,
      transparent 0 18px,
      color-mix(in srgb, var(--text) 4%, transparent) 18px 19px);
}
.pp-c-hero .photo .tag{
  position:absolute; top:10px; left:10px;
  font-family:var(--mono); font-size:9.5px; letter-spacing:.5px;
  background:color-mix(in srgb, var(--text) 88%, transparent); color:var(--bg);
  padding:3px 7px; border-radius:3px; text-transform:uppercase;
}
.pp-c-hero .photo .pin-ic{
  position:absolute; bottom:12px; right:12px;
  width:32px; height:32px; border-radius:50%;
  background:var(--surface); border:1px solid var(--border);
  display:grid; place-items:center; color:var(--text-dim);
  box-shadow:var(--shadow-sm);
}
/* [v1340] Hero fiche : si vraie carte cadastre, masque le pattern */
.pp-c-hero .photo.has-map{ background:var(--s2) }
.pp-c-hero .photo.has-map::before{ display:none }
.pp-c-hero .photo.has-map .tag,
.pp-c-hero .photo.has-map .pin-ic{ z-index:5 }
.pp-c-hero .body{ min-width:0 }
.pp-c-hero .anon{
  font-family:var(--mono); font-size:10px; letter-spacing:1.5px;
  text-transform:uppercase; color:var(--accent); font-weight:700;
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 8px; border-radius:99px;
  background:var(--accent-dim); margin-bottom:10px;
}
.pp-c-hero .anon::before{
  content:''; width:5px; height:5px; border-radius:50%;
  background:var(--accent);
}
.pp-c-hero h1{
  font-family:var(--font-display); font-weight:700;
  font-size:26px; letter-spacing:-.5px; color:var(--text);
  line-height:1.2;
}
.pp-c-hero h1 .ref{ color:var(--muted); font-weight:500; font-size:18px; margin-left:6px }
.pp-c-hero .sub{
  margin-top:6px; display:flex; gap:12px; align-items:center; flex-wrap:wrap;
  font-family:var(--mono); font-size:11.5px; color:var(--text-dim);
  font-variant-numeric:tabular-nums;
}
.pp-c-hero .sub .sep{ color:var(--border-hi) }
.pp-c-hero .sub b{ color:var(--text); font-weight:600 }
.pp-c-hero .badges{
  margin-top:12px; display:flex; gap:6px; flex-wrap:wrap;
}

/* status badge */
.pp-status{
  display:inline-flex; align-items:center; gap:5px;
  padding:3px 9px; border-radius:99px;
  font-family:var(--mono); font-size:10.5px; letter-spacing:.3px;
  font-weight:600;
  background:color-mix(in srgb, var(--text-dim) 12%, transparent);
  color:var(--text-dim);
  border:1px solid color-mix(in srgb, var(--text-dim) 22%, transparent);
}
.pp-status.rp{ background:color-mix(in srgb, var(--green) 12%, transparent); color:var(--green); border-color:color-mix(in srgb, var(--green) 25%, transparent) }
.pp-status.loc{ background:color-mix(in srgb, var(--froid) 12%, transparent); color:var(--froid); border-color:color-mix(in srgb, var(--froid) 25%, transparent) }
.pp-status.dpe-f{ background:color-mix(in srgb, var(--chaud) 12%, transparent); color:var(--chaud); border-color:color-mix(in srgb, var(--chaud) 25%, transparent) }
.pp-status .dot{ width:5px; height:5px; border-radius:50%; background:currentColor }

/* "Pourquoi ce score" narrative */
.pp-why{
  padding:20px 22px;
}
.pp-why h2{
  font-family:var(--font-display); font-weight:700;
  font-size:18px; letter-spacing:-.3px; color:var(--text);
  margin-bottom:4px;
  display:flex; align-items:center; gap:10px;
}
.pp-why h2 .ic{
  width:22px; height:22px; border-radius:6px;
  background:var(--accent-dim); color:var(--accent);
  display:grid; place-items:center;
}
.pp-why .lede{
  font-size:14px; line-height:1.55; color:var(--text-dim);
  text-wrap:pretty; max-width:680px;
  margin-bottom:18px;
}
.pp-why .lede b{ color:var(--text); font-weight:600 }
.pp-why .lede em{
  font-style:normal;
  background:linear-gradient(95deg, var(--accent), var(--accent-hi));
  -webkit-background-clip:text; background-clip:text; color:transparent;
  font-weight:700;
}
.pp-why-cols{
  display:grid; grid-template-columns:1fr 1fr; gap:18px;
}
.pp-why-col h3{
  font-family:var(--mono); font-size:10px; letter-spacing:1.4px;
  text-transform:uppercase; color:var(--muted); font-weight:700;
  margin-bottom:10px;
  display:flex; align-items:center; gap:7px;
}
.pp-why-col h3 .ct{
  font-family:var(--font); font-size:10.5px; letter-spacing:0;
  text-transform:none; color:var(--text-dim);
  background:var(--s2); padding:1px 6px; border-radius:99px;
  font-weight:600;
}

/* Comparables DVF */
/* [v1379] Anthony : "rajoute du padding entre chaque rectangle des ventes
 * dvf passés". gap 6px→12px (double) pour aérer la liste sans changer la
 * densité interne de chaque card .pp-comp. */
.pp-comp-list{ display:flex; flex-direction:column; gap:12px }
.pp-comp{
  display:grid; grid-template-columns:1fr auto auto; gap:12px;
  align-items:center;
  padding:10px 12px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius);
  font-size:12.5px;
}
.pp-comp .a{ font-weight:500; color:var(--text); line-height:1.3 }
.pp-comp .a .b{
  font-family:var(--mono); font-size:10px; color:var(--muted); letter-spacing:.3px;
  margin-top:2px; display:block;
}
.pp-comp .pm2{
  font-family:var(--font-display); font-weight:700;
  font-size:14px; color:var(--text); font-variant-numeric:tabular-nums;
  text-align:right;
}
.pp-comp .pm2 .u{ font-size:10px; color:var(--muted); font-weight:500; margin-left:2px }
.pp-comp .date{
  font-family:var(--mono); font-size:10.5px; color:var(--muted);
  white-space:nowrap; font-variant-numeric:tabular-nums;
}

/* Action panel (right column) */


.pp-actions{ display:flex; flex-direction:column; gap:6px }
.pp-action{
  display:grid; grid-template-columns:auto 1fr auto; gap:11px;
  align-items:center;
  padding:11px 12px;
  background:var(--s2); border-radius:var(--radius);
  cursor:pointer; text-align:left;
  border:1px solid transparent;
  transition:border-color .12s, background .12s;
}
.pp-action:hover{ background:var(--s3); border-color:var(--border) }
.pp-action.primary{
  background:var(--text); color:var(--bg);
}
.pp-action.primary:hover{ background:var(--text-dim); border-color:transparent }
.pp-action .ic{
  width:28px; height:28px; border-radius:6px;
  background:var(--surface); color:var(--text);
  display:grid; place-items:center; flex-shrink:0;
  border:1px solid var(--border);
}
.pp-action.primary .ic{
  background:color-mix(in srgb, var(--bg) 18%, transparent);
  color:var(--bg); border-color:color-mix(in srgb, var(--bg) 22%, transparent);
}
.pp-action .body{ min-width:0 }
.pp-action .ttl{
  font-size:13px; font-weight:600; line-height:1.25;
}
.pp-action .sub{
  font-family:var(--mono); font-size:10px; letter-spacing:.3px;
  color:var(--muted); margin-top:2px;
}
.pp-action.primary .sub{ color:color-mix(in srgb, var(--bg) 65%, transparent) }
.pp-action .arr{ color:var(--muted); transition:transform .15s }
.pp-action:hover .arr{ transform:translateX(2px); color:var(--text) }
.pp-action.primary .arr{ color:color-mix(in srgb, var(--bg) 70%, transparent) }

/* Feedback / pas pertinent */
.pp-feedback{
  margin-top:10px; padding-top:12px;
  border-top:1px solid var(--border);
  display:flex; gap:6px;
  font-family:var(--mono); font-size:10.5px; letter-spacing:.3px;
  color:var(--muted);
}
.pp-feedback button{
  color:var(--text-dim); padding:4px 8px; border-radius:3px;
  font-family:var(--font); font-size:11.5px; letter-spacing:0; font-weight:500;
  border:1px solid var(--border);
}
.pp-feedback button:hover{ background:var(--s2); color:var(--text) }
.pp-feedback button.no:hover{ color:var(--chaud); border-color:color-mix(in srgb, var(--chaud) 30%, var(--border)) }

/* Historique */
.pp-hist{ display:flex; flex-direction:column; gap:10px; padding:0 }
.pp-hist-row{
  display:grid; grid-template-columns:60px auto 1fr; gap:10px;
  align-items:flex-start;
  padding:11px 18px;
  border-bottom:1px solid var(--border);
}
.pp-hist-row:last-child{ border-bottom:none }
.pp-hist-row .date{
  font-family:var(--mono); font-size:10px; letter-spacing:.3px;
  color:var(--muted); padding-top:1px; font-variant-numeric:tabular-nums;
}
.pp-hist-row .ic{
  width:22px; height:22px; border-radius:6px;
  background:var(--accent-dim); color:var(--accent);
  display:grid; place-items:center; flex-shrink:0;
}
.pp-hist-row .body .ttl{ font-size:12.5px; color:var(--text); line-height:1.35 }
.pp-hist-row .body .ttl b{ font-weight:600 }
.pp-hist-row .body .sub{
  font-family:var(--mono); font-size:10px; color:var(--muted);
  margin-top:2px;
}

/* ═══════════ Screen D — Sous le capot ═══════════ */
.pp-d-grid{
  display:grid; grid-template-columns:1fr 1fr; gap:18px;
}
.pp-d-grid.three{ grid-template-columns:repeat(3, 1fr) }

/* Sources list */
.pp-src-list{
  display:flex; flex-direction:column;
  padding:0;
}
.pp-src{
  display:grid; grid-template-columns:auto 1fr auto auto; gap:14px;
  align-items:center;
  padding:12px 18px;
  border-bottom:1px solid var(--border);
}
.pp-src:last-child{ border-bottom:none }
.pp-src .badge{
  width:34px; height:34px; border-radius:var(--radius);
  background:var(--s2); color:var(--text-dim);
  display:grid; place-items:center;
  font-family:var(--mono); font-weight:700; font-size:11px; letter-spacing:.3px;
  border:1px solid var(--border);
}
.pp-src .body .nm{ font-size:13px; font-weight:600; color:var(--text); line-height:1.3 }
.pp-src .body .sub{ font-family:var(--mono); font-size:10.5px; color:var(--muted); letter-spacing:.3px; margin-top:2px }
.pp-src .fresh{
  font-family:var(--mono); font-size:10.5px; letter-spacing:.3px;
  padding:3px 8px; border-radius:99px; font-weight:600;
  display:inline-flex; align-items:center; gap:5px;
}
.pp-src .fresh.ok{ background:color-mix(in srgb, var(--green) 15%, transparent); color:var(--green) }
.pp-src .fresh.warn{ background:color-mix(in srgb, var(--tiede) 15%, transparent); color:var(--tiede) }
.pp-src .fresh .dot{ width:5px; height:5px; border-radius:50%; background:currentColor }
.pp-src .cov{
  text-align:right;
  font-family:var(--mono); font-size:11px; color:var(--text-dim); font-variant-numeric:tabular-nums;
}
.pp-src .cov b{ color:var(--text); font-weight:700; font-size:13px; display:block }

/* Calibration big number */
.pp-calib{
  padding:24px 22px;
  display:flex; align-items:flex-start; gap:24px;
}
.pp-calib .big{
  font-family:var(--font-display); font-weight:800;
  font-size:72px; letter-spacing:-2.5px; color:var(--text);
  line-height:.95; font-variant-numeric:tabular-nums;
}
.pp-calib .big .u{
  font-size:30px; color:var(--accent); margin-left:2px;
  font-weight:700; letter-spacing:-.5px; vertical-align:top;
}
.pp-calib .body{ padding-top:6px }
.pp-calib .body .ttl{
  font-size:14px; font-weight:600; color:var(--text); line-height:1.4;
  text-wrap:pretty;
}
.pp-calib .body .ttl b{ color:var(--accent); font-weight:700 }
.pp-calib .body .sub{
  font-family:var(--mono); font-size:11px; color:var(--muted);
  margin-top:6px; letter-spacing:.3px;
}

/* Bar chart segments */
.pp-bars{
  display:flex; flex-direction:column; gap:9px;
}
.pp-bar{
  display:grid; grid-template-columns:90px 1fr 60px; gap:10px;
  align-items:center; font-size:12px;
}
.pp-bar .lbl{ font-family:var(--mono); font-size:10.5px; color:var(--text-dim); letter-spacing:.3px }
.pp-bar .track{
  height:8px; background:var(--s2); border-radius:99px;
  position:relative; overflow:hidden;
}
.pp-bar .fill{ height:100%; border-radius:99px; background:var(--accent) }
.pp-bar .fill.green{ background:var(--green) }
.pp-bar .val{
  font-family:var(--mono); font-weight:700; font-size:11px;
  color:var(--text); text-align:right; font-variant-numeric:tabular-nums;
}

/* Coverage map */

/* Outcomes */
.pp-outc{
  display:flex; align-items:center; justify-content:space-between;
  padding:12px 0; gap:12px; border-bottom:1px dashed var(--border);
}
.pp-outc:last-child{ border-bottom:none }
.pp-outc .body .ttl{ font-size:13px; color:var(--text); font-weight:500 }
.pp-outc .body .sub{ font-family:var(--mono); font-size:10px; color:var(--muted); margin-top:2px }
.pp-outc .val{
  font-family:var(--font-display); font-weight:700;
  font-size:22px; color:var(--text); font-variant-numeric:tabular-nums;
}
.pp-outc.win .val{ color:var(--green) }
.pp-outc.loss .val{ color:var(--chaud) }

/* ═══════════ Generic chips & misc ═══════════ */
.pp-chip{
  display:inline-flex; align-items:center; gap:5px;
  font-family:var(--mono); font-size:10px; letter-spacing:.3px;
  padding:3px 7px; border-radius:3px; font-weight:600;
  background:var(--s2); border:1px solid var(--border);
  color:var(--text-dim);
}
.pp-chip.accent{
  background:var(--accent-dim); border-color:color-mix(in srgb, var(--accent) 30%, transparent);
  color:var(--accent);
}
.pp-chip.chaud{ background:color-mix(in srgb, var(--chaud) 12%, transparent); border-color:color-mix(in srgb, var(--chaud) 30%, transparent); color:var(--chaud) }
.pp-chip.tiede{ background:color-mix(in srgb, var(--tiede) 12%, transparent); border-color:color-mix(in srgb, var(--tiede) 30%, transparent); color:var(--tiede) }
.pp-chip.froid{ background:color-mix(in srgb, var(--froid) 12%, transparent); border-color:color-mix(in srgb, var(--froid) 30%, transparent); color:var(--froid) }
.pp-chip.green{ background:color-mix(in srgb, var(--green) 12%, transparent); border-color:color-mix(in srgb, var(--green) 30%, transparent); color:var(--green) }


/* utility */

.pp-empty{
  display:flex; flex-direction:column; align-items:center;
  padding:42px 18px; text-align:center; gap:8px;
  color:var(--text-dim);
}
.pp-empty .ic{ color:var(--muted) }
.pp-empty .ttl{ font-size:14px; font-weight:600; color:var(--text) }
.pp-empty .sub{ font-size:12.5px; max-width:340px; line-height:1.5 }

/* small confidence badge */
.pp-conf-pill{
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 8px; border-radius:99px;
  background:var(--s2); border:1px solid var(--border);
  font-family:var(--mono); font-size:10px; letter-spacing:.3px;
  color:var(--text-dim); font-weight:600;
}
.pp-conf-pill .d{ width:4px; height:4px; border-radius:50%; background:var(--green) }

/* [v1351] Hero one-line aligné proprement.
   Utilise align-items:baseline pour que les différentes tailles de font
   (10px uppercase, 16px chiffres, 13px labels, 11px mono) s'alignent
   visuellement sur la même baseline et non plus en center bancal. */
.pp-hero.pp-hero--oneline{
  display:flex; align-items:baseline; flex-wrap:wrap;
  gap:8px; padding:14px 20px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius-lg);
  margin-bottom:18px;
  font-size:13px;
  color:var(--text-dim);
  line-height:1;  /* normalise pour aligner proprement les baselines */
}
.pp-hero--oneline .eye{
  display:inline-flex; align-items:center; gap:6px;
  font-family:var(--mono); font-size:10px; font-weight:700;
  letter-spacing:1.4px; text-transform:uppercase;
  color:var(--accent);
  position:relative; top:-1px;  /* léger ajustement optique pour le uppercase */
}
.pp-hero--oneline .eye .pulse{
  width:6px; height:6px; border-radius:50%; background:var(--green);
  box-shadow:0 0 8px var(--green); flex-shrink:0;
}
.pp-hero--oneline .kpi-strip-num{
  font-family:var(--font-display, var(--font));
  font-weight:700; color:var(--text); font-size:16px;
  font-variant-numeric:tabular-nums; letter-spacing:-.4px;
  line-height:1;
}
.pp-hero--oneline .kpi-strip-lbl{
  font-family:var(--font); font-size:13px;
  color:var(--text-dim); font-weight:400;
  line-height:1;
}
.pp-hero--oneline .pp-hero-sep{
  color:var(--border-hi); font-size:13px;
  user-select:none; line-height:1;
}
.pp-hero--oneline .sig{
  font-family:var(--mono); font-size:11px;
  color:var(--muted); letter-spacing:.3px;
  line-height:1;
}
.pp-hero--oneline .sig b{
  color:var(--text-dim); font-weight:600;
}


/* [v1351] Card score donna style instinct (barre verticale violette à gauche) */
.pp-score-card{
  position:relative;
  padding:14px 16px 14px 20px;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  min-width:220px;
  display:flex; flex-direction:column; gap:10px;
}
.pp-score-card::before{
  content:''; position:absolute;
  left:0; top:0; bottom:0; width:3px;
  background:var(--accent);
  border-radius:var(--radius-lg) 0 0 var(--radius-lg);
}
.psc-head{
  display:flex; align-items:center; gap:8px;
}
.psc-icon{
  width:22px; height:22px; border-radius:50%;
  background:var(--accent); color:#fff;
  display:grid; place-items:center;
  flex-shrink:0;
}
.psc-icon svg{ width:12px; height:12px }
.psc-lbl{
  font-family:var(--font); font-size:11px; font-weight:600;
  color:var(--text); letter-spacing:.2px;
}
.psc-body{
  display:flex; align-items:center; gap:14px;
}
.psc-body .pp-gauge-sm{ flex-shrink:0 }
.psc-meta{ display:flex; flex-direction:column; gap:3px; min-width:0 }
.psc-label{
  font-family:var(--font); font-size:13px; font-weight:700;
  color:var(--text); letter-spacing:-.2px;
  text-transform:uppercase;
}
.psc-label[data-zone="chaud"]{ color:var(--chaud) }
.psc-label[data-zone="tiede"]{ color:var(--tiede) }
.psc-label[data-zone="froid"]{ color:var(--froid) }
.psc-conf{
  font-family:var(--mono); font-size:10.5px;
  color:var(--muted); letter-spacing:.3px;
  line-height:1.4;
}
.psc-conf b{ color:var(--text-dim); font-weight:600 }


/* ═══════════════════════════════════════════════════════════════════════
 * [v1379] Collapsible "Détail du score" intégré dans la card Donna Predict.
 * Anthony : "supprime la card Détail du score séparée, intègre-le dans Donna
 * Predict juste sous le score avec un bouton plier/déplier".
 * Replié par défaut. Toggle via data-open="true|false" sur le parent (set par
 * onclick inline dans le HTML). Anim CSS pure (max-height + opacity).
 * ═══════════════════════════════════════════════════════════════════════ */


/* Body collapsible : max-height 0 quand fermé, auto-ish quand ouvert
 * (max-height fixe à 800px = capacité large pour ne jamais clipper le contenu). */

/* Score final ligne (k = label, v = nombre, u = / 100) */

/* Intervalle confiance / modèle, sous le score final */

/* Respect prefers-reduced-motion */
@media (prefers-reduced-motion: reduce){
  }

/* ───────────────────────────────────────────────────────────────────
   [v1411] S1 — barre de stats hero discrète (texte léger, sans carte)
            S2 — bouton de zone solide haut-contraste (noir thème clair /
                 blanc thème noir, via --text/--bg qui s'inversent par thème)
   ─────────────────────────────────────────────────────────────────── */
.pp-hero-row .pp-hero-strip{
  background:transparent; border:0; box-shadow:none; padding:0;
  gap:12px; align-items:baseline; margin-left:0;   /* [v2045] chips retirés -> KPI à gauche, aligné sur la barre de filtres */
}
.pp-hero-row .page-view-switcher{ margin:0 0 0 auto; }  /* [v2045] toggle poussé à droite */
/* [v1413] chips inline : pas de marge verticale */
.pp-hero-row .pp-hero-strip .kpi-strip-card-item{ padding:0; }
.pp-hero-row .pp-hero-strip .kpi-strip-card-v{ font-size:13px; font-weight:600; }
.pp-hero-row .pp-hero-strip .kpi-strip-card-l{ font-size:11px; color:var(--muted); }

.ph-add.ghost[data-act="open-zone-modal"],
.ph-add.ghost.pp-zone-active[data-act="open-zone-modal"]{
  background:var(--text); color:var(--bg);
  border-color:var(--text); font-weight:600;
}
.ph-add.ghost[data-act="open-zone-modal"]:hover{ opacity:.88; }
.ph-add.ghost[data-act="open-zone-modal"] svg,
.ph-add.ghost[data-act="open-zone-modal"] svg *{ stroke:var(--bg); color:var(--bg); }

/* ═══ [v1438] Sidebar leads — UI cartes (cohérence avec clients/biens) ═══
   Chaque groupe .grp + le header FILTRES deviennent des cartes encadrées ;
   le conteneur .pp-filters passe en transparent (pile de cartes espacées).
   Le mode replié (.pp-filters--rail) est exclu pour ne pas être impacté. */
.pp-filters:not(.pp-filters--rail){
  background:transparent;
  border:none;
  padding:0;
}
/* [v1448] Le LOOK des cartes (border / bg / radius / padding) vient désormais
   d'une SOURCE UNIQUE : filters-margot.css, où la sidebar leads (.grp + header
   FILTRES) est branchée sur la même règle que .fside (clients/biens). On ne garde
   ici QUE l'espacement vertical propre à leads (la sidebar n'est pas un flex gap). */
.pp-filters:not(.pp-filters--rail) .pp-filters-head,
.pp-filters:not(.pp-filters--rail) .grp{
  margin-bottom:14px;
}
.pp-filters:not(.pp-filters--rail) .grp:last-child{
  margin-bottom:0;
}
/* Bouton « Vues » injecté : marge uniforme avec les cartes */
.pp-filters:not(.pp-filters--rail) .donna-views-btn{
  margin-bottom:14px;
}

/* [v1442] Badge « déjà converti en prospect » (liste leads) — vert, signal clair */
.pp-conv-badge{
  display:inline-flex; align-items:center;
  padding:2px 8px; margin-right:6px;
  border-radius:999px;
  font-family:var(--mono); font-size:9.5px; font-weight:700; letter-spacing:.4px;
  white-space:nowrap;
  background:color-mix(in srgb, #1d9e75 14%, transparent);
  color:#1d9e75;
  border:1px solid color-mix(in srgb, #1d9e75 45%, transparent);
}

/* [v1444] S1 — colonne adresse (liste leads) : prend l'espace dispo + ellipsis
   propre au lieu d'un crop brut (le tableau a overflow:hidden pour les coins). */

/* [v1449] Sidebar leads en mode LISTE : valeurs IDENTIQUES à .clients-sidefilters.
   Le grid leads est TOUJOURS .pp-b-grid--mapcentric (même en liste) — mes anciennes
   règles :not(--mapcentric) ne s'appliquaient donc jamais. On distingue le mode via
   .pp-mode-list / .pp-mode-map (ajouté au render). En mode carte, la sidebar garde
   sa hauteur calée sur la carte (règle .pp-b-grid--mapcentric .pp-filters). */
.pp-b-grid--mapcentric.pp-mode-list .pp-filters:not(.pp-filters--rail){
  position:sticky;
  top:14px;
  max-height:calc(100vh - 40px);
  overflow-y:auto;
  padding-bottom:20px;
}
.pp-b-grid--mapcentric.pp-mode-list .pp-filters:not(.pp-filters--rail)::-webkit-scrollbar{ width:3px; }
.pp-b-grid--mapcentric.pp-mode-list .pp-filters:not(.pp-filters--rail)::-webkit-scrollbar-thumb{ background:var(--border); border-radius:99px; }

/* [v1451] Quick-convert au survol de la ligne leads : bouton « + Prospect »
   révélé au hover de la row (cellule Détecté), conversion directe sans ouvrir
   la fiche. Le badge « ✓ Prospect » (déjà converti) devient cliquable (deep-link). */
.pp-detected-cell{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.pp-quick-prospect{
  flex-shrink:0;
  opacity:0; pointer-events:none;
  transition:opacity .12s, background .12s, color .12s;
  white-space:nowrap;
  font-family:var(--mono); font-size:10px; font-weight:700; letter-spacing:.3px;
  padding:4px 11px; border-radius:999px;
  background:color-mix(in srgb, #1d9e75 14%, transparent);
  border:1px solid color-mix(in srgb, #1d9e75 45%, transparent);
  color:#1d9e75; cursor:pointer;
}
.pp-quick-prospect:hover{ background:color-mix(in srgb, #1d9e75 24%, transparent); border-color:color-mix(in srgb, #1d9e75 70%, transparent); }
.pp-conv-badge[data-act="goto-prospect"]:hover{ filter:brightness(1.15); }

/* ════════════ [v1466] Plein écran carte (carte + sidebar) ════════════ */

/* [v2067] S1 : bouton plein écran DANS la carte, haut-droite, au-dessus du zoom
   +/- (retour Anthony). Le contrôle zoom MapLibre (top-right) est poussé sous
   le bouton. Masqué en plein écran (.pp-fs-exit prend le relais). */
.pp-map-fs-btn{
  position:absolute; top:12px; right:12px; z-index:11;
  width:32px; height:32px;
  border:1px solid var(--border); background:var(--bg);
  color:var(--text-dim,var(--muted)); border-radius:8px;
  display:inline-flex; align-items:center; justify-content:center;
  cursor:pointer; box-shadow:0 2px 8px rgba(0,0,0,.12);
  transition:border-color .12s, color .12s;
}
.pp-map-fs-btn:hover{ border-color:var(--accent); color:var(--accent); }
.pp-leads-map-host .maplibregl-ctrl-top-right{ top:52px; }
.pp-b-grid--mapcentric.pp-fs-on .pp-map-fs-btn{ display:none; }

body.pp-fs-lock{ overflow:hidden; }

#pp-fs-backdrop{
  position:fixed; inset:0; background:rgba(0,0,0,.6);
  z-index:9989; animation:ppFsFade .15s ease;
}
@keyframes ppFsFade{ from{opacity:0} to{opacity:1} }

.pp-b-grid--mapcentric.pp-fs-on{
  position:fixed; inset:2.5vh 2.5vw; z-index:9990; margin:0; max-width:none;
  background:var(--bg); border:1px solid var(--border); border-radius:14px;
  box-shadow:0 24px 80px rgba(0,0,0,.5); padding:12px;
  grid-template-rows:minmax(0,1fr); align-items:stretch;
  animation:ppFsPop .18s cubic-bezier(.4,0,.2,1);
}
@keyframes ppFsPop{ from{opacity:0; transform:scale(.98)} to{opacity:1; transform:scale(1)} }
.pp-b-grid--mapcentric.pp-fs-on .pp-leads-map-host{ height:auto !important; min-height:0; }
.pp-b-grid--mapcentric.pp-fs-on .pp-filters{ max-height:100% !important; }

.pp-fs-exit{
  position:absolute; top:26px; right:26px; z-index:6;
  width:34px; height:34px; border-radius:8px;
  border:1px solid var(--border); background:var(--surface); color:var(--text);
  display:flex; align-items:center; justify-content:center; cursor:pointer;
  box-shadow:0 2px 10px rgba(0,0,0,.25); transition:border-color .12s, color .12s;
}
.pp-fs-exit:hover{ border-color:var(--accent); color:var(--accent); }

/* [v1468] Plein écran : descend le contrôle zoom +/- (top-right) sous le bouton
   fermer (.pp-fs-exit à top:26px, ~34px de haut) pour éviter le chevauchement. */
.pp-b-grid--mapcentric.pp-fs-on .maplibregl-ctrl-top-right{ top:64px; }



/* [v1471] Bordure violette d'accent sur le panneau Marché / Comparateur
   (.pp-mkt-slot) pour le distinguer nettement des autres blocs de filtre. */
#page-prospection .pp-mkt-slot.grp{
  border:2px solid #8b7bff !important;
  border-radius:12px !important;
  box-shadow:none;
}
html[data-theme="noir"] #page-prospection .pp-mkt-slot.grp{
  border-color:#8b7bff !important;
  box-shadow:none;
}

/* [v1474] Toggle « Mes dossiers » dans la sidebar (groupe .pp-doss-slot),
   sous le panneau Marché. Switch ON/OFF + légende 2 couleurs. */
.pp-doss-head{
  font-family:var(--mono); font-size:10px; letter-spacing:1.4px;
  text-transform:uppercase; color:var(--muted); font-weight:700; margin-bottom:10px;
}
.pp-doss-row{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.pp-doss-lbl{ font-size:12.5px; color:var(--text); }
.pp-doss-sw{
  flex-shrink:0; width:42px; height:24px; border-radius:999px;
  border:none; background:rgba(120,120,128,.45);
  position:relative; cursor:pointer; padding:0; box-sizing:border-box;
  transition:background .15s;
}
.pp-doss-sw .pp-doss-knob{
  position:absolute; top:3px; left:3px; width:18px; height:18px; border-radius:50%;
  background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.3); transition:transform .15s;
}
.pp-doss-sw.on{ background:#14b8a6; }
.pp-doss-sw.on .pp-doss-knob{ transform:translateX(18px); }
.pp-doss-legend{
  display:flex; flex-direction:column; gap:5px; margin-top:11px;
  font-size:12px; color:var(--text);
}
.pp-doss-legend span{ display:inline-flex; align-items:center; gap:6px; }
.pp-doss-legend i{ width:10px; height:10px; border-radius:50%; display:inline-block; }
.pp-doss-skip{ color:var(--muted); font-style:italic; font-size:11px; }

/* [v1477] Filtres dossiers (kind + consultant) dans .pp-doss-slot */
.pp-doss-filters{ display:flex; flex-direction:column; gap:8px; margin-top:11px; }
.pp-doss-seg{ display:flex; gap:6px; }
.pp-doss-seg button{
  flex:1; display:inline-flex; align-items:center; justify-content:center; gap:5px;
  padding:6px 4px; border-radius:8px; border:1px solid var(--border);
  background:transparent; color:var(--text); font:600 11.5px system-ui,sans-serif;
  cursor:pointer; transition:background .12s, border-color .12s;
}
.pp-doss-seg button i{ width:9px; height:9px; border-radius:50%; display:inline-block; }
.pp-doss-seg button.on{ border-color:#14b8a6; background:rgba(20,184,166,.12); }
.pp-doss-cons{
  width:100%; padding:7px 9px; border-radius:8px; border:1px solid var(--border);
  background:var(--surface); color:var(--text); font:500 12px system-ui,sans-serif; cursor:pointer;
}
html[data-theme="noir"] .pp-doss-cons{ background:rgba(255,255,255,.05); }
/* sous-libellé (X est · Y mand) dans l'agrégat zones */
.pp-mkt-agg-sub{ font-weight:500; color:var(--muted); font-style:normal; font-size:11px; }

/* ════════════════════════════════════════════════════════════════
   [v1696] Fiche Sismo — tableau typologie / détention (handoff Liv).
   Margot 2.0 : mono pour les en-têtes, coins var(--radius), thème-aware. */
.pp-typo-table{
  width:100%; border-collapse:separate; border-spacing:0;
  margin-top:10px; font-size:12.5px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius, 8px); overflow:hidden;
}
.pp-typo-table th{
  font-family:var(--mono, 'JetBrains Mono', monospace);
  font-size:9.5px; font-weight:700; letter-spacing:1px; text-transform:uppercase;
  color:var(--muted); text-align:left;
  padding:8px 12px; background:var(--s2);
  border-bottom:1px solid var(--border);
}
.pp-typo-table td{
  padding:9px 12px; border-bottom:1px solid var(--border);
  color:var(--text); vertical-align:middle;
}
.pp-typo-table tbody tr:last-child td{ border-bottom:none; }
.pp-typo-table td .mut{ color:var(--muted); font-size:11px; }
/* Barre de maturité (proportionnelle à maturite, plafonnée 2×) */
.pp-typo-table .pp-mat-bar{
  display:block; height:3px; margin-top:5px; max-width:140px;
  background:var(--border); border-radius:99px; overflow:hidden;
}
.pp-typo-table .pp-mat-bar i{
  display:block; height:100%; background:var(--accent); border-radius:99px;
}

/* [v1697] Demi-vie Sismo dynamique — lignes du tableau cliquables + sélection */
.pp-typo-table--clickable tbody tr{ cursor:pointer; transition:background .12s; }
.pp-typo-table--clickable tbody tr:hover td{ background:color-mix(in srgb, var(--accent) 5%, transparent); }
.pp-typo-table--clickable tbody tr.sel td{
  background:color-mix(in srgb, var(--accent) 9%, transparent);
}
.pp-typo-table--clickable tbody tr.sel td:first-child{
  box-shadow:inset 3px 0 0 var(--accent);
}
.pp-dv-hint{ font-size:10.5px; font-weight:500; color:var(--muted); text-transform:none; letter-spacing:0; }

/* [v1698] Demi-vie + tableau typologie côte à côte (2 colonnes, Anthony) */
@media(max-width:1100px){ }

/* [v1699] Fiche Sismo — grille 2×2 : signaux | infos copro // tableau | graphe.
   Les signaux ne sont plus pleine largeur (retour Anthony). */
.pp-fiche-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0 16px; align-items:start; }
.pp-fg-cell{ min-width:0; }
@media(max-width:1100px){ .pp-fiche-grid{ grid-template-columns:1fr; } }
/* Panneau infos copropriété */
.pp-copro-info{
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius, 8px); padding:4px 0; margin-top:0;
}
.pp-copro-info .row{
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:9px 12px; border-bottom:1px solid var(--border);
  font-size:12.5px;
}
.pp-copro-info .row:last-child{ border-bottom:none; }
.pp-copro-info .lbl{
  font-family:var(--mono, 'JetBrains Mono', monospace);
  font-size:9.5px; font-weight:700; letter-spacing:1px; text-transform:uppercase;
  color:var(--muted);
}
.pp-copro-info .val{ color:var(--text); font-weight:600; text-align:right; }
.pp-copro-info .val .mono{ font-family:var(--mono, monospace); font-size:11px; font-weight:500; }

/* [v1967] « Demander à donna » dans le top prospection : le reset L51
   (.pp-scope button{background:transparent;border:none;color:inherit})
   écrase 3 propriétés du gabarit global .dna-ask (page-header.css) —
   contre-reset MINIMAL à spécificité 0,2,0, même pattern que la fiche
   client (b1948). On ne restaure QUE ce que le reset écrase (l'ombre, le
   padding, la hauteur viennent du gabarit global, intacts) ; le hover
   border-color est re-déclaré car notre 0,2,0 battrait le :hover global. */
.pp-scope .dna-ask{ background:var(--surface); border:1px solid var(--border); color:var(--text); }
.pp-scope .dna-ask:hover{ border-color:var(--border-hi, var(--border)); }

/* [v2044] Filtres en barre dropdowns (kit df-) au-dessus du contenu.
   En mode LISTE : plus de sidebar (les calques carte n'existent qu'en mode carte),
   donc la grille passe en pleine largeur. */
.pp-dfb-bar{ margin:2px 0 12px; }
.pp-b-grid--mapcentric.pp-mode-list{ grid-template-columns:1fr; }

/* ═══════════ [v2132] Bloc de chargement stylé (niveau toasts, bas d'écran) ═══════════
   Carte sombre : spinner + étape qui défile + compteur + barre. Remplace la
   fine barre du haut (v2131) et la volée de toasts. */
.pp-prog{
  position: absolute; left: 50%; bottom: 22px; transform: translateX(-50%) translateY(8px);
  z-index: 30; width: min(430px, calc(100% - 32px));
  background: #16181d; color: #fff;
  border: 1px solid rgba(255,255,255,.08); border-radius: 14px;
  padding: 14px 16px 13px; box-shadow: 0 14px 44px rgba(0,0,0,.5);
  opacity: 0; pointer-events: none;
  transition: opacity .3s ease, transform .3s ease;
}
.pp-prog.on{ opacity: 1; transform: translateX(-50%) translateY(0); }
.pp-prog.done{ opacity: 0; transform: translateX(-50%) translateY(8px); transition: opacity .45s ease, transform .45s ease; }
/* Fallback si la map n'est pas montée : fixé en bas-centre du viewport */
.pp-prog.pp-prog--fixed{ position: fixed; bottom: 96px; z-index: 10050; width: min(430px, calc(100vw - 32px)); }
.pp-prog-row{ display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.pp-prog-spin{
  width: 16px; height: 16px; flex-shrink: 0; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.22); border-top-color: var(--accent);
  animation: pp-prog-spin .7s linear infinite;
}
@keyframes pp-prog-spin{ to{ transform: rotate(360deg); } }
.pp-prog.complete .pp-prog-spin{
  animation: none; border-color: var(--green); background: var(--green);
}
.pp-prog-txt{ display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.pp-prog-lbl{
  font-family: var(--font), sans-serif; font-size: 13px; font-weight: 600; color: #fff;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pp-prog-cnt{ font-size: 11.5px; color: rgba(255,255,255,.55); font-variant-numeric: tabular-nums; }
.pp-prog-track{ height: 4px; border-radius: 3px; background: rgba(255,255,255,.1); overflow: hidden; }
.pp-prog-bar{
  height: 100%; width: 0%; border-radius: 3px; background: var(--accent);
  box-shadow: 0 0 10px color-mix(in srgb, var(--accent) 60%, transparent);
  transition: width .35s ease, background .3s;
}
.pp-prog.complete .pp-prog-bar{
  background: var(--green); box-shadow: 0 0 10px color-mix(in srgb, var(--green) 60%, transparent);
}
