/* === Pages Analyses (liste/comparaison + détail) === */

/* Utilitaires non globaux réutilisés ici */
.exv-two-col { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }
/* --- Barre unique : lancement + tri --- */
.exv-an-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; margin-bottom: 16px;
    background: var(--theme-bg-tertiaire); border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); padding: 12px 14px; }

/* Modulation de la note globale (remplace le select de tri) : bouton « Note centrale 50/50 » ouvrant un pop-up
   avec le curseur Qualité/Opportunité. Style bouton composite : l'ensemble = outline, le ratio « 50/50 » = fill
   (seule la partie réactive au clic a un fond plein), pour signaler visuellement la zone cliquable. */
.exv-an-weight-wrap { position: relative; display: inline-flex; }
.exv-an-weight-btn { display: inline-flex; align-items: stretch; gap: 0; padding: 0; border: 1px solid var(--cl-accent);
    border-radius: var(--border-radius-classic); background: var(--theme-bg-primaire); cursor: pointer; font-family: inherit;
    overflow: hidden; }
.exv-an-weight-lbl { display: inline-flex; align-items: center; padding: 0 10px; font-size: var(--ht-texte-09);
    color: var(--theme-texte-secondaire); white-space: nowrap; }
.exv-an-weight-ratio-anchor { position: relative; display: inline-flex; }
.exv-an-weight-ratio { display: inline-flex; align-items: center; padding: 0 11px; font-size: var(--ht-texte-09);
    font-weight: var(--wg-texte-semibold); color: var(--cl-blanc-i1); background: var(--cl-accent);
    font-variant-numeric: tabular-nums; white-space: nowrap; }
.exv-an-weight-btn:hover .exv-an-weight-ratio { filter: brightness(1.08); }
.exv-an-weight-btn[aria-expanded="true"] .exv-an-weight-ratio { filter: brightness(0.92); }

/* Pop-up centré sur la pastille « 50/50 » (pas sur l'ensemble « Note centrale 50/50 ») : ancré sur
   .exv-an-weight-ratio-anchor, positionné juste sous le bouton (même hauteur) via JS (offsetLeft). Reprend la
   maquette (2 bandeaux thème empilés, OPPORTUNITÉ en haut / QUALITÉ en bas) + curseur horizontal accent au centre. */
.exv-an-weight-pop { position: absolute; top: calc(100% + 8px); z-index: 40;
    display: flex; flex-direction: column; width: 230px; background: var(--cl-accent); border: 1px solid var(--cl-accent);
    border-radius: var(--border-radius-classic); box-shadow: 0 12px 30px var(--cl-transparent-noir-i6); cursor: default; overflow: hidden; }
.exv-an-weight-pop[hidden] { display: none; }
/* Bandeau Opportunité (texte à droite, ligne à gauche) / Qualité (texte à gauche, ligne à droite), conforme
   à la maquette. Couleurs THÈME (fond + texte/ligne), pas d'accent — inversé par rapport à la bande centrale. */
.exv-an-weight-pop-row { display: flex; align-items: center; gap: 8px; padding: 3px 14px; background: var(--theme-bg-tertiaire); }
.exv-an-weight-pop-row.opportunite { flex-direction: row-reverse; }
.exv-an-weight-pop-lbl { font-size: var(--ht-texte-07); font-weight: var(--wg-texte-semibold); color: var(--theme-texte-primaire);
    text-transform: uppercase; letter-spacing: 0.02em; white-space: nowrap; }
.exv-an-weight-pop-line { flex: 1 1 auto; height: 2px; background: var(--theme-texte-primaire); border-radius: 1px; }
/* Bande centrale du curseur : couleurs inversées par rapport aux bandeaux (fond accent, contenu blanc). */
.exv-an-weight-pop-mid { display: flex; align-items: center; padding: 20px 14px; background: var(--cl-accent); }
/* EXCEPTION NOMMÉE à l'indicateur de focus global : le rail est posé SUR `--cl-accent`,
   où un contour d'accentuation serait invisible. Le `outline: none` ci-dessous est donc
   maintenu ; ce curseur reste sans marque de focus propre — limite connue, non masquée. */
.exv-an-weight-slider { -webkit-appearance: none; appearance: none; width: 100%; height: 2px; border-radius: 1px;
    background: var(--cl-blanc-i1); cursor: pointer; outline: none; }
.exv-an-weight-slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%;
    background: var(--cl-blanc-i1); cursor: pointer; }
.exv-an-weight-slider::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; border: none;
    background: var(--cl-blanc-i1); cursor: pointer; }

/* Cellule secteur cliquable : bouton sans habillage propre, hérite du style texte de la cellule (.exv-an-sec). */
.exv-an-sec-btn { background: none; border: none; padding: 0; margin: 0; font: inherit; color: inherit;
    cursor: pointer; text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 2px; }
.exv-an-sec-btn:hover, .exv-an-sec-btn[aria-expanded="true"] { text-decoration-color: currentColor; }

/* Pop-up « Secteur » : l'habillage, l'ancrage et les fermetures viennent de sgbl_popover (.exv-pop).
   Ne reste ici que ce qui est propre au secteur — sa largeur, et ses deux blocs : les secteurs principaux
   avec leurs proportions, puis le graphique des activités concrètes (le composant de la section
   « Activité », verrouillé sur ce niveau). */
.exv-sec-pop { width: 420px; }
.exv-sec-pop-sec + .exv-sec-pop-sec { margin-top: 12px; border-top: 1px solid var(--theme-border-color); padding-top: 10px; }
.exv-sec-pop-t { font-size: var(--ht-texte-07); font-weight: var(--wg-texte-medium); color: var(--theme-texte-tertiaire);
    text-transform: uppercase; letter-spacing: 0.04em; margin: 0 0 6px; }
.exv-sec-pop-n1s { margin: 0; }
.exv-sec-pop-row { display: flex; justify-content: space-between; gap: 10px; font-size: var(--ht-texte-08); padding: 2px 0; }
.exv-sec-pop-cta { margin-top: 4px; }

/* Bouton « Générer une analyse » verrouillé (non-Pro) + infobulle au survol */
.exv-an-genwrap { position: relative; display: inline-flex; }
.exv-an-genwrap.locked { cursor: not-allowed; }
.exv-an-genwrap.locked button { pointer-events: none; opacity: 0.5; }
.exv-an-genwrap.locked:hover::after {
    content: attr(data-tip); position: absolute; top: calc(100% + 6px); left: 0; z-index: 50; white-space: nowrap;
    background: var(--theme-bg-opposite); color: var(--theme-bg-tertiaire); font-size: var(--ht-texte-07);
    padding: 4px 9px; border-radius: var(--border-radius-classic);
}

/* Section de lancement intégrée (dépliable, fermée par défaut) */
.exv-an-launch-panel { margin-bottom: 16px; }
.exv-an-launch-panel[hidden] { display: none; } /* l'attribut [hidden] prime (sinon affichage permanent) */
/* Bouton dont la section est ouverte. La classe était posée par le JS depuis l'origine et n'était
   stylée nulle part : trois boutons commandaient un panneau sans qu'aucun ne dise lequel. */
.exv-an-bar button.open { border-color: var(--cl-accent); color: var(--cl-accent); }
.exv-an-bar button.buttonstyle-accentfill.open { color: var(--cl-blanc-i1); }
.exv-an-lp-title { font-size: var(--ht-texte-115); font-weight: var(--wg-texte-semibold); margin: 0 0 4px; }
.exv-an-lp-msg { font-size: var(--ht-texte-08); margin: 12px 0 0; }
.exv-an-lp-msg.error { color: var(--cl-negatif); }

/* Mode « Poser une question » (panneau + page détail) */
.exv-an-ask-select { width: 100%; max-width: 460px; margin-bottom: 10px; }
/* Champ long : variante globale `.exv-field-long` ; la page n'en règle que la disposition. Il reste
   désactivé tant qu'aucune entreprise n'est sélectionnée. */
