/* ═══════════════════════════════════════════════════════════════════
   donna — client-page-v2-bea40043.css  (cleané)
   ─ z-index migrés vers tokens (--z-* dans _z-index-scale.css) : 1 occurrence(s)
   ─ Aucune autre modification. Voir CHANGELOG.md.
   ═══════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   CLIENT PAGE V2 — CSS (design Margot, intégration donna)
   
   Stratégie :
   - Les tokens :root de crm.css sont SCOPÉS à .cpv2-shell pour ne PAS écraser
     les tokens donna globaux (themes.css reste la source pour le reste de l'app)
   - Les classes de fiche.css (.f-*, .donna-*, .kv-*, .m-f-*, etc.) sont
     copiées telles quelles — elles sont déjà préfixées et ne rentrent pas
     en conflit avec les classes donna existantes.
   - Le thème light/noir v2 est activé via data-theme sur .cpv2-shell (pas html)
   
   Source originale : margot/crm.css + margot/fiche.css (v21 avril 2026)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Tokens Margot, scopés à .cpv2-shell (light par défaut) ─── */
.cpv2-shell{
  --bg:#f7f8fa; --surface:#ffffff; --s2:#f1f3f7; --s3:#e7ebf2;
  --border:#cdd2dc; --border-hi:#b6bdcb;
  --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; --mauve:#8257e5;
  --shadow-sm:0 1px 2px rgba(20,22,31,.05);
  --shadow:0 4px 14px rgba(20,22,31,.07);
  --shadow-lg:0 16px 40px rgba(20,22,31,.14);
  --radius-sm:3px; --radius:4px; --radius-lg:8px;
  --font: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', sans-serif;
  --font-display: 'Plus Jakarta Sans', var(--font);
  --mono: 'JetBrains Mono', ui-monospace, monospace;
  
  /* Base shell */
  /* [v1000] Anthony : "fond doit etre blanc pas gris". Passé bg → surface.
     Les cards intérieures (.f-head, .f-block...) restent --surface aussi,
     elles sont délimitées par leur border + radius style Margot épuré. */
  background: var(--surface);
  color: var(--text);
  font-family: var(--font);
  -webkit-font-smoothing: antialiased;
  min-height: calc(100vh - 80px);
}
.cpv2-shell[data-theme="noir"]{
  /* [v1150] Aligné sur :root[data-theme="noir"] adouci (style focus) */
  --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; --mauve:#a78bfa;
  --shadow-sm:0 1px 2px rgba(0,0,0,.5);
  --shadow:0 4px 14px rgba(0,0,0,.5);
  --shadow-lg:0 20px 48px rgba(0,0,0,.7);
  --radius-sm:2px; --radius:3px; --radius-lg:6px;
}

/* Reset minimal scoped */
.cpv2-shell *{box-sizing:border-box}
.cpv2-shell button{font-family:inherit; cursor:pointer; border:none; background:none; color:inherit}
.cpv2-shell a{color:inherit; text-decoration:none}
.cpv2-shell kbd{font-family:var(--mono); font-size:10px; background:var(--s2); border:1px solid var(--border); border-radius:3px; padding:1px 4px; color:var(--text-dim)}

/* ═════════ fiche.css (classes Margot, non scopées car préfixées) ═════════ */
/* ══════════════════════════════════════════════════
   Fiche Acquéreur — styles spécifiques
   Utilise les tokens de crm.css
   ══════════════════════════════════════════════════ */

/* ══════════ Page shell ══════════ */
.fiche{
  display:grid;
  grid-template-columns: 1fr 340px;
  gap:20px;
  padding:18px 24px 40px;
  max-width:1400px;
  margin:0 auto;
}
/* [v898] CAUSE ROOT du sticky qui ne marche pas sur fiche acquéreur :
   - Le scroll container réel est .shellv2-main (height:100vh; overflow-y:auto),
     pas le viewport. Donc position:sticky s'accroche par rapport à .shellv2-main.
   - Le grid .fiche prend la hauteur du contenu max(fiche-main, fiche-rail).
   - Sur acquéreur, fiche-main (header + tabs + Caractéristiques) est COURT,
     fiche-rail (donna card + Infos rapides + Tâches) est LONG → grid = rail
     → 0 room pour sticky → la rail ne sticke pas.
   - Sur vendeur, fiche-main (pipeline + suivi vente + estimation) est LONG
     → grid = fiche-main → la rail a de la room → sticky OK.
   FIX v898 : on force fiche-main à au moins faire la hauteur du conteneur
   de scroll (calc(100vh - 80px) pour soustraire la topbar shell-v2). Comme
   ça le grid prend toujours au moins cette hauteur, ce qui donne à la rail
   de la room pour sticker, peu importe son contenu.
   v896 mettait min-height sur .fiche : ne marchait pas si la rail elle-même
   était plus haute que viewport (le grid prenait alors hauteur_rail). En
   l'appliquant à fiche-main on garantit que le grid >= 100vh-80px, donc la
   rail (qui généralement <100vh) a toujours du jeu. */
.fiche-main{
  min-width:0;
  display:flex;
  flex-direction:column;
  gap:16px;
  min-height: calc(100vh - 80px);
}
.fiche-rail{display:flex; flex-direction:column; gap:14px}

/* ══════════ Header ══════════ */
.f-head{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  overflow:hidden;
}
.f-head-top{
  padding:18px 20px 16px;
  display:grid;
  grid-template-columns: auto 1fr auto;
  gap:18px;
  align-items:center;
}

.f-identity{min-width:0}
.f-name-row{display:flex; align-items:center; gap:10px; flex-wrap:wrap}
.f-name{
  font-family:var(--font-display);
  font-size:22px; font-weight:700; letter-spacing:-.5px;
  color:var(--text);
  cursor:text;
}
.f-name:hover{background:var(--s2); border-radius:3px; padding:0 4px; margin:0 -4px}
/* [v793] Layout robuste pour titre vendeur × acquéreur (étape ≥ offre).
   Refactor du v790 qui utilisait flex-wrap sur f-name-row : trop fragile
   (un autre CSS quelque part overridait). Solution : quand has-acq, on
   force f-identity en colonne, ligne 1 = noms (peut wrap entre les 2),
   ligne 2 = badge + quickbar dans .f-status-row. */
.f-identity:has(.f-name-row.has-acq) > .f-name-row{
  flex-wrap: wrap;
  align-items: baseline;
  row-gap: 4px;
  width: 100%;
}
.f-status-row{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  margin-top:8px;
}
/* [v793] Phase 2A — Bloc "Parties" (vendeur + acquéreur) dans section Suivi.
   Tags style accent-dim discret, hover bord accent. Bouton "Lier un acquéreur"
   en mode dashed pour signaler une action ouvrant un picker.
   Picker autocomplete : input + dropdown absolu sous l'input. */
.cpv2-party-tag{
  display:inline-flex; align-items:center; gap:6px;
  padding:4px 10px;
  background:var(--accent-dim, color-mix(in srgb, var(--accent) 12%, transparent));
  border:1px solid color-mix(in srgb, var(--accent) 25%, transparent);
  border-radius:6px;
  font-size:12.5px; font-weight:500;
  color:var(--accent);
  max-width:fit-content;
}
.cpv2-party-tag-static{
  background:var(--s2);
  border-color:var(--border);
  color:var(--text);
}
.cpv2-party-tag-name{
  background:transparent; border:none; padding:0;
  font:inherit; color:inherit; cursor:pointer;
}
.cpv2-party-tag-name:hover{ text-decoration:underline }
.cpv2-party-unlink{
  width:16px; height:16px;
  display:inline-flex; align-items:center; justify-content:center;
  background:transparent; border:none; border-radius:3px;
  font-size:14px; line-height:1;
  color:color-mix(in srgb, var(--accent) 60%, transparent);
  cursor:pointer; padding:0;
  transition:background .12s, color .12s;
}
.cpv2-party-unlink:hover{
  background:color-mix(in srgb, #d64560 20%, transparent);
  color:#d64560;
}
/* [v814] Forcer la spécificité car d autres règles button par défaut overridaient */
.cpv2-shell button.cpv2-party-link,
.cpv2-shell .cpv2-party-link{
  display:inline-flex !important; align-items:center; gap:6px;
  padding:8px 14px !important;
  background:var(--text) !important;
  border:1px solid var(--text) !important;
  border-radius:6px;
  font-family:inherit; font-size:12.5px; font-weight:600;
  color:var(--surface) !important;
  cursor:pointer;
  transition:opacity .12s, transform .08s;
  box-shadow: none !important;
}
.cpv2-shell button.cpv2-party-link:hover,
.cpv2-shell .cpv2-party-link:hover{
  opacity:0.85;
  background:var(--text) !important;
  color:var(--surface) !important;
}
.cpv2-shell .cpv2-party-link:active{
  transform: scale(0.97);
}
.cpv2-acq-cell{ position:relative; z-index:100 }
.cpv2-acq-picker{ position:relative; width:100%; z-index:100 }
.cpv2-acq-picker-input{
  width:100%; max-width:280px;
  padding:5px 10px;
  font:inherit; font-size:12.5px;
  background:var(--surface);
  border:1px solid var(--accent);
  border-radius:6px;
  color:var(--text);
  outline:none;
  box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
}
.cpv2-acq-picker-sugg{
  position:absolute; top:calc(100% + 4px); left:0;
  z-index:9999;
  min-width:240px; max-width:320px;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:8px;
  box-shadow:0 6px 24px rgba(0,0,0,.18);
  padding:4px;
  display:flex; flex-direction:column; gap:1px;
  max-height:280px; overflow-y:auto;
}
.cpv2-acq-picker-item{
  display:block;
  padding:7px 10px;
  background:transparent; border:none;
  border-radius:5px;
  font:inherit; font-size:12.5px;
  color:var(--text);
  cursor:pointer;
  text-align:left;
  transition:background .1s;
}
.cpv2-acq-picker-item:hover{ background:var(--s2) }

/* [v788] Titre vendeur × acquéreur (dossier ≥ offre) */
.f-name-cross{
  font-family:var(--font-display);
  font-size:18px; font-weight:400;
  color:var(--muted);
  letter-spacing:0;
  user-select:none;
  margin:0 -2px;
}
.f-name-acq{
  font-family:var(--font-display);
  font-size:22px; font-weight:700; letter-spacing:-.5px;
  color:var(--text);
  cursor:pointer;
  text-decoration:none;
  transition:color .12s, background .12s;
  border-radius:3px;
  padding:0 4px; margin:0 -4px;
}
.f-name-acq:hover{ color:var(--accent); background:var(--accent-dim) }
.f-name-acq:focus-visible{ outline:2px solid var(--accent); outline-offset:1px }
/* [v788] Panel "Événements" du rail droit */
.cpv2-events-panel .cpv2-evp-list{
  display:flex; flex-direction:column; gap:2px;
  margin:0 -8px;
}
.cpv2-evp-row{
  display:flex; align-items:center; gap:10px;
  padding:8px;
  background:transparent; border:1px solid transparent;
  border-radius:6px;
  cursor:pointer;
  text-align:left;
  font-family:inherit;
  width:100%;
  transition:background .12s, border-color .12s;
}
.cpv2-evp-row:hover{ background:var(--s2); border-color:var(--border) }
.cpv2-evp-row[data-future="0"]{ opacity:.55 }
.cpv2-evp-row[data-future="0"]:hover{ opacity:.85 }
.cpv2-evp-icon{
  width:24px; height:24px;
  display:inline-flex; align-items:center; justify-content:center;
  font-size:14px;
  background:var(--accent-dim);
  border-radius:5px;
  flex-shrink:0;
}
.cpv2-evp-row[data-future="0"] .cpv2-evp-icon{ background:var(--s3, var(--s2)) }
.cpv2-evp-main{
  display:flex; flex-direction:column; gap:1px;
  min-width:0; flex:1;
}
.cpv2-evp-title{
  font-size:12.5px; font-weight:600; color:var(--text);
  line-height:1.25;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.cpv2-evp-when{
  font-size:11px; color:var(--muted);
  font-variant-numeric:tabular-nums;
}
.cpv2-evp-row[data-future="1"] .cpv2-evp-when{ color:var(--accent); font-weight:500 }

.f-pill{
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 9px; font-size:11px; font-weight:600;
  border-radius:3px;
  background:color-mix(in srgb, var(--c) 15%, transparent);
  border:1px solid color-mix(in srgb, var(--c) 30%, transparent);
  color:var(--c);
  cursor:pointer; transition:all .12s;
}
.f-pill:hover{background:color-mix(in srgb, var(--c) 22%, transparent)}
.f-pill .dot{
  width:6px; height:6px; border-radius:50%; background:currentColor;
  box-shadow:0 0 0 3px color-mix(in srgb, var(--c) 18%, transparent);
}
.f-pill.chaud{--c:var(--chaud)}
.f-pill.tiede{--c:var(--tiede)}
.f-pill.froid{--c:var(--froid)}

.f-meta{
  display:flex; align-items:center; gap:16px;
  flex-wrap:wrap; row-gap:8px;
  margin-top:7px;
  font-size:12.5px; color:var(--text-dim);
}
.f-meta .sep{opacity:.3}
.f-meta .dim{color:var(--muted)}
.f-meta a{color:var(--text-dim); transition:color .12s}
.f-meta a:hover{color:var(--accent)}

.f-head-actions{display:flex; gap:6px; align-items:center}

/* ══════════ Instinct gauge (circular) ══════════ */
.instinct{
  position:relative;
  width:72px; height:72px;
  flex-shrink:0;
  cursor:pointer;
}
.instinct svg{transform:rotate(-90deg)}
.instinct-bg{stroke:var(--s3); fill:none; stroke-width:5}
.instinct-fill{fill:none; stroke-width:5; stroke-linecap:round; transition:stroke-dashoffset .6s cubic-bezier(.4,0,.2,1)}
.instinct-inner{
  position:absolute; inset:0;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  line-height:1;
}
.instinct-val{
  font-family:var(--font-display);
  font-size:22px; font-weight:700; letter-spacing:-.8px;
  font-variant-numeric:tabular-nums;
  color:var(--text);
}
.instinct-lbl{
  font-size:8.5px; font-weight:600; letter-spacing:.6px;
  text-transform:uppercase;
  color:var(--muted);
  margin-top:2px;
}
/* Variante jauge vendeur : "100%" au lieu de "100" → % plus petit pour pas déborder */
.instinct.is-avancement .instinct-val{font-size:19px; letter-spacing:-.5px}
.instinct.is-avancement .instinct-unit{
  font-size:.58em; font-weight:600; margin-left:1px;
  color:var(--muted); letter-spacing:0;
}
.instinct.is-avancement .instinct-lbl{font-size:7.5px}

/* [#ai-score-ttl v622] État 'loading' pendant le recalcul auto TTL :
   le SVG entier tourne (le rotate(-90deg) statique sur svg est neutralisé
   par le rotate animé sur .instinct-fill — on tourne juste le fill car
   le bg reste stable visuellement). */
.instinct.is-loading .instinct-fill{
  transform-origin: 36px 36px;
  animation: cpv2-instinct-spin 1s linear infinite;
}
.instinct.is-loading .instinct-val{
  font-size: 18px;
  color: var(--muted);
  animation: cpv2-instinct-pulse 1.4s ease-in-out infinite;
}
.instinct.is-loading .instinct-lbl{
  color: var(--mauve);
}
@keyframes cpv2-instinct-spin{
  to{ transform: rotate(360deg); }
}
@keyframes cpv2-instinct-pulse{
  0%,100%{ opacity: .55; }
  50%{ opacity: 1; }
}

/* ══════════ Stat strip (bottom of header) ══════════ */
.f-stats{
  display:grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr;
  border-top:1px solid var(--border);
  background:var(--s2);
}
.f-stat{
  padding:11px 16px;
  border-right:1px solid var(--border);
  min-width:0;
  cursor:pointer; transition:background .12s;
}
.f-stat:last-child{border-right:none}
.f-stat:hover{background:var(--s3)}
.f-stat-lbl{
  font-size:10px; font-weight:600; letter-spacing:.5px;
  text-transform:uppercase;
  color:var(--muted);
  display:flex; align-items:center; gap:5px;
}
.f-stat-lbl svg{opacity:.7}
.f-stat-val{
  font-size:14px; font-weight:600;
  color:var(--text);
  margin-top:3px;
  font-variant-numeric:tabular-nums;
  letter-spacing:-.2px;
  display:flex; align-items:center; gap:6px;
  line-height:1.25;
  flex-wrap:wrap;
  row-gap:2px;
}
.f-stat-val > span,
.f-stat-val > small{
  white-space:nowrap;
}
.f-stat-val small{
  font-size:11px; font-weight:500; color:var(--text-dim);
  letter-spacing:0;
}

/* Prochaine action chip (overdue / today / later) */
.next-chip{
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 8px;
  font-size:11.5px; font-weight:600;
  border-radius:3px;
  background:color-mix(in srgb, var(--c) 15%, transparent);
  border:1px solid color-mix(in srgb, var(--c) 30%, transparent);
  color:var(--c);
  cursor:pointer;
  letter-spacing:-.1px;
}
.next-chip .dot{
  width:5px; height:5px; border-radius:50%; background:currentColor;
}
.next-chip.overdue{--c:var(--chaud)}
.next-chip.today{--c:var(--tiede)}
.next-chip.later{--c:var(--froid)}
.next-chip:hover{filter:brightness(1.05)}
:root[data-theme="noir"] .next-chip:hover{filter:brightness(1.15)}

/* Contact freshness dot */
.fresh-dot{
  display:inline-block;
  width:8px; height:8px; border-radius:50%;
  background:var(--c);
}
.fresh-dot.recent{--c:var(--froid)}
.fresh-dot.warm{--c:var(--green)}
.fresh-dot.old{--c:var(--tiede)}
.fresh-dot.stale{--c:var(--chaud)}

/* ══════════ Tabs ══════════ */
.f-tabs{
  display:flex;
  gap:2px;
  padding:0 4px;
  /* [v1160 fix S2 Anthony "bordure coupée à droite et gauche"] Avant :
     seul border-bottom était défini → discontinuité visuelle avec
     .f-tab-body qui a border:1px full. Maintenant : bordures sur les
     3 côtés top/left/right (pas bottom car les tabs underline servent
     de séparation avec le body). */
  border-top:1px solid var(--border);
  border-left:1px solid var(--border);
  border-right:1px solid var(--border);
  border-bottom:1px solid var(--border);
  background:var(--surface);
  border-radius:var(--radius-lg) var(--radius-lg) 0 0;
  /* [v1162 fix S2 bis Anthony "y'a toujours le bug UI de la bordure sur
     gauche et droite (fiche client) c'est coupé"] Source root v1160 : la
     border-radius est OK, mais le tab actif (.f-tab[data-active=true]) a
     un background: var(--accent-dim) !important (cf L959) qui s'étend
     jusqu'aux bords du conteneur et COUVRE les coins arrondis de .f-tabs,
     créant l'illusion d'une bordure coupée. Fix : overflow:hidden ici
     pour clipper le bg du tab actif aux coins arrondis. Pas de pb mobile
     car le scroll horizontal mobile est défini ailleurs et override
     overflow-x: auto (ligne 1112). */
  overflow:hidden;
  /* [v826] Anthony : retirer le sticky sur la barre des onglets — empêche le
     scroll naturel de la fiche. La rail droite est sticky (cf v823), pas les
     onglets. */
}
.f-tab{
  padding:10px 14px;
  font-size:12.5px; font-weight:500;
  color:var(--text-dim);
  border-bottom:2px solid transparent;
  margin-bottom:-1px;
  display:inline-flex; align-items:center; gap:7px;
  transition:color .12s;
  cursor:pointer;
}
.f-tab:hover{color:var(--text)}
.f-tab[data-active="true"]{
  color:var(--text); font-weight:600;
  border-bottom-color:var(--text);
}
.f-tab .count{
  font-size:10.5px; font-weight:600;
  padding:1px 5px; border-radius:3px;
  background:var(--s2); color:var(--text-dim);
  font-variant-numeric:tabular-nums;
}
.f-tab[data-active="true"] .count{background:var(--accent-dim); color:var(--accent)}

/* [v1180] count-alert : variante rouge (--chaud) pour signaler du contenu
   "à voir" (Notes notamment). Sobre — fond légèrement teinté, texte rouge.
   Quand l'onglet est actif, fond plus marqué pour confirmer le clic.
   Cohérent Margot 2.0 : pas de couleur agressive, mix transparent du chaud. */
.f-tab .count.count-alert{
  background: color-mix(in srgb, var(--chaud) 14%, transparent);
  color: var(--chaud);
}
.f-tab[data-active="true"] .count.count-alert{
  background: color-mix(in srgb, var(--chaud) 22%, transparent);
  color: var(--chaud);
}

.f-tab-body{
  background:var(--surface);
  /* [v1165] box-shadow inset pour bordure immune aux conflits CSS (cf
     commentaire .cpv2-shell .f-tabs). border-top:0 pour qu'on ait pas
     de double-trait entre .f-tabs et .f-tab-body. */
  border: none;
  box-shadow:
    inset 1px 0 0 var(--border),
    inset -1px 0 0 var(--border),
    inset 0 -1px 0 var(--border);
  border-radius:0 0 var(--radius-lg) var(--radius-lg);
  padding:18px 20px;
  min-height:420px;
}

/* [v1167 fix S2 — 5e tentative] Anthony screenshot DevTools : 2 gaps
   violet hashurés visibles, il veut "garder que le premier" (entre stats
   et onglets) et virer le second (entre onglets et tab-body).
   
   Le margin-top: -16px de v1166 n'a pas pris — soit cache, soit override
   silent. Cette fois on combine :
     - selectors multiples avec specificité élevée
     - !important pour bloquer cascade
     - margin-top négatif + gap reset combinés sur le parent
*/
.cpv2-shell .fiche-main > .f-tab-body,
.fiche .fiche-main > .f-tab-body,
.fiche-main > .f-tab-body{
  margin-top: -16px !important;
}
.f-panel-title{
  font-size:11px; font-weight:600; letter-spacing:.5px;
  text-transform:uppercase;
  color:var(--muted);
  margin-bottom:10px;
  display:flex; align-items:center; justify-content:space-between;
}
.f-panel-title .link{
  font-size:11px; font-weight:500; letter-spacing:0;
  text-transform:none; color:var(--accent);
  cursor:pointer;
}
.f-panel-title .link:hover{text-decoration:underline}

/* ══════════ Critères — definition list ══════════ */
.f-section{margin-bottom:22px}
.f-section:last-child{margin-bottom:0}

.kv{
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  gap:0;
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  overflow:hidden;
}
.kv-cell{
  padding:11px 14px;
  border-right:1px solid var(--border);
  border-bottom:1px solid var(--border);
  cursor:pointer; transition:background .12s;
}
.kv-cell:nth-child(3n){border-right:none}
.kv-cell:nth-last-child(-n+3){border-bottom:none}
.kv-cell:hover{background:var(--s2)}
.kv-lbl{
  font-size:10.5px; font-weight:600; letter-spacing:.4px;
  text-transform:uppercase;
  color:var(--muted);
  display:flex; align-items:center; gap:5px;
  margin-bottom:4px;
}
.kv-val{
  font-size:13.5px; font-weight:500;
  color:var(--text);
  letter-spacing:-.1px;
  font-variant-numeric:tabular-nums;
  line-height:1.3;
  display:flex; align-items:center; gap:6px;
  flex-wrap:wrap;
}
.kv-val.empty{color:var(--muted); font-weight:400; font-style:italic}

/* Inline edit input */

/* Multi-chip values (secteurs, pièces) */
.chip-row{display:flex; gap:4px; flex-wrap:wrap}
.chip{
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 7px; font-size:11.5px; font-weight:500;
  background:var(--s2); color:var(--text-dim);
  border:1px solid var(--border);
  border-radius:3px;
}
.chip.accent{
  background:var(--accent-dim); color:var(--accent);
  border-color:color-mix(in srgb, var(--accent) 30%, transparent);
}
.chip .x{opacity:.5; cursor:pointer; margin-left:2px}
.chip .x:hover{opacity:1}

/* Budget bar */

/* ══════════ donna IA card (rail) ══════════ */
.donna-card{
  background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 8%, var(--surface)), var(--surface));
  border:1px solid color-mix(in srgb, var(--accent) 25%, var(--border));
  border-radius:var(--radius-lg);
  overflow:hidden;
  position:relative;
}
.donna-card::before{
  content:"";
  position:absolute; top:0; right:0; width:120px; height:120px;
  background:radial-gradient(circle at top right, color-mix(in srgb, var(--accent) 20%, transparent), transparent 60%);
  pointer-events:none;
}
.donna-head{
  padding:14px 16px 10px;
  display:flex; align-items:center; justify-content:space-between;
  position:relative;
}

.donna-action-icon.warn{background:color-mix(in srgb, var(--chaud) 15%, transparent); color:var(--chaud)}

/* ══════════ Rail: sections ══════════ */
.rail-card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  overflow:hidden;
}

.rail-empty{
  padding:16px 14px;
  font-size:11.5px; color:var(--muted);
  text-align:center;
}

/* Mini bien row */

/* Contact block (rail) */
.rail-contact{display:flex; flex-direction:column; gap:8px}

.rail-contact-row .dim{color:var(--muted); font-size:11px; margin-left:auto}

/* Tags */

.tag-add{
  padding:2px 7px; font-size:11px; font-weight:500;
  color:var(--muted); border:1px dashed var(--border);
  border-radius:3px; cursor:pointer;
}
.tag-add:hover{color:var(--accent); border-color:var(--accent)}

/* ══════════ Quick action bar (command palette preview) ══════════ */
.f-quickbar{
  display:flex; align-items:center; gap:6px;
  padding:5px 9px;
  background:var(--s2); border:1px solid var(--border);
  border-radius:var(--radius);
  font-size:11.5px; color:var(--muted);
  cursor:pointer; transition:all .12s;
}
.f-quickbar:hover{background:var(--s3); border-color:var(--border-hi); color:var(--text)}
.f-quickbar svg{opacity:.7}

/* ══════════ Activity timeline ══════════ */
.timeline{position:relative; padding-left:24px}
.timeline::before{
  content:"";
  position:absolute; left:7px; top:4px; bottom:4px;
  width:1.5px; background:var(--border);
}
.t-item{position:relative; padding-bottom:18px}
.t-item:last-child{padding-bottom:0}
.t-dot{
  position:absolute; left:-22px; top:3px;
  width:16px; height:16px; border-radius:50%;
  background:var(--surface);
  border:2px solid var(--border-hi);
  display:grid; place-items:center;
}
.t-dot.accent{border-color:var(--accent); background:var(--accent-dim)}
.t-dot.green{border-color:var(--green); background:color-mix(in srgb, var(--green) 15%, transparent)}
.t-dot.chaud{border-color:var(--chaud); background:color-mix(in srgb, var(--chaud) 15%, transparent)}
.t-dot svg{width:9px; height:9px}
.t-head{
  font-size:12px; color:var(--text);
  line-height:1.4;
}
.t-head strong{font-weight:600}
.t-head .dim{color:var(--muted)}
.t-time{
  font-size:10.5px; color:var(--muted);
  margin-top:1px;
  font-variant-numeric:tabular-nums;
}
.t-body{
  margin-top:7px;
  padding:9px 11px;
  background:var(--s2); border:1px solid var(--border);
  border-radius:var(--radius);
  font-size:12px; color:var(--text-dim);
  line-height:1.5;
}