.exv-field-long { margin-bottom: 10px; }
.exv-an-ask-premium { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; margin: 0 0 10px; font-size: 0.92em; cursor: pointer; }
.exv-an-ask-premium input { cursor: pointer; }
.exv-an-ask-premium .exv-metric-sub { flex-basis: 100%; margin: 0; }
.exv-an-ask-premium[hidden] { display: none; }
.exv-an-ask-answer { margin-top: 14px; display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.exv-an-ask-bubble { width: 100%; box-sizing: border-box; background: var(--theme-bg-tertiaire); border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-extra); padding: 12px 14px; line-height: 1.5; }
.exv-an-ask-detail { margin: 14px 0 18px; }
.exv-an-ask-detail #an-d-ask { margin-top: 12px; max-width: 640px; }

/* Recherche de ticker + suggestions (select de propositions officielles) */
.exv-an-search { position: relative; margin: 14px 0 6px; }
.exv-an-search input { width: 100%; padding: 10px 12px; font-size: var(--ht-texte-09); font-family: inherit;
    background: var(--theme-control-fill); color: var(--theme-texte-primaire);
    border: 1px solid var(--theme-control-boundary); border-radius: var(--border-radius-classic); }
/* Focus de ce champ : plus de marque locale — l'indicateur de focus global de
   gbl_styles.css s'applique (un `outline: none` ici le supprimerait). */
.exv-an-suggest { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 10; max-height: 280px; overflow-y: auto;
    background: var(--theme-bg-tertiaire); border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic);
    box-shadow: 0 12px 30px var(--cl-transparent-noir-i6); }
.exv-an-sug { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; background: none; border: none; cursor: pointer;
    padding: 9px 12px; font-family: inherit; border-bottom: 1px solid var(--theme-border-color); }