/* ══════════ Dossiers (matched biens) table ══════════ */
.biens-grid{
  display:grid; grid-template-columns: repeat(2, 1fr); gap:10px;
}
.bien-card{
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius-lg); overflow:hidden;
  transition:all .15s;
  cursor:pointer;
}
.bien-card:hover{border-color:var(--border-hi); transform:translateY(-1px); box-shadow:var(--shadow)}
.bien-img{
  aspect-ratio: 16/9;
  background:linear-gradient(135deg, var(--s3), var(--s2));
  position:relative;
  display:grid; place-items:center;
  color:var(--muted);
}
.bien-match-big{
  position:absolute; top:8px; left:8px;
  padding:3px 7px; font-size:10.5px; font-weight:700;
  background:var(--text); color:var(--bg);
  border-radius:3px; letter-spacing:-.2px;
  font-variant-numeric:tabular-nums;
}
.bien-match-big.great{background:var(--green); color:#fff}
.bien-match-big.good{background:var(--accent); color:#fff}
.bien-status{
  position:absolute; top:8px; right:8px;
  padding:2px 7px; font-size:10px; font-weight:600;
  background:rgba(255,255,255,.95); color:var(--text);
  border-radius:3px;
  text-transform:uppercase; letter-spacing:.4px;
}
:root[data-theme="noir"] .bien-status{background:rgba(0,0,0,.75); color:var(--text)}
.bien-body{padding:11px 14px 13px}
.bien-price{
  font-family:var(--font-display);
  font-size:16px; font-weight:700; letter-spacing:-.3px;
  color:var(--text);
  font-variant-numeric:tabular-nums;
}
.bien-addr{
  font-size:12px; color:var(--text);
  margin-top:2px; font-weight:500;
}
.bien-specs{
  display:flex; gap:8px; margin-top:6px;
  font-size:11px; color:var(--text-dim);
  font-variant-numeric:tabular-nums;
}
.bien-specs span{display:inline-flex; align-items:center; gap:3px}

/* Match breakdown bars */

.match-bar.on{background:var(--green)}
.match-bar.mid{background:var(--tiede)}
.match-bar.off{background:var(--s3)}

/* ══════════ Mobile mockup inner ══════════ */

.m-f-identity .avatar{width:44px; height:44px; font-size:14px}

.m-f-instinct .instinct{width:52px; height:52px}
.m-f-instinct .instinct-val{font-size:16px}
.m-f-instinct .instinct-lbl{font-size:7.5px}

.m-f-kv-row .lbl{color:var(--muted); font-size:11.5px}
.m-f-kv-row .val{color:var(--text); font-weight:500; font-variant-numeric:tabular-nums; letter-spacing:-.1px}

/* ══════════ Responsive ══════════ */
@media (max-width: 1080px){
  .fiche{grid-template-columns: 1fr; padding:14px 18px 40px}
}

/* ══════════ Tweak: inline edit popup-ish for cell ══════════ */

.kv-cell:hover .inline-hint, .f-stat:hover .inline-hint{opacity:.7}

/* Status menu (prochaine action) */
.action-menu{
  position:absolute;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);
  padding:4px;
  min-width:200px;
  z-index: calc(var(--z-sticky) - 50) /* was 50 */;
  display:none;
}
.action-menu[data-open="true"]{display:block}

/* Device toggle layout */

.device-split[data-view="both"] .fiche{padding:0; max-width:none; grid-template-columns: 1fr 320px; gap:16px}

/* Tabs underline variation */
.f-tab[data-active="true"]{position:relative}

/* ═════════ crm.css — composants réutilisables ═════════ */
.btn{
  display:inline-flex; align-items:center; gap:6px;
  padding:6px 11px; font-size:12px; font-weight:500;
  border:1px solid var(--border);
  border-radius:var(--radius);
  background:var(--surface); color:var(--text);
  transition:all .12s;
  white-space:nowrap;
}

/* ═════════ Boutons Margot (scopés à .cpv2-shell) ═════════ */
.cpv2-shell .btn{
  display:inline-flex; align-items:center; gap:6px;
  padding:6px 11px; font-size:12px; font-weight:500;
  border:1px solid var(--border);
  border-radius:var(--radius);
  background:var(--surface); color:var(--text);
  transition:all .12s;
  white-space:nowrap;
}
.cpv2-shell .btn:hover{background:var(--s2); border-color:var(--border-hi)}
.cpv2-shell .btn svg{opacity:.8}
.cpv2-shell .btn-primary{
  background:var(--text); color:var(--bg); border-color:var(--text); font-weight:600;
}
.cpv2-shell .btn-primary:hover{background:var(--text-dim); border-color:var(--text-dim)}
.cpv2-shell .btn-secondary{background:var(--s2); border-color:var(--border)}
.cpv2-shell .btn-secondary:hover{background:var(--s3)}
.cpv2-shell .btn-ghost{border-color:transparent; background:transparent; color:var(--text-dim)}
.cpv2-shell .btn-ghost:hover{background:var(--s2); color:var(--text)}
.cpv2-shell .btn-sm{padding:4px 8px; font-size:11px}
.cpv2-shell .btn-icon{padding:6px; width:28px; height:28px; justify-content:center}

/* ═════════ Topbar v2 (Retour + Breadcrumb) ═════════ */
/* [v1006] Anthony :
   1. Sticky/fix au scroll ✓
   2. Edge-to-edge (pas de gap latéral) ✓
   3. Le titre "Clients" doit rester à la même position X que la page liste
      → bouton back en position:absolute pour ne pas pousser le contenu
   
   La fiche client a 2 niveaux de padding latéral à compenser :
   - .shellv2-main padding-left/right : 24px (var --shellv2-main-px)
   - #page-clients padding inline : 24px
   Total à compenser : 48px de chaque côté.
   
   Le .cpv2-topbar devient le sticky container (parent du .ph), edge-to-edge
   via margin négatif -48px. Le .ph dedans est en position:relative neutre. */

.cpv2-topbar{
  position: sticky;
  top: 0;
  z-index: 60;
  background: var(--surface);
  margin: 0 calc(-1 * (var(--shellv2-main-px, 24px) + 24px)) 16px !important;
  padding: 0 !important;
  max-width: none;
  border-bottom: 1px solid var(--border);
}

/* Le .ph dans le sticky container : neutralise son sticky natif et ses
   margins négatifs natifs.
   PADDING : aligné avec le .ph standard de la page liste (= 14 + 24 = 38px).
   On compense uniquement le shellv2-main-px car le margin -48 du parent
   .cpv2-topbar a déjà absorbé le 24px supplémentaire du #page-clients. */
.cpv2-topbar .ph.cpv2-ph{
  position: relative !important;
  top: auto !important;
  z-index: auto !important;
  margin: 0 !important;
  padding: 0 calc(14px + var(--shellv2-main-px, 24px)) !important;
  border-bottom: none !important;
  background: transparent !important;
}

/* Bouton back en position absolute → HORS du flow → ne pousse pas le
   contenu (icône user + "Clients") vers la droite. "Clients" reste à la
   même position X que sur la page liste. */
.cpv2-topbar .ph.cpv2-ph .ph-back{
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
}
/* Le .ph-l ne nécessite PAS de padding-left compensatoire car le back est
   hors flow. Le contenu (icône user + "Clients") commence à la position
   normale du padding-left du .ph (= 38px du bord viewport). */

/* Legacy : si jamais l'ancien markup réapparaît, on le neutralise */
.cpv2-back, .cpv2-breadcrumb{ display: none; }

/* ═════════ Inline edit (v1 API → syntaxe Margot) ═════════ */
.cpv2-shell [data-inline-field],
.cpv2-shell [data-inline-mandat]{
  cursor:text;
  padding:0 3px;
  margin:0 -3px;
  border-radius:3px;
  transition:background .12s;
}
.cpv2-shell [data-inline-field]:hover,
.cpv2-shell [data-inline-mandat]:hover{background:var(--s2)}
.cpv2-shell [data-inline-field]:focus,
.cpv2-shell [data-inline-mandat]:focus{outline:2px solid var(--accent); outline-offset:1px}
.cpv2-shell .cpv2-inline-input{
  font:inherit; color:inherit; background:var(--surface);
  border:1px solid var(--accent);
  border-radius:3px; padding:1px 5px;
  outline:none; min-width:60px;
}

/* ═════════ Fixes v186 ═════════ */

/* Score Instinct donna card : garantir visibilité */
.donna-card .donna-score-row{
  flex-wrap:wrap;
}
.donna-card .donna-score-left{
  flex-shrink:0;
  min-width:70px;
  display:flex;
  flex-direction:column;
  z-index:2;
  position:relative;
}
.donna-card .donna-score-big{
  color:var(--text) !important;
  display:block !important;
  font-size:42px !important;
  line-height:1 !important;
  min-height:42px;
}

/* Masquer caractéristiques vides (— seul) */
.f-section[data-crit-empty="true"]{display:none}
.kv-cell[data-empty="true"]{display:none}

/* Jauge Instinct header : s'assurer qu'elle est visible même sans score */
.f-head-top .instinct{
  display:block !important;
  min-width:72px;
  min-height:72px;
}
.f-head-top .instinct svg{
  display:block;
}
.f-head-top .instinct-inner{
  display:flex !important;
}

/* ═══════════════════════════════════════════════════════════════════
   MOBILE responsive — fix layout cassé sur petits écrans (<768px)
   ═══════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════
   v198 — TAB ACTIF visible (indicateur underline + bg)
   ═══════════════════════════════════════════════════════════════════ */
.f-tab[data-active="true"] {
  color: var(--accent) !important;
  border-bottom-color: var(--accent) !important;
  border-bottom-width: 2px !important;
  font-weight: 700 !important;
  background: var(--accent-dim) !important;
}
.f-tab[data-active="true"] .count {
  background: var(--accent) !important;
  color: #fff !important;
}

/* ═══════════════════════════════════════════════════════════════════
   v198 — Modal donna custom (remplace prompt() browser)
   ═══════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════
   v198 — MOBILE responsive PROPRE (un seul bloc, plus de conflits)
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  /* Empêcher tout débordement horizontal */
  html, body { overflow-x: hidden !important; }
  
  /* Shell base */
  .cpv2-shell {
    padding: 0 !important;
    min-height: auto;
    width: 100vw;
    max-width: 100vw;
    overflow-x: hidden;
  }
  
  /* Topbar : padding cohérent */
  .cpv2-topbar {
    padding: 10px 12px 6px !important;
    margin: 0 !important;
    max-width: 100vw !important;
    gap: 10px;
    width: 100vw;
    box-sizing: border-box;
  }
  .cpv2-back { padding: 5px 10px; font-size: 11px; }
  
  /* Fiche : 1 colonne, edge-to-edge */
  .fiche {
    grid-template-columns: 1fr !important;
    padding: 0 !important;
    margin: 0 !important;
    gap: 8px;
    max-width: 100vw !important;
    width: 100vw;
    box-sizing: border-box;
  }
  .fiche-main, .fiche-rail {
    gap: 8px;
    width: 100%;
    min-width: 0;
    max-width: 100vw;
    box-sizing: border-box;
  }
  
  /* Header : empilé centré, edge-to-edge */
  .f-head {
    border-radius: 0 !important;
    border-left: none !important;
    border-right: none !important;
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
  }
  .f-head-top {
    grid-template-columns: 1fr !important;
    grid-template-areas: "identity" "actions" !important;
    padding: 14px !important;
    gap: 12px !important;
  }
  .f-head .instinct {
    width: 56px !important;
    height: 56px !important;
    margin: 0 auto;
    flex-shrink: 0;
  }
  .f-head .instinct svg { width: 56px !important; height: 56px !important; }
  .f-head .instinct-val { font-size: 16px !important; }
  .f-head .instinct-lbl { font-size: 7px !important; }
  .f-head .instinct.is-avancement .instinct-val { font-size: 14px !important; }
  
  .f-identity { text-align: center; width: 100%; min-width: 0; }
  .f-name-row {
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
  }
  .f-name {
    font-size: 18px !important;
    width: 100%;
    word-break: break-word;
  }
  .f-quickbar { display: none !important; }
  
  .f-meta {
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px !important;
    font-size: 11px !important;
    padding: 0 4px;
  }
  .f-meta .sep { display: inline; opacity: .3; }
  
  /* Boutons header : grille 3 cols (... | Planifier | Appeler) */
  .f-head-actions {
    display: grid !important;
    grid-template-columns: 36px 1fr 1fr !important;
    gap: 6px !important;
    width: 100%;
  }
  .f-head-actions .btn-icon {
    width: 36px !important; height: 36px !important; padding: 0 !important;
  }
  .f-head-actions .btn {
    height: 36px !important;
    padding: 0 8px !important;
    font-size: 12px !important;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
  
  /* Strip 4 stats : 2x2 propre, edge-to-edge */
  .f-stats {
    grid-template-columns: 1fr 1fr !important;
    border-left: none !important;
    border-right: none !important;
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
  }
  .f-stat {
    padding: 10px 12px !important;
    border-right: 1px solid var(--border);
    border-bottom: 1px solid var(--border);
    min-width: 0;
    overflow: hidden;
  }
  .f-stat:nth-child(2n) { border-right: none; }
  .f-stat:nth-child(n+3) { border-bottom: none; }
  .f-stat-lbl { font-size: 9px !important; }
  .f-stat-val { font-size: 12.5px !important; flex-wrap: wrap; gap: 4px; }
  .f-stat-val small { font-size: 10px !important; display: block; width: 100%; }
  
  /* Tabs : scroll horizontal interne au tab bar (pas du shell !) */
  .f-tabs {
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    padding: 0 12px !important;
    border-radius: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
  }
  .f-tabs::-webkit-scrollbar { display: none; }
  .f-tab {
    padding: 10px 12px !important;
    font-size: 12.5px !important;
    white-space: nowrap;
    flex-shrink: 0;
  }
  
  /* Tab body : edge-to-edge */
  .f-tab-body {
    padding: 0 !important;
    border: none !important;
    border-radius: 0 !important;
    background: transparent !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  
  /* Sections : padding interne uniquement */
  .f-section {
    padding: 0 !important;
    margin: 0 0 8px !important;
    width: 100%;
    max-width: 100%;
  }
  .f-panel-title {
    padding: 14px 14px 6px !important;
    margin: 0 !important;
    flex-wrap: wrap;
    gap: 8px;
  }
  
  /* Critères grid : 1 col, edge-to-edge */
  .kv {
    grid-template-columns: 1fr !important;
    border-radius: 0 !important;
    border-left: none !important;
    border-right: none !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  .kv-cell {
    padding: 10px 14px !important;
    border-bottom: 1px solid var(--border);
  }
  .kv-cell:last-child { border-bottom: none; }
  .kv-lbl { font-size: 10px !important; }
  .kv-val { font-size: 13px !important; }
  
  /* donna card : edge-to-edge */
  .donna-card {
    border-radius: 0 !important;
    border-left: none !important;
    border-right: none !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  
  
  /* Infos rapides : edge-to-edge */
  .fiche-rail > div {
    border-radius: 0 !important;
    border-left: none !important;
    border-right: none !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  
  /* Biens grid mobile : 1 colonne avec padding interne */
  .biens-grid {
    grid-template-columns: 1fr !important;
    padding: 12px 14px;
    gap: 10px;
  }
  
  /* Chips & inputs */
  .chip-row { gap: 6px !important; }
  .chip { font-size: 11px !important; padding: 3px 8px !important; }
}

/* Très petit (<400px) : passer stats en 1 col */
@media (max-width: 400px) {
  .f-stats { grid-template-columns: 1fr !important; }
  .f-stat { border-right: none !important; }
  .f-stat:not(:last-child) { border-bottom: 1px solid var(--border); }
  .f-name { font-size: 17px !important; }
}

@media (max-width: 900px) {
  #page-client:has(.cpv2-shell) > #client-page-root { padding: 0 !important; }
  /* Fallback pour navigateurs sans :has() */
  .cpv2-shell { margin: 0 -14px !important; }
}

@media (min-width: 769px) {
  /* Sur desktop, pas de margin négative */
  .cpv2-shell { margin: 0 !important; }
}

/* ═══════════════════════════════════════════════════════════════════
   v199 — Badges de statut des biens (matching) : propres
   ═══════════════════════════════════════════════════════════════════ */
.bien-status {
  text-transform: capitalize !important;
  letter-spacing: 0 !important;
  font-weight: 600 !important;
  padding: 3px 8px !important;
  border-radius: 4px !important;
  font-size: 10.5px !important;
}
.bien-status.status-mandat_en_cours,
.bien-status.status-mandat { background: rgba(124,106,247,.15); color: var(--accent); }
.bien-status.status-visites { background: rgba(247,201,72,.15); color: var(--tiede); }
.bien-status.status-offre,
.bien-status.status-sous_offre { background: rgba(61,255,160,.15); color: var(--green); }
.bien-status.status-nouveau { background: rgba(77,166,255,.15); color: var(--froid); }

/* Placeholder photo bien quand pas d'image */
.bien-img {
  position: relative;
  aspect-ratio: 16/9;
  background: linear-gradient(135deg, var(--s3), var(--s2));
  overflow: hidden;
}
.bien-img img {
  width: 100%; height: 100%; object-fit: cover;
  display: block;
}
.bien-img-fallback {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  color: var(--muted);
  font-size: 32px; opacity: .4;
}

/* ═══════════════════════════════════════════════════════════════════
   v199 — Chips INLINE éditables (plus cohérent avec le reste)
   ═══════════════════════════════════════════════════════════════════ */
.cpv2-chip-input {
  display: inline-block;
  min-width: 60px;
  padding: 3px 8px;
  font-size: 11px;
  font-weight: 600;
  background: var(--surface);
  border: 1px solid var(--accent);
  border-radius: 3px;
  color: var(--text);
  outline: none;
  font-family: inherit;
}

/* ═══════════════════════════════════════════════════════════════════
   v200 — Timeline Activité : body multiligne, temps relatif
   ═══════════════════════════════════════════════════════════════════ */
.timeline .t-body {
  white-space: pre-wrap;
  word-break: break-word;
  line-height: 1.55;
}
.timeline .t-head strong {
  font-weight: 700;
}
.timeline .t-head span[style*="accent-dim"] {
  white-space: nowrap;
}

/* Bouton "+ Ajouter une note" dans l'onglet activité : même style que les autres links */
#cpv2-add-note {
  cursor: pointer;
}

/* Sur mobile : timeline plus compacte */
@media (max-width: 768px) {
  .timeline .t-item {
    padding: 12px 14px !important;
    gap: 8px;
  }
  .timeline .t-head {
    font-size: 13px !important;
    line-height: 1.35;
  }
  .timeline .t-body {
    font-size: 12px !important;
  }
  .timeline .t-time {
    font-size: 10.5px !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   v201 — Fix biens-grid mobile : ne pas dépasser la largeur
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  /* Biens grid : padding réduit, cards en full width */
  .biens-grid {
    grid-template-columns: 1fr !important;
    padding: 12px !important;
    gap: 12px;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
  }
  .bien-card {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    overflow: hidden;
  }
  .bien-img {
    width: 100%;
    max-width: 100%;
    aspect-ratio: 16/10;
  }
  .bien-body {
    padding: 12px !important;
  }
  .bien-status {
    max-width: calc(100% - 120px); /* laisse place au badge % match */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  
}

/* ═══════════════════════════════════════════════════════════════════
   v201 — Match tags (remplace match-bars abstraites)
   ═══════════════════════════════════════════════════════════════════ */
.match-tags-row {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 10px;
}
.match-tags-row .match-tag {
  padding: 3px 8px;
  border-radius: 4px;
  font-size: 10.5px;
  font-weight: 500;
  line-height: 1.3;
  white-space: nowrap;
}
.match-tags-row .match-tag.ok {
  background: rgba(61,170,110,.12);
  color: #2f9c5c;
  border: 1px solid rgba(61,170,110,.25);
}
.match-tags-row .match-tag.warn {
  background: rgba(247,160,72,.12);
  color: #c67c1a;
  border: 1px solid rgba(247,160,72,.25);
}
/* En thème sombre : couleurs vives */
[data-theme="noir"] .match-tags-row .match-tag.ok {
  background: rgba(61,255,160,.12);
  color: var(--green);
  border-color: rgba(61,255,160,.25);
}
[data-theme="noir"] .match-tags-row .match-tag.warn {
  background: rgba(247,201,72,.12);
  color: var(--tiede);
  border-color: rgba(247,201,72,.25);
}

/* ═══════════════════════════════════════════════════════════════════
   v202 — FORCE ABSOLUE zéro padding mobile + debug bordure
   Si tu vois une bordure rouge en haut, le shell est ok.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  /* Force absolu sur tous les containers possibles */
  html, body { 
    margin: 0 !important; 
    padding: 0 !important; 
    overflow-x: hidden !important;
  }
  
  /* La page conteneur */
  #page-client { 
    padding: 0 !important; 
    margin: 0 !important; 
    width: 100% !important;
    max-width: 100vw !important;
  }
  #client-page-root { 
    padding: 0 !important; 
    margin: 0 !important; 
    width: 100% !important;
    max-width: 100vw !important;
  }
  
  /* Notre shell */
  .cpv2-shell {
    padding: 0 !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100vw !important;
    box-sizing: border-box !important;
  }
  
  /* Fiche : zéro padding */
  .cpv2-shell .fiche {
    padding: 0 !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100vw !important;
    box-sizing: border-box !important;
  }
  
  /* Topbar légèrement padded */
  .cpv2-shell .cpv2-topbar {
    padding: 10px 12px 6px !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100vw !important;
    box-sizing: border-box !important;
  }
  
  /* Toutes les cards : pleine largeur */
  .cpv2-shell .f-head,
  .cpv2-shell .f-stats,
  .cpv2-shell .f-tab-body,
  .cpv2-shell .donna-card,
  .cpv2-shell .fiche-rail > div {
    width: 100% !important;
    max-width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    box-sizing: border-box !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   v203 — Onglet Notes : cards datées propres
   ═══════════════════════════════════════════════════════════════════ */
.cpv2-note-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 12px 14px;
  position: relative;
  transition: border-color .15s;
}
.cpv2-note-card:hover {
  border-color: var(--border-hi);
}
.cpv2-note-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.cpv2-note-date {
  font-size: 11px;
  font-weight: 600;
  color: var(--accent);
}
.cpv2-note-author {
  font-size: 10px;
  color: var(--muted);
  padding: 2px 7px;
  border-radius: 99px;
  background: var(--s2);
  border: 1px solid var(--border);
}
.cpv2-note-delete {
  margin-left: auto;
  background: transparent;
  border: 1px solid transparent;
  color: var(--muted);
  width: 24px; height: 24px;
  border-radius: 6px;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: inherit;
  transition: all .12s;
}
.cpv2-note-delete:hover {
  background: rgba(255,77,109,.08);
  border-color: rgba(255,77,109,.3);
  color: var(--chaud);
}
.cpv2-note-text {
  font-size: 13px;
  line-height: 1.55;
  color: var(--text);
  white-space: pre-wrap;
  word-break: break-word;
}

/* Mobile : cards plus compactes */
@media (max-width: 768px) {
  .cpv2-note-card { padding: 10px 12px; }
  .cpv2-note-text { font-size: 12.5px; }
}

/* ═══════════════════════════════════════════════════════════════════
   v204 — Mobile : padding 8px + donna card en haut
   ═══════════════════════════════════════════════════════════════════ */

/* Desktop : on cache le slot mobile, la donna card est dans le rail droit */
.cpv2-donna-mobile { display: none; }

@media (max-width: 768px) {
  /* Slot mobile pour donna card (au-dessus des tabs) */
  .cpv2-donna-mobile { display: block; }
  
  /* Rail droit : on cache la donna card (déjà affichée en haut), on garde "Infos rapides" */
  .fiche-rail .donna-card { display: none; }
  
  /* Padding latéral léger comme dans le mock Margot (~8px) */
  .cpv2-shell .fiche {
    padding: 0 8px 80px !important;
    gap: 10px;
  }
  
  /* Topbar : padding cohérent */
  .cpv2-shell .cpv2-topbar {
    padding: 10px 8px 6px !important;
  }
  
  /* Cards : on remet un border-radius pour qu'elles flottent un peu (pas edge-to-edge brutal) */
  .cpv2-shell .f-head,
  .cpv2-shell .donna-card,
  .cpv2-shell .f-tab-body,
  .cpv2-shell .fiche-rail > div {
    border-radius: 12px !important;
    border-left: 1px solid var(--border) !important;
    border-right: 1px solid var(--border) !important;
  }
  
  /* Stats strip : restent collés au header (pas de border arrondi entre eux) */
  .cpv2-shell .f-stats {
    border-left: 1px solid var(--border) !important;
    border-right: 1px solid var(--border) !important;
    border-bottom-left-radius: 12px !important;
    border-bottom-right-radius: 12px !important;
  }
  
  /* Tabs barre : padding réduit */
  .cpv2-shell .f-tabs {
    padding: 0 8px !important;
  }
  
  /* Sections internes : padding propre */
  .cpv2-shell .f-section {
    margin: 0 0 10px !important;
  }
  .cpv2-shell .kv {
    border-radius: 10px !important;
    border-left: 1px solid var(--border) !important;
    border-right: 1px solid var(--border) !important;
  }
  
  /* donna card mobile : pleine largeur du shell, pas de margin */
  .cpv2-donna-mobile {
    display: flex !important;
    flex-direction: column !important;
    gap: 10px !important;
  }
  .cpv2-donna-mobile .donna-card {
    margin: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   v205 — Sticky action bar mobile (Appeler + Planifier en bas)
   ═══════════════════════════════════════════════════════════════════ */
.cpv2-action-bar-mobile {
  display: none; /* Caché desktop */
}

@media (max-width: 768px) {
  .cpv2-action-bar-mobile {
    display: flex;
    position: fixed;
    /* Collé au-dessus de .mobile-tabbar donna :
       tabbar = 8px top + boutons ~40px + 8px bottom + safe-area = ~56px + safe-area */
    bottom: calc(56px + env(safe-area-inset-bottom, 0));
    left: 0; right: 0;
    z-index: var(--z-overlay) /* was 501, ~ overlay */;
    background: var(--surface);
    border-top: 1px solid var(--border);
    border-bottom: 1px solid var(--border);
    padding: 10px 12px;
    gap: 10px;
    box-shadow: 0 -2px 12px rgba(0,0,0,.08);
  }
  
  .cpv2-ab-btn {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 12px 16px;
    border-radius: 8px;
    border: 1px solid var(--border);
    background: var(--surface);
    color: var(--text);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: all .12s;
  }
  .cpv2-ab-btn:active {
    transform: scale(0.97);
  }
  .cpv2-ab-btn-primary {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
  }
  
  /* Réserver l'espace pour la sticky bar (sinon contenu masqué)
     tabbar donna (~64px) + sticky bar (~60px) + safe-area */
  .cpv2-shell .fiche {
    padding-bottom: calc(140px + env(safe-area-inset-bottom, 0)) !important;
  }
  
  /* Cache les boutons Appeler/Planifier du header sur mobile (doublon avec sticky) */
  .f-head-actions #cpv2-plan-btn,
  .f-head-actions #cpv2-call-btn {
    display: none !important;
  }
  /* Mais on garde le ⋯ qui ouvre le menu */
  .f-head-actions {
    grid-template-columns: 1fr !important;
    justify-content: flex-end !important;
  }
  .f-head-actions #cpv2-more-btn {
    width: 36px !important;
    height: 36px !important;
    margin-left: auto;
  }
}

/* Animation slide up rapide pour menu mobile */
@keyframes cpv2-slide-up-fast {
  from { transform: translateY(100%); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

/* ═══════════════════════════════════════════════════════════════════
   v209 — Mobile UX polish : virer jauge instinct du header (déjà 
   visible dans la donna card juste en dessous), compacter le header
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  /* Cache la jauge instinct du header (la donna card en dessous fait l'info) */
  .f-head .instinct {
    display: none !important;
  }
  
  /* Compacte l'espace autour du nom client */
  .f-head-top {
    padding: 16px 14px 14px !important;
    gap: 8px !important;
  }
  .f-head .f-name {
    font-size: 19px !important;
    margin-bottom: 4px !important;
  }
  .f-head .f-meta {
    margin-top: 4px !important;
    font-size: 11px !important;
  }
  
  /* Moins d'espace entre stats strip et donna card */
  .cpv2-shell .fiche {
    gap: 8px !important;
  }
  .f-stats {
    margin-bottom: 0 !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   v210 — Bordures donna card cohérentes selon contexte
   Desktop : bordure violette (donna card distinctive dans le rail)
   Mobile  : bordure grise discrète (cohérente avec autres cards)
   ═══════════════════════════════════════════════════════════════════ */
.cpv2-shell .donna-card {
  border: 1px solid var(--accent);  /* violet desktop */
}

@media (max-width: 768px) {
  .cpv2-shell .donna-card {
    border: 1px solid var(--border) !important;  /* gris mobile */
  }
  
  /* Tab actif : encadré moins agressif sur mobile (pas pleine bg violette) */
  .f-tab[data-active="true"] {
    background: transparent !important;
    border-bottom-width: 2px !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   v210 — Re-style de la modal d'édition v1 dans l'esprit Margot
   Quand la fiche v2 est active (.cpv2-shell présente dans le DOM),
   on applique le look light/pastel sur la modal d'édition.
   ═══════════════════════════════════════════════════════════════════ */

/* On scope via :has() pour ne pas casser la modal v1 quand v1 est utilisée seule */
body:has(.cpv2-shell) #detail-modal,
body:has(.cpv2-shell) #detail-overlay .modal {
  /* Look Margot : surface blanche, coins arrondis doux, ombre légère */
  background: var(--surface) !important;
  border: 1px solid var(--border) !important;
  border-radius: 12px !important;
  box-shadow: 0 16px 60px rgba(20,22,31,.18) !important;
  font-family: var(--font) !important;
}

/* Header de la modal édition - look aéré */
body:has(.cpv2-shell) #detail-modal .modal-head {
  padding: 20px 22px 14px !important;
  border-bottom: 1px solid var(--border) !important;
  background: linear-gradient(180deg, var(--s2), var(--surface)) !important;
}
body:has(.cpv2-shell) #detail-modal .modal-name {
  font-family: var(--font-display) !important;
  font-size: 18px !important;
  font-weight: 700 !important;
  color: var(--text) !important;
  letter-spacing: -.3px !important;
}
body:has(.cpv2-shell) #detail-modal .modal-meta {
  font-size: 11px !important;
  color: var(--muted) !important;
  margin-top: 4px !important;
}
body:has(.cpv2-shell) #detail-modal .modal-av {
  border-radius: 8px !important;
  font-family: var(--font-display) !important;
  font-weight: 700 !important;
}

/* Bouton fermer */
body:has(.cpv2-shell) #detail-modal .close-btn {
  background: transparent !important;
  border: 1px solid var(--border) !important;
  color: var(--muted) !important;
  border-radius: 6px !important;
  width: 28px !important;
  height: 28px !important;
  font-size: 14px !important;
  transition: all .12s !important;
}
body:has(.cpv2-shell) #detail-modal .close-btn:hover {
  background: var(--s2) !important;
  color: var(--text) !important;
}

/* Body modal édition : padding aéré */
body:has(.cpv2-shell) #detail-modal .modal-body {
  padding: 18px 22px 22px !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 14px !important;
}

/* Section labels (Contact, Recherche, etc.) */
body:has(.cpv2-shell) #detail-modal [style*="text-transform:uppercase"][style*="--accent"] {
  color: var(--accent) !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  letter-spacing: 1.2px !important;
}