.exv-an-sug:last-child { border-bottom: none; }
.exv-an-sug:hover { background: var(--theme-bg-quaterniaire); }
.exv-an-sug-sym { font-weight: var(--wg-texte-semibold); font-size: var(--ht-texte-09); }
.exv-an-sug-name { flex: 1 1 auto; font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.exv-an-sug-ex { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
.exv-an-sug-empty { padding: 10px 12px; font-size: var(--ht-texte-08); color: var(--theme-texte-tertiaire); }
.exv-an-selected { font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); margin: 4px 0 12px; }
/* « Lancer l'analyse » / « Confirmer » + « Consulter la dernière analyse » (entreprise déjà suivie) côte à côte. */
.exv-an-launch-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
#an-launch { margin-top: 0; }
#an-view-existing[hidden] { display: none; }

/* --- Tableau de comparaison --- */
.exv-an-table th, .exv-an-table td { vertical-align: middle; }
.exv-an-co { display: flex; align-items: center; gap: 8px; }
.exv-an-tk { font-weight: var(--wg-texte-semibold); }
.exv-an-name { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
.exv-an-sec { color: var(--theme-texte-secondaire); }
.exv-an-concl { white-space: normal; max-width: 320px; color: var(--theme-texte-secondaire); }
/* En-têtes de colonnes CLIQUABLES (tri) */
.exv-an-table thead th { cursor: default; }
.exv-an-th { cursor: pointer; user-select: none; }
/* Le texte de l'en-tête ne change JAMAIS de poids/couleur selon l'état de tri : seule l'icône réagit.
   Ainsi la largeur du libellé — et donc de la colonne — reste strictement identique dans tous les cas. */
.exv-an-thlab { display: inline-flex; align-items: center; gap: 4px; color: var(--theme-texte-secondaire); }
.exv-an-th:hover .exv-an-thlab { color: var(--theme-texte-primaire); }
/* Icône de tri : taille RÉSERVÉE fixe (14×14) que le tri soit actif ou non — aucune variation de layout.
   Neutre = couleur du texte (comme demandé, currentColor suit .exv-an-thlab) ; actif = couleur d'accentuation. */
.exv-an-sorticon { width: 14px; height: 14px; flex: 0 0 14px; display: inline-block; vertical-align: middle; color: currentColor; }
.exv-an-sorticon.active { color: var(--cl-accent); }
/* En-tête de la colonne « Note » : centré pour rester aligné avec la pastille tri-notes de chaque ligne. */
.exv-an-noteh .exv-an-thlab { justify-content: center; width: 100%; }
th.exv-an-noteh { text-align: center; }

/* Pastille TRI-NOTES à dégradé : qualité (gauche) · globale (centre, marqueur) · opportunité (droite) */
td.exv-an-notec { text-align: center; }
.exv-an-tripnote { position: relative; display: inline-flex; align-items: center; justify-content: space-between;
    width: 132px; height: 24px; padding: 0 8px; border-radius: 12px; box-sizing: border-box;
    box-shadow: inset 0 1px 2px var(--cl-transparent-noir-i2, rgba(0,0,0,0.15)); vertical-align: middle; }
.exv-an-tripnote.empty { background: var(--theme-bg-quaterniaire); }
.exv-an-tripnote-bound { color: #fff; font-size: var(--ht-texte-07); font-weight: var(--wg-texte-semibold);
    text-shadow: 0 1px 1px rgba(0,0,0,0.25); z-index: 1; font-variant-numeric: tabular-nums; }
.exv-an-tripnote-marker { position: absolute; left: 50%; transform: translateX(-50%); z-index: 2;
    display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 19px; padding: 0 7px;
    background: #fff; border-radius: 10px; font-size: var(--ht-texte-09); font-weight: var(--wg-texte-bold);
    font-variant-numeric: tabular-nums; box-shadow: 0 1px 3px rgba(0,0,0,0.22), 0 0 0 1px rgba(0,0,0,0.05); }
.exv-an-tripnote.empty .exv-an-tripnote-marker { background: var(--theme-bg-primaire); color: var(--theme-texte-tertiaire); box-shadow: none; }
td.exv-an-cap, th.exv-an-cap { white-space: nowrap; color: var(--theme-texte-secondaire); }
td.exv-an-date, th.exv-an-date { white-space: nowrap; color: var(--theme-texte-secondaire); }
.exv-an-badge { font-size: var(--ht-texte-07); padding: 1px 7px; border-radius: 999px; border: 1px solid var(--theme-border-color); color: var(--theme-texte-tertiaire); }
.exv-an-badge.system { color: var(--cl-blanc-i1); background: var(--cl-blue); border-color: var(--cl-blue); }
.exv-an-badge.ad-hoc { color: var(--cl-blanc-i1); background: var(--cl-serie-4); border-color: var(--cl-serie-4); }
.exv-an-na { color: var(--theme-texte-tertiaire); }

/* Barre de score compacte */
.exv-an-score { display: inline-flex; align-items: center; gap: 7px; }
.exv-an-score-track { width: 64px; height: 7px; border-radius: 4px; background: var(--theme-bg-quaterniaire); overflow: hidden; }
.exv-an-score-fill { display: block; height: 100%; border-radius: 4px; }
.exv-an-score-val { font-variant-numeric: tabular-nums; font-size: var(--ht-texte-08); min-width: 1.8em; text-align: right; }

/* --- Détail : en-tête --- */
.exv-an-head { background: var(--theme-bg-tertiaire); border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-extra); padding: 18px 20px; margin-bottom: 6px; }
.exv-an-head-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.exv-an-head-id { display: flex; align-items: center; gap: 12px; min-width: 0; flex: 1 1 260px; }
.exv-an-head-id .exv-logo { width: 46px; height: 46px; }
.exv-an-head-tk { font-family: 'Intertight', sans-serif; font-size: var(--ht-texte-19); font-weight: var(--wg-texte-semibold); }
.exv-an-head-name { font-size: var(--ht-texte-115); color: var(--theme-texte-secondaire); }
.exv-an-head-meta { font-size: var(--ht-texte-08); color: var(--theme-texte-tertiaire); margin-top: 2px; }
.exv-an-head-badges { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }

/* Bloc de synthèse : DEUX CADRANS DISJOINTS (notation · valorisation) puis les 6 piliers, sur DEUX
   rangées de trois — c'est ce qui fait coïncider leur hauteur avec celle des cadrans, au lieu d'un
   ruban d'une seule ligne qui laissait la moitié de la bande vide.
   Un cadran est un SVG à viewBox : il se met à l'échelle tout seul, typographie interne comprise —
   d'où l'absence ici de toute taille de police, et de point de rupture pour son contenu. */
.exv-an-synth-head { display: flex; align-items: center; gap: 24px; margin: 18px 0 4px; flex-wrap: wrap; }
/* 232 px : la MÊME largeur que `.exv-an-head-price`, deux rangées plus bas. Le cadran, la mosaïque et
   le bloc de cotation sont les trois seules colonnes de droite de l'en-tête ; une largeur commune est
   ce qui fait tomber la mosaïque exactement sur le cours qu'elle commente. Toute retouche de l'une des
   trois doit se reporter sur les deux autres — c'est un alignement, pas une coïncidence. */
.exv-an-dial { flex: 0 0 232px; max-width: 100%; display: flex; flex-direction: column; align-items: center; gap: 2px; }
.exv-an-dial-svg { display: block; width: 100%; height: auto; overflow: visible; }
/* Pastille de bande : PLEINE, sur toute la largeur du cadran — c'est la conclusion de l'objet qu'elle
   surmonte, pas une légende de plus. Fond et encre viennent du JS (`UI.darkenForWhite` sur la couleur
   de la note globale, encre blanche fixe), d'où l'absence ici de toute règle par bande.
   Rayon SOBRE et non 999 px : une capsule se lit comme une étiquette qu'on épingle, alors que ce
   bandeau conclut la colonne — il en reprend donc le rayon, comme les cartes de verdict plus bas. */
.exv-an-note-band { align-self: stretch; margin-top: 5px; padding: 5px 10px; border-radius: var(--border-radius-classic);
    font-size: var(--ht-texte-09); font-weight: var(--wg-texte-semibold); text-align: center; line-height: 1.3; }
.exv-an-dial.empty .exv-an-note-band { background: var(--theme-bg-quaterniaire); color: var(--theme-texte-tertiaire); }
.exv-an-note-flags { display: flex; flex-wrap: wrap; justify-content: center; gap: 5px; margin-top: 3px; }
.exv-an-flag { font-size: var(--ht-texte-06, 0.66rem); padding: 1px 7px; border-radius: 999px; background: var(--theme-bg-quaterniaire); color: var(--theme-texte-secondaire); }
.exv-an-dial.empty { justify-content: center; color: var(--theme-texte-tertiaire); }

/* MOSAÏQUE DE VALORISATION. Les aires sont exactes (cf. `UI.zoneMosaic`) : RIEN ici ne doit les
   retoucher — ni marge entre cellules, ni bordure portée par elles, qui rogneraient ce que le pavage
   promet. Les cloisons vivent dans un calque à part, invisible au repos (les couleurs suffisent à
   séparer) et révélé à l'état inondé, où toutes les cellules deviennent d'une seule teinte.
   Le voile de la phrase est TRANSPARENT et sans prise au pointeur : il laisse voir les cloisons
   dessous, et n'intercepte pas le survol de la cellule qui l'a fait paraître. */
.exv-an-mosaic { position: relative; flex: 0 0 232px; max-width: 100%; align-self: center;
    border-radius: var(--border-radius-classic); overflow: hidden; }
.exv-an-mz { cursor: pointer; }
.exv-an-mz-cell { transition: fill 0.12s ease; }
.exv-an-mz-pcts { transition: opacity 0.12s ease; }
/* Encre BLANCHE FIXE, comme les parts chiffrées au repos : le fond est un aplat de zone (vert sombre à
   jaune vif), et une encre qui basculerait au noir selon la zone clignoterait d'une cellule à l'autre.
   Le halo (`text-shadow`, pendant HTML du `paint-order: stroke fill` du SVG) rétablit la lisibilité sur
   le jaune sans retoucher la couleur de la cellule, qui est la donnée. */
.exv-an-mz-flood { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center;
    justify-content: center; gap: 2px; padding: 6px 12px; text-align: center; pointer-events: none;
    color: #fff; text-shadow: 0 1px 3px rgba(0, 0, 0, .55), 0 0 8px rgba(0, 0, 0, .35); }
.exv-an-mz-flood[hidden] { display: none; }
.exv-an-mz-msg { margin: 0; font-size: var(--ht-texte-08); line-height: 1.25; }
.exv-an-mz-big { font-family: 'Intertight', sans-serif; font-size: var(--ht-texte-19); font-weight: var(--wg-texte-semibold); line-height: 1.1; }
.exv-an-note-line { font-size: var(--ht-texte-09); margin-bottom: 10px; }
.exv-an-synth-head .exv-an-gauges { flex: 1 1 340px; margin: 0; gap: 16px 26px;
    grid-template-columns: repeat(3, minmax(0, 1fr)); align-content: center; }

/* Verdicts + cotation : deux colonnes de même hauteur. À gauche les deux jugements empilés, à droite le
   cours qui les conditionne. Nom PROPRE : `.exv-an-concl` est déjà pris par le tableau de comparaison,
   avec un `max-width: 320px` qui écrasait silencieusement cette rangée. */
.exv-an-verdict { display: flex; align-items: stretch; gap: 12px; margin-top: 16px; flex-wrap: wrap; }
.exv-an-concl-cards { flex: 1 1 420px; display: grid; grid-template-columns: 1fr; gap: 12px; align-content: stretch; }
.exv-an-head-price:empty { display: none; }
.exv-an-head-price { flex: 0 0 232px; display: flex; flex-direction: column; justify-content: center; align-items: flex-end;
    gap: 2px; background: var(--theme-bg-primaire); border: 1px solid var(--theme-border-color);
    border-radius: var(--border-radius-classic); padding: 12px 16px; }
.exv-an-price-main { display: flex; align-items: baseline; gap: 8px; }
.exv-an-price-val { font-family: 'Intertight', sans-serif; font-size: var(--ht-texte-19); font-weight: var(--wg-texte-semibold); font-variant-numeric: tabular-nums; line-height: 1.1; }
.exv-an-price-delta { font-size: var(--ht-texte-09); font-weight: var(--wg-texte-semibold); font-variant-numeric: tabular-nums; }
.exv-an-price-delta.pos { color: var(--cl-positif); }
.exv-an-price-delta.neg { color: var(--cl-negatif); }
.exv-an-price-sub:empty { display: none; }
.exv-an-price-cap { font-size: var(--ht-texte-08); color: var(--theme-texte-tertiaire); margin-top: 4px; }
.exv-an-price-cap strong { color: var(--theme-texte-secondaire); font-weight: var(--wg-texte-semibold); }

/* Points de rupture de l'en-tête — deux seuils de la norme (800 px, 640 px), aucun propre à la page
   (norme : `_direction/FD3_applications/exavoris/design/structures-de-page.md`).
   À 800 : les DEUX OBJETS GRAPHIQUES restent côte à côte et les jauges passent dessous. C'est le seul
   ordre qui n'ouvre pas un vide à droite du cadran ; il demande un `order`, sans conséquence ici — ni
   les jauges ni la mosaïque ne contiennent d'élément focusable, la navigation au clavier ne peut donc
   pas se désaccorder de la lecture.
   À 640 : plus rien ne tient côte à côte — tout s'empile, graphiques centrés, jauges sur 2 colonnes. */
@media (max-width: 800px) {
  .exv-an-synth-head { justify-content: center; }
  .exv-an-synth-head .exv-an-gauges { flex: 1 1 100%; order: 3; }
  .exv-an-head-price { flex: 1 1 100%; align-items: flex-start; }
}
@media (max-width: 640px) {
  .exv-an-head-badges { flex: 1 1 100%; flex-direction: row; align-items: center; flex-wrap: wrap; }
  .exv-an-dial, .exv-an-mosaic { flex: 1 1 100%; max-width: 240px; margin-inline: auto; }
  .exv-an-synth-head .exv-an-gauges { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .exv-an-price-val { font-size: var(--ht-texte-13); }
}


.exv-an-gauges { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 14px; margin: 18px 0 4px; }
.exv-an-gauge-k { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); text-transform: uppercase; letter-spacing: 0.03em; }
.exv-an-gauge-bar { height: 8px; border-radius: 4px; background: var(--theme-bg-quaterniaire); overflow: hidden; margin: 5px 0; }
.exv-an-gauge-fill { display: block; height: 100%; border-radius: 4px; }
.exv-an-gauge-v { font-family: 'Intertight', sans-serif; font-size: var(--ht-texte-115); font-weight: var(--wg-texte-semibold); }

/* Les deux jugements sont de MÊME RANG : aucun des deux n'est accentué. La carte « Attractivité »
   portait `--cl-accent` (rouge vif) en bordure, ce qui la faisait lire comme une alerte alors qu'elle
   énonce un constat neutre — et ce rouge démentait le verdict quand celui-ci était favorable. */
.exv-an-concl-card { background: var(--theme-bg-primaire); border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); padding: 12px 14px; }
.exv-an-concl-card .k { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); text-transform: uppercase; letter-spacing: 0.03em; }
.exv-an-concl-card .v { font-size: var(--ht-texte-10); font-weight: var(--wg-texte-medium); margin-top: 3px; }