/* Inputs / Selects / Textareas — look Margot */
body:has(.cpv2-shell) #detail-modal .ef-input,
body:has(.cpv2-shell) #detail-modal .ef-select,
body:has(.cpv2-shell) #detail-modal .ef-textarea {
  background: var(--surface) !important;
  border: 1px solid var(--border) !important;
  border-radius: 6px !important;
  color: var(--text) !important;
  font-family: var(--font) !important;
  font-size: 13px !important;
  padding: 9px 11px !important;
  transition: border-color .15s, box-shadow .15s !important;
}
body:has(.cpv2-shell) #detail-modal .ef-input:focus,
body:has(.cpv2-shell) #detail-modal .ef-select:focus,
body:has(.cpv2-shell) #detail-modal .ef-textarea:focus {
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 3px var(--accent-dim) !important;
  outline: none !important;
}

/* Labels inputs */
body:has(.cpv2-shell) #detail-modal .ef-lbl {
  font-size: 10px !important;
  letter-spacing: .8px !important;
  text-transform: uppercase !important;
  color: var(--muted) !important;
  font-weight: 600 !important;
  margin-bottom: 4px !important;
}

/* Boutons d'action en bas (Sauvegarder / Annuler) */
body:has(.cpv2-shell) #detail-modal .mbtn {
  border-radius: 6px !important;
  font-family: var(--font) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  padding: 10px 16px !important;
  background: var(--s2) !important;
  border: 1px solid var(--border) !important;
  color: var(--text-dim) !important;
  transition: all .12s !important;
}
body:has(.cpv2-shell) #detail-modal .mbtn:hover {
  background: var(--s3) !important;
  color: var(--text) !important;
}
body:has(.cpv2-shell) #detail-modal .mbtn.primary {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: #fff !important;
}
body:has(.cpv2-shell) #detail-modal .mbtn.primary:hover {
  background: var(--accent-hi) !important;
}