/* --- Détail : onglets + sections --- */
.exv-an-tabs { display: flex; flex-wrap: wrap; gap: 4px; margin: 16px 0; border-bottom: 1px solid var(--theme-border-color); }
.exv-an-tab { background: none; border: none; cursor: pointer; font-family: inherit; font-size: var(--ht-texte-09);
    color: var(--theme-texte-secondaire); padding: 8px 14px; border-bottom: 2px solid transparent; }
.exv-an-tab:hover { color: var(--theme-texte-primaire); }
.exv-an-tab.active { color: var(--theme-texte-primaire); border-bottom-color: var(--cl-accent); font-weight: var(--wg-texte-medium); }
/* « Poser une question » : bouton (pas un onglet), poussé à droite de la barre, centré verticalement. */
.exv-an-tabs-spacer { flex: 1 1 auto; min-width: 12px; }
.exv-an-ask-tab { align-self: center; margin-bottom: 4px; }
.exv-an-ask-tab.active { border-color: var(--cl-accent); color: var(--cl-accent); }
.exv-an-section { margin-bottom: 22px; }
/* Conteneur commun aux deux graphiques de l'onglet « Activité » : même cadre, même respiration —
   le lecteur voit d'un coup d'œil que le tracé appartient au titre qui le précède. */
.exv-an-graph { padding: 14px 16px 10px; }
.exv-an-text { font-size: var(--ht-texte-09); color: var(--theme-texte-secondaire); line-height: 1.55; }

/* Paires clé/valeur génériques */
.exv-an-kv { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 6px 22px; }
.exv-an-kv-row { display: flex; justify-content: space-between; gap: 12px; padding: 5px 0; border-bottom: 1px dotted var(--theme-border-color); font-size: var(--ht-texte-08); }
.exv-an-kv-k { color: var(--theme-texte-tertiaire); }
.exv-an-kv-v { color: var(--theme-texte-primaire); text-align: right; }
.exv-an-ul { margin: 4px 0 0 18px; font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); line-height: 1.5; }

/* Familles de scores (barres) */
.exv-an-fam { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 8px 22px; }
.exv-an-fam-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.exv-an-fam-k { font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); }

/* Thèses */
.exv-an-theses { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px; }
.exv-an-thesis-h { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.exv-an-thesis-conf { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
/* Accent de bord = lien visuel avec les scénarios (haussier vert / central neutre / baissier rouge). */
.exv-an-thesis { border-left: 3px solid var(--theme-border-color); }
.exv-an-thesis.t-pos { border-left-color: var(--cl-positif); }
.exv-an-thesis.t-neu { border-left-color: var(--theme-texte-secondaire); }
.exv-an-thesis.t-neg { border-left-color: var(--cl-negatif); }
/* Métrique de thèse (style standard : valeur et dénominateur de même taille) */
.exv-an-thesis-metric { font-size: var(--ht-texte-08); color: var(--theme-texte-tertiaire); white-space: nowrap; }
.exv-an-thesis-metric b { font-weight: var(--wg-texte-semibold); color: var(--theme-texte-primaire); font-variant-numeric: tabular-nums; }
.exv-an-thesis-metric.pos b { color: var(--cl-positif); }
.exv-an-thesis-metric.neg b { color: var(--cl-negatif); }
/* Note + définitions (probabilité / solidité / confiance / attractivité) */
.exv-an-theses-note { margin-bottom: 16px; }
.exv-an-defs { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 4px 18px; margin-top: 8px; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
.exv-an-defs b { color: var(--theme-texte-secondaire); }

/* Zones de prix */
.exv-an-zones-wrap { margin-top: 6px; }
.exv-an-zones { position: relative; display: flex; height: 22px; border-radius: var(--border-radius-classic); overflow: visible; background: var(--theme-bg-quaterniaire); }
.exv-an-zone { height: 100%; }
.exv-an-zone:first-child { border-radius: var(--border-radius-classic) 0 0 var(--border-radius-classic); }
.exv-an-zone:last-child { border-radius: 0 var(--border-radius-classic) var(--border-radius-classic) 0; }
.exv-an-price-marker { position: absolute; top: -4px; bottom: -4px; width: 2px; background: var(--theme-texte-primaire); }
.exv-an-price-marker span { position: absolute; top: -16px; left: 50%; transform: translateX(-50%); font-size: var(--ht-texte-07); white-space: nowrap; }
.exv-an-zones-legend { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
.exv-an-zlg { display: inline-flex; align-items: center; gap: 5px; }
.exv-an-zlg .sw { width: 10px; height: 10px; border-radius: 2px; display: inline-block; }
.exv-an-zlg .sw.fv { width: 0; height: 12px; border-radius: 0; border-left: 2px dashed var(--theme-texte-secondaire); }
.exv-an-zlg-hint { color: var(--theme-texte-tertiaire); font-style: italic; }
.exv-val-transleg { font-style: italic; }

/* ---------- Valorisation réformée (badge méthode, incertitude, fourchette, contrôles) ---------- */
.exv-val-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.exv-val-basis { font-size: var(--ht-texte-08); font-weight: var(--wg-texte-medium); border: 1px solid var(--cl-accent); color: var(--cl-accent); border-radius: 999px; padding: 2px 11px; }
.exv-val-unc { font-size: var(--ht-texte-07); border-radius: 999px; padding: 2px 10px; background: var(--theme-bg-quaterniaire); }
.exv-val-unc.pos { color: var(--cl-positif); } .exv-val-unc.neu { color: var(--theme-texte-secondaire); } .exv-val-unc.neg { color: var(--cl-negatif); }
.exv-val-fv { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; margin-bottom: 12px; }
.exv-val-fv-item { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); padding: 8px 12px; background: var(--theme-bg-tertiaire); }
.exv-val-fv-item .k { display: block; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); text-transform: uppercase; letter-spacing: 0.03em; }
.exv-val-fv-item .v { display: block; font-family: 'Intertight', sans-serif; font-size: var(--ht-texte-13); font-weight: var(--wg-texte-semibold); margin-top: 2px; }
.exv-val-fv-item.central { border-color: var(--cl-accent); }
.exv-val-fv-item.central .v { color: var(--cl-accent); font-weight: var(--wg-texte-bold, 700); }
.exv-val-pos { margin-top: 10px; }
.exv-val-div { color: var(--cl-negatif); font-size: var(--ht-texte-07); }
.exv-val-conc { color: var(--cl-positif); font-size: var(--ht-texte-07); }
.exv-val-warn { margin-top: 10px; color: var(--cl-negatif); border-left: 3px solid var(--cl-negatif); padding-left: 10px; }

/* Incertitude — explication décomposée (résumé + facteurs nommés en barres d'intensité) */
.exv-val-uncsum { margin-top: 12px; }
.exv-val-drivers { margin-top: 6px; display: flex; flex-direction: column; gap: 6px; }
.exv-val-drv { display: grid; grid-template-columns: minmax(140px, 1.2fr) 70px minmax(0, 2fr); align-items: center; gap: 10px; }
.exv-val-drv-lbl { font-size: var(--ht-texte-08); }
.exv-val-drv-bar { height: 6px; border-radius: 999px; background: var(--theme-bg-quaterniaire); overflow: hidden; }
.exv-val-drv-bar > span { display: block; height: 100%; background: var(--theme-texte-secondaire); }
.exv-val-drv-det { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
@media (max-width: 640px) {
  .exv-val-drv { grid-template-columns: 1fr 60px; }
  .exv-val-drv-det { grid-column: 1 / -1; }
}

/* Synthèse : barre de zones AMÉLIORÉE (domaine borné, repères de seuils + marqueurs juste valeur/prix) */
.exv-an-valbar { margin-top: 10px; }
.exv-an-zones.tall { height: 26px; border-radius: var(--border-radius-classic); }
.exv-an-zseg { position: absolute; top: 0; bottom: 0; }
.exv-an-thr { position: absolute; top: 0; bottom: 0; width: 0; border-left: 1px dotted rgba(0, 0, 0, 0.5); pointer-events: none; }

/* Barre de valorisation : bascule regroupé / dissocié */
.exv-val-bar2 { margin-top: 10px; }
.exv-val-bar2-head { display: flex; justify-content: flex-end; margin-bottom: 6px; }
.exv-val-modes { display: inline-flex; border: 1px solid var(--theme-border-color); border-radius: 999px; overflow: hidden; }
.exv-val-toggle { background: none; border: 0; font-family: inherit; font-size: var(--ht-texte-07); color: var(--theme-texte-secondaire); padding: 3px 12px; cursor: pointer; }
.exv-val-toggle.active { background: var(--cl-accent); color: var(--cl-blanc-i1); }
.exv-val-bar2.mode-grouped .exv-val-split { display: none; }
.exv-val-bar2.mode-split .exv-val-grouped { display: none; }
/* Vue dissociée : 4 lignes (un intervalle par niveau) + repères JV/cours traversant les 4 */
.exv-val-splitwrap { position: relative; padding: 4px 0; }
.exv-val-splitrow { display: grid; grid-template-columns: 116px 1fr; align-items: center; gap: 8px; height: 16px; margin: 4px 0; }
.exv-val-splitlbl { display: inline-flex; align-items: center; gap: 5px; font-size: var(--ht-texte-07); color: var(--theme-texte-secondaire); white-space: nowrap; }
.exv-val-splitlbl .sw { width: 9px; height: 9px; border-radius: 2px; flex: none; }
.exv-val-splittrack { position: relative; height: 12px; background: var(--theme-bg-quaterniaire); border-radius: 3px; }
.exv-val-splitseg { position: absolute; top: 0; bottom: 0; border-radius: 3px; }
.exv-val-voverlay { position: absolute; top: 0; bottom: 0; left: 124px; right: 0; pointer-events: none; }
.exv-val-vline { position: absolute; top: 0; bottom: 0; width: 0; }
.exv-val-vline.fv { border-left: 2px dashed var(--theme-texte-secondaire); }
.exv-val-vline.price { border-left: 2px solid var(--theme-texte-primaire); }
.exv-val-vline.price span { position: absolute; top: -14px; left: 50%; transform: translateX(-50%); font-size: var(--ht-texte-07); white-space: nowrap; color: var(--theme-texte-primaire); }
.exv-val-vline.thr { border-left: 1px dotted var(--theme-texte-tertiaire); opacity: 0.8; }
.exv-an-fv-marker { position: absolute; top: -3px; bottom: -3px; width: 0; border-left: 2px dashed var(--theme-texte-secondaire); pointer-events: none; }
.exv-an-vticks { position: relative; height: 30px; margin-top: 7px; }
.exv-an-vtick { position: absolute; transform: translateX(-50%); text-align: center; line-height: 1.15; color: var(--theme-texte-tertiaire); font-size: var(--ht-texte-07); }
.exv-an-vtick::before { content: ''; position: absolute; top: -7px; left: 50%; width: 1px; height: 5px; background: var(--theme-texte-tertiaire); }
.exv-an-vtick span { display: block; font-weight: var(--wg-texte-semibold); color: var(--theme-texte-secondaire); }
.exv-an-vtick em { display: block; font-style: normal; font-size: 0.85em; white-space: nowrap; }

/* Valorisation : courbe du cours sur 2 ans (canvas ExvChart) + paliers en hlines */
.exv-an-pricechart { position: relative; height: 340px; margin-top: 8px; }
.exv-an-pricechart canvas { width: 100%; height: 100%; display: block; }
.exv-an-chart-status { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; text-align: center; }

/* Conditions de réanalyse */
.exv-an-conds { list-style: none; padding: 0; font-size: var(--ht-texte-08); }
.exv-an-conds li { padding: 8px 0; border-bottom: 1px solid var(--theme-border-color); color: var(--theme-texte-secondaire); }
.exv-an-cond-kind { display: inline-block; font-size: var(--ht-texte-07); color: var(--cl-blanc-i1); background: var(--cl-blue); border-radius: 999px; padding: 1px 9px; margin-right: 8px; }

/* ---------- Analyse technique (onglet Technique + bandeau Synthèse) ---------- */
.exv-tech-narr { font-size: var(--ht-texte-09); line-height: 1.55; color: var(--theme-texte-primaire); margin: 0 0 12px; }
.exv-tech-timeline { display: flex; gap: 4px; margin: 4px 0 8px; flex-wrap: wrap; }
.exv-tech-tl { background: none; border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); cursor: pointer; font-family: inherit; font-size: var(--ht-texte-07); color: var(--theme-texte-secondaire); padding: 3px 11px; }
.exv-tech-tl:hover { color: var(--theme-texte-primaire); }
.exv-tech-tl.active { border-color: var(--cl-accent); color: var(--cl-accent); font-weight: var(--wg-texte-medium); }
.exv-tech-densleg { gap: 2px; }
.exv-tech-densleg .sw { width: 13px; height: 10px; border-radius: 0; }
.exv-tech-badge { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin: 0 0 14px; padding: 9px 13px; border-radius: var(--border-radius-classic); background: var(--theme-bg-tertiaire); border-left: 3px solid var(--theme-border-color); }
.exv-tech-opp { padding: 11px 14px; border-radius: var(--border-radius-classic); background: var(--theme-bg-tertiaire); border-left: 3px solid var(--theme-border-color); margin-bottom: 12px; }
.exv-tech-badge.pos, .exv-tech-opp.pos { border-left-color: var(--cl-positif); }
.exv-tech-badge.neg, .exv-tech-opp.neg { border-left-color: var(--cl-negatif); }
.exv-tech-conf, .exv-tech-opp + .exv-metric-sub { margin-bottom: 14px; }
.exv-tech-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px; margin-bottom: 8px; }
.exv-tech-card { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-extra); padding: 12px 14px; }
.exv-tech-card-h { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; font-weight: var(--wg-texte-semibold); margin-bottom: 4px; }
.exv-tech-verdict { font-size: var(--ht-texte-08); font-weight: var(--wg-texte-semibold); }
.exv-tech-verdict.pos { color: var(--cl-positif); }
.exv-tech-verdict.neg { color: var(--cl-negatif); }
.exv-tech-verdict.neu { color: var(--theme-texte-secondaire); }
.exv-tech-entry { margin: 8px 0 6px; font-size: var(--ht-texte-08); }
.exv-tech-lvls { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: var(--ht-texte-07); color: var(--theme-texte-secondaire); margin-bottom: 6px; }
.exv-tech-hyp-list { display: flex; flex-direction: column; gap: 8px; }
.exv-tech-hyp { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; padding: 8px 0; border-bottom: 1px solid var(--theme-border-color); }
.exv-tech-hyp-st { font-size: var(--ht-texte-07); border-radius: 999px; padding: 1px 9px; background: var(--theme-bg-quaterniaire); color: var(--theme-texte-secondaire); white-space: nowrap; }
.exv-tech-hyp.confirmed .exv-tech-hyp-st { color: var(--cl-positif); }
.exv-tech-hyp.invalidated .exv-tech-hyp-st, .exv-tech-hyp.expired .exv-tech-hyp-st { color: var(--cl-negatif); }
.exv-tech-hyp-th { flex: 1 1 240px; font-size: var(--ht-texte-08); }

/* ---------- Accordéon (détail replié) ---------- */
.exv-an-acc { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); background: var(--theme-bg-tertiaire); }
.exv-an-acc-sum { cursor: pointer; padding: 11px 14px; font-size: var(--ht-texte-09); font-weight: var(--wg-texte-medium); color: var(--theme-texte-secondaire); list-style: none; display: flex; align-items: center; gap: 8px; }
.exv-an-acc-sum::-webkit-details-marker { display: none; }
.exv-an-acc-sum::before { content: '▸'; color: var(--theme-texte-tertiaire); font-size: 0.85em; transition: transform 0.15s ease; }
.exv-an-acc[open] > .exv-an-acc-sum::before { transform: rotate(90deg); }
.exv-an-acc-sum:hover { color: var(--theme-texte-primaire); }
.exv-an-acc-body { padding: 4px 14px 14px; border-top: 1px solid var(--theme-border-color); }
.exv-an-note-expl { margin-top: 12px; font-size: var(--ht-texte-08); color: var(--theme-texte-tertiaire); }