/* Liens contact (📞 ✉) */
body:has(.cpv2-shell) #detail-modal .contact-link {
  background: var(--s2) !important;
  border: 1px solid var(--border) !important;
  border-radius: 6px !important;
  color: var(--text) !important;
  font-size: 12px !important;
  padding: 9px 12px !important;
  transition: all .12s !important;
}
body:has(.cpv2-shell) #detail-modal .contact-link:hover {
  background: var(--accent-dim) !important;
  border-color: var(--accent) !important;
  color: var(--accent) !important;
}

/* Pills type (A / V / AV) */
body:has(.cpv2-shell) #detail-modal #contact-type-pills-0,
body:has(.cpv2-shell) #detail-modal [id^="contact-type-pills-"] .pill {
  font-size: 10px !important;
}

/* Mobile : la modal devient sheet bottom comme dans Margot */
@media (max-width: 768px) {
  body:has(.cpv2-shell) #detail-overlay {
    align-items: flex-end !important;
    padding: 0 !important;
  }
  body:has(.cpv2-shell) #detail-modal {
    border-radius: 16px 16px 0 0 !important;
    width: 100% !important;
    max-height: 92vh !important;
  }
  body:has(.cpv2-shell) #detail-modal .modal-body {
    padding: 14px 14px 30px !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   v211 — Fiche vendeur v2 : pipeline visuel du dossier
   ═══════════════════════════════════════════════════════════════════ */
.cpv2-pipeline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 4px;
  padding: 12px 0;
  overflow-x: auto;
  scrollbar-width: none;
}
.cpv2-pipeline::-webkit-scrollbar { display: none; }

.cpv2-pipeline-step {
  flex: 1;
  min-width: 60px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  position: relative;
  padding: 4px 2px;
  border-radius: 6px;
  transition: background .12s;
}
.cpv2-pipeline-step:hover {
  background: var(--s2);
}

.cpv2-pipeline-step:not(:last-child)::after {
  content: '';
  position: absolute;
  top: 12px;
  left: calc(50% + 12px);
  right: calc(-50% + 12px);
  height: 2px;
  background: var(--border);
  z-index: 0;
}
.cpv2-pipeline-step.done:not(:last-child)::after {
  background: var(--green);
}

.cpv2-pipeline-dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--surface);
  border: 2px solid var(--border);
  position: relative;
  z-index: 1;
  transition: all .15s;
}
.cpv2-pipeline-step.done .cpv2-pipeline-dot {
  background: var(--green);
  border-color: var(--green);
}
.cpv2-pipeline-step.done .cpv2-pipeline-dot::after {
  content: '✓';
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
}
.cpv2-pipeline-step.current .cpv2-pipeline-dot {
  background: var(--accent);
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accent-dim);
  animation: cpv2-pipeline-pulse 2s infinite;
}
@keyframes cpv2-pipeline-pulse {
  0%, 100% { box-shadow: 0 0 0 4px var(--accent-dim); }
  50% { box-shadow: 0 0 0 6px var(--accent-dim); }
}

.cpv2-pipeline-lbl {
  font-size: 11px;
  font-weight: 500;
  color: var(--muted);
  text-align: center;
  white-space: nowrap;
}
.cpv2-pipeline-step.done .cpv2-pipeline-lbl {
  color: var(--green);
  font-weight: 600;
}
.cpv2-pipeline-step.current .cpv2-pipeline-lbl {
  color: var(--accent);
  font-weight: 700;
}

/* Mobile : pipeline plus compact */
@media (max-width: 768px) {
  .cpv2-pipeline {
    padding: 10px 4px;
  }
  .cpv2-pipeline-step {
    min-width: 50px;
  }
  .cpv2-pipeline-lbl {
    font-size: 10px;
  }
  .cpv2-pipeline-dot {
    width: 16px;
    height: 16px;
  }
  .cpv2-pipeline-step:not(:last-child)::after {
    top: 10px;
  }
}

/* [v797] Phase 2C — Override pill + reset button (commissions) */
.kv-cell.cpv2-cell-auto > .kv-val > span[data-inline-mandat]{
  color: var(--muted);
  font-style: italic;
  cursor: pointer;
}
.kv-cell.cpv2-cell-auto > .kv-val > span[data-inline-mandat]:hover{
  color: var(--text);
  font-style: normal;
}
.kv-cell.cpv2-cell-ovr > .kv-val{
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.kv-cell.cpv2-cell-ovr > .kv-val > span[data-inline-mandat]{
  color: var(--text);
  font-weight: 500;
}
.cpv2-ovr-pill{
  display: inline-flex; align-items: center;
  padding: 1px 6px;
  font-size: 9px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .4px;
  background: color-mix(in srgb, var(--accent) 15%, transparent);
  color: var(--accent);
  border-radius: 3px;
  user-select: none;
}

/* [v797] Phase 2D — Notes 2 colonnes (vendeur + mandat) */

.cpv2-notes-grid.single{
  grid-template-columns: 1fr;
}

.cpv2-notes-area{
  width: 100%;
  padding: 8px 10px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  font: inherit; font-size: 12.5px;
  line-height: 1.5;
  color: var(--text);
  resize: vertical;
  min-height: 64px;
  transition: border-color .12s, box-shadow .12s;
}
.cpv2-notes-area:focus{
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
}
.cpv2-notes-area::placeholder{
  color: var(--muted);
  font-size: 12px;
}
@media (max-width: 768px){
  
}

/* [v810→v812] Carte Suivi de la vente : encadré global qui groupe toute la
   partie suivi (header + détails mandat + parties + commissions + notes mandat)
   pour la distinguer clairement du reste de la fiche dossier. */
.cpv2-suivi-card{
  margin: 28px 0 16px;
  padding: 0;
  background: color-mix(in srgb, var(--accent) 3%, var(--surface));
  border: 1.5px solid color-mix(in srgb, var(--accent) 35%, var(--border));
  border-radius: 12px;
  box-shadow: 0 1px 3px color-mix(in srgb, var(--accent) 8%, transparent);
  /* [v813] overflow visible pour que le dropdown autocomplete acquéreur
     puisse dépasser sans être tronqué. Border-radius reste sur le wrapper. */
  overflow: visible;
}
.cpv2-suivi-header{
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  background: color-mix(in srgb, var(--accent) 8%, var(--surface));
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 25%, var(--border));
}
.cpv2-suivi-header-label{
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--accent);
}
/* Les sub-sections internes : marges légèrement réduites pour cohésion visuelle */
.cpv2-suivi-card .cpv2-suivi-subsection,
.cpv2-suivi-card .f-section{
  padding: 14px 18px;
  margin: 0;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 12%, var(--border));
}
.cpv2-suivi-card .f-section:last-child,
.cpv2-suivi-card .cpv2-suivi-subsection:last-child{
  border-bottom: none;
}
.cpv2-suivi-card .f-panel-title{
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 10px;
}
@media (max-width: 768px){
  .cpv2-suivi-card{ margin: 20px 0 12px; }
  .cpv2-suivi-header{ padding: 12px 14px; }
  .cpv2-suivi-card .cpv2-suivi-subsection,
  .cpv2-suivi-card .f-section{ padding: 12px 14px; }
}

/* [v816] Bug dropdown autocomplete tronqué : le parent .kv (qui contient les
   cells) a overflow:hidden pour son border-radius. Utilise :has() pour le
   désactiver UNIQUEMENT quand un picker est présent dedans. */
.cpv2-shell .kv:has(.cpv2-acq-picker){
  overflow: visible !important;
}
/* Idem pour la cell qui contient le picker */
.cpv2-shell .kv-cell:has(.cpv2-acq-picker){
  overflow: visible !important;
  position: relative;
  z-index: 50;
}
/* Et la sub-section parente (Parties) */
.cpv2-shell .cpv2-suivi-subsection:has(.cpv2-acq-picker){
  overflow: visible !important;
}

/* [v819] Carte "Suivi du dossier d'estimation" — équivalent visuel à la carte
   Suivi de la vente, mais pour la partie amont (prix, mandat, notes du dossier).
   Couleurs neutres (pas violet) pour distinguer des 2 phases. */
.cpv2-estim-card{
  margin: 22px 0 16px;
  padding: 0;
  background: var(--surface);
  border: 1.5px solid var(--border);
  border-radius: 12px;
  overflow: visible;
}
.cpv2-estim-header{
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  background: var(--s2);
  border-bottom: 1px solid var(--border);
  border-radius: 12px 12px 0 0;
}
.cpv2-estim-header-label{
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--text);
}
.cpv2-estim-body{
  padding: 14px 18px;
}
.cpv2-estim-body > .f-section{
  margin-bottom: 18px;
}
.cpv2-estim-body > .f-section:last-child{
  margin-bottom: 0;
}
@media (max-width: 768px){
  .cpv2-estim-card{ margin: 16px 0 12px; }
  .cpv2-estim-header{ padding: 12px 14px; }
  .cpv2-estim-body{ padding: 12px 14px; }
}

/* [v819] Fix bug UI coins haut de .cpv2-suivi-card : le header avec bg
   color-mix peut laisser un petit débord visible si border-radius pas
   parfaitement aligné. Force border-radius sur le header pour épouser le
   wrapper. */
.cpv2-suivi-card .cpv2-suivi-header{
  border-radius: 12px 12px 0 0;
}

/* [v823→v830→v893→v894→v895] Colonne droite fiche v2.
   v823 : sticky + max-height + overflow-y auto → bug déplier <details>.
   v830 : retire max-height/overflow, sticky top:16px simple.
   v893 : remet max-height + overflow-y → BUG boutons cachés sous fold rail.
   v894 : annulation totale, scroll naturel.
   v895 : Anthony "la colonne avec les infos doit être sticky au scroll
   comme sur fiche vendeur". On remet sticky SIMPLE (top:16px, align-self:start)
   SANS max-height ni overflow-y, donc pas de scroll interne qui cachait les
   boutons en v893. Si la rail est plus haute que viewport, le sticky se
   débloque proprement quand l'user scrolle (comportement natif). */
.fiche .fiche-rail{
  position: sticky;
  /* [v1007] Anthony : au scroll la card donna ia est croppée par le header
     sticky (.cpv2-topbar). Le header fait ~57px (40 height + 16 margin-bottom
     + 1 border). On pousse le top de la rail sticky à 72px pour qu'elle passe
     en-dessous du header avec un petit gap. */
  top: 72px;
  align-self: start;
}
/* Mobile : rail empilée sous main, pas de sticky */
@media (max-width: 900px){
  .fiche{ grid-template-columns: 1fr; }
  .fiche .fiche-rail{
    position: static;
  }
}

/* [v829] Rail collapsibles : Infos rapides plié par défaut + Events collapse */
.cpv2-rail-collapse{
  /* details : keep close to surface card */
}
.cpv2-rail-collapse-summary,
.cpv2-rail-events-more-summary{
  list-style: none;
  cursor: pointer;
  padding: 14px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  user-select: none;
}
.cpv2-rail-collapse-summary::-webkit-details-marker,
.cpv2-rail-events-more-summary::-webkit-details-marker{ display: none; }
.cpv2-rail-events-more-summary{
  padding: 10px 16px;
  border-top: 1px solid var(--border);
  font-size: 11.5px;
  color: var(--muted);
  font-weight: 500;
}
.cpv2-rail-events-more-summary:hover,
.cpv2-rail-collapse-summary:hover{
  background: var(--s2);
}
.cpv2-rail-chevron{
  font-size: 11px;
  color: var(--muted);
  transition: transform .2s;
  display: inline-block;
}
details[open] > summary .cpv2-rail-chevron{
  transform: rotate(180deg);
}
.cpv2-rail-events-more{
  border-top: 0;
}
.cpv2-rail-events-more .cpv2-evp-list{
  padding: 0 16px 12px;
}

/* [v829] Fix crop Donna · Pilotage : la card sticky rail devait pas tronquer
   le contenu via overflow:hidden. Permettre overflow visible suffit puisque
   les collapses réduisent la place utilisée. */
.donna-card{ overflow: visible; }
.donna-card::before{ overflow: hidden; border-radius: var(--radius-lg); }

/* ════════════════════════════════════════════════════════════════════
   [v835] Refonte header fiche v2 — Option A (Minimal Linear)
   Validée par Anthony. Pipeline reste DESSOUS dans le contenu (inchangé).
   ════════════════════════════════════════════════════════════════════ */

/* (1) Bandeau stats : remove fond gris, transition vers grille 4 cols égales,
   sub-info sur ligne 2 plus discrète */
.cpv2-shell .f-stats{
  grid-template-columns: repeat(4, 1fr) !important;
  background: transparent !important;
  border-top: 0.5px solid var(--border) !important;
  padding: 6px 0;
}
.cpv2-shell .f-stat{
  padding: 12px 18px !important;
  border-right: 0.5px solid var(--border) !important;
  background: transparent !important;
}
.cpv2-shell .f-stat:hover{
  background: var(--s2) !important;
}
.cpv2-shell .f-stat:last-child{
  border-right: none !important;
}
.cpv2-shell .f-stat-lbl{
  font-size: 10.5px !important;
  font-weight: 500 !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase;
  color: var(--text-dim) !important;
  margin-bottom: 5px !important;
}
.cpv2-shell .f-stat-val{
  font-size: 14px !important;
  font-weight: 500 !important;
  color: var(--text) !important;
  letter-spacing: 0 !important;
}
.cpv2-shell .f-stat-val small{
  display: block;
  margin-top: 2px;
  font-size: 11px !important;
  font-weight: 400 !important;
  color: var(--text-dim) !important;
}

/* (2) Boutons header : Appeler en plein noir/blanc selon thème (cohérent règle b),
   Planifier et "..." en outline subtle */
.cpv2-shell .f-head-actions{
  gap: 6px !important;
  align-items: center;
}
.cpv2-shell .f-head-actions .btn{
  padding: 7px 13px;
  font-size: 12.5px;
  font-weight: 500;
  border-radius: 7px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: opacity .12s, background .12s;
  line-height: 1;
}
.cpv2-shell .f-head-actions .btn-ghost.btn-icon{
  padding: 7px 9px;
  background: transparent;
  border: 1px solid var(--border);
  color: var(--muted);
}
.cpv2-shell .f-head-actions .btn-ghost.btn-icon:hover{
  background: var(--s2);
  color: var(--text);
}
.cpv2-shell .f-head-actions .btn-secondary{
  background: transparent;
  border: 1px solid var(--border);
  color: var(--text);
}
.cpv2-shell .f-head-actions .btn-secondary:hover{
  background: var(--s2);
}
.cpv2-shell .f-head-actions .btn-primary{
  background: var(--text) !important;
  border: 1px solid var(--text) !important;
  color: var(--surface) !important;
  font-weight: 500;
}
.cpv2-shell .f-head-actions .btn-primary:hover{
  opacity: 0.85;
}

/* (3) Pill statut subtle (pas de fond plein) */
.cpv2-shell .f-pill{
  padding: 3px 10px;
  font-size: 11.5px;
  font-weight: 500;
  border-radius: 999px;
  background: color-mix(in srgb, var(--c) 12%, transparent);
  color: var(--c);
  border: none;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  letter-spacing: 0;
}
.cpv2-shell .f-pill .dot{
  width: 5px;
  height: 5px;
  background: var(--c);
}

/* (4) Action rapide quickbar : restyle plus discret (style "search input") */
.cpv2-shell .f-quickbar{
  background: var(--s2);
  border: 1px solid var(--border);
  padding: 4px 10px 4px 8px;
  font-size: 11.5px;
  color: var(--text-dim);
  border-radius: 6px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cpv2-shell .f-quickbar:hover{
  background: var(--s3);
  color: var(--text);
}
.cpv2-shell .f-quickbar kbd{
  background: var(--surface);
  border: 1px solid var(--border);
  padding: 1px 4px;
  border-radius: 3px;
  font-size: 10px;
  color: var(--muted);
}

/* (5) Meta line plus aérée et discrète */
.cpv2-shell .f-meta{
  margin-top: 8px;
  font-size: 12px;
  color: var(--text-dim);
  gap: 8px;
}

/* (6) Top du header : padding plus aéré et structure flat */
.cpv2-shell .f-head{
  background: var(--surface);
  border: 0.5px solid var(--border);
  border-radius: var(--radius-lg);
}
.cpv2-shell .f-head-top{
  padding: 18px 22px 14px;
  gap: 16px;
}

/* ════════════════════════════════════════════════════════════════════
   [v836] Polish header Option A — feedback Anthony
   - Titre sur UNE ligne (pas wrap)
   - Avatar plus petit (50px au lieu de 72)
   - Spacing globalement plus serré, plus proche du mockup
   ════════════════════════════════════════════════════════════════════ */

/* (1) Avatar instinct plus compact, aligné avec le titre */
.cpv2-shell .f-head-top .instinct{
  width: 52px !important;
  height: 52px !important;
  align-self: flex-start;
  margin-top: 2px;
}
.cpv2-shell .f-head-top .instinct svg{
  width: 52px !important;
  height: 52px !important;
}
/* Recalibre stroke-width pour rester visible avec petit cercle */
.cpv2-shell .f-head-top .instinct .instinct-bg,
.cpv2-shell .f-head-top .instinct .instinct-fill{
  stroke-width: 3.5 !important;
}
/* SVG circle attributes : on force r via CSS pas possible mais on ajuste viewBox via transform */
.cpv2-shell .f-head-top .instinct .instinct-val{
  font-size: 16px !important;
  letter-spacing: -0.3px;
}
.cpv2-shell .f-head-top .instinct .instinct-lbl{
  font-size: 7.5px !important;
  margin-top: 1px;
  letter-spacing: 0.5px;
}
.cpv2-shell .f-head-top .instinct.is-avancement .instinct-val{
  font-size: 14px !important;
}

/* (2) Titre + acquéreur sur UNE seule ligne (no wrap) */
.cpv2-shell .f-name-row,
.cpv2-shell .f-name-row.has-acq{
  flex-wrap: nowrap !important;
  min-width: 0;
  overflow: hidden;
  align-items: center;
}
.cpv2-shell .f-identity:has(.f-name-row.has-acq) > .f-name-row{
  /* Override : on n'utilise plus la 2e ligne séparée pour le badge,
     tout reste inline via .f-status-row qui suit immédiatement. */
  flex-wrap: nowrap !important;
}
.cpv2-shell .f-name-row .f-name,
.cpv2-shell .f-name-row .f-name-acq{
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 21px !important;
  font-weight: 500 !important;
  line-height: 1.25;
  letter-spacing: -0.2px;
}
.cpv2-shell .f-name-cross{
  font-size: 16px !important;
  color: var(--text-dim) !important;
  font-weight: 400 !important;
  margin: 0 4px;
  flex-shrink: 0;
}

/* (3) Status row (pill + quickbar) : compact, juste sous le titre */
.cpv2-shell .f-status-row{
  margin-top: 6px !important;
  gap: 8px !important;
  align-items: center;
}

/* (4) Identity column : tout vertical compact */
.cpv2-shell .f-identity{
  display: flex;
  flex-direction: column;
  gap: 0;
  min-width: 0;
  flex: 1;
}

/* (5) Meta line : remplacer emojis par icônes SVG (qu'on injecte via JS) +
   spacing plus serré + couleurs cohérentes */
.cpv2-shell .f-meta{
  margin-top: 8px !important;
  font-size: 12px !important;
  color: var(--text-dim) !important;
  gap: 6px !important;
  display: flex !important;
  flex-wrap: wrap;
  align-items: center;
}
.cpv2-shell .f-meta .sep{
  opacity: 0.35;
  margin: 0 2px;
}
.cpv2-shell .f-meta .meta-icon{
  width: 13px; height: 13px;
  vertical-align: -2px;
  margin-right: 4px;
  opacity: 0.7;
}

/* (6) Header top : padding + gap */
.cpv2-shell .f-head-top{
  padding: 16px 20px 14px !important;
  gap: 14px !important;
  align-items: flex-start;
}

/* (7) Action rapide quickbar : style "search input" plus discret */
.cpv2-shell .f-quickbar{
  padding: 3px 9px 3px 7px !important;
  font-size: 11px !important;
  height: 24px;
  border-radius: 5px !important;
}
.cpv2-shell .f-quickbar svg{
  width: 11px !important;
  height: 11px !important;
}

/* (8) Bandeau stats : plus serré verticalement */
.cpv2-shell .f-stats{
  padding: 0 !important;
}
.cpv2-shell .f-stat{
  padding: 11px 16px !important;
}
.cpv2-shell .f-stat-val{
  margin-top: 2px !important;
}

/* ════════════════════════════════════════════════════════════════════
   [v837] 3 fixes UX
   - Score instinct centré dans le cercle (bug v836)
   - Bords arrondis sur la barre des onglets
   - Refonte Donna card sobre (Margot 2.0 item d)
   ════════════════════════════════════════════════════════════════════ */

/* (1) Fix score instinct mal centré dans le cercle 52px.
   Cause v836 : SVG circle calibré sur viewBox 72x72 mais SVG resized à 52px,
   le contenu HTML inner restait inset:0 mais le centre visuel ne matchait pas
   exactement. Force inset 0 + redéfinit la translation pour centrer correctement.
   En plus, la rotation -90deg du SVG ne doit pas affecter l'inner. */
.cpv2-shell .f-head-top .instinct{
  display: flex;
  align-items: center;
  justify-content: center;
}
.cpv2-shell .f-head-top .instinct .instinct-inner{
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  /* Compense la baseline-shift du chiffre + label */
  padding-top: 1px;
  line-height: 1;
}
.cpv2-shell .f-head-top .instinct .instinct-val{
  font-size: 15px !important;
  font-weight: 600 !important;
  letter-spacing: -0.3px;
  line-height: 1;
}
.cpv2-shell .f-head-top .instinct .instinct-lbl{
  font-size: 7px !important;
  margin-top: 2px;
  letter-spacing: 0.6px;
  font-weight: 500;
  line-height: 1;
}
.cpv2-shell .f-head-top .instinct.is-avancement .instinct-val{
  font-size: 13px !important;
}

/* (2) Bords arrondis sur la barre des onglets */
.cpv2-shell .f-tabs{
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  background: var(--surface);
  /* [v1165 fix S2 — APPROCHE ULTIME] J'ai essayé en v1160/v1162/v1164 de
     fixer la bordure via border:1px sur 4 côtés, mais elle est toujours
     interrompue selon Anthony ("PAS FIXE" x3). Plusieurs raisons possibles :
     conflicts CSS multiples (3 occurrences de .cpv2-shell .f-tabs), cache
     navigateur, sub-pixel rendering, ou autre. Approche radicale :
     box-shadow:inset qui dessine la bordure À L'INTÉRIEUR de l'élément
     (immune aux conflits de border + spread sur tous les côtés
     simultanément + ne dépend pas du sub-pixel rendering). On vire
     totalement border pour ne pas avoir de double trait. !important pour
     éviter tout override en cascade. */
  border: none !important;
  box-shadow: inset 0 0 0 1px var(--border) !important;
  margin-top: 12px;
  overflow: hidden;
}
/* Quand des onglets sont placés au-dessus du contenu principal sans wrapper carte,
   on force les coins arrondis aux 4 angles si pas de contenu juste après dans le carton. */

/* (3) Refonte Donna card — sobre, sans gradient (Margot 2.0 item d).
   Avant : gradient violet 8% → blanc + halo radial top-right + border violet.
   Maintenant : fond surface uni + border violet 1.5px + label "DONNA" small-caps
   + barre progression unie violet + chiffres noirs (pas violet). */
.cpv2-shell .donna-card{
  background: var(--surface) !important;
  border: 1.5px solid color-mix(in srgb, var(--accent) 40%, var(--border)) !important;
  border-radius: var(--radius-lg);
  overflow: hidden;
  position: relative;
}
/* Suppression du halo radial top-right */
.cpv2-shell .donna-card::before{
  display: none !important;
}

/* Header sobre */
.cpv2-shell .donna-card .donna-head{
  padding: 12px 16px 8px;
  background: color-mix(in srgb, var(--accent) 6%, var(--surface));
  border-bottom: 0.5px solid color-mix(in srgb, var(--accent) 18%, var(--border));
}
.cpv2-shell .donna-card .donna-brand{
  font-size: 10.5px !important;
  font-weight: 600 !important;
  letter-spacing: 0.6px !important;
  color: var(--accent) !important;
}
.cpv2-shell .donna-card .donna-brand svg{
  display: none !important;
}

/* Score : chiffre noir gros + barre violet uni */
.cpv2-shell .donna-card .donna-score-row{
  padding: 10px 16px 12px;
}
.cpv2-shell .donna-card .donna-score-big{
  font-size: 36px !important;
  font-weight: 600 !important;
  letter-spacing: -1px !important;
  color: var(--text) !important;
}
.cpv2-shell .donna-card .donna-score-bar{
  background: var(--s2) !important;
  height: 5px !important;
  border-radius: 3px;
}
.cpv2-shell .donna-card .donna-score-fill{
  background: var(--accent) !important;
  border-radius: 3px;
}

/* Section explain : padding cohérent */
.cpv2-shell .donna-card .donna-score-explain{
  padding: 0 16px 12px;
  font-size: 12px;
  color: var(--text-dim);
  line-height: 1.5;
}

/* Actions list : separator subtle, hover discret */
.cpv2-shell .donna-card .donna-actions{
  border-top: 0.5px solid color-mix(in srgb, var(--accent) 12%, var(--border)) !important;
}
.cpv2-shell .donna-card .donna-action{
  padding: 12px 16px;
  border-bottom: 0.5px solid var(--border) !important;
}
.cpv2-shell .donna-card .donna-action:hover{
  background: color-mix(in srgb, var(--accent) 4%, transparent) !important;
}
.cpv2-shell .donna-card .donna-action-icon{
  background: color-mix(in srgb, var(--accent) 10%, transparent) !important;
  color: var(--accent) !important;
}

/* ════════════════════════════════════════════════════════════════════
   [v838] 4 fixes
   - Score instinct VRAIMENT centré dans le cercle
   - Gap entre tabs et contenu en dessous
   - Carte Estim : retirer le cadre, garder juste le titre
   ════════════════════════════════════════════════════════════════════ */

/* (1) Score centré : v837 avait padding-top:1px qui décalait. 
   Vrai fix : reset padding, line-height et translateY négatif léger pour
   compenser la baseline naturelle des chiffres. */
.cpv2-shell .f-head-top .instinct .instinct-inner{
  padding: 0 !important;
  /* Translate -1px Y pour compenser la baseline naturelle dans Plus Jakarta */
  transform: translateY(-1px);
}

/* (2) Gap entre tabs et contenu : v837 avait margin-top:12px sur tabs,
   ça créait un espace visible AU-DESSUS des tabs. À la place on supprime
   le margin et on contrôle plutôt la séparation par border. */
.cpv2-shell .f-tabs{
  margin-top: 0 !important;
}
/* [v1165 fix S2 Anthony "Bordure interrompue PAS FIXE"] L'ancien -0.5px
   était calibré pour border:0.5px (modifié en v1164 → 1px). Maintenant
   ce -0.5px crée un décalage visuel entre .f-tabs et .f-tab-body. On
   neutralise. */
.cpv2-shell .f-tabs + *{
  margin-top: 0;
}

/* (3) Carte Estim : Anthony veut juste le titre sur fond blanc, pas le cadre */
.cpv2-shell .cpv2-estim-card{
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  margin: 22px 0 8px !important;
}
.cpv2-shell .cpv2-estim-card .cpv2-estim-header{
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  padding: 0 0 4px !important;
}
.cpv2-shell .cpv2-estim-card .cpv2-estim-header-label{
  color: var(--text) !important;
  font-size: 11px !important;
  letter-spacing: 1.2px !important;
}
.cpv2-shell .cpv2-estim-card .cpv2-estim-body{
  padding: 0 !important;
}

/* [v853] Score INSTINCT centré — last fix */
.cpv2-shell .f-head-top .instinct .instinct-lbl{
  display: none !important;
}
.cpv2-shell .f-head-top .instinct{
  display: grid !important;
  grid-template-columns: 52px;
  grid-template-rows: 52px;
  width: 52px !important;
  height: 52px !important;
  align-self: flex-start;
  margin-top: 2px;
}
.cpv2-shell .f-head-top .instinct svg{
  grid-area: 1 / 1;
  width: 52px !important;
  height: 52px !important;
}
.cpv2-shell .f-head-top .instinct .instinct-inner{
  grid-area: 1 / 1;
  position: relative !important;
  inset: auto !important;
  display: grid !important;
  place-content: center !important;
  text-align: center;
  padding: 0 !important;
  margin: 0 !important;
  transform: none !important;
  pointer-events: none;
  width: 52px;
  height: 52px;
  line-height: 1;
}
.cpv2-shell .f-head-top .instinct .instinct-val{
  position: static !important;
  transform: none !important;
  font-size: 18px !important;
  font-weight: 600 !important;
  line-height: 1 !important;
  letter-spacing: -0.4px !important;
  color: var(--text) !important;
  margin: 0 !important;
  padding: 0 !important;
  font-variant-numeric: tabular-nums;
}

/* ════════════════════════════════════════════════════════════════════
   [v891] Avatar carré + slot insight IA dans donna-card existante
   Patches additionnels — n'écrasent rien d'existant.
   ════════════════════════════════════════════════════════════════════ */

/* Avatar carré arrondi (remplace .instinct rond) */
.cpv2-avatar {
  width: 64px;
  height: 64px;
  border-radius: 12px;
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--accent) 14%, var(--surface)),
    color-mix(in srgb, var(--accent) 6%, var(--surface)));
  border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--border));
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  cursor: default;
  transition: transform .15s, box-shadow .15s;
  position: relative;
}
.cpv2-avatar:hover {
  transform: scale(1.02);
  box-shadow: 0 4px 14px color-mix(in srgb, var(--accent) 18%, transparent);
}
.cpv2-avatar-initials {
  font-family: 'Plus Jakarta Sans', -apple-system, sans-serif;
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.5px;
  color: var(--accent);
  line-height: 1;
  text-transform: uppercase;
}
@media (max-width: 600px) {
  .cpv2-avatar { width: 52px; height: 52px; border-radius: 10px; }
  .cpv2-avatar-initials { font-size: 18px; }
}