/* ---------- Synthèse : lecture structurée (points forts / zones d'ombre / objectifs / conclusion) ---------- */
.exv-narr-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; margin-bottom: 16px; }
.exv-narr-card { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-extra); padding: 13px 15px; background: var(--theme-bg-tertiaire); border-top: 3px solid var(--theme-border-color); }
.exv-narr-card h3 { margin: 0 0 8px; font-size: var(--ht-texte-10); font-weight: var(--wg-texte-semibold); }
.exv-narr-card .exv-an-ul { margin-left: 16px; }
.exv-narr-card.pos { border-top-color: var(--cl-positif); }
.exv-narr-card.neg { border-top-color: var(--cl-negatif); }
.exv-narr-card.obj { border-top-color: var(--cl-accent); }
.exv-narr-concl { border: 1px solid var(--theme-border-color); border-left: 3px solid var(--theme-texte-secondaire); border-radius: var(--border-radius-classic); padding: 12px 15px; background: var(--theme-bg-primaire); }
.exv-narr-concl h3 { margin: 0 0 6px; font-size: var(--ht-texte-09); text-transform: uppercase; letter-spacing: 0.03em; color: var(--theme-texte-tertiaire); }

/* ---------- Onglet Scoring (présentation différenciée par dimension) ---------- */
.exv-sc { display: flex; flex-direction: column; gap: 16px; }
.exv-sc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }
.exv-sc-card { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-extra); padding: 14px 16px; background: var(--theme-bg-tertiaire); }
.exv-sc-card-h { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.exv-sc-card-h h3 { margin: 0; font-size: var(--ht-texte-10); font-weight: var(--wg-texte-semibold); }
.exv-sc-head-score { font-family: 'Intertight', sans-serif; font-size: var(--ht-texte-16); font-weight: var(--wg-texte-bold, 700); white-space: nowrap; }
.exv-sc-head-score em { font-style: normal; font-size: var(--ht-texte-07); font-weight: var(--wg-texte-regular); color: var(--theme-texte-tertiaire); margin-left: 1px; }
.exv-sc-head-score.pos { color: var(--cl-positif); }
.exv-sc-head-score.neg { color: var(--cl-negatif); }
.exv-sc-head-score.neu { color: var(--theme-texte-secondaire); }
.exv-sc-sub { margin: 3px 0 12px; }

/* Lignes barres étiquetées */
.exv-sc-row { display: flex; align-items: center; gap: 10px; margin: 7px 0; }
.exv-sc-row-k { flex: 0 0 42%; font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); }
.exv-sc-row-track { flex: 1 1 auto; height: 8px; border-radius: 4px; background: var(--theme-bg-quaterniaire); overflow: hidden; }
.exv-sc-row-fill { display: block; height: 100%; border-radius: 4px; }
.exv-sc-row-v { flex: 0 0 auto; font-variant-numeric: tabular-nums; font-size: var(--ht-texte-08); min-width: 2em; text-align: right; color: var(--theme-texte-primaire); }

/* Moat — carte phare */
.exv-sc-moat { border-color: var(--cl-accent); }
.exv-sc-moat-head { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
/* Déclencheur du pop-up « avantage global » : un <button>, donc remis à zéro (un bouton hérite d'une
   fonte, d'une bordure et d'un alignement de texte propres au navigateur). */
.exv-sc-moat-score { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 108px; padding: 10px 16px; border-radius: var(--border-radius-extra); border: 1px solid var(--theme-border-color); background: var(--theme-bg-primaire); line-height: 1; font: inherit; color: inherit; cursor: pointer; }
.exv-sc-moat-score:hover { border-color: var(--cl-accent); }
.exv-sc-moat-score .exv-sc-moat-n { font-family: 'Intertight', sans-serif; font-size: 2.4rem; font-weight: var(--wg-texte-bold, 700); }
.exv-sc-moat-score .exv-sc-moat-d { font-size: var(--ht-texte-08); color: var(--theme-texte-tertiaire); }
.exv-sc-moat-score .exv-sc-moat-lbl { margin-top: 6px; font-size: var(--ht-texte-07); text-transform: uppercase; letter-spacing: 0.04em; color: var(--theme-texte-tertiaire); }
.exv-sc-moat-score.pos { border-color: var(--cl-positif); } .exv-sc-moat-score.pos .exv-sc-moat-n { color: var(--cl-positif); }
.exv-sc-moat-score.neg { border-color: var(--cl-negatif); } .exv-sc-moat-score.neg .exv-sc-moat-n { color: var(--cl-negatif); }
.exv-sc-moat-intro { flex: 1 1 240px; }
.exv-sc-moat-intro h3 { margin: 0 0 4px; font-size: var(--ht-texte-115); font-weight: var(--wg-texte-semibold); }
.exv-sc-srcs-h { margin: 16px 0 8px; font-size: var(--ht-texte-07); text-transform: uppercase; letter-spacing: 0.04em; color: var(--theme-texte-tertiaire); }

/* ---------- La JAUGE de l'avantage concurrentiel (un seul SVG) ----------
   Trois faces, UN objet : le segment, le trapèze de liaison, la cellule du nom. Découpées en éléments
   distincts, chacune aurait sa propre cible de clic et l'utilisateur sélectionnerait « le pourcentage »
   ou « le nom » comme deux choses ; ici c'est un `<g>`, donc un seul geste et un contour d'un seul tracé.
   Le SVG s'étire en largeur (`preserveAspectRatio: none`) : tous les contours portent
   `vector-effect: non-scaling-stroke`, sans quoi l'étirement les épaissirait dans un seul sens. */
.exv-sc-gauge-wrap { position: relative; }
.exv-sc-gauge { display: block; width: 100%; height: 81px; overflow: visible; }
.exv-mg-track { fill: var(--theme-bg-quaterniaire); }

/* `outline: none` inconditionnel, pas seulement sur `:focus-visible` : un `<g>` avec `tabindex` reçoit
   le focus AU CLIC sur certains navigateurs (Safari, notamment), qui dessinent alors leur rectangle de
   focus NATIF autour de l'élément entier — un encadrement non demandé, visible dès le premier clic et
   qui n'a rien à voir avec `.exv-mg-outline`. Le remplacement (contour + hachures propres à la sélection)
   est déjà porté par `.on` et `:focus-visible`, qui restent la seule marque de focus voulue au clavier. */
.exv-mg-src { cursor: pointer; outline: none; }
.exv-mg-seg { stroke: var(--theme-bg-tertiaire); stroke-width: 1; transition: filter 0.12s ease; }
.exv-mg-cell { fill: var(--theme-bg-tertiaire); stroke: var(--theme-border-color); stroke-width: 1; }
.exv-mg-trap { transition: opacity 0.12s ease; }

/* LES TEXTES SONT EN HTML, par-dessus le SVG. `preserveAspectRatio: none` étire le dessin à la largeur
   de la carte — ce qui permet la barre pleine largeur à hauteur fixe — mais étirerait aussi les lettres,
   d'un facteur dépendant de la fenêtre. Ancrés en POURCENTAGE, ils restent solidaires du dessin sans en
   subir la déformation ; `pointer-events: none` fait que le clic les traverse et atteint le <g> du SVG,
   si bien que la cible reste UNIQUE. */
.exv-mg-texts { position: absolute; inset: 0; pointer-events: none; }

/* Copie flottante du contour sélectionné, superposée APRÈS le texte : le svg principal est peint SOUS
   `.exv-mg-texts` (ses fonds opaques — segment, cellule — doivent rester sous le texte), donc son propre
   `.exv-mg-outline` disparaît partiellement là où il longe le `%`. Celle-ci restaure un tracé continu. */
.exv-mg-outline-top { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.exv-mg-outline-top .exv-mg-outline { fill: none; stroke: var(--theme-texte-primaire); stroke-width: 1.5; }
.exv-mg-texts > span { position: absolute; display: block; text-align: center; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis; }
.exv-mg-t-val { top: 0; height: 30px; line-height: 30px; transform: translateX(-50%);
    font-size: var(--ht-texte-08); font-weight: var(--wg-texte-semibold); color: var(--cl-blanc-i1);
    text-shadow: 0 1px 2px var(--cl-transparent-noir-i6); }
.exv-mg-t-name { top: 51px; height: 30px; line-height: 30px; padding: 0 6px;
    font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); }
.exv-mg-t-name.dom { color: var(--theme-texte-primaire); font-weight: var(--wg-texte-medium); }
.exv-mg-t-name em { font-style: normal; font-size: var(--ht-texte-06, 0.66rem); color: var(--cl-accent); }

/* Les hachures et le contour n'existent qu'à la SÉLECTION : au repos, rien ne doit distinguer une
   source d'une autre autrement que par sa couleur et sa largeur. */
.exv-mg-hatch { display: none; }
.exv-mg-hatch line { stroke: var(--theme-border-color); stroke-width: 1; }
.exv-mg-outline { fill: none; stroke: none; stroke-width: 1.5; }

.exv-mg-src:hover .exv-mg-seg { filter: brightness(1.08); }
.exv-mg-src:hover .exv-mg-cell { fill: var(--theme-bg-primaire); }

.exv-mg-src.on .exv-mg-hatch { display: block; }
.exv-mg-src.on .exv-mg-outline { stroke: var(--theme-texte-primaire); }
.exv-mg-src.on .exv-mg-trap { opacity: 1; }
.exv-mg-src:not(.on) .exv-mg-trap { opacity: 0.72; }
.exv-mg-src.on .exv-mg-cell { fill: var(--theme-bg-primaire); }
.exv-mg-src:focus-visible { outline: none; }
.exv-mg-src:focus-visible .exv-mg-outline { stroke: var(--theme-texte-primaire); stroke-dasharray: 4 3; }
/* Miroir manuel : `.exv-mg-outline-top` vit hors du <svg> du `<g>` focusé, un sélecteur CSS ne peut pas
   l'atteindre depuis `:focus-visible` — `paint()` y pose `.kbd` à la main quand c'est le cas. */
.exv-mg-outline-top .exv-mg-outline.kbd { stroke-dasharray: 4 3; }

/* Sous ce seuil, cinq cellules ne tiennent plus un nom : la jauge se replie en liste, chaque source
   devenant une ligne « pastille + nom + intensité ». La correspondance redevient chromatique, faute de
   pouvoir rester graphique. */
.exv-sc-gauge-list { display: none; }
@media (max-width: 620px) {
    .exv-sc-gauge { display: none; }
    .exv-sc-gauge-list { display: grid; grid-auto-flow: row; border: 1px solid var(--theme-border-color);
        border-radius: var(--border-radius-classic); overflow: hidden; }
    .exv-sc-gl-item { display: flex; align-items: center; gap: 9px; padding: 8px 10px; width: 100%;
        background: none; border: none; font: inherit; font-size: var(--ht-texte-08);
        color: var(--theme-texte-secondaire); text-align: left; cursor: pointer; }
    .exv-sc-gl-item + .exv-sc-gl-item { border-top: 1px solid var(--theme-border-color); }
    .exv-sc-gl-item[aria-expanded="true"] { background: var(--theme-bg-primaire); }
    .exv-sc-gl-sw { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 2px; }
    .exv-sc-gl-k { flex: 1 1 auto; min-width: 0; }
    .exv-sc-gl-item.dom .exv-sc-gl-k { color: var(--theme-texte-primaire); font-weight: var(--wg-texte-medium); }
    .exv-sc-gl-v { flex: 0 0 auto; font-variant-numeric: tabular-nums; font-weight: var(--wg-texte-semibold);
        color: var(--theme-texte-primaire); }
}

/* Pop-up d'explication d'un type d'avantage (habillage commun : sgbl_popover). */
.exv-moat-pop { width: 360px; }
.exv-moat-pop-h { margin: 0 0 6px; font-size: var(--ht-texte-1); font-weight: var(--wg-texte-semibold); }
.exv-moat-pop-d { margin: 0; font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); }
.exv-moat-pop-sec { margin-top: 12px; border-top: 1px solid var(--theme-border-color); padding-top: 10px; }
.exv-moat-pop-t { font-size: var(--ht-texte-07); font-weight: var(--wg-texte-medium); color: var(--theme-texte-tertiaire); text-transform: uppercase; letter-spacing: 0.04em; margin: 0 0 6px; }
.exv-moat-pop-v { margin: 0; font-size: var(--ht-texte-115); font-weight: var(--wg-texte-semibold); font-variant-numeric: tabular-nums; }
.exv-moat-pop-u { font-size: var(--ht-texte-08); font-weight: var(--wg-texte-regular); color: var(--theme-texte-tertiaire); }
.exv-moat-pop-band { display: flex; gap: 10px; font-size: var(--ht-texte-08); padding: 2px 0; color: var(--theme-texte-secondaire); }
.exv-moat-pop-r { flex: 0 0 3.2em; font-variant-numeric: tabular-nums; font-weight: var(--wg-texte-semibold); color: var(--theme-texte-primaire); }

/* ---------- Onglet Couches (refonte : accordéons ordonnés, une couche = un panneau repliable) ---------- */
.exv-cl-acc-list { display: flex; flex-direction: column; gap: 10px; }
.exv-cl-acc { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-extra); background: var(--theme-bg-tertiaire); }
.exv-cl-acc-head { display: flex; align-items: center; gap: 12px; cursor: pointer; padding: 12px 16px; list-style: none; }
.exv-cl-acc-head::-webkit-details-marker { display: none; }
.exv-cl-acc-head::before { content: '▸'; flex: 0 0 auto; color: var(--theme-texte-tertiaire); font-size: 0.8em; transition: transform 0.15s ease; }
.exv-cl-acc[open] > .exv-cl-acc-head::before { transform: rotate(90deg); }
.exv-cl-acc-head:hover { background: var(--theme-bg-quaterniaire); border-radius: var(--border-radius-extra); }
.exv-cl-acc-title { flex: 1 1 auto; font-size: var(--ht-texte-115); font-weight: var(--wg-texte-semibold); position: relative; padding-left: 11px; }
.exv-cl-acc-title::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 3px; height: 1em; border-radius: 2px; background: var(--cl-accent); }
.exv-cl-acc-body { padding: 8px 16px 16px 39px; font-size: var(--ht-texte-09); border-top: 1px solid var(--theme-border-color); }
.exv-cl-acc-body .exv-an-text { margin: 0; max-width: 78ch; }
.exv-cl-acc-body.split { display: flex; gap: 28px; flex-wrap: wrap; align-items: flex-start; }
.exv-cl-acc-main { flex: 1 1 360px; min-width: 0; }
.exv-cl-acc-aside { flex: 1 1 240px; min-width: 0; }
.exv-cl-aside-h { font-size: var(--ht-texte-07); text-transform: uppercase; letter-spacing: 0.04em; color: var(--theme-texte-tertiaire); margin-bottom: 6px; }

/* Étiquette d'attribut (cycle / maturité / récurrence…) */
.exv-cl-tag { display: inline-flex; align-items: baseline; gap: 6px; font-size: var(--ht-texte-07); border: 1px solid var(--theme-border-color); border-radius: 999px; padding: 2px 10px; background: var(--theme-bg-primaire); }
.exv-cl-tag .k { color: var(--theme-texte-tertiaire); text-transform: uppercase; letter-spacing: 0.03em; }
.exv-cl-tag .v { color: var(--theme-texte-primaire); font-weight: var(--wg-texte-medium); }
.exv-cl-mut { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); border: 1px dashed var(--theme-border-color); border-radius: 999px; padding: 1px 9px; }

/* Pastille de score (juridiction, moat) — style STANDARD : valeur et dénominateur de même taille. */
.exv-cl-score { font-size: var(--ht-texte-08); font-weight: var(--wg-texte-medium); white-space: nowrap; border-radius: 999px; padding: 3px 11px; background: var(--theme-bg-primaire); border: 1px solid var(--theme-border-color); color: var(--theme-texte-secondaire); }
.exv-cl-score b { font-weight: var(--wg-texte-semibold); font-variant-numeric: tabular-nums; }
.exv-cl-score.pos { color: var(--cl-positif); border-color: color-mix(in srgb, var(--cl-positif) 45%, transparent); }
.exv-cl-score.neg { color: var(--cl-negatif); border-color: color-mix(in srgb, var(--cl-negatif) 45%, transparent); }
.exv-cl-score.neu { color: var(--theme-texte-secondaire); }