/* Slot insight IA dans .donna-card */

.cpv2-insight-retry-inline {
  margin-top: 4px;
  background: transparent;
  border: 1px solid var(--accent);
  color: var(--accent);
  font-size: 11px;
  font-weight: 600;
  padding: 3px 9px;
  border-radius: 4px;
  cursor: pointer;
  font-family: inherit;
}
.cpv2-insight-retry-inline:hover {
  background: var(--accent-dim);
}

.cpv2-insight-sug.warm::before { background: var(--accent); }
.cpv2-insight-sug.warn::before { background: var(--chaud); }

.cpv2-insight-sug.warm .cpv2-insight-sug-icon {
  background: var(--accent-dim);
  color: var(--accent);
}
.cpv2-insight-sug.warn .cpv2-insight-sug-icon {
  background: color-mix(in srgb, var(--chaud) 14%, transparent);
  color: var(--chaud);
}

/* Recap (dossier acte signé) */

/* Footer : refresh + ask */

.cpv2-insight-refresh {
  background: transparent;
  border: none;
  color: var(--text-dim);
  cursor: pointer;
  padding: 7px 9px;
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background .12s, color .12s;
}
.cpv2-insight-refresh:hover {
  background: var(--s2);
  color: var(--text);
}
.cpv2-insight-ask {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  background: var(--text);
  color: var(--surface);
  border: none;
  padding: 8px 11px;
  border-radius: 4px;
  font-family: inherit;
  font-size: 11.5px;
  font-weight: 600;
  cursor: pointer;
  transition: background .12s;
}
.cpv2-insight-ask:hover {
  background: var(--text-dim);
}
@media (max-width: 600px) {
  
  
}

/* ════════════════════════════════════════════════════════════════════
   [v892] Design Margot v9 — card .df-* (refonte complète .donna-card)
   Synth en 13px (au lieu de 14.5px Margot mockup), demande Anthony.
   Icône donna 8-branches officielle (substituée à sparkle 5-branches Margot).
   ════════════════════════════════════════════════════════════════════ */

/* ─── Card wrapper ─── */
.df {
  width: 100%;
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--border));
  border-radius: 8px;
  overflow: hidden;
  position: relative;
  box-shadow: 0 4px 14px rgba(20, 22, 31, .05);
}
.df::before {
  content: ""; position: absolute; top: 0; right: 0;
  width: 140px; height: 140px; pointer-events: none;
  background: radial-gradient(circle at top right,
    color-mix(in srgb, var(--accent) 14%, transparent), transparent 65%);
}