/* Listes de définition (domiciliation / régime fiscal / position stratégique) */
.exv-cl-defs { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.exv-cl-def { display: grid; grid-template-columns: 1fr; gap: 1px; }
.exv-cl-def dt { font-size: var(--ht-texte-07); text-transform: uppercase; letter-spacing: 0.03em; color: var(--theme-texte-tertiaire); margin: 0; }
.exv-cl-def dd { margin: 0; font-size: var(--ht-texte-08); color: var(--theme-texte-secondaire); }

/* Comparables : pairs en pastilles */
.exv-cl-peers { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.exv-cl-peer { font-size: var(--ht-texte-07); background: var(--theme-bg-primaire); border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); padding: 3px 10px; color: var(--theme-texte-secondaire); font-weight: var(--wg-texte-medium); }

/* Position concurrentielle : deux sous-cartes de moat (technologique / marque) */
.exv-cl-moat-subs { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; margin-top: 10px; }
.exv-cl-moat-sub { border: 1px solid var(--theme-border-color); border-radius: var(--border-radius-classic); padding: 11px 13px; background: var(--theme-bg-primaire); }
.exv-cl-moat-sub h4 { margin: 0 0 6px; font-size: var(--ht-texte-09); font-weight: var(--wg-texte-semibold); }

/* ===== Thèse de suivi — points falsifiables, niveau de validation 1-5 (SYS_these-suivi) ===== */

.exv-an-tps { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 14px; }
/* Accent de bord : un point neuf de l'analyse courante se repère d'un coup d'œil. */
.exv-an-tp { border-left: 3px solid var(--theme-border-color); }
.exv-an-tp.neuf { border-left-color: var(--cl-serie-1); }
.exv-an-tp-h { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.exv-an-tp-h h3 { margin: 0; font-size: var(--ht-texte-09); font-weight: var(--wg-texte-semibold); }
.exv-an-tp-niv { display: flex; align-items: center; gap: 8px; white-space: nowrap; }

/* Échelle 1-5 : cinq crans, ceux atteints sont pleins. La couleur suit le NIVEAU, pas le cran. */
.exv-an-tp-jauge { display: inline-flex; align-items: center; gap: 3px; }
.exv-an-tp-cran { width: 9px; height: 14px; border-radius: 2px; background: var(--theme-bg-quaterniaire); }
.exv-an-tp-jauge-v { margin-left: 5px; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); font-variant-numeric: tabular-nums; }

/* Mouvement depuis l'analyse précédente. */
.exv-an-tp-delta { font-size: var(--ht-texte-07); font-weight: var(--wg-texte-semibold); font-variant-numeric: tabular-nums; }
.exv-an-tp-delta.hausse { color: var(--cl-positif); }
.exv-an-tp-delta.baisse { color: var(--cl-negatif); }
.exv-an-tp-delta.stable, .exv-an-tp-delta.neuf { color: var(--theme-texte-tertiaire); font-weight: var(--wg-texte-regular); }

.exv-an-tp-metas { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.exv-an-tp-meta { font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); background: var(--theme-bg-quaterniaire); border-radius: var(--border-radius-classic); padding: 1px 7px; }
.exv-an-tp-preuve { font-size: var(--ht-texte-08); margin: 6px 0 0; }
.exv-an-tp-preuve .k { font-weight: var(--wg-texte-semibold); color: var(--theme-texte-secondaire); }
.exv-an-tp-crit { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; margin: 8px 0 0; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
.exv-an-tp-crit dt { font-weight: var(--wg-texte-semibold); color: var(--theme-texte-secondaire); white-space: nowrap; }
.exv-an-tp-crit dd { margin: 0; }
.exv-an-tp-record { margin-top: 12px; font-size: var(--ht-texte-08); }

/* Statuts de sortie : tranché (vert/rouge) vs sorti sans verdict (neutre). */
.exv-an-tp-statut { font-size: var(--ht-texte-07); font-weight: var(--wg-texte-semibold); border-radius: var(--border-radius-classic); padding: 1px 7px; background: var(--theme-bg-quaterniaire); color: var(--theme-texte-secondaire); white-space: nowrap; }
.exv-an-tp-statut.validated { color: var(--cl-positif); }
.exv-an-tp-statut.invalidated { color: var(--cl-negatif); }
.exv-an-tp-clos { list-style: none; padding: 0; margin: 0; display: grid; gap: 7px; }
.exv-an-tp-clos li { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: var(--ht-texte-08); }

/* Historique : vie d'un point, une étape par analyse. */
.exv-an-tp-trail { list-style: none; padding: 0; margin: 8px 0 0; display: grid; gap: 5px; }
.exv-an-tp-trail li { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: var(--ht-texte-07); }
.exv-an-tp-verdict { font-weight: var(--wg-texte-semibold); color: var(--theme-texte-secondaire); }
.exv-an-tp-verdict.valide { color: var(--cl-positif); }
.exv-an-tp-verdict.invalide { color: var(--cl-negatif); }
.exv-an-tp-mv { font-variant-numeric: tabular-nums; color: var(--theme-texte-tertiaire); }
.exv-an-tp-date { color: var(--theme-texte-tertiaire); }
.exv-an-tp-ev { flex: 1 1 100%; color: var(--theme-texte-tertiaire); }
.exv-an-h-suivi { font-variant-numeric: tabular-nums; white-space: nowrap; }
.exv-an-h-rec { margin-left: 4px; color: var(--theme-texte-tertiaire); text-decoration: none; cursor: help; }

/* ===== Ancrage de la thèse de suivi (scénarios, attentes de prix) ===== */

.exv-an-tp-attente { font-size: var(--ht-texte-08); margin: 6px 0 0; color: var(--theme-texte-secondaire); }
.exv-an-tp-attente .k { font-weight: var(--wg-texte-semibold); color: var(--theme-texte-secondaire); }

/* Onglet Thèses : les points suivis pour ce scénario, et ce que leur confirmation a déplacé. */
.exv-an-th-suivi { margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--theme-border-color); }
.exv-an-th-suivi h4 { margin: 0 0 6px; font-size: var(--ht-texte-08); font-weight: var(--wg-texte-semibold); display: flex; align-items: baseline; gap: 8px; }
.exv-an-th-delta { font-size: var(--ht-texte-07); font-variant-numeric: tabular-nums; }
.exv-an-th-delta.hausse { color: var(--cl-positif); }
.exv-an-th-delta.baisse { color: var(--cl-negatif); }
.exv-an-th-pts { list-style: none; padding: 0; margin: 0; display: grid; gap: 6px; }
.exv-an-th-pts li { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: var(--ht-texte-08); }
.exv-an-th-attente { flex: 1 1 100%; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); font-style: normal; }

/* ===== Historique — ligne dépliable (un <details> serait illégal dans un <table>) ===== */

.exv-an-h-table tbody tr.exv-an-h-row td:first-child { white-space: nowrap; }
.exv-an-h-chev { display: inline-block; width: 12px; color: var(--theme-texte-tertiaire); transition: transform .12s ease; }
.exv-an-h-row[aria-expanded="true"] .exv-an-h-chev { transform: rotate(90deg); }
.exv-an-h-row[aria-expanded="true"] { background: var(--theme-bg-quaterniaire); }
.exv-an-h-det > td { background: var(--theme-bg-primaire); text-align: left; white-space: normal; padding: 12px 14px; }
.exv-an-h-det .exv-an-text { margin: 0 0 8px; }
.exv-an-hd { list-style: none; padding: 0; margin: 0; display: grid; gap: 7px; }
.exv-an-hd li { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; font-size: var(--ht-texte-08); }
.exv-an-hd li.sorti { opacity: .75; }
.exv-an-hd-lbl { font-weight: var(--wg-texte-semibold); }
.exv-an-hd-ev { flex: 1 1 100%; font-style: normal; font-size: var(--ht-texte-07); color: var(--theme-texte-tertiaire); }
.exv-an-hd-t { margin: 12px 0 6px; font-size: var(--ht-texte-08); font-weight: var(--wg-texte-semibold); }