/* ─── Head : avatar donna + label + meta ─── */
.df-hd {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 11px 14px 10px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 14%, var(--border));
  position: relative;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--accent) 6%, var(--surface)),
    var(--surface));
}
.df-av {
  width: 24px; height: 24px;
  border-radius: 50%;
  background: var(--accent); color: #fff;
  display: grid; place-items: center;
  position: relative; flex-shrink: 0;
}
.df-av svg { display: block; }
.df-av::after {
  content: ""; position: absolute;
  right: -2px; bottom: -2px;
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--green, #22a06b);
  border: 2px solid var(--surface);
}
.df-hd-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: 7px;
  color: var(--text);
  min-width: 0;
}
.df-hd-lbl .nm   { color: var(--accent); }
.df-hd-lbl .sep  { color: color-mix(in srgb, var(--border) 70%, var(--muted)); }
.df-hd-lbl .kind { color: var(--text-dim); }
.df-hd-meta {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: .3px;
  color: var(--muted);
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.df-hd-meta .ago { color: var(--text-dim); font-weight: 600; }
.df-recalc-btn {
  background: transparent;
  border: none;
  color: var(--accent);
  cursor: pointer;
  font-size: 13px;
  padding: 2px 6px;
  border-radius: 3px;
  transition: background .12s;
}
.df-recalc-btn:hover { background: var(--accent-dim); }

/* ─── Score row ─── */
.df-score {
  padding: 14px 16px 12px;
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 14px;
  align-items: center;
  position: relative;
}
.df-score-num {
  font-family: 'Plus Jakarta Sans', -apple-system, sans-serif;
  font-size: 42px;
  font-weight: 800;
  letter-spacing: -1.6px;
  color: var(--text);
  line-height: 1;
  font-variant-numeric: tabular-nums;
  display: flex;
  align-items: baseline;
  gap: 2px;
}
.df-score-num .pct {
  font-size: 18px;
  font-weight: 600;
  color: var(--text-dim);
  margin-left: 1px;
}
.df-score-num.empty { color: var(--muted); }
.df-score-side {
  display: flex;
  flex-direction: column;
  gap: 7px;
  min-width: 0;
}
.df-score-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--muted);
  font-weight: 600;
}
/* [v893] variant : tout poussé à droite (au-dessus de la bar gradient) */
.df-score-row.df-score-row-right {
  justify-content: flex-end;
  gap: 8px;
}
.df-score-row .df-score-status {
  color: var(--text-dim);
  font-weight: 700;
}
.df-score-row b { color: var(--text); font-weight: 700; }
.df-score-bar {
  height: 6px;
  background: var(--s3);
  border-radius: 3px;
  overflow: hidden;
  position: relative;
}
.df-score-fill {
  /* [v894] Anthony : couleur du score vendeur (accent monochrome) plus jolie
     que le gradient froid→accent→chaud de l'acquéreur. Harmonisé sur les deux
     types de fiches. */
  height: 100%;
  border-radius: 3px;
  background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 60%, var(--text)));
  transition: width .4s cubic-bezier(.2, .8, .2, 1);
}
.df-score-delta {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: .3px;
  color: var(--green, #22a06b);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.df-score-delta.down { color: var(--chaud); }
.df-score-delta.flat { color: var(--muted); }

/* ─── Body : synthèse + signature row ─── */
.df-body {
  padding: 4px 16px 14px;
  position: relative;
}
.df-synth {
  /* [v892] 13px (Margot mockup = 14.5px) — Anthony "plus petit" */
  font-family: 'Plus Jakarta Sans', -apple-system, sans-serif;
  font-weight: 600;
  font-size: 13px;
  line-height: 1.5;
  letter-spacing: -.1px;
  color: var(--text);
  text-wrap: pretty;
  margin: 0;
}
.df-synth em {
  font-style: normal;
  font-weight: 700;
  background: linear-gradient(95deg, var(--accent), color-mix(in srgb, var(--accent) 60%, var(--text)));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.df-synth b { font-weight: 700; color: var(--text); }
.df-sig {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 9px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: .3px;
  color: var(--muted);
}
.df-sig .sep { color: color-mix(in srgb, var(--border) 70%, var(--muted)); }
.df-sig b { color: var(--text-dim); font-weight: 600; }

.df-synth.streaming::after {
  content: "";
  display: inline-block;
  width: 7px; height: 1em;
  vertical-align: -2px;
  margin-left: 2px;
  background: var(--accent);
  border-radius: 1px;
  animation: df-caret 1s steps(2) infinite;
}
@keyframes df-caret { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }

/* ─── Suggestions ─── */
.df-suggs {
  display: flex;
  flex-direction: column;
  gap: 5px;
  padding: 0 12px 12px;
  position: relative;
}
.df-sug {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 11px;
  padding: 10px 11px 10px 12px;
  border-radius: 4px;
  background: var(--s2);
  border: 1px solid transparent;
  text-align: left;
  cursor: pointer;
  transition: background .12s, border-color .12s;
  position: relative;
  overflow: hidden;
  font: inherit;
  color: inherit;
  width: 100%;
}
.df-sug::before {
  content: "";
  position: absolute;
  left: 0; top: 6px; bottom: 6px;
  width: 2px;
  background: var(--green, #22a06b);
  border-radius: 2px;
}
.df-sug.warm::before { background: var(--accent); }
.df-sug.warn::before { background: var(--chaud); }
.df-sug:hover { background: var(--s3); border-color: var(--border); }
.df-sug:hover .df-sug-arrow { transform: translateX(2px); color: var(--text); }
.df-sug-icon {
  width: 24px; height: 24px;
  border-radius: 3px;
  display: grid;
  place-items: center;
  background: color-mix(in srgb, var(--green, #22a06b) 14%, transparent);
  color: var(--green, #22a06b);
  flex-shrink: 0;
}
.df-sug.warm .df-sug-icon {
  background: var(--accent-dim);
  color: var(--accent);
}
.df-sug.warn .df-sug-icon {
  background: color-mix(in srgb, var(--chaud) 14%, transparent);
  color: var(--chaud);
}
.df-sug-icon svg { display: block; }
.df-sug-body { min-width: 0; }
.df-sug-ttl {
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.35;
  color: var(--text);
}
.df-sug-meta {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px;
  letter-spacing: .3px;
  color: var(--muted);
  margin-top: 3px;
}
.df-sug-meta b { color: var(--text-dim); font-weight: 600; }
.df-sug-arrow {
  color: var(--muted);
  transition: transform .12s, color .12s;
  flex-shrink: 0;
}

/* ─── Footer ─── */
.df-foot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  border-top: 1px solid var(--border);
  background: var(--surface);
  position: relative;
}
.df-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 11px;
  border-radius: 4px;
  font-size: 11.5px;
  font-weight: 600;
  white-space: nowrap;
  transition: background .12s, color .12s;
  font-family: inherit;
  border: none;
  cursor: pointer;
}
.df-btn.primary {
  background: var(--text);
  color: var(--surface);
  flex: 1;
  justify-content: center;
}
.df-btn.primary:hover { background: var(--text-dim); }
.df-btn.ghost {
  background: transparent;
  color: var(--text-dim);
  padding: 7px 9px;
}
.df-btn.ghost:hover { background: var(--s2); color: var(--text); }
.df-btn.secondary {
  background: var(--s2);
  color: var(--text);
  border: 1px solid var(--border);
  flex: 1;
  justify-content: center;
}
.df-btn.secondary:hover { background: var(--s3); }

/* ─── State : Loading (skeletons) ─── */
.df-skel {
  height: 14px;
  border-radius: 3px;
  background: linear-gradient(90deg,
    var(--s2) 0%, var(--s3) 50%, var(--s2) 100%);
  background-size: 200% 100%;
  animation: df-shimmer 1.4s linear infinite;
}
@keyframes df-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
.df-skel.line-1   { width: 92%; margin-top: 2px; }
.df-skel.line-2   { width: 74%; margin-top: 8px; }
.df-skel.line-sig { width: 55%; height: 9px; margin-top: 14px; opacity: .6; }
.df-skel.sug {
  height: 46px;
  margin-top: 0;
  border-radius: 4px;
}
.df-loading-tag {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px;
  letter-spacing: .6px;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--accent);
  margin-bottom: 8px;
}
.df-loading-tag .dots { display: inline-flex; gap: 2px; }
.df-loading-tag .dots span {
  width: 3px; height: 3px;
  border-radius: 50%;
  background: var(--accent);
  animation: df-bounce 1s infinite;
}
.df-loading-tag .dots span:nth-child(2) { animation-delay: .15s; }
.df-loading-tag .dots span:nth-child(3) { animation-delay: .3s; }
@keyframes df-bounce {
  0%, 100% { opacity: .3; transform: translateY(0); }
  50%      { opacity: 1; transform: translateY(-2px); }
}

/* ─── State : Empty / Fail / Cold-start ─── */
.df-empty {
  padding: 18px 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  align-items: flex-start;
  position: relative;
}
.df-empty-icon {
  width: 30px; height: 30px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: var(--s2);
  color: var(--muted);
  border: 1px solid var(--border);
}
.df-empty-icon.fail {
  background: color-mix(in srgb, var(--chaud) 10%, var(--surface));
  color: var(--chaud);
  border-color: color-mix(in srgb, var(--chaud) 25%, var(--border));
}
.df-empty-icon.calm {
  background: color-mix(in srgb, var(--accent) 8%, var(--surface));
  color: var(--accent);
  border-color: color-mix(in srgb, var(--accent) 22%, var(--border));
}
.df-empty-ttl {
  font-family: 'Plus Jakarta Sans', -apple-system, sans-serif;
  font-size: 13.5px;
  font-weight: 600;
  letter-spacing: -.15px;
  line-height: 1.35;
  color: var(--text);
  text-wrap: pretty;
}
.df-empty-sub {
  font-size: 12px;
  line-height: 1.5;
  color: var(--text-dim);
  text-wrap: pretty;
}
.df-empty-actions {
  display: flex;
  gap: 6px;
  margin-top: 4px;
  width: 100%;
}

/* ─── Recap (dossier acte signé) ─── */
.df-recap {
  background: color-mix(in srgb, var(--green, #22a06b) 6%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--green, #22a06b) 25%, var(--border));
  border-radius: 6px;
  padding: 11px 13px;
}
.df-recap-ttl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--green, #22a06b);
  font-weight: 700;
  margin-bottom: 8px;
}
.df-recap-line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 5px 0;
  border-top: 1px dashed color-mix(in srgb, var(--green, #22a06b) 18%, transparent);
  font-size: 12px;
}
.df-recap-line:first-of-type { border-top: 0; padding-top: 2px; }
.df-recap-label {
  color: var(--text-dim);
  font-weight: 500;
}
.df-recap-value {
  color: var(--text);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

/* ─── Mobile responsive ─── */
@media (max-width: 540px) {
  .df-score-num { font-size: 38px; }
  .df-synth { font-size: 12.5px; }
}

/* ═══════════════════════════════════════════════════════════════════
   [v903] Biens liés — mini-fiches Margot 2.0
   Source : ZIP design Margot du 10 mai 2026 (handoff-biens-lies).
   Adapté : variables déjà scopées à .cpv2-shell, classes préfixées implicite-
   ment via .cpv2-shell .bl pour éviter collisions globales.
   Pas de match meter (Anthony : feature dispo via onglet rapprochement bien).
   ═══════════════════════════════════════════════════════════════════ */

.cpv2-shell .biens-head{
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
}
.cpv2-shell .biens-eyebrow{
  font-family: var(--mono, 'JetBrains Mono', ui-monospace, monospace);
  font-size: 10.5px;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--muted);
  font-weight: 600;
}
.cpv2-shell .biens-eyebrow b{
  color: var(--text);
  font-weight: 700;
}
.cpv2-shell .biens-add{
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--text-dim);
  padding: 6px 10px;
  border-radius: var(--radius);
  border: 1px dashed var(--border-hi);
  background: transparent;
  cursor: pointer;
  font-family: inherit;
  transition: color .12s, border-color .12s, background .12s;
}
.cpv2-shell .biens-add:hover{
  color: var(--text);
  border-color: var(--text-dim);
  background: var(--s2);
}
.cpv2-shell .biens-add svg{
  flex-shrink: 0;
}

.cpv2-shell .biens-list{
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.cpv2-shell .bl{
  display: grid;
  grid-template-columns: 180px 1fr auto;
  gap: 18px;
  align-items: stretch;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  cursor: pointer;
  transition: border-color .14s, box-shadow .14s, transform .14s;
  position: relative;
}
.cpv2-shell .bl:hover{
  border-color: var(--border-hi);
  box-shadow: var(--shadow);
}
.cpv2-shell .bl:hover .bl-arrow{
  transform: translateX(2px);
  color: var(--text);
}

/* Photo */
.cpv2-shell .bl-photo{
  position: relative;
  background: linear-gradient(135deg, var(--s3), var(--s2));
  overflow: hidden;
  min-height: 140px;
}
.cpv2-shell .bl-photo img{
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.cpv2-shell .bl-photo-empty{
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
  color: var(--muted);
}
.cpv2-shell .bl-photo-count{
  position: absolute;
  left: 8px;
  bottom: 8px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 10px;
  font-weight: 600;
  padding: 3px 6px;
  border-radius: var(--radius-sm);
  background: rgba(0, 0, 0, .55);
  color: #fff;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

/* Status pill (top-left on photo) */
.cpv2-shell .bl-status{
  position: absolute;
  top: 8px;
  left: 8px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .5px;
  text-transform: uppercase;
  padding: 4px 8px 4px 7px;
  border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, .95);
  color: var(--text);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  border: 1px solid rgba(0, 0, 0, .06);
}
.cpv2-shell .bl-status .dot{
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--green, #22a06b);
}
.cpv2-shell .bl-status.compromis .dot{ background: var(--accent); }
.cpv2-shell .bl-status.offre .dot{ background: var(--tiede, #c08a2e); }
.cpv2-shell .bl-status.retire .dot{ background: var(--muted); }
.cpv2-shell[data-theme="noir"] .bl-status{
  background: rgba(15, 15, 20, .85);
  color: var(--text);
  border-color: rgba(255, 255, 255, .08);
}

/* Body (middle) */
.cpv2-shell .bl-body{
  padding: 14px 4px 14px 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
  justify-content: center;
}
.cpv2-shell .bl-price-row{
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
}
.cpv2-shell .bl-price{
  font-family: var(--font-display, 'Plus Jakarta Sans', sans-serif);
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -.6px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.cpv2-shell .bl-price-m2{
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 10.5px;
  letter-spacing: .3px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.cpv2-shell .bl-price-m2 b{
  color: var(--text-dim);
  font-weight: 600;
}
.cpv2-shell .bl-addr{
  font-size: 13.5px;
  color: var(--text);
  line-height: 1.35;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cpv2-shell .bl-meta{
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 2px;
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 11px;
  letter-spacing: .2px;
  color: var(--text-dim);
  font-variant-numeric: tabular-nums;
}
.cpv2-shell .bl-meta .sep{ color: var(--border-hi); }
.cpv2-shell .bl-meta b{
  color: var(--text);
  font-weight: 600;
}

.cpv2-shell .bl-tags{
  display: flex;
  align-items: center;
  gap: 5px;
  flex-wrap: wrap;
  margin-top: 6px;
}
.cpv2-shell .bl-tag{
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: .3px;
  text-transform: uppercase;
  padding: 3px 7px;
  border-radius: var(--radius-sm);
  background: var(--s2);
  color: var(--text-dim);
  border: 1px solid var(--border);
}
.cpv2-shell .bl-tag.match{
  background: color-mix(in srgb, var(--accent) 12%, transparent);
  color: var(--accent);
  border-color: color-mix(in srgb, var(--accent) 28%, transparent);
}
.cpv2-shell .bl-tag.warn{
  background: color-mix(in srgb, var(--chaud, #d64560) 12%, transparent);
  color: var(--chaud, #d64560);
  border-color: color-mix(in srgb, var(--chaud, #d64560) 28%, transparent);
}
.cpv2-shell .bl-tag.warm{
  background: color-mix(in srgb, var(--tiede, #c08a2e) 14%, transparent);
  color: var(--tiede, #c08a2e);
  border-color: color-mix(in srgb, var(--tiede, #c08a2e) 30%, transparent);
}

/* Right side (KPIs + arrow) */
.cpv2-shell .bl-side{
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 18px 14px 8px;
  border-left: 1px solid var(--border);
  background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--accent) 3%, transparent));
}
.cpv2-shell .bl-kpis{
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 96px;
}
.cpv2-shell .bl-kpi{
  display: flex;
  flex-direction: column;
  gap: 1px;
}
.cpv2-shell .bl-kpi-lbl{
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 9.5px;
  letter-spacing: .7px;
  text-transform: uppercase;
  color: var(--muted);
  font-weight: 600;
}
.cpv2-shell .bl-kpi-val{
  font-family: var(--font-display, 'Plus Jakarta Sans', sans-serif);
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -.2px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  display: flex;
  align-items: baseline;
  gap: 3px;
}
.cpv2-shell .bl-kpi-val .unit{
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 10px;
  font-weight: 600;
  color: var(--muted);
  letter-spacing: .3px;
}
.cpv2-shell .bl-kpi-val.warn{ color: var(--chaud, #d64560); }
.cpv2-shell .bl-kpi-val.ok{ color: var(--green, #22a06b); }

.cpv2-shell .bl-arrow{
  color: var(--muted);
  transition: transform .14s, color .14s;
  align-self: center;
}

/* Empty state */
.cpv2-shell .biens-empty{
  padding: 32px 20px;
  text-align: center;
  border: 1px dashed var(--border-hi);
  border-radius: var(--radius-lg);
  background: var(--surface);
}
.cpv2-shell .biens-empty-ttl{
  font-family: var(--font-display, 'Plus Jakarta Sans', sans-serif);
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 4px;
}
.cpv2-shell .biens-empty-sub{
  font-size: 12px;
  color: var(--text-dim);
  margin-bottom: 14px;
}
.cpv2-shell .biens-empty-cta{
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  border-radius: var(--radius);
  background: var(--text);
  color: var(--bg);
  font-size: 12px;
  font-weight: 600;
  border: none;
  cursor: pointer;
  font-family: inherit;
  transition: background .12s;
}
.cpv2-shell .biens-empty-cta:hover{ background: var(--text-dim); }

/* Mobile (<680px) */
@media (max-width: 680px){
  .cpv2-shell .bl{
    grid-template-columns: 120px 1fr;
    grid-template-rows: auto auto;
  }
  .cpv2-shell .bl-photo{ grid-row: 1 / span 2; }
  .cpv2-shell .bl-side{
    grid-column: 2;
    padding: 0 14px 14px 0;
    border-left: none;
    border-top: 1px solid var(--border);
    margin-top: 6px;
    padding-top: 10px;
    background: none;
  }
  .cpv2-shell .bl-arrow{ display: none; }
  .cpv2-shell .bl-price{ font-size: 18px; }
  .cpv2-shell .bl-addr{ font-size: 13px; }
  .cpv2-shell .bl-kpis{
    flex-direction: row;
    gap: 14px;
    min-width: 0;
  }
}

/* ─── [v1188] Highlight subtil de la section Suivi de la vente quand
   donna a créé un dossier compta et clique "Voir le suivi de la vente"
   depuis la card. Annonce visuelle 1.8s.
*/
.cpv2-suivi-card.da-highlight-suivi{
  animation: da-suivi-pulse 1.8s ease-out;
}
@keyframes da-suivi-pulse{
  0%   { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 35%, transparent); }
  40%  { box-shadow: 0 0 0 6px color-mix(in srgb, var(--accent) 10%, transparent); }
  100% { box-shadow: 0 0 0 0 transparent; }
}
