  @font-face{font-family:'Sihage Rubik';src:url('/fonts/document/Rubik-Light.ttf') format('truetype');font-weight:300;font-style:normal;font-display:swap}
  @font-face{font-family:'Sihage Rubik';src:url('/fonts/document/Rubik-Regular.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
  @font-face{font-family:'Sihage Rubik';src:url('/fonts/document/Rubik-Medium.ttf') format('truetype');font-weight:500;font-style:normal;font-display:swap}
  @font-face{font-family:'Sihage Rubik';src:url('/fonts/document/Rubik-SemiBold.ttf') format('truetype');font-weight:600;font-style:normal;font-display:swap}
  @font-face{font-family:'Sihage Rubik';src:url('/fonts/document/Rubik-Bold.ttf') format('truetype');font-weight:700;font-style:normal;font-display:swap}
  @font-face{font-family:'Sihage Poppins';src:url('/fonts/document/Poppins-Bold.ttf') format('truetype');font-weight:700;font-style:normal;font-display:swap}

  /* ================================================================
     SIHAGE Design System tokens — Canon (SIH-51, décidé le 2026-08-02)
     Le standard de la catégorie exécuté à pleine fidélité (barre de
     finition : Linear × TickTick) : canevas affirmé, tuiles blanches en
     premier plan, UN accent encre-lavée, pastilles vintage comme
     signature. Les noms historiques restent des alias.
     ================================================================ */
  :root{
    color-scheme:light;
    /* ── Surfaces ─────────────────────────────────────────── */
    /* ── Famille « pierre » (DEV-572, décision Landry du 19 octobre 2026) ──
       UN gris de référence, celui de l'en-tête d'un détail (lecture Match, fiche candidature).
       Les autres fonds clairs en sont des dilutions dans le blanc : rien ne peut jurer avec lui.
       Changer --pierre change toute la famille. Règle : le blanc porte le contenu, la pierre
       signale ce qui donne son nom à l'objet ou ce qui est choisi, le reste est lumière ou voile.
       Les documents (CV, lettres, éditeurs, aperçus) gardent leurs propres jetons. */
    --pierre:#E5E5E1;
    --surface-lumiere:color-mix(in srgb,var(--pierre) 20%,#FFFFFF); /* fond des écrans, rails */
    --surface-voile:color-mix(in srgb,var(--pierre) 50%,#FFFFFF);   /* retraits, pistes, survols */
    --surface-pierre:var(--pierre);                                /* en-têtes d'objet, carte choisie */
    --window-head-bg:var(--surface-pierre); /* en-tête des fenêtres sur mesure (fiche, réglages) */
    /* La « feuille » (DEV-572, décision Landry du 19 octobre 2026) : une PETITE fenêtre (Décision, 720)
       est un cadre pierre qui porte question et issues ; ce qui va se passer est une feuille blanche.
       Les grandes fenêtres (Travail, Lecture) gardent l'en-tête pierre et un corps blanc d'un tenant :
       chargées d'informations, elles se lisent mieux sans cadre autour. */
    --window-frame-bg:var(--surface-pierre);
    --window-sheet-bg:var(--surface);
    --window-sheet-border:var(--border-strong);
    --window-sheet-inset:10px;
    --window-sheet-radius:12px;
    --mdc-ic-bg:color-mix(in srgb,var(--accent) 20%,var(--surface)); /* pastille neutre, visible sur la pierre */
    --mdc-foot-bg:transparent;
    --mdc-foot-border:0;
    --bg:var(--surface-lumiere);   /* canevas */
    --bg-2:var(--surface-voile);   /* creux et plateaux */
    --surface:#FFFFFF;     /* tuiles et premier plan */
    --tile:var(--surface); /* alias STRUCTUREL : une tuile = UNE couleur, garanti par construction */
    /* Plaque et filet des logos d'organisation (DEV-568), résolus ICI, à la racine : une barre
       qui ré-épingle --surface ou --ink (coque sombre) ne doit jamais teinter un logo. Le même
       logo garde la même couleur partout ; le thème sombre redéfinit --surface sur cette racine. */
    --logo-plate:var(--surface);
    --logo-ring:color-mix(in srgb,var(--ink) 12%,transparent);
    /* ── Le haut d'un écran, en DEUX rôles (SIH-86) ────────────
       Avant, sept barres de haut d'écran peignaient leur fond chacune de leur côté, en trois
       traitements différents. Poser une seule idée transverse — « la barre du haut appartient
       à la scène » (SIH-82) — demandait donc de retrouver et modifier sept endroits, dont deux
       qui n'écrivaient rien et héritaient en silence. C'est ce qui avait fait dégénérer le
       portage en chasse aux symptômes.
       Il n'y a pas UN rôle mais DEUX, et les confondre est justement l'erreur :
         · `--screen-bar`   — la barre qui NOMME l'écran. Elle est POSÉE SUR le plan, s'en
                              détache, porte un filet. (.sec-head, .cve-top)
         · `--screen-plane` — ce qui EST le plan et doit s'y confondre exactement : enveloppes
                              et MASQUES COLLANTS, dont la couleur doit égaler celle du plan
                              sous lequel le contenu défile, sinon la bavure se voit au scroll.
                              (.kb-header, .jc-barwrap)
       Les VALEURS sont inchangées : ce lot ne fait que nommer. `scripts/check-screen-bar-roles.mjs`
       interdit qu'une de ces barres reprenne un fond en propre. */
    /* « La barre du haut appartient à la scène » (SIH-82). La phrase qui avait fait dégénérer
       le portage en chasse aux symptômes — sept endroits à retrouver — s'écrit désormais ICI,
       en UNE valeur. C'est ce que SIH-84, SIH-86 et SIH-89 ont rendu possible.
       La barre ne peint donc plus `--surface` : elle peint la scène, parce qu'elle Y EST
       physiquement (le shell l'accueille hors de la fenêtre, cf. `.screen-chrome`). */
    --screen-bar:var(--screen-scene);
    --screen-plane:var(--bg);
    /* La navigation locale du Vault est un organisme de premier plan, pas un masque du plan.
       Son token sémantique protège ce rôle sans dupliquer la valeur de `--surface`. */
    --vault-local-nav-surface:var(--surface);
    /* ── …et le TROISIÈME rôle : ce sur quoi la fenêtre REPOSE (SIH-82) ──────
       SIH-86 avait nommé deux rôles sur trois. Il manquait celui du dessous, et son absence
       était le blocage réel : `--screen-plane` valait `var(--bg)`, et `.os-shell` comme `.col`
       peignaient tous deux `var(--bg)`. Le plan et ce qui le porte étaient LA MÊME VALEUR —
       on ne peut rien encastrer dans une surface qui lui est égale. Chaque tentative devait
       donc fabriquer l'écart à la main, écran par écran : la chasse aux symptômes.

         · `--screen-scene` — la SCÈNE : ce qui porte la fenêtre et le rail, d'un seul tenant.
                              Aucun filet ne l'en sépare ; c'est le retrait qui fait la limite.
                              (.os-shell, et .side qui s'y fond)
         · `--screen-inset` — le retrait de la fenêtre dans la scène, pris dans l'échelle
                              d'espacement existante. C'est l'épaisseur du cadre.

       Découpe, telle que Linear et Zendesk la posent : le chrome applicatif (le rail) reste
       SUR la scène ; la barre qui NOMME l'écran descend DANS la fenêtre. Elle y est déjà —
       `.sec-head` et `.cve-top` sont des enfants de `.col`. Il suffisait
       donc que `.col` devienne la fenêtre pour que la découpe existe, sans toucher aux barres.

       Comme pour SIH-86, les rôles sont DÉRIVÉS et déclarés une seule fois : un thème qui
       figerait `--screen-scene` en dur le décrocherait du rail sans qu'aucun écran ne bouge
       tout de suite. C'est la pourriture silencieuse que le rempart interdit. */
    --screen-scene:var(--shell-bg);
    --screen-inset:var(--space-3);
    --screen-chrome-h:44px;   /* hauteur de la bande de scène, la même sur tous les écrans */
    --screen-context-h:52px;  /* niveau 2 local, stable entre Vault et écrans à sous-navigation */
    --screen-context-current-max:240px;
    --surface-2:var(--surface); /* panneaux secondaires : blancs, ils se détachent du canevas lumière (DEV-572) */
    --surface-3:var(--surface-voile);
    --document-desk-light:#EADEC4;
    --document-desk-deep:#BCA878;
    --brand-ivory:#FFFFFF; /* l'ancien voile crème rejoint la tuile */
    --brand-color-fallback:#201F1D; /* couleur de marque absente : encre */
    --brand-tint-base:#181817; /* ancre sombre des surfaces teintées, accordée à la coque */
    --border:#E5E5E1;      /* filet fin : la structure sans la lourdeur */
    --border-strong-base:#CDCDC7; /* DEV-575 : le trait à densité entière (100 %), valeur publiée */
    --trait-renfort:0%;           /* DEV-575 : posé par les paliers de dézoom sous :root, jamais à la main */
    --border-strong:color-mix(in srgb,var(--ink) var(--trait-renfort),var(--border-strong-base));
    /* DEV-494 : rôles de surface, résolus au canevas pour rester stables
       dans les cartes dont --bg-2 est historiquement rebasé. */
    --content-bg:var(--surface); /* DEV-572 : le contenu est blanc */
    --content-border:var(--border-strong);
    --content-hover-bg:var(--surface-voile);
    --content-hover-border:color-mix(in srgb,color-mix(in srgb,var(--border-strong) 50%,var(--border-input-hover)) 94%,#000);
    --content-hover-width:1.25px;
    --content-selected-bg:var(--surface-pierre);
    --content-selected-border:color-mix(in srgb,var(--ink-4) 85%,var(--content-bg));
    --content-selected-width:1.5px;
    --support-bg:var(--bg-2);
    --support-border:var(--border);
    --input-rest-border:var(--border-strong); /* DEV-575 : le champ de saisie au repos porte le contour des tuiles (Landry, 19/10) */
    --choice-rest-border:color-mix(in srgb,var(--ink-3) 75%,var(--border-strong)); /* cases, boutons radio, interrupteurs : recette DEV-494 conservée */

    --scroll-pill-thumb:color-mix(in srgb,var(--ink) 38%,transparent);
    --scroll-pill-thumb-hover:color-mix(in srgb,var(--ink) 54%,transparent);
    --scroll-pill-thumb-active:color-mix(in srgb,var(--ink) 68%,transparent);
    --scroll-native-touch-thumb:color-mix(in srgb,var(--ink) 50%,transparent);
    /* Contrat d'interaction : un trait lisible au repos, puis plus net au survol.
       Les contours forts restent réservés au focus, à l'erreur et aux états structurants. */
    --border-soft:color-mix(in srgb,var(--border) 68%,var(--surface));
    --border-hover:var(--border);
    --popover-warm:color-mix(in srgb,var(--brand-ivory) 30%,var(--surface));
    --popover-warm-border:color-mix(in srgb,var(--accent) 16%,var(--surface));
    /* Grandes surfaces temporaires : leur matière ne dépend jamais du sous-arbre
       qui les ouvre. Une popover rendue dans la coque reste donc un premier plan
       clair, au lieu d'hériter du bleu de navigation. */
    --focus-popover-surface:#FFFFFF;
    --focus-popover-subtle:var(--surface-lumiere);
    --focus-popover-border:#E3EBF0;
    --focus-popover-border-strong:#CDCDC7;
    --focus-popover-ink:#1A1A18;
    --focus-popover-ink-2:#45443F;
    --focus-popover-ink-3:#6E6D66;
    --focus-popover-ink-4:#72716B;

    /* ── Encres ───────────────────────────────────────────── */
    --ink:#1A1A18;         /* information principale */
    --ink-2:#45443F;       /* corps */
    --ink-3:#6E6D66;       /* méta */
    --ink-4:var(--ink-3);  /* placeholder : le gris du méta, un seul jeton (dev-550-reglages-bloc, C1) */
    --ink-5:#CBCAC4;       /* désactivé / décoratif */
    --ink-inverse:#FFFFFF;

    /* Palette bleue SIH-383 : une ancre, toutes les variantes dérivées. #24476B reste la référence
       de DEV-548 (dev-548-bleu-reference-24476b, Landry, 16 octobre 2026) : aucune palette parallèle,
       toute évolution se compare à cette teinte sur les vrais écrans. Texte blanc : contraste 9,6. */
    --blue-strong:#24476B;
    --score-on-blue-good:color-mix(in srgb,var(--good) 40%,white);
    --score-on-blue-warn:color-mix(in srgb,var(--warn) 40%,white);
    --score-on-blue-bad:color-mix(in srgb,var(--bad) 40%,white);
    --blue-light:color-mix(in srgb,var(--blue-strong) 40%,white);
    --blue-deep:color-mix(in srgb,var(--blue-strong) 82%,black);
    --blue-soft:color-mix(in srgb,var(--blue-strong) 10%,var(--surface));
    --blue-soft-hover:color-mix(in srgb,var(--blue-strong) 16%,var(--surface));
    --blue-border:color-mix(in srgb,var(--blue-strong) 30%,var(--surface));
    --accent:var(--blue-strong);
    --accent-2:var(--blue-deep);
    --accent-soft:var(--blue-soft);
    --accent-soft-hover:var(--blue-soft-hover);
    --accent-soft-2:var(--blue-border);
    --accent-ink:var(--blue-strong);
    /* Survol et sélection d'une ligne (menu, liste, rail) : deux voiles posés sur la surface qui
       porte la ligne, donc lisibles pareil sur un panneau blanc et sur une colonne grise. Un seul
       endroit décide (dev-548-selection-bleu-teinte) ; le thème sombre suit --ink et --accent. */
    --hover-bg:color-mix(in srgb,var(--ink) 6%,transparent);
    --select-bg:color-mix(in srgb,var(--accent) 16%,transparent);
    --select-ink:var(--accent-ink);
    /* Rôles d'action : sur les surfaces claires, le principal porte le bleu de référence
       (dev-548-bleu-reference-24476b) avec un texte blanc ; il ne dépend pas de `--ink`, qui s'inverse
       en thème sombre. Sur la bande graphite, `.screen-chrome` ré-épingle la paire inversée. */
    --action-bg:var(--blue-strong);
    /* Texte d'une action pleine : un blanc légèrement atténué par la couleur de son bouton, jamais
       le blanc pur, qui tranche et fait « non travaillé » (remarque de Landry, 16 octobre 2026).
       88 % de blanc : contraste 7,9 sur le bleu, 4,8 sur le rouge. Valeurs en dur volontaires : le
       blanc ne doit pas suivre --ink-inverse, qui devient sombre en thème sombre. */
    --action-ink:color-mix(in srgb,#FFFFFF 88%,var(--blue-strong));
    --action-danger-ink:color-mix(in srgb,#FFFFFF 88%,var(--bad));
    /* DEV-573 : bordure transparente, le fond la remplit d'un seul tenant. Une bordure de la
       même couleur que le fond, peinte à part, laissait un liseré clair sous Safari réduit. */
    --action-border:transparent;
    --action-bg-hover:var(--blue-deep);

    /* ── Semantic — le même grain vintage que les pastilles ── */
    --good:#2E7A50;
    --good-2:#14402A;
    --good-soft:#AFD8BE;
    --good-ink:#14402A;
    --warn:#A8801E;
    --warn-2:#46320A;
    --warn-soft:#F0D48D;
    --warn-ink:#46320A;
    --bad:#A84A38;
    --bad-2:#571E12;
    --bad-soft:#E8BAB1;
    --bad-ink:#571E12;
    --info:var(--blue-strong);
    --info-soft:var(--blue-soft);
    --info-ink:var(--blue-strong);
    --candidature-identity-bg:var(--blue-strong);
    --candidature-details-bg:var(--surface-voile);   /* DEV-572 : un seul gris structuré, celui de la famille pierre */
    --candidature-details-heading-bg:var(--surface-pierre);
    --candidature-details-border:color-mix(in srgb,var(--ink) 25%,var(--surface));
    /* États murmurés : point + mot coloré, jamais de grand aplat. */
    --good-quiet:#256645;
    --warn-quiet:#6E5312;

    /* ── Pastilles métier — encres d'impression vintage ─────
       Moutarde, sauge et pétrole (+ rôles CV / Lettre) : la
       signature qui se reconnaît sur une capture partagée. Fond
       teinté, encre sombre AA, bordure dédiée. */
    --tag-cyan:#A5CED6;   --tag-cyan-ink:#113A42;   --tag-cyan-border:#87B8C2;
    --tag-amber:#ECC67E;  --tag-amber-ink:#3F2C05;  --tag-amber-border:#D3B16B;
    --tag-green:#AACFB5;  --tag-green-ink:#14402A;  --tag-green-border:#8EB89C;
    --tag-blue:#B9CADD; --tag-blue-ink:#203C59; --tag-blue-border:#94AEC9;
    --tag-rose:#E4BDD0; --tag-rose-ink:#4A2439; --tag-rose-border:#C996B2;
    --tag-slate:color-mix(in srgb,var(--ink-3) 11%,var(--surface)); --tag-slate-ink:var(--ink-2); --tag-slate-border:var(--border-soft);
    --tag-earth:#D8B49A; --tag-earth-ink:#482C18; --tag-earth-border:#BC9478;
    --doc-cv:var(--accent-soft); --doc-cv-ink:var(--accent-ink); --doc-cv-border:var(--accent-soft-2);
    --doc-letter:#E7B9A8; --doc-letter-ink:#4A1F12; --doc-letter-border:#D39D89;

    /* Coque de navigation claire : graphite neutre (SIH-153)
       La scène, le rail et la barre supérieure forment un même cadre
       neutre. La couleur reste réservée aux informations métier. Ces rôles
       restent séparés de l'encre d'action : changer la coque ne repeint ni
       CTA ni modale. */
    --shell-bg:#2D2D2B;
    --shell-bg-2:#3B3B38;
    --shell-fg:#F5F4EF;
    --shell-fg-muted:#E2E2DD;
    --shell-fg-strong:#F8F7F2;
    --shell-active:#4A4A46;
    --shell-command-separator:color-mix(in srgb,var(--shell-fg-strong) 18%,var(--shell-bg));
    --shell-divider:var(--shell-bg-2);
    --shell-hover:var(--shell-bg-2);
    --shell-command-bg:var(--shell-bg-2);
    --shell-command-border:var(--shell-bg-2);
    --shell-command-fg:var(--shell-fg-muted);
    --shell-command-hover-bg:var(--shell-active);
    --shell-command-hover-border:var(--shell-command-separator);

    /* Encre d'action : accord opaque à trois gris
       Conservée pour les CTA, toasts, authentification et surfaces
       denses hors coque. L'actif #393937 est PARTAGÉ (entrée, avatar, badge). */
    --sidebar-bg:#181817;
    --sidebar-bg-2:#2A2A29;
    --sidebar-fg:#E9E9E6;
    --sidebar-fg-muted:#B8B8B3;
    --sidebar-fg-strong:#F7F7F4;
    --sidebar-active:#393937;
    --sidebar-command-separator:#555553;
    /* L'accord à trois gris est GARANTI par référence, pas recopié. */
    --sidebar-divider:var(--sidebar-bg-2);
    --sidebar-hover:var(--sidebar-bg-2);
    --sidebar-command-bg:var(--sidebar-bg-2);
    --sidebar-command-border:var(--sidebar-bg-2);
    --sidebar-command-fg:var(--sidebar-fg-muted);
    --sidebar-command-hover-bg:var(--sidebar-active);
    --sidebar-command-hover-border:var(--sidebar-command-separator);


    /* ── Shadows — chaudes (rampe #141412), jamais bleues ────
       Ombre = mouvement ou superposition (canon PLAT : pas d'ombre
       de coque d'écran — décision 2026-08-02, DESIGN.md). */
    --shadow-xs: 0 1px 0 rgba(20,20,18,.04);
    --shadow-sm: 0 1px 2px rgba(20,20,18,.05), 0 1px 3px rgba(20,20,18,.04);
    --shadow-md: 0 2px 4px -1px rgba(20,20,18,.06), 0 4px 8px -2px rgba(20,20,18,.06);
    --shadow-lg: 0 4px 8px -2px rgba(20,20,18,.05), 0 12px 24px -4px rgba(20,20,18,.10);
    --shadow-popover:0 2px 8px rgba(20,20,18,.07),0 16px 38px -10px rgba(20,20,18,.20);
    --shadow-overlay:0 24px 60px rgba(20,20,18,.22);
    --shadow-accent:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent);

    /* ── Calques : un ordre unique pour les objets temporaires (SIH-182) ──
       Un nombre ne porte jamais un sens d'interface. Toute surface qui quitte son
       contexte utilise l'un de ces rôles : menu < popover < tiroir < modale < toast.
       Les z-index locaux de contenu (cartes, sticky, illustration) restent locaux. */
    --z-menu:40;
    --z-tooltip:50;
    --z-popover:60;
    --z-drawer:70;
    --z-modal:80;
    --z-modal-nested:calc(var(--z-modal) + 1);
    --z-toast:90;

    /* ── LA LIMITE des objets de premier plan (SIH-111, arbitrage Landry
       2026-08-06 ; registre : `limite-des-objets-halo-et-filet`) ─────────
       Le canon PLAT est REECRIT sur ce point : un objet de premier plan ne
       se distingue plus par le seul TON de son fond, il porte une LIMITE,
       et la meme partout. Elle s'ecrit en DEUX tokens consommes par UNE
       declaration (`.edge`, plus bas) : on ne repeint jamais composant par
       composant, c'est ainsi que 26 familles d'onglets sont nees (SIH-84).

       LE HALO N'A AUCUN DECALAGE, ni horizontal ni vertical. Les `--shadow-*`
       ci-dessus portent toutes un decalage vertical sans decalage horizontal
       (`0 4px 8px -2px`) : c'est la convention « lumiere venue d'en haut »,
       que Landry a nommee « une lampe passee dessus ». Ici la lumiere ne
       vient d'aucun cote, donc l'ombre ENTOURE : `0 0 Npx`, jamais autre
       chose. Un decalage qui reapparait ici n'est pas un reglage, c'est le
       retour du defaut d'origine.

       LE FILET SE DESSINE AVEC L'ENCRE, LE HALO JAMAIS. `--ink` bascule avec
       le theme (presque blanc en sombre) : c'est exactement ce qu'il faut
       pour un TRAIT, qui doit contraster avec la surface dans les deux
       themes, et exactement ce qu'il ne faut pas pour une OMBRE, qui
       eclaircirait au lieu d'ombrer et disparaitrait. Le halo sombre est
       donc reecrit en noir franc plus bas, comme les `--shadow-*` le font
       deja. Mesure de SIH-111 : en sombre l'ecart de ton entre la surface
       et le plan pose deja la limite, le halo y ajoute peu ; c'est en CLAIR
       qu'il compte, la ou le defaut a ete vu. */
    --edge-ring:0 0 0 1px color-mix(in srgb,var(--ink) 7%,transparent);
    --edge-halo:0 0 12px color-mix(in srgb,var(--ink) 6%,transparent);

    --surface-sunken:var(--surface-3);   /* valeur rendue (ex-bloc light) */
    --surface-elevated:var(--surface);   /* valeur rendue (ex-bloc light) */

    --sidebar-w: 280px;
    --sidebar-collapsed-w:72px;
    --asst-w: 0px;
    --account-popover-w:344px;
    --account-popover-shadow:0 18px 48px rgba(20,20,18,.18),0 4px 12px rgba(20,20,18,.08);

    /* Colonne de navigation de Contacts (SIH-101, arbitrage Landry 2026-08-04).
       MÊME MÉCANISME que le panneau latéral du Vault (`.vc-shell`, ligne ~2167) :
       une largeur bornée qui suit le plan de travail. DEUX RÉGLAGES distincts,
       assumés : le panneau du Vault est un ANNEXE (23 %, plafond 440) ; le rail
       Contacts est la NAVIGATION PRINCIPALE de son écran, il porte des noms, des
       rôles et des sociétés, d'où un cran plus généreux.
       Le terme central est un POURCENTAGE, pas des `vw` : il se mesure sur la
       fenêtre réelle (`.col`), donc il reste juste quand la barre de navigation
       s'ouvre ou se replie, ce que `vw` ignore. Le panneau du Vault a rejoint cet
       ancrage en SIH-102 : les deux largeurs fluides de l'application se mesurent
       désormais toutes les deux sur le plan, jamais sur l'écran.
       Mesuré : 340 px jusqu'à 1215 px de fenêtre · 381 px en 1440 · 500 px à
       partir de ~1870. Le bord extérieur ne bouge pas (décision Landry) : la
       fenêtre flotte déjà à 8 px de l'écran et le contenu du rail commence
       16-18 px après. */
    --contacts-rail-w:clamp(340px,28%,500px);

    /* ── Canonical DS aliases (mirror /projects/<DS>/colors_and_type.css)
       Components can use either family — values are identical.            */
    --slate-0:var(--surface); --slate-25:var(--surface-2); --slate-50:var(--bg); --slate-75:var(--bg-2);
    --slate-100:var(--border); --slate-150:var(--border-strong); --slate-200:color-mix(in srgb,var(--border) 76%,var(--surface)); --slate-300:color-mix(in srgb,var(--border-strong) 84%,var(--ink));
    --slate-400:var(--ink-4); --slate-500:var(--ink-3); --slate-600:var(--ink-3); --slate-700:var(--ink-2);
    --slate-800:var(--sidebar-bg-2); --slate-900:var(--sidebar-bg); --slate-950:var(--ink);

    --accent-50:var(--accent-soft); --accent-100:var(--accent-soft-2); --accent-200:color-mix(in srgb,var(--accent) 34%,white); --accent-300:color-mix(in srgb,var(--accent) 56%,white);
    --accent-400:color-mix(in srgb,var(--accent) 78%,white); --accent-500:var(--accent); --accent-600:var(--accent-2); --accent-700:var(--accent-ink);
    --accent-800:color-mix(in srgb,var(--accent-2) 84%,black); --accent-900:color-mix(in srgb,var(--accent-2) 92%,black);

    --success-50:var(--good-soft); --success-200:color-mix(in srgb,var(--good) 28%,var(--surface)); --success-500:var(--good); --success-600:var(--good-2); --success-700:var(--good-2); --success-soft:var(--good-soft);
    --warning-50:var(--warn-soft); --warning-200:color-mix(in srgb,var(--warn) 30%,var(--surface)); --warning-500:var(--warn); --warning-700:var(--warn-2);
    --danger-50:var(--bad-soft);  --danger-100:color-mix(in srgb,var(--bad) 16%,var(--surface)); --danger-200:color-mix(in srgb,var(--bad) 28%,var(--surface)); --danger-500:var(--bad); --danger-600:var(--bad-2); --danger-700:var(--bad-2);
    --info-50:var(--info-soft);    --info-500:var(--info);    --info-700:var(--info-ink);

    --bg-app:var(--slate-50); --bg-canvas:var(--slate-25);
    --bg-surface:var(--slate-0); --bg-subtle:var(--slate-75); --bg-muted:var(--surface-pierre);

    --fg-1:var(--slate-950); --fg-2:var(--slate-700); --fg-3:var(--slate-500);
    --fg-4:var(--slate-400); --fg-5:var(--slate-300);
    --fg-inverse:var(--ink-inverse); --fg-accent:var(--accent-600);

    --border-subtle:var(--slate-75);
    --border-2:var(--border); --border-input:var(--slate-150); --border-input-hover:var(--slate-300);
    --border-focus:var(--accent-500);
    --border-width-selected:2px;

    --radius-xs:3px; --radius-sm:6px; --radius-md:8px; --radius-lg:10px;
    --radius-xl:16px; --radius-2xl:16px; --radius-pill:999px;

    --space-2:4px; --space-3:8px; --space-4:12px; --space-5:16px;
    --brand-ink:#15171B; --brand-light:#F4F1EA;
    --brand-mark-sm:28px; --brand-mark-md:34px; --brand-mark-lg:42px;
    --brand-wordmark-sm:96px; --brand-wordmark-md:116px; --brand-wordmark-lg:144px;

    --ring-focus:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent);
    --scrim:rgba(24,23,21,.42);
    --ring-danger:0 0 0 3px color-mix(in srgb,var(--bad) 22%,transparent);

    --tracking-tight:-0.01em; --tracking-normal:0;
    --tracking-wide:0.04em;  --tracking-caps:0.08em;

    /* Échelle de rôles. Les écrans denses peuvent rester plus compacts,
       mais ils dérivent de ces six repères au lieu de redécider la hiérarchie. */
    --type-display-size:30px; --type-display-line:1.1;
    --type-section-size:22px; --type-section-line:1.15;
    --type-card-size:16px;  --type-card-line:1.3;
    --type-body-size:14px;    --type-body-line:1.55;
    --type-meta-size:13px; --type-meta-line:1.4;
    --type-data-size:11px;   --type-data-line:1.3;
    --weight-body:400; --weight-strong:500; --weight-heading:600;

    /* ── Typographie : deux rôles, deux robinets (SIH-61) ─────────
       Instrument Sans porte toute l'interface. Geist Mono reste rare et ne
       porte que les données techniques, URL, code et raccourcis clavier.
       Les surfaces document ré-épingle ces deux rôles vers leur --doc-font. */
    --font-sans:var(--font-instrument-sans-local),'Instrument Sans','Geist',ui-sans-serif,system-ui,sans-serif;
    --font-data:var(--font-geist-mono-local),'Geist Mono',ui-monospace,monospace;

    /* ── Motion (aligné sur colors_and_type.css — décélérations douces) ── */
    --ease-out:        cubic-bezier(0.16, 1, 0.3, 1);   /* hero ease — "water settling" */
    --ease-out-soft:   cubic-bezier(0.25, 1, 0.5, 1);   /* gentle deceleration */
    --ease-in-out:     cubic-bezier(0.65, 0, 0.35, 1);  /* symmetric motion */
    --ease-standard:   cubic-bezier(0.4, 0, 0.2, 1);    /* fallback / Material */
    --ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);   /* alias of --ease-out */
    --dur-instant: 80ms;
    --dur-fast: 180ms;
    --dur-base: 260ms;
    --dur-slow: 360ms;
    --dur-slower: 520ms;
  }
  /* DEV-575 · Traits au dézoom. Hors 100 %, un trait de 1 px tombe entre deux pixels physiques et
     se peint à moitié sur chacun : il pâlit. La densité effective (resolution) suit le zoom du
     navigateur ; juste SOUS un entier (dézoom), l'encre du trait est renforcée pour garder sa
     présence. 100 % et le zoom avant ne changent pas. Seul --trait-renfort varie ici. */
  @media (max-resolution:0.7dppx),(min-resolution:1.3dppx) and (max-resolution:1.45dppx){:root{--trait-renfort:26%}}
  @media (min-resolution:0.701dppx) and (max-resolution:0.85dppx),(min-resolution:1.451dppx) and (max-resolution:1.69dppx){:root{--trait-renfort:16%}}
  @media (min-resolution:0.851dppx) and (max-resolution:0.99dppx),(min-resolution:1.691dppx) and (max-resolution:1.99dppx){:root{--trait-renfort:8%}}

  /* DEV-14 : une seule geometrie plein ecran, puis le role de calque decide le rang. */
  .ui-screen-layer{position:fixed;inset:0}
  .ui-screen-layer--menu{z-index:var(--z-menu)}
  .ui-screen-layer--modal{z-index:var(--z-modal)}

  /* ================================================================
     Modes globaux — les composants ne connaissent jamais le mode.
     Ils consomment seulement les rôles sémantiques ci-dessus.
     ================================================================ */
  [data-theme="light"]{
    /* Le canon (:root) EST le thème clair — plus de photocopie de 80
       déclarations à garder synchrone (leçon /simplify 2026-08-02 : trois
       divergences silencieuses s'y étaient déjà installées). Ce bloc ne
       porte que ce qui appartient réellement au mode. */
    color-scheme:light;
  }

  [data-theme="dark"]{
    --trait-renfort:0%; /* DEV-575 : le sombre n'a été jugé ni au dézoom ni pour l'alignement des champs */
    --input-rest-border:color-mix(in srgb,var(--ink-3) 75%,var(--border-strong));
    color-scheme:dark;
    /* En sombre, --bad s'éclaircit : son texte plein reste l'encre inverse, comme avant DEV-548. */
    --action-danger-ink:var(--fg-inverse);
    --bg:#080D11;
    --bg-2:#11171C;
    --surface:#181E24;
    --surface-2:#13191E;
    --surface-3:#222A31;
    --surface-sunken:#13191E;
    --surface-elevated:#222A31;
    /* DEV-572 : la famille « pierre » est un choix du clair ; le sombre garde ses rôles d'avant. */
    --surface-lumiere:var(--bg);
    --surface-voile:var(--bg-2);
    --surface-pierre:var(--surface-3);
    --window-head-bg:var(--bg-subtle);
    --window-frame-bg:var(--surface);
    --window-sheet-bg:var(--surface);
    --window-sheet-border:transparent;
    --mdc-ic-bg:var(--accent-soft);
    --mdc-foot-bg:var(--surface-2);
    --mdc-foot-border:1px solid var(--border);
    --bg-muted:var(--border);
    --content-bg:var(--surface-2);
    --content-hover-bg:color-mix(in srgb,var(--surface-2) 97%,#000);
    --content-selected-bg:var(--bg-2);
    --candidature-details-bg:color-mix(in srgb,var(--ink) 10%,var(--surface));
    --candidature-details-heading-bg:color-mix(in srgb,var(--ink) 16%,var(--surface));
    --brand-ivory:#25241F;
    --border:#2A343C;
    --border-strong:#414E57;
    --ink:#F1F3F2;
    --ink-2:#B7C0BC;
    --ink-3:#818D87;
    --ink-4:#818D87;
    --ink-5:#4A5550;
    --ink-inverse:#080D11;
    --accent:var(--blue-light);
    --accent-2:color-mix(in srgb,var(--blue-strong) 25%,white);
    --accent-soft:color-mix(in srgb,var(--blue-strong) 40%,var(--surface));
    --accent-soft-hover:color-mix(in srgb,var(--blue-strong) 55%,var(--surface));
    --accent-soft-2:color-mix(in srgb,var(--blue-strong) 70%,var(--surface));
    --accent-ink:color-mix(in srgb,var(--blue-strong) 15%,white);
    /* En sombre, le bleu clair réduit à un voile tire au gris : la sélection prend le bleu de
       référence lui-même, assez dense pour se distinguer du survol. */
    --select-bg:color-mix(in srgb,var(--blue-strong) 55%,transparent);
    --good:#79C6A5;--good-2:#A9DFC9;--good-soft:#19362B;--good-ink:#A9DFC9;--good-quiet:#8FD0B4;
    --warn:#E1B65F;--warn-2:#F1CB83;--warn-soft:#3B2E18;--warn-ink:#F1CB83;--warn-quiet:#E8C270;
    --bad:#E48A83;--bad-2:#F0AAA5;--bad-soft:#3D2323;--bad-ink:#F0AAA5;
    --info:var(--accent);--info-soft:var(--accent-soft);--info-ink:var(--accent-ink);
    --tag-cyan:#183438;--tag-cyan-ink:#A7DDE1;--tag-cyan-border:#35656A;
    --tag-amber:#3B2E18;--tag-amber-ink:#F1CB83;--tag-amber-border:#765929;
    --tag-green:#19362B;--tag-green-ink:#A9DFC9;--tag-green-border:#356550;
    --tag-blue:#243343;--tag-blue-ink:#BDCEE2;--tag-blue-border:#49617A;
    --tag-rose:#392733;--tag-rose-ink:#EBC4D9;--tag-rose-border:#6D475E;
    --tag-earth:#382C24;--tag-earth-ink:#E3C1A6;--tag-earth-border:#6D5140;
    --doc-cv:var(--accent-soft);--doc-cv-ink:var(--accent-ink);--doc-cv-border:var(--accent-soft-2);
    --doc-letter:#412D2A;--doc-letter-ink:#E8C0BA;--doc-letter-border:#704A45;
    --shell-bg:#080C10;--shell-bg-2:#202830;--shell-active:#393937;
    --shell-fg:#E7EBE9;--shell-fg-muted:#A5B0AB;--shell-fg-strong:#FFFFFF;
    --shell-command-separator:#555553;
    --shell-divider:rgba(255,255,255,.11);
    --shell-hover:rgba(255,255,255,.08);
    --shell-command-bg:rgba(255,255,255,.07);
    --shell-command-border:rgba(255,255,255,.10);
    --shell-command-fg:rgba(255,255,255,.66);
    --shell-command-hover-bg:rgba(255,255,255,.13);
    --shell-command-hover-border:rgba(255,255,255,.20);
    --sidebar-bg:#080C10;--sidebar-bg-2:#202830;
    --sidebar-fg:#E7EBE9;--sidebar-fg-muted:#A5B0AB;--sidebar-fg-strong:#FFFFFF;
    --sidebar-divider:rgba(255,255,255,.11);
    --sidebar-hover:rgba(255,255,255,.08);
    --sidebar-active:#202830;
    --sidebar-command-bg:rgba(255,255,255,.07);
    --sidebar-command-border:rgba(255,255,255,.10);
    --sidebar-command-fg:rgba(255,255,255,.66);
    --sidebar-command-separator:rgba(255,255,255,.12);
    --sidebar-command-hover-bg:rgba(255,255,255,.13);
    --sidebar-command-hover-border:rgba(255,255,255,.20);
    --border-soft:color-mix(in srgb,var(--border) 72%,var(--surface));
    --border-hover:var(--border-strong);
    --popover-warm:color-mix(in srgb,var(--brand-ivory) 24%,var(--surface));
    --popover-warm-border:color-mix(in srgb,var(--accent) 24%,var(--surface));
    --focus-popover-surface:#181E24;
    --focus-popover-subtle:#13191E;
    --focus-popover-border:#414E57;
    --focus-popover-border-strong:#56636C;
    --focus-popover-ink:#F1F3F2;
    --focus-popover-ink-2:#B7C0BC;
    --focus-popover-ink-3:#818D87;
    --focus-popover-ink-4:#818D87;
    --scrim:rgba(0,0,0,.62);
    --scroll-pill-thumb:color-mix(in srgb,var(--ink) 34%,transparent);
    --scroll-pill-thumb-hover:color-mix(in srgb,var(--ink) 52%,transparent);
    --scroll-pill-thumb-active:color-mix(in srgb,var(--ink) 68%,transparent);
    --scroll-native-touch-thumb:color-mix(in srgb,var(--ink) 48%,transparent);
    --shadow-xs:0 1px 0 rgba(0,0,0,.28);
    --shadow-sm:0 1px 2px rgba(0,0,0,.30),0 2px 5px rgba(0,0,0,.16);
    --shadow-md:0 4px 10px rgba(0,0,0,.30),0 12px 24px -12px rgba(0,0,0,.56);
    --shadow-lg:0 10px 24px -8px rgba(0,0,0,.54),0 24px 48px -20px rgba(0,0,0,.72);
    --shadow-popover:0 8px 20px rgba(0,0,0,.42),0 24px 56px -16px rgba(0,0,0,.78);
    --shadow-overlay:0 28px 72px rgba(0,0,0,.62);
    /* La limite en sombre. Le FILET n'est pas repris : il derive de `--ink`,
       qui vaut ici presque du blanc, donc le canon bascule tout seul. Seul le
       HALO est reecrit, en noir franc et plus large, exactement comme les
       `--shadow-*` sombres au-dessus : une ombre faite d'encre claire
       eclaircirait au lieu d'ombrer. */
    --edge-halo:0 0 16px rgba(0,0,0,.5);
    --account-popover-shadow:var(--shadow-popover);
    --ring-focus:0 0 0 3px color-mix(in srgb,var(--accent) 34%,transparent);
    --ring-danger:0 0 0 3px color-mix(in srgb,var(--bad) 32%,transparent);
    --accent-50:var(--accent-soft);--accent-100:var(--accent-soft-2);
    --accent-200:color-mix(in srgb,var(--accent) 28%,var(--surface));
    --accent-300:color-mix(in srgb,var(--accent) 44%,var(--surface));
    --accent-400:color-mix(in srgb,var(--accent) 72%,var(--surface));
    --accent-800:color-mix(in srgb,var(--accent-2) 76%,var(--ink));
    --accent-900:color-mix(in srgb,var(--accent-2) 88%,var(--ink));
  }

  /* ═══════════ LA limite des objets de premier plan (SIH-111) ═══════════
     Arbitrage Landry du 2026-08-06, sur maquette, entre trois ecritures
     (contour seul / halo ambiant / halo + filet) : c'est le halo + filet,
     la limite la plus nette. Registre : `limite-des-objets-halo-et-filet`
     (`node scripts/design-decisions.mjs limite`).

     CECI EST LA DECLARATION UNIQUE. Tout objet de premier plan la reprend,
     quel que soit l'ecran : une carte, une entree du Vault, une tuile, un
     bouton secondaire. On ne repeint jamais composant par composant, et on
     ne recopie jamais `box-shadow:var(--edge-ring),var(--edge-halo)` ailleurs
     dans la feuille : la recopie est exactement ce qui a produit 26 familles
     d'onglets pour une seule barre (SIH-84) et 10 manieres de dessiner un
     bord sur le seul ecran du Vault (mesure SIH-111).

     Les DEUX tokens sont declares une seule fois, en tete de feuille, avec
     le raisonnement qui les fixe (aucun decalage ; le filet a l'encre, le
     halo jamais). Ici, rien d'autre que leur consommation : ni fond, ni
     rayon, ni bordure. Un objet garde sa forme propre et ne recoit de cette
     declaration que sa LIMITE. Elle se pose donc a cote des classes
     existantes, sans rien leur retirer.

     REGLE D'OR, comme pour le canon SIH-51 juste dessous : tout NOUVEL objet
     de premier plan s'inscrit ICI (ou porte la classe `.edge`). Il ne redessine
     pas sa limite dans son coin. Un objet absent de cette liste et qui se
     dessine un bord au repos est une 15e maniere, pas un reglage local.

     PORTEE : le REPOS. La reponse au survol de chaque objet est inchangee par
     ce passage : c'est un autre sujet, et il n'a jamais ete mesure ici. */
  .edge,
  .ct-qbtn,
  .asst-ctx{               /* le geste du composeur : etait --border-strong      */
    box-shadow:var(--edge-ring),var(--edge-halo);
  }

  /* ── Canon SIH-51 · profondeur relative ──────────────────────────
     À l'intérieur d'un contexte tuile (carte, popover, modale), le rôle
     « creux » (--bg-2) se résout un cran plus haut — la surface de
     panneau — jamais au plateau : un puits interne ne doit jamais être
     plus sombre que le conteneur qui le porte. Le rempart document
     re-déclare ses propres valeurs et reste hors d'atteinte. */
  .card,.kc,.gk-card,.cve-vcard,.fm-file,.fm-folder,.cr-card,.nav-carnet-popover,.modal,.cdet-modal2,.ui-window,.profile-settings-modal,.in-modal{
    /* Règle d'or : toute NOUVELLE tuile ou modale s'inscrit ici (ou porte
       une des classes canoniques .card / .modal) — sinon ses puits
       internes retombent silencieusement au niveau plateau.
       DEV-572 : la tuile est blanche, son puits prend la lumière de la famille pierre. */
    --bg-2:var(--surface-lumiere);
  }

  /* Les composants du Vault ont été construits par vagues successives : cette
     couche complète les rares couleurs directes encore présentes. Les cartes
     restent blanches et nettes ; la couleur ne sert qu'à donner un état ou un
     repère, jamais à teinter toute la surface. */
  .vault-view .vc-banner:not([data-brand]){
    background:var(--surface);border-color:var(--border);box-shadow:none
  }
  .vault-view .vcj{outline:0;border:1px solid var(--content-border);background:var(--content-bg);box-shadow:none;
  }
  .vault-view .vcj:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .vault-view .vcj.open{border-color:var(--content-selected-border);background:var(--content-selected-bg);box-shadow:none}
  /* Les choix de source restent compacts : au survol, une frontière douce répond au même
     langage que les onglets. L'option retenue garde son ancrage sombre, avec une lumière interne. */
  .vault-view .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){
    border:1px solid transparent;
    transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out);
  }
  .vault-view .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):not(.on):hover{
    background:color-mix(in srgb,var(--accent) 6%,var(--surface));
    border-color:color-mix(in srgb,var(--accent) 16%,var(--surface));
  }
  .vault-view .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on{
    border-color:color-mix(in srgb,var(--sidebar-fg-strong) 18%,var(--sidebar-bg));
    box-shadow:inset 0 1px 0 color-mix(in srgb,var(--sidebar-fg-strong) 12%,transparent);
  }
  .vault-view .vcj-proof{background:var(--surface);border-color:var(--border)}

  /* ── Rempart document : les rendus recruteur (CV, lettre, synthèse,
     e-mail/message) restent sur les neutres standards quel que soit le thème
     de l'app — on ré-épingle les tokens neutres que leurs descendants
     consomment. Les thèmes de document (--doc-*) gardent la main. ───────── */
  .cve-cv,.lte-letter,.rvdoc,.lte-email,.lte-msg{
    color-scheme:light;
    --ink:#15171B;--ink-2:#393D45;--ink-3:#6B7079;--ink-4:#8B9098;--ink-5:#CFD4DB;
    --ink-inverse:#FFFFFF;--fg-inverse:#FFFFFF;
    --border:#E8EBEF;--border-strong:#DEE2E7;--border-subtle:#F0F2F5;--border-input:#DEE2E7;
    --bg:#F6F7F9;--bg-2:#F0F2F5;--surface:#FFFFFF;--surface-2:#FAFBFC;--surface-3:#F0F2F5;
    --accent:#5B574F;--accent-2:#3F3C36;--accent-soft:#EAE8E4;--accent-soft-2:#BDB8AE;--accent-ink:#35312C;
    --good:#2D7655;--good-2:#1E593F;--good-soft:#DCEEE2;--good-ink:#1E593F;
    --warn:#C69C43;--warn-2:#674A12;--warn-soft:#F2E8D0;--warn-ink:#674A12;
    --bad:#AB443F;--bad-2:#82302C;--bad-soft:#F4DFDB;--bad-ink:#82302C;
    --info:#566269;--info-soft:#E5EAE8;--info-ink:#3C4A4F;
    --shadow-xs:0 1px 0 rgba(16,24,40,.04);
    --shadow-sm:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.04);
    --shadow-md:0 2px 4px -1px rgba(16,24,40,.06),0 4px 8px -2px rgba(16,24,40,.06);
    --shadow-lg:0 4px 8px -2px rgba(16,24,40,.05),0 12px 24px -4px rgba(16,24,40,.10);
    --font-sans:var(--doc-font,'Sihage Rubik',system-ui,sans-serif);
    --font-data:var(--font-sans);
  }

  /* La synthèse d'échange est elle aussi un document édité. Son canevas
     extérieur suit l'application, mais la feuille retrouve strictement la
     palette claire qui précédait le moteur de thème. */
  .ep-paper{
    color-scheme:light;
    --font-sans:var(--doc-font,'Sihage Rubik',system-ui,sans-serif);
    --font-data:var(--font-sans);
    --bg:#F3F4F3;--bg-2:#E8EAE8;--surface:#FFFFFF;--surface-2:#F7F8F7;--surface-3:#E1E4E2;
    --border:#C7CCC8;--border-strong:#9DA7A1;
    --ink:#0E1216;--ink-2:#282E32;--ink-3:#4C565B;--ink-4:#626D72;--ink-5:#C0C6C2;
    --ink-inverse:#FFFFFF;--fg-inverse:#FFFFFF;
    --accent:#5B574F;--accent-2:#3F3C36;--accent-soft:#EAE8E4;--accent-soft-2:#BDB8AE;--accent-ink:#35312C;
    --good:#2D7655;--good-2:#1E593F;--good-soft:#DCEEE2;--good-ink:#1E593F;
    --warn:#C69C43;--warn-2:#674A12;--warn-soft:#F2E8D0;--warn-ink:#674A12;
    --bad:#AB443F;--bad-2:#82302C;--bad-soft:#F4DFDB;--bad-ink:#82302C;
    --info:#566269;--info-soft:#E5EAE8;--info-ink:#3C4A4F;
    --shadow-xs:0 1px 0 rgba(16,24,40,.04);
    --shadow-sm:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.04);
    --shadow-md:0 2px 4px -1px rgba(16,24,40,.06),0 4px 8px -2px rgba(16,24,40,.06);
    --shadow-lg:0 4px 8px -2px rgba(16,24,40,.05),0 12px 24px -4px rgba(16,24,40,.10);
  }

  *{box-sizing:border-box}
  html,body{height:100%;margin:0;overflow:hidden;overscroll-behavior:none;background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-weight:400;font-feature-settings:"cv11","ss01","ss03";font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
  /* Les contrôles de formulaire n'héritent pas de la police par défaut (UA Arial) :
     on les rattache au robinet central — toute règle plus spécifique garde la main. */
  button,input,optgroup,select,textarea{font-family:inherit}
  h1,h2,h3,h4,h5{margin:0;font-weight:var(--weight-heading);letter-spacing:-.02em;color:var(--ink)}
  h1{font-size:var(--type-display-size);line-height:var(--type-display-line)}
  h2{font-size:var(--type-section-size);line-height:var(--type-section-line)}
  h3{font-size:var(--type-card-size);line-height:var(--type-card-line);font-weight:var(--weight-strong)}
  h4{font-size:14px;line-height:1.3}
  h5{font-size:12px;line-height:1.3;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:500}
  p{margin:0;color:var(--ink-2);font-size:var(--type-body-size);line-height:var(--type-body-line)}
  /* Un paragraphe de lettre fragmente reste un seul paragraphe typographique : aucune marge de
     paragraphe ne s'ajoute autour de la gouttiere de page. */
  .lte-p.cve-unit-fragment{margin-bottom:0!important}
  .lte-p.cve-unit-suite{margin-top:0!important}
  hr{border:0;border-top:1px solid var(--border);margin:0}

  /* Classe historique : son nom reste pour la compatibilité JSX, mais le
     texte humain appartient désormais à la famille UI. Les vraies données
     techniques consomment explicitement --font-data. */
  .mono{font-family:var(--font-sans);font-size:var(--type-data-size);line-height:var(--type-data-line);color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;font-variant-numeric:tabular-nums}
  /* Instrument Serif retiré — le design system interdit l'italique décoratif. */

  /* ===== Top OS shell hint ===== */
  /* DEV-573 : sous le cadre sombre, la page prend sa couleur. Réduite par Safari sur tablette
     (largeur imposée de 1440 px), la coque ne couvre pas toujours la dernière colonne de pixels ;
     le fond clair de la page y faisait un liseré blanc. */
  html:has(.os-shell),html:has(.os-shell) body{background:var(--screen-scene)}
  .os-shell{display:flex;height:100vh;height:100dvh;min-height:100vh;min-height:100dvh;overflow:hidden;overscroll-behavior:none;background:var(--screen-scene)}

  /* La coque claire a son propre rôle chromatique. Le vocabulaire historique
     `--sidebar-*` reste l'encre d'action partout ailleurs ; il est ré-épinglé
     uniquement dans les deux organismes qui composent la coque. */
  .side,.screen-chrome{
    --sidebar-bg:var(--shell-bg);
    --sidebar-bg-2:var(--shell-bg-2);
    --sidebar-fg:var(--shell-fg);
    --sidebar-fg-muted:var(--shell-fg-muted);
    --sidebar-fg-strong:var(--shell-fg-strong);
    --sidebar-active:var(--shell-active);
    --sidebar-divider:var(--shell-divider);
    --sidebar-hover:var(--shell-hover);
    --sidebar-command-bg:var(--shell-command-bg);
    --sidebar-command-border:var(--shell-command-border);
    --sidebar-command-fg:var(--shell-command-fg);
    --sidebar-command-separator:var(--shell-command-separator);
    --sidebar-command-hover-bg:var(--shell-command-hover-bg);
    --sidebar-command-hover-border:var(--shell-command-hover-border);
  }

  /* ===== Le haut d'écran vit SUR la scène =====
     UN emplacement, tenu par le shell, où chaque écran dépose sa barre. Avant, chaque écran
     rendait la sienne à l'intérieur de la fenêtre : poser « la barre du haut appartient à la
     scène » se traduisait donc en une liste de sélecteurs qu'on allongeait à chaque écran
     découvert, sans critère d'arrêt. Ici l'écran ne choisit plus OÙ sa barre atterrit — le
     shell le décide, une seule fois, pour tous. C'est la découpe de Linear et de Zendesk :
     le chrome applicatif reste sur la scène, le plan de travail est la fenêtre. */
  .screen-stack{position:relative;z-index:40;flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}
  /* Hauteur réservée en permanence. La barre est déposée par portail, donc APRÈS
     l'hydratation : un emplacement qui grandirait à ce moment-là ferait sauter tout l'écran
     sous les yeux du client (`regle-ui-stable-sans-saut`). */
  /* Hauteur FIXE, pas minimale. Mesuré le 2026-08-03 : laissée libre, la bande valait 42 px
     sur le Vault, 46 sur la lettre et 47 sur le Tableau — le haut de la fenêtre se déplaçait
     donc à chaque navigation, sous les yeux du client (`regle-ui-stable-sans-saut`). Les
     barres s'étirent dedans et centrent leur contenu ; aucune ne fixe plus sa propre hauteur. */
  /* La marge horizontale est portée par la BANDE, une seule fois — et retirée des barres.
     Mesuré le 2026-08-03 : elles en portaient chacune une, 14 px pour `.sec-head`, 16 pour
     l'ancienne `.kanban-toolbar`, 18 pour `.cve-top`. Les écrans ne s'alignaient donc pas entre eux, et
     l'écart se voyait en passant de l'un à l'autre. Le contrat de composition de la bande :
     identité à gauche · contexte au centre (optionnel) · actions à droite, aux mêmes bords
     pour tous, par construction et non par recopie. */
  .screen-chrome{
    flex:0 0 var(--screen-chrome-h);height:var(--screen-chrome-h);
    position:relative;z-index:40;overflow:visible;
    display:flex;align-items:stretch;padding:0 var(--space-5);
  }
  .screen-chrome > *{flex:1;min-width:0;height:100%}

  /* Les deux derniers espaces de travail à en-tête interne (fiche candidature + Studio)
     adoptent l'emplacement unique du shell. PanelHeader reste l'organisme partagé ; ici on
     retire seulement sa peau de panneau pour qu'il fasse corps avec la scène. */
  .screen-chrome .ui-panel-header{
    width:100%;height:100%;min-height:0;padding:0;gap:var(--space-3);
    border:0;background:transparent;color:var(--fg-1)
  }
  .screen-chrome .ui-panel-header__left{min-width:0}
  .screen-chrome .ui-panel-header__center,.screen-chrome .ui-panel-header__right{flex:0 0 auto}
  .screen-chrome .cdet-sysbar-sep{background:var(--sidebar-command-border)}

  /* Studio · identité compacte à gauche, livrable au centre, score + sortie à droite.
     Les informations ne disparaissent pas : elles fusionnent en une ligne tronquée, dont le
     contenu complet reste disponible au survol. */
  .studio-screenbar__identity{display:flex;align-items:center;gap:var(--space-3);min-width:0}
  .studio-screenbar__avatar{
    width:28px;height:28px;display:grid;place-items:center;flex:0 0 auto;
    border-radius:var(--radius-md);background:var(--accent-soft);color:var(--accent-ink);
    font-size:11px;font-weight:600
  }
  .studio-screenbar__copy{display:flex;min-width:0;flex-direction:column;gap:1px;line-height:1.1}
  .studio-screenbar__copy strong{overflow:hidden;color:var(--fg-1);font-size:13px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}
  .studio-screenbar__copy span{overflow:hidden;color:var(--fg-3);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
  .studio-screenbar__deliverable{
    height:28px;display:inline-flex;align-items:center;gap:var(--space-2);padding:0 var(--space-3);
    border:1px solid var(--border-soft);border-radius:var(--radius-md);background:var(--surface);
    color:var(--ink-2);font-size:12px;font-weight:500;white-space:nowrap
  }
  .studio-screenbar__metric{width:96px;display:grid;grid-template-columns:1fr auto;align-items:center;gap:2px var(--space-2)}
  .studio-screenbar__metric > span{overflow:hidden;color:var(--fg-3);font-size:11px;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}
  .studio-screenbar__metric > strong{color:var(--fg-1);font-size:13px;font-weight:600;white-space:nowrap}
  .studio-screenbar__metric > i{grid-column:1/-1;height:3px;overflow:hidden;border-radius:var(--radius-pill);background:var(--sidebar-command-bg)}
  .studio-screenbar__metric > i > b{display:block;height:100%;border-radius:inherit;background:var(--accent)}

  @media (max-width:900px){
    .studio-screenbar__copy span,.cdet-sysbar-meta,.cdet-sysbar-sep{display:none}
    .studio-screenbar__deliverable{max-width:150px;overflow:hidden;text-overflow:ellipsis}
  }
  @media (max-width:680px){
    .studio-screenbar__deliverable{display:none}
    .studio-screenbar__metric{width:auto;grid-template-columns:auto auto}
    .studio-screenbar__metric > i{display:none}
  }

  /* ── Les commandes du haut d'écran ADOPTENT la scène ──────────────────────
     Décision Landry du 2026-08-03, sur maquette : « le fondu c'est bien ».

     Le problème : la barre est sur la scène, mais ses commandes consommaient encore les
     tokens du PLAN : `.tabbar` peignait `--bg-2`, l'onglet actif `--surface`, `.btn.discret`
     écrivait en `--fg-2`. Sur l'encre, elles flottaient comme des tuiles posées au lieu de
     se fondre comme le rail.

     Ce qu'on ne fait PAS, et pourquoi : restyler `.tabbar` ici créerait une variante CSS
     sans composant, que `check-tabbar-contract.mjs` (contrat 3) refuse — à juste titre,
     c'est ainsi que 26 familles sont nées. Repeindre les boutons un par un rejouerait la
     chasse aux symptômes que ce chantier vient de supprimer.

     Ce qu'on fait : on RÉ-ÉPINGLE, pour ce seul sous-arbre, les tokens neutres que les
     descendants consomment. Aucun composant n'est touché, aucune classe n'est ajoutée.
     Le mécanisme est déjà celui de `.cve-cv` / `.lte-letter` / `.rvdoc`, qui ré-épinglent
     ces mêmes tokens pour rendre un document sur fond clair quel que soit le thème ; on
     l'applique à l'envers. Les valeurs viennent toutes du vocabulaire « sur encre » déjà
     livré (`--sidebar-*`, défini dans les deux thèmes) : aucune couleur en dur, et le
     sombre suivra sans qu'on écrive une valeur de plus.

     Déclaration SÉPARÉE de la géométrie ci-dessus, volontairement : souder les deux avait
     cassé la vitrine d'états de la maquette, la hauteur fixe écrasant tout ce qui héritait
     des tokens. Le rôle « quels tokens » et le rôle « quelle taille » restent distincts. */
  .screen-chrome{
    /* La piste d'onglets GARDE son bac, discret mais présent. Première tentative : la rendre
       transparente pour que seul l'actif se dessine. Défaut relevé par Landry le 2026-08-03
       dans l'éditeur de document — « on perd le côté je bascule d'un CV à la lettre ». Mesuré :
       les deux libellés restaient lisibles isolément (8,9:1 et 16,6:1), mais la PAIRE ne se
       lisait plus comme une bascule. Deux boutons voisins sans contenant ne disent pas qu'ils
       s'excluent. Zendesk et Linear gardent ce bac : c'est ce qui leur permet de tenir la
       lisibilité du haut d'écran avec exactement la même approche que la nôtre. */
    --bg-2:var(--sidebar-command-bg);
    --surface:var(--sidebar-active);        /* le voile de l'onglet actif, DANS la piste */
    --shadow-xs:none;                       /* une ombre portée n'a pas de sens sur l'encre */
    --ink:var(--sidebar-fg-strong);
    --ink-2:var(--sidebar-fg);
    --ink-3:var(--sidebar-fg-muted);
    --ink-4:var(--sidebar-fg-muted);
    --fg-1:var(--sidebar-fg-strong);
    --fg-2:var(--sidebar-fg);
    --bg-subtle:var(--sidebar-hover);
    --border-soft:var(--sidebar-command-border);
    --border:var(--sidebar-command-border);
    /* Sur la bande graphite, l'action garde la paire inversee de SIH-130 : surface claire et texte
       encre. Le bleu de reference y ferait un bloc sombre sur fond sombre ; la couleur du texte suit
       donc la situation (remarque de Landry du 16 octobre 2026, DEV-548). */
    --action-bg:var(--sidebar-fg-strong);
    --action-ink:var(--sidebar-bg);
    --action-border:transparent;
    --action-bg-hover:var(--sidebar-fg);
  }

  /* ===== Sidebar (dark slate, TickTick-inspired) ===== */
  .side{
    width:var(--sidebar-w);flex:0 0 var(--sidebar-w);
    /* UNE peinture pour toute la coque : `.os-shell` porte l'aplat unique.
       Le rail reste transparent et ne crée jamais une seconde teinte. */
    background:transparent;
    /* La fenêtre touche la scène : aucune bordure ni couture ne les sépare. */
    color:var(--sidebar-fg);
    padding:12px 16px;
    display:flex;flex-direction:column;gap:10px;
    position:relative;height:100vh;height:100dvh;overflow:visible;overscroll-behavior:contain;
  }
  /* ── Barres de défilement natives ─────────────────────────
     Sur desktop fin uniquement : le tactile/iPad garde l'indicateur OS natif. */
  @media (pointer:fine){
    *::-webkit-scrollbar{width:8px;height:8px}
    *::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px;border:2px solid transparent;background-clip:padding-box}
    *::-webkit-scrollbar-thumb:hover{background:var(--scroll-pill-thumb-hover)}
    *::-webkit-scrollbar-track{background:transparent}
    *::-webkit-scrollbar-corner{background:transparent}
    @supports not selector(::-webkit-scrollbar){
      *{scrollbar-width:thin;scrollbar-color:var(--scroll-pill-thumb) transparent}
    }
    .side::-webkit-scrollbar{width:6px}
    .side::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--sidebar-fg-strong) 28.000000000000004%,transparent);border-radius:99px}
  }

  /* Collapsed sidebar — rail mode */
  body[data-side="collapsed"] .side{
    --side-command-height:38px;
    --side-separator-space:24px;
    width:var(--sidebar-collapsed-w);flex-basis:var(--sidebar-collapsed-w);padding:12px 10px;overflow:visible;gap:8px;
  }
  body[data-side="collapsed"] .side-brand{justify-content:center;padding:0;gap:0}
  body[data-side="collapsed"] .side-brand > div:not(.side-mark){display:none}
  body[data-side="collapsed"] .side-search > span{display:none}
  body[data-side="collapsed"] .side-search svg{display:block}
  body[data-side="collapsed"] .nav{--side-nav-gap:2px;gap:var(--side-nav-gap);align-items:stretch}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)),
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button{
    justify-content:center;padding:0;width:100%;height:38px;margin:0 auto;border-radius:8px;position:relative;
  }
  body[data-side="collapsed"] .nav > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%;margin:0 auto;position:relative}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-ico{width:18px;height:18px}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-ico svg{width:18px;height:18px}
  body[data-side="collapsed"] .side-search svg{width:14px;height:14px}
  body[data-side="collapsed"] .side-search-separator{width:36px;margin:calc(var(--side-separator-space) - var(--space-3)) auto}
  /* Même respiration que le séparateur de recherche, malgré le gap plus serré de la nav. */
  body[data-side="collapsed"] .nav > .nav-memory-group{margin-bottom:0}
  body[data-side="collapsed"] .nav > .side-search-separator{margin-block:calc(var(--side-separator-space) - var(--side-nav-gap))}
  body[data-side="collapsed"] .nav > .side-search-separator + .nav-section-label{display:none}
  body[data-side="collapsed"] .side-mark{width:34px;height:34px;font-size:12px}
  body[data-side="collapsed"] .side-collapse{width:34px;height:34px}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) > *:not(.nav-ico){display:none}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-label{display:none}
  body[data-side="collapsed"] .nav-carnet-primary > *:not(.nav-ico),
  body[data-side="collapsed"] .nav-carnet-current{display:none}
  body[data-side="collapsed"] .nav-carnet-primary{width:100%;height:100%;justify-content:center;padding:0}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-label-1l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;display:block}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-label-stack{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-sub-1l{font-size:11px;line-height:1.25;color:var(--sidebar-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-label-stack{display:none}
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-current="page"],
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button.is-active{
    background:var(--sidebar-active);color:var(--sidebar-fg-strong);
  }
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-current="page"] .nav-ico,
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button.is-active .nav-ico{color:var(--sidebar-fg-strong)}
  body[data-side="collapsed"] .side-foot{margin-top:auto}
  body[data-side="collapsed"] .me .av{width:26px;height:26px;font-size:11px}
  body[data-side="collapsed"] .me .lbl,
  body[data-side="collapsed"] .me .me-menu-cue{display:none}

  /* Rail tooltips (dark sidebar context) */
  body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[data-tip],
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button[data-tip],
  body[data-side="collapsed"] .side-foot-btn[data-tip],
  body[data-side="collapsed"] .side-plan-status[data-tip],
  body[data-side="collapsed"] .side-search[data-tip],
  body[data-side="collapsed"] .me[data-tip]{position:relative}
  body[data-side="collapsed"] .nav > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger)[data-tip]{position:relative}
  @media (hover:hover){
    body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[data-tip]::after,
    body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button[data-tip]::after,
    body[data-side="collapsed"] .side-foot-btn[data-tip]::after,
    body[data-side="collapsed"] .side-plan-status[data-tip]::after,
    body[data-side="collapsed"] .side-search[data-tip]::after,
    body[data-side="collapsed"] .me[data-tip]::after{
      content:attr(data-tip);
      position:absolute;left:calc(100% + 12px);top:50%;transform:translateY(-50%);
      background:var(--ink);color:var(--fg-inverse);font-size:12px;font-weight:500;
      padding:5px 9px;border-radius:6px;white-space:nowrap;pointer-events:none;
      opacity:0;transition: opacity var(--dur-fast) var(--ease-out);z-index:var(--z-tooltip);box-shadow:var(--shadow-popover);
    }
    body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[data-tip]::before,
    body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button[data-tip]::before,
    body[data-side="collapsed"] .side-foot-btn[data-tip]::before,
    body[data-side="collapsed"] .side-plan-status[data-tip]::before,
    body[data-side="collapsed"] .side-search[data-tip]::before,
    body[data-side="collapsed"] .me[data-tip]::before{
      content:"";position:absolute;left:calc(100% + 6px);top:50%;transform:translateY(-50%);
      border:5px solid transparent;border-right-color:var(--ink);
      opacity:0;transition: opacity var(--dur-fast) var(--ease-out);z-index:var(--z-tooltip);pointer-events:none;
    }
    /* Ensure hovered rail item rises above siblings */
    body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[data-tip]:hover,
    body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button[data-tip]:hover,
    body[data-side="collapsed"] .side-foot-btn[data-tip]:hover,
    body[data-side="collapsed"] .side-plan-status[data-tip]:hover,
    body[data-side="collapsed"] .side-search[data-tip]:hover,
    body[data-side="collapsed"] .me[data-tip]:hover{z-index:var(--z-tooltip);position:relative}
  body[data-side="collapsed"] .nav > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger)[data-tip]:hover{position:relative}
    body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[data-tip]:hover::after,
    body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button[data-tip]:hover::after,
    body[data-side="collapsed"] .side-foot-btn[data-tip]:hover::after,
    body[data-side="collapsed"] .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[data-tip]:hover::before,
    body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button[data-tip]:hover::before,
    body[data-side="collapsed"] .side-foot-btn[data-tip]:hover::before,
    body[data-side="collapsed"] .side-plan-status[data-tip]:hover::after,
    body[data-side="collapsed"] .side-plan-status[data-tip]:hover::before,
    body[data-side="collapsed"] .side-search[data-tip]:hover::after,
    body[data-side="collapsed"] .side-search[data-tip]:hover::before,
    body[data-side="collapsed"] .me[data-tip]:hover::after,
    body[data-side="collapsed"] .me[data-tip]:hover::before{opacity:1}
  }
  /* Removed: topbar side-toggle */

  /* ===== Todo card (sidebar) ===== */

  .side-brand{display:flex;align-items:center;gap:10px;min-height:40px;padding:0 4px 12px;position:relative}
  /* Identité officielle : un atome assemble les actifs figés, sans monogramme local. */
  .brand-logo{--brand-mark-size:var(--brand-mark-md);--brand-wordmark-width:var(--brand-wordmark-md);display:inline-flex;align-items:center;gap:var(--space-3);width:max-content;max-width:100%;color:var(--ink);line-height:1}
  .brand-logo[data-size="sm"]{--brand-mark-size:var(--brand-mark-sm);--brand-wordmark-width:var(--brand-wordmark-sm)}
  .brand-logo[data-size="lg"]{--brand-mark-size:var(--brand-mark-lg);--brand-wordmark-width:var(--brand-wordmark-lg)}
  .brand-logo[data-tone="ink"]{color:var(--brand-ink)}
  .brand-logo[data-tone="light"]{color:var(--brand-light)}
  .brand-logo__mark{display:block;flex:0 0 var(--brand-mark-size);width:var(--brand-mark-size);height:var(--brand-mark-size);background:currentcolor;-webkit-mask:url('/assets/logo-mark-white.svg') center/contain no-repeat;mask:url('/assets/logo-mark-white.svg') center/contain no-repeat}
  .brand-logo__wordmark{display:grid;flex:0 1 var(--brand-wordmark-width);width:var(--brand-wordmark-width);max-width:calc(100% - var(--brand-mark-size) - var(--space-3));aspect-ratio:3668/741}
  .brand-logo__wordmark img{grid-area:1/1;display:block;width:100%;height:auto;align-self:center}
  .brand-logo__wordmark-light{display:none!important}
  .brand-logo[data-tone="light"] .brand-logo__wordmark-ink{display:none}
  .brand-logo[data-tone="light"] .brand-logo__wordmark-light{display:block!important}
  [data-theme="dark"] .brand-logo[data-tone="auto"] .brand-logo__wordmark-ink{display:none}
  [data-theme="dark"] .brand-logo[data-tone="auto"] .brand-logo__wordmark-light{display:block!important}
  .side-brand-text{display:flex;flex-direction:column;line-height:1.1;flex:1;min-width:0;overflow:hidden}
  .side-collapse{
    width:28px;height:28px;border:1px solid transparent;background-color:transparent;
    border-radius:8px;display:grid;place-items:center;cursor:pointer;color:var(--sidebar-fg-muted);
    padding:0;flex:0 0 auto;
    transition:color var(--dur-fast) var(--ease-out),
               background-color var(--dur-fast) var(--ease-out),
               opacity var(--dur-fast) var(--ease-out);
  }
  .side-collapse:hover{color:var(--sidebar-fg-strong);background-color:var(--sidebar-hover)}
  .side-collapse:active{background-color:color-mix(in srgb,var(--sidebar-fg-strong) 12%,transparent)}
  .side-collapse:focus-visible{outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent),0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}

  /* Tooltip riche (label + raccourci) — style Perplexity */
  .side-collapse-tip{
    position:absolute;top:calc(100% + 9px);right:0;
    display:none;flex-direction:column;gap:3px;align-items:flex-start;
    background:var(--ink);color:var(--fg-inverse);padding:8px 11px;border-radius:8px;
    white-space:nowrap;line-height:1.25;box-shadow:var(--shadow-popover);
    opacity:0;pointer-events:none;z-index:var(--z-tooltip);transform:translateY(-3px);
    transition:opacity var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
  }
  .side-collapse-tip .lbl{font-size:13px;font-weight:600;letter-spacing:.01em}
  .side-collapse-tip .kbd{font-family:var(--font-data);font-size:11px;color:var(--sidebar-fg-muted)}
  @media (hover:hover){
    .side-collapse-tip{display:flex}
    .side-collapse:hover .side-collapse-tip{opacity:1;transform:translateY(0)}
  }
  body[data-side="collapsed"] .side-collapse-tip{
    top:50%;right:auto;left:calc(100% + 12px);transform:translateY(-50%) translateX(-3px);
  }
  body[data-side="collapsed"] .side-collapse:hover .side-collapse-tip{transform:translateY(-50%) translateX(0)}

  /* Collapsed (rail) — logo by default, swaps to expand button on hover (Perplexity-style) */
  body[data-side="collapsed"] .side-brand{
    position:relative;width:100%;height:34px;margin:0 auto;padding:0;
    flex-direction:row;justify-content:center;align-items:center;gap:0;
  }
  body[data-side="collapsed"] .side-brand-text{display:none}
  body[data-side="collapsed"] .side-mark{
    position:absolute;inset:0;margin:auto;width:28px;height:28px;
    transition:opacity var(--dur-fast) var(--ease-out);
  }
  body[data-side="collapsed"] .side-collapse{
    position:absolute;inset:0;transform:none;margin:auto;width:100%;height:var(--side-command-height);
    opacity:0;pointer-events:none;
  }
  body[data-side="collapsed"] .side-brand:is(:hover,:focus-within) .side-mark{opacity:0}
  body[data-side="collapsed"] .side-brand:is(:hover,:focus-within) .side-collapse{opacity:1;pointer-events:auto}
  /* side-mark — désormais rendu par l'asset image du DS ; aucun texte ni fond nécessaire */
  .side-mark{
    width:38px;height:38px;
    flex:0 0 auto;display:block;
  }
  .side-name{font-weight:600;font-size:14px;line-height:1.2;color:var(--sidebar-fg-strong);letter-spacing:.01em}
  .side-subtitle{font-size:11px;color:var(--sidebar-fg-muted);margin-top:2px;white-space:nowrap}
  .side-search{
    display:flex;align-items:center;gap:8px;width:calc(100% - 4px);height:35px;margin:0 2px;padding:7px 10px;
    background:var(--sidebar-command-bg);border:1px solid var(--sidebar-command-border);border-radius:8px;
    font-family:inherit;font-size:13px;font-weight:400;text-align:left;color:var(--sidebar-command-fg);cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .side-search:hover{background:var(--sidebar-command-hover-bg);border-color:var(--sidebar-command-hover-border);color:var(--sidebar-fg)}
  .side-search:focus-visible{outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent),0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
  .side-search .k{margin-left:auto;font-family:inherit;font-size:11px;font-weight:400;line-height:16px;color:inherit;border:1px solid var(--sidebar-command-separator);padding:1px 5px;border-radius:6px}
  .side-search-separator{height:1px;margin:0 6px;background:var(--sidebar-command-separator);flex:0 0 auto}
  .side > .side-search-separator{margin-block:14px}
  .nav{display:flex;flex-direction:column;gap:3px;margin-top:0;position:relative;flex:0 0 auto;min-height:0;overflow:visible}
  /* Séparer Mémoire et Outils sans cumuler une grande marge avec le titre de section. */
  .nav > .side-search-separator{margin-block:var(--space-4)}
  .side-brand,.side-search{flex:0 0 auto}
  .side-foot{flex:0 0 auto}
  .nav-section-label{padding:10px 10px 5px;font-family:var(--font-sans);font-size:11px;font-weight:600;line-height:1;letter-spacing:.09em;text-transform:uppercase;color:var(--sidebar-fg-muted)}
  body[data-side="collapsed"] .nav-section-label{height:12px;padding:0;font-size:0}
  .nav-profile{margin-top:0}
  /* Topbar sidebar toggle button */

  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){padding:0 10px}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)),.nav-carnet-switcher > .nav-carnet-button{
    display:flex;align-items:center;gap:10px;width:100%;text-align:left;
    border:0;background-color:transparent;border-radius:8px;
    font:inherit;font-size:13px;color:var(--sidebar-fg);font-weight:500;cursor:pointer;
    height:38px;
    transition:background-color var(--dur-fast) var(--ease-out),
               color var(--dur-fast) var(--ease-out),
               box-shadow var(--dur-fast) var(--ease-out);
  }
  .nav > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover,.nav-carnet-switcher > .nav-carnet-button:hover{background-color:var(--sidebar-hover);color:var(--sidebar-fg-strong)}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):active,.nav-carnet-primary:active{background-color:color-mix(in srgb,var(--fg-inverse) 10%,transparent);color:var(--sidebar-fg-strong)}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible,.nav-carnet-primary:focus-visible,.nav-carnet-current:focus-visible{outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent),0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-current="page"],.nav-carnet-switcher > .nav-carnet-button.is-active{background-color:var(--sidebar-active);color:var(--sidebar-fg-strong)}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-current="page"] .nav-ico,.nav-carnet-switcher > .nav-carnet-button.is-active .nav-ico{color:var(--sidebar-fg-strong)}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .nav-ico,.nav-carnet-switcher > .nav-carnet-button .nav-ico,.side-foot-btn .nav-ico{width:18px;height:18px;display:grid;place-items:center;color:var(--sidebar-fg);flex:0 0 auto}
  .nav > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .count-badge{margin-left:auto;--count-badge-color:var(--sidebar-fg);--count-badge-border:var(--sidebar-fg-muted);--count-badge-bg:transparent}

  /* Switcher « un carnet à la fois » : le rail montre le carnet courant, la bibliothèque
     complète reste disponible dans un panneau temporaire. */
  .nav-carnet-switcher{position:relative;width:100%}
  /* Canon SIH-51 : la coque n'a qu'UNE matière — des gris opaques, plus
     de voiles crème ni de translucides recalculés selon le fond. */
  .nav-memory-group{margin-top:4px;padding:7px 5px 5px;border:1px solid var(--sidebar-active);border-radius:10px;background:var(--sidebar-bg-2)}
  .nav-memory-group > .nav-section-label{display:block;padding:0 5px 6px;color:var(--sidebar-fg-muted)}
  .nav-carnet-switcher > .nav-carnet-button{height:48px;gap:0;border-radius:8px;background:transparent;padding:0 7px 0 0}
  .nav-carnet-primary{display:flex;align-items:center;gap:8px;min-width:0;flex:1;height:100%;padding:0 3px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .nav .nav-carnet-button .nav-carnet-icon{width:32px;min-width:32px;height:36px;min-height:36px;flex:0 0 32px;border-radius:8px;background:transparent;color:var(--sidebar-fg)}
  .nav-carnet-button .nav-carnet-icon svg{width:30px;height:30px}
  .nav-carnet-button .nav-label-stack{display:flex;flex:1;min-width:0;flex-direction:column;gap:1px}
  .nav-carnet-button .nav-label-1l{font-weight:600;line-height:1.2}
  .nav-carnet-button .nav-sub-1l{font-size:11px;line-height:1.3;color:var(--sidebar-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .nav-carnet-current{position:relative;width:28px;height:28px;padding:1px;border:0;border-radius:8px;background:transparent;display:grid;place-items:center;flex:0 0 auto;cursor:pointer}
  .nav-carnet-current .vc-carnet-logo{border-color:color-mix(in srgb,var(--brand-ivory) 22%,transparent);box-shadow:none}
  /* La tuile avec logo n'a plus de bordure (DEV-568) : le contour ivoire passe en anneau. */
  .nav-carnet-current .vc-carnet-logo.has-img{box-shadow:0 0 0 1px color-mix(in srgb,var(--brand-ivory) 22%,transparent)}
  .nav-carnet-current:hover .vc-carnet-logo,.nav-carnet-current[aria-expanded="true"] .vc-carnet-logo{border-color:color-mix(in srgb,var(--brand-ivory) 58%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand-ivory) 16%,transparent)}
  .nav-carnet-current-tip{display:none;position:absolute;left:calc(100% + 10px);top:50%;transform:translateY(-50%);width:max-content;padding:5px 8px;border-radius:6px;background:var(--ink);color:var(--fg-inverse);font-size:11px;font-weight:500;line-height:1.2;opacity:0;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out);z-index:var(--z-tooltip);box-shadow:var(--shadow-popover)}
  @media (hover:hover){
    .nav-carnet-current-tip{display:block}
    .nav-carnet-current:hover .nav-carnet-current-tip,.nav-carnet-current:focus-visible .nav-carnet-current-tip{opacity:1}
  }
  .nav-carnet-current[aria-expanded="true"] .nav-carnet-current-tip{opacity:0}
  body[data-side="collapsed"] .nav-memory-group{margin:3px 0;padding:4px;border-color:color-mix(in srgb,var(--brand-ivory) 28%,transparent);background:color-mix(in srgb,var(--brand-ivory) 6%,transparent)}
  body[data-side="collapsed"] .nav-memory-group > .nav-section-label{display:none}
  body[data-side="collapsed"] .nav .nav-carnet-button .nav-carnet-icon{width:32px;min-width:32px;height:36px;min-height:36px;flex-basis:32px}
  body[data-side="collapsed"] .nav-carnet-button .nav-carnet-icon svg{width:30px;height:30px}
  /* DEV-568 · Repliée, la barre montre le logo du carnet regardé à la place de l'icône des carnets. */
  .nav-carnet-icon-logo{display:none}
  body[data-side="collapsed"] .nav-carnet-icon:has(>.nav-carnet-icon-logo)>svg{display:none}
  body[data-side="collapsed"] .nav-carnet-icon>.nav-carnet-icon-logo{display:grid;place-items:center}
  body[data-side="collapsed"] .nav-carnet-icon>.nav-carnet-icon-logo>svg{width:20px;height:20px}
  /* Le logo occupe toute la case (38 px) : plus de fond gris actif ni de survol autour de lui.
     Le cadre du groupe Mémoire (fond sombre, contour clair) reste le seul encadrement. */
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button.has-carnet-logo:is(.is-active,:hover),
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button.has-carnet-logo{background:transparent}
  body[data-side="collapsed"] .nav .nav-carnet-button.has-carnet-logo .nav-carnet-icon{width:38px;min-width:38px;height:38px;min-height:38px;flex-basis:38px}
  /* Le cadre du groupe devient carré autour du logo : 38 + 2 × (4 de marge + 1 de contour) = 48,
     la même marge de 4 px sur les quatre côtés. */
  body[data-side="collapsed"] .nav > .nav-memory-group:has(.nav-carnet-button.has-carnet-logo){width:48px;align-self:center}
  body[data-side="collapsed"] .nav-carnet-switcher > .nav-carnet-button.has-carnet-logo{width:38px;height:38px}
  body[data-side="collapsed"] .nav-carnet-button.has-carnet-logo:hover .vc-carnet-logo{box-shadow:0 0 0 2px color-mix(in srgb,var(--brand-ivory) 28%,transparent)}
  body[data-side="collapsed"] .nav-carnet-icon .vc-carnet-logo svg{width:60%;height:60%}

  .nav-carnet-popover{position:fixed;width:346px;z-index:var(--z-popover);display:flex;min-height:0;flex-direction:column;overflow:visible;background:var(--popover-warm);color:var(--ink);border:1px solid var(--popover-warm-border);border-radius:var(--radius-lg);box-shadow:var(--account-popover-shadow)}
  .nav-carnet-pop-header{flex:0 0 auto;padding:var(--space-4) var(--space-4) var(--space-3)}
  .nav-carnet-pop-title{display:flex;align-items:center;padding:0 0 var(--space-3)}
  .nav-carnet-pop-title strong{font-size:13px}
  .nav-carnet-pop-title span{margin-left:auto;font-size:11px;color:var(--ink-4)}
  .nav-carnet-search{display:flex;align-items:center;gap:var(--space-3);margin:0;padding:7px 9px;background:color-mix(in srgb,var(--surface) 72%,var(--brand-ivory));color:var(--ink-4);border:1px solid var(--popover-warm-border);border-radius:var(--radius-md)}
  .nav-carnet-search:focus-within{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .nav-carnet-search input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--ink);font:12px/1.4 var(--font-sans)}
  .nav-carnet-search input::placeholder{color:var(--ink-4)}
  .nav-carnet-list{flex:0 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:0 var(--space-3) var(--space-3)}
  .nav-carnet-family{padding:8px 10px 3px;font-family:var(--font-sans);font-size:11px;font-weight:600;line-height:1;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4)}
  /* Rangée du sélecteur de carnet : plus haute (logo + deux lignes), encre pleine. */
  .nav-carnet-option{gap:10px;min-height:47px;color:var(--ink)}
  .nav-carnet-mini{width:31px;height:31px;display:grid;place-items:center;flex:0 0 auto}
  .nav-carnet-option[aria-selected="true"] .nav-carnet-mini .vc-carnet-logo{border-color:var(--popover-warm-border)}
  .nav-carnet-option-copy{display:flex;flex:1;min-width:0;flex-direction:column}
  .nav-carnet-option-copy strong,.nav-carnet-option-copy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .nav-carnet-option-copy strong{font-size:13px}
  .nav-carnet-option-copy span{margin-top:1px;color:var(--ink-4);font-size:11px}
  .nav-carnet-check{display:grid;place-items:center;color:var(--ink-2);opacity:0}
  .nav-carnet-option[aria-selected="true"] .nav-carnet-check{opacity:1}
  .nav-carnet-empty{padding:24px 12px;text-align:center;color:var(--ink-4);font-size:12px}
  .nav-carnet-create{position:relative;flex:0 0 auto;margin:0 var(--space-3);padding:var(--space-2) 0 var(--space-3);border-top:1px solid var(--popover-warm-border)}
  .nav-carnet-new{display:flex;align-items:center;gap:9px;width:100%;padding:9px var(--space-2) 7px;border:0;background:transparent;color:var(--ink-3);font:600 12px/1.4 var(--font-sans);text-align:left;cursor:pointer}
  .nav-carnet-new:hover{background:var(--hover-bg);color:var(--ink);border-radius:8px}
  .nav-carnet-new:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

  /* Boards tree (sub-boards) — inside dark sidebar */
  .side-foot{margin-top:auto;display:flex;flex-direction:column;gap:5px}
  .side-foot-actions{display:flex;flex-direction:column;gap:3px;padding-top:9px;margin-top:3px;border-top:1px solid var(--sidebar-command-separator)}
  .side-foot-btn{
    display:flex;align-items:center;gap:10px;width:100%;text-align:left;
    padding:0 10px;border:0;background-color:transparent;border-radius:8px;
    font:inherit;font-size:13px;color:var(--sidebar-fg);font-weight:500;cursor:pointer;
    height:38px;
    transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .side-foot-btn:hover{background-color:var(--sidebar-hover);color:var(--sidebar-fg-strong)}
  .side-foot-btn:disabled{opacity:1;cursor:default}
  .side-foot-btn:disabled:hover{background:transparent;color:var(--sidebar-fg)}
  .side-foot-btn:active{background-color:color-mix(in srgb,var(--sidebar-fg-strong) 10%,transparent);color:var(--sidebar-fg-strong)}
  .side-foot-btn:focus-visible{outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent),0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
  .side-foot-btn:hover .nav-ico{color:var(--sidebar-fg-strong)}
  body[data-side="collapsed"] .side-foot-btn{justify-content:center;padding:0;width:100%;height:38px;margin:0 auto;border-radius:8px;position:relative}
  body[data-side="collapsed"] .side-foot-btn .nav-label{display:none}
  .me{
    display:flex;align-items:center;gap:10px;padding:8px;border-radius:8px;
    background:transparent;border:1px solid transparent;
    color:var(--sidebar-fg);
    transition: background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
  }
  .me:hover,
  .me[aria-expanded="true"]{background:var(--sidebar-hover);box-shadow:none}
  .me:focus-visible{outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent),0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
  .me .av{width:30px;height:30px;border:1px solid var(--sidebar-command-separator);border-radius:50%;background:var(--sidebar-active);color:var(--sidebar-fg-strong);display:grid;place-items:center;font-weight:600;font-size:11px;overflow:hidden}
  .me .av.has-photo,.usp-av.has-photo{background:var(--surface)}
  .me .av.has-photo>img,.usp-av.has-photo>img{width:100%;height:100%;border-radius:inherit;object-fit:cover;display:block}
  .me .lbl{display:flex;flex-direction:column;line-height:1.15;min-width:0;flex:1}
  .me .lbl .n{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--sidebar-fg-strong)}
  .me .lbl .e{font-family:var(--font-sans);font-size:11px;color:var(--sidebar-fg-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  :root{--founder-deep:#29271f;--founder-deep-2:#201f1a;--founder-accent:#e9b949;--founder-frost:#f8edcd;--founder-cream:#fffaf0;--founder-ink:#2c240f;--founder-line:#c89b31}
  .side-plan-status{display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:9px;width:100%;min-height:34px;padding:4px 8px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--sidebar-fg);cursor:pointer;font:inherit;text-align:left;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .side-plan-status:hover{background:var(--sidebar-hover)}
  .side-plan-status:focus-visible{outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent)}
  .side-plan-icon{width:20px;height:20px;display:grid;place-items:center;border-radius:6px;color:var(--sidebar-fg-strong);background:var(--sidebar-hover)}
  .side-plan-icon svg{width:13px;height:13px}
  .side-plan-copy{display:flex;min-width:0;align-items:baseline;gap:5px;line-height:1}
  .side-plan-copy small{color:var(--sidebar-fg-muted);font-size:11px;font-weight:500}
  .side-plan-copy strong{overflow:hidden;color:var(--sidebar-fg-strong);font-size:11px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}
  .side-plan-arrow{display:inline-flex;color:var(--sidebar-fg-muted)}
  .side-plan-status[data-tone="success"]:not([data-owner="true"]) .side-plan-icon{color:var(--good-ink);background:color-mix(in srgb,var(--good-ink) 32%,transparent)}
  .side-plan-status[data-founder="true"]{position:relative;grid-template-columns:minmax(0,1fr) auto;min-height:46px;padding:6px 9px 6px 11px;border-color:transparent;border-radius:8px;background-color:var(--founder-accent);background-image:repeating-linear-gradient(118deg,transparent 0,transparent 8px,color-mix(in srgb,var(--surface) 8%,transparent) 8px,color-mix(in srgb,var(--surface) 8%,transparent) 9px);color:var(--founder-ink)}
  body[data-side="expanded"] .side-plan-status[data-founder="true"]{
    --founder-ticket-cut-x:calc(100% - 96px);

    -webkit-mask-image:radial-gradient(circle 5px at var(--founder-ticket-cut-x) 0,transparent 0 4.5px,var(--ink) 5px),radial-gradient(circle 5px at var(--founder-ticket-cut-x) 100%,transparent 0 4.5px,var(--ink) 5px);
    -webkit-mask-composite:source-in;
    mask-image:radial-gradient(circle 5px at var(--founder-ticket-cut-x) 0,transparent 0 4.5px,var(--ink) 5px),radial-gradient(circle 5px at var(--founder-ticket-cut-x) 100%,transparent 0 4.5px,var(--ink) 5px);
    mask-composite:intersect;
  }
  body[data-side="expanded"] .side-plan-status[data-founder="true"]::before{content:"";position:absolute;left:var(--founder-ticket-cut-x);top:12px;bottom:12px;z-index:1;border-left:1px dashed color-mix(in srgb,var(--founder-ink) 34%,transparent);pointer-events:none}
  .side-plan-status[data-founder="true"]:hover{border-color:transparent;background-color:color-mix(in srgb,var(--founder-accent) 86%,var(--founder-ink))}
  body[data-side="expanded"] .side-plan-status[data-founder="true"] .side-plan-icon{display:none}
  .side-plan-status[data-founder="true"] .side-plan-copy{align-items:flex-start;flex-direction:column;gap:2px}
  .side-plan-status[data-founder="true"] .side-plan-copy strong{color:var(--founder-ink);font-size:11px;letter-spacing:0}
  .side-plan-status[data-founder="true"] .side-plan-copy small{color:color-mix(in srgb,var(--founder-ink) 78%,transparent);font-size:11px;font-weight:750;letter-spacing:.045em;text-transform:uppercase}
  .side-plan-founder-id{position:relative;min-width:92px;padding-left:10px;color:var(--founder-ink);font-size:11px;font-weight:800;letter-spacing:.025em;text-align:center;white-space:nowrap}
  .side-plan-founder-id::before{content:none}
  .side-plan-status[data-tone="info"] .side-plan-icon{color:var(--accent-ink);background:var(--accent-soft)}
  .me-menu-cue{
    width:22px;height:22px;border-radius:6px;display:grid;place-items:center;flex:0 0 auto;
    color:var(--sidebar-fg-muted);background:var(--sidebar-bg-2);
  }
  .me:hover .me-menu-cue,
  .me[aria-expanded="true"] .me-menu-cue{color:var(--sidebar-fg-strong);background:var(--sidebar-active)}
  @media (hover:hover){
    body[data-side="expanded"] .me[data-tip]::after{
      content:attr(data-tip);position:absolute;right:8px;bottom:calc(100% + 9px);
      background:var(--ink);color:var(--fg-inverse);font-size:12px;font-weight:500;
      padding:5px 9px;border-radius:6px;white-space:nowrap;pointer-events:none;
      opacity:0;transform:translateY(2px);transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out);
      z-index:70;box-shadow:var(--shadow-popover);
    }
    body[data-side="expanded"] .me[data-tip]::before{
      content:"";position:absolute;right:15px;bottom:calc(100% + 4px);
      border:5px solid transparent;border-top-color:var(--ink);
      opacity:0;transition:opacity var(--dur-fast) var(--ease-out);z-index:70;pointer-events:none;
    }
    body[data-side="expanded"] .me[data-tip]:hover::after{opacity:1;transform:translateY(0)}
    body[data-side="expanded"] .me[data-tip]:hover::before{opacity:1}
    body[data-side="expanded"] .me[aria-expanded="true"]::after,
    body[data-side="expanded"] .me[aria-expanded="true"]::before{display:none}
  }

  /* Support : même surface, largeur et placement que le profil. */
  .support-popover .usp-item:disabled{cursor:default;opacity:.5}
  .support-popover .support-body{min-height:0}
  .user-switch-pop.support-popover-chat,body[data-side="collapsed"] .user-switch-pop.support-popover-chat{width:min(440px,calc(100vw - 32px));padding:0;border:0;background:transparent;overflow:hidden}
  .support-popover-chat .support-body{overflow:hidden;padding:0}
  .support-chat-body{position:relative;height:min(680px,calc(100dvh - 50px));min-height:160px}
  .support-chat-frame{border:0;width:100%;height:100%;display:block}

  /* User profile switcher popover */
  .user-switch-pop{position:fixed;width:var(--account-popover-w);display:flex;min-height:0;flex-direction:column;overflow:visible;background:var(--popover-warm);color:var(--ink);border:1px solid var(--popover-warm-border);border-radius:var(--radius-xl);padding:8px;box-shadow:var(--account-popover-shadow);z-index:var(--z-popover)}
  .usp-head{display:flex;align-items:center;gap:10px;flex:0 0 auto;padding:9px 10px 12px;margin-bottom:4px;border-bottom:1px solid var(--popover-warm-border)}
  /* Positionnement seulement : le visuel vient de l'atome .ui-close-button. */
  .usp-close{margin-left:auto;flex:0 0 auto}
  .usp-discreet{display:flex;align-items:center;gap:10px;padding:9px 10px 11px;border-bottom:1px solid var(--popover-warm-border);margin-bottom:4px;color:var(--ink-2)}
  .usp-discreet>svg{flex:0 0 auto;color:var(--ink-3)}
  .usp-discreet .usp-body .rl{white-space:normal;line-height:1.3;margin-top:2px}
  .usp-discreet .ui-switch{margin-left:auto}
  .usp-menu-body{flex:0 1 auto;min-height:0;padding:2px 0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}
  .usp-item{display:flex;align-items:center;gap:10px;width:100%;min-height:42px;text-align:left;padding:9px 10px;border:0;background:transparent;border-radius:8px;cursor:pointer;font:inherit;color:var(--ink-2);transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .usp-item:hover{background:var(--hover-bg);color:var(--ink)}
  .usp-item.on{background:var(--select-bg);color:var(--select-ink)}
  .usp-av{width:34px;height:34px;border:1px solid var(--border);border-radius:50%;background:var(--accent);color:var(--fg-inverse);display:grid;place-items:center;font-weight:600;font-size:11px;flex:0 0 auto;overflow:hidden}
  .usp-icon{width:24px;height:24px;border-radius:6px;background:color-mix(in srgb,var(--brand-ivory) 72%,var(--surface));color:var(--ink-3);display:grid;place-items:center;flex:0 0 auto;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .usp-item:hover .usp-icon{color:var(--ink);background:var(--surface)}
  .usp-body{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.2}
  .usp-body .nm{font-size:13px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .usp-body .rl{font-family:var(--font-sans);font-size:11px;color:var(--ink-4);letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .usp-item > svg{color:var(--ink-4);flex:0 0 auto}
  .usp-item:hover > svg{color:var(--ink)}
  .usp-sep{height:1px;background:var(--popover-warm-border);margin:6px 10px}
  .usp-all-settings{border:0;background:transparent}
  .usp-all-settings .usp-icon{color:var(--ink-3);background:color-mix(in srgb,var(--brand-ivory) 72%,var(--surface))}
  .usp-all-settings:hover{background:var(--bg-2)}
  .usp-danger{color:var(--bad)}
  .usp-danger .usp-body .nm{color:var(--bad)}
  .usp-danger .usp-icon{color:var(--bad);background:var(--bad-soft)}
  .usp-danger:hover{color:var(--bad);background:var(--bad-soft)}
  .usp-danger:hover .usp-icon{color:var(--bad);background:var(--bad-soft)}
  .usp-foot{flex:0 0 auto;font-size:11px;color:var(--ink-4);padding:10px 10px 6px;border-top:1px solid var(--popover-warm-border);margin-top:5px;line-height:1.6}
  .usp-foot [aria-disabled="true"]{color:var(--ink-3)}
  body[data-side="collapsed"] .user-switch-pop{width:var(--account-popover-w)}
  :root[data-demo-discreet="on"] .me:not([data-demo-ready="true"]) .lbl,:root[data-demo-discreet="on"] .usp-head:not([data-demo-ready="true"]) .usp-body{visibility:hidden}
  :root[data-demo-discreet="on"] .me:not([data-demo-ready="true"]) .av img,:root[data-demo-discreet="on"] .usp-head:not([data-demo-ready="true"]) .usp-av img{visibility:hidden}
  :root[data-demo-discreet="on"] .settings-account-identity:not([data-demo-ready="true"]):not([data-discreet-ready="true"]),:root[data-demo-discreet="on"] .settings-account-pane:not([data-demo-ready="true"]):not([data-discreet-ready="true"])>*{visibility:hidden}
  .demo-private-panel{min-height:260px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px;padding:24px;color:var(--ink-2)}
  .demo-private-panel strong{font-size:16px;color:var(--ink)}
  .demo-private-panel p{max-width:340px;margin:0;font-size:13px;line-height:1.5}
  .demo-private-document{min-height:180px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px;background:var(--surface-2);color:var(--ink-2);text-align:center;font-size:12px;line-height:1.45}
  .demo-private-document strong{color:var(--ink);font-size:14px}
  .document-miniature-page+.demo-private-document{min-height:100%}
  :root[data-demo-discreet="on"] .doc-html-preview-stage:not([data-discreet-ready="true"]):not(.demo-safe .doc-html-preview-stage),:root[data-demo-discreet="on"] .document-miniature-page:not(.demo-safe){visibility:hidden}
  :root[data-demo-discreet="on"] .fm-document-preview .ui-window__title:not([data-demo-ready="true"]),:root[data-demo-discreet="on"] .document-preview-title-line strong:not([data-demo-ready="true"]){visibility:hidden}
  :root[data-demo-discreet="on"] .fm-file-preview-canvas,:root[data-demo-discreet="on"] .fm-file-preview-meta,:root[data-demo-discreet="on"] .fm-file-preview-title-edit,:root[data-demo-discreet="on"] .fm-document-preview .ui-window__head .fm-document-preview-meta,:root[data-demo-discreet="on"] .fm-file-name:not([data-demo-ready="true"]){visibility:hidden}
  :root[data-demo-discreet="on"] .cve-profile-detail{position:relative}
  :root[data-demo-discreet="on"] .kc:not([data-demo-ready="true"]):not([data-discreet-ready="true"]) .kc-head,:root[data-demo-discreet="on"] .list-row:not([data-demo-ready="true"]):not([data-discreet-ready="true"]) :is(.co,.role-cell){visibility:hidden}
  .demo-discreet-pill{display:inline-flex;align-items:center;max-width:100%;min-height:1.55em;padding:.12em .55em;border-radius:6px;background:var(--surface-3);color:var(--ink-3);font:600 .78em var(--font-sans);letter-spacing:0;line-height:1.25;white-space:nowrap;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}
  :root[data-demo-discreet="on"] .logo:not([data-discreet-ready="true"]){visibility:hidden}
  [data-discreet-source]{display:inline-block;max-width:100%;font-size:0!important;line-height:1;vertical-align:baseline;border-radius:6px;background:var(--surface-3);color:var(--ink-3);overflow:visible}
  [data-discreet-source]>[data-discreet-value]{display:none!important}
  [data-discreet-source]::after{content:attr(data-discreet-label);display:inline-block;padding:.12em .55em;font:600 11px/1.3 var(--font-sans);white-space:nowrap;vertical-align:baseline}
  /* Les feuilles figées gardent les métriques exactes de leur source. */
  :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap) [data-discreet-source]{display:inline;font-size:inherit!important;line-height:inherit;vertical-align:baseline;color:transparent!important;box-decoration-break:clone;-webkit-box-decoration-break:clone;overflow:visible}
  :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap) [data-discreet-source]>[data-discreet-value]{display:inline!important;visibility:hidden!important}
  :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap) [data-discreet-source]::after{content:none}
  :root[data-demo-discreet="on"] [data-discreet-surface]:not([data-discreet-ready="true"]){visibility:hidden}
  :root[data-demo-discreet="on"] :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap):not([data-discreet-ready="true"]):not(.demo-safe :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap)){position:relative}
  :root[data-demo-discreet="on"] :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap):not([data-discreet-ready="true"]):not(.demo-safe :is(.cve-cv,.lte-letter,.lte-emailwrap,.lte-msgwrap))::after{content:"Document masqué en mode discret";position:absolute;inset:0;z-index:50;display:flex;align-items:flex-start;justify-content:center;padding-top:120px;background:var(--surface);color:var(--ink-2);font:600 14px var(--font-sans)}
  @media(max-width:380px){.user-switch-pop{width:min(var(--account-popover-w),calc(100vw - 32px))}}
  /* Commandes du rail : gabarit du profil, hors silhouette des Vaults. */
  body[data-side="collapsed"] :is(.side-search,.side-foot-btn,.side-plan-status,.me){
    display:flex;align-items:center;justify-content:center;width:100%;height:var(--side-command-height);min-height:var(--side-command-height);
    margin:0 auto;padding:0;border:0 solid transparent;border-radius:var(--radius-md);background:transparent;position:relative;
  }
  body[data-side="collapsed"] .side-plan-status[data-founder="true"]{background:transparent}
  body[data-side="collapsed"] :is(.side-search,.side-foot-btn,.side-plan-status,.me,.side-collapse):hover,
  body[data-side="collapsed"] .me[aria-expanded="true"]{background:var(--sidebar-hover);border-color:transparent;color:var(--sidebar-fg-strong)}
  body[data-side="collapsed"] .side-plan-copy,body[data-side="collapsed"] .side-plan-arrow,body[data-side="collapsed"] .side-plan-founder-id{display:none}
  body[data-side="collapsed"] .side-plan-icon{width:22px;height:22px}
  .side-plan-status:not([data-founder="true"])[data-offer="parcours"] .side-plan-icon{background:var(--accent-soft);color:var(--accent-ink)}
  .side-plan-status:not([data-founder="true"])[data-offer="elan"] .side-plan-icon,
  .side-plan-status:not([data-founder="true"])[data-offer="elan-x5"] .side-plan-icon{background:var(--tag-amber);color:var(--tag-amber-ink)}
  .subscription-plan-surface{display:grid;grid-template-columns:minmax(0,1fr) minmax(205px,.38fr);gap:18px}
  .subscription-plan-surface[data-plan="parcours"]{border-color:color-mix(in srgb,var(--accent-ink) 42%,var(--surface))!important;background:color-mix(in srgb,var(--accent-soft) 20%,var(--surface))!important}
  .subscription-plan-surface[data-plan="elan"]{border-color:color-mix(in srgb,var(--tag-amber-ink) 42%,var(--surface))!important;background:color-mix(in srgb,var(--tag-amber) 20%,var(--surface))!important}
  .subscription-plan-heading{display:flex;align-items:center;gap:10px;min-width:0}
  .subscription-plan-heading>span:last-child{min-width:0}.subscription-plan-heading strong,.subscription-plan-heading small{display:block}.subscription-plan-heading strong{color:var(--ink);font-size:var(--settings-type-display)}.subscription-plan-heading small{margin-top:2px;color:var(--ink-2);font-size:var(--settings-type-meta)}
  .subscription-plan-icon{display:grid;width:38px;height:38px;place-items:center;flex:0 0 auto;border-radius:10px}
  .subscription-plan-surface[data-plan="parcours"] .subscription-plan-icon{background:var(--accent-soft);color:var(--accent-ink)}
  .subscription-plan-surface[data-plan="elan"] .subscription-plan-icon{background:var(--tag-amber);color:var(--tag-amber-ink)}
  .subscription-plan-benefits{display:grid;gap:7px;margin-top:13px;color:var(--ink-2);font-size:13px;line-height:1.4}
  .subscription-plan-benefits>span{display:grid;grid-template-columns:14px minmax(0,1fr);align-items:start;gap:6px}.subscription-plan-benefits svg{margin-top:1px;color:var(--ink-2)}.subscription-plan-benefits .is-primary{color:var(--ink);font-weight:700}
  .subscription-plan-billing{display:flex;min-width:0;flex-direction:column;padding:16px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
  .subscription-plan-billing>small{color:var(--ink-3);font-size:var(--settings-type-meta)}
  .subscription-plan-price{margin-top:6px;color:var(--ink);font-size:22px;font-weight:650;letter-spacing:-.02em;white-space:nowrap}.subscription-plan-price small{color:var(--ink-3);font-size:var(--settings-type-meta);font-weight:500;letter-spacing:0}
  .subscription-plan-renewal{margin-top:14px;padding-top:12px;border-top:1px solid var(--border);color:var(--ink-3);font-size:var(--settings-type-meta)}.subscription-plan-renewal strong{display:block;margin-top:4px;color:var(--ink);font-size:var(--settings-type-body)}
  /* G3 (DEV-550) : l'appel d'abonnement prend la matière du bouton principal bleu, pas l'encre. */
  .subscription-plan-action,.subscription-founder-action{border-color:var(--action-border)!important;background:var(--action-bg)!important;color:var(--action-ink)!important;box-shadow:none!important}
  .subscription-plan-action:hover,.subscription-founder-action:hover{background:var(--action-bg-hover)!important}
  .subscription-plan-action>span:last-child,.subscription-founder-action>span:last-child{color:var(--action-ink);background:color-mix(in srgb,var(--surface) 14%,transparent)!important}
  @media(max-width:760px){.subscription-plan-surface{grid-template-columns:1fr}.subscription-plan-billing{min-height:165px}}
  .subscription-founder-surface{display:grid;grid-template-columns:minmax(0,1fr) minmax(205px,.38fr);gap:18px;border-color:var(--founder-line)!important;background-color:var(--founder-frost)!important;background-image:repeating-linear-gradient(118deg,transparent 0,transparent 9px,color-mix(in srgb,var(--surface) 18%,transparent) 9px,color-mix(in srgb,var(--surface) 18%,transparent) 10px)}
.founder-offer-card{
  --founder-offer-action-width:164px;
  --founder-offer-cut-x:calc(100% - var(--founder-offer-action-width));

    position:relative;
  border-color:color-mix(in srgb,var(--founder-accent) 58%,var(--surface))!important;
  background-color:color-mix(in srgb,var(--founder-accent) 16%,var(--surface))!important;
  background-image:repeating-linear-gradient(118deg,transparent 0,transparent 8px,color-mix(in srgb,var(--founder-accent) 9%,transparent) 8px,color-mix(in srgb,var(--founder-accent) 9%,transparent) 9px);
    color:var(--founder-ink);
    -webkit-mask-image:radial-gradient(circle 5px at var(--founder-offer-cut-x) 0,transparent 0 4.5px,var(--ink) 5px),radial-gradient(circle 5px at var(--founder-offer-cut-x) 100%,transparent 0 4.5px,var(--ink) 5px);
    -webkit-mask-composite:source-in;
    mask-image:radial-gradient(circle 5px at var(--founder-offer-cut-x) 0,transparent 0 4.5px,var(--ink) 5px),radial-gradient(circle 5px at var(--founder-offer-cut-x) 100%,transparent 0 4.5px,var(--ink) 5px);
    mask-composite:intersect;
  }
  .founder-offer-card::before{content:"";position:absolute;left:var(--founder-offer-cut-x);top:12px;bottom:12px;border-left:1px dashed color-mix(in srgb,var(--founder-ink) 34%,transparent);pointer-events:none}
  .founder-offer-card>div:first-child>span:first-child{border-color:transparent!important;background:var(--founder-deep)!important;color:var(--founder-accent)!important}
  .founder-offer-card>div:first-child strong,.founder-offer-card>div:nth-child(2)>div:first-child{color:var(--founder-ink)!important}
  .founder-offer-card>div:first-child span,.founder-offer-card>div:nth-child(2)>div:nth-child(2){color:color-mix(in srgb,var(--founder-ink) 68%,transparent)!important}
  .subscription-founder-identity{display:flex;flex-direction:column;min-width:0;border-radius:10px;background:var(--founder-deep);padding:14px;color:var(--founder-cream)}
  .subscription-founder-identity>small{color:color-mix(in srgb,var(--founder-accent) 78%,var(--founder-cream));font-size:13px;font-weight:750;letter-spacing:.055em;text-transform:uppercase}
  .subscription-founder-identity>strong{margin-top:5px;color:var(--founder-accent);font-size:13px;font-weight:750;letter-spacing:.02em}
  .subscription-founder-tenure{margin-top:14px;padding-top:12px;border-top:1px solid color-mix(in srgb,var(--founder-accent) 28%,transparent)}
  .subscription-founder-tenure>small{display:block;color:color-mix(in srgb,var(--founder-cream) 64%,transparent);font-size:13px}
  .subscription-founder-tenure>strong{display:block;margin-top:3px;color:var(--founder-cream);font-size:13px;font-weight:700}
  .subscription-founder-identity dl{display:grid;gap:7px;margin:13px 0 0}
  .subscription-founder-identity dl>div{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
  .subscription-founder-identity dt{color:color-mix(in srgb,var(--founder-cream) 60%,transparent);font-size:13px}
  .subscription-founder-identity dd{margin:0;color:var(--founder-cream);font-size:13px;font-weight:650;text-align:right}
  .subscription-founder-thanks{margin-top:auto;padding-top:14px;color:var(--founder-cream)}
  .subscription-founder-thanks>strong{display:block;font-size:13px;font-weight:700}
  .subscription-founder-benefits{display:grid;gap:7px;margin-top:13px;color:var(--founder-ink);font-size:13px;line-height:1.4}
  .subscription-founder-benefits>span{display:grid;grid-template-columns:14px minmax(0,1fr);align-items:start;gap:6px}
  .subscription-founder-benefits svg{margin-top:1px;color:color-mix(in srgb,var(--founder-ink) 76%,var(--founder-accent))}
  .subscription-founder-benefits strong{font-weight:700}
  .subscription-founder-action{margin-top:10px!important;background-image:none}
  @media(max-width:760px){.subscription-founder-surface{grid-template-columns:1fr}.subscription-founder-identity{min-height:150px}}
  body[data-side="collapsed"] .me[aria-expanded="true"]::before,
  body[data-side="collapsed"] .me[aria-expanded="true"]::after{display:none}
  /* Coque commune ui-window (DEV-550) : le rail se place à côté du contenu. */
  .ui-window.settings-dialog{flex-direction:row}
  .settings-dialog{
    /* LA colonne de lecture des réglages, exposée UNE fois, comme l'échelle
       typographique juste en dessous. Toute section la consomme par
       .settings-column ; aucune ne redéclare de largeur pour elle seule.
       Mesuré le 2026-08-18 : la zone de contenu plafonne à 808px PAR
       CONSTRUCTION (1100 de modale, 248 de rail figé, 22 + 22 de retrait). Elle
       remplit donc et reste centrée. Une valeur chiffrée supérieure à 808 serait
       inerte, et 808 en dur serait faux le jour où le rail ou la modale bouge. */
    --settings-column-max:100%;
    --settings-type-display:13px;
    --settings-type-title:13px;
    --settings-type-value:13px;
    --settings-type-nav:13px;
    --settings-type-body:13px;
    --settings-type-control:13px;
    --settings-type-supporting:13px;
    --settings-type-meta:13px;
    --settings-type-eyebrow:13px;
  }
  /* Le menu des Réglages est la molécule `SideMenu`. Le rail est un creux : le survol d'une
     ligne s'y lit un ton au-dessous, sans redéclarer l'état de la ligne d'option. */
  .settings-header{background:var(--window-head-bg)} /* DEV-572 : même en-tête que toutes les fenêtres */
  .settings-nav{margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--border);--bg-2:color-mix(in srgb,var(--ink) 6%,var(--support-bg))}
  .settings-dialog button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible,
  .settings-dialog input:focus-visible,
  .settings-dialog select:focus-visible{
    outline:0;
    box-shadow:var(--ring-focus);
  }
  .settings-theme-grid{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:10px;
  }
  .settings-theme-card{
    appearance:none;
    display:grid;
    grid-template-columns:auto minmax(0,1fr) 16px;
    align-items:start;
    gap:10px;
    min-width:0;
    min-height:112px;
    padding:14px;
    border:1px solid var(--border-soft);
    border-radius:8px;
    background:var(--surface);
    color:var(--ink-2);
    font:inherit;
    text-align:left;
    cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out);
  }
  .settings-theme-card:not(:disabled):hover{border-color:var(--border-strong);background:var(--bg-2)}
  .settings-theme-card:disabled{cursor:not-allowed;color:var(--ink-3);background:var(--surface)}
  .settings-theme-card[aria-checked="true"]{border-color:var(--ink-4);background:var(--bg-2);color:var(--ink)}
  .settings-theme-card-icon{display:flex;align-items:center;color:currentColor}
  .settings-theme-card-check{display:flex;width:16px;height:16px;align-items:center;justify-content:center;color:currentColor}
  .settings-theme-card>svg{color:currentColor}
  .settings-theme-card-copy{display:grid;gap:6px;min-width:0}
  .settings-theme-card-copy strong{color:currentColor;font-size:var(--settings-type-title);font-weight:600}
  .settings-theme-card-copy>span{color:var(--ink-3);font-size:var(--settings-type-supporting);line-height:1.45}
  @media(max-width:720px){
    .settings-theme-grid{grid-template-columns:1fr}
    .settings-theme-card{min-height:94px}
  }
  /* « Modifier » est un Btn secondaire : cette classe ne règle que son apparition au survol de la ligne. */
  .btn.settings-edit-btn{
    opacity:0;
    pointer-events:none;
    transition:opacity .12s ease,background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out);
  }
  .settings-edit-row:hover .btn.settings-edit-btn,
  .settings-edit-row:focus-within .btn.settings-edit-btn{
    opacity:1;
    pointer-events:auto;
  }

  /* ===== List view ===== */
  .list-section{margin-bottom:18px}
  .list-section h4{
    display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--ink);
    padding:0 6px 8px;
  }
  .list-section h4 .dot{width:8px;height:8px;border-radius:50%}
  .list-table{
    background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden;
  }
  .list-head, .list-row{
    display:grid;
    grid-template-columns: 220px 1fr 100px 90px 110px 80px 70px 140px;
    align-items:center;gap:14px;padding:9px 14px;font-size:13px;
  }
  .list-head{
    background:var(--bg-2);border-bottom:1px solid var(--border);
    font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:500;
  }
  .list-row{border-top:1px solid var(--border);cursor:pointer;transition: background-color var(--dur-fast) var(--ease-out)}
  .list-row:first-child{border-top:0}
  .list-row:hover{background:var(--hover-bg)}
  /* Glisser-déposer (vue Liste) — repère neutre transitoire */
  .list-row[draggable="true"]{cursor:grab}
  .list-row.dragging{opacity:.45;cursor:grabbing;background:var(--bg-2)}
  .list-section.drop-over .list-table{outline:1.5px dashed var(--ink-4);outline-offset:2px}
  .list-dropslot{height:38px;border-top:1px dashed var(--ink-4);background:var(--bg-2);
    animation:dropslot-in var(--dur-fast) var(--ease-out)}
  .list-row:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--accent);background:var(--content-selected-bg)}
  .list-row .co{display:flex;align-items:center;gap:9px;min-width:0}
  .list-row .co .nm{font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .list-row .role-cell{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .list-row .role-cell .sub{font-size:12px;color:var(--ink-3);margin-top:1px}
  .list-row .loc-cell{color:var(--ink-2);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .list-row .salary-cell{font-weight:600;color:var(--ink);font-size:13px}
  .list-row .match-cell{display:flex;align-items:center;gap:7px}
  .list-row .match-cell .bar{flex:1;height:4px;background:var(--bg-2);border-radius:99px;overflow:hidden;border:1px solid var(--border)}
  .list-row .match-cell .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));border-radius:99px}
  .list-row .match-cell .v{font-family:var(--font-data);font-size:11px;font-weight:500;color:var(--ink);min-width:28px;text-align:right}
  .list-row .ats-cell{display:flex;align-items:center;justify-content:center}
  .list-row .when-cell{font-family:var(--font-data);font-size:11px;color:var(--ink-3)}
  .list-row .when-cell.urgent{color:var(--bad);font-weight:500}

  /* ===== Calendar view ===== */

  /* unified scroll handled below */

  .vault-stack{display:flex;flex-direction:column;gap:14px}
  .vault-exp{
    background:var(--surface);border:1px solid var(--border);border-radius:10px;
    overflow:hidden;
  }
  .vault-block{
    display:grid;grid-template-columns:36px 1fr auto;align-items:flex-start;gap:12px;
    padding:14px 16px;border-top:1px solid var(--border);
    cursor:pointer;transition: background-color var(--dur-fast) var(--ease-out);
  }
  .vault-block:first-child{border-top:0}
  .vault-block:hover{background:var(--bg-2)}

  /* IA disclaimer footer */
  .vault-disclaimer{
    margin-top:18px;padding:12px 14px;border:1px dashed var(--border-strong);border-radius:10px;
    background:var(--bg-2);display:flex;align-items:flex-start;gap:10px;
    font-size:12px;color:var(--ink-3);line-height:1.5;
  }
  .vault-disclaimer .ic{color:var(--accent);flex:0 0 auto;margin-top:1px}
  .vault-disclaimer strong{color:var(--ink-2)}

  /* ===== Vault — wall layout ===== */
  .vc-paper{
    background:
      radial-gradient(circle at 1px 1px, color-mix(in srgb,var(--ink) 4%,transparent) 1px, transparent 0) 0 0/22px 22px,
      var(--bg);
  }

  /* ===== Vault view head — sticky on scroll, flush with topbar ===== */
  .vault-view-head{
    position:sticky;top:0;z-index:5;
    background-color:var(--bg-app);
    margin:0 -24px 12px;padding:8px 24px;
    border-bottom:1px solid var(--border);
    align-items:center;
  }
  /* V4 : le shell respire légèrement tout autour (header, footer, gauche, droite) */
  /* Gouttière retirée : c'est elle qui détachait la coque du Vault du bord de la fenêtre. */
  .col > .vault-view{padding:0;overflow:hidden}
  /* Compact heading inside the sticky head so it doesn't add extra vertical space */
  .vault-view-head h1{font-size:16px;line-height:1.2;margin:0}
  .vault-view-head p{display:none}

  /* ===== Vault gauge popup overlay ===== */

  /* Top progress bar */

  /* Sidebar simplifiée */

  /* Big composer */
  /* Déclencheur : le composer est masqué par défaut, révélé à la demande */

  /* Missing prompts */

  /* Banner */
  .vc-banner{position:relative;padding:13px 18px 12px;border:1px solid var(--border);border-radius:10px;overflow:hidden}
  /* Bannière condensée hors du fil : l'identité du carnet reste lisible, le contenu reprend
     la place. On resserre, on ne retire rien — le pied (dates, statut) s'efface seul. */
  .vc-banner.is-compact{padding:9px 18px 9px}
  .vc-banner.is-compact h2{font-size:16px}

  /* Options du carnet (modifier/renommer/supprimer) : toujours nettes et visibles.
     Le menu est en fixed pour échapper à l'overflow de la bannière. */
  /* SIH-115 : role discret compact. Geometrie et transition viennent de la declaration
     des roles ; ne reste ici que l'encre CLAIRE, propre au bandeau qui est sombre. */

  /* Stack */
  .vc-stack{display:flex;flex-direction:column;gap:8px}
  .vc-list{display:flex;flex-direction:column;gap:8px}

  /* ── Journal entry (carnet de bord — STAR en arrière-plan) ── */
  .vcj{display:grid;grid-template-columns:56px 18px 1fr;border-radius:10px;transition:background .26s cubic-bezier(.16,1,.3,1),box-shadow .26s cubic-bezier(.16,1,.3,1)}

  .vcj-title{font-size:16px;line-height:22px;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink);text-wrap:pretty}
  /* Pièces jointes DANS l'entrée : miniatures discrètes, la preuve à côté du récit. */
  /* Pièces (planche G .files) : tuiles blanches à hairline, radius 8 — interactives. */
  .vcj-proofs{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}
  .vcj-proof{display:inline-flex;align-items:center;gap:7px;max-width:230px;padding:4px 9px 4px 4px;border:1px solid var(--border-strong);border-radius:8px;background:var(--surface)}
  .vcj-proof-ic{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;background:var(--bg-2);color:var(--ink-4);overflow:hidden;flex:0 0 auto}
  .vcj-proof-ic img{width:100%;height:100%;object-fit:cover}
  .vcj-proof-nm{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* Écran « Compétences » : 3 colonnes, une compétence par ligne avec son nombre de preuves. */
  .vsk-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
  @media (max-width:900px){ .vsk-cols{grid-template-columns:1fr} }
  .vsk-proofs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
  .vsk-proofs li{display:flex;align-items:center;gap:10px;padding:7px 0;border-top:1px solid var(--border)}
  .vsk-proofs li:first-child{border-top:0}
  .vsk-proof-n{display:inline-flex;align-items:center;gap:5px;flex:1;min-width:0;font-size:13px;line-height:17px;color:var(--ink-2);text-wrap:pretty}
  .vsk-proof-n svg{color:var(--good-ink);flex:0 0 auto}
  .vsk-proof-c{flex:0 0 auto;padding:2px 9px;border:1px solid var(--border-soft);border-radius:999px;background:var(--surface);font-family:var(--font-sans);font-size:11px;color:var(--ink-3);cursor:pointer;transition:border-color .18s cubic-bezier(.16,1,.3,1),color .18s cubic-bezier(.16,1,.3,1)}
  .vsk-proof-c:hover{border-color:var(--accent);color:var(--accent-ink)}
  .vsk-proof-c.is-job{cursor:default;color:var(--ink-4)}
  /* Angles de la lettre : la seule commande de l'écran. Sélection = pastille pleine, jamais un
     bandeau ni un bord accent (regle-sobriete-visuelle). */
  .vltr-angles{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:0 0 10px}
  .vltr-angles-l{font-size:12px;color:var(--ink-4)}
  .vltr-quote{margin:18px 0 0;font-size:14px;line-height:21px;font-style:italic;color:var(--ink-2);text-wrap:pretty;max-width:72ch}
  /* Aperçu recruteur (maquette « Sur mon CV ») : un document sobre, pas un tableau de bord. */
  .vrcv-apercu{padding:22px 26px 20px}
  .vrcv-lead{margin:0 0 14px;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-4)}
  .vrcv-role{margin:0;font-size:16px;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink)}
  .vrcv-sub{margin:3px 0 0;font-size:13px;color:var(--ink-3)}
  .vrcv-cvlines{list-style:none;margin:18px 0 0;padding:0;display:flex;flex-direction:column}
  .vrcv-cvlines li{padding:11px 0;border-top:1px solid var(--border)}
  .vrcv-cvline-t{display:block;font-size:13px;line-height:19px;color:var(--ink-2);text-wrap:pretty}
  .vrcv-cvlines .vrcv-prov{margin:6px 0 0}
  .vrcv-none{margin:18px 0 0;font-size:13px;color:var(--ink-4)}
  .vrcv-kws{display:flex;flex-wrap:wrap;gap:6px;margin-top:18px}

  /* ── Carte d'entrée MONO-COLONNE (maquette « carnet idéal ») : titre, récit, pièces, tags,
     puis la vie réelle du fait ou une question. Plus de rail droit — le fil se lit d'une traite. ── */
  .vcj.solo{grid-template-columns:minmax(0,1fr)}
  /* Vie du fait : une ligne de lecture, pas une rangée de pastilles. Seule la valeur reprend
     le contrat statistique partagé ; le statut métier ferme la ligne sur l'axe opposé. */
  .vcj-stats{display:flex;align-items:center;gap:8px 24px;flex-wrap:wrap;margin-top:12px;padding-top:11px;border-top:1px solid var(--border-soft);color:var(--ink-3)}
  .vcj-stat{display:inline-flex;align-items:center;gap:10px;font-size:12px;line-height:17px;white-space:nowrap}
  .vcj-stat.ready{margin-left:auto;color:var(--good-quiet)}
  .vcj-stat.needs-work{margin-left:auto;color:var(--warn-quiet)}
  .vcj-stat-dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex:0 0 auto}
  /* Le résultat chiffré est une étape centrale d'enrichissement : contrairement aux autres
     questions STAR, il devient une action pleine largeur, ferme mais toujours Atelier. */
  .vcj-impact-cta{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;margin-top:12px;padding:12px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}
  .vcj-impact-cta:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);transform:none}
  .vcj-impact-cta:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .vcj-impact-cta-ic{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--accent-soft);color:var(--accent-ink)}
  .vcj-impact-cta-copy{display:flex;min-width:0;flex-direction:column;gap:2px}
  .vcj-impact-cta-copy strong{font-size:14px;line-height:18px;font-weight:500;color:var(--ink)}
  .vcj-impact-cta-copy>span{font-size:12px;line-height:16px;color:var(--ink-3)}
  .vcj-impact-cta-action{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 10px;border-radius:8px;background:var(--sidebar-bg);color:var(--sidebar-fg-strong);font-size:12px;font-weight:500;white-space:nowrap}
  .vcj-impact-cta-action svg{flex:0 0 auto}
  .vcj-main > .vcj-invite-btn{margin-top:10px;flex-direction:row;align-items:center;gap:0;font-size:13px;color:var(--ink-3)}
  .vcj-main > .vcj-invite-btn .vcj-invite-hint{font-size:13px;color:var(--accent)}
  /* Provenance « d'après … » sur les aperçus : le « jamais inventé » rendu visible. Discret —
     c'est une note de bas de ligne, pas un badge qui vole la vedette au contenu. */
  .vrcv-prov{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:1px 7px;border:1px solid var(--border-soft);border-radius:999px;background:var(--surface);font-family:inherit;font-size:11px;color:var(--ink-4);cursor:pointer;vertical-align:middle;max-width:340px;transition:border-color .18s cubic-bezier(.16,1,.3,1),color .18s cubic-bezier(.16,1,.3,1)}
  /* Titre de fait long → une seule ligne tronquée, le texte complet reste dans l'attribut title au
     survol (décision Landry 2026-07-22). Clamp partagé CV/lettre/Récap. min-width:0 autorise le
     flex-item texte à rétrécir sous la taille de son contenu pour que l'ellipsis s'applique. */
  .vrcv-prov > .vrcv-prov-t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vrcv-prov:hover{border-color:var(--accent);color:var(--accent-ink)}
  /* Provenance non cliquable (fiche de poste) : même forme, sans promesse de lien. */
  .vrcv-prov.as-note{cursor:default}
  .vrcv-prov.as-note:hover{border-color:var(--border);color:var(--ink-4)}
  .vltr-sources{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0;padding-top:10px;border-top:1px dashed var(--border)}
  .vrcv-prov svg{flex:0 0 auto}
  /* Provenance sous une preuve de l'éditeur de lettre (lot 1b-i) : alignée sous le texte (au-delà
     de la case à cocher), pastilles qui passent à la ligne. Réutilise .vrcv-prov (margin-left:0
     dans le flux flex, l'écart est porté par le gap). */
  .cve-proof-prov{display:flex;flex-wrap:wrap;gap:6px;padding:2px 8px 6px 30px}
  .cve-proof-prov .vrcv-prov{margin-left:0}
  /* Signal d'enrichissement (lot #3 « Levier d'enrichissement ») : un bloc d'expérience SANS fait
     du Vault → invite POSITIVE et opt-in à raconter ce poste (clic → capture du journal pré-remplie
     qui nourrit le Vault). COMPLÉMENT de la pastille « d'après … », jamais les deux sur un bloc.
     Sobre (design system) : pas de bord/bande coloré, texte discret + icône ; l'accent n'apparaît
     qu'au survol. Ce n'est pas un « fait » (surface transparente) mais une invitation. */
  .cve-enrich-hint{display:inline-flex;align-items:center;gap:5px;margin:4px 0 2px;padding:2px 9px;border:1px solid var(--border-strong);border-radius:999px;background:transparent;font-family:inherit;font-size:11px;line-height:1.5;color:var(--ink-3);cursor:pointer;text-align:left;transition:border-color .18s cubic-bezier(.16,1,.3,1),color .18s cubic-bezier(.16,1,.3,1)}
  .cve-enrich-hint:hover{border-color:var(--accent);color:var(--accent-ink)}
  .cve-enrich-hint svg{flex:0 0 auto;color:var(--ink-4)}
  .cve-enrich-hint:hover svg{color:var(--accent)}
  .cve-enrich-hint-t{min-width:0}
  /* Dans l'éditeur CV, aligne le signal sous le texte du bloc (même retrait que la pastille). */
  .cve-expcard .cve-enrich-hint{margin-left:30px}
  /* Mention de repli : discrète mais lisible. Elle dit ce qui a échoué et propose de relancer —
     jamais automatiquement (regle-ecritures-plafonnees). */
  .vrcv-repli{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:10px 0 0;font-size:12px;color:var(--ink-3)}
  .vrcv-repli svg{flex:0 0 auto;color:var(--warn)}
  .vrcv-guarantee{display:flex;align-items:center;gap:10px;margin-top:18px;padding-top:12px;border-top:1px solid var(--border);font-size:12px;color:var(--ink-3)}
  .vrcv-guarantee > span{display:inline-flex;align-items:center;gap:6px}
  .vrcv-guarantee svg{color:var(--good-ink);flex:0 0 auto}
  .vrcv-guarantee-r{margin-left:auto;color:var(--ink-4)}
  /* Premier pas · compte sans aucun carnet. */
  .vc-firststep{display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;margin:auto;padding:56px 24px;max-width:460px}
  .vc-firststep-ic{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:16px;background:var(--bg-2);color:var(--ink-3)}
  .vc-firststep h2{margin:6px 0 0;font-size:16px;font-weight:500;color:var(--ink);text-wrap:balance}
  .vc-firststep p{margin:0;font-size:13px;line-height:19px;color:var(--ink-3);text-wrap:pretty}
  /* En-tête de groupe daté du fil : le carnet se relit comme un journal. */
  /* Groupes datés (planche G .dgroup) : texte calme en sentence case — plus de mono UPPERCASE. */
  .vcj-group-h{margin:22px 2px 8px;font-family:inherit;font-size:12px;font-weight:400;letter-spacing:var(--tracking-normal);text-transform:none;color:var(--ink-3)}
  /* Composer EN TÊTE du fil : il n'est plus collé au bas de l'écran, donc plus de sticky,
     plus de dégradé de fond, plus de `margin-top:auto` qui le poussait vers le bas. */
  .vc-composer-top{margin:0}
  .vc-composer-top .jc-barwrap{position:static;margin-top:0;padding:0;background:none}
  .vc-composer-top .vc-composer-invitation{margin-top:18px}
  .usp-subscription-item{width:calc(100% - 12px)!important;margin:2px 6px!important;border-radius:8px!important;background:color-mix(in srgb,var(--accent-soft) 48%,transparent)!important}
  .usp-subscription-item:hover{background:color-mix(in srgb,var(--accent-soft) 72%,transparent)!important}
  .vcj-prose{font-size:14px;line-height:1.62;color:var(--ink-2);margin:5px 0 0;max-width:62ch;text-wrap:pretty}
  .vcj:not(.open) .vcj-prose{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  /* ─ Question douce : ce que la machine a relu dans la note, à confirmer par la personne.
       Surface NEUTRE (--bg-2) sans filet coloré : c'est une invitation, pas une alerte. ─ */
  /* Panneau de suggestion : surface interactive (boutons) → blanc chaud + hairline,
     lisible sur la carte au remplissage doux. */
  .vcj-ask{margin-top:10px;padding:10px 12px;background:var(--support-bg);border:0;border-radius:var(--radius-md);display:flex;flex-direction:column;gap:8px}
  .vcj-ask-q{margin:0;font-size:13px;line-height:18px;color:var(--ink-2);display:flex;align-items:flex-start;gap:7px;text-wrap:pretty}
  .vcj-ask-q svg{color:var(--ink-4);flex-shrink:0;margin-top:2px}
  .vcj-ask-q b{font-weight:500;color:var(--ink)}
  .vcj-ask-actions{display:flex;gap:8px;padding-left:20px}
  /* ─ Pièces jointes de l'entrée : liens · fichiers · aperçus ─ */

  /* ── Journal entry v2 — carte à deux zones (C·v2 retenue, juin 2026).
     Remplace la frise (date|spine|content) : zone gauche = contenu + libellé
     « Utilisé · N CV » sur la ligne de date ; zone droite = méthode STAR (couleur
     = complétude, vert/ambre) au-dessus de l'aperçu des pièces. Le dépli s'étend
     sur toute la largeur sous les deux zones. Les anciennes règles .vcj-date/
     .vcj-spine/.vcj-content/.vcj-meta restent inertes (éléments supprimés). ── */
  /* DEV-494 : contenu neutre, contour unique ; sélection plus affirmée que le survol. */
  .vcj{position:relative;grid-template-columns:minmax(0,1fr) 208px;border:0;border-radius:10px;margin:5px 0;overflow:hidden;
    transition:background-color .18s var(--ease-out);
    background:var(--content-bg);
    box-shadow:none;
    outline:1px solid var(--content-border);
    outline-offset:-1px}
  .vcj:hover{outline-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none;border-color:var(--content-hover-border)}
  .vcj:focus-within{background:var(--content-hover-bg);box-shadow:none;border-color:var(--content-hover-border)}
  .vcj.menu-open{background:var(--content-hover-bg)}
  .vcj.open{outline-color:var(--content-selected-border);background:var(--content-selected-bg);box-shadow:none;border-color:var(--content-selected-border)}
  .vcj.solo{grid-template-columns:1fr}
  .vcj-main{padding:16px;min-width:0;display:flex;flex-direction:column;gap:0;cursor:pointer}
  .vcj-main:focus-visible{outline:0;box-shadow:var(--ring-focus);border-radius:10px}
  
  .vcj.menu-open{z-index:4;overflow:visible}
  .vcj-head-actions{position:relative;display:flex;align-items:center;gap:6px;flex:0 0 auto;margin-left:auto}
  @media (prefers-reduced-motion:reduce){
    .vcj{transition:none}
  }

  /* Typo planche F : titres 15.5/500, deux graisses max. */
  .vcj-titlerow{display:flex;align-items:flex-start;gap:8px}
  .vcj-title{font-size:16px;line-height:1.35;font-weight:500;letter-spacing:-.005em;margin:0;color:var(--ink);text-wrap:pretty;flex:1;min-width:0}
  .vcj-titlerow .vcj-type{flex:0 0 auto}
  .vault-origin-labels{display:block;margin-top:var(--space-2);color:var(--ink-3);font-size:var(--type-data-size);line-height:var(--type-data-line)}

  /* Deux densités, une seule entrée : la barre choisit la disposition et les filtres,
     tandis que VaultEntry reste l'unique source du contenu et des actions. */
  .vcj-view-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:18px 0 12px}
  .vcj-view-filters{display:flex;align-items:center;gap:4px;min-width:0;flex-wrap:wrap}
  .vcj-view-filters button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 10px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--ink-3);font:inherit;font-size:12px;white-space:nowrap;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vcj-view-filters button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--surface);color:var(--ink)}
  .vcj-view-filters button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .vcj-view-filters button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on{border-color:var(--border-soft);background:var(--surface);color:var(--ink);font-weight:500}
  .vcj-view-filters .needs-work{color:var(--accent-ink)}
  .vcj-view-filter-sep{width:1px;height:18px;margin:0 4px;background:var(--border-soft)}

  .vc-list.cards{display:flex;flex-direction:column;gap:14px}
  .vc-list.cards .vcj-tile{display:flex;min-width:0;flex-direction:column}
  .vc-list.cards .vcj-tile .vcj-group-h{margin:0 2px 7px;color:var(--ink-4)}

  .vc-list.chronology{display:flex;flex-direction:column;gap:18px}
  /* Chronologie B · la date reste un repère posé sur le plan du Vault ; seule la note est un
     objet de premier plan. Le type partage la colonne temporelle et libère le menu d’actions.
     Largeur FIGÉE, décision Landry du 2026-08-04 (SIH-103). Elle portait `clamp(150px,12vw,168px)`,
     donc une mesure sur l'ÉCRAN posée dans un plan de travail qui, lui, perd 208 px quand la
     barre se déplie : à 1280 la colonne restait à 153,6 px que le plan fasse 1200 ou 992.
     Le terme fluide n'était vivant que sur la bande 1250-1400, pour 18 px de variation.
     Le contenu de cette colonne est une date et une étiquette de type : il ne grandit pas avec
     le plan. Un repère fixe dit la vérité que la fluidité faisait semblant de dire. */
  .vcj-chrono-row{position:relative;display:grid;grid-template-columns:168px minmax(0,1fr);gap:18px;align-items:start;margin:0;padding:0;border:0;background:transparent}
  .vcj-chrono-row.without-date{grid-template-columns:minmax(0,1fr)}
  /* La date demarre au BORD de la carte, pas au niveau de son titre (decision Landry,
     2026-08-04, SIH-106). Elle portait `padding-top:var(--space-5)`, soit 16 px, ce qui est
     exactement l'encart interieur de la carte (1 px de bord + 15 px de retrait sur `.vcj-main`) :
     un calage deliberé sur le TEXTE du titre, mesure a 456 px pour les deux. Landry cale sur la
     section, pas sur son texte : « l'espace blanc qui entoure l'entree ». Sans retrait haut, la
     premiere ligne de la date tombe a 440, le haut exact de la carte.
     La variante mobile portait deja `padding:0 3px` : ce retrait a zero reconcilie les deux. */
  .vcj-chrono-date{position:relative;display:flex;min-width:0;min-height:62px;flex-direction:column;align-items:flex-start;padding:0 0 0 var(--space-2);text-align:left;font-size:12px;line-height:15px;color:var(--ink-2)}
  .vcj-chrono-date.unknown{color:var(--ink-4);font-style:italic}
  .vcj-chrono-date .vcj-chrono-type{max-width:100%;margin-top:7px;font-style:normal}
  .vcj-chrono-row>.vcj{outline:0;min-width:0;margin:0;border:1px solid var(--content-border);border-radius:10px;overflow:visible;background:var(--content-bg);box-shadow:none;}
  .vcj-chrono-row>.vcj:hover:not(.open),.vcj-chrono-row>.vcj:focus-within:not(.open){border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .vcj-chrono-row>.vcj.menu-open:not(.open){border-color:var(--content-hover-border);background:var(--content-hover-bg)}
  .vcj-chrono-row>.vcj .vcj-main{padding:16px}
  .vcj-chrono-row>.vcj .vcj-title{font-size:14px;line-height:19px}
  .vcj-chrono-row>.vcj .vcj-prose{max-width:68ch;font-size:13px;line-height:18px}
  .vcj-chrono-row>.vcj .vcj-extra{margin-top:8px}
  .vcj-chrono-row>.vcj .vcj-stats{margin-top:10px;padding-top:9px}
  .vcj-chrono-row>.vcj .vcj-impact-cta{max-width:none}

  @media(max-width:760px){
    .vcj-view-toolbar{align-items:flex-start;flex-direction:column-reverse}
    .tabbar.vcj-view-switch{align-self:flex-end}

    .vcj-chrono-row{grid-template-columns:144px minmax(0,1fr);gap:14px}
    .vcj-chrono-row.without-date{grid-template-columns:minmax(0,1fr)}
  }

  @media(max-width:620px){
    .vcj-chrono-row{grid-template-columns:minmax(0,1fr);gap:8px}
    .vcj-chrono-date{min-height:0;align-items:flex-start;flex-direction:row;gap:7px;padding:0 3px;text-align:left}
    .vcj-chrono-date .vcj-chrono-type{margin-top:0}
  }

  /* Rangées étiquetées Tags / Compétences / Outils CONSERVÉES (décision Landry 24-07).
     Seul ajustement : la tuile passe sur fond blanc chaud pour rester lisible sur la
     carte au remplissage doux (--bg-2 sur --bg-2 serait invisible). */
  /* Les trois familles restent trois rangées, même quand la largeur permettrait de les
     mettre bout à bout : la colonne des libellés structure la lecture du fait. */
  .vcj-extra{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:start;gap:5px 8px;margin-top:9px}
  .vcj-extra-row{display:contents}
  /* Structure d'origine, habillage harmonisé planche G (décision Landry 25-07) :
     étiquettes en sentence case, tuiles SANS bordure (non interactives — le hairline
     est réservé aux éléments interactifs), texte lisible. */
  .vcj-extra-l{display:inline-flex;align-items:center;gap:4px;flex:0 0 auto;min-height:20px;font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-normal);text-transform:none;color:var(--ink-3);padding-top:2px}
  .vcj-extra-l svg{width:11px;height:11px;color:var(--ink-4)}
  .vcj-extra-v{display:flex;flex-wrap:wrap;gap:5px;min-width:0}
  .vcj-xtag{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:6px;background:var(--surface);border:0;color:var(--ink-3);font-size:11px;font-weight:500}
  /* OUTILS = même tuile EXACTE que les Tags/Compétences (Landry : pas de perturbation visuelle). */
  /* ============================================================================
     Profil — tuiles d'ATTRIBUT compactes (.vpf-*) + pop-up guidé.
     Pas de STAR : liste d'éléments (outils/langues/certifs…) capturés via questions.
     ========================================================================== */
  .vpf-tile{display:flex;align-items:flex-start;gap:11px;text-align:left;width:100%;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;cursor:pointer;transition:border-color .18s var(--ease-out),box-shadow .18s var(--ease-out);background:var(--content-bg);box-shadow:none;}
  .vpf-tile:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .vpf-tile:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .vpf-ic{flex:0 0 auto;width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--bg-2);border:1px solid var(--border);color:var(--accent)}
  .vpf-ic.lg{width:36px;height:36px;border-radius:8px}
  .vpf-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
  .vpf-name{font-size:14px;font-weight:600;color:var(--ink);letter-spacing:var(--tracking-tight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
  .vpf-meta{font-size:var(--type-meta-size);line-height:var(--type-meta-line);color:var(--ink-3);text-wrap:pretty;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .vpf-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px}
  .vpf-addtile{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;background:transparent;border:1px dashed var(--border-strong);border-radius:10px;padding:12px;cursor:pointer;color:var(--ink-3);font:inherit;font-size:13px;font-weight:500;transition:border-color .18s var(--ease-out),color .18s var(--ease-out),background-color .18s var(--ease-out)}
  .vpf-addtile:hover,.vpf-addtile.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
  .vpf-addtile-plus{display:flex}
  /* ── Vue magazine du hub profil ── */
  /* Pas de max-width : les tuiles grandissent toujours pour remplir TOUTE la largeur du
     groupe. Ainsi chaque groupe garde les mêmes bords (gauche/droite), qu'il ait 4 tuiles
     ou 3 (si une section est masquée) — Parcours s'aligne sur Synthèse / Profil. */
  .vpf-mag-sec{border:1px solid var(--content-border);border-radius:10px;cursor:pointer;flex:1 1 220px;min-width:200px;overflow:hidden;text-align:left;transition:border-color .15s var(--ease-out),box-shadow .15s var(--ease-out);background:var(--content-bg);box-shadow:none;}
  .vpf-mag-sec:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .vpf-mag-sec:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .vpf-mag-backrow{gap:10px}
  /* Voile commun des fenêtres modales ; leur géométrie reste propre à chaque surface. */
  .modal-scrim,
  .document-preparation[data-surface="overlay"],
  .document-generation,
  .mdc-ov,
  .ui-window-scrim,
  .ui-palette-scrim{background:var(--scrim);-webkit-backdrop-filter:none;backdrop-filter:none}

  /* Saisie d'une entrée de profil : la coque est la fenêtre Travail commune ; le corps empile ses champs. */
  .vpf-pop-body{display:flex;flex-direction:column;gap:15px}
.vpf-overflow-filter{position:relative;display:flex;align-items:center;gap:var(--space-3);flex:1;min-width:0}
.vpf-overflow-filter .tabbar{flex-wrap:nowrap;white-space:nowrap;flex-shrink:0}
.vpf-overview-toolbar{--profile-control-height:40px;font-size:13px}
.vpf-overflow-filter>.card-options{margin-left:0}
/* La copie de mesure garde sa largeur naturelle hors de la zone défilable. */
.vpf-overflow-measure{position:absolute;right:100%;top:0;visibility:hidden;pointer-events:none;display:flex;width:max-content;gap:var(--space-3)}
.vpf-tool-visual{width:30px;height:30px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--ink-3)}
.vpf-tool-visual img{width:24px;height:24px;object-fit:contain}
  .vpf-overview-toolbar{display:flex;align-items:center;gap:var(--space-4);flex-wrap:nowrap;min-width:0}
  .vpf-overview-search{display:flex;align-items:center;gap:var(--space-3);height:var(--profile-control-height);box-sizing:border-box;padding:0 var(--space-4);border:1px solid var(--input-rest-border);border-radius:var(--radius-sm);color:var(--ink-3);flex:0 0 clamp(240px,32%,400px);min-width:0}
  .vpf-overview-search input{width:100%;min-width:0;border:0;background:transparent;color:var(--ink);font:inherit;outline:none}
  /* ── Bibliothèque professionnelle (DEV-537) : l'écran « Mon profil » du Vault ──────────────
     Cette section ne porte que la géométrie propre à l'écran : la grille à trois colonnes, la
     tête de rubrique, la variante de grille des lignes, la fiche dans la colonne de droite et la
     grille des quatre chiffres. Tout le reste vient des classes partagées. Aucune couleur ni
     taille de texte hors jetons ; les seules longueurs littérales sont des largeurs de colonne
     et des seuils de requête de conteneur, qu'un jeton ne peut pas porter.
     Décision Landry du 12 octobre 2026 : le profil quitte la progression de marges des CV et
     des lettres ; sa colonne de gauche est collée au bord, comme la liste de SIHAGE Match. */

  /* En-tête : la rangée d'onglets du Vault, alignée sur la colonne de gauche. */
  .vpf-hub-head{padding-right:0}
  .vpf-hub-head > .vc-filter-bar{padding-left:var(--space-4)}
  .vpf-hub-head .tabbar{flex:1 1 auto}
  .vpf-hub-head .tabbar-auxiliary{margin-left:auto}
  .vpf-hub-personal{display:inline-flex;align-items:center;gap:var(--space-3)}

  /* Les trois colonnes. La colonne principale du Vault espace ses enfants ; ici les colonnes
     touchent l'en-tête. */
  .vc-main-col > .vpf-hub-body{flex:1 1 0;min-height:0;margin-top:calc(-1 * var(--space-4))}
  .vpf-hub-body{container:vpf-hub / inline-size;display:grid;grid-template-rows:minmax(0,1fr);min-height:0}
  /* La largeur de la colonne de droite, celle du bilan : fluide, bornée, déclarée une fois. */
  .vpf-hub-grid{--vpf-hub-menu-w:272px;--vpf-hub-aside-w:clamp(352px,30%,440px);
    display:grid;grid-template-columns:var(--vpf-hub-menu-w) minmax(0,1fr) var(--vpf-hub-aside-w);grid-template-rows:minmax(0,1fr);min-height:0}

  /* La fiche a sa propre largeur : c'est là que le client relit ce qu'il a fait. Elle partage
     l'espace à parts égales avec la liste, jusqu'à 760 px ; le bilan garde la sienne. Le passage
     de l'une à l'autre se fait d'un coup : en glissant, les blocs de la liste changeaient de
     colonne en route (décision de Landry du 13 octobre 2026). */
  .vpf-hub-grid[data-aside="fiche"]{--vpf-hub-aside-w:clamp(352px,calc((100% - var(--vpf-hub-menu-w)) / 2),760px)}

  /* Gauche : collée au bord comme la liste de SIHAGE Match, dont elle reprend la déclaration. */
  .vpf-hub-menu{gap:var(--space-4);overflow-y:auto}
  .vpf-hub-search{flex:1 1 auto}
  .vpf-hub-menu-note{margin:auto 0 0;padding:var(--space-4) var(--space-3) 0;font-size:var(--type-meta-size);line-height:var(--type-meta-line);color:var(--ink-3)}

  /* Centre : garde ses marges. Il se mesure lui-même pour passer ses blocs sur une colonne. */
  .vpf-hub-center{position:relative;display:flex;min-width:0;min-height:0;container:vpf-hub-center / inline-size}
  /* Le bas de la liste garde la place du message de l'application : après un ajout, le bandeau
     « Ajouter » reste atteignable sans attendre que le message s'efface. */
  .vpf-hub-main{flex:1 1 auto;min-width:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--space-4);
    padding:calc(var(--space-5) + var(--space-2)) calc(var(--space-5) + var(--space-4)) calc(var(--space-5) * 5)}
  .vpf-hub-main > *{flex-shrink:0}
  .vpf-hub-rubric-head{display:flex;align-items:center;min-width:0}
  .vpf-hub-filters{display:flex;min-width:0}
  .vpf-hub-title{margin:0;font-size:var(--type-section-size);line-height:var(--type-section-line);font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink)}
  .vpf-hub-sub{margin:calc(-1 * var(--space-3)) 0 0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4);font-size:var(--type-body-size);color:var(--ink-3)}
  .vpf-hub-note{display:inline-flex;align-items:center;gap:var(--space-2)}
  .vpf-hub-note > i{flex:none;width:var(--space-3);height:var(--space-3);border-radius:var(--radius-pill);background:var(--good)}
  .vpf-hub-note[data-tone="bare"] > i{width:var(--space-5);height:var(--space-3);border-radius:var(--radius-xs);background:transparent;border:1px dashed var(--border-strong)}
  .vpf-hub-stack{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}
  .vpf-hub-columns{columns:2;column-gap:var(--space-5)}
  .vpf-hub-columns > *{break-inside:avoid;margin-bottom:var(--space-5)}

  /* Carte : la tuile du profil, avec la période à droite. L'ouverte se marque en neutre. */
  .vpf-hub-card[aria-pressed="true"]{background:var(--content-selected-bg);border-color:var(--content-selected-border)}
  /* Le rôle de contour « contenu » éteint l'anneau de la tuile : la carte le rallume au clavier. */
  .vpf-tile.vpf-hub-card:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .vpf-hub-card > .vpf-body{gap:var(--space-3)}
  .vpf-hub-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-2) var(--space-5);min-width:0}
  .vpf-hub-card-id{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
  .vpf-hub-card-name{flex:none;white-space:normal;overflow-wrap:anywhere}
  .vpf-hub-card-org{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);font-size:var(--type-meta-size);color:var(--ink-3)}
  .vpf-hub-card-when{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-2);flex:none;font-size:var(--type-meta-size);color:var(--ink-3);white-space:nowrap}
  .vpf-hub-card-when > strong{font-weight:600;color:var(--ink)}
  .vpf-hub-card-counts{display:flex;flex-wrap:wrap;gap:var(--space-3)}

  /* Bloc : le cadre et la tête des tables du profil, autour d'étiquettes ou de lignes. */
  .vpf-hub-block{background:var(--surface)}
  .vpf-hub-block-head{margin:0;display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-5);background:var(--surface);font-size:var(--type-body-size);font-weight:600;color:var(--ink)}
  .vpf-hub-block-chips{padding:0 var(--space-5) var(--space-5)}
  /* La puce juste ajoutée se signale comme l’ouverte, en sélection neutre et filet plein (même sans preuve), le temps de la retrouver (DEV-560). */
  .vpf-hub-block-chips .ui-chip[data-fresh="true"]:not([aria-pressed="true"]){border-style:solid;border-color:var(--content-selected-border);background:var(--content-selected-bg);color:var(--ink)}

  /* Ligne nommée : variante de grille de la ligne de table (vignette, nom, repère, chevron). */
  .list-row.vpf-hub-row{width:100%;grid-template-columns:auto minmax(0,1fr) auto auto;gap:var(--space-4);padding:var(--space-3) var(--space-4);
    background:transparent;border:0;border-top:1px solid var(--border);border-radius:0;font-family:inherit;color:var(--ink);text-align:left}
  .list-row.vpf-hub-row:first-child,.vpf-hub-block-head + .list-row.vpf-hub-row{border-top:0}
  .list-row.vpf-hub-row[data-plain="true"]{grid-template-columns:minmax(0,1fr) auto auto}
  .list-row.vpf-hub-row:hover{background:var(--hover-bg)}
  /* La ligne ouverte prend le contour neutre de la carte ouverte : le fond seul se confond avec le survol. */
  .list-row.vpf-hub-row.selected{background:var(--select-bg);box-shadow:none;color:var(--select-ink)}
  .vpf-hub-row-main{display:flex;flex-direction:column;gap:calc(var(--space-2) / 2);min-width:0}
  /* Le nom d'un élément se lit toujours en entier : il passe à la ligne plutôt que d'être coupé. */
  .vpf-hub-row > strong,.vpf-hub-row-main > strong{font-weight:600;min-width:0;overflow-wrap:anywhere}
  .vpf-hub-row-sub{font-size:var(--type-meta-size);color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vpf-hub-row-meta{display:inline-flex;align-items:center;gap:var(--space-3);font-size:var(--type-meta-size);color:var(--ink-3);white-space:nowrap}
  .vpf-hub-row > svg{color:var(--ink-3)}
  .vpf-hub-visual{flex:none;display:grid;place-items:center;width:calc(var(--space-5) * 2);height:calc(var(--space-5) * 2)}
  .vpf-hub-mark{padding:0 calc(var(--space-2) / 2);border-radius:var(--radius-xs);background:var(--accent-soft);color:var(--ink)}

  /* Ajouter : le bandeau en pointillé existant, puis un nom à saisir. */
  .vpf-hub-addtile:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  /* Le second ajout d'une rubrique (un bénévolat, une certification) reste discret sous le bandeau. */
  .vpf-hub-addrest{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);min-width:0;font-size:var(--type-meta-size);color:var(--ink-3)}
  .vpf-hub-addrest > .vpf-hub-addtile{align-self:stretch}
  .vpf-hub-add{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
  .vpf-hub-add-line{display:flex;align-items:center;gap:var(--space-3)}
  .vpf-hub-add-line > :first-child{flex:1 1 auto;min-width:0}
  .vpf-hub-add-hint{font-size:var(--type-meta-size);color:var(--ink-3)}
  .vpf-hub-add--form{gap:var(--space-4);padding:var(--space-5);background:var(--surface);overflow:visible}
  .vpf-hub-add-title{margin:0;font-size:var(--type-card-size);line-height:var(--type-card-line);font-weight:600;color:var(--ink)}
  .vpf-hub-add-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-3)}
  .vpf-hub-add-actions > .vpf-hub-add-hint{flex:1 1 auto}

  /* Droite : le bilan. La colonne garde l'allure du volet du Vault, mais c'est la grille de
     l'écran qui décide de sa présence, pas le repli du volet des carnets. */
  .vpf-hub-grid > .vpf-hub-aside{display:flex;min-width:0}
  /* La colonne reçoit le focus quand une fiche s'ouvre : c'est un point d'arrivée, pas une cible. */
  .vpf-hub-aside:focus{outline:0}
  .vc-aside-identity.vpf-hub-identity{background:var(--sidebar-bg);border-color:transparent}
  .vpf-hub-figures{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));color:var(--sidebar-fg-strong);border-top:1px solid color-mix(in srgb,var(--sidebar-fg-strong) 18%,transparent)}
  .vpf-hub-figures > .key-figure{padding:var(--space-4) var(--space-4) var(--space-4) 0;outline-offset:calc(-1 * var(--space-2) / 2)}
  .vpf-hub-figures > .key-figure:nth-child(even){padding-left:var(--space-4);border-left:1px solid color-mix(in srgb,var(--sidebar-fg-strong) 18%,transparent);border-radius:0}
  .vpf-hub-figures > .key-figure:nth-child(n+3){border-top:1px solid color-mix(in srgb,var(--sidebar-fg-strong) 18%,transparent);padding-bottom:0}
  /* Fenêtre étroite : l'entrée « Votre bilan » et son retour n'existent que dans le repli. */
  .vpf-hub-bilan-entry,.vpf-hub-bilan-back{display:none}
  /* La carte reste fixe : seul le bilan défile. */
  .vpf-hub-bilan{display:flex;flex-direction:column;flex:1 1 0;min-height:0}
  .vpf-hub-bilan-scroll{flex:1 1 0;min-height:calc(var(--space-5) * 8);overflow-y:auto;margin-right:calc(-1 * var(--space-3));padding-right:var(--space-3)}
  .vpf-hub-bilan-scroll:focus-visible{outline:0;box-shadow:var(--ring-focus);border-radius:var(--radius-sm)}
  .vpf-hub-bilan-text{display:flex;flex-direction:column;gap:var(--space-4);font-size:var(--type-body-size);line-height:var(--type-body-line);color:var(--ink-2)}
  .vpf-hub-bilan-text p{margin:0;text-wrap:pretty}
  .vpf-hub-bilan-text strong{font-weight:600;color:var(--ink)}
  .vpf-hub-bilan-text .text-link{color:var(--ink)}
  .vpf-hub-bilan-empty{margin:0;font-size:var(--type-body-size);line-height:var(--type-body-line);color:var(--ink-3)}
  .vpf-hub-bilan-points{display:flex;flex-direction:column;gap:var(--space-5)}

  /* Droite : la fiche, à la même place et à la même largeur. */
  .vpf-hub-aside[data-view="fiche"]{padding:0;gap:0;overflow:hidden}
  .vpf-hub-fiche-bar,.vpf-hub-fiche-foot{flex:none}
  .vpf-hub-back-narrow{display:none}
  .vpf-hub-fiche-body{flex:1 1 0;min-height:0;overflow-y:auto;padding:var(--space-5)}
  .vpf-hub-fiche-head{display:flex;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-5)}
  .vpf-hub-fiche-id{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
  .vpf-hub-fiche-kind{font-size:var(--type-meta-size);color:var(--ink-3)}
  .vpf-hub-fiche-title{margin:0;font-size:var(--type-section-size);line-height:var(--type-section-line);font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink);overflow-wrap:anywhere}
  .vpf-hub-fiche-meta{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);font-size:var(--type-body-size);color:var(--ink-3)}
  .vpf-hub-place{margin-bottom:var(--space-5)}
  .vpf-hub-place .ui-folder-select{display:flex;min-width:0}
  .vpf-hub-place .ui-folder-select__control{min-width:0}
  .vpf-hub-place .ui-folder-select__label{color:var(--ink-3)}
  /* Le menu partagé se déclare plus bas, à poids égal : ce qui le contredit prend un sélecteur
     renforcé. Il s'ancre à gauche, et garde 8 px de retrait où flotte la pastille de défilement
     (le menu partagé en donne 5). */
  .vpf-hub-h{margin:0 0 var(--space-3);display:flex;align-items:center;gap:var(--space-3);font-size:var(--type-body-size);font-weight:500;color:var(--ink-3)}
  .vpf-hub-h--inner{margin-top:var(--space-5)}
  /* Dans la colonne de droite, l'intitulé d'une ligne de liens passe au-dessus de ses étiquettes. */
  .vpf-hub-fiche-body .vpf-capability-row{grid-template-columns:minmax(0,1fr);gap:var(--space-2)}
  .vpf-hub-fiche-body .vpf-capability-row > span{padding-top:0}
  .vpf-hub-fiche-list{margin-top:var(--space-4)}
  .vpf-hub-fiche-list .vpf-view-list-item{font-size:var(--type-body-size)}
  .list-row.vpf-hub-proof{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-3);width:100%;padding:var(--space-4);
    background:transparent;border:0;border-top:1px solid var(--border);border-radius:0;font-family:inherit;color:var(--ink);text-align:left}
  .list-row.vpf-hub-proof:first-child{border-top:0}
  .list-row.vpf-hub-proof:hover{background:var(--hover-bg)}
  .vpf-hub-proof-text{font-size:var(--type-body-size);line-height:var(--type-body-line);text-wrap:pretty}
  .vpf-hub-proof-source{display:flex;align-items:center;gap:var(--space-3);min-width:0;font-size:var(--type-meta-size);color:var(--ink-3)}
  .vpf-hub-proof-source strong{font-weight:600;color:var(--ink-2)}
  .vpf-hub-proof-go{margin-left:auto;display:inline-flex;align-items:center;gap:var(--space-2);font-weight:500;color:var(--ink-2);white-space:nowrap}
  .vpf-hub-pending{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--type-meta-size);color:var(--warn-quiet)}

  /* Quand la place manque. Centre étroit (barre de navigation ouverte, assistant ouvert) : les
     blocs passent sur une colonne et la période d'une carte descend sous son intitulé. */
  @container vpf-hub-center (max-width: 620px){
    .vpf-hub-columns{columns:1}
    .vpf-hub-card-top{flex-direction:column}
    .vpf-hub-card-when{flex-direction:row;align-items:baseline;gap:var(--space-3);white-space:normal}
  }
  /* Plus étroit encore : la colonne de droite se replie. Une fiche ouverte prend la place de la
     liste, et son bouton de retour dit alors « Retour à la liste ». Le bilan reste atteignable par
     son entrée dans la colonne de gauche ; il prend la même place, avec le même retour. */
  @container vpf-hub (max-width: 1000px){
    .vpf-hub-grid{grid-template-columns:var(--vpf-hub-menu-w) minmax(0,1fr)}
    .vpf-hub-grid > .vpf-hub-aside{display:none}
    .vpf-hub-grid[data-aside] > .vpf-hub-center{display:none}
    .vpf-hub-grid[data-aside] > .vpf-hub-aside{display:flex}
    .vpf-hub-bilan-entry{display:block}
    .vpf-hub-bilan-back{display:block}
    .vpf-hub-back-wide{display:none}
    .vpf-hub-back-narrow{display:inline}
  }
  /* Fenêtre très réduite : les rubriques passent en rangée défilante au-dessus du contenu, qui
     prend alors toute la largeur. Sur téléphone, l'application garde son affichage de bureau : ce
     repli sert les fenêtres réduites d'un ordinateur. */
  @container vpf-hub (max-width: 640px){
    .vpf-hub-grid{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}
    .vpf-hub-grid > .vpf-hub-menu{border-right:0;border-bottom:1px solid var(--border);overflow:visible}
    .vpf-hub-menu .side-menu,.vpf-hub-menu .side-menu__group{flex-direction:row}
    .vpf-hub-menu .side-menu{overflow-x:auto}
    .vpf-hub-menu .side-menu__item{flex:none;width:auto}
    .vpf-hub-menu-note{display:none}
  }
  .vpf-view-list{display:flex;flex-direction:column;gap:9px}
  .vpf-view-list-item{display:grid;grid-template-columns:16px minmax(0,1fr);gap:8px;align-items:start;color:var(--ink-2);font-size:13px;line-height:1.5}
  .vpf-view-list-item>svg{color:var(--accent-2);margin-top:3px}
  .vpf-capability-row{display:grid;grid-template-columns:110px minmax(0,1fr);gap:12px;align-items:start;margin-top:9px}
  .vpf-capability-row>span{font-size:12px;font-weight:600;color:var(--ink-3);padding-top:4px}
  .vpf-opt{font-style:normal;font-weight:500;font-size:11px;color:var(--ink-4)}
  .vpf-chips{display:flex;flex-wrap:wrap;gap:6px}
  .vpf-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 16px}
  /* La liste de mots-clés est le champ : la saisie posée dedans n'a pas de second cadre. */
  .vpf-tagedit,.aev-tag-input,.vdp-tagedit{display:flex;flex-wrap:wrap;gap:6px;align-items:center;border:1px solid var(--input-rest-border);border-radius:var(--radius-md);background:var(--surface);padding:4px 6px;min-height:32px}
  .vpf-tagedit:focus-within,.aev-tag-input:focus-within,.vdp-tagedit:focus-within{border-color:var(--accent);box-shadow:var(--ring-focus)}
  :is(.vpf-tagedit,.aev-tag-input,.vdp-tagedit) .input.edge[data-edge-role],:is(.vpf-tagedit,.aev-tag-input,.vdp-tagedit) .input.edge[data-edge-role]:is(:hover,:focus,:focus-visible,:focus-within){border-color:transparent;background:transparent;box-shadow:none}
  .vpf-foot-note{flex:1;min-width:0;color:var(--ink-4);font-size:12px;line-height:1.35;font-family:var(--font-sans);text-transform:uppercase;letter-spacing:var(--tracking-wide);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* Modale section profil · sidebar interne (Infos perso, Langues, Centres d'intérêt). La coque
     est la fenêtre Travail commune (.ui-window) ; la grille du rail de 320 px reste la sienne. */
  .ui-window.vpf-section-modal{display:grid;grid-template-columns:320px minmax(0,1fr);grid-template-rows:auto 1fr;grid-template-areas:"rail sysbar" "rail body";padding:0}
  .vpf-section-body{display:contents}
  .vpf-section-sysbar{grid-area:sysbar;display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;padding:12px 16px 12px 20px;background:var(--window-head-bg);border-bottom:1px solid var(--border)}
  .vpf-section-sysbar-l{display:flex;align-items:center;gap:8px;min-width:0}
  .vpf-section-sysbar-r{display:flex;align-items:center;gap:6px;flex-shrink:0}
  .vpf-section-context{font-family:var(--font-sans);font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);white-space:nowrap}
  .vpf-section-side{grid-area:rail;box-sizing:border-box;height:100%;min-height:0;overflow:hidden;border-right:1px solid var(--border);background:var(--bg-app);padding:0;display:flex;flex-direction:column;min-width:0}
  .vpf-section-railid{display:flex;flex-direction:column;gap:8px;padding:12px 14px;background:var(--sidebar-bg);color:var(--sidebar-fg-strong);flex:0 0 auto}
  .vpf-section-railid-head{display:flex;align-items:flex-start;gap:9px;min-width:0}
  .vpf-section-railid-head>div{min-width:0;display:flex;flex-direction:column;gap:2px}
  .vpf-section-railid-head span:not(.vpf-rail-avatar){font-family:var(--font-sans);font-size:13px;letter-spacing:.07em;text-transform:uppercase;color:color-mix(in srgb,var(--sidebar-fg-strong) 55.00000000000001%,transparent)}
  .vpf-section-railid h3{margin:0;font-size:13px;font-weight:600;color:var(--sidebar-fg-strong);letter-spacing:var(--tracking-normal);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .vpf-section-railid p{margin:0;font-size:13px;line-height:1.3;color:color-mix(in srgb,var(--sidebar-fg-strong) 68%,transparent);text-wrap:pretty}
  /* Carte d'identité du rail (section identity) : bannière photo 4:3 + chips overlayés
     en badges flottants sur le bas + nom/meta dessous. Sans photo, fallback avatar carré. */
  .vpf-rail-banner{position:relative;width:100%;aspect-ratio:4/3;border-radius:10px;overflow:hidden;background:color-mix(in srgb,var(--sidebar-fg-strong) 6%,transparent);border:1px solid color-mix(in srgb,var(--sidebar-fg-strong) 10%,transparent)}
  .vpf-rail-banner>img{width:100%;height:100%;object-fit:cover;display:block}
  /* Variante B3 : pastilles rondes icône-seulement, gradient minimal pour ne pas masquer
     la photo. Tooltip CSS-only au survol (data-tooltip → ::after). */
  .vpf-rail-badges{position:absolute;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;justify-content:center;gap:5px;padding:14px 10px 8px;background:linear-gradient(180deg,transparent 0%,color-mix(in srgb,var(--sidebar-bg) 30%,transparent) 55%,color-mix(in srgb,var(--sidebar-bg) 55%,transparent) 100%)}
  .vpf-rail-icon{position:relative;width:24px;height:24px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--sidebar-bg) 55%,transparent);border:1px solid color-mix(in srgb,var(--sidebar-fg-strong) 22%,transparent);color:var(--sidebar-fg-strong);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);cursor:default}
  .vpf-rail-icon>svg{color:var(--sidebar-fg-strong)}
  .vpf-rail-icon::after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:color-mix(in srgb,var(--sidebar-bg) 92%,transparent);color:var(--sidebar-fg-strong);padding:4px 8px;border-radius:6px;font-size:11px;font-weight:500;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .12s var(--ease-out);z-index:20}
  .vpf-rail-icon::before{content:"";position:absolute;bottom:calc(100% + 2px);left:50%;transform:translateX(-50%);border:4px solid transparent;border-top-color:color-mix(in srgb,var(--sidebar-bg) 92%,transparent);opacity:0;transition:opacity .12s var(--ease-out);z-index:20}
  .vpf-rail-icon:hover::after,.vpf-rail-icon:focus-visible::after,.vpf-rail-icon:hover::before,.vpf-rail-icon:focus-visible::before{opacity:1}
  /* Chips à valeur longue (email…) : tronqués avec ellipsis pour ne pas casser la mise en page. */
  .vpf-rail-chip.is-truncated{max-width:160px;min-width:0}
  .vpf-rail-chip.is-truncated>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vpf-rail-idcard{display:flex;align-items:center;gap:10px;min-width:0}
  .vpf-rail-idtxt{min-width:0;display:flex;flex-direction:column;gap:2px}
  
  .vpf-rail-name{margin:0;font-size:16px;font-weight:600;color:var(--sidebar-fg-strong);letter-spacing:var(--tracking-normal);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .vpf-rail-meta{margin:0;font-size:12px;line-height:1.3;color:color-mix(in srgb,var(--sidebar-fg-strong) 68%,transparent)}
  /* Email / téléphone sous le nom : grille auto-fit → 2 colonnes si la largeur le permet,
     sinon repli sur une colonne. Troncature ellipsis sur l'email long. */
  .vpf-rail-contacts{list-style:none;margin:7px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:3px 10px}
  .vpf-rail-contact{display:flex;align-items:center;gap:5px;font-size:11px;line-height:1.3;color:color-mix(in srgb,var(--sidebar-fg-strong) 78%,transparent);min-width:0}
  .vpf-rail-contact>svg{flex-shrink:0;color:color-mix(in srgb,var(--sidebar-fg-strong) 55.00000000000001%,transparent)}
  .vpf-rail-contact>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  
  .vpf-rail-chips{display:flex;gap:5px;flex-wrap:wrap}
  .vpf-rail-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:500;color:color-mix(in srgb,var(--sidebar-fg-strong) 85%,transparent);background:color-mix(in srgb,var(--sidebar-fg-strong) 8%,transparent);border:1px solid color-mix(in srgb,var(--sidebar-fg-strong) 10%,transparent);border-radius:99px;padding:3px 8px;line-height:1}
  .vpf-rail-chip>svg{flex-shrink:0;color:color-mix(in srgb,var(--sidebar-fg-strong) 78%,transparent)}
  .vpf-rail-chip.off{color:color-mix(in srgb,var(--sidebar-fg-strong) 32%,transparent);background:transparent;border-style:dashed;border-color:color-mix(in srgb,var(--sidebar-fg-strong) 18%,transparent)}
  .vpf-rail-chip.off>svg{color:color-mix(in srgb,var(--sidebar-fg-strong) 30%,transparent)}
  .vpf-section-nav{display:flex;flex-direction:column;gap:9px;min-height:0;overflow-y:auto;overflow-x:hidden;padding:12px 14px 14px}
  .vpf-section-panel{grid-area:body;box-sizing:border-box;height:100%;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:20px 22px 0}
  .vpf-section-detail{min-height:100%;display:flex;flex-direction:column}
  .vpf-section-detail .cve-profile-detail-grid{flex:1;align-content:start}
  .vpf-section-detail .cve-profile-detail-actions{position:sticky;bottom:0;margin:auto -22px 0;padding:9px 22px;min-height:52px;background:var(--surface);border-top:1px solid var(--border);box-shadow:none}
  .vpf-section-detail .cve-profile-detail-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:12px}
  .vpf-section-detail .cve-profile-detail-head>div{min-width:0}
  .cve-profile-head-actions{margin-left:0;display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-shrink:0;justify-self:end}
  .vpf-section-detail .cve-profile-intro{border:1px solid var(--border);border-radius:8px;background:var(--surface-2);padding:12px 14px;max-width:none}
  .vpf-section-detail .cve-profile-field.is-empty:not(.is-readonly){background:var(--surface);border-style:dashed}
  .vpf-section-detail .cve-profile-field.is-empty.is-readonly>strong{color:var(--ink-4);font-weight:500}
  .vpf-section-detail .cve-profile-field.is-empty:not(.is-readonly)>strong{color:var(--ink-3);font-weight:600}
  .vpf-section-detail .cve-profile-field.is-source{background:var(--surface-2)}
  /* Variante C (validée juin 2026) : deux bandeaux empilés (Photo en haut, Bibliothèque en
     bas), chacun pleine largeur. Le bandeau Photo a deux sous-rangées : (1) photo + texte
     côte à côte, (2) chips « Affichage » en bandeau plein-largeur dessous. */
  .vpf-photo-layout{display:flex;flex-direction:column;gap:12px;flex:1;min-height:0}
  .vpf-photo-stage{display:flex;flex-direction:column;gap:12px;border:1px solid var(--border);border-radius:8px;background:var(--surface-2);padding:14px}
  .vpf-photo-stage-top{display:flex;gap:14px;align-items:flex-start}
  .vpf-photo-display{margin:0}
  .vpf-photo-display .cve-profile-chiprow{flex-wrap:wrap}
  .vpf-photo-stage.drag{border-color:var(--ink-4);background:var(--hover-bg)}
  .vpf-photo-preview{width:140px;height:170px;border-radius:8px;border:1px solid var(--border);background:var(--surface);display:grid;place-items:center;color:var(--ink-4);overflow:hidden}
  .vpf-photo-preview.has-img{background:var(--ink)}
  .vpf-photo-preview img{width:100%;height:100%;object-fit:cover;display:block}
  .vpf-photo-stage-copy{display:flex;flex-direction:column;gap:4px;min-width:0}
  .vpf-photo-stage-copy span,.vpf-photo-library-title{font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4)}
  .vpf-photo-stage-copy strong{font-size:14px;color:var(--ink)}
  .vpf-photo-stage-copy p{margin:0;font-size:12px;line-height:1.45;color:var(--ink-3)}
  .vpf-photo-side{display:flex;flex-direction:column;gap:12px;min-width:0}
  .vpf-photo-library{display:flex;flex-direction:column;gap:8px;border:1px solid var(--border);border-radius:8px;background:var(--surface-2);padding:10px}
  .vpf-photo-library-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-bottom:2px}
  .vpf-photo-library-head .vpf-photo-library-title{flex:0 0 auto}
  /* La biblio devient un bandeau plein-largeur : on dispose les vignettes en grille
     responsive (min 220px par tuile). Elles continuent à s'empiler proprement si trop nombreuses. */
  .vpf-photo-library>.vpf-photo-thumb,.vpf-photo-library>.vpf-photo-empty{margin:0}
  .vpf-photo-library>.vpf-photo-thumb{display:flex}
  .vpf-photo-library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
  .vpf-photo-thumb{display:flex;align-items:center;gap:4px;width:100%;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);padding:7px;color:var(--ink-2);text-align:left}
  .vpf-photo-thumb:not(.is-readonly):hover{border-color:var(--border-strong);background:var(--surface-2)}
  .vpf-photo-thumb.on{border-color:var(--ink);background:var(--surface-2);color:var(--ink)}
  .vpf-photo-select{display:flex;align-items:center;gap:10px;min-width:0;flex:1;border:0;background:transparent;color:inherit;padding:0;text-align:left;cursor:pointer}
  .vpf-photo-select:disabled{cursor:default}
  .vpf-photo-select:focus-visible{outline:0;box-shadow:var(--ring-focus);border-radius:6px}
  .vpf-photo-select img{width:38px;height:46px;border-radius:6px;object-fit:cover;flex:0 0 auto;background:var(--bg-2)}
  .vpf-photo-select>span{min-width:0;display:flex;flex-direction:column;gap:2px;flex:1}
  .vpf-photo-thumb strong{font-size:13px;font-weight:600;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .vpf-photo-thumb i{font-style:normal;font-size:11px;color:var(--ink-4)}
  .vpf-photo-empty{display:flex;align-items:center;justify-content:center;min-height:112px;border:1px dashed var(--border-strong);border-radius:8px;color:var(--ink-4);font-size:13px}
  @media (max-width:760px){
    .ui-window.vpf-section-modal{grid-template-columns:1fr;grid-template-rows:auto auto 1fr;grid-template-areas:"sysbar" "rail" "body"}
    .vpf-section-side{border-right:0;border-bottom:1px solid var(--border);max-height:260px}
    .vpf-photo-layout{grid-template-columns:1fr}
  }
  /* Synthèse transversale des outils + tuiles « à qualifier » + vue lecture seule */
  
  .vpf-view-usages{display:flex;gap:8px;align-items:flex-start;font-size:12px;line-height:1.45;color:var(--ink-2);background:var(--support-bg);border:0;border-radius:var(--radius-md);padding:10px 12px;margin-bottom:11px}
  .vpf-view-usages svg{color:var(--ink-3);flex:0 0 auto;margin-top:1px}
  /* Signal « Niveau actualisé » — une nouvelle saisie a fait monter une estimation */
  .vpf-levelup{display:flex;align-items:flex-start;gap:11px;margin:14px 0 0;padding:11px 13px;border:1px solid var(--accent-soft-2);border-radius:10px;background:var(--accent-soft)}
  .vpf-levelup-ic{flex:0 0 auto;width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--surface);border:1px solid var(--accent-soft-2);color:var(--accent)}
  .vpf-levelup-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
  .vpf-levelup-body>strong{font-size:13px;font-weight:600;color:var(--accent-ink)}
  .vpf-levelup-chips{display:flex;flex-wrap:wrap;gap:6px}
  .vpf-view-empty{font-size:13px;color:var(--ink-4);padding:8px 0}
  /* Lien vers le carnet (Vault) dédié — sections qui ont une double surface (profil léger + carnet) */
  /* Pied de feed — invite à capturer (incite aux entrées) */
  .vc-composer-invitation{display:flex;align-items:center;justify-content:center;text-align:center;padding:0 16px 24px;margin-top:0;border-bottom:1px solid var(--border)}
  .vc-composer-invitation-line{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:500;color:var(--ink-2)}
  .vc-composer-invitation-line svg{color:var(--ink-4)}

  /* Zone droite */

  /* ─ Langue client : une question humaine remplace l'acronyme et le score. Ton posé,
       aucune couleur d'alerte — il ne manque rien, on propose d'aller plus loin. ─ */
  
  /* Question douce en ligne de texte (planche G .ask) : question grise, « Répondre » accent. */
  .vcj-invite-btn{display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px;align-self:flex-start;padding:0;border:0;border-radius:0;background:none;font-family:inherit;font-size:13px;font-weight:500;color:var(--ink-3);cursor:pointer;text-align:left;transition:color .18s cubic-bezier(.16,1,.3,1)}
  .vcj-invite-btn:hover .vcj-invite-hint{color:var(--accent-2);text-decoration:underline;text-underline-offset:2px}
  .vcj-invite-hint{font-size:13px;font-weight:500;color:var(--accent)}

  /* ===== ReuseBadge (A) — repère de réutilisation unifié (window.ReuseBadge) ===== */
  .reuse-badge{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:8px;
    font-family:var(--font-sans);font-size:11px;font-weight:600;white-space:nowrap;flex:0 0 auto;
    background:var(--accent-50);color:var(--accent-2);border:1px solid var(--accent-soft-2)}
  .reuse-badge svg{color:var(--accent-2);flex-shrink:0}
  .reuse-badge.dense{height:20px;padding:0 8px;font-size:11px;font-weight:500}

  /* ===== StarMeter (B) — compteur de complétude STAR unifié (window.StarMeter) ===== */

  /* Dépli plein-largeur */

  /* ══ Pop-up d'entrée (VaultDetailPopup — Placement 3, assistant à la demande) ══ */
  /* La coque est la fenêtre Travail commune (.ui-window) ; l'en-tête garde sa hauteur. */
  .vdp-head{display:flex;align-items:center;gap:10px;padding:12px 16px 12px 20px;border-bottom:1px solid var(--border)}
  .vdp-head h3{margin:0;font-size:16px;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink);line-height:1.3;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .vdp-meta-right{display:inline-flex;align-items:center;gap:10px;margin-left:auto}
  .vdp-main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}
  /* Document */
  .vdp-doc{min-width:0;overflow:auto;padding:20px 24px;flex:1;min-height:0}
  .vdp-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:0;align-items:stretch;min-height:100%}
  /* Séparateur entre la colonne saisie/tags et la colonne STAR/pièces */
  .vdp-grid>.vdp-col:first-child{padding-right:26px}
  .vdp-grid>.vdp-col:last-child{padding-left:26px;border-left:1px solid var(--border)}
  .vdp-block+.vdp-block{margin-top:18px}
  .vdp-sech{font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4);display:flex;align-items:center;gap:7px;margin-bottom:10px}
  .vdp-sech svg{width:13px;height:13px}
  .vdp-prose{margin:0;font-size:14px;line-height:22px;color:var(--ink);text-wrap:pretty}
  .vdp-muted{font-size:13px;color:var(--ink-4)}
  .vdp-tagsrow{display:flex;gap:7px;flex-wrap:wrap}
  .vdp-tag{display:inline-flex;align-items:center;height:23px;padding:0 9px;border-radius:6px;background:var(--bg-2);border:1px solid var(--border-soft);color:var(--ink-3);font-size:12px;font-weight:500}
  /* Portée inversée (lot #4) « où ce fait a servi ? » : chips cliquables vers la candidature
     citante. Sobre (design system) : bord neutre, hover accent, aucune bande colorée. */
  .vdp-usage-list{display:flex;gap:7px;flex-wrap:wrap}
  .vdp-starhead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
  .vdp-segwrap{display:inline-flex;align-items:center;gap:8px}
  /* ─ Langue client dans le pop-up : ce qui manque se dit en clair (« Il manque le résultat »)
       plutôt qu'en score. Ton neutre — c'est un état, pas une faute. ─ */
  .vdp-star{display:flex;flex-direction:column;gap:1px;border:1px solid var(--border);border-radius:10px;overflow:hidden}
  .vdp-srow{display:flex;background:var(--surface)}
  .vdp-srow+.vdp-srow{border-top:1px solid var(--border)}
  .vdp-sk{width:96px;flex:0 0 auto;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);padding:10px 11px;background:var(--bg-2)}
  .vdp-srow.todo .vdp-sk{color:var(--warn-2);background:var(--warn-soft)}
  .vdp-sv{flex:1;padding:10px 12px;font-size:13px;line-height:18px;color:var(--ink-2);text-wrap:pretty;outline:0}
  .vdp.editing .vdp-sv{background:var(--surface-2)}
  .vdp.editing .vdp-sv:focus{background:var(--surface);box-shadow:inset 0 0 0 1px var(--accent)}
  .vdp-star-empty{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--ink-4);line-height:1.5;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:11px 12px}
  .vdp-star-empty svg{width:14px;height:14px;flex:0 0 auto;margin-top:1px;color:var(--ink-4)}
  /* Toggle « Version IA » ↔ « Ma saisie » sur l'en-tête STAR · segment sobre,
     accent réservé à l'état actif (regle-sobriete-visuelle). */
  /* Marqueur « reformulé par l'IA » : bordure gauche accent discrète + pastille. */
  .vdp-srow.vdp-reform{box-shadow:none}
  .vdp-reform-tag{display:inline-flex;align-items:center;vertical-align:middle;margin-left:6px;color:var(--accent);opacity:.7}
  .vdp-reform-tag svg{width:11px;height:11px}
  /* Footer : dossier + type + quand à gauche ; actions à droite */
  .vdp-foot{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;padding:8px 14px;border-top:1px solid var(--border);background:var(--surface)}
  .vdp-foot-side{display:flex;align-items:center;gap:10px}
  .vdp-foot-side.left{justify-self:start}
  .vdp-foot-side.right{justify-self:end}
  .vdp-foot-left{display:flex;align-items:center;gap:12px;flex-wrap:nowrap;justify-content:center;min-width:0;overflow-x:auto;scrollbar-width:none}
  .vdp-foot-left::-webkit-scrollbar{display:none}
  .vdp-foot-folder,.vdp-mg{flex:0 0 auto}
  .vdp-foot-folder{display:inline-flex;align-items:center;gap:8px}
  .vdp-foot-folder .ff-l{font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4)}
  .vdp-folder{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-2);font-weight:500}
  .vdp-folder svg{width:15px;height:15px;color:var(--ink-4)}
  
  .vdp-mg{display:flex;align-items:center;gap:8px}
  .vdp-mg .mg-l{font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4)}
  .vdp-mv{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2)}
  .vdp-mv svg{width:14px;height:14px;color:var(--ink-4)}
  .vdp-select{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 10px;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vdp-select:hover{background:var(--bg-2);border-color:var(--border-hover);color:var(--ink)}
  .vdp-select .fc{display:inline-flex;align-items:center;gap:7px}
  .vdp-select svg{color:var(--ink-4)}

  /* Type : menu déroulant (même langage que le sélecteur de carnet « Dans ») */
  .vdp-mg-rel{position:relative}
  .vdp-foot-left.ovis{overflow:visible}
  /* Popovers Dans/Quand du pied : même largeur que dans le chat (252px) pour que « Juin 2026 » et « Choisir une date précise » tiennent sur une ligne */
  .vdp-popmenu{width:252px}

  .vdp-typeopt span{flex:1}
  .vdp-typeopt.on svg:last-child{color:var(--accent)}
  .vdp-btn{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 13px;border-radius:6px;font:inherit;font-size:13px;font-weight:500;cursor:pointer;border:1px solid var(--border-soft);white-space:nowrap;background:var(--surface);color:var(--ink);transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vdp-btn svg{width:15px;height:15px}
  .vdp-btn:not([aria-disabled="true"]):hover{background:var(--bg-2);border-color:var(--border-hover);color:var(--ink)}
  /* Variante NOIRE · même facture que .vdp-btn, fond sombre = bouton d'action standard
     (remplace l'ancien gros pavé .btn.accent/.btn.principal). */
  .vdp-btn.danger{border-color:color-mix(in srgb,var(--bad) 40%,transparent);color:var(--bad)}
  .vdp-btn.danger:hover{background:color-mix(in srgb,var(--bad) 8%,transparent);border-color:var(--bad);color:var(--bad)}
  /* Lien discret « Enregistrer sans discuter » sous la barre de saisie de l'assistant (mode création) */
  /* Feedback du remplissage live + état « enregistré » de la coquille création */
  .vdp-flash{animation:vdpFlash 1.3s var(--ease-out)}
  @keyframes vdpFlash{0%{background:var(--accent-soft)}100%{background:var(--surface)}}
  .vdp-srow.todo.vdp-flash{animation:vdpFlashTodo 1.3s var(--ease-out)}
  @keyframes vdpFlashTodo{0%{background:var(--accent-soft)}100%{background:transparent}}
  @media (max-width:560px){ .vdp-grid{grid-template-columns:1fr} .vdp-grid>.vdp-col:first-child{padding-right:0} .vdp-grid>.vdp-col:last-child{padding-left:0;border-left:0;border-top:1px solid var(--border);margin-top:20px;padding-top:20px} }

  /* ── Composer journal deux panneaux ── */
  /* ── Vault v2 : rail droit (stats / outils / heatmap) ──
     Le rail GAUCHE des carnets a rejoint la sidebar principale (2026-07-20) : la coquille
     n'a plus de colonne de navigation à gauche. */
  /* Panneau droit « En attente / Votre mémoire au travail » : 3e colonne quand il est rendu
     (fil d'un carnet uniquement). `:has` évite d'imposer une colonne vide partout ailleurs.
     Largeur fluide bornée : 336px de plancher, plafond à 440px.

     Le terme central est un POURCENTAGE, pas des `vw` (SIH-102). Sa décision
     `vault-feed-preserve-rail-neutre` dit « elle grandit avec LE PLAN DE TRAVAIL » : un
     pourcentage se mesure sur le conteneur de grille, donc sur `.vc-shell`, le plan. Alors
     que `vw` se mesure sur l'écran et ignore la barre de navigation. Mesuré le 2026-08-04 en
     1920 : dépliage réel de la barre, le plan tombe de 1840 à 1632 px et l'ancien `22vw`
     gardait 422 px, comprimant le feed d'autant ; 23 % rend 47 px au feed.
     Équivalence vérifiée barre repliée : 1440 = 336 (plancher) · 1920 = 423 contre 422
     · 2560 : 440 (plafond). Même mécanisme que `--contacts-rail-w`, deux réglages assumés. */
  .vc-shell:has(> .vc-aside),.vc-shell.side-collapsed:has(> .vc-aside){grid-template-columns:minmax(0,1fr) clamp(336px,23%,440px) !important}
  /* Le rail reste dans la coque du Vault, mais reprend la séparation lisible du
     master-detail Contacts : un seul filet structurel, sans retrait, ombre ni arrondi. */
  .vc-aside{--vc-aside-gap:22px;border-left:2px solid var(--border);background:var(--bg-2);overflow-y:auto;padding:9px 16px 18px;display:flex;flex-direction:column;gap:var(--vc-aside-gap);min-height:0}
  /* La pilule injectée est le premier enfant du flex. Son hôte de hauteur nulle doit annuler
     exactement le gap COURANT du rail, y compris après un changement de densité : sinon sa
     marge inline périmée tire la carte d'identité vers le haut et casse la grille. */
  .vc-aside > .ui-scrollpill-host{margin-bottom:calc(-1 * var(--vc-aside-gap))!important}
  .vc-aside-context{display:flex;flex-direction:column;gap:10px}
  /* Carte identité : fond teinté marque + pastilles CONSERVÉS (décision Landry 24-07,
     « revenir à l'existant » sur ce composant pendant la bascule planche G). */
  .vc-aside-identity{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--border);border-radius:10px;background:var(--bg-2)}
  .vc-aside-id-main{display:flex;align-items:center;gap:10px;min-width:0}
  .vc-aside-id-copy{min-width:0;flex:1}
  .vc-aside-id-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;letter-spacing:-.005em;color:var(--ink)}
  .vc-aside-id-role{margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:16px;color:var(--ink-3)}
  .vc-aside-id-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  .vc-aside-id-status,.vc-aside-id-period,.vc-aside-id-tag{display:inline-flex;align-items:center;gap:5px;min-width:0;border:1px solid var(--border-soft);background:var(--surface);color:var(--ink-3)}
  .vc-aside-id-status,.vc-aside-id-period{height:21px;padding:0 8px;border-radius:99px;font-size:11px}
  .vc-aside-id-period{font-family:var(--font-sans);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
  .vc-aside-id-dot{width:6px;height:6px;border-radius:50%;background:var(--ink-4);flex:0 0 auto}
  .vc-aside-id-status[data-st="current"] .vc-aside-id-dot{background:var(--good)}
  .vc-aside-id-tags{display:flex;gap:5px;flex-wrap:wrap}
  .vc-aside-id-tag{height:19px;padding:0 8px;border-radius:99px;font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-normal);text-transform:none;white-space:nowrap}
  .vc-aside-id-why{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;opacity:.68}
  .vc-aside-id-footer{display:flex;align-items:center;justify-content:flex-end;gap:4px;padding-top:2px}
  .vc-aside-identity.is-tinted .vc-aside-id-name{color:var(--sidebar-fg-strong)}
  .vc-aside-identity.is-tinted .vc-aside-id-role{color:color-mix(in srgb,var(--sidebar-fg-strong) 78%,transparent)}
  .vc-aside-identity.is-tinted .vc-aside-id-status,.vc-aside-identity.is-tinted .vc-aside-id-period,.vc-aside-identity.is-tinted .vc-aside-id-tag{border-color:color-mix(in srgb,var(--sidebar-fg-strong) 18%,transparent);background:color-mix(in srgb,var(--sidebar-fg-strong) 10%,transparent);color:color-mix(in srgb,var(--sidebar-fg-strong) 90%,transparent)}
  /* Le « ⋯ » du carnet sur le rail teinté : encre et filet clairs, sinon il disparaît sur le fond foncé. */
  .vc-aside-identity.is-tinted .card-options-trigger{color:color-mix(in srgb,var(--sidebar-fg-strong) 62%,transparent);border-color:color-mix(in srgb,var(--sidebar-fg-strong) 24%,transparent)}
  .vc-aside-identity.is-tinted .card-options-trigger:hover,.vc-aside-identity.is-tinted .card-options.open .card-options-trigger{background:color-mix(in srgb,var(--sidebar-fg-strong) 14%,transparent);color:var(--sidebar-fg-strong);box-shadow:none}
  /* Titres du rail (planche G .railsec .h) : sentence case 12/500 — plus de mono UPPERCASE. */
  .vc-aside-h{margin:0 0 10px;font-family:inherit;font-size:12px;font-weight:500;letter-spacing:var(--tracking-normal);text-transform:none;color:var(--ink-3)}
  .vc-aside-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
  .vc-aside-section-head .vc-aside-h{margin:0}
  .vc-capture-filter button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:inline-flex;align-items:center;gap:5px;border:0;background:transparent;color:var(--accent-ink);font-family:inherit;font-size:11px;font-weight:600;line-height:1.2;cursor:pointer;white-space:nowrap}
  .vc-capture-filter button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{text-decoration:underline;text-underline-offset:3px}
  
  .vc-aside-stats{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
  .vc-aside-stat{display:flex;align-items:center;gap:7px;width:100%;padding:0;border:0;background:none;font-family:inherit;font-size:13px;line-height:17px;color:var(--ink-2);text-align:left;cursor:pointer}
  .vc-aside-stat > span:last-child{min-width:0}
  .vc-aside-stat:hover:not(.is-note){color:var(--accent-ink)}
  .vc-aside-stat:hover:not(.is-note) .count-badge{--count-badge-border:var(--ink-3)}
  .vc-aside-stat.is-note{cursor:default}
  /* Baromètre de santé mémoire (chantier onboarding-capture) : carte douce, jauge accent, faits
     à étoffer cliquables. Copy « santé mémoire », jamais promesse par-candidature. */
  /* SIH-16 · renforcement mémoire. L'ancien baromètre et son score ont disparu :
     cette surface promet une aide, puis la modale B protège le focus. */
  .memory-reinforce-entry{display:grid;grid-template-columns:30px minmax(0,1fr);column-gap:9px;row-gap:4px;padding:12px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);box-shadow:none;}
  .memory-reinforce-entry-icon{grid-row:1/3;width:30px;height:30px;display:grid;place-items:center;border-radius:8px;background:var(--bg-2);color:var(--ink-2)}
  .memory-reinforce-entry h3{margin:0;font-size:13px;font-weight:600;color:var(--ink)}
  .memory-reinforce-entry p{grid-column:1/-1;margin:6px 0 4px;font-size:12px;line-height:1.45;color:var(--ink-3)}
  /* SIH-115 : role secondaire (classe posee dans le JSX). Ne reste ici que sa place
     dans la grille et sa justification interne. */
  .memory-reinforce-entry > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){grid-column:1/-1;justify-content:space-between;width:100%}
  .memory-reinforce-entry > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){grid-column:1/-1;width:100%}
  .memory-reinforce-entry > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible{outline:0;box-shadow:var(--ring-focus)}
  body[data-memory-reinforcement-open="true"][data-side="collapsed"] .side [data-tip]{z-index:auto}
  body[data-memory-reinforcement-open="true"][data-side="collapsed"] .side [data-tip]::before,
  body[data-memory-reinforcement-open="true"][data-side="collapsed"] .side [data-tip]::after{display:none}
  /* SIH-53 — `minmax(0,…)` est la cause réelle du rail coupé : sans lui, la rangée
     centrale refuse de descendre sous la hauteur de son contenu, le rail déborde
     de la modale et se fait rogner par son `overflow:hidden` au lieu de défiler.
     La variante mobile (plus bas) appliquait déjà la forme correcte. */
  .memory-reinforce-modal{grid-template-rows:auto minmax(0,1fr) auto}
  .memory-reinforce-rail{display:flex;flex-direction:column;min-height:0;padding:20px 14px;overflow:hidden;border-right:1px solid var(--border-soft);background:var(--surface-2)}
  .memory-reinforce-rail-scroll{flex:1;min-height:0;overflow-y:auto;margin:0 -14px;padding:0 14px}
  .memory-reinforce-rail-context{display:flex;flex-direction:column;flex-shrink:0;padding:0 8px 18px;border-bottom:1px solid var(--border-soft)}
  .memory-reinforce-rail-context strong{margin-top:5px;overflow:hidden;color:var(--ink);font-size:14px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}
  .memory-reinforce-rail-context > span:last-child:not(:first-child){margin-top:3px;color:var(--ink-3);font-size:12px}
  .memory-reinforce-eyebrow{font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3)}
  .memory-reinforce-rail-group{margin-top:18px}
  .memory-reinforce-rail-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 8px 7px;color:var(--ink-3);font:500 9.5px/1.3 var(--font-sans);letter-spacing:.07em;text-transform:uppercase}
  .memory-reinforce-rail-title span{color:var(--ink-4);letter-spacing:var(--tracking-normal)}
  .memory-reinforce-rail-entry{width:100%;min-height:44px;display:grid;grid-template-columns:7px minmax(0,1fr);gap:9px;align-items:center;padding:7px 9px;border:0;border-radius:var(--radius-md);background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
  .memory-reinforce-rail-entry.on{background:var(--select-bg);color:var(--select-ink)}
  .memory-reinforce-rail-entry.is-static{cursor:default}
  .memory-reinforce-rail-entry strong,.memory-reinforce-rail-entry small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .memory-reinforce-rail-entry strong{font-size:12px;font-weight:500}
  .memory-reinforce-rail-entry small{color:var(--ink-3);font-size:11px}
  .memory-reinforce-dot{width:6px;height:6px;border-radius:50%;background:var(--warn-quiet)}
  .memory-reinforce-dot.processing{background:var(--accent)}
  .memory-reinforce-dot.ready{background:var(--good-quiet)}
  .memory-reinforce-head{grid-area:header;display:flex;align-items:center;gap:14px;min-height:70px;padding:14px 18px 14px 22px;border-bottom:1px solid var(--border-soft);background:var(--surface)}
  .memory-reinforce-head h2{margin:3px 0 0;font-size:16px;line-height:1.25;font-weight:600;letter-spacing:-.02em;color:var(--ink)}
  .memory-reinforce-private{margin-left:auto;color:var(--ink-3);font:500 9.5px/1.3 var(--font-sans);letter-spacing:.03em;text-transform:uppercase}
  .memory-reinforce-body{overflow:auto;padding:20px 28px 28px}
  .memory-reinforce-flow{max-width:760px;margin:0 auto;display:flex;flex-direction:column}
  .memory-reinforce-known{display:flex;align-items:flex-start;gap:9px;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);font-size:12px;line-height:1.5;color:var(--ink-2)}
  .memory-reinforce-known svg{flex:0 0 auto;margin-top:2px;color:var(--good-quiet)}
  .memory-reinforce-known strong{font-weight:600;color:var(--ink)}
  .memory-reinforce-question{margin-top:16px;padding:16px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
  .memory-reinforce-progress{display:flex;align-items:center;gap:9px;margin-bottom:9px;color:var(--ink-3);font-size:12px}
  .memory-reinforce-segments{display:flex;gap:4px}
  .memory-reinforce-segments i{width:24px;height:3px;border-radius:999px;background:var(--bg-2)}
  .memory-reinforce-segments i.active{background:var(--accent)}
  .memory-reinforce-question-type{padding-left:9px;border-left:1px solid var(--border);color:var(--ink-3);font:500 10px/1.3 var(--font-sans)}
  .memory-reinforce-question h3{margin:0;font-size:16px;line-height:1.3;font-weight:600;letter-spacing:-.015em;color:var(--ink)}
  .memory-reinforce-question > p{margin:5px 0 0;font-size:12px;color:var(--ink-3)}
  .memory-reinforce-options{display:grid;gap:6px;margin-top:14px}
  .memory-reinforce-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){position:relative;width:100%;min-height:50px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 11px 8px 13px;border:1px solid transparent;border-radius:var(--radius-md);background:var(--surface-2);color:var(--ink);font:inherit;font-size:13px;font-weight:500;text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .memory-reinforce-options button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){position:relative;width:100%}
  .memory-reinforce-options kbd{width:24px;height:24px;display:grid;place-items:center;flex:0 0 auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink-3);font:500 11px/1 var(--font-data)}
  .memory-reinforce-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{border-color:var(--border-strong);background:var(--hover-bg);color:var(--ink)}
  .memory-reinforce-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-pressed="true"]{border-color:var(--accent);background:var(--select-bg);color:var(--select-ink)}
  .memory-reinforce-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-pressed="true"] kbd{border-color:var(--ink-3);background:var(--sidebar-bg);color:var(--sidebar-fg-strong)}
  .memory-reinforce-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible{outline:0;border-color:var(--accent);box-shadow:var(--ring-focus)}
  .memory-reinforce-free{display:grid;gap:7px;margin-top:6px;padding:10px 12px 12px;border:1px solid transparent;border-radius:var(--radius-md);background:var(--surface-2)}
  .memory-reinforce-free > span{color:var(--ink);font-size:13px;font-weight:500}
  .memory-reinforce-exact-row{display:flex;align-items:center;gap:9px}
  .memory-reinforce-exact-row > span{color:var(--ink-3);font-size:12px;font-weight:400}
  .memory-reinforce-free-wrap{margin-top:6px;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden}
  .memory-reinforce-free-wrap .memory-reinforce-free{margin-top:0;padding-bottom:10px}
  .memory-reinforce-error{margin:0!important;color:var(--bad)!important;font-size:12px!important}
  .memory-reinforce-foot{grid-area:footer;min-height:58px;display:flex;align-items:center;gap:8px;padding:10px 18px;border-top:1px solid var(--border-soft);background:var(--surface)}
  .memory-reinforce-privacy{display:flex;align-items:center;gap:6px;color:var(--ink-3);font-size:11px}
  .memory-reinforce-foot .memory-reinforce-privacy + .btn{margin-left:auto}
  /* SIH-115 : cette modale se donnait une ONZIEME hauteur (34 px), sa propre graisse et
     son propre principal a l'encre de la barre laterale. Ces regles n'avaient JAMAIS
     rendu : les boutons y ecrivaient « btn primary » et « btn ghost », des rangs qui
     n'existent nulle part dans la feuille, donc rien ne les peignait. En traduisant les
     rangs on aurait reveille un langage propre a cet ecran, c'est-a-dire exactement ce
     que ce lot supprime. Geometrie et peinture viennent donc du role, comme partout. */
  .memory-reinforce-foot .btn:disabled{opacity:.5;cursor:not-allowed}
  .memory-reinforce-state,.memory-reinforce-success{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;max-width:620px;margin:0 auto;text-align:center}
  .memory-reinforce-state h3,.memory-reinforce-success h3{margin:14px 0 5px;font-size:22px;font-weight:500;color:var(--ink)}
  .memory-reinforce-state p,.memory-reinforce-success > p{margin:0;color:var(--ink-3);font-size:13px}
  .memory-reinforce-skeleton-short{margin-top:14px}
  .memory-reinforce-success-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:50%;background:var(--good-soft);color:var(--good-quiet)}
  .memory-reinforce-narrative{width:100%;margin-top:24px;padding:20px;border-radius:10px;background:var(--bg-2);text-align:left}
  .memory-reinforce-narrative p{margin:8px 0 0;font-size:16px;line-height:1.55;color:var(--ink);text-wrap:pretty}
  .memory-reinforce-next{width:100%;display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:16px;padding-top:16px;border-top:1px solid var(--border-soft);text-align:left}
  .memory-reinforce-next > div{display:flex;flex-direction:column;gap:2px}
  .memory-reinforce-next strong{font-size:13px;font-weight:600;color:var(--ink)}
  .memory-reinforce-next span{font-size:12px;color:var(--ink-3)}
  @media(max-width:760px){
    .cdet-modal2.memory-reinforce-modal{width:100vw;height:100dvh;border-radius:0;grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"header" "body" "footer"}
    .cdet-railnav.memory-reinforce-rail{display:none}
    .cdet-content2.memory-reinforce-body{padding:22px 18px}
    .memory-reinforce-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)),.memory-reinforce-foot .btn,.memory-reinforce-next .btn{min-height:44px}
    .memory-reinforce-private,.memory-reinforce-privacy{display:none}
    .memory-reinforce-question h3{font-size:16px}
    .memory-reinforce-foot{justify-content:space-between}
    .memory-reinforce-next{align-items:stretch;flex-direction:column}
    .memory-reinforce-next .btn{justify-content:center}
  }
  .cdet-head.memory-reinforce-head h2{color:var(--ink)}
  .vc-aside-activity{margin-top:auto;padding-top:var(--space-5);border-top:1px solid var(--border)}
  /* Calendrier d'activité (planche G .cal) : carte douce sans bordure, radius 13. */
  .vc-activity-calendar{padding:12px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);box-shadow:none}
  .vc-activity-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-3)}
  .vc-activity-head>span{font-size:12px;font-weight:500;text-transform:capitalize;color:var(--fg-1)}
  .vc-activity-nav{display:flex;align-items:center;gap:var(--space-2)}
  .vc-activity-nav button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--fg-4);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vc-activity-nav button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:24px}
  .vc-activity-nav button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-surface);color:var(--fg-1)}
  .vc-activity-week,.vc-activity-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center}
  .vc-activity-week{margin-bottom:var(--space-2);font-family:var(--font-sans);font-size:11px;color:var(--fg-3)}
  .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){position:relative;display:grid;place-items:center;height:28px;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--fg-3);font-size:11px;font-variant-numeric:tabular-nums}
  .vc-activity-days button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){position:relative}
  .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{cursor:default}
  .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).is-outside{color:var(--fg-5)}
  .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).has-captures{color:var(--fg-1);font-weight:500;cursor:pointer}
  .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).has-captures:hover{background:var(--bg-surface)}
  .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).is-selected{background:var(--accent-soft);color:var(--accent-ink)}
  .vc-activity-dot{position:absolute;left:50%;bottom:3px;width:4px;height:4px;border-radius:var(--radius-pill);background:var(--accent-500);transform:translateX(-50%)}
  .vc-activity-recap{display:flex;align-items:center;gap:var(--space-3);margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--border-input);font-size:11px;color:var(--fg-3)}
  .vc-activity-recap svg{flex:0 0 auto;color:var(--fg-4)}
  .vc-activity-recap b{font-weight:500;color:var(--fg-2)}
  .vc-capture-filter{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:0;border-radius:var(--radius-md);background:var(--support-bg);color:var(--ink-2);font-size:12px}
  .vc-capture-filter-copy{display:flex;align-items:center;gap:7px;min-width:0}
  .vc-capture-filter-copy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vc-capture-filter-copy b{font-weight:500}
  /* Le rail se compacte avant de défiler. Deux paliers réduisent d'abord l'air périphérique,
     puis le rythme interne ; aucune information n'est masquée. `overflow-y:auto` ne devient
     donc visible qu'en dernier recours, lorsque même le palier dense ne tient plus. */
  @media (min-width:1181px) and (max-height:820px){
    .vc-aside{--vc-aside-gap:14px;padding:9px 14px 12px}
    .vc-aside-context{gap:7px}
    .vc-aside-identity{gap:7px;padding:10px}
    .vc-aside-id-main{gap:8px}
    .vc-aside-id-meta,.vc-aside-id-tags{gap:4px}
    .vc-aside-id-footer{padding-top:0}
    .vc-aside-h{margin-bottom:6px}
    .vc-aside-section-head{margin-bottom:6px}
    .vc-aside-stats{gap:3px}
    .memory-reinforce-entry{grid-template-columns:26px minmax(0,1fr);column-gap:8px;row-gap:2px;padding:10px}
    .memory-reinforce-entry-icon{width:26px;height:26px;border-radius:8px}
    .memory-reinforce-entry p{margin:3px 0 2px;line-height:1.35}
    .vc-aside-activity{padding-top:12px}
    .vc-activity-calendar{padding:9px 10px}
    .vc-activity-head{margin-bottom:4px}
    .vc-activity-nav button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:22px;height:22px}
  .vc-activity-nav button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:22px}
    .vc-activity-week{margin-bottom:2px}
    .vc-activity-days button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:24px}
    .vc-activity-recap{margin-top:6px;padding-top:6px}
  }
  @media (min-width:1181px) and (max-height:690px){
    .vc-aside{--vc-aside-gap:10px;padding:9px 12px}
    .vc-aside-context{gap:5px}
    .vc-aside-identity{gap:5px;padding:8px 9px}
    .vc-aside-id-role{margin-top:0}
    .vc-aside-id-status,.vc-aside-id-period{height:20px}
    .vc-aside-id-tag{height:18px}
    .vc-aside-h{margin-bottom:4px;font-size:12px}
    .vc-aside-section-head{margin-bottom:4px}
    .vc-aside-stats{gap:2px}
    .vc-aside-stat{font-size:12px;line-height:16px}
    .memory-reinforce-entry{padding:8px 9px}
    .memory-reinforce-entry p{margin:2px 0 1px;line-height:1.3}
    .vc-aside-activity{padding-top:8px}
    .vc-activity-calendar{padding:7px 8px}
    .vc-activity-head{margin-bottom:2px}
    .vc-activity-recap{margin-top:4px;padding-top:4px}
  }
  @media (max-width:1180px){
    /* `!important` requis : la règle deux-colonnes plus haut en porte un, donc sans lui le repli
       ne s'appliquait jamais. Le panneau passait bien en display:none, mais la grille gardait sa
       colonne de 276px — le fil restait compressé avec une bande blanche à sa droite
       (reproduit à 1136px, audit indépendant du 2026-07-20). */
    .vc-shell:has(> .vc-aside),.vc-shell.side-collapsed:has(> .vc-aside){grid-template-columns:minmax(0,1fr) !important}
    .vc-aside{display:none}
  }
  /* ── Planche G (lot 3) : le rail vit sur le canevas crème, séparé par l'air — plus de
     panneau blanc bordé. Les cartes du rail = remplissage doux, les champs = hairline. ── */
  
  /* Bandeau du carnet — déplacé dans le rail droit (au-dessus de la recherche) */
  /* Carte identité du carnet (planche G .idcard) : remplissage doux crème, encres chaudes —
     le dégradé charbon froid disparaît. */
  
  /* Titres de section du rail (planche G .railsec .h) : sentence case 12/500 — plus d'UPPERCASE. */

  /* Entry card */

  @media (max-width:900px){
    .vc-shell{grid-template-columns:1fr}
  }

  .vc-shell{
    position:relative;
    /* UNE colonne : le rail des carnets a rejoint la sidebar principale (2026-07-20). La
       première colonne de 260px était celle de l'ancien rail — laissée en place, elle écrasait
       le contenu dans un couloir étroit et laissait la moitié droite vide. */
    display:grid;grid-template-columns:minmax(0,1fr);gap:0;
    /* Déclaration CANONIQUE unique : la fenêtre et son rayon appartiennent à `.col`.
       Le Vault ne redessine donc aucune coque intérieure ; seules les colonnes main/rail
       structurent ce plan plat (décisions SIH-82 et SIH-98). */
    overflow:hidden;flex:1 1 auto;min-height:0;grid-template-rows:minmax(0,1fr);
    transition:grid-template-columns var(--dur-base) var(--ease-out);
  }

  /* Zone sidebar (rail + flyout) */
  /* Bouton de repli (dans un en-tête dédié) */
  /* Rail visible uniquement en mode replié */

  /* Bouton de repli dans l'en-tête de la sidebar (mode déplié) — sur une ligne avec un intitulé */

  /* ===== Mode replié : plus de bande — juste un petit bouton flottant (aperçu au survol conservé) ===== */
  .vc-shell.side-collapsed{grid-template-columns:minmax(0,1fr);gap:0}
  /* Plus aucune colonne réservée : le bouton flotte au-dessus du contenu */
  .vc-shell.side-collapsed .vc-main-col{padding-left:0}
  
  /* Le bouton n'apparaît qu'au survol de la zone sidebar (le bouton lui-même reste
     cliquable même invisible — il sert de cible de survol au coin haut-gauche). */

  /* En mode réduit : la sidebar complète n'apparaît qu'au clic (épinglée).
     Le survol n'affiche qu'un petit aperçu flottant groupé (.vc-side-pop). */

  /* Aperçu flottant compact au survol du rail */
  
  /* Fermeture instantanée : aucun délai, aucun fondu quand la souris quitte */

  /* Panneau de détail d'une entrée (clic sur une carte) — aligné au design SIHAGE */

  /* Éditeur riche : encart de saisie bien délimité */

  /* Beat the `.vault-view > *{flex-shrink:0}` rule so the shell is bounded and columns scroll internally */
  .vault-view > .vc-shell{flex:1 1 auto;min-height:0}

  /* Sidebar */
  /* En-tête de groupe T1 — titre fort + pastille de compteur + filet */
  .vc-grp-head{position:relative;display:flex;align-items:center;gap:9px;margin:16px 2px 6px;padding:2px 2px 8px;border-bottom:1px solid var(--border-strong)}
  /* Carnet = dossier à onglet (Option A), logo de marque */
  .vc-carnet-logo-wrap{position:relative;flex:0 0 auto}
  .vc-carnet-logo-wrap.drag{outline:1px dashed var(--ink-4);outline-offset:2px;border-radius:8px;background:var(--hover-bg)}
  .vc-carnet-logo{flex:0 0 auto;width:100%;height:100%;display:grid;place-items:center;color:var(--fg-inverse);border-radius:8px;box-shadow:none}
  .vc-logo-edit{position:absolute;right:-5px;bottom:-5px;width:16px;height:16px;border-radius:50%;background:var(--surface);border:1px solid var(--border-strong);display:grid;place-items:center;color:var(--ink-3);cursor:pointer;box-shadow:none;opacity:0;transition:opacity var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);padding:0}
  .vc-logo-edit:hover{color:var(--accent);border-color:var(--accent)}
  .vc-carnet-logo-wrap:hover .vc-logo-edit{opacity:1}
  /* Fiche de poste intégrée au bandeau : intitulé du poste + détails (dates/source/progression) */

  /* Bouton « Générer une synthèse » — pill clair sur le bandeau sombre, poussé à droite */
  /* Ligne nom de société + pastille de statut (en poste / terminé), poussée à droite */
  
  /* Tous les carnets ont le même point d'accès aux actions : quand la période est
     absente, le pied reste volontairement minimal et aligne seulement « … » à droite. */

  /* Statut « En poste / Terminé » placé à GAUCHE de la date dans la ligne du bas ;
     les tags restent poussés à droite (margin auto sur .vc-banner-tags-foot). */
  .vc-carnet-logo svg{width:60%;height:60%}
  .vc-carnet-logo.neutral{background:var(--bg-2)!important;border:1px solid var(--border);color:var(--ink-3);box-shadow:none;font-family:var(--font-sans);font-weight:600;font-size:12px}
  /* Essentiel par défaut (nom) ; dates/contexte au survol ou si actif */

  /* Main col — scrolls as a single unit, independently of the left sidebar */
  /* Canon plat : le canevas clair DANS la coque — les cartes blanches
     ressortent (maquette validée, SIH-75). */
  .vc-main-col{
    --vault-local-nav-block-size:var(--screen-context-h);
    display:flex;flex-direction:column;gap:var(--space-4);padding:0;
    overflow-y:auto;min-height:0;background:var(--bg)
  }
  /* Le carnet et le profil utilisent la progression commune de CV/lettres,
     calculée dans leur colonne disponible, après le rail annexe. */
  .vc-main-col--readable{--vault-reading-inset:var(--app-reading-inset)}
  @media (pointer:fine){
    .vc-main-col::-webkit-scrollbar{width:8px}
    .vc-main-col::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px}
    .vc-main-col::-webkit-scrollbar-thumb:hover{background:var(--scroll-pill-thumb-hover)}
  }
  /* Children keep their natural height; the column scrolls rather than squeezing them */
  .vc-main-col > *{flex-shrink:0}
  /* Wall view: the composer + missing prompts get a light inset, coherent with the left column padding */

  /* Banner header */
  .vc-banner{
    position:relative;padding:13px 18px 12px;
    margin:14px 22px 0;
    border:1px solid var(--border);border-radius:10px;
    background:
      linear-gradient(135deg, color-mix(in srgb, var(--vault-thread,var(--accent)) 8%, transparent), transparent 60%),
      var(--surface);
    overflow:hidden;
  }
  /* Le menu d'options est rendu en fixed, mais son contexte doit tout de même
     passer devant la barre d'onglets collante lorsqu'il est ouvert. */
  /* Banner brandé (logo + couleurs de l'entreprise) */
  .vc-banner[data-brand]{color:var(--sidebar-fg-strong)}

  .vc-banner[data-brand] .logo.has-img{box-shadow:0 0 0 1px color-mix(in srgb,var(--sidebar-fg-strong) 15%,transparent)}

  /* Composer always visible */

  /* Stack & buckets — flows naturally; the main column owns the scroll */
  .vc-stack{padding:0 22px 22px;display:flex;flex-direction:column;gap:18px;flex:0 0 auto}
  .vc-main-col--readable > .vc-stack,
  .vc-main-col--readable > .fm,
  .vc-main-col--readable > .vjob,
  .vc-main-col--readable > .vw,
  .vc-main-col--readable > .vsk,
  .vc-main-col--readable > .vc-recap{padding-inline:var(--vault-reading-inset)}
  /* Les onglets sont déjà collants. Le contenu garde donc sa hauteur naturelle :
     aucun défilement ne doit être créé quand tout tient dans la zone. */

  /* ── Onglet « Fiche de poste » ── */
  .vjob{padding:0 22px 22px}
  /* En-tête = section en haut de la carte unique (plus de carte séparée) : pas de bordure propre,
     un simple filet de séparation avant les onglets. Il défile avec le contenu. */
  /* Pied d'en-tête : dates · source · ajout · progression — flux souple qui ne se chevauche jamais */
  /* Progression poussée à droite, label + barre en ligne */
  /* Carte unique */
  .vjob-card{border:1px solid var(--content-border);border-radius:var(--radius-lg);position:relative;background:var(--content-bg);box-shadow:none;}
  /* La barre d'onglets de la Fiche de poste partage la hauteur canonique de la navigation
     locale : aucune somme implicite ni masque intermédiaire. */

  .vjob-body{padding:16px 18px;display:flex;flex-direction:column;gap:14px}
  .vjob-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column}
  .vjob-list li{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:8px;row-gap:5px;font-size:13px;line-height:19px;color:var(--ink-2);padding:5px 2px 5px 14px;position:relative;text-wrap:pretty}
  .vjob-list li::before{content:"";position:absolute;left:1px;top:13px;width:5px;height:5px;border-radius:50%;background:var(--ink-5)}
  .vjob-li-text{flex:1 1 auto;min-width:0}
  .vjob-li-k{font-weight:600;color:var(--ink-2);margin-right:7px}
  /* Actions au survol : annoter · retirer */
  /* Note personnelle (précision, ressenti) */
  .vjob-note{flex-basis:100%;display:inline-flex;align-items:flex-start;gap:7px;background:var(--support-bg);border:0;border-radius:var(--radius-md);padding:10px 12px;font-size:12px;line-height:17px;color:var(--ink-2);cursor:pointer}
  .vjob-note svg{flex-shrink:0;margin-top:2px;color:var(--ink-4)}
  .vjob-note:hover{color:var(--ink)}
  .vjob-note:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .vjob-note-edit{flex-basis:100%;display:flex;flex-direction:column;gap:6px}
  .vjob-note-edit textarea{width:100%;box-sizing:border-box;border:1px solid var(--border-strong);border-radius:8px;padding:7px 10px;font:inherit;font-size:13px;line-height:17px;color:var(--ink);background:var(--surface);resize:vertical;outline:none}
  .vjob-note-edit textarea:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .vjob-note-edit .r{display:flex;gap:6px}
  /* Ajouter un élément */
  .vjob-add-row{display:flex;gap:6px;margin-top:6px}
  .vjob-add-row input{flex:1 1 auto;min-width:0;border:1px solid var(--input-rest-border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;color:var(--ink)}
  .vjob-add-row button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){flex-shrink:0}
  /* Groupes (À maîtriser · L'offre en détail) */
  .vjob-group{display:flex;flex-direction:column}
  .vjob-group + .vjob-group{border-top:1px solid var(--border);padding-top:14px}
  .vjob-subh{margin:0 0 6px;font-size:11px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);font-family:var(--font-sans);display:flex;align-items:baseline;gap:8px}
  .vjob-subh i{font-style:normal;font-size:11px;color:var(--ink-4);letter-spacing:var(--tracking-normal)}
  .vjob-empty-line{margin:0 0 2px;font-size:12px;color:var(--ink-4)}
  /* Rémunération */
  .vjob-paytop{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  @media (max-width:1100px){.vjob-paytop{grid-template-columns:1fr}}
  .vjob-paycard{border:1px solid var(--support-border);border-radius:10px;padding:13px 15px;display:flex;flex-direction:column;gap:4px;min-width:0;background:var(--support-bg);box-shadow:none;border-color:var(--support-border)}
  .vjob-paycard.hl{background:var(--surface);border-color:var(--border-strong)}
  .vjob-paycard .l{display:flex;align-items:center;gap:4px;font-family:var(--font-sans);font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-4)}
  .vjob-paycard strong{font-family:var(--font-data);font-size:16px;font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums}
  .vjob-paycard .s{font-size:12px;color:var(--ink-3)}
  /* Suggestions d'ajout (primes & avantages…) */
  .vjob-addzone{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px}
  .vjob-sugg{display:inline-flex;align-items:center;gap:5px;border:1px dashed var(--border-strong);background:transparent;border-radius:99px;padding:3px 11px;font:inherit;font-size:12px;color:var(--ink-3);cursor:pointer}
  .vjob-sugg:hover{color:var(--ink);border-color:var(--ink-4);background:var(--bg-2)}
  /* Réalisations : icône de ligne, chip « retenue », échéance d'objectif */
  .vjob-win-ic{width:18px;height:18px;border-radius:6px;display:grid;place-items:center;color:var(--ink-4);flex-shrink:0;margin-top:1px}
  .vjob-win-tag{align-self:flex-start;display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border-soft);background:var(--bg-2);border-radius:99px;padding:2px 10px;font-size:11px;font-weight:500;color:var(--ink-2)}
  .vjob-win-tag svg{color:var(--good)}
  .vjob-due{font-family:var(--font-data);font-size:11px;color:var(--ink-4);border:1px solid var(--border);border-radius:99px;padding:2px 9px;flex-shrink:0;white-space:nowrap}
  .vjob-titem.done .vjob-titem-label{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--ink-5)}
  /* Documents liés */
  .vjob-docs{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
  .vjob-doc{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);background:var(--bg-2);border-radius:8px;padding:5px 11px 5px 6px;max-width:300px}
  .vjob-doc .ic{width:24px;height:24px;border-radius:6px;background:var(--surface);border:1px solid var(--border);display:grid;place-items:center;color:var(--ink-3);flex-shrink:0}
  .vjob-doc .n{font-size:12px;font-weight:500;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vjob-doc .s{font-family:var(--font-sans);font-size:11px;color:var(--ink-4);flex-shrink:0}
  .vjob-doc .vjob-kw-x{margin:0 -2px 0 -2px}
  /* Mots-clés ATS */
  .vjob-kws{display:flex;flex-wrap:wrap;gap:6px}
  .vjob-kw{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:var(--bg-2);border-radius:99px;padding:4px 11px;font-size:12px;font-weight:500;color:var(--ink-3)}
  .vjob-kw svg{color:var(--ink-4)}
  .vjob-kw.ok{background:var(--surface);border-color:var(--ink-4);color:var(--ink)}
  .vjob-kw.ok svg{color:var(--good)}
  .vjob-kw-x{border:0;background:transparent;padding:0;margin:0 -3px 0 -1px;width:16px;height:16px;border-radius:50%;display:none;place-items:center;color:var(--ink-4);cursor:pointer}
  .vjob-kw:hover .vjob-kw-x{display:grid}
  .vjob-kw-x:hover{background:var(--bg-2);color:var(--ink)}
  .vjob-kw.plus{border-style:dashed;background:transparent;color:var(--ink-3);cursor:pointer;font:inherit;font-size:12px;font-weight:500}
  .vjob-kw.plus:hover{color:var(--ink);border-color:var(--ink-4)}
  .vjob-kw-add-row input{border:1px solid var(--input-rest-border);border-radius:99px;padding:4px 12px;font:inherit;font-size:12px;color:var(--ink);width:130px}
  /* Conditions */
  .vjob-disclaimer{display:flex;align-items:center;gap:6px;margin:0;font-size:11px;color:var(--ink-4)}
  .vjob-pbar{height:5px;border-radius:99px;background:var(--bg-2);margin:10px 0 12px;overflow:hidden}
  .vjob-pbar i{display:block;height:100%;border-radius:99px;background:var(--ink)}
  .vjob-todo-list{display:flex;flex-direction:column}
  .vjob-titem{display:flex;align-items:flex-start;gap:10px;padding:8px 2px;border-bottom:1px solid var(--border)}
  .vjob-titem:last-child{border-bottom:0}
  .vjob-titem-row{display:flex;align-items:baseline;gap:8px}
  .vjob-titem-row .vjob-titem-label{flex:1 1 auto;min-width:0}
  .vjob-titem-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:5px}
  .vjob-titem-label{font-size:13px;line-height:19px;color:var(--ink-2)}
  .vjob-titem.done .vjob-titem-label{color:var(--ink);font-weight:500}
  .vjob-proof{display:inline-flex;align-items:center;gap:5px;align-self:flex-start;border:1px solid var(--border-soft);background:var(--bg-2);border-radius:99px;padding:2px 9px;font:inherit;font-size:11px;color:var(--ink-3);cursor:pointer;max-width:100%}
  .vjob-proof:hover{color:var(--accent);border-color:var(--border-strong)}
  .vjob-confirm{border:1px solid var(--border);border-radius:10px;background:var(--bg);padding:9px 10px;display:flex;flex-direction:column;gap:3px;margin-top:2px}
  .vjob-confirm-q{font-size:12px;font-weight:600;color:var(--ink-2);margin-bottom:3px}
  .vjob-confirm-opt{display:flex;align-items:center;gap:7px;width:100%;text-align:left;border:0;background:transparent;border-radius:8px;padding:5px 7px;font:inherit;font-size:12px;color:var(--ink-2);cursor:pointer}
  .vjob-confirm-opt span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vjob-confirm-opt:hover{background:var(--hover-bg)}
  .vjob-confirm-opt.plain{color:var(--ink-3)}
  .vjob-tool-confirm{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:2px}
  .vjob-tool-confirm span{font-size:12px;color:var(--ink-4)}
  .vjob-tool-confirm button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border-soft);background:var(--surface);border-radius:999px;padding:3px 8px;font:inherit;font-size:11px;color:var(--ink-3);cursor:pointer}
  .vjob-tool-confirm button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{border-color:var(--border-strong);background:var(--bg-subtle);color:var(--ink)}
  .vjob-todo-note{margin:0;font-size:12px;line-height:17px;color:var(--ink-4);text-wrap:pretty}
  /* État d'accueil */
  .vjob-onboard{width:min(760px,calc(100vw - 56px));max-width:760px;margin:36px auto 0;background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;display:flex;flex-direction:column;gap:12px;text-align:center;align-items:center}
  .vjob-ob-ic{width:40px;height:40px;border-radius:10px;background:var(--bg-2);border:1px solid var(--border);display:grid;place-items:center;color:var(--ink-3)}
  .vjob-onboard h3{margin:2px 0 0;font-size:16px;font-weight:600;color:var(--ink)}
  .vjob-onboard > p{margin:0;font-size:13px;line-height:19px;color:var(--ink-3);text-wrap:pretty}
  .vjob-source-card{width:100%;margin-top:8px;padding:16px 0 0;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:12px;text-align:left}
  .vjob-source-tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:5px;border:1px solid var(--content-border);background:var(--content-bg);border-radius:var(--radius-lg);padding:4px}
  .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){min-width:0;min-height:38px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;background:transparent;border-radius:8px;padding:8px 12px;font:inherit;font-size:12px;font-weight:500;color:var(--ink-3);white-space:nowrap;cursor:pointer;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vjob-source-tabs button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){min-width:0}
  .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{color:var(--ink);background:var(--bg-2)}
  .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on{background:var(--ink);color:var(--fg-inverse);font-weight:600}
  .vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on svg{color:currentColor}
  .vjob-source-panel{display:flex;flex-direction:column;gap:10px}
  .vjob-source-grid{display:grid;grid-template-columns:1fr;gap:10px}
  .vjob-source-upload:focus-within{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .vjob-source-upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:132px;border:1px dashed var(--border-strong);border-radius:10px;background:var(--surface);color:var(--ink-3);text-align:center;cursor:pointer;padding:18px;transition:border-color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vjob-source-upload:hover{border-color:var(--ink-4);background:var(--bg-subtle);color:var(--ink-2)}
  .vjob-source-upload strong{font-size:13px;font-weight:600;color:var(--ink);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vjob-source-upload span{font-size:12px;line-height:17px;color:var(--ink-4);max-width:330px}
  .vjob-source-upload input{position:absolute;inset:0;opacity:0;cursor:pointer}
  .vjob-source-error{margin:0;font-size:12px;line-height:17px;color:var(--bad)}
  .vjob-source-actions{display:flex;justify-content:flex-end}
  .vjob-source-actions .ok{border:0;border-radius:8px;background:var(--accent);color:var(--fg-inverse);font:inherit;font-size:13px;font-weight:600;padding:8px 15px;cursor:pointer;transition:filter var(--dur-fast) var(--ease-out)}
  .vjob-source-actions .ok:hover{filter:brightness(1.04)}
  .vjob-source-actions .ok:disabled{opacity:.5;cursor:not-allowed;filter:none}
  .vjob-lost-progress{display:grid;grid-template-columns:1fr auto;gap:5px 10px;align-items:center}
  .vjob-lost-progress span{font-size:12px;font-weight:600;color:var(--ink)}
  .vjob-lost-progress b{font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--ink-4)}
  .vjob-lost-progress i{grid-column:1/-1;display:block;height:4px;border-radius:99px;background:var(--border);overflow:hidden}
  .vjob-lost-progress em{display:block;height:100%;border-radius:99px;background:var(--ink)}
  .vjob-lost-hints{display:flex;flex-direction:column;gap:6px}
  .vjob-lost-hints>span{font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4)}
  .vjob-lost-hints>div{display:flex;flex-wrap:wrap;gap:5px}
  .vjob-lost-hints button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){border:1px solid var(--border-soft);background:var(--surface);border-radius:999px;padding:3px 9px;font:inherit;font-size:12px;color:var(--ink-3);cursor:pointer}
  .vjob-lost-hints button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{border-color:var(--border-strong);background:var(--bg-subtle);color:var(--ink)}
  .vjob-lost-nav{display:flex;justify-content:space-between;gap:8px}
  .vjob-lost-nav button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border-soft);background:var(--surface);border-radius:8px;padding:6px 10px;font:inherit;font-size:12px;color:var(--ink-2);cursor:pointer}
  .vjob-lost-nav button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover:not(:disabled){background:var(--bg-subtle);color:var(--ink)}
  .vjob-lost-nav button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}

  /* ── Onglet « Réalisations & objectifs » (gestionnaire de to-do) ── */
  .vw{padding:0 22px 22px;display:flex;flex-direction:column;gap:14px}
  .vw-head{display:flex;flex-direction:column}
  .vw-head h3{margin:4px 0 5px;font-size:16px;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink)}
  .vw-head p{margin:0;max-width:680px;font-size:13px;line-height:18px;color:var(--ink-3);text-wrap:pretty}
  /* Bandeau de stats + progression */
  /* Barre d'outils */
  .vw-group-sel{display:inline-flex;align-items:center;gap:7px}
  .vw-group-lbl{font-size:11px;color:var(--ink-4);padding:0 6px 0 5px}
  /* Outils de la barre Kanban objectifs (entretien · affichage · filtres · recherche) :
     popovers calqués sur le Tableau candidatures, adaptés aux objectifs. */
  .gk-tool-wrap{position:relative;display:inline-flex}
  /* Densité des cartes du Kanban objectifs (réglage « Affichage ») */
  .gk-card.dens-compact .gk-card-title{font-size:13px}
  .gk-card.dens-compact .gk-subs{margin-top:7px;padding-top:7px}
  .gk-card.dens-cozy .gk-subs{margin-top:13px;padding-top:13px}

  /* ===== Gestion des objectifs — vue KANBAN (gestion de projet) ===== */

  /* Vue Kanban — même approche que le Tableau candidatures : hauteur fixe,
     entête de colonne fixe, cartes qui défilent à l'intérieur de chaque colonne. */
  .gk-shell{flex:1 1 auto;min-height:0;overflow:hidden}
  .gk-bodyfill{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
  .gk-statscroll{overflow-y:auto;gap:14px;padding-right:2px}
  .gk-empty-wrap{align-items:center;justify-content:center}
  .gk-foot{flex:0 0 auto;margin:0}
  .gk-scroll-wrap{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow-x:auto;overflow-y:hidden}
  @media (pointer:fine){
    .gk-scroll-wrap::-webkit-scrollbar{height:8px}
    .gk-scroll-wrap::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px}
    .gk-scroll-wrap::-webkit-scrollbar-track{background:transparent}
  }
  .gk-board{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:repeat(4,minmax(240px,1fr));gap:14px}
  /* Canon SIH-51 : la colonne n'est plus un slab teinté (écart 1,09:1
     invisible) — c'est une ZONE du panneau délimitée par l'espacement.
     La carte se détache par sa blancheur, son filet et son ombre. */
  .gk-col{border:1px solid transparent;border-radius:10px;display:flex;flex-direction:column;min-height:0;overflow:hidden;transition:border-color var(--dur-base) var(--ease-out),background var(--dur-base) var(--ease-out)}
  .gk-col.drop-over{border-color:var(--ink-4);background:var(--bg-2)}
  .gk-col-head{display:flex;align-items:center;gap:8px;padding:11px 13px 9px;border-bottom:1px solid transparent;flex:0 0 auto}
  .gk-col-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
  .gk-col-head h2{margin:0;font-size:13px;font-weight:600;color:var(--ink);letter-spacing:var(--tracking-tight)}
  .gk-col-head .count-badge{margin-left:auto}
  .gk-col-body{display:flex;flex-direction:column;gap:9px;padding:var(--candidature-column-inset,11px);flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
  @media (pointer:fine){
    .gk-col-body::-webkit-scrollbar{width:6px}
    .gk-col-body::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px}
    .gk-col-body::-webkit-scrollbar-track{background:transparent}
  }
  .gk-col-empty{font-size:12px;color:var(--ink-4);text-align:center;padding:18px 8px;border:1px dashed var(--border-strong);border-radius:8px}

  /* Candidatures réutilise la structure éprouvée d'Objectifs ; seuls le
     nombre de colonnes et le contenu métier des cartes diffèrent. */
  .cand-kanban-shell,.kb-stats-view{--candidature-board-inset:10px;--candidature-column-inset:11px}
  .cand-kanban-shell{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:5px;padding:0 var(--candidature-board-inset) 5px;overflow:hidden}
  .cand-kanban-board{gap:12px}
.cand-kanban-board > .gk-col[hidden]{display:none}
.cand-col-actions{display:flex;align-items:center;gap:4px;margin-left:auto}
.cand-col-toggle{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink-2);cursor:pointer}
.cand-col-toggle:hover{background:var(--bg-2);color:var(--ink)}
.cand-col-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cand-col-toggle[aria-disabled="true"],.cand-col-toggle[aria-disabled="true"]:hover{background:transparent;color:var(--ink-3);cursor:default}
.cand-columns-hint{margin:4px 0 0;color:var(--ink-3);font-size:12px}
@media (hover:hover) and (pointer:fine){
  .cand-col-toggle{opacity:0}
  .gk-col:hover .cand-col-toggle,.cand-col-toggle:focus-visible{opacity:1}
}

.cand-kanban-board > .cand-col-folded{overflow:hidden}
.cand-col-folded .gk-col-head{flex-direction:column;height:auto;gap:12px;padding:12px 0}
.cand-col-folded .gk-col-head h2{writing-mode:vertical-rl;flex:none}
.cand-col-folded .cand-col-actions{flex-direction:column-reverse;margin:0;gap:8px}
.cand-col-folded .gk-col-head .count-badge{margin:0}
.cand-col-folded .cand-kanban-body{display:none}

  .cand-kanban-shell .gk-scroll-wrap{padding-bottom:12px}
  /* Comme dans le Journal, le contenu passe sous un en-tête opaque dans
     la même zone défilable. Une seule découpe, au bord de la colonne. */
  .cand-kanban-board > .gk-col{overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain}
  .cand-kanban-board > .gk-col > .gk-col-head{position:sticky;top:0;z-index:1;background:var(--screen-plane)}
  .cand-kanban-body{flex:0 0 auto;overflow:visible;isolation:isolate}
  .cand-kanban-body .kc{flex:0 0 auto;padding:12px}
  .cand-kanban-board .kc.dragging{opacity:.5}

  /* SIH-111 : meme limite que .kc, sa jumelle : elle vient de la declaration unique. */
  .gk-card{position:relative;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;cursor:pointer;transition:box-shadow var(--dur-base) var(--ease-out),transform var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out);background:var(--content-bg);box-shadow:none;}
  .gk-card:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .gk-card.dragging{opacity:.5}
  .gk-prio{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-4)}
  .gk-prio.p-haute{color:var(--bad)}
  .gk-prio.p-moyenne{color:var(--warn)}
  .gk-prio.p-basse{color:var(--ink-4)}
  
  .gk-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:11px;padding-top:9px;border-top:1px solid var(--border)}
  .gk-foot-dates{display:inline-flex;align-items:center;gap:6px;min-width:0;overflow:hidden}
  .gk-date.muted{color:var(--ink-4)}
  .gk-date.muted svg{color:var(--ink-4)}
  .gk-date{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-data);font-size:11px;color:var(--ink-3)}
  .gk-date svg{color:var(--ink-4);flex:0 0 auto}
  .gk-date.over{color:var(--bad)}
  .gk-date.over svg{color:var(--bad)}
  .gk-date-arrow{color:var(--ink-4);flex:0 0 auto}
  .gk-card-title{padding-right:30px;font-size:14px;font-weight:500;line-height:1.4;color:var(--ink);text-wrap:pretty}

  /* Menu d'actions unique des items et cartes (SIH-131). Le déclencheur reste
     visible : une action disponible ne dépend jamais de la découverte au survol. */
  .card-options{position:relative;display:inline-flex;flex:0 0 auto;z-index:6}
  .card-options--corner{position:absolute;top:8px;right:8px}
  .ct-tl-it > .card-options--corner{top:-2px;right:0}
  .card-options--inline,.card-options--inline-above{margin-left:auto}
  .card-options.open{z-index:7}
  .card-options-trigger{opacity:1;pointer-events:auto;width:36px;height:36px;padding:0;border:1px solid var(--border-strong);border-radius:var(--radius-md);background:transparent;color:var(--ink-2);transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .card-options-trigger:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  /* DEV-496 : commande compacte réservée aux deux Kanban. Le titre garde sa
     place au survol ; le même menu reste accessible au clavier et au tactile. */
  .card-options--kanban.card-options--corner{top:7px;right:7px}
  .card-options--kanban .card-options-trigger{
    width:28px;height:28px;border:0;border-radius:var(--radius-sm);
    background:transparent;color:var(--ink);box-shadow:none;
    opacity:0;pointer-events:none;
    transition:opacity var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out);
  }
  .card-options--kanban .card-options-trigger svg{width:18px;height:18px;stroke-width:2.5;fill:currentColor}
  .item-action-host:hover > .card-options--kanban .card-options-trigger,
  .item-action-host:focus-within > .card-options--kanban .card-options-trigger,
  .card-options--kanban.open .card-options-trigger{opacity:1;pointer-events:auto}
  .card-options--kanban .card-options-trigger:hover,
  .card-options.card-options--kanban.open .card-options-trigger{background:color-mix(in srgb,var(--ink) 10%,var(--bg-2));color:var(--ink);box-shadow:none}
  .card-options--kanban .card-options-trigger:focus-visible{box-shadow:var(--ring-focus)}
  @media (hover:none),(pointer:coarse){.card-options--kanban .card-options-trigger{opacity:1;pointer-events:auto}}
  @media (prefers-reduced-motion:reduce){.card-options--kanban .card-options-trigger{transition:none}}
  .card-options-menu{position:absolute;top:calc(100% + 5px);right:0;z-index:8;display:flex;flex-direction:column;gap:1px;width:max-content;max-width:calc(100vw - 24px);min-width:min(148px,calc(100vw - 24px));padding:5px;border:1px solid var(--border-strong);border-radius:8px;background:var(--surface);box-shadow:var(--shadow-popover)}
  .card-options--inline-above .card-options-menu{top:auto;bottom:calc(100% + 5px)}
  .gk-card-desc{font-size:12px;line-height:1.45;color:var(--ink-3);margin-top:4px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .gk-card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:9px}
  .gk-carnet{display:inline-flex;align-items:center;gap:4px;max-width:100%;font-size:11px;color:var(--ink-3);background:var(--bg-2);border-radius:99px;padding:2px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gk-carnet svg{color:var(--ink-4);flex:0 0 auto}

  /* Carte d'objectif — sous-tâches imbriquées (checklist) */
  .gk-card.gk-obj .gk-card-title{font-weight:600}
  .gk-subs{margin-top:10px;border-top:1px solid var(--border);padding-top:9px}
  .gk-subs-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
  .gk-subs-lbl{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:500;color:var(--ink-3)}
  .gk-subs-lbl svg{color:var(--ink-4)}
  .gk-subs-cnt{font-family:var(--font-data);font-size:11px;color:var(--ink-3)}
  .gk-subs-bar{height:3px;border-radius:99px;background:var(--bg-2);overflow:hidden;margin-bottom:8px}
  .gk-subs-bar i{display:block;height:100%;background:var(--ink);border-radius:99px}
  .gk-sub-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}
  .gk-sub{display:flex;align-items:center;gap:7px;border-radius:8px;padding:3px 4px;transition:background var(--dur-fast) var(--ease-out)}
  .gk-sub:hover{background:var(--bg-2)}
  .gk-sub-toggle{flex:0 0 auto;display:inline-flex;line-height:0}
  .gk-sub-title{flex:1 1 auto;min-width:0;text-align:left;border:0;background:transparent;padding:0;font:inherit;font-size:12px;color:var(--ink-2);cursor:pointer;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gk-sub-title:hover{color:var(--ink);text-decoration:underline}
  .gk-sub.is-done .gk-sub-title{color:var(--ink-4);text-decoration:line-through}
  .gk-sub-stat{flex:0 0 auto;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}

  /* ── Onglet Statistiques ── */
  .gk-stats{display:flex;flex-direction:column;gap:14px;margin-top:4px}
  .gk-stats-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
  @media (max-width:1000px){.gk-stats-kpis{grid-template-columns:repeat(3,1fr)}}
  @media (max-width:700px){.gk-stats-kpis{grid-template-columns:repeat(2,1fr)}}
  .gk-kpi{background:var(--bg-2);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:2px}
  .gk-kpi .v{font-size:30px;font-weight:600;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}
  .gk-kpi .l{font-size:12px;color:var(--ink-3)}
  .gk-kpi.warn .v{color:var(--bad)}
  .gk-stats-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
  @media (max-width:900px){.gk-stats-row{grid-template-columns:1fr}}
  .gk-stats-card{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;background:var(--content-bg);box-shadow:none;}
  .gk-stats-h{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--ink-2);margin-bottom:12px}
  .gk-stats-h svg{color:var(--ink-4)}
  .gk-bigprog{display:flex;align-items:baseline;gap:8px;margin-bottom:9px}
  .gk-bigpct{font-size:30px;font-weight:600;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}
  .gk-bigsub{font-size:12px;color:var(--ink-3)}
  .gk-priolist{display:flex;flex-direction:column;gap:9px}
  .gk-prioline{display:flex;align-items:center;gap:9px}
  .gk-prioline .dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
  .gk-prioline-l{font-size:13px;color:var(--ink-2)}
  .gk-prioline-n{margin-left:auto;font-family:var(--font-data);font-size:13px;color:var(--ink);font-weight:500}
  .gk-carnetstats{display:flex;flex-direction:column;gap:12px}
  .gk-carnetstat-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:5px}
  .gk-carnetstat-nm{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gk-carnetstat-nm svg{color:var(--ink-4);flex:0 0 auto}
  .gk-carnetstat-n{color:var(--ink-3);flex:0 0 auto}
  .gk-carnetstat-bar{height:6px;border-radius:99px;background:var(--bg-2);overflow:hidden}
  .gk-carnetstat-bar i{display:block;height:100%;background:var(--ink);border-radius:99px}
  /* ===== Modale « Préparer ma review / mon 1:1 » (Prop 3) ===== */
  /* Contrôles : Pour (motif) + Période, alignés */
  /* ===== Document de synthèse généré (caché à l'écran, rendu en PDF via impression) ===== */
  .rvdoc{position:fixed;left:-9999px;top:0;width:794px;background:#fff;color:#15171B;font-family:'Sihage Rubik',system-ui,sans-serif}
  .rvdoc-title{font-size:27px;font-weight:700;letter-spacing:-.02em;margin:3px 0 0;color:#15171B}
  .rvdoc-sec{margin-bottom:22px;break-inside:avoid}
  .rvdoc-sec h2{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#15171B;margin:0 0 10px;padding-bottom:6px;border-bottom:1px solid #E8EBEF}
  .rvdoc-sec ul{list-style:none;margin:0;padding:0}
  .rvdoc-sec li{display:flex;justify-content:space-between;gap:16px;align-items:baseline;padding:6px 0;border-bottom:1px solid #F0F2F5;break-inside:avoid}
  
  /* Formulaire d'ajout */
  .vw-addform{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;display:flex;flex-direction:column;gap:10px}
  .vw-addmeta{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap}
  .vw-addbtns{display:flex;gap:6px;margin-left:auto}
  /* Sections groupées */
  .vw-section{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden}
  .vw-sec-head{display:flex;align-items:center;gap:9px;padding:11px 16px;border-bottom:1px solid var(--border);background:var(--bg-2)}
  .vw-sec-ico{width:22px;height:22px;border-radius:8px;background:var(--surface);border:1px solid var(--border);display:grid;place-items:center;color:var(--ink-3);flex-shrink:0}
  .vw-sec-head h4{margin:0;font-size:13px;font-weight:600;color:var(--ink);flex:1 1 auto}
  .vw-sec-head i{font-style:normal;font-family:var(--font-sans);font-size:11px;color:var(--ink-4);background:var(--surface);border:1px solid var(--border);border-radius:99px;padding:1px 8px}
  .vw-list{display:flex;flex-direction:column}
  /* Type d'ajout : Objectif / Tâche */
  /* Ligne de tâche / objectif */
  .vw-task{border-bottom:1px solid var(--border)}
  .vw-task:last-child{border-bottom:0}
  .vw-task-main{display:flex;align-items:center;gap:9px;padding:9px 16px}
  .vw-task.is-obj .vw-task-main{padding:11px 16px;background:color-mix(in srgb,var(--bg-2) 50%,var(--surface))}
  .vw-prio{flex:0 0 auto;width:22px;height:22px;border:1px solid var(--border-soft);background:var(--bg-2);border-radius:8px;display:grid;place-items:center;cursor:pointer;color:var(--ink-4);transition:all var(--dur-fast,.18s) var(--ease-out)}
  .vw-prio.p-haute{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,var(--border));background:color-mix(in srgb,var(--bad) 8%,var(--surface))}
  .vw-prio.p-moyenne{color:var(--warn)}
  .vw-prio.p-basse{color:var(--ink-5)}
  .vw-prio:hover{border-color:var(--ink-4)}
  .vw-open{flex:1 1 auto;min-width:0;display:flex;align-items:center;text-align:left;border:0;background:transparent;font:inherit;cursor:pointer;padding:3px 5px;border-radius:6px;margin:0 -5px}
  .vw-open:hover{background:var(--bg-2)}
  .vw-open:hover .vw-task-title{color:var(--accent)}
  .vw-task-title{font-size:13px;line-height:18px;color:var(--ink-2);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-task.is-obj .vw-task-title{font-weight:600;font-size:14px;color:var(--ink)}
  .vw-task.done .vw-task-title{color:var(--ink-4);text-decoration:line-through;text-decoration-color:var(--ink-5);font-weight:400}
  .vw-row-meta{display:inline-flex;align-items:center;gap:8px;flex-shrink:0;margin-left:auto}
  /* Marque sans nombre au bout d'une ligne (origine, candidature liée, preuve) : une icône seule ;
     les compteurs passent par CountBadge (DEV-560). */
  .vw-row-mark{display:inline-flex;color:var(--ink-5)}
  .vw-row-mark.ok{color:var(--good)}
  .vw-open-arrow{flex:0 0 auto;border:0;background:transparent;width:24px;height:24px;border-radius:6px;display:grid;place-items:center;color:var(--ink-5);cursor:pointer;opacity:0;transition:opacity var(--dur-fast,.18s) var(--ease-out)}
  .vw-task:hover .vw-open-arrow{opacity:1}
  .vw-open-arrow:hover{background:var(--bg-2);color:var(--ink-2)}
  /* Ajout rapide d'une tâche à un objectif — affordance discrète révélée au survol de la ligne
     (remplace l'ancien bouton pleine largeur « Ajouter une tâche » ; le bouton « Nouveau » et le
     tiroir de l'objectif couvrent le reste — retour Landry juin 2026). */
  .vw-addchild-inline{flex:0 0 auto;border:0;background:transparent;width:24px;height:24px;border-radius:6px;display:grid;place-items:center;color:var(--ink-4);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vw-task:hover .vw-addchild-inline{opacity:1}
  .vw-addchild-inline:hover{background:var(--accent-soft);color:var(--accent)}
  .vw-task .vjob-confirm{margin:0 16px 11px 47px}
  /* Segmented (réutilisé dans le tiroir) */

  /* Sous-tâches (réutilisé dans le tiroir) */

  /* ── Tiroir de détail (façon Asana) ── */
  /* ── Pop-up de détail (centré, taille B — comme la fiche candidature) ── */
  /* Détail d'une tâche : coque Travail commune (.ui-window.vw-modal) ; l'en-tête interne garde sa hauteur. */
  @keyframes vwPop{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  .vw-dr-head{display:flex;align-items:center;gap:8px;padding:12px 16px 12px 20px;border-bottom:1px solid var(--border);flex-shrink:0}
  /* Retour au tableau (même approche que la fiche candidature, Landry juin 2026) */
  /* Pastille de statut dans l'en-tête du détail — façon « Déplacer vers » des candidatures */
  .vw-statuspick{position:relative;display:inline-flex}
  .vw-statuspill{display:inline-flex;align-items:center;gap:7px;height:26px;padding:0 9px;border:1px solid var(--border-soft);background:var(--surface);border-radius:99px;font:inherit;font-size:12px;font-weight:600;color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .vw-statuspill:hover{background:var(--bg-2);border-color:var(--border-hover)}
  .vw-statuspill svg{color:var(--ink-4)}
  .vw-status-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
  .vw-status-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:var(--z-menu);min-width:212px;background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;animation:vwPop .16s var(--ease-out)}
  .vw-status-menu-head{font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4);padding:6px 8px 5px}

  .vw-status-opt-lbl{flex:1 1 auto}
  .vw-status-opt svg{color:var(--accent);flex:0 0 auto}
  .vw-dr-sp{flex:1 1 auto}
  /* Boutons à icône seule : padding:0 → centrage exact (consigne CLAUDE.md, Landry juin 2026).
     Ces boutons ont une taille explicite + place-items/justify center mais gardaient le
     padding UA (~1px 6px) qui faisait déborder l'icône à droite. */
  .vw-dr-child-open,.vw-dr-secadd,.vw-att-tile-x{padding:0}
  .vw-dr-body{flex:1 1 auto;min-height:0;overflow:hidden;padding:0;display:flex;flex-direction:column;gap:0}
  .vw-dr-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:0;align-items:stretch;flex:1;min-height:0}
  @media (max-width:780px){.vw-dr-grid{grid-template-columns:1fr;height:auto}}
  /* Scroll INDÉPENDANT par colonne (Landry, juin 2026) : la description (gauche)
     et le rail (droite) défilent chacun de leur côté, sans impacter l'autre. */
  .vw-dr-main,.vw-dr-rail{display:flex;flex-direction:column;gap:16px;min-width:0;min-height:0;overflow-y:auto}
  .vw-dr-main{padding:14px 24px 22px}
  .vw-dr-rail{padding:14px 22px 22px 24px;border-left:1px solid var(--border);gap:10px}
  @media (max-width:780px){
    .vw-dr-body{overflow-y:auto}
    .vw-dr-main,.vw-dr-rail{overflow:visible}
    .vw-dr-rail{padding:18px 22px 22px;border-left:0;border-top:1px solid var(--border)}
  }
  /* Rail compact (Landry, juin 2026) : viser « pas de scroll » au zoom normal —
     bulles plus petites, sections resserrées. */
  .vw-dr-rail .vw-dr-sec{gap:6px}
  .vw-dr-rail .vw-dr-sec-empty{font-size:11px;line-height:1.45}
  .vw-dr-titlerow{display:flex;align-items:flex-start;gap:10px}
  .vw-due-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border-soft);background:var(--bg-2);border-radius:8px;padding:5px 11px;font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer;white-space:nowrap}
  .vw-due-btn svg{color:var(--ink-4)}
  .vw-due-btn:hover{border-color:var(--border-hover);color:var(--ink)}
  .vw-due-btn.over{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,var(--border));background:color-mix(in srgb,var(--bad) 8%,var(--surface))}
  /* Plage début → échéance : la flèche dit le sens ; un côté non défini reste en
     gris « invite » pour qu'on distingue d'un coup d'œil une date posée d'un vide. */
  .vw-daterange{display:inline-flex;align-items:center;gap:3px}
  .vw-daterange-sep{display:inline-flex;align-items:center;color:var(--ink-4);flex:0 0 auto}
  .vw-due-btn:not(.set){color:var(--ink-4)}
  .vw-due-btn:not(.set) svg{color:var(--ink-5)}
  .vw-due-btn.set{color:var(--ink)}
  /* Header sur une ligne : mini-libellé sous l'icône (Landry, juin 2026). */
  .vw-due-btn.p5{align-items:center;gap:7px;padding:4px 10px}
  .vw-due-cap{display:inline-flex;flex-direction:column;align-items:center;gap:1px;line-height:1;flex:0 0 auto}
  .vw-due-cap svg{color:var(--ink-4)}
  .vw-due-btn.p5.set .vw-due-cap svg{color:var(--ink-3)}
  .vw-due-btn.p5.over .vw-due-cap svg{color:var(--bad)}
  .vw-due-val{line-height:1.1;white-space:nowrap}
  /* P5 — deux champs étiquetés DÉBUT / ÉCHÉANCE (option retenue, Landry juin 2026). */
  /* Mini-frise début → échéance (rail + popover). */
  .win-tl{display:flex;flex-direction:column;gap:4px;background:color-mix(in srgb,var(--accent) 7%,var(--surface));border:1px solid color-mix(in srgb,var(--accent) 16%,var(--surface));border-radius:10px;padding:8px 11px 9px}
  .win-tl.framed{border-bottom:1px solid var(--border);padding-bottom:11px;margin-bottom:4px}
  .win-tl-track{position:relative;height:6px;border-radius:99px;background:var(--surface);margin:2px 3px 0}
  .win-tl-fill{position:absolute;top:0;left:0;height:100%;border-radius:99px;background:var(--ink)}
  .win-tl-fill.over{background:var(--bad)}
  .win-tl-node{position:absolute;top:50%;width:10px;height:10px;border-radius:50%;background:color-mix(in srgb,var(--accent) 7%,var(--surface));border:2px solid var(--ink-4);transform:translate(-50%,-50%)}
  .win-tl-node.start{left:0}
  .win-tl-node.end{left:100%;border-color:var(--ink)}
  .win-tl-node.end.over{border-color:transparent;background:var(--bad)}
  .win-tl-now{position:absolute;top:50%;width:3px;height:14px;border-radius:2px;background:var(--accent);transform:translate(-50%,-50%);box-shadow:0 0 0 3px var(--accent-soft)}
  .win-tl-ends{display:grid;grid-template-columns:1fr auto 1fr;align-items:flex-end;gap:8px}
  .win-tl-end{display:flex;flex-direction:column;gap:1px;min-width:0;justify-self:start}
  .win-tl-end.r{align-items:flex-end;text-align:right;justify-self:end}
  .win-tl-lab{font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4)}
  .win-tl-val{font-size:12px;font-weight:600;color:var(--ink);white-space:nowrap}
  .win-tl-val.over{color:var(--bad)}
  .win-tl-rel{justify-self:center;font-size:11px;color:var(--ink-3);font-weight:500;white-space:nowrap;min-width:0}
  .win-tl-rel.over{color:var(--bad)}
  /* Mini-Gantt commun à l'objectif : une ligne par tâche datée, span partagé,
     repère « aujourd'hui » vertical (Landry juin 2026). */
  .win-gantt{display:flex;flex-direction:column;gap:6px;padding-top:2px}
  .win-gantt-rows{display:flex;flex-direction:column;gap:5px}
  .win-gantt-row{display:grid;grid-template-columns:82px 1fr;gap:9px;align-items:center}
  .win-gantt-rlab{font-size:11px;line-height:1.3;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .win-gantt-row.obj .win-gantt-rlab{font-weight:600;color:var(--ink-2)}
  .win-gantt-row.cur .win-gantt-rlab{color:var(--ink);font-weight:600}
  .win-gantt-rtrack{position:relative;height:12px;border-radius:99px;background:var(--bg-2)}
  .win-gantt-bar{position:absolute;top:50%;transform:translateY(-50%);height:7px;border-radius:99px;background:var(--ink-4);min-width:7px}
  .win-gantt-row.obj .win-gantt-bar{height:8px;background:var(--ink-3)}
  .win-gantt-row.cur .win-gantt-bar{background:var(--accent)}
  .win-gantt-bar.done{background:var(--good)}
  .win-gantt-bar.over{background:var(--bad)}
  .win-gantt-pt{position:absolute;top:50%;width:8px;height:8px;border-radius:50%;background:var(--ink-4);transform:translate(-50%,-50%);border:1.5px solid var(--surface)}
  .win-gantt-row.cur .win-gantt-pt{background:var(--accent)}
  .win-gantt-pt.done{background:var(--good)}
  .win-gantt-pt.over{background:var(--bad)}
  .win-gantt-now{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--accent);transform:translateX(-50%);border-radius:1px;opacity:.45;z-index:1}
  .win-gantt-row.cur .win-gantt-now{opacity:.85}
  .win-gantt-axis{display:grid;grid-template-columns:82px 1fr;gap:9px;margin-top:1px}
  .win-gantt-axtrack{display:flex;justify-content:space-between;font-family:var(--font-data);font-size:11px;letter-spacing:.02em;color:var(--ink-4)}

  .vw-dr-confirm{margin:0}
  .vw-dr-sec{display:flex;flex-direction:column;gap:10px}
  .vw-dr-sec h5{margin:0;display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;color:var(--ink);letter-spacing:.01em;text-transform:none}
  .vw-dr-sec h5 svg{color:var(--ink-4)}
  .vw-dr-sec h5 i{font-style:normal;font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--ink-4);background:var(--bg-2);border:1px solid var(--border);border-radius:99px;padding:1px 8px}
  .vw-dr-desc{width:100%;box-sizing:border-box;min-height:74px;border:1px solid var(--border);border-radius:10px;padding:10px 12px;font:inherit;font-size:13px;line-height:19px;color:var(--ink);background:var(--bg-2);outline:none;resize:vertical}
  .vw-dr-desc:focus{border-color:var(--accent);background:var(--surface);box-shadow:var(--ring-focus)}
  /* Éditeur de description — traitement de texte + joindre fichier/lien
     (même langage que l'éditeur du journal de bord, Landry juin 2026). */
  .vw-desc-rte{border:1px solid var(--border);border-radius:10px;background:var(--bg-2);overflow:hidden;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .vw-desc-rte:focus-within{border-color:var(--accent);background:var(--surface);box-shadow:var(--ring-focus)}
  .vw-desc-rte .jc-rte-toolbar{padding:4px 6px;margin:0;border-bottom:1px solid var(--border)}
  .vw-desc-rte .vw-dr-desc.bare{border:0;border-radius:0;background:transparent;min-height:84px;box-shadow:none}
  .vw-desc-rte .vw-dr-desc.bare:focus{border:0;box-shadow:none}
  .vw-desc-linkrow{padding:0 8px 8px}
  /* Checklist intégrée à la description (juin 2026, Landry) — cases à cocher
     que l'on remplit directement dans le bloc Description. Filet de séparation
     d'avec la zone de texte, jamais un cadre supplémentaire. */
  .vw-desc-checklist{padding:9px 10px 8px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:3px}
  .vw-cl-head{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--ink-4);margin:0 0 3px}
  .vw-cl-head > svg{color:var(--ink-4)}
  .vw-cl-head i{font-style:normal;font-weight:500;color:var(--ink-3);font-variant-numeric:tabular-nums}
  .vw-cl-row{display:flex;align-items:center;gap:9px;border-radius:8px;padding:3px 4px;margin:0 -4px}
  .vw-cl-row:hover{background:var(--bg-2)}
  .vw-cl-input{flex:1 1 auto;min-width:0;border:0;background:transparent;font:inherit;font-size:13px;line-height:18px;color:var(--ink);outline:none;padding:1px 0}
  .vw-cl-input::placeholder{color:var(--ink-4)}
  .vw-cl-row.done .vw-cl-input{color:var(--ink-4);text-decoration:line-through;text-decoration-color:var(--ink-5)}
  .vw-cl-rm{flex:0 0 auto;width:22px;height:22px;padding:0;border:0;background:transparent;border-radius:6px;display:grid;place-items:center;color:var(--ink-5);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vw-cl-row:hover .vw-cl-rm,.vw-cl-rm:focus-visible{opacity:1}
  .vw-cl-rm:hover{background:var(--surface);color:var(--ink-2)}
  /* Sous-tâches : ajout via un simple « + » (Landry juin 2026). */
  /* Séparateur dans le rail (pièces jointes ↔ compétences). */
  .vw-dr-railsep{height:1px;background:var(--border);margin:0}
  /* Cluster d'actions à droite d'un en-tête de section + « + » discret au survol (Landry juin 2026). */
  .vw-dr-sec-actions{margin-left:auto;display:inline-flex;align-items:center;gap:8px}
  .vw-dr-secadd{width:22px;height:22px;flex:0 0 auto;border:1px solid var(--border-soft);background:var(--surface);border-radius:6px;display:grid;place-items:center;color:var(--ink-4);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .vw-dr-sec:hover .vw-dr-secadd,.vw-dr-secadd:focus-visible{opacity:1}
  .vw-dr-secadd:hover{background:var(--bg-2);color:var(--ink);border-color:var(--ink-4)}
  /* Chips COMMUNES héritées de l'objectif/dossier parent — lecture seule, ton secondaire (Landry juin 2026). */
  /* « À l'origine » dans le pied : popover qui s'ouvre vers le HAUT (Landry juin 2026). */
  .vw-origin-up .vw-status-menu{top:auto;bottom:calc(100% + 6px)}
  .vw-statuspick.up .vw-status-menu{top:auto;bottom:calc(100% + 6px)}
  .vw-dr-foot .vdp-foot-left{overflow:visible}
  /* ============================================================
     Icônes centrées par défaut dans les boutons à icône seule.
     Convention projet (Landry, juin 2026) : un bouton qui ne contient
     qu'une icône doit la centrer parfaitement — jamais décalée à droite.
     ============================================================ */
  /* ============================================================
     Ic\u00f4nes centr\u00e9es dans les boutons \u00e0 ic\u00f4ne seule.
     Convention projet (Landry, juin 2026) : aucun padding par d\u00e9faut sur
     les <button> \u2014 chaque bouton d\u00e9finit le sien. C'est le padding UA
     (\u22481px 6px) qui d\u00e9centrait les petits boutons \u00e0 ic\u00f4ne seule (l'ic\u00f4ne
     d\u00e9bordait \u00e0 droite de la content-box) ; les classes texte (.btn,
     .vdp-btn, .vpf-btn\u2026) posent toutes leur propre padding et ne sont donc
     pas affect\u00e9es (sp\u00e9cificit\u00e9 sup\u00e9rieure).
     \u26a0 NE PAS cibler button:has(> svg:only-child) : :only-child ignore les
     n\u0153uds texte, donc \u00e7a matche aussi les boutons ic\u00f4ne+label et casse leur
     mise en page (retour Landry). */
  /* → Règle globale retirée (cassait les boutons icône+label) : le padding:0 est
     posé directement sur chaque classe de bouton à icône seule. */
  .vw-dr-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
  .vw-dr-sec-empty{margin:0;font-size:12px;line-height:1.5;color:var(--ink-4);text-wrap:pretty}
  /* ChipAdd — « + » discret au survol (hifi-media.jsx) : même esprit que le « + »
     des pièces jointes. Masqué par défaut, révélé au survol de la section parente. */
  .chipadd-btn{flex:0 0 auto;width:24px;height:24px;padding:0;border:1px dashed var(--border-strong);background:transparent;border-radius:6px;display:grid;place-items:center;color:var(--ink-4);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}
  .vw-dr-sec:hover .chipadd-btn,.vdp-block:hover .chipadd-btn,.chipadd-host:hover .chipadd-btn,.chipadd-btn:focus-visible{opacity:1}
  .chipadd-btn:hover{border-style:solid;border-color:var(--ink-4);color:var(--ink);background:var(--bg-2)}
  .chipadd-field input{border-radius:99px;padding:4px 12px;font:inherit;font-size:12px;color:var(--ink);width:124px}
  .vw-dr-hint{margin:0;font-size:11px;line-height:16px;color:var(--ink-4);text-wrap:pretty}
  .vw-dr-children{display:flex;flex-direction:column;gap:7px}
  .vw-dr-child{display:flex;align-items:center;gap:9px;border:1px solid var(--border);background:var(--bg-2);border-radius:8px;padding:7px 10px}
  .vw-dr-child-t{flex:1 1 auto;min-width:0;text-align:left;border:0;background:transparent;font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-dr-child-t:hover{color:var(--accent)}
  .vw-dr-child.done .vw-dr-child-t{color:var(--ink-4);text-decoration:line-through;text-decoration-color:var(--ink-5)}
  .vw-dr-child > svg{color:var(--ink-5);flex-shrink:0}
  .vw-dr-child .vw-row-meta{margin-left:0}
  .vw-dr-stepadd{display:flex;align-items:center;gap:7px}
  .vw-dr-stepadd button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){flex:0 0 auto;width:30px;height:30px;border:1px solid var(--border-soft);background:var(--surface);border-radius:8px;display:grid;place-items:center;color:var(--ink-3);cursor:pointer}
  .vw-dr-stepadd button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){flex:0 0 auto;width:30px}
  .vw-dr-stepadd button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
  .vw-dr-stepadd button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):not(:disabled):hover{border-color:var(--ink-4);color:var(--ink)}

  /* ============================================================
     Détail d'objectif — refonte juin 2026 (Landry) :
     navigation en profondeur (3 niveaux), pièces jointes en
     bande horizontale, colonne IA, assistant à la demande.
     ============================================================ */

  /* Fil d'Ariane — compact, troncature au milieu si > 3 niveaux. */
  .vw-dr-bc{display:inline-flex;align-items:center;gap:2px;flex-wrap:nowrap;min-width:0;padding:0;margin:0;color:var(--ink-2);max-width:100%;overflow:hidden}
  .vw-dr-bc > svg{flex:0 0 auto;color:var(--ink-4)}
  .vw-dr-bc-seg{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 7px;border-radius:6px;border:0;background:transparent;color:var(--ink-2);font:inherit;font-size:12px;font-weight:500;cursor:pointer;max-width:260px;min-width:0}
  .vw-dr-bc-seg:hover{background:var(--bg-2);color:var(--ink)}
  .vw-dr-bc-seg > svg{color:var(--ink-4)}
  .vw-dr-bc-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .vw-dr-bc-ell{padding:0 2px;color:var(--ink-5);font-size:13px;user-select:none}

  /* Pas d'animation @keyframes ici : key + keyframes se fige à opacity:0 dans
     ce runtime (cf. design system). Contenu toujours visible. */
  .vw-dr-main{gap:10px}
  .vw-dr-fade{display:flex;flex-direction:column;gap:18px}

  /* Compteurs inline dans les en-têtes de section. */

  /* Sous-tâches : ligne dense + bouton « Ouvrir » pour le drill-in. */
  .vw-dr-child-open{flex:0 0 auto;width:22px;height:22px;border:0;background:transparent;color:var(--ink-4);border-radius:6px;cursor:pointer;display:grid;place-items:center}
  .vw-dr-child-open:hover{background:var(--surface);color:var(--ink)}

  /* Pièces jointes — bande horizontale scrollable + vignettes carrées. */
  .vw-att-tile{position:relative;width:148px;height:108px;margin:0;border:1px solid var(--border);background:var(--bg-2);border-radius:8px;overflow:hidden;display:flex;flex-direction:column}
  .vw-att-tile.is-img img{display:block;width:100%;height:74px;object-fit:cover;background:var(--surface-3)}
  .vw-att-tile-ic{height:74px;display:flex;align-items:center;justify-content:center;background:var(--surface);color:var(--ink-4);border-bottom:1px solid var(--border)}
  .vw-att-tile.is-pdf .vw-att-tile-ic{color:var(--bad)}
  .vw-att-tile.is-doc .vw-att-tile-ic{color:var(--accent)}
  .vw-att-tile.is-link .vw-att-tile-ic{color:var(--ink-3)}
  .vw-att-tile.is-sheet .vw-att-tile-ic{color:var(--good)}
  .vw-att-tile figcaption{flex:1;padding:5px 8px;font-size:11px;line-height:1.3;color:var(--ink-2);display:flex;align-items:center;justify-content:space-between;gap:4px}
  .vw-att-tile figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .vw-att-tile figcaption em{font-style:normal;font-family:var(--font-sans);font-size:11px;color:var(--ink-4);flex:0 0 auto}
  .vw-att-tile-x{position:absolute;top:5px;right:5px;width:20px;height:20px;border:0;border-radius:999px;background:color-mix(in srgb,var(--ink) 55.00000000000001%,transparent);color:var(--fg-inverse);cursor:pointer;display:grid;place-items:center;opacity:0;transition:opacity 180ms var(--ease-out)}
  .vw-att-tile:hover .vw-att-tile-x{opacity:1}
  .vw-att-tile-x:hover{background:var(--bg-2);color:var(--ink)}

  /* ── Pièces jointes unifiées (.smed-*) — moteur partagé fichiers+liens ──────
     Pop-up objectif (rail) ET pop-up entrée Vault (colonne). Vignettes riches,
     filtre type façon WhatsApp, « + » discret au survol. (hifi-media.jsx) */
  .smed{display:flex;flex-direction:column;gap:7px}
  .smed-head{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;letter-spacing:.01em;color:var(--ink)}
  .smed-head > svg{width:13px;height:13px;flex:0 0 auto;color:var(--ink-4)}
  .smed-title{flex:0 0 auto}
  .smed-count{font-style:normal;font-family:var(--font-data);font-size:11px;font-weight:400;color:var(--ink-4)}
  .smed-add-wrap{margin-left:auto;position:relative;display:inline-flex}
  .smed-add{width:22px;height:22px;flex:0 0 auto;padding:0;border:1px solid var(--border-soft);background:var(--surface);border-radius:6px;display:grid;place-items:center;color:var(--ink-4);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .smed:hover .smed-add,.smed-add:focus-visible{opacity:1}
  .smed-add:hover{background:var(--bg-2);color:var(--ink);border-color:var(--ink-4)}
  .smed-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:6;min-width:188px;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);padding:5px;display:flex;flex-direction:column;gap:1px}
  .smed-menu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:flex;align-items:center;gap:9px;width:100%;border:0;background:transparent;border-radius:8px;padding:8px 9px;font:inherit;font-size:13px;color:var(--ink-2);text-align:left;cursor:pointer;text-transform:none;letter-spacing:var(--tracking-normal)}
  .smed-menu button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
  .smed-menu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--hover-bg);color:var(--ink)}
  .smed-menu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) > svg{color:var(--ink-4);flex:0 0 auto}
  /* Filtre segmenté (pill, item actif blanc + ombre — convention DS). */
  .smed-linkadd{display:flex;align-items:center;gap:7px}
  .smed-linkadd input{flex:1 1 auto;min-width:0;border-radius:8px;padding:6px 11px;font:inherit;font-size:13px;color:var(--ink)}
  .smed-linkadd button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){flex:0 0 auto;width:30px;height:30px;padding:0;border:1px solid var(--border-soft);background:var(--surface);border-radius:8px;display:grid;place-items:center;color:var(--ink-2);cursor:pointer}
  .smed-linkadd button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){flex:0 0 auto;width:30px}
  .smed-linkadd button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
  .smed-linkadd button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):not(:disabled):hover{background:var(--bg-2);color:var(--ink);border-color:var(--ink-4)}
  .smed-strip{display:flex;gap:9px;overflow-x:auto;padding:1px 0 5px;scroll-snap-type:x proximity}
  @media (pointer:fine){
    .smed-strip::-webkit-scrollbar{height:6px}
    .smed-strip::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:3px}
    .smed-strip::-webkit-scrollbar-track{background:transparent}
  }
  .smed-tile{position:relative;flex:0 0 auto;width:124px;scroll-snap-align:start;margin:0;border:1px solid var(--content-border);background:var(--content-bg);border-radius:var(--radius-lg);overflow:hidden;display:flex;flex-direction:column;text-decoration:none}
  .smed-pic{height:52px;background:var(--surface-3);overflow:hidden}
  .smed-pic img{display:block;width:100%;height:100%;object-fit:cover}
  .smed-ic{height:52px;display:grid;place-items:center;background:var(--surface-2);color:var(--ink-3);border-bottom:1px solid var(--border)}
  .smed-tile.is-link .smed-ic{color:var(--ink-3)}
  .smed-tile.is-link:not([data-edge-role="content"]){cursor:default}
  .smed-tile.is-link[data-edge-role="content"]:hover{background:var(--content-hover-bg);border-color:var(--content-hover-border)}
  .smed-tile.is-link[data-edge-role="content"]:hover .smed-ic{background:var(--bg-2)}
  .smed-cap{padding:6px 8px;border-top:1px solid var(--border);font-size:11px;line-height:1.3;color:var(--ink-2);font-weight:500;display:flex;align-items:center;justify-content:space-between;gap:5px}
  .smed-tile.is-img .smed-cap{border-top:0}
  .smed-cap span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .smed-cap em{font-style:normal;font-family:var(--font-sans);font-size:11px;color:var(--ink-4);flex:0 0 auto}
  .smed-x{flex:0 0 auto;padding:0;border:0;cursor:pointer;display:grid;place-items:center;color:var(--ink-4);background:transparent;border-radius:999px;transition:opacity var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .smed-x.is-tile{position:absolute;top:5px;right:5px;width:20px;height:20px;background:color-mix(in srgb,var(--ink) 55.00000000000001%,transparent);color:var(--fg-inverse);opacity:0}
  .smed-tile:hover .smed-x.is-tile{opacity:1}
  .smed-x.is-tile:hover{background:var(--bg-2);color:var(--ink)}
  .smed-empty{margin:0;font-size:12px;line-height:1.5;color:var(--ink-4);text-wrap:pretty}

  /* Rail IA — pied de provenance discret (une seule signalisation « assistant »). */
  .vw-ai-foot{margin:2px 0 0;display:flex;gap:6px;align-items:flex-start;font-size:11px;line-height:1.4;color:var(--ink-4);padding-top:7px;border-top:1px solid var(--border)}
  .vw-ai-foot svg{flex:0 0 auto;color:var(--accent);margin-top:1px}
  /* Nouvel objectif : fenêtre Travail commune, colonne de saisie centrée dans le corps */
  .vw-newtask-body{display:flex;flex-direction:column;gap:20px;padding:8px 14px;max-width:720px;margin:0 auto;width:100%}
  .vw-newtask-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
  .vw-newtask-tip{display:flex;align-items:flex-start;gap:7px;margin:0;padding:11px 13px;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;font-size:12px;line-height:17px;color:var(--ink-3)}
  .vw-newtask-tip svg{flex-shrink:0;margin-top:2px;color:var(--accent)}
  .vw-newtask-kbd{font-family:var(--font-data);font-size:11px;color:var(--ink-4)}
  /* À l'origine / commanditaire dans l'en-tête */
  .vw-origin-pick{position:relative;display:inline-flex}
  .vw-origin-hbtn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 9px 0 7px;border:1px solid var(--border-soft);background:var(--surface);border-radius:99px;font:inherit;font-size:13px;font-weight:500;color:var(--ink-2);cursor:pointer;max-width:210px;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .vw-origin-hbtn:hover{background:var(--bg-2);border-color:var(--border-hover)}
  .vw-origin-hbtn svg{color:var(--ink-4);flex:0 0 auto}
  .vw-origin-hbtn.self svg:first-child{color:var(--accent)}
  .vw-origin-hbtn.empty{color:var(--ink-3);border-style:dashed}
  .vw-origin-hbtn .vw-origin-av.xs{margin-left:-2px}
  .vw-origin-hnm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-origin-av.xs{width:20px;height:20px;font-size:11px;line-height:1;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:var(--fg-inverse);font-weight:600;flex:0 0 auto}
  .vw-origin-menu{min-width:290px;max-width:340px;padding:6px}
  .vw-origin-menu .vw-pick-search{margin:4px 2px 6px}
  .vw-origin-menu .vw-pick-list{max-height:220px;overflow:auto}
  .vw-foot-carnetbtn{border:0;background:transparent;padding:0;cursor:pointer;max-width:210px}
  .vw-foot-carnetbtn .vdp-fc-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-foot-carnetbtn:hover{color:var(--accent)}
  .vw-foot-carnetbtn:hover svg{color:var(--accent)}
  .vw-foot-opts{position:relative;display:inline-flex}
  /* Candidature liée dans le pied (en bas à droite) */

  .vw-foot-cand{border:0;background:transparent;padding:0;cursor:pointer;max-width:180px;display:inline-flex;align-items:center;gap:7px}
  .vw-foot-cand .vdp-fc-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-foot-cand:hover .vdp-fc-nm{color:var(--accent)}
  .vw-cand-opt-body{display:flex;flex-direction:column;min-width:0;text-align:left}
  .vw-cand-opt-body .n{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-cand-opt-body .r{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

  .vw-foot-menu-sep{height:1px;background:var(--border);margin:4px 2px}
  /* Journal de la tâche (commentaires horodatés) */
  /* À l'origine (commanditaire) + candidature liée */
  .vw-origin-sec{position:relative}
  .vw-origin-card,.vw-cardlink-card{display:flex;align-items:center;gap:10px;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;background:var(--content-bg);box-shadow:none;}
  .vw-origin-av{flex:0 0 auto;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:var(--fg-inverse);font-family:var(--font-sans);font-size:11px;font-weight:600}
  .vw-origin-av.sm{width:26px;height:26px;font-size:11px}
  .vw-origin-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:1px}
  .vw-origin-body .n{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-origin-body .r{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-origin-self{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
  .vw-origin-empty{display:inline-flex;align-items:center;gap:8px;width:100%;box-sizing:border-box;border:1px dashed var(--border-strong);background:transparent;border-radius:10px;padding:10px 12px;font:inherit;font-size:13px;color:var(--ink-3);cursor:pointer;text-align:left}
  .vw-origin-empty svg{color:var(--ink-4)}
  .vw-origin-empty:hover{border-color:var(--ink-4);color:var(--ink);background:var(--bg-2)}
  /* Popover de sélection (contact / candidature) */
  .vw-pick{margin-top:8px;border:1px solid var(--border-strong);background:var(--surface);border-radius:10px;box-shadow:var(--shadow-popover);overflow:hidden}
  .vw-pick-search{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--border);cursor:text}
  .vw-pick-search svg{color:var(--ink-4);flex-shrink:0}
  .vw-pick-search input{flex:1 1 auto;min-width:0;border:0;outline:0;font:inherit;font-size:13px;color:var(--ink);background:transparent}
  .vw-pick-list{max-height:220px;overflow-y:auto;padding:4px;display:flex;flex-direction:column;gap:1px}
  .vw-pick-item{display:flex;align-items:center;gap:10px;text-align:left;border:0;background:transparent;border-radius:8px;padding:7px 8px;cursor:pointer}
  .vw-pick-item:hover{background:var(--hover-bg)}
  .vw-pick-it-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:1px}
  .vw-pick-it-body .n{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-pick-it-body .r{font-size:11px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vw-pick-list .vw-sb-empty{padding:10px 10px}
  .vw-pick-foot{display:flex;gap:4px;border-top:1px solid var(--border);padding:6px}
  .vw-pick-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){flex:1 1 0;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;background:transparent;border-radius:8px;padding:7px 8px;font:inherit;font-size:12px;color:var(--ink-2);cursor:pointer}
  .vw-pick-foot button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){flex:1 1 0}
  .vw-pick-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-2);color:var(--ink)}
  .vw-pick-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) svg{color:var(--ink-4)}
  .vw-pick-manual{padding:10px;display:flex;flex-direction:column;gap:7px}
  .vw-pick-manual input{border-radius:8px;padding:7px 10px;font:inherit;font-size:13px;color:var(--ink)}
  .vw-pick-mrow{display:flex;gap:6px}
  /* En-tête : titre + bascule Gérer / Synthèse */
  .vw-head{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
  /* En-tête « Tâches & objectifs » sur une seule ligne : titre + contexte + bulle d'info, toggle à droite */
  .vw-head-1l{align-items:center;flex-wrap:nowrap;gap:12px}

  /* En-tête Objectifs sur une seule ligne : titre + filtre-icône (gauche) · grouper/bascule/nouveau (droite) */
  .vw-head-r{display:flex;align-items:center;gap:10px;margin-left:auto;flex:0 0 auto}
  .vw-filterbtn-wrap{position:relative;flex:0 0 auto}
  .vw-filterbtn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border-soft);background:var(--surface);border-radius:8px;color:var(--ink-3);cursor:pointer;transition:border-color var(--dur-fast,.18s) var(--ease-out),color var(--dur-fast,.18s) var(--ease-out)}
  .vw-filterbtn:hover{border-color:var(--border-hover);color:var(--ink)}
  .vw-filterbtn.on{border-color:var(--border-strong);color:var(--ink)}
  .vw-filterbtn-dot{position:absolute;top:5px;right:5px;width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}
  /* ── Vue Synthèse ── */
  .vw-synth{display:flex;flex-direction:column;gap:14px}
  /* Répartition de la contribution */
  /* Blocs de contribution */
  .vw-synth-block{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;display:flex;flex-direction:column;gap:11px}
  .vw-synth-block > header{display:flex;align-items:flex-start;gap:11px}
  .vw-sb-ico{flex-shrink:0;width:30px;height:30px;border-radius:8px;background:var(--bg-2);border:1px solid var(--border);display:grid;place-items:center;color:var(--ink-3)}
  .vw-synth-block.strong .vw-sb-ico{background:color-mix(in srgb,var(--accent) 10%,var(--surface));border-color:color-mix(in srgb,var(--accent) 30%,var(--border));color:var(--accent)}
  .vw-sb-titles{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
  .vw-sb-titles h4{margin:0;font-size:14px;font-weight:600;color:var(--ink);display:flex;align-items:baseline;gap:8px}
  .vw-sb-titles h4 i{font-style:normal;font-family:var(--font-sans);font-size:11px;color:var(--ink-4);background:var(--bg-2);border:1px solid var(--border);border-radius:99px;padding:1px 8px}
  .vw-synth-block.strong .vw-sb-titles h4 i{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 30%,var(--border))}
  .vw-sb-titles p{margin:0;font-size:12px;line-height:17px;color:var(--ink-3);text-wrap:pretty}
  .vw-sb-empty{margin:0;font-size:12px;color:var(--ink-4)}
  .vw-sb-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
  .vw-sb-list li{display:flex;align-items:flex-start;flex-wrap:wrap;gap:8px;font-size:13px;line-height:19px;color:var(--ink-2)}
  .vw-sb-list li > svg{flex-shrink:0;margin-top:2px;color:var(--good)}
  .vw-sb-list li.done .vw-sb-txt{color:var(--ink-3)}
  .vw-sb-list li.doing > svg{color:var(--ink-4)}
  .vw-sb-txt{flex:1 1 auto;min-width:0}
  .vw-sb-prog .vjob-pbar{margin:0 0 2px}

  /* ── Onglet « Compétences pro » ── */
  .vsk{padding:0 22px 22px;display:flex;flex-direction:column;gap:14px}
  /* Une seule colonne : les 3 familles prennent toute la largeur et la ligne d'assurance passe
     DESSOUS, comme la footerline de la maquette. En 2 colonnes, les compétences se tassaient sur
     ~60 % de la largeur et le pied flottait à leur droite, à mi-hauteur — il se lisait comme un
     encart voisin, pas comme la garantie de l'écran. */
  .vsk-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;align-items:start}
  .vsk-fams{display:flex;flex-direction:column;gap:14px}
  .vsk-fam{background:var(--support-bg);border:0;border-radius:var(--radius-md);padding:12px}
  .vsk-fam h4{margin:0 0 10px;font-size:11px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);font-family:var(--font-sans)}
  .vc-list{display:flex;flex-direction:column;gap:8px}

  /* Barre de la vue carnet : compteur + bascule liste/tuiles — collante sous les tabs */
  /* `.vc-carnet-bar` RETIRÉE le 2026-08-03 (SIH-82) : masque collant rendu par aucun JSX. */

  .vc-display-wrap{position:relative}
  /* SIH-115 : role discret. Geometrie, peinture et reponse au survol viennent de la
     declaration des roles ; ne reste ici que l'etat ACTIF, qui n'est pas un rang. */
  .vc-display-btn.on{background:var(--accent-soft);color:var(--accent-ink)}
  .vc-display-menu{position:absolute;top:36px;right:0;z-index:var(--z-menu);min-width:212px;background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;display:flex;flex-direction:column;gap:1px}
  .vc-display-menu-head{font-family:var(--font-sans);font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);padding:6px 8px 5px}
  /* Réglage d’affichage : libellé à gauche, interrupteur à droite. */
  
  .vc-composer-mode-settings{position:relative;margin:7px -2px -2px;padding:9px 2px 2px;
    border-top:1px solid var(--border-strong);
    background:linear-gradient(180deg,color-mix(in srgb,var(--bg-muted) 62%,transparent),transparent 72%);
    box-shadow:0 -8px 16px -18px color-mix(in srgb,var(--ink) 70%,transparent)}
  .vc-composer-mode-settings::before{content:"";position:absolute;left:8px;right:8px;top:-1px;height:1px;
    background:linear-gradient(90deg,transparent,var(--ink-4),transparent);opacity:.45}
  .vc-composer-mode-settings .vc-display-menu-head{padding-top:3px}
  /* Pastille « filtre actif » sur le bouton + menu de filtres (chips Type/Période/Tag) */
  .vc-display-dot{position:absolute;top:5px;right:5px;width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}
  .vc-display-wrap .vc-display-btn{position:relative}
  .vc-filter-menu{min-width:268px;max-width:300px;padding:6px 8px 9px}
  .vc-filter-menu .vc-display-menu-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
  .vc-filter-group{padding:6px 1px 2px}
  .vc-filter-group+.vc-filter-group{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}
  .vc-filter-glabel{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);margin-bottom:7px}
  .vc-filter-glabel svg{color:var(--ink-4)}
  .vc-filter-chips{display:flex;flex-wrap:wrap;gap:5px}

  /* Vue tuiles — façon gestionnaire de fichiers (dossiers) */
  .vc-list.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
  .vc-list.tiles .vcj-tile{display:flex;min-width:0;flex-direction:column}
  .vc-list.tiles .vcj-tile .vcj-group-h{margin:0 2px 8px}

  /* Tuile d'ajout — façon gestionnaire de fichiers (nouveau document dans la section courante) */
  .vc-addtile{
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
    min-height:120px;border:1.5px dashed var(--border-strong);border-radius:10px;
    background:transparent;color:var(--ink-3);cursor:pointer;font:inherit;
    transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .vc-addtile:hover{border-color:var(--accent);background:var(--accent-50);color:var(--accent)}
  .vc-addtile-plus{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--bg-2);color:var(--ink-3);transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vc-addtile:hover .vc-addtile-plus{background:var(--accent);color:var(--fg-inverse)}
  .vc-addtile-lbl{font-size:13px;font-weight:600}

  /* ===== Gestionnaire de fichiers (carnets) ===== */
  .fm{display:flex;flex-direction:column;gap:10px;padding:10px 22px 20px}
  .fm-flat{gap:18px}
  .fm-title{display:flex;align-items:center;gap:7px;margin:0;font-size:16px;line-height:1.25;color:var(--ink)}
  .fm-title svg{color:var(--ink-3)}
  .fm-subtitle{margin:3px 0 0;font-size:12px;line-height:1.45;color:var(--ink-3)}
  .fm-error{display:flex;align-items:center;gap:7px;padding:9px 12px;border:1px solid var(--danger-200);border-radius:8px;background:var(--danger-50);color:var(--danger-600);font-size:12px}
  .fm-type-group{display:flex;flex-direction:column;gap:9px}
  .fm-type-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:7px;border-bottom:1px solid var(--border);color:var(--ink-2);font-size:13px;font-weight:600}
  .fm-type-head span{display:inline-flex;align-items:center;gap:7px}
  .fm-type-head svg{color:var(--ink-4)}
  .fm-type-head b{font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--ink-4)}
  .fm-file-thumb{height:74px;margin:-2px -2px 2px;border-radius:8px;overflow:hidden;background:var(--bg-2);border:1px solid var(--border)}
  .fm-file-thumb img{width:100%;height:100%;object-fit:cover;display:block}
  .fm-file-thumb-pdf{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--bad);background:linear-gradient(180deg,color-mix(in srgb,var(--bad) 7%,var(--surface)),var(--surface))}
  .fm-file-thumb-pdf span{font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:var(--tracking-caps);color:var(--ink-4)}
  .fm-file-ico.k-img{background:color-mix(in srgb,var(--accent) 12%,var(--bg-2));color:var(--accent)}
  .fm-file-ico.k-audio{background:var(--tag-cyan);color:var(--tag-cyan-ink)}
  .fm-file-ico.k-pdf{background:color-mix(in srgb,var(--bad) 12%,var(--bg-2));color:var(--bad)}
  .fm-file-ico.k-generated{background:var(--accent-soft);color:var(--accent)}
  .fm-file-ico.k-link{background:color-mix(in srgb,var(--good) 12%,var(--bg-2));color:var(--good)}
  .fm-file-ico.k-markdown{background:var(--bg-2);color:var(--ink-3)}
  .fm-file-src{display:inline-flex;align-items:center;gap:4px;max-width:100%;font-size:11px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .fm-file-src svg{flex-shrink:0;color:var(--ink-4)}
  .fm-file-foot{flex-wrap:wrap;row-gap:4px}
  .fm-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
  .fm-actions{display:flex;gap:6px;flex:0 0 auto}

  .fm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;align-content:start}
  .fm-grid--generated{grid-template-columns:repeat(2,minmax(0,300px))}

  /* Tuile dossier */
  .fm-folder{position:relative;display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--content-border);border-radius:10px;cursor:pointer;transition:transform var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out);background:var(--content-bg);box-shadow:none;}
  .fm-folder:hover{transform:none;border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .fm-folder.drop{border-color:var(--accent);background:var(--accent-50);border-style:dashed}
  .fm-folder.dragging{opacity:.45}

  /* Tuile fichier (note) */
  .fm-file{position:relative;display:flex;flex-direction:column;gap:7px;min-height:128px;padding:16px;border:1px solid var(--content-border);border-radius:var(--radius-lg);cursor:pointer;transition:transform var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out);background:var(--content-bg);box-shadow:none;}
  .fm-file.generated{border-color:var(--content-border)}
  .fm-file:hover{transform:none;border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .fm-file.dragging{opacity:.45}
  .fm-generated-thumb{height:170px;margin:-2px -2px 6px}
  .studio-doc-thumb-preview{width:70px;height:90px;position:relative;overflow:hidden;background:var(--surface);color:var(--ink);pointer-events:none;container-type:inline-size}
  .document-pocket{position:relative;isolation:isolate;overflow:hidden;border:0;border-radius:8px;background:radial-gradient(115% 85% at 50% -8%,var(--document-desk-light) 0%,var(--document-desk-deep) 80%)}
  .document-pocket .studio-doc-thumb-preview{z-index:0;width:calc(100% - 32px);height:calc(100% + 48px);margin:14px 16px 0;border:1px solid color-mix(in srgb,var(--ink) 32%,var(--surface));border-radius:var(--radius-xs);box-shadow:0 0 3px color-mix(in srgb,var(--ink) 14%,transparent),0 0 16px color-mix(in srgb,var(--ink) 18%,transparent)}
  .document-miniature-placeholder{display:grid;place-items:center;align-content:center;gap:7px;background:var(--surface);color:var(--ink-4)}
  .document-miniature-state{font-size:11px;color:var(--ink-3)}
  .document-miniature-page{position:absolute;inset:0 auto auto 0;width:794px;transform:scale(calc(100cqw / 794px));transform-origin:top left;background:var(--surface)}
  .document-miniature-page .doc-html-preview-stage{margin:0}
  .fm-file.generated{min-height:0;cursor:pointer}
  .document-preview-description{display:grid;gap:5px;min-width:0}
  .document-preview-title-line{display:flex;align-items:center;gap:8px;min-width:0;color:var(--ink);font-size:14px;line-height:1.25}
  .document-preview-title-line strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .document-preview-kind-icon{width:24px;height:24px;display:grid;place-items:center;flex:0 0 auto;border-radius:8px;background:var(--bg-2);color:var(--ink-3)}
  .document-preview-role{overflow:hidden;color:var(--ink-2);font-size:12px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .document-preview-meta{color:var(--ink-3);font-family:var(--font-sans);font-size:11px;line-height:1.35}
  .fm-generated-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto}
  .fm-generated-actions button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){font:inherit;font-size:13px;font-weight:500;cursor:pointer}
  .fm-generated-actions .document-delete-action .card-options-trigger{padding:0}
  .fm-file-head{display:flex;align-items:center;justify-content:space-between}
  .fm-file-ico{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:var(--bg-2);color:var(--ink-3)}
  .fm-file-name{font-size:14px;font-weight:600;color:var(--ink);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .fm-file-foot{margin-top:auto;display:flex;align-items:center;gap:8px}
  .fm-file-when{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--ink-3);font-family:var(--font-data)}

  /* Tuile d'ajout */


  /* Préparation documentaire partagée : contenu intégré ou voile local d’éditeur (DEV-484). */
  .document-workspace-actions{display:contents}
.cve-body2:has(> .document-preparation){position:relative}
  @keyframes document-preparation-enter{from{opacity:0}to{opacity:1}}
  @keyframes sih-generation-pulse{50%{opacity:.35}}
  /* L'éclairage IA de la Frise respire comme toute génération : son icône pendant l'analyse (DEV-557). */
  .sih-generation-active,.career-coach-busy .lucide{animation:sih-generation-pulse calc(var(--dur-slower) * 3) var(--ease-in-out) infinite}
  .document-preparation{--preparation-min-height:112px;position:absolute;inset:0;z-index:30;display:grid;place-items:center;padding:calc(var(--space-4) * 2);background:transparent;overflow:auto;animation:document-preparation-enter var(--dur-fast) var(--ease-out)}
  .document-preparation-card{width:min(440px,100%);min-height:var(--preparation-min-height);align-self:start;position:relative;top:max(0px,calc(50% - var(--preparation-min-height) / 2));padding:calc(var(--space-4) * 2);border:0;border-radius:var(--radius-xl);text-align:left;display:grid;grid-template-columns:16px minmax(0,1fr);column-gap:var(--space-4);row-gap:var(--space-3);align-content:start}
  .document-preparation[data-surface="overlay"] .document-preparation-card{background:var(--surface);box-shadow:var(--shadow-overlay)}
  .document-preparation-icon{align-self:start;height:calc(var(--type-card-size) * var(--type-card-line));grid-column:1;grid-row:1;display:grid;place-items:center;color:var(--ink-3)}
  .document-preparation-title{grid-column:2;grid-row:1;font-size:var(--type-card-size);line-height:var(--type-card-line);font-weight:600;color:var(--ink)}
  .document-preparation-description{overflow-wrap:anywhere;grid-column:2;grid-row:2;font-size:var(--type-body-size);line-height:var(--type-body-line);color:var(--ink-2)}
  .document-preparation-actions{grid-column:2;grid-row:3;display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-3)}
  @media(prefers-reduced-motion:reduce){.sih-generation-active,.career-coach-busy .lucide,.document-preparation{animation:none}}

  /* Génération documentaire : composition validée DEV-487, jalons réels et estimation bornée. */
  .cve-body2:has(> .document-generation){position:relative}
  .document-generation{position:absolute;inset:0;z-index:30;display:grid;place-items:center;padding:24px;overflow:auto;animation:document-preparation-enter var(--dur-fast) var(--ease-out)}
  .vjob-wait-host{position:relative;min-height:430px}
  .vjob-wait-host .document-generation{background:transparent}
  .candidature-extraction-wait{position:relative;flex:1;min-height:390px}
  .candidature-extraction-wait .document-generation{background:transparent}
  .document-generation-card{width:min(720px,100%);max-height:100%;overflow:auto;padding:18px 27px 22px;border-radius:var(--radius-xl);background:var(--surface);box-shadow:var(--shadow-lg);color:var(--ink);display:flex;flex-direction:column;justify-content:center}
  .document-generation-art{display:block;width:285px;height:105px;max-width:100%;margin:0 auto 6px;overflow:visible}
  .document-generation-art .selected,.document-generation-art .output,.document-generation-art .route{transition:opacity var(--dur-slower) var(--ease-out),transform var(--dur-slower) var(--ease-out)}
  .document-generation-art .selected,.document-generation-art .route{opacity:0}
  .document-generation-art[data-phase="select"] .selected,.document-generation-art[data-phase="write"] .selected,.document-generation-art[data-phase="done"] .selected{opacity:1}
  .document-generation-art .route{stroke-dasharray:10 14}
  .document-generation-art[data-phase="write"] .route{opacity:1;animation:document-generation-transfer 1.65s linear infinite}
  .document-generation-art[data-phase="done"] .route{opacity:.35}
  .document-generation-art .output{opacity:.42;transform:translateX(-7px)}
  .document-generation-art[data-phase="write"] .output,.document-generation-art[data-phase="done"] .output{opacity:1;transform:translateX(0)}
  .document-generation-art .ink{stroke-dasharray:35;stroke-dashoffset:35}
  .document-generation-art[data-phase="write"] .ink,.document-generation-art[data-phase="done"] .ink{animation:document-generation-ink 1.4s var(--ease-out) forwards}
  .offer-analysis-art .offer-analysis-highlight{opacity:.2;transition:opacity var(--dur-slower) var(--ease-out)}
  .offer-analysis-art[data-phase="select"] .offer-analysis-highlight,.offer-analysis-art[data-phase="write"] .offer-analysis-highlight,.offer-analysis-art[data-phase="done"] .offer-analysis-highlight{opacity:1}
  .offer-analysis-art .offer-analysis-route{stroke-dasharray:7 10;animation:document-generation-transfer 1.65s linear infinite}
  .offer-analysis-art .offer-analysis-lens{animation:offer-analysis-scan 2.8s var(--ease-in-out) infinite}
  @keyframes offer-analysis-scan{50%{transform:translateX(18px)}}
  @keyframes document-generation-transfer{to{stroke-dashoffset:-48}}
  @keyframes document-generation-ink{to{stroke-dashoffset:0}}
  .document-generation-title{margin:0;text-align:center;font-size:22px;line-height:1.3;font-weight:550;letter-spacing:-.01em}
  .document-generation-main{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr);align-items:center;margin-top:16px}
  .document-generation-meter{display:flex;align-items:center;flex-direction:column;justify-content:center;padding-right:20px}
  .document-generation-dial{position:relative;width:137px;height:137px;border-radius:50%;display:grid;place-items:center}
  .document-generation-dial > svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg);overflow:visible}
  .document-generation-dial > svg circle{fill:none;stroke-width:11}
  .document-generation-dial .track{stroke:color-mix(in srgb,var(--ink) 13%,var(--surface))}
  .document-generation-dial .fill{stroke:var(--blue-strong);stroke-linecap:round;stroke-dasharray:552.92}
  .document-generation-dial--indeterminate .fill{stroke-dasharray:132 552.92;animation:sih-generation-pulse calc(var(--dur-slower) * 4) var(--ease-in-out) infinite}
  .document-generation-dial-icon{display:grid;place-items:center;color:var(--blue-strong)}
  .document-generation-number{font-family:var(--font-data,var(--font-sans));font-size:30px;line-height:1;font-weight:600;font-variant-numeric:tabular-nums}
  .document-generation-number small{font-size:16px}
  .document-generation-hint{margin-top:10px;font-size:11px;color:var(--ink-2);text-align:center}
  .document-generation-steps{min-width:0;min-height:168px;max-height:168px;overflow:hidden;border-left:1px solid var(--border);padding-left:22px}
  .document-generation[data-steps="2"] .document-generation-steps{min-height:110px;max-height:110px}
  .document-generation-step-list[data-sliding="true"]{transform:translateY(-55px);transition:transform 220ms var(--ease-out)}
  .document-generation-step{display:flex;align-items:center;gap:10px;min-height:55px;padding:0 10px;border-bottom:1px solid var(--border);font-size:13px;color:var(--ink-3);animation:document-generation-row var(--dur-slow) var(--ease-out)}
  .document-generation-step:last-child{border-bottom:0}
  @keyframes document-generation-row{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
  .document-generation-step[data-state="active"]{border-radius:8px;color:var(--blue-strong);background:var(--blue-soft);font-weight:600}
  .document-generation-step[data-state="done"]{color:var(--ink)}
  .document-generation-step[data-state="future"]{opacity:.6}
  .document-generation-badge{display:grid;place-items:center;flex:0 0 22px;width:22px;height:22px;border:1.5px solid var(--border-strong);border-radius:50%;font-size:13px;font-weight:600;color:var(--blue-strong)}
  .document-generation-step[data-state="active"] .document-generation-badge,.document-generation-step[data-state="done"] .document-generation-badge{border-color:var(--blue-strong)}
  .document-generation-step[data-state="active"] .document-generation-badge::before{content:"";width:9px;height:9px;border-radius:50%;background:var(--blue-strong);animation:sih-generation-pulse calc(var(--dur-slower) * 4) var(--ease-in-out) infinite}
  .document-generation-active-label{margin-left:auto;font-size:11px;color:var(--blue-strong);white-space:nowrap}
  .document-generation-note{margin:12px 0 0;text-align:center;font-size:11px;color:var(--ink-3)}
  @media(max-width:760px){.document-generation{padding:14px}.document-generation-card{padding:24px 20px}.document-generation-art{width:255px;height:95px}.document-generation-main{grid-template-columns:1fr}.document-generation-meter{padding:0 0 18px}.document-generation-dial{width:125px;height:125px}.document-generation-number{font-size:30px}.document-generation-steps{padding:12px 0 0;border-left:0;border-top:1px solid var(--border)}}
  @media(prefers-reduced-motion:reduce){.document-generation,.document-generation-art .route,.document-generation-art .ink,.document-generation-step,.document-generation-step-list,.document-generation-step[data-state="active"] .document-generation-badge::before,.document-generation-dial--indeterminate .fill,.offer-analysis-art .offer-analysis-route,.offer-analysis-art .offer-analysis-lens{animation:none;transition:none}.document-generation-art[data-phase="write"] .ink,.document-generation-art[data-phase="done"] .ink{stroke-dashoffset:0}}

  /* Aperçus documentaires : coque commune de la fenêtre Lecture (DEV-550) ; le corps remplit. */
  .imported-pdf-page{position:relative;width:fit-content;margin:0 auto}
  .imported-pdf-page canvas{display:block}
  .fm-document-preview-meta{margin:4px 0 0;font-family:var(--font-sans);font-size:11px;color:var(--ink-3)}
  .fm-document-preview-body{position:relative;display:grid;flex:1 1 auto;min-height:0;overflow:hidden;padding:0;background:var(--bg-2)}
  .fm-document-preview-loading{position:absolute;inset:0;display:grid;place-items:center;align-content:center;gap:14px;padding:24px;background:var(--bg-2);color:var(--ink-3)}
  .fm-document-preview-loading-page{display:flex;flex-direction:column;gap:12px;width:min(248px,36%);aspect-ratio:210/297;padding:28px 24px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm)}
  .fm-document-preview-loading-page span{height:10px;border-radius:var(--radius-xs);background:var(--bg-2)}
  .fm-document-preview-loading-page span:nth-child(2){width:82%}
  .fm-document-preview-loading-page span:nth-child(3){width:64%}
  .fm-document-preview-loading-page span:nth-child(4){width:74%}
  .fm-document-preview-loading p{margin:0;font-size:13px}
  .fm-document-preview-error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:32px;color:var(--ink-3);text-align:center;background:var(--bg-2)}
  .fm-document-preview-error p{max-width:420px;margin:0;font-size:13px;line-height:1.5}
  .fm-document-preview-html{min-height:0;overflow:auto;padding:28px 24px}
  .fm-document-preview-html,.public-candidature-workspace{background:radial-gradient(115% 85% at 50% -8%,#565B61 0%,#2B2E33 82%);box-shadow:inset 0 18px 44px rgba(0,0,0,.32),inset 0 -14px 38px rgba(0,0,0,.22)}
  .doc-html-preview-stage{width:794px;margin:0 auto 28px;background:transparent}
  .doc-html-preview-stage .cve-output-surface>.cve-cvwrap,
  .doc-html-preview-stage .cve-output-surface>.cve-cvscale{width:794px;overflow:visible}
  .doc-html-preview-stage .cve-cv{margin:0;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg)}
  .doc-html-preview-stage .cve-cv.cve-output{background:#fff}
  .doc-html-preview-stage .lte-letter,
  .doc-html-preview-stage .lte-emailwrap,
  .doc-html-preview-stage .lte-msgwrap{margin:0 auto;border:0;border-radius:0;box-shadow:none;background:#fff}
  .doc-html-preview-stage--letter .cve-editwrap{width:794px;margin:0 auto;background:transparent}
  .doc-html-preview-stage--letter .lte-letter{width:794px;max-width:none;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg);-webkit-box-decoration-break:clone;box-decoration-break:clone}
  .fm-document-preview-actions{display:flex;align-items:center;gap:8px}
  .demo-download-hint{max-width:210px;color:var(--ink-3);font-size:11px;line-height:1.25;text-align:right}
  .fm-file-preview .fm-document-preview-body{background:var(--bg-2)}
  .fm-file-preview-canvas{display:grid;place-items:center;width:100%;height:100%;min-height:0;overflow:auto;padding:24px;background:var(--bg-2)}
  .fm-file-preview-canvas img{display:block;max-width:100%;max-height:100%;width:auto;height:auto;border-radius:10px;background:var(--surface);box-shadow:var(--shadow-lg)}
  .fm-file-preview-canvas--pdf{padding:0;background:var(--surface)}
  .fm-file-preview-canvas object{display:block;width:100%;height:100%;border:0;background:var(--surface)}
  .fm-file-preview-meta{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:7px;min-width:0;text-align:left}
  .fm-file-preview-date{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-data);font-size:11px;line-height:1.4;color:var(--ink-3)}
  .fm-file-preview-date svg{color:var(--ink-4)}
  .fm-file-preview-title-edit{display:flex;align-items:center;gap:8px;margin-top:3px;max-width:min(620px,64vw)}
  .fm-file-preview-title-edit input{width:min(520px,54vw);height:34px;border-radius:8px;color:var(--ink);font:inherit;font-size:16px;font-weight:600;line-height:1.2;padding:0 10px;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
  @media (max-width: 760px){
    .fm-file-preview .ui-window__foot{align-items:stretch;flex-direction:column;justify-content:flex-start}
    .fm-file-preview-meta{min-width:0;width:100%}
    .fm-file-preview-title-edit{align-items:stretch;flex-direction:column;max-width:none}
    .fm-file-preview-title-edit input{width:100%}
    .fm-document-preview-actions{justify-content:flex-end;flex-wrap:wrap}
  }

  /* Menu contextuel */


  /* ===== Collections intelligentes ===== */
  .sc{display:flex;flex-direction:column;gap:16px;padding:16px 22px 24px}

  /* ===== Composer pour un poste (overlay) ===== */

  /* Entry card */

  /* Compact mode */

  /* Empty */

  @media (max-width:900px){
    .vc-shell{grid-template-columns:1fr}
  }

  /* ============ Vault — synthèse croquis 08 (capture structurée, FAB, coach) ============ */
  /* Étoiles de fierté */
  .vc-stars{display:inline-flex;align-items:center;gap:2px;line-height:0}
  .vc-stars .vc-star{display:inline-grid;place-items:center;color:var(--ink-5)}
  .vc-stars .vc-star svg{fill:none}
  .vc-stars .vc-star.on{color:var(--accent)}
  .vc-stars .vc-star.on svg{fill:var(--accent)}
  .vc-stars.interactive .vc-star{border:0;background:transparent;padding:1px;cursor:pointer;border-radius:3px;transition:transform var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .vc-stars.interactive .vc-star:hover{transform:scale(1.18)}
  .vc-stars.interactive .vc-star:focus-visible{outline:0;box-shadow:var(--ring-focus)}

  /* Composer structuré — N1 questions */

  /* Tags suggérés validables (recognition over recall) */

  /* Niveau 2 — détail */

  /* Carte enrichie */
  
  .vc-impact-show{display:flex;align-items:flex-start;gap:7px;padding:10px 12px;background:var(--support-bg);border-radius:var(--radius-md);font-size:12px;color:var(--ink-2);line-height:1.5}
  .vc-impact-show strong{font-weight:600}

  /* Encart manque + CTA coach */

  /* Jauge dans le mur */

  /* (Le FAB « Quick Add » — mort : aucun rendu JSX, règle corrompue, ombre COLORÉE bannie
     par le design system — a été retiré ici, critique du 2026-07-25.) */

  /* « Nouvelle entrée » : fenêtre Travail commune ; ses deux panneaux remplissent le corps. */
  .ui-window__body.aev-body{display:flex;flex-direction:column;padding:0;overflow:hidden}
  .aev-head-mid{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-4);font-weight:500;white-space:nowrap}
  .aev-head-mid svg{color:var(--accent)}
  .aev-split{display:grid;grid-template-columns:1fr 358px;flex:1;min-height:0;overflow:hidden}
  .aev-jrnl{padding:22px 24px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}
  .aev-jrnl > *{flex:0 0 auto}
  .aev-jq-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
  .aev-jq{font-size:22px;line-height:1.35;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink);margin:0}
  .aev-eyebrow{font-size:11px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-3)}
  .aev-tmpl-wrap{position:relative;flex:0 0 auto}
  .aev-tmpl-btn{display:inline-flex;align-items:center;gap:8px;background:var(--accent-soft);color:var(--accent);white-space:nowrap;border:1px solid var(--accent-soft-2,var(--accent-soft));border-radius:8px;padding:7px 11px;font:inherit;font-size:13px;font-weight:500;cursor:pointer}
  .aev-tmpl-btn:hover{border-color:var(--accent)}
  .aev-meta{display:flex;gap:30px;flex-wrap:wrap}
  .aev-type-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 16px;margin-top:5px}
  .aev-anal{background:var(--bg-2);border-left:1px solid var(--border);padding:20px 18px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}
  .aev-anal-h{display:flex;align-items:center;gap:8px}
  .aev-anal-h .sp{color:var(--accent);display:grid;place-items:center}
  .aev-anal-h h3{font-size:14px;font-weight:600;margin:0;color:var(--ink);flex:1}
  .aev-anal-sub{font-size:12px;color:var(--ink-4);margin:-8px 0 0}
  .aev-anal-empty{font-size:13px;color:var(--ink-3);line-height:1.5;background:var(--surface);border:1px dashed var(--border-strong);border-radius:8px;padding:14px}
  .aev-mat{display:flex;align-items:center;gap:10px;margin:2px 0 0}
  .aev-route{display:flex;align-items:center}
  .aev-route .node{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--border-strong);background:var(--surface);display:grid;place-items:center;color:var(--ink-4);font-size:11px;font-weight:600;font-family:var(--font-sans);flex-shrink:0;transition:all var(--dur-base) var(--ease-out)}
  .aev-route .node.on{background:var(--ink);border-color:transparent;color:var(--fg-inverse)}
  .aev-route .seg{width:20px;height:2px;background:var(--border);transition:background var(--dur-base) var(--ease-out)}
  .aev-route .seg.on{background:var(--ink)}
  .aev-asp{display:flex;gap:10px;align-items:flex-start;background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px}
  .aev-asp-node{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--border-strong);background:var(--surface);display:grid;place-items:center;color:var(--ink-4);font-size:11px;font-weight:600;font-family:var(--font-sans);flex-shrink:0}
  .aev-asp.ok .aev-asp-node{background:var(--good);border-color:transparent;color:var(--fg-inverse)}
  .aev-asp-k{font-size:11px;font-weight:600;color:var(--ink-3);letter-spacing:.03em}
  .aev-asp-v{font-size:13px;color:var(--ink-2);line-height:1.4;margin-top:3px;text-wrap:pretty}
  .aev-asp-ask{font-size:13px;color:var(--warn-ink);line-height:1.4;margin-top:3px}
  .aev-disc{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--ink-3);background:var(--surface);border-radius:8px;padding:9px 12px}
  .aev-disc .di{color:var(--ink-4)}
  .aev-dans{font-size:11px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4)}
  @media (max-width:760px){.aev-split{grid-template-columns:1fr}.aev-anal{border-left:0;border-top:1px solid var(--border)}}

  /* Scrim partagé QuickAdd / Coach */

  /* Coach interview modal */

  /* Ligne éditoriale du carnet (SIH-98, option A validée par Landry) : les destinations
     restent assemblées à gauche ; les outils forment un groupe autonome à droite. */
  .vc-filter-bar{
    display:flex;align-items:center;justify-content:flex-start;flex-wrap:nowrap;gap:0;
    height:var(--vault-local-nav-block-size);padding:0 calc(var(--space-5) + var(--space-2));
    overflow-x:auto;scrollbar-width:none;background:transparent;border-bottom:0
  }
  /* ─ Porte unique « Ce que ça produit » : les projections du carnet (CV · lettre · compétences)
       ne sont plus des onglets de même poids que la matière, elles vivent derrière un seul
       bouton. Le menu est en `fixed`-like absolu ancré au bouton ; le scrim ferme au clic. ─ */
  
  .vc-produce-txt{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
  .vc-produce-txt b{font-size:13px;font-weight:600;color:var(--ink)}
  .vc-produce-txt small{font-size:11px;line-height:15px;color:var(--ink-4);text-wrap:pretty}
  /* Rangée d'onglets : navigation défilable + outils à droite. Le groupe d'outils conserve
     ses libellés à largeur normale et replie uniquement ceux-ci lorsque le conteneur se resserre. */
  .vc-tabsrow{display:flex;align-items:center;gap:var(--space-3);padding-right:calc(var(--space-5) + var(--space-2))}
  /* La rangée est l'unique propriétaire du retrait extérieur. Si la variable fluide est
     résolue séparément dans le groupe de navigation et dans la rangée, ses pourcentages
     prennent deux largeurs de référence différentes : le menu dérive alors au zoom. */
  .vc-main-col--readable > .vc-tabsrow{padding-inline:var(--vault-reading-inset)}
  .vc-main-col--readable > .vc-tabsrow > .vc-filter-bar{padding-inline:0}
  .vc-tabsrow > .vc-filter-bar{flex:1 1 auto;min-width:0}
  .vc-bar-tools{flex:0 0 auto;display:flex;align-items:center;gap:2px;padding:0 0 0 6px}
  /* Outils intégrés à la barre : style fantôme, libellé explicite, séparation unique. */
  .vc-tabsrow .vc-bar-tools::before{content:"";align-self:center;width:1px;height:18px;background:var(--border);margin:0 6px 0 2px}
  /* SIH-115 : dans la barre d'onglets, l'outil PORTE UN LIBELLE. Le seul ecart au role
     est donc la largeur (auto au lieu de la boite carree de l'icone seule), pas une
     hauteur, un rayon ni une peinture propres a cet ecran. */
  /* Largeur et respiration du role : l'outil a un libelle, il n'est donc plus la boite
     carree de l'icone seule. Les valeurs viennent de `.btn`, elles ne sont pas inventees. */
  .vc-tabsrow .vc-bar-tools .vc-display-btn{width:auto;white-space:nowrap}
  .vc-tabsrow .vc-bar-tools .vc-display-btn > svg{flex:0 0 auto}
  /* Bouton « Filtres » regroupant Période/Tag/Type */
  /* Outil de barre en fantôme (planche G .sp) : texte calme, remplissage doux au survol. */
  /* Scroll : les tabs restent collés en haut de la colonne, le bandeau remonte derrière.
     container-type:inline-size → la rangée d'onglets est un conteneur de requête : les
     libellés se replient en mode icône seule quand la colonne se resserre, pour que tous
     les onglets tiennent sur un écran sans scroll horizontal (retour Landry, juin 2026). */
  .vc-main-col > .vc-tabsrow{
    position:sticky;top:0;z-index:8;height:var(--vault-local-nav-block-size);
    background:var(--vault-local-nav-surface);border-bottom:1px solid var(--border);
    container-type:inline-size;container-name:vtabs
  }
  .vc-filter-bar::-webkit-scrollbar{display:none}
  /* Le Vault ne peint plus ses onglets : il ne règle ici que la disposition de la barre
     partagée dans une rangée défilable. L'indicateur et la porte vivent dans `TabBar`. */
  .tabbar.vc-carnet-tabs{align-self:stretch;flex-wrap:nowrap;gap:var(--space-2);border-bottom:0}
  /* Au zoom, seuls les outils perdent leur texte. Les trois destinations du carnet conservent
     leur nom ; la navigation reste compréhensible et peut défiler horizontalement si nécessaire. */
  @container vtabs (max-width: 860px){
    .vc-carnet-tools .vc-tool-label{display:none}
    .vc-tabsrow .vc-carnet-tools .vc-display-btn{width:30px;padding:0}
  }

  /* Récap — synthèse (remplace le feed) */
  .vc-recap{padding:18px 22px 26px;display:flex;flex-direction:column;gap:18px}

  /* Récap — « Aperçu sur votre CV » (rendu recruteur d'une expérience) */
  .vc-recap-cv{display:flex;flex-direction:column;gap:11px}
  /* La feuille = une SEULE carte (pas d'imbrication). Sous-zones séparées par filets. */
  .vrcv-paper{background:var(--surface);border:1px solid var(--border);border-radius:6px;
    box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 6%,transparent),0 10px 28px -16px color-mix(in srgb,var(--ink) 20%,transparent);
    padding:22px 24px;display:flex;flex-direction:column;gap:14px}
  .vrcv-role{font-size:14px;font-weight:600;color:var(--accent);line-height:1.35}
  /* Zones du papier : sous-sections séparées par filets (un seul niveau de carte). */
  .vrcv-kv{display:grid;grid-template-columns:158px 1fr;gap:14px;font-size:12px;line-height:1.5}
  .vrcv-kv .vrcv-k{font-weight:600;color:var(--ink-2)}
  .vrcv-kv .vrcv-k.acc{color:var(--accent);font-weight:600}
  .vrcv-kv .vrcv-v{color:var(--ink-2);text-wrap:pretty}
  /* Statut dans la colonne de dates (En poste / Terminé) */
  /* Puces atténuées (contexte) + objectif terminé + échéance */
  /* Sous-blocs (évolution / personnes / objectifs) */
  .vrcv-sub{display:flex;flex-direction:column;gap:6px;margin-top:3px}
  /* Mots-clés ATS + chiffres clés : pastilles (sémantique distincte des compétences) */
  .vrcv-kws{display:flex;flex-wrap:wrap;gap:5px}
  .vrcv-kw{display:inline-flex;align-items:center;padding:2px 9px;border-radius:99px;background:var(--bg-2);
    border:1px solid var(--border);font-size:11px;color:var(--ink-2)}

  /* Sur la lettre — aperçu de la lettre de motivation */
  @media (max-width:680px){.vrcv-kv{grid-template-columns:1fr;gap:2px}}

  /* ===== Main column — LA FENÊTRE =====
     Elle cesse d'être un fond bord à bord pour devenir une fenêtre encastrée dans la scène.
     L'arrondi est porté UNE SEULE FOIS, par le conteneur : la barre qui nomme l'écran et le
     plan de travail passent tous deux dessous, sans qu'aucun enfant ait à le redire. */
  .col{
    /* Gouttière commune résolue au point d’usage sur la colonne utile (SIH-103).
       Les limites appartiennent à leur famille : lecture Vault/profil ou grille documentaire. */
    --app-reading-gutter:clamp(1.5rem,3.2%,3rem);
    flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;
    background:var(--screen-plane);
    /* Pas de marge en haut : c'est la bande de chrome qui tient ce côté-là, comme la barre
       d'onglets de Linear tient le haut de sa fenêtre. La hauteur vient du flux (`flex:1`)
       et non d'un calcul en `dvh` — un calcul se désaccorderait de la bande dès qu'elle
       changerait de hauteur. */
    /* Rien à gauche : le rail et la fenêtre se touchent, c'est l'arrondi qui fait la limite —
       exactement comme chez Linear. Le retrait de ce côté-là ne séparait plus rien depuis que
       la barre est montée sur la scène : il ne restait qu'une rainure vide entre deux
       surfaces déjà distinctes (`sobriété : retirer plutôt qu'ajouter`). */
    margin:0 var(--screen-inset) var(--screen-inset) 0;
    border-radius:var(--radius-xl);
    overflow:hidden;overscroll-behavior:none;
  }

  /* Les vues SIHAGE scrollent dans leurs panneaux, jamais sur la fenêtre du navigateur.
     Cela coupe le rebond macOS quand un panneau arrive en haut ou en bas. */
  .side,
  .vc-main-col,
  .vpf-pop-body,
  .vpf-section-nav,
  .vpf-section-panel,
  .gk-col-body,
  .cdet-railgrp,
  .cdet-content,
  .cdet-content2,
  .cve-prevscroll,
  .cve-optA .cve-canvas,
  .cve-side .cve-midscroll,
  .cve-secroot,
  .ct-lscroll,
  .ct-detail{
    overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
  }

  /* Sur le bureau tactile, le déplacement natif après pincement doit traverser
     tous les panneaux, y compris les portails et les styles CSS Modules.
     Cette priorité ne vaut que tant que le bureau est monté. */
  @media (any-pointer:coarse){
    html:has(.os-shell),
    html:has(.os-shell) *{overscroll-behavior:auto!important}
  }

  /* En portrait tactile, le cadre suit la hauteur visible pendant le zoom natif. */
  @media (any-pointer:coarse) and (orientation:portrait){
    .os-shell{position:relative;top:var(--shell-visible-top,0px);height:var(--shell-visible-height,100dvh);min-height:var(--shell-visible-height,100dvh)}
    body .os-shell>.side{height:100%;overflow-y:auto}
  }

  /* ===== Gabarit de header de section (flèches + titre · actions + capture globale) ===== */
  .sec-head{
    /* Plus de `flex:0 0 auto` : c'était utile quand cette barre était enfant de `.col`.
       Dans la bande de scène, elle doit s'ÉTIRER — sinon `justify-content:space-between`
       n'a plus d'espace à répartir et le titre, la pastille de carnet et l'Assistant se
       chevauchent. Défaut mesuré le 2026-08-03, invisible dans le CSS seul. */
    display:flex;align-items:center;justify-content:space-between;gap:12px;position:relative;
    /* Aucun filet : sur la scène, une barre bordée redevient un trait dessiné — la même
       chose que le `border-right` du rail, et ce que la géométrie validée exclut. */
    /* Marge horizontale retirée : la bande la porte, une seule fois, pour toutes les barres.
       Les trois en portaient chacune une — 14, 16 et 18 px — donc les écrans ne s'alignaient
       pas entre eux. */
    height:100%;padding:0;background:var(--screen-bar);
    /* Au-dessus du bandeau et de la barre d'onglets sticky (z-index:8) pour que la
       popover du sélecteur de carnet (Vault) ne soit pas masquée par ce qui suit. */
    z-index:10;
  }
  /* DEV-568 · Au centre de la barre du Vault : l'identité du carnet regardé, en lecture seule.
     On change de carnet depuis la barre latérale, seul lieu de bascule. */
  .sec-head-identity{position:absolute;left:50%;top:50%;transform:translate(calc(-50% - var(--screen-inset) / 2),-50%);max-width:calc(100% - 2 * var(--sec-head-identity-reserve));min-width:0;display:flex;justify-content:center;
    /* Le nom prend toute la place libre, de part et d'autre de l'axe : la réserve couvre les
       actions de droite (≈ 166 px) et leur respiration ; à gauche, elle laisse aussi la place
       du logo posé avant le nom (33 px) devant le titre de l'écran (≈ 88 px). */
    --sec-head-identity-reserve:12.5rem}
  .sec-head-identity .context-identity__name{max-width:100%}
  .sec-head-c-lbl{font-size:12px;font-weight:650;letter-spacing:var(--tracking-tight);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* Popover : descend du centre du header, ancré au bouton. */
  .sec-head-pop{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);z-index:var(--z-popover);
    min-width:260px;max-width:320px;max-height:calc(100vh - 120px);overflow-y:auto;
    background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;
    box-shadow:var(--shadow-popover);
    padding:6px;animation:sec-head-pop-in 160ms var(--ease-out) both}
  @keyframes sec-head-pop-in{from{opacity:0;transform:translate(-50%,-4px)}to{opacity:1;transform:translate(-50%,0)}}
  /* Une grande liste temporaire reste une surface autonome. Elle ré-épingle les
     rôles de contenu que la coque remplace localement, sans ajouter de scrim :
     ce sélecteur n'est pas modal et l'arrière-plan ne devient pas inerte. */
  .ui-focus-popover{
    --surface:var(--focus-popover-surface);
    --surface-2:var(--focus-popover-subtle);
    --bg-2:var(--focus-popover-subtle);
    --brand-ivory:var(--focus-popover-surface);
    --border:var(--focus-popover-border);
    --border-soft:var(--focus-popover-border);
    --border-strong:var(--focus-popover-border-strong);
    --ink:var(--focus-popover-ink);
    --ink-2:var(--focus-popover-ink-2);
    --ink-3:var(--focus-popover-ink-3);
    --ink-4:var(--focus-popover-ink-4);
    --popover-warm:var(--focus-popover-surface);
    --popover-warm-border:var(--focus-popover-border);
    isolation:isolate;
    background:var(--focus-popover-surface);
    color:var(--focus-popover-ink);
    border-color:var(--focus-popover-border);
    box-shadow:var(--account-popover-shadow);
  }
  .sec-head-l{display:flex;align-items:center;gap:10px;min-width:0}
  
  .sec-head-title{display:flex;align-items:center;gap:7px;margin:0;font-size:14px;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sec-head-title svg{flex:0 0 auto;color:var(--ink-3)}
  .sec-head-title span{overflow:hidden;text-overflow:ellipsis}
  .sec-head-r{display:flex;align-items:center;gap:10px;flex:0 0 auto}
  /* L'action propre à un écran est un Btn ordinaire placé à droite, avant le séparateur
     (ScreenHeader, et l'en-tête de la bibliothèque documentaire). */
  .sec-head-div{width:1px;height:20px;background:var(--border);flex:0 0 auto}
  /* ===== Capture globale + assistant : duo attaché =====
     L'entrée est le geste principal ; l'assistant, une porte secondaire accolée. Cette molécule
     est rendue une fois dans ScreenHeader et, pour Dashboard, dans son repli fixe. */
  .capture-actions{
    --capture-action-height:32px;

    display:inline-flex;flex:none;align-items:stretch;height:var(--capture-action-height);overflow:hidden; /* le duo ne cède jamais sa place à l'action voisine */
    border:1px solid var(--action-border);border-radius:999px;background:var(--action-bg);color:var(--action-ink);
    font:inherit;font-size:12px;font-weight:650;line-height:1;
    transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);
  }
  .capture-actions-main,.capture-actions-assistant{
    position:relative;display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;
    color:inherit;font:inherit;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .capture-actions-main{gap:6px;padding:0 11px 0 10px;white-space:nowrap}
  .capture-actions-assistant{width:var(--capture-action-height)}
  /* Matière commune des capsules d'action (duo, télécommande) : écrite une fois. */
  .capture-actions-assistant,.run-status-main,.run-status-tool{border-left:1px solid color-mix(in srgb,var(--action-ink) 26%,transparent)}
  .capture-actions svg{color:currentcolor;flex:0 0 auto}
  .capture-actions-main:hover,.capture-actions-assistant:not([aria-disabled="true"]):hover,.run-status-state:hover,.run-status-state[aria-expanded="true"],.run-status-main:not(:disabled):hover,.run-status-tool:hover{background:var(--action-bg-hover)}
  .capture-actions-main:focus-visible,.capture-actions-assistant:focus-visible,.run-status-state:focus-visible,.run-status-main:focus-visible,.run-status-tool:focus-visible{outline:2px solid var(--action-ink);outline-offset:-3px}
  .capture-actions-assistant[aria-disabled="true"],.run-status-main:disabled{cursor:default;color:color-mix(in srgb,var(--action-ink) 65%,var(--action-bg))}
  .capture-actions-floating{position:fixed;top:9px;right:16px;z-index:35;--capture-action-height:36px;font-size:13px}
  .capture-actions-floating.is-hidden{visibility:hidden;opacity:0;pointer-events:none;transform:translateY(-8px) scale(.96)}
  @media (max-width:640px){
    .capture-actions:not(.capture-actions-floating) .capture-actions-main-label{display:none}
    .capture-actions:not(.capture-actions-floating) .capture-actions-main{width:32px;padding:0;gap:0}
    .capture-actions-floating{right:12px}
  }
  /* ===== Télécommande d'une tâche de fond (RunStatus, DEV-536) =====
     Une seule capsule, de la famille du duo ci-dessus : mêmes jetons d'action, même filet entre
     ses gestes. Elle porte l'état, l'action du moment et un réglage ; ouverte, elle garde sa
     largeur et son panneau sort d'elle. Sa place dans la barre est réservée : un libellé qui
     change ne pousse rien. */
  .run-status{--run-status-state:224px;--run-status-main:178px;--run-status-tool:38px;--run-status-height:32px;
    position:relative;flex:none;width:calc(var(--run-status-state) + var(--run-status-main) + var(--run-status-tool));height:var(--run-status-height);font:650 12px/1 var(--font-sans)}
  .run-status-shell{position:absolute;top:0;right:0;width:100%;transition:width var(--dur-base) var(--ease-out)}
  .run-status[data-open] .run-status-shell{z-index:var(--z-popover)}
  /* Ouverte, la télécommande passe devant tout l'écran : l'en-tête qui la porte monte au calque des
     surfaces flottantes, au-dessus de l'indicateur de défilement du contenu (calque 30). */
  .kb-header:has(.run-status[data-open]){z-index:var(--z-popover)}
  .run-status-capsule{position:relative;z-index:1;display:flex;align-items:stretch;height:var(--run-status-height);overflow:hidden;
    border:1px solid var(--action-border);border-radius:calc(var(--run-status-height) / 2);background:var(--action-bg);color:var(--action-ink);
    transition:border-radius var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out)}
  .run-status[data-open] .run-status-capsule{border-radius:calc(var(--run-status-height) / 2) calc(var(--run-status-height) / 2) 0 0}
  /* Une nouveauté s'annonce sur la capsule : un liseré d'accent le temps de la lire. */
  .run-status[data-announcing] .run-status-capsule{box-shadow:var(--shadow-accent)}
  .run-status-state,.run-status-main,.run-status-tool{display:inline-flex;align-items:center;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .run-status-state{flex:1;min-width:0;gap:8px;padding:0 9px 0 13px;font-weight:500}
  .run-status-main,.run-status-tool{flex:none;box-sizing:border-box;justify-content:center}
  .run-status-main{width:var(--run-status-main);gap:6px;padding:0 12px;white-space:nowrap}
  /* Le repère de la touche garde sa taille quand le mot se serre. */
  .run-status-capsule svg{flex:none}
  .run-status-tool{width:var(--run-status-tool)}
  .run-status-main-short{display:none}
  .run-status-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;animation:run-status-rise var(--dur-base) var(--ease-out)}
  /* Deux informations au plus, espacées : la seconde précise la première et pèse moins. */
  .run-status-label .meta-items{display:flex;flex-wrap:nowrap;white-space:nowrap}
  .run-status-label .meta-items__item{overflow:hidden;text-overflow:ellipsis}
  .run-status-label .meta-items__item:first-child:not(:only-child){flex:none}
  .run-status-label .meta-items__item+.meta-items__item{color:color-mix(in srgb,var(--action-ink) 72%,var(--action-bg))}
  @keyframes run-status-rise{from{opacity:0;transform:translateY(7px)}}
  .run-status-chevron{display:inline-flex;flex:none;color:color-mix(in srgb,var(--action-ink) 62%,var(--action-bg));transition:transform var(--dur-base) var(--ease-out)}
  .run-status-state[aria-expanded="true"] .run-status-chevron{transform:rotate(180deg)}
  /* Pendant une annonce le geste mène à ce qu'elle annonce : il ne déplie pas. */
  .run-status[data-announcing] .run-status-chevron{display:none}
  .run-status-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--ink-4)}
  .run-status-dot[data-tone="ask"]{background:var(--accent)}
  .run-status-dot[data-tone="done"]{background:var(--good)}
  .run-status-dot[data-tone="fail"]{background:var(--bad)}
  .run-status-capsule .run-status-dot{background:color-mix(in srgb,var(--action-ink) 50%,var(--action-bg))}
  .run-status-capsule .run-status-dot[data-tone="ask"]{background:color-mix(in srgb,var(--warn) 70%,var(--action-ink))}
  .run-status-capsule .run-status-dot[data-tone="done"]{background:color-mix(in srgb,var(--good) 60%,var(--action-ink))}
  .run-status-capsule .run-status-dot[data-tone="fail"]{background:color-mix(in srgb,var(--bad) 60%,var(--action-ink))}
  .run-status-wait{display:inline-flex;flex:none}
  /* Pendant une recherche le cercle de la capsule tourne ; dans le panneau, le titre porte une
     loupe immobile et seule l'étape en cours clignote (l'attente du système). */
  .run-status-searching{color:var(--accent)}
  .run-status-turning svg{animation:run-status-turn calc(var(--dur-slower) * 2) linear infinite}
  .run-status-dot[data-tone="run"]{background:var(--accent)}
  .run-status-steps .run-status-wait{width:14px;justify-content:center;align-items:center}
  /* L'étape en cours garde le cercle d'une étape à venir, à la même taille, avec un point qui clignote dedans. */
  .run-status-step-now{position:relative;color:var(--accent)}
  .run-status-step-now .run-status-dot{position:absolute;inset:0;margin:auto;width:6px;height:6px}
  @keyframes run-status-turn{to{transform:rotate(1turn)}}
  .run-status-capsule .run-status-wait{color:inherit}
  /* Le panneau sort de la capsule : même largeur, aucun jour entre les deux. */
  .run-status-drop{position:absolute;top:100%;left:0;right:0;animation:run-status-drop var(--dur-base) var(--ease-out)}
  @keyframes run-status-drop{from{clip-path:inset(0 -48px 100% -48px);opacity:.4}to{clip-path:inset(0 -48px -64px -48px);opacity:1}}
  .run-status-panel{box-sizing:border-box;width:100%;max-height:min(540px,72vh);overflow-y:auto;border-width:0 1px 1px;border-style:solid;border-radius:0 0 var(--radius-xl) var(--radius-xl);font:400 12px/1.5 var(--font-sans)}
  .run-status-panel p{margin:0;font-size:inherit;line-height:inherit}
  .run-status-now,.run-status-prompt{display:grid;gap:10px;padding:16px 16px 14px}
  .run-status-prompt{border-bottom:1px solid var(--border);background:var(--accent-soft)}
  /* Une seule taille de texte dans le panneau : le poids et l'encre font la hiérarchie. */
  .run-status-refusal{padding:10px 16px;border-bottom:1px solid var(--border);background:var(--surface-2);color:var(--bad-ink)}
  .run-status-now h2,.run-status-prompt h2{display:flex;align-items:center;gap:8px;margin:0;font:inherit;font-weight:600;color:var(--ink)}
  .run-status-now>p,.run-status-prompt>p{color:var(--ink-2);text-wrap:pretty}
  .run-status-steps,.run-status-facts,.run-status-history ul{margin:0;padding:0;list-style:none}
  .run-status-steps{display:grid;gap:6px}
  .run-status-steps li{display:flex;align-items:center;gap:8px;color:var(--ink-3)}
  .run-status-steps li[data-state="done"]{color:var(--ink-2)}
  .run-status-steps li[data-state="now"]{color:var(--ink);font-weight:600}
  .run-status-facts{display:grid;gap:2px;color:var(--ink-3)}
  .run-status-panel .run-status-note{color:var(--ink-3)}
  .run-status-prompt .run-status-note{color:var(--ink-2)}
  .run-status-choices{display:flex;flex-wrap:wrap;gap:6px}
  .run-status-overview{display:grid;gap:8px;margin:0;padding:12px 16px;border-block:1px solid var(--border);background:var(--surface-2)}
  .run-status-overview>div{display:grid;grid-template-columns:104px 1fr;align-items:baseline;gap:8px}
  .run-status-overview dt{color:var(--ink-3)}
  .run-status-overview dd{margin:0;color:var(--ink)}
  .run-status-history{padding:12px 16px 14px}
  .run-status-history h3{margin:0 0 8px;font:inherit;font-weight:600;color:var(--ink-3)}
  .run-status-history li{display:flex;align-items:baseline;gap:9px;padding:6px 0}
  .run-status-history li+li{border-top:1px solid var(--border)}
  .run-status-history li>span:nth-child(2){flex:1;min-width:0;display:grid}
  .run-status-history b{font-weight:500;color:var(--ink)}
  .run-status-history small{color:var(--ink-3);font-size:inherit}
  .run-status-history time{color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}
  /* À l'étroit, la capsule se resserre (son signe d'état et un mot) ; elle s'élargit en s'ouvrant pour que
     le panneau garde sa largeur, sans rien déplacer dans la barre. */
  @container screen-context (max-width:1100px){
    .run-status{--run-status-state:44px;--run-status-main:108px}
    .run-status:not([data-open]):not([data-announcing]) .run-status-state{padding:0;gap:3px;justify-content:center}
    .run-status:not([data-open]):not([data-announcing]) .run-status-label{display:none}
    .run-status-main-long{display:none}
    .run-status-main-short{display:inline}
    /* Une annonce s'élargit comme une ouverture : elle se lit en entier, sans rien pousser. */
    .run-status:is([data-open],[data-announcing]) .run-status-shell{width:min(380px,calc(100cqw - 24px));z-index:var(--z-popover)}
  }
  @media (prefers-reduced-motion:reduce){
    .run-status-drop,.run-status-label,.run-status-turning svg{animation:none}
    .run-status-capsule,.run-status-chevron,.run-status-shell{transition:none}
  }

  .asst-panel{
    position:fixed;top:0;right:0;bottom:0;width:404px;max-width:94vw;z-index:var(--z-drawer);
    background:var(--surface);border-left:1px solid var(--border);
    box-shadow:var(--shadow-overlay);
    display:flex;flex-direction:column;
    transform:translateX(100%);
    transition:transform var(--dur-slow) var(--ease-out);
    will-change:transform;
  }
  .asst-panel.open{transform:translateX(0)}

  /* ===== Dock assistant « façon Comet » =================================
     Quand l'assistant est ouvert, il réserve sa largeur à droite (--asst-w).
     Le shell ET les grandes modales de détail se décalent à gauche et restent
     pleinement utilisables (header + footer compris) — on continue à
     travailler, l'assistant est juste à côté, conscient du contexte. */
  body[data-asst="open"] .os-shell{margin-right:var(--asst-w,0px)}
  body[data-asst="open"] .ui-window-scrim{right:var(--asst-w,0px)}
  /* Les modales ne débordent jamais sous le dock : leur largeur se borne à
     l'espace restant (le voile reste l'enfant direct du scrim). */
  body[data-asst="open"] .ui-window-scrim>*{max-width:100%}

  /* Chip de contexte (ce que « voit » l'assistant) */
  .asst-ctx{display:flex;align-items:center;gap:9px;margin:11px 13px 2px;padding:9px 11px;border:1px solid transparent;border-radius:8px;background:var(--bg-2)}
  .asst-ctx-ic{width:24px;height:24px;border-radius:6px;background:var(--surface);color:var(--ink-3);display:grid;place-items:center;flex:0 0 auto}
  .asst-ctx-tx{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}
  .asst-ctx-tx .l{font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4);margin-bottom:1px}
  .asst-ctx-tx .v{font-size:13px;font-weight:500;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}   /* role secondaire, taille compacte */

  /* Zone 2 — suggestion agentique (l'assistant se manifeste) */
  .asst-sugg{display:flex;gap:10px;margin:10px 13px 2px;padding:11px 12px;border:1px solid var(--accent-soft-2);border-radius:10px;background:var(--accent-soft)}
  .asst-sugg-ic{width:24px;height:24px;border-radius:8px;background:var(--accent);color:var(--fg-inverse);display:grid;place-items:center;flex:0 0 auto}
  .asst-sugg-body{flex:1 1 auto;min-width:0}
  .asst-sugg-body p{margin:0 0 9px;font-size:13px;line-height:1.5;color:var(--ink);text-wrap:pretty}
  .asst-sugg-acts{display:flex;gap:7px}
  /* SIH-115 : « oui » et « plus tard » sont un principal et un secondaire compacts.
     Ils ne se distinguent plus par une couleur inventee mais par leur RANG. */
  .asst-head{
    flex:0 0 auto;display:flex;align-items:center;gap:10px;position:relative;
    padding:13px 12px 13px 15px;border-bottom:1px solid var(--border);
  }
  .asst-head-ic{
    flex:0 0 auto;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;
    background:var(--accent-soft);color:var(--accent);
  }
  .asst-head-id{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;line-height:1.25}
  .asst-head-id strong{font-size:14px;font-weight:600;color:var(--ink)}
  .asst-head-id span{font-size:12px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}   /* role discret, icone seule */
  /* Menu réglages — préférence d'autonomie (#22) */
  .asst-setmenu-tx{display:flex;flex-direction:column;gap:1px;min-width:0}
  .asst-setmenu-tx strong{font-size:13px;font-weight:600;color:var(--ink)}
  .asst-setmenu-tx span{font-size:12px;color:var(--ink-3);line-height:1.35}
  .asst-scroll{
    flex:1 1 auto;min-height:0;overflow-y:auto;
    display:flex;flex-direction:column;gap:10px;padding:16px;
  }
  .asst-day{align-self:center;font-family:var(--font-sans);font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4);margin-bottom:2px}
  .asst-scroll .bubble{max-width:88%}
  /* Messages + flux guidé agentique — bulles en enfants directs du flex column,
     alignées par align-self (motif éprouvé, évite le rétrécissement du wrapper). */
  .asst-b{align-self:flex-start;max-width:88%;position:relative}
  /* La bulle de l'utilisateur : une seule recette, locale à l'assistant, son seul écran (DEV-574). */
  .asst-b.user{align-self:flex-end;background:var(--bg-2);color:var(--ink);border-color:var(--border-strong)}
  .asst-b p{margin:0}
  .asst-b-copy,.asst-copybtn{position:absolute;width:27px;height:27px;padding:0;border-radius:8px;border:1px solid var(--border-soft);background:var(--surface);color:var(--ink-3);display:grid;place-items:center;cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .asst-b-copy{top:7px;right:7px}
  .asst-b:hover .asst-b-copy,.asst-copybox:hover .asst-copybtn,.asst-b-copy:focus-visible,.asst-copybtn:focus-visible{opacity:1;pointer-events:auto}
  .asst-b-copy:hover,.asst-copybtn:hover{background:var(--bg-2);border-color:var(--border-strong);color:var(--ink)}
  .asst-qchips{align-self:flex-start;display:flex;flex-wrap:wrap;gap:6px;max-width:92%}
  .asst-copybox{margin-top:8px;border-radius:var(--radius-md);background:var(--support-bg);padding:10px 12px;position:relative}
  .asst-copybox p{margin:0 0 8px;font-size:13px;line-height:1.5;color:var(--ink);text-wrap:pretty}
  .asst-copybtn{right:6px;bottom:6px}
  /* Fil d'action (#17 transparence) — l'assistant montre ce qu'il fait, en direct,
     annulable. Trace discrète, neutre : pastille verte, pas de bande colorée. */
  .asst-act{align-self:stretch;display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);font-size:12px;color:var(--ink-2)}
  .asst-act-ic{width:18px;height:18px;border-radius:6px;background:var(--good);color:var(--fg-inverse);display:grid;place-items:center;flex:0 0 auto}
  .asst-act-tx{flex:1;line-height:1.4;text-wrap:pretty}
  .asst-act.undone{color:var(--ink-4)}
  .asst-act.undone .asst-act-ic{background:var(--ink-4)}
  /* Pied « façon journal » pendant une saisie guidée (enregistré, modifiable après) */
  .asst-jfoot{flex:0 0 auto;display:flex;align-items:center;gap:7px;margin:0 14px;padding:9px 0 2px;font-size:12px;color:var(--ink-3);border-top:1px solid var(--border)}
  .asst-jfoot svg{color:var(--good);flex:0 0 auto}
  .asst-jfoot strong{color:var(--ink-2);font-weight:600}
  .asst-input{
    flex:0 0 auto;display:flex;align-items:center;gap:8px;margin:0 14px 16px;border:1px solid var(--input-rest-border);border-radius:10px;
    padding:6px 6px 6px 8px;
  }      /* role discret, icone seule */
  .asst-input input{flex:1 1 auto;min-width:0;border:0;outline:0;background:transparent;font:inherit;font-size:14px;color:var(--ink);padding:6px 0}      /* role principal, icone seule */
  /* #21 — référencement @ multi-contexte */
  .asst-inputwrap{position:relative;flex:0 0 auto}
  .asst-mentions{display:flex;flex-wrap:wrap;gap:6px;margin:0 14px 8px}
  .asst-mention{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 5px 0 9px;border-radius:99px;background:var(--accent-soft);color:var(--accent-ink);font-size:12px;font-weight:500}
  .asst-mention>svg{color:var(--accent)}
  .asst-mention-x{width:18px;height:18px;border:0;background:transparent;border-radius:50%;display:grid;place-items:center;color:var(--ink-3);cursor:pointer}
  .asst-mention-x:hover{background:color-mix(in srgb,var(--ink) 7.000000000000001%,transparent);color:var(--ink)}
  .asst-atmenu{position:absolute;left:14px;right:14px;bottom:calc(100% + 2px);z-index:7;background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;box-shadow:var(--shadow-popover);padding:7px;max-height:280px;overflow-y:auto}
  .asst-atmenu-eyebrow{font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-4);font-weight:600;padding:5px 8px 4px}
  .asst-atmenu-opt{width:100%;display:flex;align-items:center;gap:9px;padding:8px;border:0;background:transparent;border-radius:8px;cursor:pointer;text-align:left;font:inherit;transition:background-color var(--dur-fast) var(--ease-out)}
  .asst-atmenu-opt:hover{background:var(--hover-bg)}
  .asst-atmenu-ic{width:24px;height:24px;border-radius:6px;background:var(--bg-2);color:var(--ink-3);display:grid;place-items:center;flex:0 0 auto}
  .asst-atmenu-opt:hover .asst-atmenu-ic{background:var(--surface)}
  .asst-atmenu-lbl{flex:1 1 auto;min-width:0;font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .asst-atmenu-kind{flex:0 0 auto;font-size:11px;color:var(--ink-4);text-transform:uppercase;letter-spacing:var(--tracking-wide)}
  /* `.topbar` RETIRÉE le 2026-08-03 (SIH-82) : rendue par aucun écran depuis longtemps.
     C'était pourtant elle que « la barre du haut appartient à la scène » visait en premier,
     et elle a fait allonger la liste de sélecteurs de deux sessions de chasse aux symptômes.
     Le haut d'écran a maintenant un emplacement unique — plus rien à peindre ici. */

  /* ===== Unified inner scroll views (used by every tab) ===== */
  .view,.vault-view,.list-view{
    flex:1 1 auto;min-height:0;min-width:0;
    overflow-y:auto;overflow-x:hidden;
    padding:8px 12px;

    display:flex;flex-direction:column;
  }
  /* Canon PLAT (décision finale Landry 2026-08-02) : pas de coque —
     les cartes blanches reposent directement sur le canevas clair. */
  @media (pointer:fine){
    .view::-webkit-scrollbar,.vault-view::-webkit-scrollbar,.list-view::-webkit-scrollbar{width:8px;height:8px}
    .view::-webkit-scrollbar-thumb,.vault-view::-webkit-scrollbar-thumb,.list-view::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px}
    .view::-webkit-scrollbar-thumb:hover,.vault-view::-webkit-scrollbar-thumb:hover,.list-view::-webkit-scrollbar-thumb:hover{background:var(--scroll-pill-thumb-hover)}
  }
  .view > *,.vault-view > *,.list-view > *{flex-shrink:0}
  /* .view-head retiré (SIH-72) : le Tableau de bord adopte ScreenHeader, plus aucun rendu de cette classe. */
  /* Inner content fills the column width like the Kanban board (no max-width clamp) */

  /* ===== Activity filter chips (DS pill pattern) ===== */
  
  .kb-mode-divider{
    width:1px;align-self:stretch;background-color:var(--border);
    margin:2px 4px;flex-shrink:0;
  }

  /* ===== Kanban statistics view ===== */
  .kb-stats-view{
    flex:1 1 auto;min-height:0;overflow:auto;
    /* Même ligne utile que les cartes : coque + filet de colonne + retrait intérieur. */
    padding:calc(var(--candidature-column-inset) + 1px) calc(var(--candidature-board-inset) + 1px + var(--candidature-column-inset)) 5px;
    container:candidature-statistics / inline-size;
    display:flex;flex-direction:column;gap:22px;
    background:var(--bg-app);
  }
  .kb-stats-section{display:flex;flex-direction:column;gap:12px}
  .kb-stats-section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
  .kb-stats-section-head h2{margin:0;font-size:16px;font-weight:var(--fw-semibold, 600);letter-spacing:var(--tracking-tight, -.01em);color:var(--fg-1);line-height:1.2}
  .kb-stats-section-head p{margin:2px 0 0;font-size:13px;color:var(--fg-3);line-height:1.4}
  .kb-stats-block-head{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-top:8px}
  .kb-stats-block-head h3{margin:0;font-size:16px;font-weight:600;color:var(--fg-1)}
  .kb-stats-block-head p{margin:3px 0 0;font-size:13px;color:var(--fg-3)}
  .kb-stats-priorities{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
  .kb-stats-priorities>div{display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:9px;min-height:62px;padding:12px 14px;border-radius:10px;background:var(--content-bg);border:1px solid var(--content-border);color:var(--fg-2)}
  .kb-stats-priorities>div.is-attention{background:var(--warning-50);border-color:transparent;color:var(--warning-700)}
  .kb-stats-priorities strong{font-family:var(--font-data);font-size:22px;font-weight:500;color:var(--fg-1);line-height:1}
  .kb-stats-priorities span{font-size:13px}
  .kb-stats-sources{display:grid;grid-template-columns:minmax(0,1fr) 28px minmax(0,1fr);gap:10px;align-items:stretch}
  .kb-stats-source{padding:16px;border-radius:10px;background:var(--content-bg);border:1px solid var(--content-border)}
  .kb-stats-source-title{display:flex;align-items:center;gap:10px;margin-bottom:14px;color:var(--fg-2)}
  .kb-stats-source-title div{display:flex;flex-direction:column;gap:2px}.kb-stats-source-title strong{font-size:14px;color:var(--fg-1)}.kb-stats-source-title span{font-size:12px;color:var(--fg-3)}
  .kb-stats-source-values{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .kb-stats-source-values span{display:flex;flex-direction:column;gap:4px;padding:11px;border-radius:8px;background:var(--bg-subtle);font-size:12px;color:var(--fg-3)}
  .kb-stats-source-values b{font-family:var(--font-data);font-size:22px;font-weight:500;color:var(--fg-1)}
  .kb-stats-link{display:flex;align-items:center;justify-content:center;color:var(--fg-3)}
  .kb-stats-results{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-radius:10px;background:var(--content-bg);border:1px solid var(--content-border);overflow:hidden}
  .kb-stats-results>div{display:flex;align-items:baseline;gap:8px;padding:16px 18px;border-right:1px solid var(--border-soft)}.kb-stats-results>div:last-child{border:0}
  .kb-stats-results strong{font-family:var(--font-data);font-size:30px;font-weight:500;color:var(--fg-1)}.kb-stats-results span{font-size:13px;color:var(--fg-2)}
  .kb-stats-details{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;margin-top:2px}
  .kb-stats-evidence{display:flex;flex-direction:column;gap:9px}.kb-stats-evidence span{font-size:13px;color:var(--fg-3)}.kb-stats-evidence b{display:inline-block;min-width:92px;color:var(--fg-1);font-weight:600}
  .kb-stats-loading{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
  .kb-stats-error{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:59px;padding:8px 10px;border-radius:8px;background:var(--danger-50)}.kb-stats-error p{margin:0;font-size:12px;color:var(--danger-700)}
  .kb-empty-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}
  .kb-board-empty{margin:auto}
  @container candidature-statistics (max-width:820px){.kb-stats-priorities,.kb-stats-results{grid-template-columns:1fr}.kb-stats-results>div{border-right:0;border-bottom:1px solid var(--border-soft)}.kb-stats-sources{grid-template-columns:1fr}.kb-stats-link{transform:rotate(90deg)}.kb-stats-details{grid-template-columns:1fr}}

  /* ===== Calendar — date picker dropdown ===== */
  /* Bouton — base + comportements.
     Hover  → background -100
     Press  → background -200 (no scale, no shadow, no bounce)
     Focus  → ring 3px via var(--ring-focus)
     Disabled → opacity 0.5, cursor not-allowed */
  /* ═══════════ LE bouton : TROIS ROLES, DEUX TAILLES (SIH-115) ═══════════
     Decision Landry 2026-08-06 (SIH-111, regle 3) : « c'est la meme application,
     elle doit avoir le meme langage ». Mesure au rendu avant ce passage : 66 boutons
     d'action sur trois ecrans pour 28 formes distinctes, 10 hauteurs de 16 a 74 px,
     deux boutons d'accent au meme fond avec deux rayons (8 et 99).

     LE ROLE DIT L'IMPORTANCE, JAMAIS L'ECRAN D'ORIGINE. C'est tout le sujet : les
     anciennes variantes (`primary`, `accent`, `ghost`, `modal`, `souligne`) nommaient
     un aspect ou un endroit, pas un rang. On ne pouvait donc pas repondre a « lequel
     de ces deux boutons compte le plus ? », et chaque ecran s'inventait sa reponse.

     DEUX TAILLES SEULEMENT, arbitrage Landry : 32 px (normal) et 26 px (compact).
     L'ecart de 6 px est volontaire : deux tailles qui se ressemblent ne servent a rien.

     Ce que ces trois roles ne couvrent PAS, et qui porte son propre nom ailleurs :
     l'onglet (SIH-84), la ligne de menu (SIH-89), l'item de navigation, la cellule de
     calendrier, la tuile d'action, le declencheur de selecteur, le fil d'Ariane et le
     lien. Ce sont des objets differents dans tous les systemes de reference ; les
     fondre dans un langage de bouton casserait leur affordance au lieu de l'unifier. */
  /* SIH-115 · LA GEOMETRIE EST UNE DECLARATION UNIQUE, elle aussi. Les classes qui
     suivent `.btn` sont des boutons qui ne portent pas `.btn` dans le JSX : elles
     s'inscrivent ICI plutot que de se redonner une hauteur, un rayon et une graisse
     dans leur coin. Meme geste que la limite unique de SIH-114.
     Mesure avant ce passage : DIX hauteurs (16, 24, 25, 26, 28, 30, 32, 33, 34, 74)
     et SEPT rayons pour un seul et meme objet.

     CE QUI EST COMMUN A TOUS LES BOUTONS, et rien d'autre. Ni hauteur, ni rayon, ni
     remplissage, ni fond : ces quatre-la varient avec la TAILLE et le ROLE, et sont
     donc ecrits une seule fois chacun, plus bas, dans la combinaison qui les porte.
     Les redonner ici obligerait chaque bouton a les contredire ensuite : la premiere
     valeur mentirait a qui la lit (contrat des surfaces, SIH-82). */
  .btn,
  .vc-display-btn,
  .cve-ft-dl{
    appearance:none;display:inline-flex;align-items:center;justify-content:center;
    font:inherit;font-weight:500;line-height:1;white-space:nowrap; /* un libellé ne passe jamais sur deux lignes dans une hauteur fixe */
    text-transform:none;letter-spacing:normal;text-decoration:none; /* la pièce n'hérite pas du ton d'un intertitre voisin */
    color:var(--fg-1);border:1px solid transparent;cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),
               border-color var(--dur-fast) var(--ease-out),
               color var(--dur-fast) var(--ease-out),
               box-shadow var(--dur-fast) var(--ease-out);
  }
  .btn svg{width:15px;height:15px;flex:0 0 auto}
  .btn:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .btn[disabled],.btn[aria-disabled="true"],.vdp-btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
  .btn[disabled]:hover,.btn[aria-disabled="true"]:hover{background-color:transparent}
  /* Action éteinte qui s'explique au clic (document envoyé, figé) : l'aspect de l'indisponible,
     sans le désactiver (document-lock-ui). */
  .btn[data-locked]{opacity:.5;cursor:pointer}

  /* DEUX TAILLES x DEUX FORMES = QUATRE COMBINAISONS, et chaque bouton n'appartient
     qu'a UNE. On ne cascade pas « normale puis compacte puis carree » : un bouton
     compact ne commence pas par etre normal. L'ecart de 6 px entre les deux tailles
     est volontaire (arbitrage Landry) : deux tailles qui se ressemblent ne servent a rien.
     L'icone seule n'est pas un quatrieme role : c'est la meme importance sans libelle. */

  /* TROISIEME TAILLE, 36 px (decision dev-548-tailles-bouton-26-32-36, 16 octobre 2026) : les
     actions de fenetre, de bibliotheque et de Match, decidees trois fois ecran par ecran, entrent
     ici. Un ecran ne redimensionne plus .btn selon son parent : il choisit size="lg". */
  .btn.lg:not(.icon-only){height:36px;padding:0 16px;gap:8px;font-size:13px;border-radius:8px}
  .btn.lg.icon-only{width:36px;height:36px;padding:0;gap:0;font-size:13px;border-radius:8px}
  .btn.lg svg{width:16px;height:16px}

  /* Taille normale, avec libelle. `:where(:not(.lg))` exclut la grande taille SANS alourdir le
     selecteur : les regles d'ecran qui redimensionnent encore .btn (avant leur migration vers
     size="lg") gardent la meme force qu'avant et ne sont pas ecrasees. */
  .btn:not(.sm):not(.icon-only):where(:not(.lg)),
  .cve-ft-dl,
  .vc-tabsrow .vc-bar-tools .vc-display-btn{height:32px;padding:0 14px;gap:7px;font-size:13px;border-radius:8px}

  /* Taille normale, icone seule : une boite carree. */
  .btn.icon-only:not(.sm):where(:not(.lg)),
  .vc-display-btn{width:32px;height:32px;padding:0;gap:0;font-size:13px;border-radius:8px}

  /* Taille compacte, avec libelle : barres denses et lignes de liste. */
  .btn.sm:not(.icon-only){height:26px;padding:0 10px;gap:6px;font-size:12px;border-radius:8px}

  /* FORME PASTILLE : l'action d'en-tete d'ecran, de la meme matiere que le duo « Nouvelle
     entree » qu'elle precede (canon SIH-74, conserve a la demande de Landry, 16 octobre 2026).
     Hauteur normale, arrondi complet, sans ombre ; le role garde sa couleur. */
  .btn.pastille:not(.icon-only){border-radius:999px;padding:0 12px 0 11px;gap:6px;font-size:12px;font-weight:650;letter-spacing:var(--tracking-tight)}
  .btn.pastille:not(:focus-visible){box-shadow:none}
  .btn.pastille svg{width:16px;height:16px}

  /* ALIGNEMENT : un bouton pleine largeur de rail se lit a gauche comme les lignes voisines ;
     « ecarte » rejette l'icone de direction au bout de la ligne. */
  .btn.debut{justify-content:flex-start}
  .btn.ecarte{justify-content:space-between}

  /* Taille compacte, icone seule. */
  .btn.sm.icon-only{width:26px;height:26px;padding:0;gap:0;font-size:12px;border-radius:8px}
  /* Le point d'entrée des options reste un carré bordé et visible sur toutes les surfaces. */
  /* Les trois points sont centrés dans le carré, quel que soit le conteneur (sans cela, l'icône
     suit la ligne de texte et sort de l'axe). */
  .card-options-trigger{display:inline-flex;align-items:center;justify-content:center;gap:0;font-size:12px;line-height:1}
  /* Le « ⋯ » prend la taille de ses voisins (dev-548-reglages-systeme) : 26, 32 ou 36 (defaut). */
  .card-options-trigger.card-options-trigger--sm{width:26px;height:26px}
  .card-options-trigger.card-options-trigger--md{width:32px;height:32px}
  /* À côté d'un bouton, le « ⋯ » prend sa taille et reste carré : 26 à côté
     d'un petit bouton, 32 d'un normal, 36 d'un grand. La taille fixe ne vaut que pour un « ⋯ » seul.
     Le « ⋯ » est posé seul ou en tête de son conteneur (card-options, menu, options de section).
     Le voisin n'est qu'une condition (:where) : la règle ne vise et ne redessine que le « ⋯ ». */
  :where(.btn.sm,:has(>.btn.sm))+:has(>.card-options-trigger:first-child)>.card-options-trigger:not(.card-options-menu),
  :has(>.card-options-trigger:first-child):has(+:where(.btn.sm,:has(>.btn.sm)))>.card-options-trigger:not(.card-options-menu),
  :where(.btn.sm,:has(>.btn.sm))+.card-options-trigger:not(.card-options-menu),
  .card-options-trigger:not(.card-options-menu):has(+:where(.btn.sm,:has(>.btn.sm))){width:26px;height:26px}
  :where(.btn:not(.sm,.lg),:has(>.btn:not(.sm,.lg)))+:has(>.card-options-trigger:first-child)>.card-options-trigger:not(.card-options-menu),
  :has(>.card-options-trigger:first-child):has(+:where(.btn:not(.sm,.lg),:has(>.btn:not(.sm,.lg))))>.card-options-trigger:not(.card-options-menu),
  :where(.btn:not(.sm,.lg),:has(>.btn:not(.sm,.lg)))+.card-options-trigger:not(.card-options-menu),
  .card-options-trigger:not(.card-options-menu):has(+:where(.btn:not(.sm,.lg),:has(>.btn:not(.sm,.lg)))){width:32px;height:32px}
  :where(.btn.lg,:has(>.btn.lg))+:has(>.card-options-trigger:first-child)>.card-options-trigger:not(.card-options-menu),
  :has(>.card-options-trigger:first-child):has(+:where(.btn.lg,:has(>.btn.lg)))>.card-options-trigger:not(.card-options-menu),
  :where(.btn.lg,:has(>.btn.lg))+.card-options-trigger:not(.card-options-menu),
  .card-options-trigger:not(.card-options-menu):has(+:where(.btn.lg,:has(>.btn.lg))){width:36px;height:36px}
  .btn.sm svg{width:14px;height:14px}

  /* ROLE 1 · PRINCIPAL : le bleu de reference #24476B (dev-548-bleu-reference-24476b). UN SEUL par ecran. Il porte le halo, comme un objet
     de premier plan qui compte : c'est le seul bouton qui se detache du plan. */
  /* Le fond passe par --action-bg / --action-ink, PAS par --ink en direct. Raison MESUREE,
     pas theorique : --ink devient presque blanc en theme sombre et la barre du haut vit sur
     la scene encre. SIH-130 fixe donc la paire sur la coque au niveau racine et l'inverse
     localement dans `.screen-chrome` : l'action reste lisible sur les deux plans. */
  /* SIH-115 · s'inscrivent ici les boutons d'accent qui se peignaient eux-memes.
     Ils portaient le MEME fond que le principal avec DEUX rayons (8 px et 99 px) :
     c'est le defaut nomme dans la decision, et il se corrige en les rattachant a
     la declaration au lieu de choisir un rayon commun a la main. */
  .btn.principal,
  .cve-ft-dl{background-color:var(--action-bg);color:var(--action-ink);border-color:var(--action-border);box-shadow:var(--edge-halo)}
  .btn.principal:hover,
  .cve-ft-dl:hover{background-color:var(--action-bg-hover)}
  .btn.principal:active{background-color:var(--action-bg-hover)}

  /* ROLE 2 · SECONDAIRE : la surface, avec EXACTEMENT la meme limite qu'une carte.
     Cette limite n'est pas ecrite ici : le selecteur est inscrit a la declaration
     unique de SIH-114 (plus haut dans la feuille). La recopier ferait deux verites. */
  /* SIH-115 · les boutons de surface qui se redessinaient chacun leur bord. Ils sont
     AUSSI inscrits a la declaration de limite de SIH-114 (plus haut) : c'est la meme
     liste, et c'est pourquoi ils n'ont plus de `border` a eux. */
  .btn.secondaire{background-color:var(--surface);color:var(--ink)}
  .btn.secondaire:hover{background-color:var(--bg-2)}
  .btn.secondaire:active{background-color:var(--bg-2)}
  /* Limite du secondaire : un filet net, sans halo (dev-548-contour-secondaire-filet, 16 octobre
     2026). La recette de la bibliotheque (DEV-494) devient celle de la piece : il quitte la
     declaration de limite des cartes (SIH-114), qui garde le halo pour les objets de contenu. */
  .btn.secondaire{border-color:var(--border-strong);box-shadow:none}
  .btn.secondaire:hover:where(:not(:disabled,[aria-disabled="true"])){border-color:var(--border-input-hover)}
  .btn.secondaire:focus-visible{box-shadow:var(--ring-focus)}
  /* État « choisi » de la pièce (bascule pressée, menu dont une option cachée est active) : le bleu
     teinté de la sélection, comme une ligne choisie (dev-548-selection-bleu-teinte). */
  .btn:is([aria-pressed="true"],.is-selected):where(.secondaire,.discret){background-color:var(--accent-soft);color:var(--accent-ink)}

  /* ROLE 3 · DISCRET : rien au repos, sauf le CardOptionsMenu dont le carré permanent
     matérialise le point d'entrée sans lui donner un fond de premier plan. */
  /* SIH-115 : les boutons a icone seule du Vault s'inscrivent ICI au lieu de se peindre
     chacun leur boite. Ils ne portent pas `.btn` dans le JSX, donc c'est le selecteur qui
     les rattache au role : meme geste que la limite unique de SIH-114. Mesure avant ce
     passage : quatre boutons de meme intention, trois hauteurs (26, 30, 32) et deux boites. */
  /* Le « ⋯ » reste discret par sa surface transparente, mais sa limite est désormais
     permanente sur décision Landry du 13 septembre 2026. */
  .btn.discret,
  .vc-display-btn,
  .card-options-trigger{background-color:transparent;color:var(--ink-2)}
  .btn.discret:hover,
  .vc-display-btn:hover,
  .card-options-trigger:hover,
  .card-options.open .card-options-trigger{background-color:var(--bg-2);color:var(--ink);box-shadow:var(--edge-ring)}
  .btn.discret:active,
  .vc-display-btn:active,
  .card-options-trigger:active{background-color:var(--bg-2);color:var(--ink)}

  /* Le DANGER n'est pas un quatrieme role : c'est un TON qui se pose sur un role.
     « Supprimer » peut etre principal dans une modale de confirmation et discret dans
     un menu ; son importance change, sa gravite non. */
  .btn.danger{color:var(--bad)}
  .btn.danger.principal{background-color:var(--bad);border-color:transparent;color:var(--action-danger-ink)}
  .btn.danger.principal:hover{background-color:color-mix(in srgb,var(--bad) 86%,var(--ink))}
  .btn.danger.secondaire:hover,.btn.danger.discret:hover{background-color:color-mix(in srgb,var(--bad) 10%,transparent);color:var(--bad)}
  /* DEV-494 · limites par rôle. Une limite appartient au rôle, jamais à la page.
     Les recettes de commandes restent réservées aux consommateurs explicitement raccordés.
     Le papier et les surfaces flottantes ne consomment pas ces rôles. */
  .edge[data-edge-role="content"]{border:1px solid var(--content-border);box-shadow:none;cursor:default}
  .edge[data-card-action],.edge[data-edge-role="content"]:is(button,a,[role="button"]){cursor:pointer}
  .edge[data-card-action]:is(:hover,:focus-within):not(.active){border-color:var(--content-hover-border)}
  /* DEV-494 : survol validé, périmètre intérieur sans déplacement.
     Les lignes sans cadre ne prennent que le voile ; états persistants et clavier prioritaires. */
  :is(.edge[data-card-action],.edge[data-edge-role="content"]:is(button,a,[role="button"]),.vault-view .vcj,.vcj-chrono-row>.vcj,.vcj,
      .vpf-tile,.vpf-mag-sec,.gk-card,
      .fm-folder,.fm-file,.kc,.cr-card,.cve-library-document[data-card-action],.cve-candfollow,
      .cve-vcard,.ct-task,.ep-folder-card,.ep-doc-card):hover:not(.active,.open,.selected,.sel,.drop,.inserted,.flash,[aria-selected="true"],[aria-pressed="true"],:disabled,[aria-disabled="true"]):not(:focus-visible):not(:has(:focus-visible)){
    background:var(--content-hover-bg);
    border-color:var(--content-hover-border);
    outline:var(--content-hover-width) solid var(--content-hover-border);
    outline-offset:calc(-1 * var(--content-hover-width));
  }
  /* Sélection persistante : même périmètre que le pilote Match, sans déplacement. */
  :is(.edge[data-edge-role="content"]:is(.active,.open,.selected,.sel,[aria-selected="true"],[aria-pressed="true"]),
      .vcj.open,.kc.selected,.kc[aria-selected="true"],.kc[aria-pressed="true"],
      .cr-card.sel,.cve-folder.active,.ct-citem.on):not(:focus-visible):not(:has(:focus-visible)){
    border-color:var(--content-selected-border);
    outline:var(--content-selected-width) solid var(--content-selected-border);
    outline-offset:calc(-1 * var(--content-selected-width));
    box-shadow:none;
  }
  /* DEV-494 : survol validé, périmètre intérieur sans déplacement.
     Les lignes sans cadre ne prennent que le voile ; états persistants et clavier prioritaires. */
  /* Sélection persistante : même périmètre que le pilote Match, sans déplacement. */
  .edge[data-edge-role="support"]{border:1px solid var(--border);background:var(--bg-2);box-shadow:none}
  .edge[data-edge-role="control"]{border:1px solid var(--border-strong);background:var(--surface-2);box-shadow:none}
  .edge[data-edge-role="control"]:is(:hover,[aria-expanded="true"]):where(:not(:disabled,[aria-disabled="true"])){border-color:var(--border-input-hover);background:var(--bg-2);box-shadow:none}
  .edge[data-edge-role="control"]:is(:focus-visible,:has(input:focus-visible)){border-color:var(--accent);outline:0;box-shadow:var(--ring-focus)}

  .edge[data-edge-role="input"],
  .ct-search,
  .vpf-overview-search,
  .cve-panel-search,
  .asst-input,
  .cve-profile-area,
  .vjob-add-row input,
  .vjob-kw-add-row input,
  .os-shell :is(input.input,textarea.input),
  .settings-dialog :is(input.input,textarea.input),
  .modal :is(input.input,textarea.input),
  input.cve-profile-input,
  textarea.cve-profile-input,
  .account-identity-editor input,
  .settings-charter-editor textarea,
  .chipadd-field input,
  .smed-linkadd input,
  .vw-pick-manual input,
  .fm-file-preview-title-edit input{border:1px solid var(--input-rest-border);background:var(--surface);box-shadow:none;cursor:text;transition:border-color var(--dur-fast) var(--ease-out)}
  .edge[data-edge-role="input"]:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.ct-search:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.vpf-overview-search:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.cve-panel-search:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.asst-input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.cve-profile-area:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.vjob-add-row input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.vjob-kw-add-row input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.os-shell :is(input.input,textarea.input):hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.settings-dialog :is(input.input,textarea.input):hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.modal :is(input.input,textarea.input):hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),input.cve-profile-input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),textarea.cve-profile-input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.account-identity-editor input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.settings-charter-editor textarea:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.chipadd-field input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.smed-linkadd input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.vw-pick-manual input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))),.fm-file-preview-title-edit input:hover:where(:not(:disabled,[readonly],[aria-disabled="true"],:has(:disabled,[readonly]))){border-color:var(--ink-3);background:var(--surface);box-shadow:none}
  .edge[data-edge-role="input"]:focus-within,
  .ct-search:focus-within,
  .vpf-overview-search:focus-within,
  .cve-panel-search:focus-within,
  .asst-input:focus-within,
  .cve-profile-area:focus-within,
  .vjob-add-row input:focus-within,
  .vjob-kw-add-row input:focus-within,
  .os-shell :is(input.input,textarea.input):focus-within,
  .settings-dialog :is(input.input,textarea.input):focus-within,
  .modal :is(input.input,textarea.input):focus-within,
  input.cve-profile-input:focus-within,
  textarea.cve-profile-input:focus-within,
  .account-identity-editor input:focus-within,
  .settings-charter-editor textarea:focus-within,
  .chipadd-field input:focus-within,
  .smed-linkadd input:focus-within,
  .vw-pick-manual input:focus-within,
  .fm-file-preview-title-edit input:focus-within{border-color:var(--accent);outline:0;box-shadow:var(--ring-focus)}

  /* Même bouton dans le panneau de la télécommande : sur une surface blanche, son survol doit se voir. */

  /* Primitives de structure partagées : fermeture, rangement, pied et zones scrollables.
     Elles vivent dans app/_ui/modules/ui/ et remplacent progressivement les classes locales. */
  .ui-close-button{width:26px;height:26px;flex:0 0 auto;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--ink-3);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .ui-close-button--md{width:32px;height:32px}
  .ui-close-button:hover{background:var(--bg-2);border-color:var(--border-soft);color:var(--ink)}
  .ui-close-button--danger:hover{background:color-mix(in srgb,var(--bad) 12%,transparent);color:var(--bad)}
  .ui-folder-select{position:relative;display:inline-flex;align-items:center;gap:8px;flex:0 0 auto;min-width:0}
  .ui-folder-select__label{font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);flex:0 0 auto}
  .ui-folder-select__control{display:inline-flex;align-items:center;gap:7px;min-width:0;border:0;background:transparent;padding:0;font:inherit;font-size:13px;font-weight:500;color:var(--ink-2);cursor:pointer}
  .ui-folder-select__control:focus-visible{outline:0;box-shadow:var(--ring-focus);border-radius:var(--radius-xs)}
  .ui-folder-select__control svg{width:15px;height:15px;color:var(--ink-4);flex:0 0 auto}
  .ui-folder-select__control svg:last-child{width:13px;height:13px}
  .ui-folder-select__value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ui-panel-header{display:flex;align-items:center;gap:8px;min-width:0;min-height:49px;padding:7px 12px;border-bottom:1px solid var(--border);background:var(--window-head-bg)}
  .ui-panel-header__left,.ui-panel-header__center,.ui-panel-header__right{display:flex;align-items:center;min-width:0}
  .ui-panel-header__left{flex:1;gap:9px}
  .ui-panel-header__center{gap:6px;flex:0 0 auto}
  .ui-panel-header__right{gap:8px;flex:0 0 auto}
  .ui-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:14px;min-width:0;min-height:49px;padding:8px 16px;border-top:1px solid var(--border);background:var(--bg-surface)}
  .ui-panel-footer__left,.ui-panel-footer__right{display:flex;align-items:center;min-width:0}
  .ui-panel-footer__left{gap:18px;flex:1}
  .ui-panel-footer__right{gap:8px;margin-left:auto;flex:0 0 auto}
  .ui-panel-footer__left .ui-folder-select{max-width:100%;flex:1 1 auto}
  .ui-panel-footer__left .ui-folder-select__control{flex:1 1 auto}
  .ui-scroll-area{position:relative;min-width:0;min-height:0;overscroll-behavior:contain}
  .ui-scroll-area--vertical{overflow-y:auto;overflow-x:hidden}
  .ui-scroll-area--horizontal{overflow-x:auto;overflow-y:hidden}
  @media (pointer:fine){
    .ui-scroll-area--vertical::-webkit-scrollbar{width:8px}
    .ui-scroll-area--horizontal::-webkit-scrollbar{height:8px}
    .ui-scroll-area--compact::-webkit-scrollbar{width:6px;height:6px}
    .ui-scroll-area::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:999px;border:2px solid transparent;background-clip:padding-box}
    .ui-scroll-area--compact::-webkit-scrollbar-thumb{border-width:1px}
  }
  /* ── Scrollbar (décision Landry 10-08) ───────────────────────────────────
     La pilule suit le défilement sans compression ni retour animé en fin de
     course. data-scroll-pill-below la borne sous une navigation collante. */
  /* La barre native disparaît AVANT l'injection JS dès que le contexte déclare
     une pilule. Les sélecteurs legacy évitent le flash sur les surfaces pas
     encore portées vers data-scroll-mode ; le tactile garde son indicateur natif. */
  @media (pointer: fine){
    [data-scroll-mode="pill"],
    .side,
    .vc-aside,
    .vc-main-col,
    .gk-col-body,
    .gk-statscroll,
    .asst-scroll,
    .asst-atmenu,
    .jc-menu-scroll,
    .ct-lscroll,
    .ct-detail,
    .cdet-content,
    .cdet-content2,
    .cdet-rail,
    .cve-midscroll,
    .cve-prevscroll,
    .cve-lib2-scroll,
    .cve-railscroll,
    .vdp-asst-flow,
    :has(> .ui-scrollpill-host > .ui-scrollpill){scrollbar-width:none}
    [data-scroll-mode="pill"]::-webkit-scrollbar,
    .side::-webkit-scrollbar,
    .vc-aside::-webkit-scrollbar,
    .vc-main-col::-webkit-scrollbar,
    .gk-col-body::-webkit-scrollbar,
    .gk-statscroll::-webkit-scrollbar,
    .asst-scroll::-webkit-scrollbar,
    .asst-atmenu::-webkit-scrollbar,
    .jc-menu-scroll::-webkit-scrollbar,
    .ct-lscroll::-webkit-scrollbar,
    .ct-detail::-webkit-scrollbar,
    .cdet-content::-webkit-scrollbar,
    .cdet-content2::-webkit-scrollbar,
    .cdet-rail::-webkit-scrollbar,
    .cve-midscroll::-webkit-scrollbar,
    .cve-prevscroll::-webkit-scrollbar,
    .cve-lib2-scroll::-webkit-scrollbar,
    .cve-railscroll::-webkit-scrollbar,
    .vdp-asst-flow::-webkit-scrollbar,
    :has(> .ui-scrollpill-host > .ui-scrollpill)::-webkit-scrollbar{display:none}
  }
  @media (prefers-reduced-motion: reduce){
    .ui-scrollpill{transition:none !important}
  }
  /* Rail en SUPERPOSITION (décision Landry 27-07) : pas de gouttière réservée —
     la pilule flotte au-dessus du bord du contenu, façon iPad ; l'empilement
     élevé garantit qu'aucun élément de la zone ne la recouvre. */
  .ui-scrollpill-host{position:sticky;top:0;height:0;z-index:30;transform:none !important;align-self:stretch;flex:0 0 auto;width:100%;min-width:0;pointer-events:none;contain:layout}
  .ui-scroll-edges{position:absolute;pointer-events:none;overflow:hidden}
  .ui-scroll-edges > i{position:absolute;left:0;right:0;height:12px;pointer-events:none;opacity:0}
  .ui-scroll-edge-top{top:-12px;box-shadow:var(--shadow-sm);border-bottom:1px solid var(--border-soft)}
  .ui-scroll-edges > .ui-scroll-edge-bottom{bottom:0;height:1px;box-shadow:var(--shadow-sm);border-bottom:1px solid var(--border-soft);transform:scaleY(-1)}
  .ui-scroll-edges[data-top="true"] > .ui-scroll-edge-top,.ui-scroll-edges[data-bottom="true"] > .ui-scroll-edge-bottom{opacity:1}
  .ui-scrollpill{position:absolute;top:0;right:1px;width:10px;display:flex;justify-content:flex-end;align-items:stretch;
    opacity:0;cursor:default;pointer-events:auto;
    transition:opacity 420ms var(--ease-out)}
  .ui-scrollpill i{display:block;width:3px;border-radius:99px;background:var(--scroll-pill-thumb);
    transition:background-color 160ms var(--ease-out)}
  [data-pill="on"] > .ui-scrollpill-host .ui-scrollpill{opacity:1;
    transition:opacity 120ms var(--ease-out)}
  [data-pill-hover] > .ui-scrollpill-host .ui-scrollpill i{width:6px;background:var(--scroll-pill-thumb-hover)}
  [data-pill-drag] > .ui-scrollpill-host .ui-scrollpill{opacity:1}
  [data-pill-drag] > .ui-scrollpill-host .ui-scrollpill i{width:6px;background:var(--scroll-pill-thumb-active)}
  [data-scroll-axis="horizontal"] > .ui-scrollpill-host .ui-scrollpill{align-items:flex-end;justify-content:stretch}
  [data-scroll-axis="horizontal"] > .ui-scrollpill-host .ui-scrollpill i{width:100%;height:3px;transition:height 160ms var(--ease-out),background-color 160ms var(--ease-out)}
  [data-scroll-axis="horizontal"]:is([data-pill-hover],[data-pill-drag]) > .ui-scrollpill-host .ui-scrollpill i{width:100%;height:6px}
  /* Les deux canvas éditeurs sont beiges : indicateurs graphite. Les autres
     aperçus gardent leurs indicateurs clairs sur fond sombre. */
  .fm-document-preview-html,
  .cvedit[data-doc="cv"] .cve-letterbody > .cve-prevscroll{
    --scroll-pill-thumb:rgba(255,255,255,.34);
    --scroll-pill-thumb-hover:rgba(255,255,255,.54);
    --scroll-pill-thumb-active:rgba(255,255,255,.70);
    --scroll-native-touch-thumb:rgba(255,255,255,.56);
  }
  .cvedit[data-doc="lettre"] .cve-letterbody > .cve-prevscroll,
  .cve-optA .cve-canvas{
    --scroll-pill-thumb:rgba(66,56,38,.40);
    --scroll-pill-thumb-hover:rgba(66,56,38,.58);
    --scroll-pill-thumb-active:rgba(66,56,38,.72);
    --scroll-native-touch-thumb:rgba(66,56,38,.52);
  }

  .btn-kbd{font-family:var(--font-data);font-size:11px;color:var(--fg-4);background-color:var(--bg-subtle);border:1px solid var(--border);padding:1px 5px;border-radius:var(--radius-xs);margin-left:4px}
  /* Icon-only button tooltip — portal'd to <body>, positioned via JS (position:fixed) */
  .btn-tip{
    position:fixed;
    background-color:var(--ink);color:var(--fg-inverse);
    font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:var(--tracking-normal);line-height:1.3;
    padding:6px 10px;border-radius:6px;white-space:nowrap;pointer-events:none;
    box-shadow:var(--shadow-popover);
    z-index:var(--z-tooltip);
    isolation:isolate;
    will-change:transform,opacity;
  }
  /* Above the button — anchor with bottom edge at top:Y, slide up to settle */
  .btn-tip--above{transform:translate(-50%, -100%)}
  .btn-tip--above{animation: btn-tip-above-in 200ms var(--dur-instant) var(--ease-out) both}
  @keyframes btn-tip-above-in{
    from{opacity:0;transform:translate(-50%, -100%) translateY(4px)}
    to  {opacity:1;transform:translate(-50%, -100%) translateY(0)}
  }
  /* Below the button — anchor with top edge at top:Y, slide down to settle */
  .btn-tip--below{transform:translate(-50%, 0)}
  .btn-tip--below{animation: btn-tip-below-in 200ms var(--dur-instant) var(--ease-out) both}
  @keyframes btn-tip-below-in{
    from{opacity:0;transform:translate(-50%, 0) translateY(-4px)}
    to  {opacity:1;transform:translate(-50%, 0) translateY(0)}
  }
  /* Subtle directional caret — points back at the button */
  .btn-tip::before{
    content:"";position:absolute;left:50%;width:8px;height:8px;
    background-color:var(--ink);transform:translateX(-50%) rotate(45deg);
    border-radius:1px;
  }
  .btn-tip--above::before{bottom:-3px}
  .btn-tip--below::before{top:-3px}

  /* ===== Tags / Chips ===== */
  /* Status-chip — radio-like chip for picking a destination column.
     DS-compliant: subtle surface at rest, dark fill when selected. */

  .tag{
    display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;
    font-size:11px;font-weight:500;color:var(--ink-2);
    background:var(--surface-2);border:1px solid var(--border-soft);border-radius:6px;
    line-height:1;white-space:nowrap;
  }
  .tag .dot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.75}
  .tag.solid{background:var(--ink);color:var(--fg-inverse);border-color:transparent}
  .tag.accent{background:var(--accent-soft);color:var(--accent-ink);border-color:color-mix(in srgb,var(--accent-ink) 15%,transparent)}
  .tag.good{background:var(--success-50);color:var(--success-700);border-color:color-mix(in srgb,var(--success-700) 15%,transparent)}
  .tag.warn{background:var(--warning-50);color:var(--warning-700);border-color:color-mix(in srgb,var(--warning-700) 15%,transparent)}
  .tag.bad{background:var(--danger-50);color:var(--danger-700);border-color:color-mix(in srgb,var(--danger-700) 15%,transparent)}
  .tag.info{background:var(--info-soft);color:var(--info-ink);border-color:color-mix(in srgb,var(--info-ink) 15%,transparent)}
  .tag.outline{background:transparent;color:var(--ink-3);border:1px dashed var(--border-strong)}
  /* Atelier : les trois couleurs d’étiquette décrivent une catégorie, jamais une décoration.
     Elles sont partagées par les écrans applicatifs qui exposent ces mêmes catégories. */
  .tag.cyan{background:var(--tag-cyan);color:var(--tag-cyan-ink);border-color:var(--tag-cyan-border)}
  .tag.amber{background:var(--tag-amber);color:var(--tag-amber-ink);border-color:var(--tag-amber-border)}
  .tag.green{background:var(--tag-green);color:var(--tag-green-ink);border-color:var(--tag-green-border)}
  .tag.blue{background:var(--tag-blue);color:var(--tag-blue-ink);border-color:var(--tag-blue-border)}
  .tag.rose{background:var(--tag-rose);color:var(--tag-rose-ink);border-color:var(--tag-rose-border)}
  .tag.earth{background:var(--tag-earth);color:var(--tag-earth-ink);border-color:var(--tag-earth-border)}
  /* Le feed Vault consomme désormais l’atome Tag. Son gabarit compact garde cependant
     ses dimensions historiques, afin que ce raccord ne déplace aucune ligne du journal. */
  .vcj-xtag.tag{height:20px;padding:0 8px;border-radius:6px;background:var(--surface);color:var(--ink-3);font-size:11px;font-weight:500;line-height:normal}
  .vcj-extra .vcj-xtag.tag{height:22px;padding:0 9px;border-radius:6px;font-size:12px;font-weight:600}
  .vcj-extra-tags .vcj-xtag.tag{background:var(--bg-2);color:var(--ink-2);border-color:var(--border-soft);font-weight:500}
  .vcj-extra .vcj-xtag.tag.cyan{background:var(--tag-cyan);color:var(--tag-cyan-ink);border-color:var(--tag-cyan-border)}
  .vcj-extra .vcj-xtag.tag.amber{background:var(--tag-amber);color:var(--tag-amber-ink);border-color:var(--tag-amber-border)}
  .vcj-extra .vcj-xtag.tag.green{background:var(--tag-green);color:var(--tag-green-ink);border-color:var(--tag-green-border)}
  .vcj-extra .vcj-xtag.tag.blue{background:var(--tag-blue);color:var(--tag-blue-ink);border-color:var(--tag-blue-border)}
  .vcj-extra .vcj-xtag.tag.rose{background:var(--tag-rose);color:var(--tag-rose-ink);border-color:var(--tag-rose-border)}
  .vcj-extra .vcj-xtag.tag.earth{background:var(--tag-earth);color:var(--tag-earth-ink);border-color:var(--tag-earth-border)}
  /* Deux hauteurs seulement (dev-548-etiquette-rayon-6) : 22 par défaut, 20 en compacte (`xs`) ;
     `lg` se lit comme le défaut. Rayon 6, graisse 500, jamais de capitales ni de minuscules forcées. */
  .tag.lg{height:22px;padding:0 8px;font-size:11px;border-radius:var(--radius-sm)}
  .tag.xs{height:20px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--radius-sm);font-family:var(--font-sans)}

  /* L'état en point et mot (dev-548-etat-point-mot-colore) : point de 8 px et mot de la couleur
     de l'état, sans fond. */
  .ui-status{--status-color:var(--ink-3);display:inline-flex;align-items:center;gap:6px;min-width:0;font-size:12px;font-weight:500;color:var(--status-color);white-space:nowrap}
  .ui-status[data-tone="accent"]{--status-color:var(--accent)}
  .ui-status[data-tone="good"]{--status-color:var(--good)}
  .ui-status[data-tone="warn"]{--status-color:var(--warn-ink,var(--warn))}
  .ui-status[data-tone="bad"]{--status-color:var(--bad)}
  .ui-status[data-tone="info"]{--status-color:var(--info-ink,var(--ink-2))}
  .ui-status__dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--status-color)}
  .ui-status__word{overflow:hidden;text-overflow:ellipsis}

  /* La puce (O2) : filtre à plusieurs choix ou valeur retirable. Pilule de 26 px ; retenue, la
     sélection commune et une coche ; le repère du clavier est le halo. */
  .ui-chip{display:inline-flex;align-items:center;gap:6px;height:26px;max-width:100%;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius-pill);background:var(--surface);color:var(--ink-2);font:inherit;font-size:12px;font-weight:500;white-space:nowrap;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .ui-chip:hover:not(:disabled):not(.is-static){background:var(--hover-bg);color:var(--ink)}
  .ui-chip[aria-pressed="true"]{border-color:transparent;background:var(--select-bg);color:var(--select-ink)}
  .ui-chip:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .ui-chip:disabled{opacity:.5;cursor:not-allowed}
  .ui-chip[data-link="true"][aria-pressed="true"]{border-color:var(--content-selected-border);background:var(--content-selected-bg);color:var(--ink)}
  .ui-chip[data-proof="none"]:not([aria-pressed="true"]){border-style:dashed;background:transparent;color:var(--ink-4)}
  .ui-chip > :first-child:not(.ui-chip__label){flex:0 0 auto}
  .ui-chip.is-static{cursor:default;padding-right:4px}
  .ui-chip__label{min-width:0;overflow:hidden;text-overflow:ellipsis}
  .ui-chip__count{font-variant-numeric:tabular-nums;color:var(--ink-3)}
  .ui-chip[aria-pressed="true"] .ui-chip__count{color:inherit}
  .ui-chip__remove{display:grid;place-items:center;width:18px;height:18px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--ink-3);cursor:pointer}
  .ui-chip__remove:hover{background:var(--hover-bg);color:var(--ink)}
  .ui-chip__remove:focus-visible{outline:0;box-shadow:var(--ring-focus)}

  /* DEV-550, surfaces communes. Carte de contenu : fond et filet du rôle, arrondi 10, marge 12 en
     liste dense et 16 en page ; survol et sélection viennent du rôle (data-edge-role), sans ombre. */
  .ui-card{display:block;min-width:0;padding:16px;border-radius:var(--radius-lg);background:var(--content-bg);color:inherit;text-align:left;font:inherit;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .ui-card[data-density="dense"]{padding:12px}
  .ui-card:has(>.ui-card__open:focus-visible){outline:0;border-color:var(--accent);box-shadow:var(--ring-focus)}
  .ui-card.selected{background:var(--content-selected-bg)}
  /* Encart : une note ou une aide dans une page, une seule recette. */
  .ui-note{display:flex;gap:8px;align-items:flex-start;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);color:var(--ink-2);font-size:13px;line-height:1.5}
  .ui-note__icon{display:inline-flex;flex:0 0 auto;margin-top:3px;color:var(--ink-3)}
  .ui-note__body{min-width:0}
  .ui-note__body > :first-child{margin-top:0}
  .ui-note__body > :last-child{margin-bottom:0}
  .ui-note__title{margin:0 0 2px;font-weight:500;color:var(--ink)}
  /* Squelette : immobile, dans la forme de ce qu'il annonce. */
  .ui-skeleton{display:block;max-width:100%;border-radius:var(--radius-sm);background:var(--bg-2)}
  .ui-skeleton[data-radius="md"]{border-radius:var(--radius-md)}
  .ui-skeleton[data-radius="pill"]{border-radius:var(--radius-pill)}
  /* Zone de dépôt : pointillé au repos, voile neutre et filet plus foncé pendant le glissement. */
  .ui-drop{display:grid;place-items:center;gap:8px;padding:20px;border:1px dashed var(--border-strong);border-radius:var(--radius-lg);color:var(--ink-3);font-size:13px;text-align:center;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .ui-drop[data-over="true"]{background:var(--hover-bg);border-color:var(--ink-4);color:var(--ink-2)}
  .ui-drop[aria-disabled="true"]{opacity:.5}

  /* DEV-550, fenêtres communes : Travail (1100 × 760), Lecture (l'écran moins 40 px), palette en
     haut de l'écran (640 px, sans pied). Un voile, une ombre, une animation d'ouverture. */
  .ui-window-scrim{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:24px;animation:ui-window-fondu 140ms var(--ease-out)}
  .ui-window-scrim[data-format="lecture"]{padding:40px}
  .ui-window{display:flex;flex-direction:column;width:min(1100px,92vw);height:min(760px,88vh);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-overlay);overflow:hidden;outline:0;animation:ui-window-entree 200ms var(--ease-out)}
  .ui-window[data-format="lecture"]{width:100%;height:100%}
  /* DEV-565 : taille mesurée commune aux consultations candidature, CV et lettre. */
  .ui-window-scrim[data-format="lecture"][data-size="measured"]{padding:48px}
  .ui-window[data-format="lecture"][data-size="measured"]{width:min(1260px,90vw);height:min(780px,86vh);max-width:100%;max-height:100%}
  .ui-window__head{display:flex;align-items:center;gap:12px;flex:0 0 auto;padding:12px 16px 12px 20px;border-bottom:1px solid var(--border);background:var(--window-head-bg)}
  /* DEV-572 : les fenêtres d'aperçu de document gardent leur en-tête d'origine (consigne Landry). */
  .fm-document-preview>.ui-window__head{background:var(--surface)}
  .ui-window__icon{display:grid;place-items:center;flex:0 0 auto;width:32px;height:32px;border-radius:var(--radius-md);background:var(--bg-2);color:var(--ink-2)}
  .ui-window__icon--logo{background:none}
  .ui-window__icon--logo>.logo{width:32px;height:32px}
  /* Aperçu d'un document : un bloc d'identité, logo puis l'entreprise et le titre du document. */
  .fm-document-preview .ui-window__icon--logo,.fm-document-preview .ui-window__icon--logo>.logo{width:36px;height:36px}
  .fm-document-preview-identity{display:flex;flex-direction:column;justify-content:center;gap:2px}
  .fm-document-preview-identity>.ui-window__title{font-size:16px;line-height:20px;font-weight:700;letter-spacing:-.01em}
  .fm-document-preview-identity>p{margin:0;overflow:hidden;font-size:12px;line-height:16px;font-weight:600;color:var(--ink-3);text-overflow:ellipsis;white-space:nowrap}
  .ui-window__titles{flex:1 1 auto;min-width:0}
  .ui-window__eyebrow{margin:0;font-size:11px;font-weight:500;color:var(--ink-3)}
  .ui-window__title{margin:0;overflow:hidden;font-size:16px;font-weight:600;color:var(--ink);text-overflow:ellipsis;white-space:nowrap}
  .ui-window__actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
  .ui-window__body{flex:1 1 auto;min-height:0;overflow:auto;padding:20px}
  .ui-window__foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:0 0 auto;padding:10px 16px;border-top:1px solid var(--border)}
  .ui-window__foot-start,.ui-window__foot-end{display:flex;align-items:center;gap:8px}
  .ui-palette-scrim{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:flex-start;justify-content:center;padding:12vh 24px 24px;animation:ui-window-fondu 140ms var(--ease-out)}
  .ui-palette{display:flex;flex-direction:column;width:min(640px,92vw);max-height:min(560px,76vh);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-overlay);overflow:hidden;outline:0;animation:ui-window-entree 200ms var(--ease-out)}
  /* Fenêtre de capture : la carte de saisie reçue est la surface, posée sur le voile (pas de boîte).
     Jamais rognée : la liste des mentions dépasse, et sur un écran bas c'est le voile qui défile (DEV-557). */
  .ui-capture-scrim{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:flex-start;justify-content:center;padding:12vh 24px 24px;overflow-y:auto;background:var(--scrim);animation:ui-window-fondu 140ms var(--ease-out)}
  .ui-capture{width:min(820px,92vw);outline:0;animation:ui-window-entree 200ms var(--ease-out)}
  .ui-capture-scrim[data-focus]{align-items:stretch;padding:0;overflow:hidden;background:color-mix(in srgb,var(--bg-2) 88%,var(--ink) 12%)}
  .ui-capture[data-focus]{width:100vw;height:100dvh}
  @keyframes ui-window-fondu{from{opacity:0}to{opacity:1}}
  @keyframes ui-window-entree{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:reduce){.ui-window-scrim,.ui-window,.ui-palette-scrim,.ui-palette,.ui-capture-scrim,.ui-capture{animation:none}}
  /* État vide : icône sur un rond de support, ce qui manque, le geste qui le remplit. */
  .ui-empty{display:grid;justify-items:center;gap:6px;padding:32px 24px;color:var(--ink-3);font-size:13px;text-align:center}
  .ui-empty[data-compact="true"]{gap:4px;padding:16px}
  .ui-empty__icon{display:grid;place-items:center;width:40px;height:40px;margin-bottom:4px;border-radius:var(--radius-pill);background:var(--bg-2);color:var(--ink-3)}
  .ui-empty[data-compact="true"] .ui-empty__icon{width:28px;height:28px}
  .ui-empty__title{margin:0;font-size:14px;font-weight:500;color:var(--ink)}
  .ui-empty__text{max-width:44ch;line-height:1.5}
  .ui-empty__text > p{margin:0}
  .ui-empty__action{margin-top:8px}

  /* ===== Identités compactes =====
     Surface neutre commune ; le repli d'organisation B1 reçoit une teinte
     vintage locale après les variantes neutres. */
  .logo{
    width:32px;height:32px;border-radius:6px;display:grid;place-items:center;
    font-weight:600;font-size:12px;letter-spacing:var(--tracking-tight);
    color:var(--ink-2);background:var(--bg-2);
    border:1px solid var(--border);flex:0 0 auto;
    font-variant-numeric:tabular-nums;
  }
  .logo.sm{width:24px;height:24px;font-size:11px;border-radius:6px}
  .logo.md{width:38px;height:38px;font-size:13px;border-radius:8px}
  .logo.lg{width:48px;height:48px;font-size:16px;border-radius:8px}
  .logo.xl{width:64px;height:64px;font-size:22px;border-radius:10px}
  /* Les avatars et les usages hors organisation restent neutres. */
  .logo.c1, .logo.c2, .logo.c3, .logo.c4, .logo.c5,
  .logo.c6, .logo.c7, .logo.c8, .logo.c9, .logo.c10{
    background:var(--bg-2);color:var(--ink-2);border:1px solid var(--border);
  }
  /* DEV-568 · Une seule règle pour toute tuile qui porte un logo. L'image arrive déjà mise
     au carré (lib/ui/logo-normalize.mjs) et remplit la tuile bord à bord : ni bordure ni
     fond qui dépasse en cadre clair. Un filet translucide posé par-dessus dessine le
     contour, discret sur une pastille colorée, suffisant sur un logo clair. */
  :is(.logo,.vc-carnet-logo).has-img{position:relative;background:var(--logo-plate);border-style:none;overflow:hidden;padding:0;box-shadow:none}
  :is(.logo,.vc-carnet-logo).has-img img{width:100%;height:100%;object-fit:cover;display:block}
  :is(.logo,.vc-carnet-logo).has-img::after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px var(--logo-ring);pointer-events:none}
  /* DEV-498 · B1 : une façade de bureaux, colorée comme une encre vintage.
     La couleur distingue les organisations sans prétendre reproduire leur marque. */
  :is(.logo,.vc-carnet-logo).organization-fallback{
    background:color-mix(in srgb,var(--organization-tint) 68%,var(--logo-plate));
    color:var(--organization-ink);border:1px solid var(--organization-border);
    box-shadow:none;
  }
  :is(.logo,.vc-carnet-logo).organization-fallback.c1{--organization-tint:var(--tag-cyan);--organization-ink:var(--tag-cyan-ink);--organization-border:var(--tag-cyan-border)}
  :is(.logo,.vc-carnet-logo).organization-fallback.c2{--organization-tint:var(--tag-amber);--organization-ink:var(--tag-amber-ink);--organization-border:var(--tag-amber-border)}
  :is(.logo,.vc-carnet-logo).organization-fallback.c3{--organization-tint:var(--tag-green);--organization-ink:var(--tag-green-ink);--organization-border:var(--tag-green-border)}
  :is(.logo,.vc-carnet-logo).organization-fallback.c4{--organization-tint:var(--tag-blue);--organization-ink:var(--tag-blue-ink);--organization-border:var(--tag-blue-border)}
  :is(.logo,.vc-carnet-logo).organization-fallback.c5{--organization-tint:var(--tag-rose);--organization-ink:var(--tag-rose-ink);--organization-border:var(--tag-rose-border)}
  :is(.logo,.vc-carnet-logo).organization-fallback.c6{--organization-tint:var(--tag-earth);--organization-ink:var(--tag-earth-ink);--organization-border:var(--tag-earth-border)}
  :is(.logo,.vc-carnet-logo).organization-fallback .organization-fallback-mark{width:70%;height:70%;display:block}

  /* ===== Fields ===== */
  /* LE champ (DEV-550, dev-548-champs-32-phrase) : intitulé en phrase de 12 px au-dessus, aide et
     erreur de 12 px dessous ; le champ suit la taille du bouton voisin, 26, 32 ou 36 (C6). */
  .field{display:flex;flex-direction:column;gap:6px;min-width:0}
  .field > :is(label,.field__label){display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--ink-2)}
  .field__hint{font-size:12px;color:var(--ink-3);line-height:1.45}
  .field__error{font-size:12px;color:var(--bad);line-height:1.45}
  .input{
    border:1px solid var(--input-rest-border);background:var(--surface);border-radius:var(--radius-md);
    height:32px;padding:0 11px;font:inherit;font-size:13px;color:var(--ink);width:100%;line-height:1.4;
    transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
  }
  .input:hover{border-color:var(--border-hover)}
  .input:focus,.input:focus-visible{border-color:var(--accent);outline:0;box-shadow:var(--ring-focus)}

  /* Les choix (DEV-550, pièce Choice) : interrupteur, case, radio. La marque est au bleu de
     référence (C2) ; le repère du clavier est le halo commun ; indisponible à moitié d'opacité. */
  .ui-switch{position:relative;flex:0 0 auto;width:38px;height:22px;padding:0;border:1px solid var(--choice-rest-border);border-radius:var(--radius-pill);background:var(--bg-2);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .ui-switch__knob{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--surface);box-shadow:var(--shadow-sm);transition:transform var(--dur-fast) var(--ease-out)}
  .ui-switch[aria-checked="true"]{border-color:transparent;background:var(--accent)}
  .ui-switch[aria-checked="true"] .ui-switch__knob{transform:translateX(16px)}
  .ui-switch:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .ui-switch:disabled{opacity:.5;cursor:not-allowed}
  .ui-choice{display:inline-flex;align-items:center;gap:8px;min-height:24px;font-size:13px;color:var(--ink-2);cursor:pointer}
  .ui-choice.is-disabled{opacity:.5;cursor:not-allowed}
  .ui-choice__input{position:absolute;width:1px;height:1px;margin:0;opacity:0;pointer-events:none}
  .ui-choice__box,.ui-choice__radio{display:grid;place-items:center;flex:0 0 auto;width:16px;height:16px;border:1px solid var(--choice-rest-border);background:var(--surface);color:var(--action-ink);transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .ui-choice__box{border-radius:var(--radius-sm)}
  .ui-choice__radio{border-radius:50%}
  .ui-choice:hover .ui-choice__input:not(:disabled) + :is(.ui-choice__box,.ui-choice__radio){border-color:var(--ink-3)}
  .ui-choice__input:checked + .ui-choice__box,.ui-choice__box[data-checked="true"]{border-color:transparent;background:var(--accent)}
  .ui-choice__input:checked + .ui-choice__radio{border:5px solid var(--accent)}
  .ui-choice__input:focus-visible + :is(.ui-choice__box,.ui-choice__radio){box-shadow:var(--ring-focus)}
  .ui-choice__label{min-width:0}

  /* La ligne de réglage (DEV-550) : une seule taille, 13 px ; titre en 600, description en encre
     de méta ; le contrôle à droite. Les lignes vivent dans une carte de section, filet entre elles. */
  .ui-setting-section{display:flex;flex-direction:column;gap:8px;min-width:0}
  .ui-setting-section__title{margin:0;font-size:13px;font-weight:600;color:var(--ink)}
  .ui-setting-section__description{margin:0;font-size:13px;color:var(--ink-3);line-height:1.5}
  .ui-setting-section__rows{display:flex;flex-direction:column;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
  .ui-setting-row{display:flex;align-items:center;gap:12px;padding:12px 16px;min-width:0;font-size:13px}
  .ui-setting-row + .ui-setting-row{border-top:1px solid var(--border-soft)}
  .ui-setting-row__icon{display:inline-flex;flex:0 0 auto;color:var(--ink-3)}
  .ui-setting-row__copy{display:flex;flex-direction:column;gap:2px;flex:1 1 auto;min-width:0}
  .ui-setting-row__title{font-weight:600;color:var(--ink)}
  .ui-setting-row__description{color:var(--ink-3);line-height:1.5}
  .ui-setting-row__control{display:flex;align-items:center;gap:8px;flex:0 0 auto}
  .ui-setting-row__control .settings-switch-state{font-weight:600;color:var(--ink-3)}
  .settings-charter-editor > .field{margin-top:16px}
  .memory-reinforce-zone .memory-reinforce-free .field > label{padding-right:30px}
  .cve-letter-form-field .cve-fdate{min-height:32px}
  /* Les Réglages tiennent en une seule taille de texte (C3) : intitulé, aide et erreur compris. */
  :is(.settings-dialog,.vpf-section-modal) .field > :is(label,.field__label),
  :is(.settings-dialog,.vpf-section-modal) :is(.field__hint,.field__error){font-size:13px}

  /* Le texte modifiable sur place (dev-550-edition-en-place) : texte au repos, voile au survol,
     champ de même taille en saisie, bord accent et halo. */
  .ui-inline-text{display:inline-block;max-width:100%;margin:-3px -6px;padding:3px 6px;border-radius:var(--radius-md);cursor:text;transition:background-color var(--dur-fast) var(--ease-out)}
  .ui-inline-text:hover{background:var(--hover-bg)}
  .ui-inline-text:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .ui-inline-text.is-empty{color:var(--ink-3)}
  .ui-inline-text__field{display:block;width:100%;margin:-4px -7px;padding:3px 6px;border:1px solid var(--accent);border-radius:var(--radius-md);background:var(--surface);font:inherit;color:inherit;letter-spacing:inherit;line-height:inherit;outline:0;box-shadow:var(--ring-focus);resize:vertical}
  .input.sm{height:26px;padding:0 9px;font-size:12px}
  .input.lg{height:36px;padding:0 12px}
  /* Les saisies : erreur et indisponible (règles restaurées, classes vivantes seulement). */
  :is(.edge[data-edge-role="input"],
  .ct-search,
  .vpf-overview-search,
  .cve-panel-search,
  .asst-input,
  .cve-profile-area,
  .memory-reinforce-free input,
  .memory-reinforce-free textarea,
  .vjob-add-row input,
  .vjob-kw-add-row input,
  .os-shell :is(input.input,textarea.input),
  .settings-dialog :is(input.input,textarea.input),
  .modal :is(input.input,textarea.input),
  input.cve-profile-input,
  textarea.cve-profile-input):is([aria-invalid="true"],:has(input[aria-invalid="true"],textarea[aria-invalid="true"])){border-color:var(--bad);outline-color:var(--bad)}
  :is(.edge[data-edge-role="input"],
  .ct-search,
  .vpf-overview-search,
  .cve-panel-search,
  .asst-input,
  .cve-profile-area,
  .memory-reinforce-free input,
  .memory-reinforce-free textarea,
  .vjob-add-row input,
  .vjob-kw-add-row input,
  .os-shell :is(input.input,textarea.input),
  .settings-dialog :is(input.input,textarea.input),
  .modal :is(input.input,textarea.input),
  input.cve-profile-input,
  textarea.cve-profile-input):is([readonly]){background:var(--support-bg);border-color:var(--support-border)}
  :is(.edge[data-edge-role="input"],
  .os-shell :is(input.input,textarea.input),
  .settings-dialog :is(input.input,textarea.input),
  .modal :is(input.input,textarea.input),
  input.cve-profile-input,
  textarea.cve-profile-input):is(:disabled,[aria-disabled="true"],:has(input:disabled,textarea:disabled)){opacity:.5;cursor:not-allowed}
  .input.porte{height:44px;padding:0 13px;font-size:14px}
  /* Un champ en erreur garde sa couleur, au repos comme au focus : bord rouge, halo rouge. */
  :is(.input,.edge[data-edge-role="input"])[aria-invalid="true"]{border-color:var(--bad)}
  :is(.input,.edge[data-edge-role="input"])[aria-invalid="true"]:is(:focus,:focus-visible,:focus-within){border-color:var(--bad);box-shadow:0 0 0 3px color-mix(in srgb,var(--bad) 22%,transparent)}
  /* Onglets d'étape du Studio : le repère du clavier commun. */
  .studio-step:focus-visible{outline:0;box-shadow:var(--ring-focus);border-radius:var(--radius-md)}
  textarea.input{height:auto;min-height:72px;padding:8px 11px;resize:vertical;line-height:1.5}
  .input::placeholder{color:var(--ink-3)}
  .input.url{font-family:var(--font-data);font-size:12px;color:var(--ink-2)}
  .input[readonly]{background:var(--bg-2)}

  /* ═══════════ LE contrat de la ligne d'option de menu (SIH-89) ═══════════
     Une ligne cliquable dans un menu, une liste de choix ou un popover. Cet objet existait en
     13 familles de classes vivantes, toutes de la même forme. Leur COULEUR était cohérente —
     la décision « la sélection ne porte jamais le fond du survol » (2026-07-27) était respectée
     partout. Ce qui divergeait, c'est le CONTRAT D'ÉTATS : le focus clavier n'était déclaré
     explicitement que par DEUX classes sur seize, la sélection par six, le désactivé par trois.

     Ce que ce contrat NE répare PAS : le focus était déjà visible pour un client au clavier, via
     le contour par défaut du navigateur (vérifié à la tabulation réelle). Ce qu'il apporte : cet
     anneau devient `--ring-focus`, celui du design system, identique partout et dans tous les
     navigateurs, au lieu d'un contour d'agent utilisateur qui varie et ignore le système.

     Un seul endroit décide désormais. La liste des familles est identique dans chacune des
     règles ci-dessous, et `scripts/check-menu-option-contract.mjs` refuse au pre-push qu'elle
     diverge, qu'un état manque, ou qu'une famille reprenne un état pour son compte. */
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item){
    display:flex;align-items:center;gap:9px;width:100%;text-align:left;
    border:0;border-radius:8px;padding:8px 9px;background:transparent;
    font:inherit;font-size:13px;font-weight:500;color:var(--ink-2);cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item) > svg{color:var(--ink-4);flex:0 0 auto}
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item):hover:not(:disabled){background:var(--hover-bg);color:var(--ink)}
  /* L'état qui manquait. Sans lui, parcourir un menu au clavier ne montre rien. */
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item):focus-visible{outline:0;box-shadow:var(--ring-focus)}
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).on,
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).active,
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).sel,
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item)[aria-selected="true"]{background:var(--select-bg);color:var(--select-ink);font-weight:600}
  /* L'icône d'une ligne choisie prend l'encre de la sélection, comme son libellé. */
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).on > svg,
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).active > svg,
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).sel > svg,
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item)[aria-selected="true"] > svg{color:currentColor}
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item):disabled{opacity:.5;cursor:not-allowed}
  /* Une action qui détruit se nomme, sans crier : l'encre change, jamais le fond au repos. */
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).danger{color:var(--bad)}
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).danger > svg{color:var(--bad)}
  :is(.menu-option,
    .nav-carnet-option,
    .vw-status-opt,
    .jc-il-item,
    .jc-menu-item).danger:hover:not(:disabled){background:color-mix(in srgb,var(--bad) 8%,transparent);color:var(--bad)}

  /* ═══════════ LE panneau de menu (DEV-550) ═══════════
     Tout menu passe par la primitive `app/_ui/modules/ui/molecules/Menu.jsx` : ce panneau, les
     lignes `.menu-option` du contrat ci-dessus, un intertitre et un séparateur. Arrondi des menus
     (10), ombre des surfaces flottantes, calque des menus, 8 px de marge latérale pour la pastille
     de défilement ; il s'ouvre en fondu de 140 ms, sans
     déplacement, et sa position est posée par la primitive (sous le déclencheur, retourné au
     besoin, borné à l'écran). Les écrans ne redessinent pas ce panneau : une classe d'écran ne
     règle que sa largeur. */
  .menu-surface{
    position:fixed;z-index:var(--z-menu);display:flex;flex-direction:column;gap:1px;
    width:max-content;min-width:168px;max-width:360px;overflow-y:auto;overscroll-behavior:contain;
    padding:4px 8px;border:1px solid var(--border-strong);border-radius:var(--radius-lg);
    background:var(--surface);box-shadow:var(--shadow-popover);color:var(--ink-2);
    animation:menu-fondu 140ms var(--ease-out) both;
  }
  @keyframes menu-fondu{from{opacity:0}to{opacity:1}}
  @media (prefers-reduced-motion:reduce){.menu-surface{animation:none}}
  .menu-surface > .menu-option{flex:0 0 auto}
  .menu-option__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* Une ligne titre + explication se lit en entier : la phrase revient à la ligne (DEV-557). */
  .menu-option__label > .asst-setmenu-tx,.menu-option__label > .vc-produce-txt{white-space:normal}
  .menu-option__hint{flex:0 0 auto;font-size:var(--type-data-size);font-weight:400;color:var(--ink-3)}
  .menu-option__check{display:inline-flex;flex:0 0 auto;margin-left:auto;color:currentColor}
  .menu-option__trailing{display:inline-flex;flex:0 0 auto;margin-left:auto;color:var(--ink-3)}
  /* Case d'une liste à cocher dans un menu : la coche est au bleu de référence (décision C2). */
  .menu-label{padding:8px 9px 4px;font-size:var(--type-data-size);font-weight:600;letter-spacing:.02em;color:var(--ink-3)}
  .menu-separator{height:1px;margin:4px 6px;background:var(--border)}

  /* Le déclencheur du sélecteur (pièce `Select`) : la matière d'un champ, la taille du bouton
     voisin (26, 32 ou 36), la valeur à gauche, le chevron à droite. */
  .select-trigger{
    appearance:none;display:inline-flex;align-items:center;gap:8px;width:100%;min-width:0;height:32px;
    padding:0 10px 0 11px;border:1px solid var(--border-strong);border-radius:var(--radius-md);
    background:var(--surface);color:var(--ink);font:inherit;font-size:13px;text-align:left;cursor:pointer;
    transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out);
  }
  .select-trigger.sm{height:26px;padding:0 8px 0 9px;gap:6px;font-size:12px}
  .select-trigger.lg{height:36px;padding:0 12px 0 13px}
  .select-trigger > svg{flex:0 0 auto;color:var(--ink-3)}
  .select-trigger__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .select-trigger.is-empty .select-trigger__value{color:var(--ink-3)}
  .select-trigger__chevron{display:inline-flex;flex:0 0 auto;margin-left:auto;color:var(--ink-3);transition:transform var(--dur-fast) var(--ease-out)}
  .select-trigger[aria-expanded="true"] .select-trigger__chevron{transform:rotate(180deg)}
  .select-trigger:hover:not(:disabled){border-color:color-mix(in srgb,var(--border-strong) 70%,var(--ink-3))}
  .select-trigger:focus-visible,.select-trigger[aria-expanded="true"]{outline:0;border-color:var(--accent);box-shadow:var(--ring-focus)}
  .select-trigger[aria-invalid="true"]{border-color:var(--bad)}
  .select-trigger:disabled{opacity:.5;cursor:not-allowed}

  /* ═══════════ LE menu vertical à un seul actif (DEV-537) ═══════════
     Une colonne de destinations dont une seule est affichée à côté : rubriques de la
     Bibliothèque professionnelle, sections des Réglages. Seul
     `app/_ui/modules/ui/molecules/SideMenu.jsx` produit ce balisage. Chaque ligne est une
     `.menu-option` : survol, focus clavier, sélection et désactivé viennent du contrat
     ci-dessus. Ici ne vit que la disposition du menu. */
  .side-menu{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}
  .side-menu__group{display:flex;flex-direction:column;gap:calc(var(--space-2) / 2);min-width:0}
  .side-menu__group + .side-menu__group{padding-top:var(--space-4);border-top:1px solid var(--border)}
  .side-menu__group-label{margin:0 var(--space-3) var(--space-2);font-size:var(--type-data-size);font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--ink-3)}
  .side-menu__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .side-menu__text{display:flex;flex-direction:column;flex:1 1 auto;min-width:0}
  .side-menu__description{font-weight:400;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .side-menu__item.on .side-menu__description{color:inherit;opacity:.8}
  /* L'icône suit l'encre de sa ligne quand elle est choisie, comme dans la barre d'onglets. */
  .side-menu__item.on > svg{color:currentColor}
  /* Une destination sans rien à montrer (rubrique sans résultat) s'estompe sans devenir illisible. */
  .side-menu__item[data-muted="true"]{color:var(--ink-4)}
  .side-menu__item[data-muted="true"] .count-badge{--count-badge-color:var(--ink-4);--count-badge-border:var(--border)}

  /* Le message de confirmation peut porter UNE action (« Déplacer », « Raconter dans le
     carnet »). Sa matière reste posée par `runtime.js` ; ici, sa disposition et son action. */
  #sihage-toast[data-action="true"]{display:flex;align-items:center;gap:var(--space-4);text-align:left}
  #sihage-toast[data-action="true"] > .text-link{flex:none;white-space:nowrap}
  /* Une erreur se lit le temps qu'il faut et se ferme par sa croix. */
  .sihage-toast-close{display:grid;place-items:center;flex:none;width:24px;height:24px;padding:0;border:0;border-radius:var(--radius-md);background:transparent;color:inherit;opacity:.8;cursor:pointer}
  .sihage-toast-close:hover{opacity:1;background:color-mix(in srgb,currentColor 14%,transparent)}
  .sihage-toast-close:focus-visible{outline:0;box-shadow:0 0 0 2px currentColor}

  /* Lien texte (atome `TextLink`) : un mot ou une courte action dans le fil d'une phrase ou d'un
     message. Il prend l'encre de la surface qui le porte ; son focus est un contour de cette encre. */
  .text-link{appearance:none;display:inline;padding:0;border:0;border-radius:var(--radius-xs);background:none;font:inherit;font-weight:500;color:inherit;
    text-decoration:underline;text-decoration-color:color-mix(in srgb,currentColor 45%,transparent);text-underline-offset:var(--space-2);cursor:pointer}
  .text-link:hover{text-decoration-color:currentColor}
  /* Ton danger, comme Btn : un lien qui supprime reste rouge dans sa phrase (dev-548-reglages-systeme). */
  .text-link.danger{color:var(--bad)}
  .text-link:focus-visible{outline:2px solid currentColor;outline-offset:var(--space-2);text-decoration-color:currentColor}

  /* ═══════════ LA barre d'onglets (SIH-84) ═══════════
     Une rangée de boutons dont EXACTEMENT UN est actif. Cet objet existait en 26 familles de
     classes ; quinze d'entre elles décrivaient la même piste encastrée à 1 px de padding et
     2 px de rayon près, l'actif marqué tantôt par un liseré intérieur, tantôt par `shadow-sm`,
     tantôt par `shadow-xs`, tantôt par `accent-soft`. Personne n'avait choisi ces écarts.
     Ici il n'en existe qu'une, en deux variantes arrêtées par Landry le 2026-08-03 :
     `piste` (un réglage LOCAL) et `souligne` (la navigation d'une PAGE).

     Seul `app/_ui/modules/ui/molecules/TabBar.jsx` produit ce balisage, et
     `scripts/check-tabbar-contract.mjs` refuse la naissance d'une 27e famille au pre-push.

     L'état actif se peint DEPUIS `aria-selected`, `aria-checked` ou `aria-current` : il n'y a
     pas de classe `.on` à tenir en accord avec l'attribut, donc pas de moyen de les
     désynchroniser (SIH-68). */
  .tabbar{
    display:inline-flex;align-items:center;gap:2px;flex:0 0 auto;
    background:var(--bg-2);border-radius:10px;padding:3px;
  }
  .tabbar-btn,.tabbar-aux-btn{
    appearance:none;border:0;background-color:transparent;font:inherit;text-align:inherit;
    display:inline-flex;align-items:center;gap:6px;white-space:nowrap;line-height:1.2;
    padding:7px 12px;border-radius:8px;
    font-size:13px;font-weight:500;color:var(--ink-3);cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),
               color var(--dur-fast) var(--ease-out),
               box-shadow var(--dur-fast) var(--ease-out);
  }
  .tabbar-btn > svg,.tabbar-aux-btn > svg{display:inline-flex;flex:0 0 auto;color:var(--ink-4)}
  :is(.tabbar-btn,.tabbar-aux-btn):hover:not([aria-selected="true"]):not([aria-checked="true"]):not([aria-current="page"]):not(:disabled){color:var(--ink)}
  :is(.tabbar-btn,.tabbar-aux-btn):disabled{opacity:.5;cursor:not-allowed}
  .tabbar-btn[aria-selected="true"],.tabbar-btn[aria-checked="true"],.tabbar-btn[aria-current="page"],
  .tabbar-aux-btn[aria-current="page"]{
    background-color:var(--surface);color:var(--ink);font-weight:600;box-shadow:var(--shadow-xs);
  }
  :is(.tabbar-btn[aria-selected="true"],.tabbar-btn[aria-checked="true"],.tabbar-btn[aria-current="page"],.tabbar-aux-btn[aria-current="page"]) > svg{color:var(--accent)}
  /* Le focus se déclare APRÈS le relief de l'onglet choisi : à poids égal, la règle écrite en
     dernier gagne, et l'anneau doit rester visible sur l'onglet choisi comme sur les autres. */
  :is(.tabbar-btn,.tabbar-aux-btn):focus-visible{outline:0;box-shadow:var(--ring-focus)}
  /* DEV-570 · La piste se fait oublier (décision Landry du 19 octobre 2026).
     - Le creux est le gris de l'app (--bg-muted) atténué : il garde la même famille de gris que
       le cartouche de lecture et se teinte encore légèrement selon son support.
     - L'onglet choisi est UN bouton qui glisse (`.tabbar-indicator`), peint exactement comme
       `.btn.secondaire` au repos, rapportée au creux : blanc adouci, filet affirmé.
     - Un trait fin sépare deux onglets libres et dit « ceci se choisit » ; il s'efface au
       contact du bouton choisi et du survol.
     - Graisse 500 pour l'actif (dev-550-onglet-actif-500) : le libellé ne change pas de largeur. */
  .tabbar[data-variant="piste"]{
    position:relative;isolation:isolate;gap:4px;padding:4px;border-radius:10px;
    /* Le gris de l'app (--bg-muted, celui du cartouche de lecture Match), atténué pour la piste.
       Il remplace le voile d'encre, qui tirait vers le champagne (retour Landry, DEV-570). */
    background:color-mix(in srgb,var(--bg-muted) 75%,transparent);
    box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--bg-muted) 60%,var(--border-strong));
  }
  /* DEV-573 · Largeur = contenu (option A validée par Landry) : une largeur non automatique
     empêche l'étirement dans une colonne flexible comme dans une cellule de grille, sans toucher
     l'alignement dans une rangée. Seule `fill` (tête de colonne, comme Match) l'étend.
     Spécificité nulle : un écran qui veut la pleine largeur la demande toujours. */
  :where(.tabbar[data-variant="piste"]:not([data-fill])){width:fit-content;max-width:100%}
  /* Encre posée (DEV-570) : un onglet dit « tu es ici », il ne parle pas comme un titre. Le
     bouton qui glisse porte seul la sélection ; libres entre --ink-3 et --ink-2 (contraste
     AA de 4,5 tenu sur le creux), choisi en --ink-2. */
  .tabbar[data-variant="piste"] .tabbar-btn{position:relative;padding:8px 14px;border-radius:6px;color:color-mix(in srgb,var(--ink-3) 70%,var(--ink-2));justify-content:center}
  .tabbar[data-variant="piste"] .tabbar-btn > svg{color:currentColor;opacity:.75}
  .tabbar[data-variant="piste"] .tabbar-btn + .tabbar-btn::before{
    content:"";position:absolute;left:-2.5px;top:30%;bottom:30%;width:1px;pointer-events:none;
    background:color-mix(in srgb,var(--ink) 16%,transparent);
    transition:opacity var(--dur-fast) var(--ease-out);
  }
  .tabbar[data-variant="piste"] .tabbar-btn:is([aria-selected="true"],[aria-checked="true"],[aria-current="page"],:hover:not(:disabled))::before,
  .tabbar[data-variant="piste"] .tabbar-btn:is([aria-selected="true"],[aria-checked="true"],[aria-current="page"],:hover:not(:disabled)) + .tabbar-btn::before{opacity:0}
  /* Quand les onglets portent un nombre, son trait suffit : les traits entre onglets
     disparaissent, sinon la piste se hachure et l'œil se perd (retour Landry, DEV-570). */
  .tabbar[data-variant="piste"]:has(.tabbar-count) .tabbar-btn + .tabbar-btn::before{content:none}
  .tabbar[data-variant="piste"] .tabbar-btn:hover:not([aria-selected="true"]):not([aria-checked="true"]):not([aria-current="page"]):not(:disabled){
    color:var(--ink-2);background-color:color-mix(in srgb,var(--ink) 5%,transparent)}
  .tabbar[data-variant="piste"] .tabbar-btn:is([aria-selected="true"],[aria-checked="true"],[aria-current="page"]){
    color:var(--ink-2);font-weight:500;background-color:transparent;box-shadow:none}
  .tabbar[data-variant="piste"] .tabbar-btn:is([aria-selected="true"],[aria-checked="true"],[aria-current="page"]) > svg{color:currentColor;opacity:1}
  .tabbar[data-variant="piste"] .tabbar-btn:focus-visible{box-shadow:var(--ring-focus)}
  /* Le bouton qui glisse. Tant qu'il n'est pas mesuré (premier rendu), l'onglet choisi se
     peint lui-même, pour qu'aucun instant ne montre une piste sans choix. */
  .tabbar[data-variant="piste"] .tabbar-indicator{
    z-index:-1;top:4px;bottom:4px;left:0;height:auto;box-sizing:border-box;
    /* Filet affirmé et blanc adouci (choix Landry du 19 octobre 2026) : dans le creux gris, le
       bouton garde le même rapport à son fond que « Réactiver ou modifier » sur sa carte, un blanc
       à peine plus clair que ce qui l'entoure et un filet nettement plus sombre. */
    border:1px solid color-mix(in srgb,var(--ink) 8%,var(--border-strong));border-radius:6px;
    background:color-mix(in srgb,var(--surface) 72%,transparent);box-shadow:0 1px 0 color-mix(in srgb,var(--ink) 6%,transparent);
  }
  .tabbar[data-variant="piste"] .tabbar-indicator[data-ready][data-glide]{
    /* Accélère puis freine en douceur : la courbe « hero » de l'app jetait 70 % du trajet dès la
       première image puis traînait, ce qui se sentait comme un à-coup (retour Landry). */
    transition:transform 260ms cubic-bezier(.4,0,.2,1),width 260ms cubic-bezier(.4,0,.2,1),scale var(--dur-fast) var(--ease-out);
  }
  .tabbar[data-variant="piste"]:has(.tabbar-btn:is([aria-selected="true"],[aria-checked="true"]):active) .tabbar-indicator{scale:.97}
  .tabbar[data-variant="piste"]:not(:has(.tabbar-indicator[data-ready])) .tabbar-btn:is([aria-selected="true"],[aria-checked="true"],[aria-current="page"]){
    background-color:color-mix(in srgb,var(--surface) 72%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--ink) 8%,var(--border-strong))}
  /* Le nombre fait partie du libellé : chiffre mono gris derrière un trait fin, plus marqué
     sur l'onglet choisi. Le compteur encadré (CountBadge) reste aux entrées du Vault. */
  .tabbar-count{
    display:inline-flex;align-items:center;padding-left:8px;
    border-left:1px solid color-mix(in srgb,var(--ink) 12%,transparent);
    font-family:var(--font-data);font-size:12px;font-weight:500;line-height:1;font-variant-numeric:tabular-nums;
    color:var(--ink-3);transition:color var(--dur-fast) var(--ease-out);
  }
  .tabbar-btn:is([aria-selected="true"],[aria-checked="true"],[aria-current="page"]) .tabbar-count{color:var(--ink-3);border-left-color:var(--border-strong)}
  /* SIH-181 : contrat partagé de toute pastille statistique. Le contour plus affirmé rend la
     quantité repérable ; la sélection, l'alerte et la couleur métier restent sur le parent. */
  .count-badge{
    display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
    min-width:20px;height:20px;padding:0 5px;
    border:1px solid var(--count-badge-border,var(--border-strong));
    border-radius:var(--radius-sm);background:var(--count-badge-bg,var(--surface-2));
    color:var(--count-badge-color,var(--ink-2));font-family:var(--font-data);
    font-size:11px;font-weight:500;line-height:1;font-variant-numeric:tabular-nums;
    white-space:nowrap
  }
  .count-badge__value{font-family:var(--font-data);font-weight:500;font-variant-numeric:tabular-nums}
  /* Un compteur peut porter une icône (pièces jointes, documents) : un écart la sépare du nombre. */
  .count-badge > svg{flex:0 0 auto;margin-right:3px}
  /* L'alerte se porte sur le parent (`data-alert`) : le compteur prend l'encre d'alerte, pas un fond plein. */
  [data-alert="true"] .count-badge{--count-badge-color:var(--bad);--count-badge-border:color-mix(in srgb,var(--bad) 45%,transparent);--count-badge-bg:color-mix(in srgb,var(--bad) 8%,var(--surface))}
  #support-trigger .count-badge{margin-left:auto}
  body[data-side="collapsed"] #support-trigger .count-badge{position:absolute;top:0;right:0;margin:0}
  /* Un avatar dans une puce reste sur la ligne de son libellé. */
  .ui-chip .jc-il-av{display:inline-grid;vertical-align:middle;margin-right:6px}
  /* Dans une ligne choisie, le compteur suit l'encre de la sélection. */
  .menu-option.on .count-badge,.side-menu__item.on .count-badge,.cdet-railitem.on .count-badge,
  .menu-option[aria-selected="true"] .count-badge{--count-badge-color:var(--select-ink);--count-badge-border:color-mix(in srgb,var(--select-ink) 30%,transparent);--count-badge-bg:transparent}
  .count-badge[data-has-label="true"]{height:22px;gap:.25em;padding:0 7px;font-family:inherit;font-weight:500}
  .count-badge__label{font-family:inherit;font-size:11px;font-weight:500;letter-spacing:var(--tracking-normal)}
  /* Une statistique intégrée à une phrase pointe vers son libellé : même atome, géométrie
     contextuelle. La pointe reste portée par le compteur, jamais redessinée par l'écran. */
  .count-badge[data-variant="attached"]{
    position:relative;min-width:20px;height:18px;padding:0 4px;
    background:var(--count-badge-bg,var(--surface))
  }
  .count-badge[data-variant="attached"]::after{
    content:"";position:absolute;top:50%;right:-3px;width:6px;height:6px;
    transform:translateY(-50%) rotate(45deg);
    border-top:1px solid var(--count-badge-border,var(--border-strong));
    border-right:1px solid var(--count-badge-border,var(--border-strong));
    background:var(--count-badge-bg,var(--surface))
  }
  /* DEV-537 : le chiffre clé. La valeur et ce qu'elle mesure sur une ligne, sa précision
     dessous. Il prend l'encre de la surface qui le porte, claire ou sombre : seul
     `app/_ui/modules/ui/atoms/KeyFigure.jsx` produit ce balisage. */
  .key-figure{appearance:none;display:flex;flex-direction:column;gap:var(--space-2);min-width:0;margin:0;padding:0;border:0;border-radius:var(--radius-sm);
    background:none;font:inherit;color:inherit;text-align:left}
  .key-figure__main{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 var(--space-2);font-size:var(--type-body-size);line-height:var(--type-card-line)}
  .key-figure__value{font-size:var(--type-section-size);line-height:var(--type-section-line);font-weight:600;letter-spacing:var(--tracking-tight);font-variant-numeric:tabular-nums}
  .key-figure__detail{font-size:var(--type-meta-size);line-height:var(--type-meta-line);color:color-mix(in srgb,currentColor 78%,transparent)}
  button.key-figure{cursor:pointer}
  button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).key-figure:hover .key-figure__unit{text-decoration:underline;text-underline-offset:var(--space-2)}
  button.key-figure:focus-visible{outline:2px solid color-mix(in srgb,currentColor 72%,transparent);outline-offset:var(--space-2)}
  .tabbar-hint{font-size:11px;font-weight:500;color:var(--ink-4)}
  /* Compacte : panneaux denses (réglages du CV, de la lettre, de l'affichage). */
  .tabbar[data-size="sm"]{border-radius:10px;padding:3px;gap:3px}
  .tabbar[data-size="sm"] .tabbar-btn{padding:6px 11px;font-size:12px;border-radius:6px}
  .tabbar[data-size="sm"] .tabbar-indicator{top:3px;bottom:3px;border-radius:6px}
  /* Pleine largeur : les onglets se partagent la ligne à parts égales. */
  .tabbar[data-fill]{display:flex;width:100%}
  .tabbar[data-fill] .tabbar-btn{flex:1 1 0;min-width:0;justify-content:center}
  /* Icônes seules : le libellé sort de la vue, jamais du DOM (lecteurs d'écran). */
  .tabbar[data-icons-only] .tabbar-btn{padding-left:9px;padding-right:9px}
  .tabbar[data-icons-only] .tabbar-lbl{display:none}
  .tabbar-auxiliary{display:flex;align-self:stretch;flex:0 0 auto}
  .tabbar-auxiliary > .jc-pop{display:flex}

  /* Variante soulignée : la navigation d'une page entière, posée sur un filet. */
  .tabbar[data-variant="souligne"]{
    display:flex;flex-wrap:wrap;align-items:stretch;gap:0 20px;
    background:transparent;border-radius:0;padding:0;
    border-bottom:1px solid var(--border);
  }
  .tabbar[data-variant="souligne"] :is(.tabbar-btn,.tabbar-aux-btn){
    position:relative;border-radius:0;padding:11px 0;font-size:13px;
    background-color:transparent;box-shadow:none;
  }
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-selected="true"],
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-checked="true"],
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-current="page"],
  .tabbar[data-variant="souligne"] .tabbar-aux-btn[aria-current="page"]{
    background-color:var(--tabbar-selected-bg,transparent);box-shadow:var(--tabbar-selected-shadow,none);color:var(--tabbar-selected-ink,var(--ink));font-weight:500;
  }
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-selected="true"]::after,
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-checked="true"]::after,
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-current="page"]::after,
  .tabbar[data-variant="souligne"] .tabbar-aux-btn[aria-current="page"]::after{
    content:"";position:absolute;left:0;right:0;bottom:-1px;height:var(--tabbar-indicator-height,2px);
    background:var(--tabbar-selected-ink,var(--accent-500));border-radius:2px 2px 0 0;
  }
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-selected="true"] > svg,
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-checked="true"] > svg,
  .tabbar[data-variant="souligne"] .tabbar-btn[aria-current="page"] > svg,
  .tabbar[data-variant="souligne"] .tabbar-aux-btn[aria-current="page"] > svg{color:var(--tabbar-selected-ink,var(--ink-3));background-color:var(--tabbar-selected-icon-bg,transparent)}
  .tabbar[data-variant="souligne"] .tabbar-btn:hover:not([aria-selected="true"]):not([aria-checked="true"]):not([aria-current="page"]):not(:disabled):not([aria-disabled="true"]){background-color:var(--tabbar-hover-bg,transparent)}

  /* La variante retire l'ombre, donc l'anneau commun : le focus clavier se dit par un contour. */
  .tabbar[data-variant="souligne"] :is(.tabbar-btn,.tabbar-aux-btn):focus-visible{outline:2px solid var(--accent);outline-offset:-3px}

  /* Option de mouvement, pas troisième variante : un seul trait suit l'actif. */
  .tabbar[data-indicator="glissant"]{position:relative}
  .tabbar[data-indicator="glissant"] :is(.tabbar-btn,.tabbar-aux-btn)::after{display:none}
  .tabbar-indicator{
    position:absolute;left:0;bottom:-1px;width:0;height:var(--border-width-selected);
    border:0;border-radius:var(--radius-pill);background:var(--accent);box-shadow:none;opacity:0;pointer-events:none;
  }
  .tabbar-indicator[data-ready]{opacity:1}
  /* DEV-573 : l'indicateur ne glisse qu'au geste ; posé sans mouvement à l'arrivée sur l'écran. */
  .tabbar-indicator[data-ready][data-glide]{
    transition:transform var(--dur-base) var(--ease-out),width var(--dur-base) var(--ease-out),opacity var(--dur-fast) var(--ease-out);
  }
  @media (prefers-reduced-motion:reduce){.tabbar-indicator[data-ready][data-glide],.tabbar[data-variant="piste"] .tabbar-indicator[data-ready][data-glide]{transition:none}}

  /* ── Ce que chaque écran ajoute à la barre : SA DISPOSITION, jamais son apparence.
     Toute regle ci-dessous qui toucherait a une couleur, un rayon ou une graisse serait le
     debut d'une 27e famille — c'est exactement ce que le rempart refuse. */
  /* Fiche de poste : bandeau collé sous l'en-tête de section, défilable à l'horizontale. */
  .tabbar.vjob-tabs{
    flex-wrap:nowrap;gap:0 18px;padding:0 12px;overflow-x:auto;scrollbar-width:none;
    background:var(--surface);position:sticky;top:var(--vault-local-nav-block-size);z-index:6;border-radius:10px 10px 0 0;
  }
  .tabbar.vjob-tabs::-webkit-scrollbar{display:none}
  /* Analyse de candidature : colle au titre de la rubrique. */
  .tabbar.analyse-tabs{margin-top:2px}
  /* Réalisations : la barre s'aligne sur la ligne de titre. */
  .tabbar.vw-viewtoggle{margin-top:2px}
  /* Sélecteur de date : respire dans le popover, et reste visible quand la liste défile. */
  .tabbar.win-dp-tabs{margin:2px 2px 8px}
  /* Volet d'édition (SIH-68) : bandeau pleine largeur en tête du volet, pas une pastille. */
  .tabbar.cve-side-menu{
    display:flex;flex:0 0 auto;flex-wrap:nowrap;overflow:hidden;
    padding:9px 8px;border-radius:0;border-bottom:1px solid var(--border);
    /* DEV-573 : bande bord à bord, sans arrondi : le contour translucide de la piste y dessinait
       un cadre mal ajusté en plus du filet du bas. Seul le filet du bas délimite la bande. */
    box-shadow:none;
  }
  /* Cinq entrées à loger sur UNE ligne dans un volet étroit : elles se serrent de 4 px chacune.
     Sans ce resserrement, la barre bascule en icônes seules alors qu'il reste 300 px de vide —
     l'invariant « toujours une ligne » (SIH-68) serait tenu, mais au prix des libellés. */
  .tabbar.cve-side-menu .tabbar-btn{padding-left:8px;padding-right:8px}

  /* ===== Kanban ===== */
  /* Kanban header (toolbar + focus banner stays fixed at the top of the middle column) */
  .kb-header{
    position:relative;background:var(--screen-plane);flex:0 0 auto;z-index:15;
  }

  /* Niveau 2 partagé : navigation locale sur le plan clair, outils séparés.
     Le niveau 1 (identité, action principale, Assistant) reste dans ScreenHeader. */
  .screen-context-bar{
    position:relative;z-index:10;display:flex;align-items:stretch;gap:var(--space-3);height:var(--screen-context-h);
    padding:0 calc(var(--space-5) + var(--space-2));background:var(--vault-local-nav-surface);
    border-bottom:1px solid var(--border);container-type:inline-size;container-name:screen-context
  }
  .screen-context-nav{display:flex;flex:1 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none}
  .screen-context-nav::-webkit-scrollbar{display:none}
  .kanban-board-switch{position:relative;display:inline-flex;align-self:stretch;min-width:max-content}
  .kanban-context-bar > .boards-popover{left:calc(var(--space-5) + var(--space-2))}
  .tabbar.screen-context-tabs{align-self:stretch;flex-wrap:nowrap;gap:var(--space-5);border-bottom:0}
  .screen-context-action{display:flex;flex:0 0 auto;align-items:center;margin-left:var(--space-4)}
  .screen-context-tools{display:flex;flex:0 0 auto;align-items:center;gap:var(--space-2);padding-left:var(--space-4)}
  .screen-context-tools::before{content:"";width:1px;height:18px;background:var(--border);margin-right:var(--space-2)}
  .kanban-context-bar .screen-context-action{gap:var(--space-3);padding-left:var(--space-4)}
  .kanban-context-bar .screen-context-action::before{content:"";width:1px;height:18px;background:var(--border);margin-right:var(--space-2)}
  .kanban-context-bar:has(.screen-context-action) .screen-context-tools{padding-left:var(--space-2)}
  .kanban-context-bar:has(.screen-context-action) .screen-context-tools::before{display:none}
  .screen-context-tool{white-space:nowrap}
  .screen-context-tools .gk-tool-wrap{align-self:stretch;align-items:center}
  @container screen-context (max-width:700px){
    .screen-context-tool.btn.sm:not(.icon-only){width:26px;padding:0;gap:0}
    .screen-tool-label{display:none}
  }

  /* Titre du board dans la navigation locale partagée. */

  /* Sélecteur des dossiers de recherche : une seule présentation du popover. */
  .boards-popover{
    position:absolute;top:calc(100% + 6px);left:0;transform:none;z-index:var(--z-popover);
    width:360px;max-width:calc(100vw - 100px);min-width:0;
    background:var(--surface);border:1px solid var(--border);border-radius:10px;
    padding:14px;display:flex;flex-direction:column;gap:4px;text-align:left;
    animation:search-dossier-popover-in 160ms var(--ease-out) both;
  }
  @keyframes search-dossier-popover-in{from{opacity:0}to{opacity:1}}
  .search-dossier-popover-title{padding:2px 0 10px;font-size:16px;font-weight:650;letter-spacing:var(--tracking-tight);color:var(--ink)}
  .boards-popover .bp-search{
    display:flex;align-items:center;gap:8px;padding:8px 10px;
    background:var(--bg-2);border:1px solid var(--border);border-radius:8px;
    font-size:13px;color:var(--ink-3);margin-bottom:6px;
  }
  .boards-popover .bp-search:focus-within{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
  .boards-popover .bp-search input{
    border:0;background:transparent;font:inherit;font-size:13px;
    color:var(--ink);flex:1;min-width:0;outline:none;
  }
  .boards-popover .bp-item{
    display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:8px;min-height:48px;
    width:100%;border:0;background:transparent;text-align:left;font:inherit;
    cursor:pointer;font-size:13px;color:var(--ink-2);
  }
  .boards-popover .bp-item:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .boards-popover .bp-item:hover{background:var(--hover-bg);color:var(--ink)}
  .boards-popover .bp-item.active{background:var(--select-bg);color:var(--select-ink);font-weight:500}
  .boards-popover .bp-item .ic{color:var(--ink-2);width:24px;height:24px;display:grid;place-items:center;flex:0 0 auto}
  .boards-popover .bp-item.active .ic{color:var(--select-ink)}
  .boards-popover .bp-item .nm{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .boards-popover .bp-item .nm strong{display:block;font-size:14px;font-weight:400;line-height:1.35;overflow-wrap:anywhere;white-space:normal}
  .boards-popover .bp-item.active .nm strong{font-weight:600}
  .boards-popover .bp-check{margin-left:auto;color:var(--accent);flex:0 0 auto}
  .boards-popover .bp-sub{
    margin-left:24px;display:flex;flex-direction:column;gap:1px;
    padding:1px 0 3px;border-left:1.5px solid var(--border);padding-left:10px;
  }
  .boards-popover .bp-sub .bp-item{padding:5px 8px;font-size:12px;color:var(--ink-3)}
  .boards-popover .bp-sub .bp-item.active{color:var(--select-ink);background:var(--select-bg)}
  .boards-popover .bp-divider{height:1px;background:var(--border);margin:6px 0}
  .boards-popover .bp-foot{
    display:flex;align-items:stretch;justify-content:space-between;flex-direction:column;gap:4px;padding:0;margin-top:0;
  }
  .boards-popover .bp-foot .add,
  .boards-popover .bp-foot .manage{
    display:flex;align-items:center;justify-content:flex-start;gap:12px;width:100%;min-height:48px;
    background:transparent;border:0;font:inherit;font-size:14px;color:var(--ink-2);font-weight:400;cursor:pointer;
    padding:8px 10px;border-radius:8px;
  }
  .boards-popover .bp-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) > svg{width:24px;height:18px;flex-shrink:0}
  .boards-popover .bp-foot .add:hover{background:var(--hover-bg)}
  .boards-popover .bp-foot .manage:hover{background:var(--hover-bg);color:var(--ink-2)}
  .kanban-context-bar .screen-context-nav{overflow:visible;align-items:center;gap:calc(var(--space-5) * 2)}
  /* L'indicateur partagé dépasse de 1px sous TabBar : réserver cette place dans
     la zone défilable pour conserver toute son épaisseur, comme dans le Vault. */
  .kanban-context-bar .kanban-board-switch{min-width:0;overflow-x:auto;scrollbar-width:none;padding-bottom:1px;margin-bottom:-1px}
  .kanban-context-bar .screen-context-tabs{flex-shrink:0}
  .search-dossier-switch{position:relative;flex:0 1 auto;min-width:0}
  .search-dossier-switch::after{content:"";position:absolute;right:calc(var(--space-5) * -1);top:50%;transform:translateY(-50%);width:1px;height:24px;background:var(--border-strong);pointer-events:none}
  .kanban-context-bar .search-dossier-trigger{appearance:none;display:inline-flex;align-items:center;font:inherit;line-height:1;color:var(--ink-2);cursor:pointer;width:100%;border-radius:var(--radius-md);justify-content:flex-start;height:40px;gap:var(--space-4);padding:0 var(--space-4);background:var(--bg-2);border:1.5px solid color-mix(in srgb,var(--ink-3) 20%,var(--border-strong));box-shadow:none;transition:background-color var(--dur-fast) var(--ease-out-soft),border-color var(--dur-fast) var(--ease-out-soft),box-shadow var(--dur-fast) var(--ease-out-soft)}
  .kanban-context-bar .search-dossier-trigger:hover{background:color-mix(in srgb,var(--ink-3) 14%,var(--bg-2));border-color:color-mix(in srgb,var(--ink-3) 40%,var(--border-strong))}
  .kanban-context-bar .search-dossier-trigger[aria-expanded="true"]{background:color-mix(in srgb,var(--ink-3) 18%,var(--bg-2));border-color:color-mix(in srgb,var(--ink-3) 60%,var(--border-strong))}
  .kanban-context-bar .search-dossier-trigger:focus-visible{outline:0;border-color:var(--accent);box-shadow:var(--ring-focus)}
  .search-dossier-label{display:inline-flex;align-items:center;gap:var(--space-3);flex-shrink:0;color:color-mix(in srgb,var(--ink-2) 40%,var(--ink-3));font-size:14px;font-weight:500;line-height:1.35}
  .search-dossier-label > svg{width:18px;height:18px;flex-shrink:0}
  .search-dossier-trigger .sec-head-c-lbl{flex:1;min-width:0;max-width:24ch;text-align:left;font-size:14px;font-weight:650;line-height:1.35;letter-spacing:normal;color:var(--ink-2)}
  .search-dossier-trigger > svg{width:14px;height:14px;flex-shrink:0;color:color-mix(in srgb,var(--ink-2) 40%,var(--ink-3))}
  @container screen-context (max-width:1100px){
    .kanban-context-bar .screen-context-tool.btn.sm{width:28px;padding:0;gap:0}
    .kanban-context-bar .screen-tool-label{display:none}
    .kanban-context-bar .screen-context-action{margin-left:0;padding-left:0}
  }
  @media(max-width:760px){
    .kanban-context-bar{display:grid;grid-template-columns:minmax(0,1fr) auto auto;height:auto;gap:0 var(--space-2);padding:var(--space-2) var(--space-3) 0}
    .kanban-context-bar .screen-context-nav{display:contents}
    .kanban-context-bar .search-dossier-switch{grid-column:1;grid-row:1}
    .kanban-context-bar .search-dossier-switch::after{display:none}
    .kanban-context-bar .screen-context-action{grid-column:2;grid-row:1}
    .kanban-context-bar .screen-context-tools{grid-column:3;grid-row:1;padding-left:0}
    .kanban-context-bar .screen-context-action::before,.kanban-context-bar .screen-context-tools::before{display:none}
    .kanban-context-bar .kanban-board-switch{grid-column:1/-1;grid-row:2;min-height:44px}
    .kanban-context-bar .screen-context-tabs{gap:var(--space-4)}
  }
  @media(max-width:480px){
    .kanban-context-bar .screen-context-tabs{gap:var(--space-3)}
    .kanban-context-bar .screen-context-tabs .tabbar-btn > svg{display:none}
  }
  /* Réglages des dossiers : la liste dans le format Décision */
  .bm-body{display:flex;flex-direction:column;gap:6px}
  .bm-row{
    display:flex;align-items:center;gap:10px;padding:10px 12px;
    background:var(--bg-2);border:1px solid var(--border);border-radius:8px;
  }
  .bm-row.active{background:var(--select-bg);border-color:transparent;color:var(--select-ink)}
  .bm-row .ic{color:var(--ink-3);width:18px;height:18px;display:grid;place-items:center;flex:0 0 auto}
  .bm-row.active .ic{color:var(--select-ink)}
  .bm-row .body{flex:1;min-width:0}
  .bm-row .body .nm{font-size:14px;font-weight:600;color:var(--ink);line-height:1.25}
  .bm-row .body .sub{font-size:12px;color:var(--ink-3);margin-top:1px;display:flex;align-items:center;gap:5px}
  .bm-row .actions{display:flex;gap:4px;opacity:.6}
  .bm-row:hover .actions{opacity:1}
  .bm-sub-list{margin:6px 0 6px 28px;padding-left:14px;border-left:1.5px solid var(--border);display:flex;flex-direction:column;gap:4px}
  .bm-sub-list .bm-row{padding:6px 10px;background:var(--surface)}
  .bm-sub-list .bm-row .body .nm{font-size:13px;font-weight:500}
  .bm-sub-list .bm-row.active{background:var(--select-bg);color:var(--select-ink)}

  /* SIH-115 : « Ajouter une carte » est un bouton DISCRET pleine largeur. Il naissait
     en pointilles, c'est-a-dire deja en train de repondre : le contrat des contours dit
     que la limite est la reponse au survol, jamais l'etat de repos. */

  /* dense kanban card */
.kc{
    /* DEV-494 : contenu interactif ; boîte existante conservée, sans halo. */
    border:1px solid var(--content-border);border-radius:var(--radius-lg);
    padding:12px;display:flex;flex-direction:column;gap:8px;
    cursor:pointer;
    transition:box-shadow var(--dur-fast) var(--ease-out),
               border-color var(--dur-fast) var(--ease-out);
    position:relative;
    background:var(--content-bg);
    box-shadow:none;
  }
  /* Selected card state — repère NEUTRE (les bandeaux/barres bleus sur les tuiles
     sont abandonnés : ne JAMAIS réintroduire de bord/inset accent sur une carte). */
  .kc.selected,.kc[aria-selected="true"],.kc[aria-pressed="true"],.kc.selected:hover,.kc[aria-selected="true"]:hover{
    border-color:var(--content-selected-border);
    background:var(--content-selected-bg);
    box-shadow:none;
  }
  .list-row.selected,.list-row[aria-selected="true"]{
    background:var(--select-bg);
    color:var(--select-ink);
  }
  .kc:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .kc:active{
    box-shadow:inset 0 1px 2px color-mix(in srgb,var(--ink) 12%,transparent);
    border-color:var(--border-strong);
  }
  .kc:focus-visible,.kc:has(>.kc-open:focus-visible){outline:0;box-shadow:var(--ring-focus);border-color:var(--accent)}
  /* .kc.priority : plus de bandeau bleu (abandonné). Carte normale, aucun repère accent. */

  /* ── Glisser-déposer (façon Trello) ── */
  .kc[draggable="true"]{cursor:grab}
  .kc[draggable="true"]:active{cursor:grabbing}
  .kc.dragging{opacity:.4;cursor:grabbing}
  @keyframes dropslot-in{from{opacity:0;transform:scaleY(.6)}to{opacity:1;transform:scaleY(1)}}

  /* ── Choix d'issue au dépôt en « Terminé » (options dans le format Décision) ── */
  .endpick-opts{display:flex;flex-direction:column;gap:2px;margin:0 -10px}
  .endpick-opt{display:flex;align-items:center;gap:11px;padding:11px 10px;border:0;border-radius:10px;background:transparent;
    cursor:pointer;text-align:left;color:var(--ink);transition:background var(--dur-fast) var(--ease-out)}
  .endpick-opt:hover{background:var(--hover-bg)}
  .endpick-label{font-size:14px;font-weight:500}
  .endpick-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;background:var(--ink-4)}
  .endpick-dot.good{background:var(--good)}
  .endpick-dot.warn{background:var(--warn)}
  .endpick-dot.bad{background:var(--bad)}
  .endpick-dot.accent{background:var(--accent)}
  .endpick-dot.info{background:var(--info)}

  .kc-head{display:flex;gap:8px;align-items:flex-start;min-width:0}
  .kc-head > .logo{margin-top:2px}
  .kc-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
  /* La commande occupe seulement la première ligne ; le poste utilise toute
     la largeur disponible sous le titre, sans collision avec les trois points. */
  .kc-co{display:block;min-width:0;padding-right:30px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:600;font-size:14px;line-height:1.4;color:var(--ink)}
  .kc-role{
    font-size:12px;color:var(--ink-2);line-height:1.45;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    overflow:hidden;overflow-wrap:anywhere;
  }
  .kc-loc{font-size:11px;color:var(--ink-3);line-height:1.35;display:flex;align-items:center;gap:4px;flex-wrap:wrap}
  .kc-loc .sep{color:var(--ink-5)}

  .kc-facts{position:relative;display:flex;min-width:0}
  .kc-head + :is(.kc-facts,.kc-score){margin-top:2px;padding-top:10px}
  .kc-facts-scroll{display:flex;flex-wrap:nowrap;gap:6px;min-width:0;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;padding:2px 0 5px;--fact-scroll-thumb:transparent;scrollbar-width:thin;scrollbar-color:var(--fact-scroll-thumb) transparent}
  .kc-facts-scroll:is(:hover,:focus-visible,[data-scrolling]){--fact-scroll-thumb:var(--border)}
  .kc-facts-scroll::-webkit-scrollbar{height:2px}
  .kc-facts-scroll::-webkit-scrollbar-track{margin-inline:12px}
  @supports selector(::-webkit-scrollbar){.kc-facts-scroll{scrollbar-width:auto;scrollbar-color:auto}}
  .kc-facts-scroll::-webkit-scrollbar-thumb{background:var(--fact-scroll-thumb);border:0;border-radius:3px}
  .kc-facts-scroll:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
  .kc-fact{display:inline-flex;flex:none}
  .kc-fact .tag{flex:none;padding:2px 6px;line-height:16px;font-weight:500}
  .kc-fact-contract .tag{font-weight:600}
  .kc .cve-info{cursor:default}
  .kc-facts .kc-fact.cve-info{position:static;margin:0;color:inherit}
  .kc-facts .cve-info-tip{top:auto;bottom:calc(100% + 8px);max-width:min(300px,100%);white-space:normal}
  .kc-facts .cve-info:focus-visible .tag{box-shadow:var(--ring-focus)}
  .tag.slate{background:var(--tag-slate);color:var(--tag-slate-ink);border-color:var(--tag-slate-border)}
  .kc:is(:hover,:focus-within) :is(.kc-facts,.kc-foot-documents) .tag.slate,
  .match-reading-head .kc-fact:is(:hover,:focus-within) .tag.slate,
  .match-reading-head .match-publication-tag:hover,
  .kc:is(:hover,:focus-within) .kc-foot .tag[class*="kc-foot-age-"]{background:color-mix(in srgb,var(--ink-3) 20%,var(--surface));color:var(--ink);border-color:color-mix(in srgb,var(--ink-3) 26%,var(--surface))}

  .kc-score{display:grid;grid-template-columns:54px minmax(0,1fr);align-items:center;gap:8px}
  .kc-score-label{font-size:11px;color:var(--ink-4);font-weight:500}

  .match-row{display:flex;align-items:center;gap:8px}
  .match-bar{flex:1;height:3px;background:var(--bg-2);border-radius:99px;overflow:hidden;border:1px solid var(--border)}
  .kc-score .match-bar{
    position:relative;height:2px;min-height:2px;max-height:2px;
    border:0;border-top:2px solid var(--slate-100);border-radius:0;overflow:visible;
  }
  .kc-score .match-bar i{
    position:absolute;inset-block-start:-2px;inset-inline-start:0;
    height:0;min-height:0;max-height:0;
    border:0;border-top:2px solid var(--slate-400);border-radius:0;background:transparent;
  }
  .match-bar i{display:block;height:100%;border-radius:99px;background:var(--ink)}
  .match-val{font-family:var(--font-data);font-size:11px;color:var(--ink);font-weight:500}
  .match-row.tone-good .match-val{color:var(--good)}
  .match-row.tone-warn .match-val{color:var(--warn)}
  .match-row.tone-bad .match-val{color:var(--bad)}
  .kc-score .match-row .match-val{color:var(--slate-500)}

  .ats{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--ink-3)}
  .ats-dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--ink-4);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ink) 10%,transparent)}
  .ats-dot.g{background:var(--good)}
  .ats-dot.w{background:var(--warn)}
  .ats-dot.b{background:var(--bad)}

  .kc-foot{display:flex;align-items:center;justify-content:space-between;min-height:30px;margin-top:2px;padding-top:9px;border-top:1px solid var(--border);gap:8px}
  .kc-foot .kc-foot-date.cve-info{display:inline-flex;align-items:center;gap:5px;flex:1 1 auto;min-width:0;margin:0;font-size:12px;font-weight:600;color:var(--ink-2);white-space:nowrap}
  .kc-foot-date svg{color:inherit;stroke-width:2.2;flex:0 0 auto}
  .kc-foot-date time{min-width:0;overflow:hidden;text-overflow:ellipsis}
  .kc-foot .kc-foot-status.cve-info{display:inline-flex;flex:0 0 auto;min-width:0;max-width:50%;margin:0 0 0 auto}
  .kc-foot .kc-foot-documents.cve-info{display:inline-flex;flex:0 0 auto;margin:0}
  .kc-foot .kc-foot-documents .cve-info-tip{left:auto;right:0;max-width:160px}
  /* Le pied de carte porte le Tag commun ; seule sa largeur se borne ici (DEV-560). */
  .kc-foot .tag{max-width:100%;overflow:hidden;text-overflow:ellipsis}
  .kc-foot .tag svg{flex:0 0 auto}
  .kc-foot .tag.accent{background:var(--tag-blue);color:var(--tag-blue-ink);border-color:var(--tag-blue-border)}
  /* Ancienneté : pastille neutre, seule l'horloge porte la progression vintage. */
  .kc-foot .tag[class*="kc-foot-age-"]{background:var(--tag-slate);color:var(--tag-slate-ink);border-color:var(--tag-slate-border)}
  .kc-foot .tag[class*="kc-foot-age-"] svg{stroke-width:2.5}
  .kc-foot-age-fresh svg{color:var(--good-quiet)}
  .kc-foot-age-watch svg{color:color-mix(in srgb,var(--good-quiet) 40%,var(--warn-quiet))}
  .kc-foot-age-warm svg{color:var(--warn-quiet)}
  .kc-foot-age-late svg{color:var(--tag-earth-ink)}
  .kc-foot-age-stale svg{color:var(--bad)}
  .kc-foot .cve-info:focus-visible{border-radius:6px;box-shadow:var(--ring-focus)}
  .kc-foot .cve-info-tip{top:auto;bottom:calc(100% + 8px);left:0;white-space:normal}
  .kc-foot-status .cve-info-tip{left:auto;right:0}

  /* stat-strip retirée (juin 2026, Landry) — CSS supprimée. Voir CLAUDE.md › Tableau. */

  /* ===== Overlay modal (detail + add) ===== */
  @keyframes slideUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
  .modal{
    background:var(--surface);border:1px solid var(--border);border-radius:16px;
    box-shadow:var(--shadow-overlay);overflow:hidden;
    width:min(1100px, 92vw);
    height:min(760px, 88vh);
    display:flex;flex-direction:column;
    animation:slideUp var(--dur-fast) var(--ease-out);
  }
  /* ===== Fiche candidature — coquille Workspace (juin 2026) ===== */
  /* Disposition en 2 colonnes (Landry juin 2026) : colonne de gauche (rail) sur TOUTE
     LA HAUTEUR, sans header ni footer ; colonne de droite dédiée = header (sysbar) +
     contenu + footer. Le `.cdet-shell2` passe en display:contents pour que rail et
     contenu deviennent des cellules de cette grille. */
  /* SIH-92 · le plan est porté par `.col`, UNE fois (SIH-82). Cette coquille ne pose donc ni
     retrait ni fond : le `padding:8px` recréait le retrait de l'ancien plateau et le
     `background` redoublait un plan déjà peint. Mesuré le 2026-08-03 : contours concentriques
     à [72,44] et [80,52] — exactement ceux retirés à `.contview`, `.cvedit`, `.ltedit`,
     `.goalsview` et `.vc-shell`. La fiche y avait échappé parce que son retrait venait d'un
     `padding` sur le PARENT et son cadre d'un PETIT-ENFANT : deux conditions que le rempart
     ne testait pas — c'est pourquoi il est élargi dans le même passage. */
  .cdet-workspace{flex:1;min-height:0;display:flex;overflow:hidden}
  .cdet-modal2{padding:0;display:grid;grid-template-columns:288px 1fr;grid-template-rows:auto 1fr auto;grid-template-areas:"rail header" "rail body" "rail footer";width:min(1100px,92vw);height:min(760px,88vh);border:0;border-radius:16px;overflow:hidden;background:var(--bg-surface)}
  /* Variante ENCASTRÉE : elle n'est plus une surface flottante, donc elle rend tout ce qui en
     fait une — le filet, le rayon ET le fond propre. `--bg-surface` peignait un plan BLANC là
     où le rail de la MÊME fiche peignait déjà `--screen-plane` : deux fonds pour un seul plan,
     couture mesurée à x=567 (canon PLAT, Landry 2026-08-02). `.cdet-modal2` garde son cadre —
     il sert encore de vraie modale (aperçu de document, synthèse, renfort mémoire). */
  /* Sous l’arrondi bleu, les couches de fond portent le même bleu, sans liseré clair. */
  .col:has(> .cdet-workspace){background:linear-gradient(var(--candidature-identity-bg),var(--candidature-identity-bg)) top left / var(--radius-xl) var(--radius-xl) no-repeat,var(--screen-plane)}
  .cdet-workspace .cdet-railnav{background:linear-gradient(var(--candidature-identity-bg),var(--candidature-identity-bg)) top left / 100% var(--radius-xl) no-repeat,var(--bg-app)}
  .cdet-workspace .cdet-railid{background:var(--candidature-identity-bg)}
  .cdet-modal2--workspace{width:100%;height:100%;max-width:none;max-height:none;border:0;border-radius:0;background:transparent;box-shadow:none;animation:none}
  .cdet-sysbar{grid-area:header}
  .cdet-sysbar-docs{display:flex;align-items:center;gap:6px;flex-shrink:0}
  .cdet-sysbar-docs .btn{white-space:nowrap}
  .cdet-sysbar-docs .btn svg{flex-shrink:0}
  .cdet-sysbar-l{display:flex;align-items:center;gap:9px;min-width:0;flex:1}
  .cdet-sysbar-r{display:flex;align-items:center;gap:4px;flex-shrink:0}
  .cdet-sysbar-sep{width:1px;height:18px;background:var(--border);flex:0 0 auto;font-size:0;color:transparent}
  .cdet-sysbar-meta{font-size:11px;color:var(--fg-3);font-family:var(--font-sans)}
  .cdet-shell2{display:contents}
  /* Écran « analyse en cours » · la couche qui porte le voile.
     Le voile est peint par `AiWorkingOverlay` en `position:absolute; inset:0` : il lui faut
     donc un bloc conteneur. Il s'appuyait sur `.cdet-shell2`, mais celui-ci est en
     `display:contents` : il n'a plus de boîte, son `position:relative` ne s'appliquait pas et
     le voile remontait jusqu'au bloc conteneur INITIAL. Il couvrait alors tout l'écran, mais
     il montait seulement à `z-index:30` : le rail applicatif `.side`, à `z-index:45`, restait
     devant lui. D'où l'arrière-plan bariolé relevé par Landry, plan grisé mais icônes,
     pastilles actives et avatar du rail restés à pleine intensité. Mesuré au banc
     (docs/preuves/SIH-253) : la barre du haut, elle, était déjà couverte, `.screen-chrome`
     n'ouvrant aucun contexte d'empilement. La couche donne au voile une boîte explicite, plein
     écran et au-dessus du chrome, pour que TOUT l'arrière-plan reçoive le même traitement. */
  .cdet-railnav{grid-area:rail;border-right:1px solid var(--border);background:var(--bg-app);display:flex;flex-direction:column;overflow:hidden;min-height:0}
  /* SIH-383 : bandeau bleu d'identité, informations et scores sur surface claire. */
  .cdet-railid{display:flex;flex-direction:column;gap:0;padding:0;background:var(--surface);border-bottom:1px solid var(--border);flex:0 0 auto;text-align:left}
  .cdet-railid-head{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-5) var(--space-4);background:var(--candidature-identity-bg);color:var(--brand-light)}
  .cdet-railid-head .logo{flex:0 0 40px;width:40px;height:40px;font-size:16px;border-radius:var(--radius-md);background:var(--brand-light);color:var(--candidature-identity-bg)}
  /* Un logo réel garde la plaque commune de tous les logos (DEV-568), pas le fond bleuté du rail. */
  .cdet-railid-head .logo.has-img{background:var(--logo-plate)}
  .cdet-railid-head .logo.organization-fallback{background:color-mix(in srgb,var(--organization-tint) 68%,var(--logo-plate));color:var(--organization-ink);border-color:var(--organization-border)}
  .cdet-railid-idblock{min-width:0;display:flex;flex-direction:column;justify-content:center}
  .cdet-railid-name{font-size:14px;font-weight:600;color:var(--brand-light);line-height:1.3;letter-spacing:var(--tracking-tight)}
  .cdet-railid-role{font-size:12px;color:var(--brand-light);line-height:1.5;margin-top:var(--space-2);text-wrap:pretty;overflow-wrap:anywhere}
  .cdet-railid-grid{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--candidature-details-bg)}
  .cdet-railid-grid > .cdet-railgrp-eb{margin:calc(-1 * var(--space-3)) calc(-1 * var(--space-4)) var(--space-2);padding:var(--space-3) var(--space-4);background:var(--candidature-details-heading-bg);color:var(--ink-2)}
  .cdet-railid-kv{display:flex;align-items:flex-start;gap:var(--space-3);min-width:0;max-width:100%}
  .cdet-railid-kv svg{flex:0 0 auto;margin-top:2px;color:var(--ink-3)}
  .cdet-railid-kv .k{display:none}
  .cdet-railid-kv .v{font-size:12px;font-weight:400;color:var(--ink);line-height:1.5;overflow-wrap:anywhere}
  .cdet-idstats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;border-top:1px solid color-mix(in srgb,var(--brand-light) 20%,transparent);padding:var(--space-3) var(--space-4);margin:0;background:var(--candidature-identity-bg)}
  .cdet-idstat{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2);text-align:center;padding:0 var(--space-2);min-width:0;min-height:36px}
  /* Bloc d'identité sombre : il ré-épingle les jetons que lit la pièce (DEV-548). */
  .cdet-idstat{--ink:var(--brand-light);--ink-2:var(--brand-light);--bg-2:color-mix(in srgb,var(--brand-light) 14%,transparent)}
  .cdet-idstat + .cdet-idstat{border-left:1px solid color-mix(in srgb,var(--brand-light) 20%,transparent)}
  .cdet-idstat .v{display:flex;align-items:center;gap:var(--space-2);font-family:var(--font-data);font-size:16px;font-weight:500;color:var(--brand-light);line-height:1.2;font-variant-numeric:tabular-nums}
  .cdet-idstat .l{font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--brand-light);line-height:1.3;white-space:nowrap}
  .cdet-idstat .v.tone-good{color:var(--score-on-blue-good)}
  .cdet-idstat .v.tone-warn{color:var(--score-on-blue-warn)}
  .cdet-idstat .v.tone-bad{color:var(--score-on-blue-bad)}
  .cdet-score-state{font-size:11px;line-height:1.4;color:var(--brand-light)}
  .cdet-railgrp{padding:14px}
  /* « Sections » = groupe du milieu : prend l'espace dispo et défile seul si besoin. */
  .cdet-railgrp:not(:last-child){flex:1 1 auto;min-height:0;overflow-y:auto}
  .cdet-railgrp + .cdet-railgrp{border-top:1px solid var(--border)}
  /* « Suivi » = dernier groupe : COMPACT et ÉPINGLÉ EN BAS du rail (collé au pied),
     bien SÉPARÉ du groupe « Sections » du dessus — deux éléments distincts (Landry). */
  .cdet-railnav .cdet-railgrp:last-child{flex:0 0 auto;padding:9px 14px 11px;background:var(--candidature-details-bg);border-top-color:var(--candidature-details-border)}
  .cdet-railnav .cdet-railgrp:last-child .cdet-railgrp-eb{margin:-9px -14px 7px;padding:var(--space-3) 14px;background:var(--candidature-details-heading-bg);color:var(--ink-2)}
  .cdet-railnav .cdet-railgrp:last-child .cdet-railitem{padding:7px 11px}
  .cdet-railgrp-eb{font-size:11px;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--fg-3);font-weight:600;margin-bottom:10px}
  .cdet-railitem{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 11px;border-radius:8px;cursor:pointer;font:inherit;font-size:13px;color:var(--fg-2);background:none;border:none;text-align:left;transition:background var(--dur-fast) var(--ease-out)}
  .cdet-railitem:hover{background:var(--hover-bg)}
  .cdet-railitem.on{background:var(--select-bg);color:var(--select-ink)}
  .cdet-railitem-l{display:flex;align-items:center;gap:9px;min-width:0}
  .cdet-railitem-l span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
  .cdet-railitem.on .cdet-railitem-l span{font-weight:600}
  .cdet-railitem-meta{
    min-width:20px;height:20px;padding:0 6px;display:inline-grid;place-items:center;
    border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--bg-muted);
    font-size:11px;font-weight:600;color:var(--fg-2);line-height:1;flex-shrink:0;font-family:var(--font-sans);
  }
  .cdet-railitem.on .cdet-railitem-meta{color:var(--select-ink);border-color:color-mix(in srgb,currentColor 22%,transparent);background:color-mix(in srgb,currentColor 12%,transparent)}
  .cdet-content2{grid-area:body;padding:12px 14px}
  /* Une seule source de marge autour du contenu : le `.cdet-panel` interne n'ajoute
     plus son propre padding (évite le double padding — Landry juin 2026). */
  .cdet-content2 > .cdet-panel{display:flex;flex-direction:column;gap:10px;padding:0}
  .cdet-foot2{grid-area:footer}
  .cdet-foot2-meta{display:flex;align-items:center;gap:18px}
  .cdet-foot2-acts{display:flex;align-items:center;gap:8px}
  .cdet-rail-graduate-wrap{margin-top:var(--space-3,8px);padding-top:var(--space-3,8px);border-top:1px solid var(--border)}
  .cdet-rail-graduate{width:100%}

  /* Detail header layout fixes — fond sombre type « document workspace » */

  /* Dark header — tags adapt to dark surface */

  /* Bandeau sombre : comme .screen-chrome, il ré-épingle les jetons que lisent les pièces au lieu de
     redessiner .btn (DEV-548). Le bouton et la croix partagés s'y adaptent seuls ; l'action pleine
     reprend la paire inversée (surface claire, texte encre). `.sur-encre` porte le même rôle pour
     tout autre bandeau peint en --sidebar-bg (création de candidature). */
  :is(.modal-head,.sur-encre){
    --ink:var(--sidebar-fg-strong);--ink-2:var(--sidebar-fg);--ink-3:var(--sidebar-fg-muted);--bg-2:var(--sidebar-hover);
    --action-bg:var(--sidebar-fg-strong);--action-ink:var(--sidebar-bg);--action-border:transparent;--action-bg-hover:var(--sidebar-fg);
  }

  /* ===== Détail candidature = coquille carnet (entreprise à droite) ===== */
  .cdet-head{align-items:center;padding:8px 14px;gap:10px}
  .cdet-head .cdet-head-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
  .cdet-head .breadcrumb{align-items:center;overflow:visible}
  .cdet-head .breadcrumb > svg{color:var(--sidebar-fg-muted);margin-right:1px}
  /* Sélecteur de colonne dans le fil d'Ariane de la fiche candidature */
  .cdet-stage-pick{position:relative;display:inline-flex}

  .cdet-stage-menu{--ink:var(--focus-popover-ink);--ink-2:var(--focus-popover-ink-2);--ink-3:var(--focus-popover-ink-3);--ink-4:var(--focus-popover-ink-4);--bg-2:var(--focus-popover-subtle);--border-strong:var(--focus-popover-border-strong);position:absolute;top:calc(100% + 6px);left:0;z-index:var(--z-menu);min-width:188px;background:var(--focus-popover-surface);border:1px solid var(--border-strong);border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;display:flex;flex-direction:column;gap:1px}
  /* Le menu est blanc : neutraliser les couleurs « surface sombre » héritées de .modal-head */
  .cdet-stage-menu .tag{background:var(--bg-2);color:var(--ink-2)}
  .cdet-stage-menu .tag.accent{background:var(--accent-soft);color:var(--accent-ink)}
  .cdet-stage-menu .tag.good{background:var(--success-50);color:var(--success-700)}
  .cdet-stage-menu .tag.warn{background:var(--warning-50);color:var(--warning-700)}
  .cdet-stage-menu .tag.bad{background:var(--danger-50);color:var(--danger-700)}
  .cdet-stage-menu .tag.info{background:var(--info-soft);color:var(--info-ink)}
  .cdet-head h2{margin:0;font-size:16px;font-weight:600;color:var(--sidebar-fg-strong)}
  .cdet-head h2 span{color:var(--sidebar-fg-muted)!important}

  .cdet-content{flex:1;min-height:0;overflow-y:auto}
  .cdet-rail{width:316px;flex:0 0 auto;border-left:1px solid var(--border);background:var(--surface);overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:14px}
  .cdet-rail>*{flex-shrink:0}
  @media (max-width:860px){.cdet-rail{display:none}}

  /* Panneaux */
  .cdet-panel{padding:0;display:flex;flex-direction:column;gap:12px}
  .cdet-hint{display:flex;align-items:flex-start;gap:6px;margin:0;font-size:12px;line-height:16px;color:var(--ink-4);text-wrap:pretty}
  .cdet-hint svg{flex-shrink:0;margin-top:1px;color:var(--accent)}
  .cdet-hint strong{color:var(--ink-2)}
  .cdet-checklist{display:flex;flex-direction:column;gap:7px}

  /* Detail overlay rails — fonds plus profonds que le centre */

  /* Rail sub-cards stay white for contrast against the subtle rail bg */

  /* Collapsed rails */

  /* Toggle button to collapse/expand left or right rail */

  /* Right-rail toggle defaults: chevron points right when expanded, left when collapsed */

  /* Block in either rail : eyebrow + optional sub + content */
  /* Sticky block : reste visible quand on scrolle dans le rail */

  /* Sticky eyebrow : reste visible quand on scrolle dans son block
     Top = hauteur approximative du Sections sticky block (≈260px).
     z-index 1 → passe SOUS le Sections block sticky (z-index 2) si chevauchement. */

  /* Section-nav items (Entreprise / Préparation / Analyse / Activité / Journal pro)
     Style segmented "tab" pattern — fond conteneur, item actif élevé sur surface blanche */

  /* Confidence card (synthèse en haut de l'analyse annonce) */

  /* Check item (dot + title + sub + optional tag) */
  .detail-check{
    background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);
    padding:12px;display:flex;gap:9px;align-items:flex-start;
  }
  .detail-check .ats-dot{margin-top:4px;flex-shrink:0}
  .detail-check-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
  .detail-check-title{font-size:13px;font-weight:600;color:var(--ink);line-height:1.25}
  .detail-check-sub{font-size:12px;color:var(--ink-3);line-height:1.35}
  .detail-check-tag{margin-top:3px}

  /* Mission card (left rail) */

  /* "+ générer plus" CTA in either rail */

  /* Right-rail Match ATS panel */

  /* Right-rail coach hint — encart neutre (l'accent tient au petit badge, pas au fond) */

  /* Center section content (Entreprise display) */
  .detail-section-card{border:1px solid var(--content-border);border-radius:var(--radius-lg);
    padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--content-bg);box-shadow:none;
  }
  .detail-section-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
  .detail-section-card-head strong{font-size:14px;font-weight:600;color:var(--ink);white-space:nowrap}
  .detail-section-card-head .meta{font-family:var(--font-sans);font-size:11px;color:var(--ink-3);font-weight:500}
  .detail-section-card-sub{font-size:13px;color:var(--ink-3);line-height:1.45}
  
  .detail-section-card-list{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--ink-2);line-height:1.45}
  .detail-contact-tile{display:flex;align-items:center;gap:10px}
  .detail-contact-tile .av{
    width:34px;height:34px;border-radius:8px;background:var(--bg-2);color:var(--ink-2);
    border:1px solid var(--border);display:grid;place-items:center;
    font-weight:600;font-size:12px;flex-shrink:0;
  }
  .detail-contact-tile .nm{font-size:13px;font-weight:600;color:var(--ink);line-height:1.25}
  .detail-contact-tile .role{font-size:12px;color:var(--ink-3);font-family:var(--font-sans);letter-spacing:var(--tracking-normal);line-height:1.3}
  .detail-contact-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3,8px);margin-top:var(--space-2,4px)}
  /* SIH-115 : plus de quatrieme geometrie ici. La barre dense demande la taille
     COMPACTE du role, pas des paddings inventes pour cet ecran. */   /* la taille vient du role */

  /* Picker « Lier un contact existant » (drawer) : ligne cliquable = avatar + identité + action. */
  .ct-link-row{display:flex;align-items:center;gap:11px;width:100%;text-align:left;padding:8px 10px;border:1px solid transparent;border-radius:10px;background:transparent;font:inherit;cursor:pointer;transition:background .15s var(--ease-out),border-color .15s var(--ease-out)}
  .ct-link-row:hover:not(:disabled){background:var(--hover-bg);border-color:var(--border)}
  .ct-link-row:disabled{cursor:default;opacity:.5}
  .ct-link-row .av{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;font-weight:600;font-size:12px;flex-shrink:0}
  .ct-link-txt{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
  .ct-link-txt .nm{font-size:13px;font-weight:600;color:var(--ink);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ct-link-txt .role{font-size:12px;color:var(--ink-3);font-family:var(--font-sans);letter-spacing:var(--tracking-normal);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ct-link-cta{flex-shrink:0;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:var(--ink-4);background:var(--bg-2)}
  .ct-link-row:hover:not(:disabled) .ct-link-cta{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}

  /* ===== Journal pro section ===== */
  .journal-composer{
    position:relative;background:var(--surface);border:1px solid var(--border-strong);border-radius:16px;
    padding:8px 10px 9px;display:flex;flex-direction:column;gap:0;
    transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out);
  }
  .journal-composer:focus-within{border-color:var(--accent);box-shadow:var(--ring-focus)}
  /* DEV-550 S3 : un fichier survolé donne un voile neutre et un filet plus foncé, jamais l'accent. */
  .journal-composer.is-file-dragging{background:var(--surface) linear-gradient(var(--hover-bg),var(--hover-bg));border-color:var(--ink-4);box-shadow:none}
  .journal-composer-dropcue{
    position:absolute;inset:8px;z-index:45;display:flex;align-items:center;justify-content:center;gap:8px;
    border:1px dashed var(--ink-4);border-radius:var(--radius-lg);background:var(--surface) linear-gradient(var(--hover-bg),var(--hover-bg));
    color:var(--ink-2);font-size:13px;font-weight:600;pointer-events:none;
  }
  .journal-composer-titlebar{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:0 2px 9px;margin:0 0 12px;border-bottom:1px solid var(--border-strong);
  }
  .journal-composer-titlemain{display:inline-flex;align-items:center;gap:7px;min-width:0;color:var(--ink)}
  .journal-composer-titlemain svg{flex-shrink:0;color:var(--ink-3)}
  .journal-composer-titlebar h3{
    margin:0;font-size:14px;line-height:1.25;font-weight:600;color:var(--ink);letter-spacing:var(--tracking-tight);
  }
  .journal-composer-titlebar > span:last-child{
    display:inline-flex;align-items:center;height:20px;padding:0 7px;border:1px solid var(--border);border-radius:8px;background:var(--bg-2);
    font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
    color:var(--ink-4);white-space:nowrap;
  }
  .journal-format-row{
    display:flex;align-items:center;justify-content:space-between;gap:10px;
    min-height:32px;padding:0 1px 5px;margin-bottom:6px;border-bottom:1px solid var(--border-strong);
  }
  .journal-format-tools{display:flex;align-items:center;gap:2px;min-width:0}
  .journal-format-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){
    width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;
    padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink);
    cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .journal-format-tools button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:26px}
  .journal-format-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover:not(:disabled){background:var(--bg-2);color:var(--ink)}
  .journal-format-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
  .journal-format-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) svg{color:currentColor}
  .journal-format-attach{color:var(--accent)!important}
  .journal-format-sep{width:1px;height:16px;background:var(--border-strong);margin:0 3px}
  .journal-composer-context{
    display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;
    min-width:0;font-size:12px;font-weight:500;color:var(--ink-2);
  }
  .journal-composer-context span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
  .journal-composer-context svg{color:var(--ink-3)}
  .journal-date-pop > .jc-pop-menu{top:calc(100% + 8px);bottom:auto}
  .journal-composer-foot{
    display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
    padding:6px 1px 0;border-top:0;
  }
  .journal-composer-left,.journal-composer-right{display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-width:0}
  .journal-piece-draft-list{
    display:flex;align-items:center;gap:6px;flex-wrap:wrap;
    padding-top:7px;margin-top:7px;border-top:1px dashed var(--border-strong);
  }
  /* SIH-115 : plus de « + » de 30 px propre a ce composeur. Il prend la taille du role. */
  .journal-composer .jc-pill{height:30px;padding:0 9px;border-color:var(--border-soft);border-radius:8px;font-size:12px;background:var(--surface)}
  /* Mention inline « @ » (façon Twitter) : liste ancrée SOUS la zone de texte, le focus reste dans
     le textarea (l'utilisateur ne quitte jamais sa frappe). */
  .jc-ta-wrap{position:relative}
  .jc-mention{position:absolute;left:0;top:calc(100% + 4px);z-index:40;width:min(360px,94%);background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;display:flex;flex-direction:column;gap:4px;animation:cveFade .14s var(--ease-out,ease)}
  /* Item que « Entrée » va choisir : surbrillance CANONIQUE d'un item actif de menu flottant
     (= .vc-pop-item.active, .boards-popover .bp-item.active…) : fond --accent-soft + texte
     --accent-ink. JAMAIS de bord/bandeau accent (règle DS, cf. regle-sobriete-visuelle). */
  .jc-il-item.active .nm{color:var(--accent-ink)}

  /* Interlocuteur de la note (« à qui on s'est adressé ») · rangée sous la zone de texte. */
  .jc-il-av{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-weight:600;font-size:11px;flex-shrink:0}
  .jc-il-av.sm{width:18px;height:18px;font-size:11px}

  .jc-il-list{max-height:230px;overflow-y:auto;display:flex;flex-direction:column;gap:1px}
  .jc-il-empty{padding:12px 10px;font-size:13px;color:var(--ink-4);text-align:center}
  /* Suggestion en cours de frappe : rangée resserrée. */
  .jc-il-item{padding:7px 9px}
  .jc-il-txt{display:flex;flex-direction:column;gap:1px;min-width:0}
  .jc-il-txt .nm{font-size:13px;font-weight:600;color:var(--ink);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .jc-il-txt .role{font-size:11px;color:var(--ink-3);font-family:var(--font-sans);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .jc-il-new{display:flex;align-items:center;gap:8px;width:100%;padding:9px;border:0;border-top:1px solid var(--border);border-radius:0 0 6px 6px;margin-top:1px;background:transparent;font:inherit;font-size:13px;font-weight:500;color:var(--accent);cursor:pointer;transition:background-color .13s var(--ease-out)}
  .jc-il-new:hover{background:var(--hover-bg)}
  /* Chip interlocuteur sur une entrée du fil. */

  .journal-thread{display:flex;flex-direction:column;gap:12px}
  .journal-thread-eyebrow{
    --journal-composer-separation:19.04px;
    position:relative;height:24px;margin-top:var(--journal-composer-separation);
    border:1px solid var(--border-strong);border-radius:var(--radius-sm);
    background:var(--bg-2);overflow:visible;
  }
  .journal-thread-tab{
    position:absolute;z-index:1;left:var(--space-4,12px);top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;
    gap:var(--space-2,4px);height:30px;padding:0 var(--space-3,8px);border:1px solid var(--border-strong);
    border-radius:var(--radius-md) var(--radius-md) var(--radius-sm) var(--radius-sm);background:var(--surface);
    font-family:var(--font-sans);font-size:11px;font-weight:600;
    color:var(--ink-2);letter-spacing:.02em;
  }
  .journal-thread-tab svg{color:var(--ink-3);flex-shrink:0}
  /* Journal : carte neutre, ton porté par un point coloré dans l'en-tête (pas de rail coloré sur le bord). */
  .journal-entry{
    position:relative;z-index:0;display:flex;gap:0;background:var(--content-bg);border:1px solid var(--content-border);
    border-radius:var(--radius-lg);overflow:visible;
  }
  .journal-entry:hover,.journal-entry:focus-within{z-index:20}
  .journal-entry-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;background:var(--ink-4)}
  .journal-entry-dot[data-tone="warn"]{background:var(--warning-500)}
  .journal-entry-dot[data-tone="bad"]{background:var(--danger-500)}
  .journal-entry-dot[data-tone="good"]{background:var(--success-500)}
  .journal-entry-dot[data-tone="info"]{background:var(--ink-4)}
  .journal-entry-body{position:relative;flex:1;padding:15px 17px;display:flex;flex-direction:column;gap:12px;min-width:0}
  .journal-entry-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
  .journal-entry-head .he-l{display:flex;align-items:center;gap:8px;min-width:0}
  .journal-entry-head strong{font-size:14px;font-weight:600;color:var(--ink)}
  .journal-entry-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;color:var(--ink-4)}
  .journal-entry-meta-date{font-family:var(--font-data);font-size:11px;font-weight:500;color:var(--ink-3);text-transform:uppercase;letter-spacing:var(--tracking-wide)}
  .journal-entry-note{margin:0;font-size:14px;line-height:1.55;color:var(--ink);font-weight:400;text-wrap:pretty}
  .journal-entry-body p{margin:0;font-size:13px;line-height:1.55;color:var(--ink-2)}
  .journal-entry-body p strong{font-weight:600;color:var(--ink)}
  .journal-entry-body p em{font-style:normal;font-family:var(--font-sans);font-size:12px;color:var(--ink-3);text-transform:uppercase;letter-spacing:var(--tracking-wide)}
  .journal-entry-tags{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:2px}
  .journal-entry-foot{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:auto}
  .jc-menu-item.danger .jc-menu-ic{color:var(--bad)}
  .journal-entry-edit{display:flex;flex-direction:column;gap:8px}
  .journal-entry-edit-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding-bottom:9px;border-bottom:1px solid var(--border)}
  .journal-entry-edit-toolbar > .jc-pop{min-width:0}
  .journal-entry-edit textarea{
    width:100%;min-height:112px;resize:vertical;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg-2);
    padding:11px 12px;font:inherit;font-size:14px;line-height:1.55;color:var(--ink);outline:0;
  }
  .journal-entry-edit textarea:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .journal-entry-edit-links{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
  .journal-entry-edit-control{
    display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 9px;border:1px solid var(--border-strong);
    border-radius:8px;background:var(--surface);color:var(--ink-2);font:inherit;font-size:12px;font-weight:500;cursor:pointer;
  }
  .journal-entry-edit-control:hover,.journal-entry-edit-control.on{background:var(--bg-2);color:var(--ink);border-color:var(--border-input-hover)}
  .journal-entry-edit-control:disabled{opacity:.5;cursor:not-allowed}
  .journal-entry-edit-assets{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:9px;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}
  .journal-entry-edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px}
  .journal-entry-pieces{
    flex:0 0 248px;display:flex;flex-direction:column;gap:10px;padding:14px 14px 50px;border-left:1px solid var(--border-strong);
    background:var(--surface-2);min-width:0;border-radius:0 10px 10px 0;
  }
  .journal-entry-pieces-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-3)}
  .journal-entry-pieces-head b{font:inherit;color:var(--ink-2)}
  .journal-entry-pieces-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .journal-piece{
    min-width:0;height:82px;padding:7px;border:1px solid var(--content-border);border-radius:10px;background:var(--content-bg);
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;font:inherit;font-size:11px;font-weight:600;
    color:var(--ink-3);cursor:pointer;overflow:hidden;text-align:center;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .journal-piece:not([data-edge-role="content"]){cursor:default}
  .journal-piece[data-edge-role="content"]:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);color:var(--ink)}
  .journal-piece img{width:100%;height:48px;object-fit:cover;border-radius:6px;background:var(--bg-2)}
  .journal-piece-icon{width:36px;height:36px;border-radius:8px;display:grid;place-items:center;background:var(--surface);border:1px solid var(--border);color:var(--ink-4)}
  .journal-piece.k-pdf .journal-piece-icon{background:color-mix(in srgb,var(--bad) 10%,var(--surface));color:var(--bad)}
  .journal-piece.k-link .journal-piece-icon{background:color-mix(in srgb,var(--accent) 10%,var(--surface));color:var(--accent)}
  .journal-piece span:last-child{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .journal-entry-pieces-more{font-size:11px;color:var(--ink-4)}
  @media (max-width: 900px){
    .journal-entry{flex-direction:column}
    .journal-entry-pieces{flex-basis:auto;border-left:0;border-top:1px solid var(--border)}
  }

  /* ===== Analyse de l'annonce — section centrale riche ===== */
  .analyse-verdict{
    display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:flex-start;
    background:var(--candidature-details-bg);border:1px solid var(--candidature-details-border);border-radius:10px;
    padding:14px 16px;position:relative;
  }
  /* Ton porté par la pastille d'icône uniquement ; score et barre en --ink (DS). */
  .analyse-verdict-icon{
    width:34px;height:34px;border-radius:8px;display:grid;place-items:center;flex-shrink:0;
    background:var(--warning-50);color:var(--warning-700);
  }
  .analyse-verdict-icon>.logo.organization-fallback{width:100%;height:100%;border-radius:inherit}
  .analyse-verdict.good .analyse-verdict-icon{background:var(--success-50);color:var(--success-700)}
  .analyse-verdict.bad .analyse-verdict-icon{background:var(--danger-50);color:var(--danger-700)}
  .analyse-verdict-body{min-width:0;display:flex;flex-direction:column;gap:4px}
  .analyse-verdict-eyebrow{
    font-family:var(--font-sans);font-size:11px;font-weight:600;
    color:var(--ink-2);text-transform:uppercase;letter-spacing:var(--tracking-caps);
  }
  .analyse-verdict-body h3{margin:0;font-size:16px;font-weight:600;line-height:1.25;letter-spacing:var(--tracking-tight);color:var(--ink)}
  .analyse-verdict-body p{margin:0;font-size:13px;line-height:1.45;color:var(--ink-2)}
  .analyse-verdict-body p strong{color:var(--ink);font-weight:600}
  /* Scores compacts dans le bandeau (alignement + fiabilité) — plus de gros chiffre */
  .analyse-verdict-scores{display:flex;gap:16px;flex-shrink:0;padding-top:2px}
  .avs{display:flex;flex-direction:column;gap:4px;min-width:62px}
  .avs .l{font-family:var(--font-sans);font-size:11px;font-weight:500;color:var(--ink-2);text-transform:uppercase;letter-spacing:.07em}
  .avs .n{font-family:var(--font-data);font-size:16px;font-weight:500;color:var(--ink);line-height:1;font-variant-numeric:tabular-nums}
  .avs .b{height:4px;border-radius:2px;background:var(--bg-2);overflow:hidden}
  .avs .b > i{display:block;height:100%;background:var(--ink);border-radius:2px}

  .analyse-tabpanel{display:flex;flex-direction:column;gap:10px}
  /* En-tête de résumé neutre (sections autres que le verdict) : pastille sobre */
  .analyse-verdict.neutral .analyse-verdict-icon{background:var(--bg-2);color:var(--ink-3)}
  /* Alignement + ATS — tableau comparatif permanent, sans bascule entre catégories */
  .cand-compare-table-wrap{overflow-x:auto}
  .cand-compare-table{table-layout:fixed}
  .cand-compare-table th,.cand-compare-table th+th{width:calc(100% / var(--compare-columns))}
  .cand-compare-table th{vertical-align:middle}
  .cand-compare-table th span{display:inline-flex;align-items:center;gap:var(--space-3,8px)}
  .cand-compare-table th svg{flex-shrink:0;color:var(--ink-4)}
  .cand-compare-table th i{display:inline-flex;align-items:center;justify-content:center;min-width:var(--space-4,20px);padding:1px var(--space-2,4px);border-radius:var(--radius-pill);background:var(--bg-muted);font-family:var(--font-sans);font-style:normal;color:var(--ink-3)}
  .cand-compare-table{border-radius:var(--radius-lg)}
  .cand-compare-table td{background:var(--content-bg)}
  .cand-compare-table .cdet-checklist{gap:var(--space-3,8px)}
  /* Dans une cellule déjà encadrée, une vérification devient un encart, sans filet. */
  .cand-compare-table .detail-check{padding:10px 12px;border:0;border-radius:var(--radius-md);background:var(--support-bg)}

  /* ===== L'offre en clair — décodeur (vues Tableau + Déroulant) ===== */
  .cdec-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block}
  .cdec-dot.g{background:var(--good)} .cdec-dot.w{background:var(--warn)} .cdec-dot.r{background:var(--bad)}
  /* tableau */
  .cdec-table{display:grid;grid-template-columns:minmax(150px,0.9fr) minmax(185px,1.25fr) minmax(185px,1.15fr);border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--content-bg)}
  .cdec-th{padding:8px 12px;background:var(--bg-2);font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:600;border-bottom:1px solid var(--border)}
  .cdec-th.bl,.cdec-tc.bl{border-left:1px solid var(--border)}
  .cdec-tc{padding:10px 12px;border-bottom:1px solid var(--border);font-size:13px;line-height:1.45}
  .cdec-tc.last{border-bottom:0}
  .cdec-tc.term{display:flex;flex-direction:column;gap:5px}
  .cdec-tc.term .tt{font-family:var(--font-sans);font-size:12px;color:var(--ink);font-weight:500;line-height:1.35}
  .cdec-tc.term .qq{font-family:var(--font-sans);font-size:11px;color:var(--ink-4);line-height:1.45}
  .cdec-tc.plain{color:var(--ink-2)}
  .cdec-tc.angle{display:flex;flex-direction:column;gap:6px}
  .cdec-tc.angle .lk{font-size:12px;color:var(--ink-3);line-height:1.4}
  .cdec-expect{margin-top:8px;padding-top:8px;border-top:1px dashed var(--border);font-size:12px;color:var(--ink-2);line-height:1.45}
  .cdec-expect > span{display:block;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin-bottom:3px}
  @media (max-width:480px){.cdec-table{grid-template-columns:1fr}.cdec-th{display:none}.cdec-tc.bl{border-left:0}}
  /* accordéon */
  .cdec-acc{display:flex;flex-direction:column;gap:6px}
  .cdec-accitem{border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);overflow:hidden;transition:border-color var(--ease-out) .18s}
  .cdec-accitem.open{border-color:var(--ink-4)}
  .cdec-accsum{width:100%;display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;border:none;background:transparent;font-family:inherit;text-align:left}
  .cdec-accsum:hover{background:var(--bg-2)}
  .cdec-accsum .term{font-family:var(--font-sans);font-size:12px;color:var(--ink);font-weight:500;flex:1;min-width:0}
  .cdec-accsum .chev{color:var(--ink-3);flex-shrink:0;display:inline-flex;transition:transform var(--ease-out) .2s}
  .cdec-accitem.open .cdec-accsum .chev{transform:rotate(180deg)}
  .cdec-accbody{padding:0 12px 12px 32px;display:flex;flex-direction:column;gap:8px}
  .cdec-accbody .plain{font-size:13px;color:var(--ink);line-height:1.5}
  .cdec-accbody .plain .e,.cdec-accbody .exp .e{display:block;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin-bottom:3px}
  .cdec-accbody .exp{font-size:13px;color:var(--ink);line-height:1.5}
  .cdec-prov{display:flex;gap:6px;align-items:flex-start;font-family:var(--font-sans);font-size:11px;color:var(--ink-4);line-height:1.45;background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px}
  .cdec-prov svg{flex-shrink:0;margin-top:1px}
  .cdec-prov em{font-style:normal;color:var(--ink-2)}
  .cdec-accbody .mine{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--ink-2);line-height:1.45;padding-top:8px;border-top:1px dashed var(--border)}
  .cdec-accbody .mine svg{color:var(--accent-500);flex-shrink:0;margin-top:1px}
  /* « À dire » — partagé par le tableau et le déroulant */
  .cdec-say{display:flex;gap:7px;align-items:flex-start;font-size:12px;color:var(--ink-2);line-height:1.45;background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px}
  .cdec-say svg{color:var(--ink-4);flex-shrink:0;margin-top:2px}
  .cdec-say b{font-weight:600;color:var(--ink-3)}
  .cdec-say em{font-style:italic;color:var(--ink)}

  /* ===== Décortiquer l'annonce — Le poste en vrai / Entre les lignes / Questions à poser ===== */
  .poste-lead{display:flex;gap:11px;align-items:flex-start;background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px}
  .poste-lead > svg{color:var(--ink-3);flex-shrink:0;margin-top:2px}
  .poste-lead .e{display:block;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);margin-bottom:3px}
  .poste-lead > div{font-size:14px;line-height:1.5;color:var(--ink);font-weight:500}
  .prio-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  @media (max-width:560px){.prio-grid{grid-template-columns:1fr}}
  .prio-col{display:flex;flex-direction:column;gap:6px}
  .prio-head{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-family:var(--font-sans)}
  .prio-it{font-size:13px;color:var(--ink-2);background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;line-height:1.35}
  .prio-it.must{color:var(--ink);font-weight:500}
  .lvl-card{display:flex;flex-direction:column;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);overflow:hidden}
  .lvl-row{display:flex;align-items:baseline;gap:12px;padding:9px 13px;background:var(--surface)}
  .lvl-row + .lvl-row{border-top:1px solid var(--border)}
  .lvl-row .l{flex:0 0 64px;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3)}
  .lvl-row .v{font-size:13px;color:var(--ink-2);line-height:1.4}
  .lvl-row .v.real{color:var(--ink);font-weight:500}
  .el-list{display:flex;flex-direction:column;gap:8px}
  .el-item{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;display:flex;flex-direction:column;gap:5px}
  .el-phrase{font-family:var(--font-sans);font-size:12px;color:var(--ink-3);line-height:1.4}
  .el-means{display:flex;gap:7px;align-items:flex-start;font-size:13px;color:var(--ink);line-height:1.45}
  .el-means > svg{color:var(--accent-500);flex-shrink:0;margin-top:2px}
  .ask-list{display:flex;flex-direction:column;gap:8px}
  .ask-item{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;display:flex;flex-direction:column;gap:6px}
  .ask-gap{font-size:12px;color:var(--ink-2);line-height:1.4}
  .ask-gap .lbl{display:block;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-4);margin-bottom:2px}
  .ask-q{display:flex;gap:7px;align-items:flex-start;font-size:13px;color:var(--ink);line-height:1.45;padding-top:7px;border-top:1px dashed var(--border)}
  .ask-q > svg{color:var(--accent-500);flex-shrink:0;margin-top:2px}
  .ask-q em{font-style:italic;font-weight:500}
  /* Questions probables — question + réponse (si connue) sinon invite à réfléchir */
  .qprep-list{display:flex;flex-direction:column;gap:8px}
  .qprep{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;display:flex;flex-direction:column;gap:7px}
  .qprep-q{display:flex;gap:7px;align-items:flex-start;font-size:13px;font-weight:600;color:var(--ink);line-height:1.4}
  .qprep-q > svg{color:var(--accent-500);flex-shrink:0;margin-top:2px}
  .qprep-a{font-size:13px;color:var(--ink-2);line-height:1.5;padding-top:7px;border-top:1px dashed var(--border)}
  .qprep-a .lbl{display:block;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-4);margin-bottom:3px}
  .qprep-think{display:flex;gap:7px;align-items:flex-start;font-size:12px;color:var(--ink-3);line-height:1.45;padding-top:7px;border-top:1px dashed var(--border)}
  .qprep-think > svg{color:var(--ink-4);flex-shrink:0;margin-top:2px}
  .qprep-think em{font-style:italic}
  /* Se présenter — guide + prompteur */
  .pitch-steps{display:flex;flex-direction:column;gap:9px}
  .pitch-step{display:flex;gap:11px;align-items:flex-start;background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px}
  .pitch-step-n{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:var(--bg-2);color:var(--ink-2);font-family:var(--font-sans);font-size:11px;font-weight:600;display:grid;place-items:center}
  .pitch-step-b{min-width:0}
  .pitch-step-l{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:3px}
  .pitch-step-c{font-size:13px;color:var(--ink-2);line-height:1.5}
  .pitch-tips{background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px}
  .pitch-tips-h{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-family:var(--font-sans);margin-bottom:7px}
  .pitch-tips-h svg{color:var(--accent-500)}
  .pitch-tips ul{margin:0;padding-left:17px;display:flex;flex-direction:column;gap:5px}
  .pitch-tips li{font-size:12px;color:var(--ink-2);line-height:1.45}
  .pitch-prompter{border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--content-bg)}
  .pitch-prompter-h{display:flex;align-items:center;gap:7px;padding:9px 15px;background:var(--bg-2);border-bottom:1px solid var(--border);font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:600}
  .pitch-prompter-h svg{color:var(--ink-4)}
  .pitch-prompter-body{padding:18px 20px;display:flex;flex-direction:column;gap:14px;max-width:64ch}
  .pitch-prompter-body p{margin:0;font-size:16px;line-height:1.75;color:var(--ink);text-wrap:pretty}
  /* Entreprise — Fiabilité + Qui recrute (ESN/intermédiaire) */
  .emp-health{display:flex;gap:11px;align-items:flex-start;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;background:var(--content-bg)}
  .emp-health > svg{flex-shrink:0;margin-top:1px}
  .emp-health.good > svg{color:var(--success-700)} .emp-health.warn > svg{color:var(--warning-700)} .emp-health.bad > svg{color:var(--danger-700)}
  .emp-health-l{font-size:13px;font-weight:600;color:var(--ink)}
  .emp-health-n{font-size:12px;color:var(--ink-2);line-height:1.45;margin-top:3px}
  .emp-who{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;background:var(--content-bg)}
  .emp-who-ic{flex-shrink:0;width:34px;height:34px;border-radius:8px;display:grid;place-items:center}
  .emp-who.good .emp-who-ic{background:var(--success-50);color:var(--success-700)}
  .emp-who.warn .emp-who-ic{background:var(--warning-50);color:var(--warning-700)}
  .emp-who.bad .emp-who-ic{background:var(--danger-50);color:var(--danger-700)}
  .emp-who-b{min-width:0}
  .emp-who-l{font-size:14px;font-weight:600;color:var(--ink)}
  .emp-who-chain{display:inline-flex;align-items:center;gap:6px;margin-top:5px;font-family:var(--font-sans);font-size:12px;color:var(--ink-2);background:var(--bg-2);border:1px solid var(--border);border-radius:99px;padding:3px 11px}
  .emp-who-chain svg{color:var(--ink-4)}
  .emp-who-chain strong{color:var(--ink);font-weight:600}
  .emp-who-line{font-size:13px;color:var(--ink-2);line-height:1.5;margin-top:6px}
  .emp-cvangle{background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px}
  .emp-cvangle-h{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-family:var(--font-sans);margin-bottom:5px}
  .emp-cvangle-h svg{color:var(--accent-500)}
  .emp-cvangle p{margin:0;font-size:13px;color:var(--ink);line-height:1.5}
  /* Alignement — présentation en tableau (mot-clé → état), comme l'ATS */
  
  /* Glossaire — 3e vue de L'offre en clair (option F) */
  .cdec-gloss{display:grid;grid-template-columns:auto 1fr;border:1px solid var(--border);border-radius:10px;overflow:hidden}
  .cdec-gl{display:contents}
  .cdec-gl-t{padding:8px 13px;font-family:var(--font-sans);font-size:12px;font-weight:500;color:var(--ink);white-space:nowrap;border-bottom:1px solid var(--border);background:var(--bg-2)}
  .cdec-gl-d{padding:8px 13px;font-size:13px;color:var(--ink-2);line-height:1.4;border-bottom:1px solid var(--border);border-left:1px solid var(--border)}
  .cdec-gl:last-child .cdec-gl-t,.cdec-gl:last-child .cdec-gl-d{border-bottom:0}
  .cdec-gl-d{display:flex;flex-direction:column;gap:6px}
  .cdec-gl-d .def{font-size:13px;color:var(--ink-2);line-height:1.4}
  .cdec-gl-d .simple{font-size:12px;color:var(--ink);line-height:1.45}
  .cdec-gl-d .simple .lbl{display:block;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-4);margin-bottom:2px}
  .cdec-gl-d .seen{display:flex;gap:6px;align-items:flex-start;font-size:12px;color:var(--success-700);line-height:1.4}
  .cdec-gl-d .seen svg{flex-shrink:0;margin-top:1px}
  /* Aération des onglets décortiqués (Landry : « ça ne respire pas ») */
  .cdet-airy{display:flex;flex-direction:column;gap:18px}
  .prep-stack-section{display:flex;flex-direction:column;gap:10px;padding-top:16px;border-top:1px solid var(--border)}
  .prep-stack-section > h4{display:flex;align-items:center;gap:7px;margin:0;font-size:12px;font-weight:600;color:var(--ink);letter-spacing:var(--tracking-normal)}
  .prep-stack-section > h4 svg{color:var(--ink-4);flex-shrink:0}
  .cdet-airy .el-list,.cdet-airy .ask-list,.cdet-airy .qprep-list,.cdet-airy .cdet-checklist{gap:10px}
  .cdet-airy .el-item,.cdet-airy .ask-item,.cdet-airy .qprep,.cdet-airy .detail-check{padding:16px}
  .cdet-airy .el-item{gap:7px}
  .cdet-airy .prio-grid{gap:12px}
  .cdet-airy .lvl-row{padding:11px 14px}

  /* ===== L'annonce conservée — texte original capté, gardé tel quel ===== */
  .annonce{background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden}
  .annonce-prov{
    display:flex;align-items:center;gap:7px;flex-wrap:wrap;
    padding:8px 13px;background:var(--bg-2);border-bottom:1px solid var(--border);
    font-family:var(--font-sans);font-size:11px;color:var(--ink-3);letter-spacing:.02em;
  }
  .annonce-prov .src{display:inline-flex;align-items:center;gap:5px;color:var(--ink-2);font-weight:600}
  .annonce-prov .src svg,.annonce-prov .keep svg{color:inherit}
  .annonce-prov .sep{color:var(--ink-4)}
  .annonce-prov .keep{margin-left:auto;display:inline-flex;align-items:center;gap:5px;color:var(--success-700)}
  /* Fiche clé/valeur — table compacte, lignes alternées */
  .annonce-fiche{display:grid;grid-template-columns:auto 1fr}
  .annonce-frow{display:contents}
  .annonce-frow .k{
    padding:7px 13px;font-family:var(--font-sans);font-size:11px;font-weight:500;
    text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);white-space:nowrap;
    border-bottom:1px solid var(--border);background:var(--surface);
  }
  .annonce-frow .v{
    padding:7px 13px;font-size:13px;color:var(--ink);line-height:1.35;
    border-bottom:1px solid var(--border);border-left:1px solid var(--border);
  }
  .annonce-frow:last-child .k,.annonce-frow:last-child .v{border-bottom:0}
  /* Texte intégral (replié par défaut, retrouvable) */
  .annonce-full{border-top:1px solid var(--border)}
  .annonce-full > summary{
    list-style:none;cursor:pointer;display:flex;align-items:center;gap:7px;
    padding:9px 13px;font-size:12px;font-weight:600;color:var(--ink-2);
  }
  .annonce-full > summary::-webkit-details-marker{display:none}
  .annonce-full > summary svg{color:var(--ink-4)}
  .annonce-full > summary .annonce-note{
    font-family:var(--font-sans);font-size:11px;font-weight:500;text-transform:uppercase;
    letter-spacing:.05em;color:var(--ink-4);
  }
  .annonce-full > summary .chev{margin-left:auto;display:inline-flex;color:var(--ink-4);transition:transform var(--ease-out,.2s ease)}
  .annonce-full[open] > summary .chev{transform:rotate(180deg)}
  .annonce-doc{padding:2px 15px 15px;display:flex;flex-direction:column;gap:0}
  .annonce-sec{padding:12px 0;border-top:1px solid var(--border)}
  .annonce-sec:first-child{border-top:0;padding-top:4px}
  .annonce-sec:last-child{padding-bottom:0}
  .annonce-sec h6{margin:0 0 7px;font-size:12px;font-weight:600;color:var(--ink)}
  .annonce-sec p{margin:0;font-size:13px;line-height:1.6;color:var(--ink-2);text-wrap:pretty;white-space:pre-line}
  .annonce-sec p+p{margin-top:8px}
  .annonce-table{width:100%;border-collapse:separate;border-spacing:0;border:1px solid var(--content-border);border-radius:var(--radius-md);overflow:hidden;background:var(--content-bg);font-size:13px;color:var(--ink-2)}
  .annonce-table th{width:34%;padding:7px 9px;text-align:left;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);background:var(--bg-2);border-bottom:1px solid var(--border)}
  .annonce-table th+th{width:auto;border-left:1px solid var(--border)}
  .annonce-table td{padding:8px 9px;vertical-align:top;border-top:1px solid var(--border);line-height:1.45}
  .annonce-table tbody tr:first-child td{border-top:0}
  .annonce-table td+td{border-left:1px solid var(--border);color:var(--ink)}
  .annonce-sec ul{margin:0;padding-left:17px;display:flex;flex-direction:column;gap:4px}
  .annonce-sec li{font-size:13px;line-height:1.45;color:var(--ink-2)}
  /* Annonce lue dans l'ordre de sa source : paragraphes et listes alternent sous un même titre.
     Une liste numérotée garde les numéros de son texte, en retrait suspendu comme une puce. */
  .annonce-sec p+ul,.annonce-sec ul+p,.annonce-sec ul+ul{margin-top:8px}
  .annonce-sec ul[data-numbered]{list-style:none;text-indent:-17px}
  /* Titre que la source pose seul au-dessus d'un sous-titre : il se lit avec la rubrique qui le suit, sans filet entre eux. */
  .annonce-sec:has(>h6:only-child):not(:last-child){padding-bottom:0;border-bottom:0}
  .annonce-sec:has(>h6:only-child)+.annonce-sec{padding-top:0;border-top:0}
  .annonce-srcline{
    display:flex;align-items:center;gap:6px;padding-top:8px;border-top:1px dashed var(--border);
    font-family:var(--font-sans);font-size:11px;color:var(--ink-4);word-break:break-all;
  }
  .annonce-srcline svg{flex-shrink:0}
  .annonce-extlink{appearance:none;border:0;background:transparent;padding:0;margin:0;font:inherit;color:var(--accent-600);text-decoration:none;border-bottom:1px solid color-mix(in oklab,var(--accent-600) 35%,transparent);cursor:pointer}
  .annonce-extlink:hover{color:var(--accent-700);border-bottom-color:var(--accent-600)}
  /* État vide — annonce pas encore captée */
  .annonce-loading{display:flex;align-items:center;gap:13px;padding:14px 15px;font-size:13px;color:var(--ink-3)}
  .annonce-loading > svg{color:var(--ink-4);flex-shrink:0}

  /* KPI strip */

  /* Sections */

  /* Checks grid */
  
  /* ton via la pastille d'icône, pas de bord gauche coloré (abandonné) */

  /* Salary benchmark */

  /* Questions à poser */

  @media (max-width:980px){
    .analyse-verdict{grid-template-columns:auto 1fr}
    .analyse-verdict-scores{grid-column:1 / -1;padding-top:6px}
  }

  /* gauge */
  .gauge{position:relative;width:140px;height:140px;flex:0 0 140px}
  .gauge svg{width:100%;height:100%;transform:rotate(-90deg)}
  .gauge .lbl{position:absolute;inset:0;display:grid;place-items:center;text-align:center}
  .gauge .lbl .v{font-size:30px;line-height:1;font-weight:600;letter-spacing:-.02em}
  .gauge .lbl .t{font-size:11px;color:var(--ink-3);margin-top:2px;font-family:var(--font-sans);text-transform:uppercase}
  .gauge.sm{width:90px;height:90px;flex:0 0 90px}
  .gauge.sm .lbl .v{font-size:22px}

  /* keyword chips */
  .kw{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;font-size:11px;border-radius:6px;font-weight:500}
  .kw.ok{background:var(--good-soft);color:var(--good-ink)}
  .kw.ko{background:var(--bad-soft);color:var(--bad-ink)}
  .kw.tilde{background:var(--warn-soft);color:var(--warn-ink)}

  /* generic cards / sections */
  /* Canon : une carte est une TUILE — blanche, filetée, un souffle d'ombre. */
  .card{border:1px solid var(--content-border);border-radius:8px;background:var(--content-bg);box-shadow:none;}
  .card.muted{background:var(--surface-2);box-shadow:none}
  /* Mise en avant calme (KPI, lignes de funnel…) : surbrillance, pas aplat. */
  .card.hi{background:var(--info-soft);border-color:var(--accent-soft)}
  .card.accent{border-color:var(--accent-soft-2);background:var(--accent-soft)}
  .pad{padding:14px}
  .pad-lg{padding:18px}
  .stack{display:flex;flex-direction:column;gap:10px}
  .row{display:flex;gap:10px;align-items:center}
  .row-wrap{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
  .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  @media (max-width:760px){.grid-2{grid-template-columns:1fr}}

  /* progress */

  /* funnel */
  .funnel{display:flex;flex-direction:column;gap:7px}
  .funnel .step{
    display:grid;grid-template-columns:160px 1fr 70px;align-items:center;gap:14px;
    padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:8px;
  }
  .funnel .step .lbl{font-size:14px;font-weight:500;color:var(--ink-2)}
  .funnel .step .bar{height:8px;background:var(--surface-2);border-radius:99px;overflow:hidden;border:1px solid transparent}
  .funnel .step .bar i{display:block;height:100%;background:var(--accent);border-radius:99px}
  .funnel .step .n{font-family:var(--font-data);font-size:13px;text-align:right;color:var(--ink);font-weight:500}
  .funnel .step.hi{background:var(--info-soft);border-color:var(--accent-soft)}
  .funnel .step.hi .lbl{color:var(--accent-ink);font-weight:600}

  /* heatmap — 5 nuances de slate */
  .heatmap{display:grid;grid-template-columns:repeat(52,1fr);gap:3px}
  .heatmap i{aspect-ratio:1;border-radius:3px;background:var(--bg-2);border:1px solid transparent}
  .heatmap i.l1{background:color-mix(in srgb,var(--accent) 14%,var(--surface));border-color:color-mix(in srgb,var(--accent) 18%,var(--surface))}
  .heatmap i.l2{background:color-mix(in srgb,var(--accent) 28%,var(--surface));border-color:color-mix(in srgb,var(--accent) 34%,var(--surface))}
  .heatmap i.l3{background:color-mix(in srgb,var(--accent) 50%,var(--surface));border-color:color-mix(in srgb,var(--accent) 58%,var(--surface))}
  .heatmap i.l4{background:color-mix(in srgb,var(--accent) 76%,var(--ink));border-color:color-mix(in srgb,var(--accent) 86%,var(--ink))}
  .heatmap i.l5{background:var(--accent-2);border-color:var(--accent-ink)}

  /* career timeline — segments en sémantiques sobres */
  /* =====================================================================
     Carrière — adaptateur Atelier.
     La frise conserve son vocabulaire historique --w-* pour ne pas déplacer
     le composant, mais chaque valeur est reliée au système global.
     ===================================================================== */
  .cr-warm{
    --w-paper:var(--surface); --w-paper-2:var(--surface-2); --w-paper-3:var(--bg-2);
    --w-border:var(--border); --w-border-2:var(--border-strong);
    --w-ink:var(--ink); --w-ink-2:var(--ink-2); --w-ink-3:var(--ink-3);
    --w-coral:var(--accent); --w-coral-2:var(--accent-2); --w-coral-soft:var(--accent-soft);
    --w-edu:var(--warn);     --w-edu-soft:var(--warn-soft);
    --w-work:var(--accent);  --w-work-soft:var(--accent-soft);
    --w-senior:var(--good);  --w-senior-soft:var(--good-soft);
    --w-search:var(--info);  --w-search-soft:var(--info-soft);
    --w-bad:var(--bad);      --w-bad-soft:var(--bad-soft);
    --w-serif:var(--font-sans)}
  .view.cr-warm{
    padding-top:0;
    background:var(--bg);
    color:var(--w-ink)}
  .cr-warm > .kb-header{margin-inline:calc(-1 * var(--space-4))}

  /* Barre ZOOM legacy (non utilisée dans la barre fusionnée) */

  /* Carte graphique : on retire toute la chrome de design system + remplit la hauteur */
  .view.cr-warm > .cr-stage{flex:1 1 auto;min-height:0;padding-top:18px}
  .cr-stage{display:flex;flex-direction:column}
  .cr-warm .cr-chartcard.card{background:transparent;border:0;box-shadow:none;padding:0;flex:1 1 auto;min-height:280px;display:flex;flex-direction:column}
  /* Frise : couloirs qui grandissent pour occuper la carte */
  .cr-warm .cr-gantt{flex:1 1 auto;min-height:0;max-height:660px;display:flex;flex-direction:column}
  /* Ruban temps navigable : le conteneur défile en X, le ruban interne s'élargit
     avec le zoom ; le coin + les en-têtes de couloirs restent COLLANTS à gauche. */
  .cr-warm .cr-gantt.cr-hscroll{display:block;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth}
  @media (pointer:fine){
    .cr-warm .cr-gantt.cr-hscroll::-webkit-scrollbar{height:10px}
    .cr-warm .cr-gantt.cr-hscroll::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px;border:2px solid var(--w-paper)}
  }
  .cr-warm .cr-gantt-inner{display:flex;flex-direction:column;height:100%;min-width:100%}
  .cr-warm .cr-gantt-inner .cr-gcorner{position:sticky;left:0;z-index:7}
  .cr-warm .cr-gantt-inner .cr-lane-h{position:sticky;left:0;z-index:6;box-shadow:1px 0 0 var(--w-border)}
  .cr-warm .cr-lane{flex:1 1 0;min-height:56px}
  .cr-warm .cr-track{height:100%}
  /* Jalons : bande centrée verticalement dans la carte */
  .cr-warm .cr-arch{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;max-height:560px}

  /* --- FRISE (Gantt papier) --- */
  .cr-gantt{border:1px solid var(--w-border);border-radius:10px;background:var(--w-paper);overflow:hidden;box-shadow:none}
  .cr-ghead{display:grid;grid-template-columns:132px 1fr}
  .cr-gcorner{position:relative;overflow:hidden;background:var(--w-paper-3);border-right:1px solid var(--w-border);border-bottom:1px solid var(--w-border);border-top-left-radius:10px;display:flex;flex-direction:column;justify-content:flex-end;gap:3px;padding:12px 14px}
  .cr-corner-ey{font-family:var(--font-sans);font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--w-ink-2)}
  .cr-corner-val{font-family:var(--w-serif);font-weight:600;font-size:16px;line-height:1;color:var(--w-ink)}
  .cr-corner-sub{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-2);letter-spacing:.01em}
  .cr-ghead-r{display:flex;flex-direction:column;min-width:0}
  .cr-mile{position:relative;height:92px;background:var(--w-paper-2);border-bottom:0}
  .cr-mstone{position:absolute;bottom:0;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:1px;cursor:pointer;width:max-content}
  .cr-mstone .t{font-family:var(--w-serif);font-weight:600;font-size:14px;color:var(--w-ink);white-space:nowrap;line-height:1.05}
  .cr-mstone .d{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3)}
  .cr-mstone .ln{width:1.5px;height:15px;background:var(--w-ink);margin-top:4px}
  .cr-mstone .dia{width:14px;height:14px;background:var(--w-coral);border:1px solid var(--w-border);transform:rotate(45deg);margin-top:1px;transition:transform .12s var(--ease-out)}
  .cr-mstone:hover .dia{transform:rotate(45deg) scale(1.14)}
  .cr-mstone.sel .dia{background:var(--w-ink)}
  .cr-mstone.sel .t{text-decoration:underline;text-decoration-color:var(--w-coral);text-underline-offset:3px}
  .cr-years{position:relative;height:30px;background:var(--w-ink);display:block}
  .cr-years span{position:absolute;top:50%;transform:translateY(-50%);font-family:var(--font-sans);font-weight:600;font-size:11px;color:var(--fg-inverse);letter-spacing:.02em}
  .cr-lane{display:grid;grid-template-columns:132px 1fr;border-top:1px solid var(--w-border)}
  .cr-lane:first-child{border-top:0}
  .cr-lane-h{display:flex;align-items:center;justify-content:center;padding:0 10px;font-family:var(--w-serif);font-weight:500;font-size:16px;color:var(--w-ink);border-right:1px solid var(--w-border);text-align:center}
  .cr-lane-h{background:var(--w-paper-3)}
  .cr-lane-h::before{content:"";width:7px;height:7px;border-radius:50%;flex:0 0 auto;margin-right:8px;background:var(--w-ink-3)}
  .cr-lane-h.lane-edu::before{background:var(--w-edu)}
  .cr-lane-h.lane-work::before{background:var(--w-work)}
  .cr-lane-h.lane-senior::before{background:var(--w-senior)}
  .cr-lane-h.lane-search::before{background:var(--w-search)}
  .cr-track{position:relative;height:56px;background-image:repeating-linear-gradient(90deg,transparent,transparent calc(12.5% - 1px),color-mix(in srgb,var(--ink) 7%,transparent) calc(12.5% - 1px),color-mix(in srgb,var(--ink) 7%,transparent) 12.5%)}
  .cr-bar{position:absolute;top:50%;transform:translateY(-50%);height:27px;background:var(--w-paper);border:1px solid var(--w-border-2);border-radius:6px;display:flex;align-items:center;gap:7px;padding:0 11px;font-family:var(--font-sans);font-size:11px;color:var(--w-ink);cursor:pointer;white-space:nowrap;transition:transform .12s var(--ease-out),box-shadow .12s var(--ease-out)}
  .cr-bar .cr-bar-lbl{display:flex;align-items:center;gap:7px;min-width:0;overflow:hidden}
  .cr-bar .cr-bar-lbl>.lbtxt{overflow:hidden;text-overflow:ellipsis}
  .cr-bar:hover{transform:translateY(-50%);box-shadow:none;background:var(--bg-2)}
  .cr-bar:hover .cr-bubble{display:flex}
  .cr-bar.sel{box-shadow:0 0 0 2.5px var(--w-coral)}
  .cr-bar .det{font-family:var(--font-sans);font-size:11px;opacity:.7}
  .cr-bar.is-gap{background:var(--surface);color:var(--w-bad);border:1.5px dashed var(--w-bad);font-family:var(--font-sans)}
  .cr-bar.is-gap.sel{box-shadow:0 0 0 2.5px var(--w-bad)}
  /* bulle d'aperçu au survol (papier) */
  .cr-bubble{position:absolute;left:50%;bottom:100%;transform:translate(-50%,-6px);width:max-content;max-width:250px;background:var(--w-paper);color:var(--w-ink);border:1px solid var(--w-border);border-radius:8px;padding:9px 12px;flex-direction:column;gap:2px;display:none;pointer-events:none;z-index:6;white-space:normal}
  .cr-bubble:after{content:"";position:absolute;left:50%;top:100%;transform:translateX(-50%);border:6px solid transparent;border-top-color:var(--w-ink);margin-top:0}
  .cr-bubble.dn{bottom:auto;top:100%;transform:translate(-50%,6px)}
  .cr-bar:hover .cr-bubble.dn{display:flex;transform:translate(-50%,6px)}
  .cr-bubble.dn:after{top:auto;bottom:100%;border-top-color:transparent;border-bottom-color:var(--w-ink)}
  .cr-bubble strong{font-family:var(--w-serif);font-size:14px;font-weight:600;line-height:1.15}
  .cr-bubble .bb-meta{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3)}
  .cr-bubble .bb-desc{font-family:var(--w-serif);font-size:13px;color:var(--w-ink-2);line-height:1.35;margin-top:3px}

  /* Astuce + légende + coach (sous le graphique) */
  .cr-legend{display:flex;gap:18px;flex-wrap:wrap;align-items:center;margin-top:14px;padding:11px 16px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg)}
  .cr-legend .lg{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-sans);font-size:11px;font-weight:500;letter-spacing:.06em;color:var(--ink-3);text-transform:uppercase}
  .cr-legend .dot{width:9px;height:9px;border-radius:50%;border:1px solid var(--border-strong);flex:0 0 auto}
  .cr-coachbar{position:relative;margin-top:20px;border:1px solid var(--w-border);background:var(--w-coral-soft);border-radius:10px;padding:13px 18px;font-family:var(--w-serif);font-size:16px;line-height:1.4;color:var(--w-ink-2)}
  .cr-coachbar:before{content:"";position:absolute;left:30px;top:-9px;width:15px;height:15px;background:var(--w-coral-soft);border-left:1px solid var(--w-border);border-top:1px solid var(--w-border);transform:rotate(45deg)}
  /* Points de vigilance du parcours (trous / en-cours simultanés) · carte sobre, ton porté
     par la seule icône de titre (pas de bord coloré, cf. design system). */
  .cr-gaps{margin-top:16px;border:1px solid var(--w-border);background:var(--surface);border-radius:10px;padding:12px 15px}
  .cr-gaps-head{display:flex;align-items:center;gap:7px;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--w-ink-2);margin-bottom:8px}
  .cr-gaps-head svg{color:var(--warn)}
  .cr-gap-item{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-top:1px solid var(--w-border)}
  .cr-gap-item:first-of-type{border-top:0}
  .cr-gap-ic{flex:0 0 auto;color:var(--w-ink-3);margin-top:1px;display:inline-flex}
  .cr-gap-txt{display:flex;flex-direction:column;gap:2px}
  .cr-gap-txt b{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--w-ink)}
  .cr-gap-txt span{font-family:var(--font-sans);font-size:13px;line-height:1.45;color:var(--w-ink-3)}
  .cr-gap-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:7px}
  .cr-gap-linktxt{font-weight:600;color:var(--w-ink)}
  /* Masquage discret d'un point (Plus tard / ne pas en parler) — jamais imposé. */
  .cr-gap-item{position:relative}
  .cr-gap-txt{flex:1;min-width:0}
  .cr-gap-dismiss{position:relative;flex:0 0 auto}
  .cr-gap-x{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;border-radius:6px;background:none;color:var(--w-ink-3);cursor:pointer;opacity:.55;transition:opacity .18s ease,background .18s ease}
  .cr-gap-x:hover{opacity:1;background:var(--hover-bg)}

  /* --- JALONS (axe + cartouches) papier --- */
  .cr-arch{position:relative;padding:18px 0}
  /* Ruban navigable : on défile en X, le ruban interne s'élargit avec le zoom
     (les cartouches se désentassent). 76px de marge intérieure pour les cartouches d'extrémité. */
  .cr-warm .cr-jal-scroll{width:100%;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth}
  @media (pointer:fine){
    .cr-warm .cr-jal-scroll::-webkit-scrollbar{height:10px}
    .cr-warm .cr-jal-scroll::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px;border:2px solid var(--w-paper)}
  }
  .cr-band{position:relative;height:280px;box-sizing:border-box;min-width:100%}
  /* Rail interne : insère un espace de coordonnées plus étroit (76px de chaque côté)
     pour que les cartes ancrées au centre (translateX(-50%), 138px de large) ne débordent
     JAMAIS le ruban — le `left:%` se mesure contre ce rail, pas contre la bande pleine
     (le padding ne sert à rien pour des éléments en position:absolute). À « Vue d'ensemble »
     la bande tient donc sans scroll, comme la Frise. */
  .cr-band-rail{position:absolute;left:76px;right:76px;top:0;bottom:0}
  .cr-axis{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:32px;border:1px solid var(--w-border-2);border-radius:8px;background:var(--w-paper);display:flex;overflow:hidden;box-shadow:none}
  .cr-phase{height:100%;display:flex;align-items:center;padding:0 12px;font-family:var(--w-serif);font-size:13px;font-weight:500;color:var(--w-ink);border-right:1px solid var(--w-border);cursor:pointer;transition:filter .15s}
  .cr-phase:last-child{border-right:0}
  .cr-phase::before{content:"";width:7px;height:7px;border-radius:50%;flex:0 0 auto;margin-right:8px;background:var(--w-ink-3)}
  .cr-phase.ph-edu::before{background:var(--w-edu)}
  .cr-phase.ph-work::before{background:var(--w-work)}
  .cr-phase.ph-senior::before{background:var(--w-senior)}
  .cr-phase.ph-search::before{background:var(--w-search)}
  .cr-phase:hover{filter:brightness(.96)}
  .cr-phase.sel{box-shadow:inset 0 0 0 2.5px var(--w-coral)}
  .cr-tick{position:absolute;top:calc(50% + 22px);transform:translateX(-50%);font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3)}
  .cr-tick i{position:absolute;left:50%;top:-18px;width:1.5px;height:12px;background:var(--w-ink)}
  .cr-call{position:absolute;transform:translateX(-50%);width:138px;cursor:pointer}
  .cr-call.up{bottom:calc(50% + 28px)}
  .cr-call.dn{top:calc(50% + 36px)}
  .cr-call .bx{background:var(--w-paper);border:1px solid var(--w-border);border-radius:8px;padding:8px 11px;transition:transform .12s var(--ease-out),box-shadow .12s var(--ease-out)}
  .cr-call:hover .bx{transform:none;box-shadow:none;background:var(--bg-2)}
  .cr-call.sel .bx{box-shadow:0 0 0 2.5px var(--w-coral)}
  .cr-call .bx .t{font-family:var(--w-serif);font-weight:600;font-size:14px;color:var(--w-ink);line-height:1.15}
  .cr-call .bx .yr{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3);margin-top:3px}
  .cr-call .bx .s{font-family:var(--w-serif);font-size:12px;color:var(--w-ink-2);margin-top:4px;line-height:1.3}
  .cr-call .lead{position:absolute;left:50%;width:1.5px;background:var(--w-ink)}
  .cr-call.up .lead{top:100%;height:28px}
  .cr-call.dn .lead{bottom:100%;height:36px}
  .cr-call .medal{display:inline-flex;vertical-align:-2px;margin-right:4px;color:var(--w-coral)}

  /* --- RÉCIT vertical papier --- */
  /* Récit : la vue ne scrolle pas globalement — seule la colonne gauche défile,
     le panneau de droite reste totalement figé (rock solid). */
  .view.cr-warm:has(.cr-split){overflow:hidden}
  /* Récit en pleine largeur, centré (le dock latéral droit est abandonné : la fiche s'ouvre
     désormais en pop-up modal comme les vues Frise/Jalons). */
  .view.cr-warm:has(.cr-recit){overflow:hidden}
  .view.cr-warm > .cr-recit{flex:1 1 0;min-height:0}
  .cr-recit{max-width:772px;width:100%;margin:0 auto;height:100%;overflow-y:auto;overflow-x:hidden;padding:18px 16px 26px}
  @media (pointer:fine){
    .cr-recit::-webkit-scrollbar{width:9px}
    .cr-recit::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px}
  }
  .cr-story{display:flex;flex-direction:column}
  .cr-phase-head{display:grid;grid-template-columns:74px 28px 1fr;align-items:center;margin:16px 0 2px}
  .cr-phase-head:first-child{margin-top:0}
  .cr-phase-chev{justify-self:center;width:12px;height:9px;background:var(--w-ink);clip-path:polygon(50% 0,100% 100%,0 100%)}
  .cr-phase-body{display:flex;align-items:baseline;gap:9px;border-bottom:1px solid var(--w-border);padding:0 0 6px 4px}
  .cr-pt-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}
  .cr-phase-name{font-family:var(--w-serif);font-size:16px;font-weight:600;color:var(--w-ink);white-space:nowrap}
  .cr-phase-meta{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3);margin-left:auto}
  .cr-item{display:grid;grid-template-columns:98px 28px 1fr;align-items:start}
  .cr-when{text-align:right;padding:13px 8px 0 0;line-height:1.32}
  .cr-when .y{font-family:var(--w-serif);font-size:22px;font-weight:600;color:var(--w-ink)}
  .cr-when .s{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3);text-transform:uppercase;letter-spacing:.05em}
  .cr-when-end{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3);text-transform:uppercase;letter-spacing:.05em}
  .cr-when-dur{margin-top:3px;font-family:var(--font-sans);font-size:11px;color:var(--w-ink-2);letter-spacing:.02em;white-space:nowrap}
  .cr-rail{position:relative;display:flex;justify-content:center;align-self:stretch}
  .cr-rail:before{content:"";position:absolute;top:0;bottom:0;width:2px;background:var(--w-ink)}
  .cr-item:last-child .cr-rail:before{height:24px;bottom:auto}
  .cr-node{position:relative;z-index:1;width:13px;height:13px;border-radius:50%;border:2.5px solid var(--w-ink);background:var(--w-paper);margin-top:16px}
  .cr-node.is-gap{border-color:var(--w-bad);background:var(--w-paper);border-radius:3px;transform:rotate(45deg);width:12px;height:12px}
  .cr-node.is-search{border-color:var(--w-coral);background:var(--w-paper)}
  .cr-card{margin:8px 0 14px 4px;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out);background:var(--content-bg);box-shadow:none;}
  .cr-card:hover{transform:none;border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
  .cr-card.sel{border-color:var(--content-selected-border);background:var(--content-selected-bg);box-shadow:none}
  .cr-card .top{display:flex;align-items:center;gap:10px;justify-content:space-between}
  .cr-card .top strong{font-family:var(--w-serif);font-size:16px;font-weight:600;color:var(--w-ink)}
  .cr-mood{flex:0 0 auto;font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:var(--tracking-wide);border-radius:99px;padding:2px 10px;color:var(--w-ink-3);background:var(--w-paper-3);border:1px solid var(--w-border)}
  .cr-quote{font-family:var(--w-serif);font-size:14px;color:var(--w-ink-2);line-height:1.4;margin:7px 0 0}
  .cr-skills{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px;align-items:center}
  .cr-skills .lbl{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3);text-transform:uppercase;letter-spacing:.06em;margin-right:2px}
  .cr-skills .tag,.cr-skills [class*="tag"]{font-family:var(--font-sans)}
  .cr-gapbox{margin:7px 0 14px 4px;border:1.5px dashed var(--w-bad);border-radius:8px;background:var(--w-paper);padding:9px 12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;cursor:pointer;transition:box-shadow .14s}
  .cr-gapbox:hover{box-shadow:none;background:var(--bg-2);border-color:var(--border-strong)}
  .cr-gapbox.sel{box-shadow:0 0 0 2.5px var(--w-bad)}

  .cr-gap-txt{font-family:var(--w-serif);font-size:13px;color:var(--w-ink-2);flex:1;min-width:120px;line-height:1.3}

  /* --- Detail (pop-up & dock) papier --- */
  /* Dans la fenêtre Travail commune (.ui-window.cr-modal), la fiche remplit la coque sans second cadre. */
  .cr-detail.cr-overlay-card{border:0;border-radius:0;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;width:100%;overflow:hidden}
  .cr-overlay-card .cr-dhead{flex:0 0 auto}
  .cr-overlay-card .cr-dbody{flex:1 1 auto;min-height:0;overflow-y:auto}
  .cr-overlay-card .cr-foot{flex:0 0 auto;border-top:1px solid var(--w-border);background:var(--w-paper);padding:12px 16px;margin:0}
  /* Positionnement seulement : le visuel vient de l'atome .ui-close-button. */
  .cr-dclose{position:absolute;top:7px;right:11px}
  .cr-overlay-card .cr-eyebrow{padding-right:40px}
  .cr-detail{border:1px solid var(--w-border);border-radius:10px;background:var(--w-paper);overflow:hidden;box-shadow:none}
  .cr-below{margin-top:16px}
  .cr-dock{position:static;align-self:stretch;min-height:0;max-height:100%;overflow-y:auto;overflow-x:hidden}
  .cr-dhead{display:flex;align-items:stretch;border-bottom:1px solid var(--w-border);position:relative}
  .cr-dhead .txt{flex:1;min-width:0;padding:10px 16px 11px;display:flex;flex-direction:column;gap:7px}
  .cr-eyebrow{display:flex;align-items:center;gap:8px}
  .cr-period{margin-left:auto;font-family:var(--font-sans);font-size:11px;color:var(--w-ink-2);background:var(--w-paper);border:1px solid var(--w-border);border-radius:99px;padding:2px 10px;white-space:nowrap}
  .cr-dtitle{font-family:var(--w-serif);font-size:22px;font-weight:600;color:var(--w-ink);line-height:1.1}
  .cr-dsub{font-family:var(--w-serif);font-size:14px;color:var(--w-ink-2);line-height:1.35;border-top:1.5px dashed color-mix(in srgb,var(--ink) 25%,transparent);padding-top:8px}
  .cr-dbody{padding:14px 16px;display:grid;grid-template-columns:1fr 1fr;gap:16px 22px;background:var(--w-paper)}
  .cr-dock .cr-dbody{grid-template-columns:1fr}
  .cr-col{display:flex;flex-direction:column;gap:10px;min-width:0}
  .cr-sec{font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:var(--tracking-caps);color:var(--w-ink-3)}
  .cr-field{display:flex;gap:8px;align-items:baseline;font-size:14px;font-family:var(--w-serif)}
  .cr-field .k{font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--w-ink-3);flex:0 0 88px}
  .cr-field .v{color:var(--w-ink);flex:1}
  .cr-field .v.empty{color:var(--w-ink-3)}
  .cr-kids{display:flex;flex-direction:column;gap:6px}
  .cr-kid{display:flex;align-items:center;gap:8px;border:1px solid var(--w-border);border-radius:8px;background:var(--w-paper-2);padding:6px 9px}
  .cr-kid .num{font-family:var(--font-sans);font-size:11px;color:var(--w-ink-3);flex:0 0 auto}
  .cr-kid .tx{flex:1;font-family:var(--w-serif);font-size:14px;color:var(--w-ink);padding:2px 4px}
  .cr-tags{display:flex;flex-wrap:wrap;gap:6px}
  .cr-foot{grid-column:1/-1;display:flex;flex-direction:column;gap:10px}
  .cr-dock .cr-foot{grid-column:auto}
  .cr-coach{display:flex;gap:10px;align-items:flex-start;padding:11px 13px;background:var(--w-paper-3);border:1px solid var(--w-border);border-radius:8px}
  .cr-coach .ico{width:24px;height:24px;border-radius:6px;background:var(--w-coral);color:var(--fg-inverse);display:grid;place-items:center;flex:0 0 auto;margin-top:1px;border:1px solid transparent}
  .cr-coach p{font-family:var(--w-serif);font-size:14px;color:var(--w-ink-2);line-height:1.45}
  .cr-coach strong{font-style:normal;font-weight:600}
  .cr-missing{padding:10px 12px;border:0;background:var(--support-bg);border-radius:var(--radius-md);font-family:var(--w-serif);font-size:13px;color:var(--w-ink-2);line-height:1.4}
  /* Actions d'intégration SIHAGE : lien carnet Vault + bouton « Discuter avec l'assistant » (gabarit DS .vdp-btn) */
  .cr-actions{display:flex;flex-wrap:wrap;gap:9px;align-items:center}
  .cr-dock .cr-actions{flex-direction:column;align-items:stretch}
  .cr-openvault{flex:1 1 auto;display:inline-flex;align-items:center;gap:9px;min-width:0;height:32px;padding:0 12px;border-radius:8px;border:1px solid var(--w-border-2);background:var(--w-paper-2);color:var(--w-ink-2);font:inherit;font-size:13px;font-weight:500;cursor:pointer;transition:border-color .15s var(--ease-out),color .15s var(--ease-out),background .15s var(--ease-out)}
  .cr-openvault:hover{border-color:var(--w-coral);color:var(--w-coral);background:var(--w-coral-soft)}
  .cr-openvault svg{color:var(--w-ink-3);flex:0 0 auto}
  .cr-openvault:hover svg{color:var(--w-coral)}
  .cr-openvault .cr-ov-tx{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}
  .cr-openvault .cr-ov-tx strong{font-weight:600}
  .cr-openvault svg:last-child{margin-left:auto}
  
  @media(max-width:820px){.cr-dock{position:static}.cr-dbody{grid-template-columns:1fr}}

  /* chat */
  .chat{display:flex;flex-direction:column;gap:10px;padding:16px;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;height:100%;min-height:380px}
  .bubble{padding:10px 13px;border-radius:10px;font-size:14px;line-height:1.45;color:var(--ink-2);max-width:80%;border:1px solid var(--content-border);background:var(--content-bg);box-shadow:none;}
  .asst-sources{margin-top:7px;display:flex;flex-direction:column;align-items:flex-start;gap:6px}
  .asst-src-toggle{height:26px;padding:0 8px;border-radius:8px;border:1px solid var(--border-soft);background:var(--surface);color:var(--ink-3);font:inherit;font-size:12px;display:inline-flex;align-items:center;gap:5px;cursor:pointer;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .asst-src-toggle:hover{background:var(--bg-2);border-color:var(--border-strong);color:var(--ink)}
  .asst-src-list{width:100%;display:flex;flex-direction:column;gap:5px;padding:7px;border:1px solid var(--border);border-radius:8px;background:var(--bg-2)}
  .asst-src-item{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);font-size:12px;line-height:1.35;color:var(--ink-3)}
  .asst-src-kind{font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4)}
  .asst-src-item strong{font-size:12px;font-weight:600;color:var(--ink);line-height:1.3}

  /* Coach — mise en page pleine hauteur (header compact, colonnes jusqu'au bas) */

  /* details for collapsible sections */
  details summary{
    cursor:pointer;list-style:none;font-size:14px;font-weight:600;color:var(--ink);
    padding:8px 0;display:flex;align-items:center;gap:8px}
  details summary::-webkit-details-marker{display:none}
  details summary:before{content:"›";color:var(--ink-3);transition: transform var(--dur-fast) var(--ease-out);font-size:16px;line-height:1}
  details[open] summary:before{transform:rotate(90deg)}

  /* mini scroll spy nav for career */
  /* `.career-spy` RETIRÉE le 2026-08-03 (SIH-82) : masque collant rendu par aucun JSX.
     Elle figurait parmi les « 4 masques collants » qui empêchaient de bouger `--bg` ; deux
     des quatre n'existaient déjà plus. Le blocage était plus petit qu'écrit. */

  /* wizard add */

  /* utility */
  .grow{flex:1}.center{display:grid;place-items:center}
  .nowrap{white-space:nowrap}

  /* ===== Activity timeline ===== */

  /* ===== Sparkbars (activity period summary) ===== */

  /* ===== Journal note (in activity stream) ===== */

  /* Composer */

  /* Linked card pill (used in note row footer) */

  /* Add-note inline button (per day) */

  /* Link picker dropdown */
  .link-picker{
    position:absolute;z-index:30;background:var(--surface);border:1px solid var(--border);
    border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;width:280px;max-height:260px;overflow:auto;
    display:flex;flex-direction:column;gap:1px;
  }
  body[data-density="compact"] .kc:not([data-display-preferences="false"]){padding:8px;gap:6px}
  body[data-density="compact"] .kc:not([data-display-preferences="false"]) .kc-loc{display:none}
  body[data-density="compact"] .cand-kanban-body{gap:7px;padding:8px}
  body[data-density="compact"] .cand-kanban-board{gap:10px}
  body[data-density="cozy"] .kc:not([data-display-preferences="false"]){padding:14px;gap:11px}
  body[data-density="cozy"] .cand-kanban-body{gap:12px;padding:12px}
  body[data-density="cozy"] .cand-kanban-board{gap:14px}

  /* Card field hide rules (driven by data-hide-* on body). Écrits par le popup
     « Affichage » du Tableau (hifi-kanban.jsx), seul écrivain depuis SIH-8. */
  body[data-hide-match="1"] .kc:not([data-display-preferences="false"]) .kc-score[data-field="match"]{display:none}
  body[data-hide-ats="1"] .kc:not([data-display-preferences="false"]) .kc-score[data-field="ats"]{display:none}
  body[data-hide-contract="1"] .kc:not([data-display-preferences="false"]) .kc-fact-contract{display:none}
  body[data-hide-contract="1"] .kc:not([data-display-preferences="false"]) .kc-facts:not(:has(.kc-fact-remote,.kc-fact-salary)),
  body[data-hide-location="1"] .kc:not([data-display-preferences="false"]) .kc-facts:not(:has(.kc-fact-contract,.kc-fact-salary)),
  body[data-hide-contract="1"][data-hide-location="1"] .kc:not([data-display-preferences="false"]) .kc-facts:not(:has(.kc-fact-salary)){display:none}
  body[data-hide-location="1"] .kc:not([data-display-preferences="false"]) .kc-loc,body[data-hide-location="1"] .kc:not([data-display-preferences="false"]) .kc-fact-remote{display:none}

  /* Display settings — modal overlay (kanban) */
  /* Affichage du tableau, dans le format Décision : mêmes intertitres que la fenêtre des objectifs. */
  .kb-display-opts{display:flex;flex-direction:column;gap:4px}
  .kb-display-opts h6{margin:0;padding:10px 4px 4px;font-size:11px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em}
  .kb-display-opts h6:first-child{padding-top:2px}
  .dp-row{
    display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:8px;
    font-size:13px;color:var(--ink-2);
  }
  .dp-row:hover{background:var(--bg-2)}
  .dp-row .lbl{flex:1;display:flex;align-items:center;gap:8px}
  .dp-row .lbl .ic{color:var(--ink-3);display:grid;place-items:center;width:16px;height:16px}

  .dp-toggle{
    width:32px;height:18px;border-radius:99px;background:var(--surface-3);
    border:1px solid var(--border-strong);position:relative;cursor:pointer;flex:0 0 auto;
    padding:0;
    transition: background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
  }
  .dp-toggle::after{
    content:"";position:absolute;top:1px;left:1px;width:14px;height:14px;border-radius:50%;
    background:var(--surface);box-shadow:var(--shadow-sm);transition: transform var(--dur-fast) var(--ease-out);
  }
  .dp-toggle[aria-pressed="true"]{background:var(--accent);border-color:var(--accent-2)}
  .dp-toggle[aria-pressed="true"]::after{transform:translateX(14px)}
  .dp-toggle:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .dp-divider{height:1px;background:var(--border);margin:6px -4px}

  /* responsive */
  @media (max-width:820px){
    .os-shell{flex-direction:column}
    .side{width:100%;flex:initial;position:static;height:auto;border-right:0;border-bottom:1px solid var(--border)}
  }

  /* ===== Outil « Mes CV » — éditeur alimenté par le Vault ===== */
  .cvedit{flex:1;display:flex;flex-direction:column;min-height:0;position:relative}
  /* RETIRÉ le 2026-08-03 (SIH-82) — c'était : `.col > .cvedit, .ltedit, .contview, .goalsview
     { margin:8px; border:1px solid var(--border); border-radius:14px; overflow:hidden }`.
     Cette règle dessinait une fenêtre encastrée À L'INTÉRIEUR de la colonne, du temps où
     `.col` était un fond bord à bord. Depuis que `.col` EST la fenêtre — même retrait de
     8 px, même rayon de 14 px — elle en dessinait une SECONDE, emboîtée dans la première :
     deux contours concentriques, mesurés à [72,44] et [80,52]. Visible sur Contacts, le CV,
     la lettre et les Objectifs ; Candidatures y échappait parce que `.cand-kanban-shell`
     n'était pas dans la liste — d'où l'écart entre les écrans que Landry a vu.
     La fenêtre est portée UNE fois, par le shell. Ces quatre écrans n'ont plus à la redire. */
  /* Outil « Gestion des objectifs » (vue centralisée) */
  .goalsview{flex:1;display:flex;flex-direction:column;min-height:0}
  .vw-goals{padding-top:20px}

  /* barre d'onglets de l'outil CV, bouton Assistant fusionné en bout de ligne */
  /* Même raison que `.sec-head` : dans la bande de scène, la barre s'étire. */
  .cve-top{position:relative;display:flex;align-items:center;gap:12px;padding:0;background:var(--screen-bar)}
  
  .cve-crumbs{display:flex;align-items:center;gap:4px;min-width:0;flex:1 1 auto}
  /* La navigation documentaire est une identité de section : même métrique que
     « Contacts » et les autres titres de la barre, pas un troisième style de bouton. */
  .cve-crumb{display:inline-flex;align-items:center;gap:7px;height:32px;flex:0 0 auto;font:inherit;font-size:16px;font-weight:600;color:var(--ink);background:transparent;border:0;border-radius:var(--radius-md);padding:0 8px;cursor:pointer;white-space:nowrap;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .cve-crumb.mid{flex:0 1 auto;min-width:0}
  .cve-crumb:hover{background:var(--bg-2);color:var(--ink)}
  .cve-crumb > svg{width:18px;height:18px;flex:0 0 auto;color:currentColor}
  .cve-crumb-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-crumb.cur{color:var(--ink);font-weight:600;cursor:default}
  .cve-crumb.cur:hover{background:transparent}
  .cve-crumb-chev{display:inline-flex;align-items:center;color:var(--ink);flex:0 0 auto}
  /* en édition : la campagne reste visible dans le fil d'Ariane */
  .cve-crumb-more{display:inline-flex;align-items:center;max-width:360px;opacity:1;overflow:hidden;position:relative;z-index:2;background:var(--surface);border-radius:8px}
  /* bloc entreprise + sélecteur CV|Lettre, centré dans le header */
  .cve-leaf-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;display:flex;align-items:center}
  .cve-crumb-leaf{display:inline-flex;align-items:center;gap:9px;flex:0 0 auto;padding:3px 4px 3px 9px;border-radius:8px;background:var(--bg-2)}

  /* Canon SIH-74 : l'action principale parle la matière pastille, partout. */
  .cve-newwrap{position:relative;flex:0 0 auto;margin-left:auto}
  /* Même grammaire sur la bibliothèque documentaire : l'action locale se place à droite,
     avant le séparateur, « Nouvelle entrée » et l'Assistant (dev-548-reglages-systeme). */
  .cve-newmenu{position:absolute;top:calc(100% + 7px);right:0;width:288px;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;z-index:var(--z-menu);animation:lteFocusIn var(--dur-fast) var(--ease-out)}
  .cve-newmenu-cap{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);padding:7px 9px 5px}
  .cve-newmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:flex;align-items:flex-start;gap:11px;width:100%;text-align:left;border:0;background:transparent;border-radius:8px;padding:9px 9px;cursor:pointer;font:inherit}
  .cve-newmenu button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
  .cve-newmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--hover-bg)}
  .cve-newmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) .ic{flex:0 0 auto;width:32px;height:32px;border-radius:8px;display:grid;place-items:center;background:var(--bg-2);color:var(--ink-2)}
  .cve-newmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover .ic{background:var(--accent-soft);color:var(--accent)}
  .cve-newmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) b{display:block;font-size:13px;font-weight:600;color:var(--ink)}
  .cve-newmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) > div > span{display:block;font-size:12px;color:var(--ink-3);margin-top:1px;line-height:1.35}
  .cve-newmenu.wide{width:340px}
  .cve-panel-search kbd{flex:0 0 auto;font-family:var(--font-data);font-size:11px;color:var(--ink-4);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:1px 5px}
  .cve-cmd-empty{font-size:12px;color:var(--ink-3);padding:10px 10px 8px;line-height:1.5}
  .cve-cmd-empty button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){font:inherit;font-size:12px;font-weight:600;color:var(--accent);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
  .cve-newmenu-primary{align-items:center !important}
  .cve-newmenu-primary .go{margin-left:auto;color:var(--ink-4);align-self:center}
  .cve-newmenu-primary:hover .go{color:var(--accent)}
  .cve-newmenu-list{max-height:300px;overflow-y:auto;margin-top:2px;border-top:1px solid var(--border);padding-top:4px}
  .cve-newmenu-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){align-items:center !important}
  .cve-newmenu-list .lg{flex:0 0 auto;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-family:var(--font-sans);font-size:11px;font-weight:600}
  .cve-newmenu-list .lg:not(.organization-fallback){background:var(--bg-2);border:1px solid var(--border);color:var(--ink-2)}
  .cve-newmenu-list .id{flex:1 1 auto;min-width:0}
  .cve-newmenu-list .id b{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-newmenu-list .id span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-newmenu-st{flex:0 0 auto;font-size:11px;font-weight:600;border-radius:99px;padding:2px 8px;white-space:nowrap}
  .cve-newmenu-st.good{color:var(--good-ink);background:var(--good-soft)}
  .cve-newmenu-st.info{color:var(--accent);background:var(--accent-soft)}
  .cve-newmenu-st.warn{color:var(--warn-ink);background:var(--warn-soft)}

  /* vue Bibliothèque */
  /* DEV-503 · comparaison documentaire : croissance libre, frein progressif, puis plafond.
     Calibrage local : deux aperçus de 480 à 560 px + suivi de poids 1.2 + deux gaps.
     Le surplus après la largeur confortable va pour moitié à la grille, moitié aux marges.
     Le profil et le carnet partagent cette progression dans leur colonne utile.
     Les éditeurs A4 conservent leurs gabarits. */
  .cve-lib2,.vc-main-col--readable{
    --document-grid-comfort:calc(480px * 3.2 + var(--space-4) * 2);
    --document-grid-limit:calc(560px * 3.2 + var(--space-4) * 2);
    --document-gutter-limit:48px;
    --app-reading-gutter:clamp(24px,3.2%,var(--document-gutter-limit));
    --app-reading-inset:max(var(--app-reading-gutter),calc((100% - var(--document-grid-comfort) + var(--document-gutter-limit) * 2) / 4),calc((100% - var(--document-grid-limit)) / 2));
  }
  .cve-lib2{flex:1;min-height:0;overflow:hidden}
  .cve-lib2-scroll{container:document-library / inline-size;height:100%;overflow-y:auto;padding-block:16px 40px;padding-inline:var(--app-reading-inset)}
  .cve-lib2-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;max-width:none;margin:0 auto 16px}
  .cve-lib2-head.row{align-items:center;gap:16px;margin-bottom:14px}
  .cve-lib2-head.row h2{margin:0;font-size:16px;display:flex;align-items:center;gap:10px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-info{position:relative;display:inline-flex;align-items:center;margin-left:9px;color:var(--ink-4);cursor:help;vertical-align:middle}
  .cve-info:hover,.cve-info:focus-visible{color:var(--accent);outline:none}
  .cve-info:focus-visible{box-shadow:var(--ring-focus)}
  .cve-info-tip{position:absolute;top:calc(100% + 9px);left:0;width:max-content;max-width:300px;background:var(--sidebar-bg);color:var(--fg-inverse);font-size:12px;font-weight:400;letter-spacing:var(--tracking-normal);line-height:1.5;padding:10px 13px;border-radius:10px;box-shadow:var(--shadow-popover);opacity:0;transform:translateY(-4px);pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out);z-index:80;text-align:left}
  .cve-info:hover .cve-info-tip,.cve-info:focus-visible .cve-info-tip{opacity:1;transform:translateY(0)}
  .cve-lib2-head h2{font-size:16px;font-weight:600;letter-spacing:-.02em;color:var(--ink);margin:5px 0 4px}
  .cve-lib2-head p{font-size:13px;color:var(--ink-2);line-height:1.55;max-width:560px}
  .cve-lib2-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:16px;max-width:none;margin:0 auto}
  .cve-lib2-grid.cve-lib2-row{display:flex;grid-template-columns:none;width:100%;max-width:none;margin:0;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;scrollbar-gutter:stable}
  .cve-lib2-row > .cve-candsum,.cve-lib2-row > .cve-card{flex:0 0 min(290px,78vw);width:min(290px,78vw);scroll-snap-align:start}
  @media (pointer:fine){
    .cve-lib2-row::-webkit-scrollbar{height:8px}
    .cve-lib2-row::-webkit-scrollbar-track{background:transparent}
    .cve-lib2-row::-webkit-scrollbar-thumb{background:var(--scroll-pill-thumb);border-radius:99px;border:2px solid var(--bg)}
  }
  /* Filtre de la bibliothèque : c'est LA barre d'onglets, seule sa position lui appartient. */
  .tabbar.cve-libfilter{display:flex;max-width:1080px;margin:0 auto 18px;width:max-content}
  .cve-lib2-head.row .tabbar.cve-libfilter{margin:0;flex:0 0 auto}
  /* Canon : les rôles documentaires ont leur pastille dédiée (bleu encre
     lavée pour le CV, terracotta pour la lettre) — plus d'emprunt aux
     couleurs de statut. */
  .cve-candsum:hover{border-color:var(--border-strong);box-shadow:none;transform:none;background:var(--bg-2)}

  /* dossiers (un par tableau) */
  .cve-folders{display:grid;grid-template-columns:repeat(auto-fill,minmax(440px,1fr));gap:14px;max-width:none;margin:0 auto}
  .cve-folder{display:flex;align-items:center;gap:15px;text-align:left;background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;cursor:pointer;font:inherit;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .cve-folder:hover,.cve-card:hover,.cve-vcard:hover{background:var(--content-hover-bg)}
  .cve-folder.active{background:var(--content-selected-bg);border-color:var(--content-selected-border)}
  .cve-folder.arch{background:var(--bg)}
  .cve-folder-ic{flex:0 0 auto;width:40px;height:40px;border-radius:10px;display:grid;place-items:center;background:var(--bg-2);color:var(--ink-3)}
  .cve-folder.active .cve-folder-ic{background:var(--bg-2);color:var(--ink-2)}
  .cve-folder-body{flex:1;min-width:0}
  .cve-folder-top{display:flex;align-items:center;gap:9px;min-width:0}
  .cve-folder-top b{font-size:14px;font-weight:600;color:var(--ink);line-height:1.25;white-space:nowrap}
  .cve-folder-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3);margin-top:4px;white-space:nowrap}
  .cve-folder-meta b{font-weight:600;color:var(--ink-2)}
  .cve-folder-meta .dot{color:var(--border-strong)}
  .cve-folder-go{flex:0 0 auto;color:var(--ink-4)}
  .cve-folder:hover .cve-folder-go{color:var(--accent)}

  .cve-card{position:relative;display:flex;flex-direction:column;text-align:left;background:var(--content-bg);border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out);font:inherit}
  .cve-card-body{padding:13px 14px 12px;display:flex;flex-direction:column;gap:10px}

  .cve-card-link{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:12px;font-weight:500;color:var(--accent);background:transparent;border:0;padding:0;cursor:pointer;text-align:left}
  .cve-card-link:hover{text-decoration:underline}
  .cve-card-link.muted{color:var(--ink-4);cursor:default}
  .cve-card-link.muted:hover{text-decoration:none}
  .cve-card-link svg{flex:0 0 auto}
  .cve-card-foot{display:flex;align-items:center;gap:7px;border-top:1px solid var(--border);padding-top:11px;margin-top:1px}

  /* Fondu encore porté par la liste de mentions du journal (.jc-mention). */
  @keyframes cveFade{from{opacity:0}to{opacity:1}}
  /* Fenêtres d'édition des contacts : Window Travail commune (DEV-550). Encart « canal obligatoire » (création d'un interlocuteur depuis le journal). */
  .cve-channel-note{display:flex;align-items:flex-start;gap:8px;margin-bottom:13px;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);font-size:12px;line-height:1.45;color:var(--ink-3)}
  .cve-channel-note svg{flex-shrink:0;margin-top:1px;color:var(--ink-4)}
  .cve-channel-note em{font-style:normal;font-weight:600;color:var(--ink-2)}
  .ct-contact-form{width:min(960px,100%);margin:0 auto;padding:4px 0 18px;display:flex;flex-direction:column;gap:26px}
  .ct-contact-form-section h2{margin:0 0 14px;font-size:14px;font-weight:600;color:var(--ink)}
  .ct-contact-media{display:flex;align-items:center;gap:12px;margin:0 0 18px;padding:16px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
  .ct-contact-media-preview{width:48px;height:48px;flex:0 0 auto;display:grid;place-items:center;border-radius:10px;background:var(--bg-2);border:1px solid var(--border);color:var(--ink-4);overflow:hidden}
  .ct-contact-media-preview img{width:100%;height:100%;object-fit:cover}
  .ct-contact-media-copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:2px}
  .ct-contact-media-copy b{font-size:13px;font-weight:600;color:var(--ink)}
  .ct-contact-media-copy span,.ct-contact-media-copy em{font-size:12px;line-height:1.35;color:var(--ink-3)}
  .ct-contact-media-copy em{font-style:normal;color:var(--bad)}
  .ct-contact-media-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}
  .ct-contact-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}
  .ct-contact-field{margin:0 0 13px;min-width:0}
  .ct-contact-field .aev-eyebrow{margin-bottom:5px}
  .ct-contact-field--full{grid-column:1/-1}
  .ct-contact-drawer-meta{display:inline-flex;align-items:center;gap:6px;min-width:0;font-size:12px;color:var(--ink-4)}

  /* Vault · création / modification d'un carnet : fenêtre Travail commune, corps sur le fond */
  .vc-carnet-modal-body{background:var(--bg)}
  .vc-carnet-form-card{border:1px solid var(--content-border);border-radius:10px;padding:14px 14px 1px;margin-bottom:14px;background:var(--content-bg);box-shadow:none;}
  .vc-carnet-form-title{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:14px;font-weight:600;color:var(--ink)}
  .vc-carnet-form-title svg{color:var(--accent)}
  .vc-carnet-form-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px 14px}
  .vc-carnet-warn{font-size:12px;line-height:1.4;color:var(--bad);background:color-mix(in srgb,var(--bad) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--bad) 24%,var(--border));border-radius:8px;padding:8px 10px;margin:0 0 13px}
  .vc-carnet-urlrow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
  .vc-carnet-urlrow .vdp-btn{height:38px}
  .vc-carnet-urlrow .vdp-btn[disabled]{opacity:.5;cursor:not-allowed;border-color:var(--border);color:var(--ink-3)}
  .vc-carnet-note{font-size:12px;line-height:1.45;color:var(--ink-2);background:var(--support-bg);border:0;border-radius:var(--radius-md);padding:10px 12px;margin:-2px 0 13px}
  .vc-carnet-note.warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 8%,var(--surface))}
  .vc-carnet-joblink{border:1px solid var(--border);border-radius:10px;background:var(--surface-2);padding:12px;margin-bottom:13px}
  .vc-carnet-joblink-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:10px}
  .vc-carnet-joblink-head b{display:block;font-size:14px;color:var(--ink);margin-bottom:2px}
  .vc-carnet-joblink-head span{display:block;font-size:12px;line-height:1.35;color:var(--ink-3)}
  .vc-carnet-joblink-head .vdp-btn{height:34px;white-space:nowrap;background:var(--surface)}
  .vc-carnet-joblink-status{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}
  .vc-carnet-joblink-status span{display:inline-flex;align-items:center;gap:6px;min-height:24px;border:1px solid var(--border);border-radius:999px;background:var(--surface);padding:3px 9px;font-size:12px;color:var(--ink-2)}
  .vc-carnet-joblink-status svg{color:var(--accent)}
  .vc-carnet-joblink-foot{display:flex;align-items:center;gap:7px;margin-top:8px;font-size:12px;line-height:1.35;color:var(--ink-3)}
  .vc-carnet-joblink-foot svg{color:var(--accent)}
  .vc-carnet-joblink-foot span{min-width:0;flex:1}
  .vc-carnet-joblink-foot em{font-style:normal;font-family:var(--font-sans);color:var(--ink-4)}
  @media (max-width:760px){
    .vc-carnet-form-grid{grid-template-columns:1fr}
    .ct-contact-form-grid{grid-template-columns:1fr}
    .ct-contact-field--full{grid-column:auto}
    .ct-contact-media{align-items:flex-start;flex-wrap:wrap}
    .ct-contact-media-actions{width:100%;justify-content:flex-end}
    .vc-carnet-urlrow{grid-template-columns:1fr}
    .vc-carnet-joblink-head{flex-direction:column}
    .vc-carnet-joblink-head .vdp-btn{width:100%;justify-content:center}
  }

  /* timeline */

  /* 3 colonnes : rail d'actions · espace de travail · aperçu */

  /* col 1 — rail d'actions */
  .cve-railscroll{flex:1;overflow-y:auto;padding:14px 12px}

  /* Lettres : rail icônes seules + tooltips (scopé .iconrail) */

  /* col 2 — espace de travail */
  /* Lettres : nav en menu header → colonne de travail large & confortable */
  /* Lettres : menu (style Word/Docs) — icônes + noms + tooltips, au-dessus de la barre d'outils */

  /* barre d'outils de la lettre (menu + outils sur la même ligne) */
  .cve-genpop{position:absolute;top:calc(100% + 6px);right:0;z-index:var(--z-menu);width:340px;max-width:78vw;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);padding:12px}
  /* Bascule d'environnement CV ⇄ Lettre de motivation (un slide entre les deux) */
  .lte-alignpop{position:absolute;top:calc(100% + 8px);left:0;z-index:var(--z-menu);width:340px;max-width:80vw;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);padding:14px}
  .lte-alignpop-score{display:flex;align-items:baseline;gap:4px;margin-bottom:10px}
  .lte-alignpop-score b{font-size:30px;font-weight:600;color:var(--ink);line-height:1}
  .lte-alignpop-score span{font-size:14px;color:var(--ink-3)}
  .lte-alignpop-score em{font-style:normal;font-size:12px;color:var(--ink-3);margin-left:6px}
  .lte-alignpop-sec{margin-top:10px}
  .lte-alignpop-sec .ttl{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-3);margin-bottom:5px}
  .lte-alignpop-sec .row{font-size:13px;color:var(--ink);padding:3px 0;border-top:1px solid var(--border)}
  .lte-alignpop-sec .kws{display:flex;flex-wrap:wrap;gap:5px}
  .lte-alignpop-sec .kw{font-size:12px;padding:2px 8px;border-radius:999px;border:1px solid var(--border)}
  .lte-alignpop-sec .kw.ok{color:var(--good-ink);background:var(--good-soft);border-color:var(--good)}
  .lte-alignpop-sec .kw.miss{color:var(--warn-ink);background:var(--warn-soft);border-color:var(--warn)}
  /* Compaction progressive (pilotée en JS via data-density) : la barre rétrécit son contenu pour tenir sur une ligne avant de défiler */
  /* menu sectionné en cellules — même langage que les outils à droite */
  
  /* cellules d'outils — chaque contrôle dans sa case, séparées par des filets verticaux */
  /* format vertical : Lettre / Message / E-mail empilés, l'actif encadré */
  .lte-fmtv{display:flex;flex-direction:column;gap:2px}
  .lte-fmtv button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){font:inherit;font-size:13px;font-weight:500;color:var(--ink-3);background:transparent;border:1px solid transparent;border-radius:6px;padding:3px 12px;text-align:center;cursor:pointer;white-space:nowrap;transition:color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .lte-fmtv button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{color:var(--ink);background:var(--bg-2)}
  .lte-fmtv button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on{color:var(--ink);font-weight:600;background:var(--surface);border-color:var(--border-strong);box-shadow:var(--shadow-xs)}
  /* zoom vertical : + / 100% / - */
  /* icône seule (plein écran, télécharger) */
  .cve-midhead{flex:0 0 auto;padding:15px 18px 13px;border-bottom:1px solid var(--border);background:var(--surface)}
  .cve-midhead h3{font-size:14px;font-weight:600;color:var(--ink);letter-spacing:var(--tracking-tight);display:flex;align-items:center;gap:8px}
  .cve-midhead-title{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0}
  .cve-midhead-title h3{min-width:0;margin:0}
  .cve-midhead p{font-size:12px;color:var(--ink-3);line-height:1.5;margin-top:3px}
  /* Bouton « ? » qui révèle au survol/focus la phrase explicative du panneau
     (lue une fois, pas besoin qu'elle envahisse l'écran à chaque édition). */
  .cve-midhead h3 > span:first-of-type{flex:1;min-width:0}
  .cve-midhead-hint{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid var(--border);border-radius:8px;color:var(--ink-3);background:var(--surface);cursor:help;flex:0 0 auto;transition:color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .cve-midhead-hint svg{color:currentColor}
  .cve-midhead-hint:hover{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-soft-2)}
  .cve-midhead-hint:focus{color:var(--accent);background:var(--accent-soft);border-color:var(--accent);outline:none;box-shadow:var(--ring-focus)}
  .cve-midhead-tip{position:absolute;top:calc(100% + 8px);right:-6px;background:var(--ink);color:var(--fg-inverse);font-size:12px;font-weight:400;line-height:1.5;padding:10px 12px;border-radius:8px;width:260px;max-width:80vw;box-shadow:var(--shadow-popover);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out),visibility var(--dur-fast);z-index:30;white-space:normal;text-align:left}
  .cve-midhead-hint:hover .cve-midhead-tip,.cve-midhead-hint:focus .cve-midhead-tip{opacity:1;visibility:visible}
  .cve-midhead-tip::before{content:"";position:absolute;bottom:100%;right:14px;border:6px solid transparent;border-bottom-color:var(--ink)}
  /* Variante INLINE compacte (InfoHint dans un en-tête de carte / titre de section) : pastille
     plus petite, même bulle. `tipleft` ancre la bulle à GAUCHE du « ? » (elle s'étend vers la
     droite) — utile quand le « ? » est près du bord gauche du panneau. */
  .cve-midhead-hint.sm{width:22px;height:22px;border-radius:6px;box-shadow:none}
  .cve-midhead-hint.sm:not(:hover):not(:focus){color:var(--ink-4);border-color:var(--border)}
  .cve-midhead-hint.tipleft .cve-midhead-tip{right:auto;left:-6px}
  .cve-midhead-hint.tipleft .cve-midhead-tip::before{right:auto;left:14px}
  .cve-midscroll{flex:1;overflow-y:auto;padding:15px 18px;position:relative}

  /* blocs génériques de panneau */
  .cve-pgroup{margin:16px 0}
  .cve-ptitle{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--ink);margin-bottom:9px}
  .cve-ptitle svg{color:var(--good)}
  .cve-ptitle.warn svg{color:var(--warn)}
  .cve-ptitle .count-badge{margin-left:auto}

  /* mots-clés offre */
  .cve-kw{display:flex;flex-wrap:wrap;gap:6px}
  .cve-kw span{display:inline-flex;align-items:center;gap:4px;font-size:11px;border-radius:99px;padding:3px 9px;border:1px solid var(--border);color:var(--ink-2);background:var(--surface)}
  .cve-kw span.hit{color:var(--good-ink);border-color:transparent;background:var(--good-soft)}
  .cve-kw span.miss{color:var(--bad-ink);border-color:transparent;background:var(--bad-soft)}

  /* score ATS */
  .cve-atsscore{display:flex;align-items:center;gap:16px;padding:16px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);margin-bottom:14px}
  .cve-atsnum{font-family:var(--font-data);font-size:30px;font-weight:500;color:var(--ink);line-height:1;flex:0 0 auto}
  .cve-atsnum span{font-size:14px;color:var(--ink-4);font-weight:500}
  .cve-atsbar{flex:1;min-width:0}
  .cve-atsbar .lab{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:var(--ink-3);margin-bottom:6px}
  .cve-atsbar .track{height:7px;border-radius:99px;background:var(--bg-2);overflow:hidden}
  .cve-atsbar .track i{display:block;height:100%;background:var(--ink);border-radius:99px}
  .cve-check{display:flex;gap:10px;padding:12px;border:1px solid var(--content-border);border-radius:var(--radius-lg);margin-bottom:7px;background:var(--content-bg)}
  .cve-check .dot{flex:0 0 auto;width:22px;height:22px;border-radius:6px;display:grid;place-items:center}
  .cve-check .dot.ok{background:var(--good-soft);color:var(--good)}
  .cve-check .dot.warn{background:var(--warn-soft);color:var(--warn)}
  .cve-check .ttl{font-size:13px;font-weight:600;color:var(--ink)}
  .cve-check .sub{font-size:11px;color:var(--ink-3);line-height:1.45;margin-top:2px}

  /* conseils du coach */

  /* correction */

  /* traduction */

  /* col 3 — aperçu */
  .cve-prevscroll{flex:1;overflow-y:auto;padding:26px 30px}

  /* Lettres : éditeur une colonne (lettre pleine largeur) + tiroir d'édition */
  .cve-letter1{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--subtle,var(--bg-2))}
  .cve-letterbody{flex:1;min-height:0;display:flex;position:relative}
  
  /* header du tiroir — même bleu que l'onglet de menu sélectionné (accent-soft) */

  .cve-letterbody > .cve-prevscroll{flex:1;min-width:0;background:#D2D7E0}
  /* fonds d'aperçu avec effet de profondeur (dégradé radial + ombre interne) */
  .cvedit[data-doc="cv"] .cve-letterbody > .cve-prevscroll{background:radial-gradient(115% 85% at 50% -8%,#565B61 0%,#2B2E33 82%);box-shadow:inset 0 18px 44px rgba(0,0,0,.42),inset 0 -14px 38px rgba(0,0,0,.3)}
  .cvedit[data-doc="lettre"] .cve-letterbody > .cve-prevscroll{background:radial-gradient(115% 85% at 50% -8%,var(--document-desk-light) 0%,var(--document-desk-deep) 80%);box-shadow:inset 0 18px 42px rgba(86,68,32,.34),inset 0 -14px 36px rgba(86,68,32,.24)}

  /* ── Piste 1 · Inspecteur de section ───────────────────────────────────── */
  /* Inspecteur ancré à DROITE : le document reste la pièce maîtresse, à gauche. */
  
  /* Barre d'outils flottante : flèche (sélection) · crayon (édition) · œil (aperçu). */
  /* Sections cliquables du document (mode flèche) : survol = liseré + label, actif = liseré. */
  .cve-cv .cve-secsel{cursor:pointer;position:relative}
  .cve-cv .cve-secsel:hover{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
  .cve-cv .cve-secsel.secactive{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
  .cve-cv .cve-secsel:hover::after{content:attr(data-seclabel);position:absolute;left:0;top:0;transform:translateY(-100%);margin-top:-5px;background:var(--accent);color:#fff;font-size:10px;font-weight:600;line-height:1;padding:3px 7px;border-radius:6px;white-space:nowrap;pointer-events:none;z-index:9}
  /* Titre de section : affiche déjà son nom → pas de tooltip data-seclabel superposé.
     On rétablit le trait horizontal à droite du titre (défini l.8249 sur .cve-cvsec::after). */
  .cve-cv .cve-cvsec.cve-secsel:hover::after,.cve-cv .cve-f3-title.cve-secsel:hover::after{content:"";position:static;transform:none;margin:0;padding:0;background:transparent;color:inherit;font-size:inherit;line-height:inherit;font-weight:inherit;letter-spacing:inherit;border-radius:0;white-space:normal;z-index:auto;flex:1;height:0;border-top:1px solid var(--doc-rule,var(--border))}

  /* ── Piste 1 · Inspecteurs par section (chips, sélection, cartes) ──────── */
  .cve-insprow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 2px;border-bottom:1px solid var(--border)}
  .cve-insplbl{font-size:13px;color:var(--ink-2);font-weight:500;display:inline-flex;align-items:center;gap:6px}
  .cve-inspcount{font-size:12px;font-family:var(--font-data);color:var(--ink-3)}
  .cve-inspcard{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;margin-top:8px;transition:opacity var(--dur-fast) var(--ease-out);background:var(--content-bg)}
  .cve-inspcard.dragging{opacity:.45}
  .cve-inspcard.off{opacity:.5}
  .cve-inspcard-h{display:flex;align-items:center;gap:8px}
  .cve-inspcard-id{flex:1;min-width:0;cursor:pointer}
  .cve-inspcard-id .r{font-size:13px;font-weight:500;color:var(--ink);line-height:1.3}
  .cve-inspcard-id .o{font-size:12px;color:var(--ink-3);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-inspcard-id .o .w{font-family:var(--font-data)}
  .cve-letter-formcard{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;margin-top:10px;background:var(--content-bg)}
  .cve-letter-form-title,.cve-letter-form-field>span{display:block;font-size:13px;font-weight:600;color:var(--ink);line-height:1.35}
  .cve-letter-form-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(148px,.55fr);gap:10px;margin-top:8px}
  .cve-letter-form-field{display:block;min-width:0}
  .cve-letter-form-field>span{margin-bottom:6px}
  .cve-letter-form-field .cve-fdate{display:block;width:100%;margin:0;min-height:38px;box-sizing:border-box}
  .cve-letter-subject-mode{margin-top:8px}
  .cve-letter-subject-mode+.cve-letter-form-preview{margin-top:9px}
  .cve-letter-form-preview{margin:0;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);font-size:13px;line-height:1.45;color:var(--ink-2)}
  .cve-letter-form-help{margin:7px 0 0;font-size:12px;line-height:1.45;color:var(--ink-3)}
  @media (max-width:720px){.cve-letter-form-grid{grid-template-columns:1fr}}
  .cve-fieldcard{display:block}
  .cve-inspchev{flex:none;width:24px;height:24px;border:0;background:transparent;color:var(--ink-3);border-radius:6px;cursor:pointer;display:grid;place-items:center}
  .cve-inspchev:hover{background:var(--accent-soft);color:var(--accent)}
  .cve-inspbul{padding:8px 2px 2px 26px}
  .cve-bulrow{display:flex;align-items:flex-start;gap:8px;padding:3px 0}
  .cve-bulrow .t{font-size:12px;color:var(--ink-2);line-height:1.4}
  .cve-bulrow.off .t{text-decoration:line-through;color:var(--ink-3)}
  /* Vue focus « item » (niveau 2) — édition d'une expérience isolée dans le panneau droite. */
  .cve-focusinsp{gap:0}
  .cve-focusinsp-hd{padding:12px 0 8px;border-bottom:1px solid var(--border);margin-bottom:2px}
  .cve-focusinsp-role{font-size:16px;font-weight:600;color:var(--ink);line-height:1.35;margin:0 0 4px}
  .cve-focusinsp-role.editable{display:inline-flex;align-items:center;gap:7px;cursor:text;padding:2px 6px;margin-left:-6px;border-radius:6px;transition:background-color var(--dur-fast) var(--ease-out)}
  .cve-focusinsp-role.editable svg{color:var(--muted,var(--ink-3));flex:none}
  .cve-focusinsp-role.editable:hover{background:var(--surface-2)}
  .cve-focusinsp-role.editable:hover svg{color:var(--accent)}
  .cve-focusinsp-meta{font-size:13px;color:var(--ink-2);margin:0}
  .cve-focusinsp-when{font-family:var(--font-data);font-size:12px;color:var(--ink-3);margin:3px 0 0}
  .cve-focusinsp-bullets{display:flex;flex-direction:column;gap:2px;padding:8px 0 4px}
  .cve-focusinsp-bullets .cve-bulrow{align-items:center;padding:6px 0}
  .cve-focusinsp-bullets .cve-bulrow .t{flex:1;min-width:0;font-size:13px;line-height:1.5;color:var(--ink-2);cursor:text;padding:2px 4px;border-radius:3px}
  .cve-focusinsp-bullets .cve-bulrow .t:hover{background:var(--surface-2);color:var(--ink)}
  .cve-focusinsp-bullets .cve-bulrow.off .t{color:var(--ink-3);text-decoration:line-through}
  /* Enfants d'une FAMILLE (compétences / atouts, niveau 2) : libellé + sous-texte. */
  .cve-focusinsp-bullets .cve-bulrow .t strong{display:block;font-weight:600;color:var(--ink)}
  .cve-focusinsp-bullets .cve-bulrow .t em{display:block;font-style:normal;font-size:11px;line-height:1.35;color:var(--ink-3);margin-top:1px}
  .cve-focusinsp-bullets .cve-bulrow.off .t strong{color:var(--ink-3)}
  .cve-bul-editin{flex:1;min-width:0;font:inherit;font-size:13px;line-height:1.5;color:var(--ink);background:var(--surface);border:1px solid var(--accent);border-radius:6px;padding:6px 8px;resize:vertical;min-height:64px;outline:0;box-shadow:var(--ring-focus,none)}
  .cve-focusinsp-add{display:flex;align-items:center;gap:8px;margin:8px 0 0;padding-top:8px;border-top:1px dashed var(--border)}
  .cve-toolsearch{position:relative;flex:1;min-width:0}
  .cve-toolmenu{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:40;max-height:198px;overflow:auto;border:1px solid var(--border);border-radius:8px;background:var(--surface);box-shadow:var(--shadow-popover);padding:4px}
  .cve-toolmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:100%;display:flex;align-items:center;gap:7px;border:0;border-radius:6px;background:transparent;color:var(--ink-2);font:inherit;font-size:13px;text-align:left;padding:7px 8px;cursor:pointer}
  .cve-toolmenu button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
  .cve-toolmenu button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--hover-bg);color:var(--ink)}
  .cve-toolmenu-empty{padding:8px;color:var(--ink-3);font-size:12px}
  .cve-panel-search{display:flex;align-items:center;gap:8px;margin:8px var(--cve-rail-gutter,0) 10px;padding:8px 10px;border:1px solid var(--input-rest-border);border-radius:8px;color:var(--ink-3);cursor:text;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .cve-panel-search.cve-panel-search--cmd{margin:0 0 4px;border-radius:8px}
  .cve-panel-search--tool{margin:0}
  .cve-panel-search input{flex:1;min-width:0;border:0;background:transparent;color:var(--ink);font:inherit;font-size:13px;line-height:1.3;outline:0}
  .cve-panel-search input::placeholder{color:var(--ink-3)}
  .cve-panel-search > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){flex:none;width:22px;height:22px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;color:var(--ink-3);cursor:pointer}
  .cve-panel-search > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){flex:none;width:22px}
  .cve-panel-search > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-2);color:var(--ink)}
  /* Étoile « choix par défaut » : glyphe inchangé, cible de 26 px comme les petits boutons ; la marge négative garde la hauteur de ligne. */
  .fav-star{flex:none;width:26px;height:26px;margin:-6px -8px -6px -4px;display:inline-grid;place-items:center;padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink-4);font-size:13px;line-height:1;cursor:pointer}
  .fav-star.lg{font-size:16px;margin:0}
  .fav-star:hover{background:var(--hover-bg)}
  .fav-star.suggested{color:var(--accent);text-decoration:underline}
  .fav-star[aria-pressed="true"]{color:var(--warn)}
  .cve-focusinsp-actions{display:flex;flex-direction:column;gap:2px;margin:10px 0 0;border-top:1px solid var(--border);padding-top:10px}
  .cve-addrow{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 0}
  .cve-addrow .t{font-size:13px;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-hfield{padding:9px 0;border-bottom:1px solid var(--border)}
  .cve-hfield.off{opacity:.55}
  .cve-hfield-top{display:flex;align-items:center;gap:8px}
  .cve-hfield-top .ic{color:var(--ink-3);display:inline-flex}
  .cve-hfield-top .lbl{flex:1;font-size:13px;font-weight:500;color:var(--ink-2)}
  /* Ligne d'un sous-item d'en-tête : valeur (encadré cliquable + crayon) à gauche,
     toggle slide (afficher/masquer sur le CV) à droite. Pattern unique pour TOUTES
     les lignes du HeaderInspector (cf. sketch Landry). */
  .cve-hfield-row{display:flex;align-items:center;gap:10px;margin-top:5px}
  .cve-hfield-row > .cve-hfield-val{flex:1;margin-top:0;min-width:0}
  .cve-hfield-row > .cve-toggle{flex:0 0 auto}
  .cve-hfield-val{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:5px;padding:6px 9px;border:1px solid var(--border-soft);border-radius:8px;font-size:13px;color:var(--ink);cursor:pointer;background:var(--surface)}
  .cve-hfield-val:hover{border-color:var(--accent)}
  .cve-hfield-val:hover svg{color:var(--accent)}
  .cve-hfield-val > span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-hfield-val .ph{color:var(--ink-3)}
  .cve-hfield-val svg{color:var(--ink-3);flex:none;transition:color var(--dur-fast) var(--ease-out)}
  .cve-hfield .cve-fdate{margin-top:6px}
  /* Barre d'actions sous un champ d'en-tête (compat ascendante — la plupart des lignes
     utilisent maintenant `.cve-hfield-row` à la place). */

  /* Flash de mise au point quand un sous-item du CV est sélectionné (mode Sélection) :
     anneau accent qui s'atténue progressivement, sans bouger la mise en page. */
  @keyframes cveFocusFlash{0%{box-shadow:0 0 0 0 var(--accent-soft);background:var(--accent-soft)}100%{box-shadow:0 0 0 0 transparent;background:transparent}}
  .cve-focusflash{animation:cveFocusFlash 1.4s var(--ease-out) forwards;border-radius:8px}
  .cve-cvrole.cve-restyleflash,
  .cve-accroche.cve-restyleflash,
  .cve-exp.cve-restyleflash .role,
  .cve-exp.cve-restyleflash li,
  .lte-p.cve-restyleflash,
  .lte-sign.cve-restyleflash,
  .lte-email-body p.cve-restyleflash,
  .lte-msg-box p.cve-restyleflash{
    background-color:color-mix(in srgb,var(--accent) 28%,transparent);
    border-radius:6px;
    box-decoration-break:clone;
    -webkit-box-decoration-break:clone;
  }
  .cve-curationflash{
    background-color:color-mix(in srgb,var(--accent) 18%,transparent);
    border-radius:8px;
    box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 24%,transparent);
    box-decoration-break:clone;
    -webkit-box-decoration-break:clone;
    transition:background-color var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out);
  }
  .cve-toolgrp span .cve-curationflash{padding:1px 3px;margin:-1px -3px}
  @media (prefers-reduced-motion: reduce){
    .cve-cvrole.cve-restyleflash,
    .cve-accroche.cve-restyleflash,
    .cve-exp.cve-restyleflash .role,
    .cve-exp.cve-restyleflash li,
    .lte-p.cve-restyleflash,
    .lte-sign.cve-restyleflash,
    .lte-email-body p.cve-restyleflash,
    .lte-msg-box p.cve-restyleflash{background-color:color-mix(in srgb,var(--accent) 22%,transparent)}
    .cve-curationflash{transition:none}
  }
  /* Chips de variantes (en-tête) + toggle Version IA/Ma saisie (exp) */
  .cve-chiprow{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
  .cve-inspcard-when{flex:none;font-family:var(--font-data);font-size:11px;color:var(--ink-3);white-space:nowrap;margin-right:2px}
  /* Pied d'inspecteur : aperçu en direct + Annuler/Appliquer (ancré en bas) */
  /* Mode contour bleu : sections du CV doucement soulignées (cliquables) */
  .cve-cv.docmode,.cve-cv.docmode .cve-page-sheet,.lte-letter.docmode,.lte-msgwrap.docmode,.lte-emailwrap.docmode{outline:1.5px dashed color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:-14px;border-radius:2px}
  /* SIH-68 · le pointillé dit SUR QUOI on agit.
     · onglet « Sections » → une cible par section (ci-dessous, .selmode) ;
     · Régénérer / Ton & longueur / Langue / Mise en page → la cible est le document ENTIER,
       donc UN seul contour, tout autour de la feuille (.docmode). Deux périmètres différents
       ne peuvent pas porter le même signal, sinon le client croit régler une section. */
  /* Le contour se dessine À L'INTÉRIEUR de la feuille (offset négatif) : dehors, il tomberait
     sur le canevas sombre du CV ou le bureau beige de la lettre, où l'encre d'accent ne se voit
     pas. Dans la marge du document, il se lit sur les deux, sans toucher au texte. */
  /* CV PAGINÉ : la feuille blanche visible est `.cve-page-sheet` (positionnée, dessinée APRÈS
     le contour de son parent, qu'elle recouvrait). Chaque page porte donc son propre contour. */
  .cve-cv.selmode .cve-secsel{outline:1px dashed color-mix(in srgb,var(--accent) 30%,transparent);outline-offset:3px;border-radius:6px}
  .cve-cv.selmode .cve-secsel:hover{outline:2px solid var(--accent);outline-offset:3px}
  .cve-cv .cve-secsel.secactive{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}

  /* ═══════════ Option A · châssis tokenisé (header + 2 sidebars + footer) ═══════════ */
  .cve-optA{display:flex;flex-direction:column;height:100%;min-height:560px;background:var(--bg)}
  .cve-hd{flex:0 0 auto;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;padding:8px 12px;background:var(--surface);border-bottom:1px solid var(--border)}
  .cve-hd-l{display:flex;align-items:center;gap:8px;min-width:0}
  .cve-hd-c{display:flex;align-items:center;justify-content:center;gap:2px}
  .cve-hd-r{display:flex;align-items:center;gap:8px;justify-content:flex-end}
  /* SIH-68 · l'identité du document, au centre de l'en-tête, en LECTURE seulement : elle nomme
     ce qu'on regarde. Le poste et l'entreprise viennent de la candidature liée. */
  .cve-hd-docid{display:inline-flex;align-items:baseline;gap:6px;min-width:0;font-size:12px;color:var(--ink-3);white-space:nowrap}
  .cve-hd-docid b{font-weight:600;color:var(--ink)}
  .cve-hd-docrole{min-width:0;overflow:hidden;text-overflow:ellipsis}
  .cve-hd-docorg{font-weight:600;color:var(--ink-2)}
  .cve-body2{flex:1 1 auto;min-height:0;display:flex;background:var(--bg)}
  /* Le chrome « Option A » hérite exclusivement du système Atelier global. */
  .cve-side{--cve-rail-gutter:16px;flex:0 0 auto;display:flex;flex-direction:column;min-height:0}
  .cve-side-r{border-left:1px solid var(--border)}
  /* ── SIH-68 · les TROIS niveaux du volet de travail ────────────────────────────────
     Le volet empile trois choses de nature différente ; sans hiérarchie elles se
     ressemblent et le fil d'Ariane se confond avec le menu.
     1. le MENU — où je travaille (fond creusé, entrée active remontée sur la surface)
     2. le FIL D'ARIANE — où j'en suis dedans (plus petit, plus calme)
     3. le CONTENU — ce que je règle (seule zone qui défile) */

  .cve-side-hd{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px var(--cve-rail-gutter) 11px;border-bottom:1px solid var(--border)}
  .cve-side-hd .t{flex:1;display:flex;align-items:center;gap:7px;font-size:14px;font-weight:600;color:var(--ink);min-width:0;letter-spacing:var(--tracking-tight)}
  .cve-side-hd .t svg{color:var(--accent);flex:none}
  .cve-side-bd{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}
  .cve-side .cve-midhead{background:transparent;border-bottom:1px solid var(--border);padding:11px var(--cve-rail-gutter)}
  .cve-side .cve-midhead h3{color:var(--ink)}
  .cve-side .cve-midhead h3 svg{color:var(--accent)}
  .cve-side .cve-midhead p{color:var(--ink-3)}
  .cve-side .cve-midscroll{flex:1 1 auto;min-height:0;overflow-y:auto;padding:10px 12px}
  .cve-side .cve-fdate{background:var(--surface);color:var(--ink);border-color:var(--border)}
  .cve-side .cve-hfield-val{background:var(--surface)}

  .cve-side .cve-inspcard,.cve-side .cve-expcard,.cve-side .cve-vcard{border-color:var(--content-border);background:var(--content-bg);box-shadow:none}

  .cve-side .cve-reform,.cve-side .cve-editbox{background:var(--content-bg);border-color:var(--content-border)}
  
  .cve-secroot{padding:8px var(--cve-rail-gutter,10px);display:flex;flex-direction:column;gap:3px;overflow-y:auto}
  .cve-secroot-summary{margin:0 var(--cve-rail-gutter) 6px;padding:9px 0}
  .cve-secroot-row{display:flex;align-items:center;gap:9px;width:100%;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;padding:9px 11px;border-radius:8px;cursor:pointer;text-align:left;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}
  .cve-secroot-row:hover{border-color:var(--accent);background:var(--bg-2)}
  .cve-secroot-row .ic{color:var(--accent);display:inline-flex;flex:none}
  .cve-secroot-row .l{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
  .cve-secroot-row .l b{font-weight:600;line-height:1.25}
  .cve-secroot-row .l small{font-size:11px;font-weight:400;color:var(--ink-3);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-secroot-row.off{opacity:.58}
  .cve-secroot-row .c{font-family:var(--font-data);font-size:11px;color:var(--accent)}
  .cve-secroot-row > svg:last-child{color:var(--ink-3);flex:none}
  /* Respiration symétrique dans l'aperçu : le document ne doit jamais toucher le footer. */
  .cve-optA .cve-canvas{flex:1 1 auto;min-width:0;min-height:0;overflow-y:auto;padding:26px 30px;position:relative;display:flex;flex-direction:column;align-items:center;background:radial-gradient(115% 85% at 50% -8%,var(--document-desk-light) 0%,var(--document-desk-deep) 80%);box-shadow:none}
  .cve-ft{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--surface);border-top:1px solid var(--border)}

  /* ── GOAL · corrections éditeur (sidebar large · CV centré · pilule sticky · overlays) ── */
  /* Colonne du DOCUMENT : le bandeau d'état le coiffe, l'aperçu prend le reste. En colonne
     (et non en ligne) depuis SIH-68, pour que le bandeau s'arrête là où le volet commence. */
  .cve-optA .cve-canvas-wrap{position:relative;flex:1 1 auto;min-width:0;display:flex;flex-direction:column}
  .cve-cv .cve-secsel:hover{outline:2.5px solid var(--accent);outline-offset:3px;border-radius:6px}
  .cve-cv .cve-secsel.secactive{outline:3px solid var(--accent);outline-offset:3px;border-radius:6px;box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 20%,transparent)}
  .cve-optA .cve-zoom{display:flex;align-items:center;border:1px solid var(--border);border-radius:8px;overflow:hidden}
  .cve-optA .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){border:0;background:transparent;color:var(--ink-2);font:inherit;font-size:11px;padding:6px 8px;cursor:pointer}
  .cve-optA .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover:not(:disabled){background:var(--bg-2)}
  .cve-optA .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:default}
  .cve-optA .cve-zoom .val{min-width:42px;text-align:center;color:var(--ink-3)}
  .cve-editmode{height:34px;display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);color:var(--ink-2);font:inherit;font-size:12px;font-weight:600;padding:0 11px;cursor:pointer;white-space:nowrap}
  .cve-editmode:hover{background:var(--bg-2)}
  .cve-editmode.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
  /* SIH-68 · rien à modifier encore (document pas généré) : l'interrupteur reste VISIBLE et
     éteint, avec son explication au survol — le cacher ferait croire à un bug. */
  .cve-editmode:disabled{opacity:.5;cursor:not-allowed}
  /* SIH-68 · commandes indisponibles PENDANT l'édition (quitter le document, produire un
     fichier). Visibles et éteintes, avec leur raison au survol : les cacher ferait croire à un
     bug, les laisser actives ferait perdre le fil — ou télécharger un document périmé. */
  [data-edit-blocked]{opacity:.45;cursor:not-allowed}
  .cve-bc{display:inline-flex;align-items:center;gap:3px;border:0;background:transparent;color:var(--accent);font:inherit;font-size:12px;padding:0;cursor:pointer;white-space:nowrap}
  .cve-bc:hover{color:var(--accent-2);text-decoration:underline}
  .cve-bc-sep{color:var(--ink-3);margin:0 1px}
  .cve-bc-cur{display:inline-flex;align-items:center;gap:5px;color:var(--ink);font-weight:500;min-width:0}
  .cve-bc-cur svg{color:var(--accent);flex:none}
  .cve-inspcount,.cve-secroot-row .c{font-family:inherit}
  .cve-editwrap{position:relative}
  /* « Journal de préparation » : coque commune ui-window (DEV-550) avec le rail de sections de
     la fiche candidature (rail sur toute la hauteur, en-tête et contenu à droite). */
  .ui-window.cv-done-window{--bg-2:var(--surface-lumiere);display:grid;grid-template-columns:288px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);grid-template-areas:"rail header" "rail body"}
  .cv-done-window .cdet-content2{min-height:0;overflow-y:auto}
  .cdet-done-logo{display:grid;place-items:center;width:36px;height:36px;border-radius:8px;background:color-mix(in srgb,var(--fg-inverse) 12%,transparent);color:var(--fg-inverse);flex:0 0 auto}
  .cdet-content2 .cve-midhead{padding:4px 2px 14px;border:0;background:none}
  .cdet-content2 .cve-pgroup:first-child{margin-top:0}
  /* Carte de l'offre (format Décision, DEV-550) : contenu seulement, la coque vient de DecisionModal. */
  .cve-offey{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);margin:14px 0 6px;font-weight:500}
  .cve-offbd>.cve-offey:first-child{margin-top:0}
  .cve-offsum{font-size:13px;color:var(--ink-2);line-height:1.6;margin:0}
  .cve-offcards{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin:14px 0}
  .cve-offmc{background:var(--bg-2);border-radius:10px;padding:11px 13px}
  .cve-offmc .l{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3)}
  .cve-offmc .n{font-size:22px;font-weight:600;color:var(--ink);margin-top:3px}
  .cve-offmc .n span{font-size:13px;color:var(--ink-3)}
  .cve-offmc .bar{height:5px;border-radius:3px;background:var(--border);margin-top:7px;overflow:hidden}
  .cve-offmc .bar i{display:block;height:100%;background:var(--accent);border-radius:3px}
  .cve-offmr{display:flex;gap:7px;font-size:13px;color:var(--ink-2);padding:4px 0;line-height:1.5}
  .cve-offmr svg{color:var(--accent);flex:none;margin-top:1px}
  .cve-offkw{display:flex;flex-wrap:wrap;gap:6px}
  .cve-offkw .hit{display:inline-flex;align-items:center;gap:4px;font-size:12px;background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:3px 10px}
  .cve-offhint{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:6px;min-width:0}

  /* ══════════ MODALE C · famille « décision » (SIH-63, décision Landry 2026-07-31) ══════════
     TROISIÈME famille de pop-up, créée volontairement. Le POURQUOI de chaque parti pris de mise
     en page est écrit UNE fois, dans l'organisme qui la porte :
     app/_ui/modules/ui/organisms/DecisionModal.jsx. Ne pas le recopier ici — la copie qui
     vivait à cet endroit avait déjà menti sur la largeur au bout de deux itérations.
     Ci-dessous, seulement les valeurs. Zéro couleur, ombre ou rayon inventés : tout vient des
     tokens (regle-sobriete-visuelle). */
  .mdc-ov{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:24px 24px min(9vh,96px)}
  .mdc{width:min(720px,92vw);max-height:88vh;display:flex;flex-direction:column;background:var(--window-frame-bg);border:1px solid var(--window-frame-bg);border-radius:16px;overflow:hidden;box-shadow:var(--shadow-overlay)}
  /* UNE SEULE COLONNE : en-tête, corps et liste partagent le même bord gauche (26 px). L'icône,
     posée en colonne à gauche du titre, imposait sa gouttière (83 px mesurés) à tout le corps —
     un tiers de carte restait vide sous elle, et chaque rangée y ajoutait sa propre icône. */
  /* DEV-572 · L'en-tête est une RANGÉE, comme l'identité de la fiche candidature : la marque, puis le
     surtitre au-dessus du titre, tenus à la hauteur de la marque ; la fermeture ferme la rangée.
     Plus de vide à droite de l'écusson, plus de titre seul sur sa ligne. Le corps étant une feuille à
     part, la gouttière de la marque ne contamine plus son bord gauche. */
  .mdc-hd{flex:0 0 auto;display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:14px;row-gap:2px;align-items:center;padding:18px 18px 16px 22px}
  /* DEV-572 · La feuille : ce qui va se passer est posé sur une feuille blanche, question et issues sur le cadre. */
  .mdc-bd:not(:empty){margin:0 var(--window-sheet-inset);background:var(--window-sheet-bg);border:1px solid var(--window-sheet-border);border-radius:var(--window-sheet-radius)}
  .mdc-top{display:contents}
  /* La MARQUE du sujet : l'écusson de l'entreprise quand la décision porte sur un dossier réel,
     sinon l'icône d'état seule. Un pictogramme abstrait flottant ne disait rien du dossier ;
     les initiales l'ancrent, comme sur la carte du tableau et dans l'éditeur. */
  .mdc-mark{position:relative;display:inline-flex;flex:none;grid-column:1;grid-row:1 / span 2;align-self:center}
  /* DEV-572 · La pastille donne le ton du moment. Sur le cadre pierre, le bleu à 10 % disparaissait :
     la pastille neutre prend un bleu plus présent. Une fenêtre dont le geste final (dernière réponse du pied) détruit (bouton
     .danger) prend le ton avertissement d'elle-même, même si l'appelant ne l'a pas déclaré. */
  .mdc-ic{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:var(--mdc-ic-bg);color:var(--accent)}
  :is(.mdc.warn,.mdc:has(.mdc-ft>.r>.danger:last-child)) .mdc-ic{background:var(--warn-soft);color:var(--warn-ink)}
  /* L'état se pose SUR la marque : il nomme la nature du moment sans voler la vedette au sujet. */
  .mdc-badge{position:absolute;right:-6px;bottom:-6px;display:grid;place-items:center;width:22px;height:22px;border-radius:8px;background:var(--surface);border:1px solid var(--border);color:var(--ink-3);box-shadow:0 0 0 2px var(--surface)}
  :is(.mdc.warn,.mdc:has(.mdc-ft>.r>.danger:last-child)) .mdc-badge{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 35%,var(--border))}
  .mdc-t{grid-column:2;grid-row:2;align-self:start;margin:0;font-size:16px;font-weight:600;line-height:1.3;letter-spacing:-.005em;color:var(--ink);max-width:none}
  .mdc-hd:not(:has(.mdc-s))>.mdc-t{grid-row:1 / span 2;align-self:center}
  .mdc-s{grid-column:2;grid-row:1;align-self:end;min-width:0;margin:0;font-size:12px;line-height:1.35;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* Faits du dossier : UNE ligne de texte gris, séparateurs inline — jamais des pastilles. */
  .mdc-facts{grid-column:2 / -1;grid-row:3;margin:6px 0 0;font-size:13px;line-height:1.5;color:var(--ink-4)}

  /* La fermeture ferme la première ligne : poussée à droite par la marge automatique, sans
     élément vide en guise de cale quand le sujet n'a pas de sous-titre. */
  .mdc-x{grid-column:3;grid-row:1 / span 2;align-self:center;flex:none;margin-left:auto;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:8px;background:transparent;color:var(--ink-3);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}
  .mdc-x:hover:not(:disabled){background:var(--bg-2);color:var(--ink)}
  .mdc-x:disabled{opacity:.5;cursor:default}
  /* Respiration GÉNÉREUSE entre la question et ce qu'elle entraîne : c'est la séparation la plus
     large de la carte, parce que c'est le seul vrai changement de propos. */
  .mdc-bd{flex:1 1 auto;min-height:0;overflow-y:auto;padding:22px 26px 26px}
  .mdc-sub{margin:0 0 12px;font-size:13px;line-height:1.5;color:var(--ink-2)}
  .mdc-ey{font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:500;color:var(--ink-3);margin:0 0 10px}
  /* Les conséquences sont la SUBSTANCE : plus grandes que le sous-titre, qui n'est qu'un rappel
     de contexte. Marqueur en encre méta, pas en accent — la hiérarchie vient de l'air et de la
     taille, jamais de l'encre (DESIGN.md). Intervalle SERRÉ à l'intérieur de la liste. */
  .mdc-row{display:flex;gap:11px;align-items:flex-start;font-size:16px;line-height:1.5;color:var(--ink-2);padding:5px 0}
  .mdc-row svg{flex:none;margin-top:3px;color:var(--ink-3)}
  .mdc-row.warn{color:var(--ink)}
  .mdc-row.warn svg{color:var(--warn)}
  /* Un DOCUMENT nommé : l'icône type l'objet (elle porte une information, contrairement à un
     pictogramme posé à côté d'une phrase), le nom porte l'encre, la méta reste du texte gris
     inline — jamais une pastille (DESIGN.md). */
  .mdc-doc{display:flex;align-items:flex-start;gap:11px;padding:10px 0;font-size:16px;line-height:1.5}
  .mdc-doc svg{flex:none;margin-top:2px;color:var(--ink-3)}
  .mdc-doc .b{min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}
  .mdc-doc .n{font-weight:500;color:var(--ink)}
  .mdc-doc .m{font-size:13px;color:var(--ink-4)}
  /* Le TITRE réel du document — celui du fichier envoyé. Mono, parce que c'est un nom de
     fichier et pas de la prose ; sur sa propre ligne, tronqué proprement s'il déborde. */
  .mdc-doc .f{flex-basis:100%;min-width:0;font-family:var(--font-sans);font-size:12px;line-height:1.45;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mdc-doc + .mdc-doc{border-top:1px solid var(--border-soft)}

  /* Prose (pop-up qui rappelle un fait plutôt que d'énumérer) : même corps que la liste. */
  .mdc-p{margin:0;font-size:16px;line-height:1.6;color:var(--ink-2)}
  .mdc-p + .mdc-p{margin-top:12px}
  .mdc-row b,.mdc-p b{font-weight:500;color:var(--ink)}
  /* Précision de fin : recule d'un cran, et se détache par l'air. */
  .mdc-note{margin:18px 0 0;font-size:14px;line-height:1.55;color:var(--ink-3)}
  /* L'UNIQUE filet de la carte : il annonce la zone de choix. */
  .mdc-ft{flex:0 0 auto;display:flex;align-items:center;gap:12px;padding:16px 26px;border-top:var(--mdc-foot-border);background:var(--mdc-foot-bg)}
  .mdc-ft .l{display:flex;gap:8px;min-width:0}
  .mdc-ft .r{display:flex;gap:8px;flex:none;margin-left:auto}
  /* ÉTROIT : trois actions ne tiennent pas côte à côte et retomberaient en escalier ragged.
     On empile pleine largeur, décision d'abord — elle passe sous le pouce, et l'ordre de lecture
     reste « ce que je fais » puis « ce que je reporte ». */
  @media (max-width:560px){
    .mdc-ov{padding:14px}
    .mdc-bd{padding:18px 20px 22px}
    .mdc-hd{padding:14px 14px 14px 18px}
    .mdc-ft{flex-direction:column-reverse;align-items:stretch;gap:8px;padding:14px 20px}
    /* Empilé, l'ordre doit rester « ce que je réponds » puis « ce que je peux aller faire »,
       décision en tête, sous le pouce. Les deux groupes s'inversent donc ENSEMBLE : sans le
       column-reverse sur les décisions, la principale se retrouvait prise en sandwich. */
    .mdc-ft .l{flex-direction:column;width:100%;gap:8px}
    .mdc-ft .r{flex-direction:column-reverse;width:100%;margin:0;gap:8px}
    .mdc-ft button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:100%;justify-content:center}
  .mdc-ft button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
  }

  /* ── Verrou « candidature envoyée » (SIH-59) ──────────────────────────────
     Deux ajouts au système, assumés et validés sur maquette.

     1. [data-locked] · l'état ÉTEINT d'une action de production. Le bouton n'est
        volontairement PAS `disabled` : un bouton mort ne dit rien au client, celui-ci
        reste cliquable pour ouvrir l'explication. Les cacher ferait croire à un bug,
        les laisser actives ferait perdre le fil par accident.
     2. .cve-docstate · le bandeau d'état du document, sous le header. Il reprend les
        tons sémantiques existants (ambre figé / vert en préparation) : aucun filet
        coloré sur une carte, aucune nouvelle couleur (regle-sobriete-visuelle). */
  [data-locked]{color:var(--ink-5);border-color:var(--border-soft);cursor:pointer}
  [data-locked] svg{color:var(--ink-5)}
  .cve-editmode[data-locked],.cve-editmode[data-locked]:hover{background:var(--surface);color:var(--ink-5);border-color:var(--border-soft)}

  .cve-docstate{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:7px 14px;font-size:12px;border-bottom:1px solid var(--border);background:var(--warn-soft);color:var(--warn-ink)}
  .cve-docstate svg{flex:none;color:currentColor}
  .cve-docstate .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-docstate .t b{font-weight:600}
  /* La porte de sortie reste discrète : c'est une reprise volontaire, pas un appel à cliquer. */
  /* Conséquences énumérées dans la pop-up de confirmation. */

  /* ── Option A · compléments de chrome (header, tiroirs, pied) ─────────────
     Ce bloc était l'écran anti-thème-sombre : il redéclarait en clair tout ce que
     le châssis « Option A » posait déjà plus haut. Depuis la tokenisation (SIH-44),
     les deux moitiés disaient la même chose ; les 71 redéclarations sans effet ont
     été purgées (SIH-9). Ne restent ici que les règles qui CHANGENT vraiment
     quelque chose par rapport au châssis — chacune est un ajout ou un écart assumé.
     Le DOCUMENT au centre garde sa couleur (CV gris · lettre beige). */
  /* « L'offre » remontée dans le header (haut-gauche) : bouton clair bordé. */
  /* Dans l'éditeur, le bouton « mode édition » prend la bordure pleine (pas soft). */
  .cve-optA .cve-editmode{border:1px solid var(--border);color:var(--ink-2);background:var(--surface)}
  .cve-optA .cve-editmode:hover{background:var(--bg-2);border-color:var(--border-strong);color:var(--ink)}
  .cve-optA .cve-editmode.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
  /* Les tiroirs latéraux posent une surface blanche par-dessus le fond de l'éditeur. */
  .cve-side{background:var(--surface)}
  .cve-side .cve-midhead h3 .cve-midhead-hint svg{color:currentColor}
  /* Cases à cocher et pastilles : surface pleine dans les tiroirs (le châssis les met à plat). */
  .cve-secroot-row{border:1px solid var(--border)}
  
  .cve-dlwrap{position:relative}

  /* aperçu : zoom + plein écran + tooltip d'alignement */
  .cve-zoom{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:2px}
  .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;background:transparent;color:var(--ink-2);border-radius:6px;cursor:pointer}
  .cve-zoom button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:26px}
  .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover:not(:disabled){background:var(--bg-2);color:var(--ink)}
  .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
  .cve-zoom span{min-width:38px;text-align:center;font-family:var(--font-data);font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums}
  .cve-zoom button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).val{width:auto;min-width:42px;padding:0 7px;font-family:var(--font-data);font-size:11px;font-weight:500;color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap}
  .cve-zoom button:where(.btn,.ui-close-button,.text-link,.card-options-trigger).val{width:auto;min-width:42px}
  .cve-fmtopt{display:flex;align-items:flex-start;gap:11px;width:100%;text-align:left;padding:12px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);cursor:pointer;margin-bottom:8px;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}
  .cve-fmtopt:hover{background:var(--hover-bg)}
  .cve-fmtopt.on{border-color:var(--accent);background:var(--select-bg);color:var(--select-ink)}
  .cve-fmtopt .cve-vicon{flex:0 0 auto;margin-top:1px}
  .cve-fmtopt-tx{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1 1 auto}
  .cve-fmtopt-tx b{font-size:13px;font-weight:600;color:var(--ink)}
  .cve-fmtopt-tx span{font-size:12px;color:var(--ink-3);line-height:1.45}
  .cve-fmtopt-ck{color:var(--accent);flex:0 0 auto;margin-top:2px}

  /* plein écran : le MÊME éditeur (barre à pastilles + tiroir + aperçu) en overlay pleine page */
  @keyframes lteFocusIn{from{opacity:0}to{opacity:1}}

  /* aperçu PDF — la lettre telle qu'elle sera imprimée / envoyée */
  .lte-pdf{position:fixed;inset:0;z-index:var(--z-modal-nested);display:flex;flex-direction:column;background:#3a3d43;animation:lteFocusIn var(--dur-base) var(--ease-out)}
  .lte-pdf .lte-letter{margin:0;border:0;border-radius:3px;box-shadow:0 22px 70px rgba(0,0,0,.5)}
  .lte-pdf .cve-cv{margin:0;border-radius:3px;box-shadow:0 22px 70px rgba(0,0,0,.5)}
  .lte-pdf .lte-emailwrap,.lte-pdf .lte-msgwrap{margin:0}
  .lte-pdf .lte-email,.lte-pdf .lte-msg{box-shadow:0 22px 70px rgba(0,0,0,.5)}
  .lte-pdf .mark{background:transparent !important;border:0 !important;padding:0 !important;border-radius:0 !important;color:inherit !important}
  /* Document « propre » : aucun surlignage d'aide à l'édition dans l'aperçu d'envoi */
  .lte-pdf .cve-as-skill.add{background:transparent !important;padding:0 !important;margin:0 !important;border-radius:0 !important}
  .lte-pdf .cve-as-skill.add b{color:inherit !important}
  .lte-pdf .cve-exp.focus{background:transparent !important;box-shadow:none !important}
  /* Version manuelle rendue dans l'aperçu PDF : neutraliser l'échelle de l'éditeur */
  .lte-pdf .cve-pdfmanual .cve-cvwrap{height:auto !important}
  .lte-pdf .cve-pdfmanual .cve-cvscale{transform:none !important}

  /* bibliothèque de CV */

  /* barre d'outils de l'aperçu */
  .cve-prevtools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}

  /* dropdowns compacts (format d'envoi, zoom) — un bouton qui ouvre un menu vertical */
  /* ruban d'outils (style Word) — groupes avec libellé sous chaque groupe */
  .cve-ptgl{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:12px;color:var(--ink-3);border:1px solid var(--border-soft);border-radius:8px;padding:6px 9px;background:var(--surface);cursor:pointer}
  .cve-ptgl:hover{border-color:var(--border-strong)}
  .cve-ptgl.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}

  /* menu télécharger */
  .cve-dlwrap{position:relative}
  .cve-dlmenu{position:absolute;top:calc(100% + 6px);right:0;width:250px;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;z-index:var(--z-menu)}
  /* Popover « Disposition du menu » */

  .cve-dlcheck{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--good-ink);background:var(--good-soft);border-radius:8px;padding:8px 10px;margin-bottom:4px}
  /* Format de téléchargement : titre + sous-titre, donc un peu plus d’air. */
  .cve-dlname{font-family:var(--font-sans);font-size:11px;color:var(--ink-4);padding:8px 10px 4px;border-top:1px solid var(--border);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  /* Sous-dossiers par entreprise (bibliothèque Lettre & CV) */
  .cve-candgrps{display:flex;flex-direction:column;gap:34px;max-width:none;margin:0 auto}
  .cve-candgrp{display:flex;flex-direction:column;gap:10px}
  .cve-candgrp-head{display:flex;align-items:center;gap:12px;padding-bottom:11px;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,var(--border-strong))}
  .cve-candgrp-lg{flex:0 0 auto;width:34px;height:34px;border-radius:8px;display:grid;place-items:center;background:var(--bg-2);border:1px solid var(--border);font-family:var(--font-sans);font-size:12px;font-weight:600;color:var(--ink-2)}
  .cve-candgrp-id{flex:1 1 auto;min-width:0}
  .cve-candgrp-id b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600;color:var(--ink);line-height:1.25}
  .cve-candgrp-id>span{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--ink-3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-candgrp-id .dot{color:var(--border-strong)}
  .cve-candgrp-scores{display:flex;align-items:center;gap:7px;padding:0 11px;border-left:1px solid var(--slate-300);white-space:nowrap}
  .cve-candgrp-scores span{font-size:11px;color:var(--ink-3)}
  .cve-candgrp-scores b{font-family:var(--font-data);font-size:12px;font-weight:500;color:var(--ink)}
  .cve-candgrp-scores i{font-style:normal;color:var(--border-strong)}
  .cve-candgrp-actions{display:flex;flex:none;align-items:center;gap:6px;margin-left:5px}
  .cve-dlall{width:286px}
  .cve-dlall-hd{padding:3px 8px 9px}
  .cve-dlall-hd b{display:block;font-size:13px;font-weight:600;color:var(--ink)}
  .cve-dlall-hd>span{display:block;font-size:11px;color:var(--ink-3);margin-top:3px;line-height:1.4}
  .cve-dlall-list{display:flex;flex-direction:column;gap:1px;border-top:1px solid var(--border);padding-top:5px;margin-bottom:8px}
  .cve-dlchk{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:8px;position:relative}
  .cve-dlchk>.ui-choice{flex:1;min-width:0;gap:9px}
  .cve-dlchk .ui-choice__label{flex:1 1 auto;display:flex;align-items:center;gap:9px;min-width:0}
  .cve-dlchk:hover{background:var(--bg-2)}
  .cve-dlchk .ft{color:var(--ink-3);flex:0 0 auto}
  .cve-dlchk .k{font-size:11px;font-weight:600;color:var(--ink-3);width:40px;flex:0 0 auto}
  .cve-dlchk .fmt{font-size:13px;color:var(--ink);flex:1 1 auto;display:flex;align-items:center;gap:7px}
  .cve-dlall-main{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:0;background:var(--accent);color:var(--fg-inverse);border-radius:8px;padding:9px 11px;cursor:pointer;font:inherit;font-size:13px;font-weight:600;transition:background-color var(--dur-fast) var(--ease-out)}
  .cve-dlall-main:hover{background:var(--accent-600)}
  .cve-dlall-main:disabled{opacity:.5;cursor:not-allowed}

  /* SIH-414 · bibliothèque documentaire : la maquette validée est le contrat. */
  .cve-document-library{padding-inline:calc(var(--app-reading-inset) - var(--space-5))}
  .cve-library-scroll{padding-top:0;padding-inline:var(--space-5)}
  .cve-library-header{position:sticky;top:0;z-index:10;margin-inline:calc(-1 * var(--space-5));padding:16px var(--space-5) var(--space-5);background:var(--bg)}
  .cve-library-header .cve-library-tools{margin-bottom:0}
  .cve-library-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin:0 0 14px}
  .cve-library-heading h2{margin:0;font-size:22px;font-weight:650;letter-spacing:-.025em;color:var(--ink)}
  .cve-library-result-count{padding-top:5px;white-space:nowrap;color:var(--ink-3);font-family:var(--font-data);font-size:12px}
  .cve-library-result-count b{color:var(--ink);font-weight:500}
  .cve-library-tools{display:grid;grid-template-columns:minmax(280px,1fr) auto;align-items:center;gap:10px;margin-bottom:27px;padding:10px 0;background:transparent}
  .cve-library-search{height:36px;display:flex;align-items:center;gap:9px;padding:0 11px;border-radius:var(--radius-md);color:var(--ink-3)}
  .cve-library-search input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--ink);font:inherit;font-size:13px}
  .cve-library-search input::placeholder{color:var(--ink-3);opacity:1}
  .cve-library-search input::-webkit-search-cancel-button{-webkit-appearance:none}
  .cve-library-search button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .cve-library-search button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:24px;height:24px;display:grid;place-items:center;padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink-3);cursor:pointer}
  .cve-library-search button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:24px}
  .cve-library-search button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-2);color:var(--ink)}
  .cve-library-controls{display:flex;align-items:center;gap:8px}
  .cve-library-controls .tabbar.cve-libfilter{margin:0}
  .cve-library-sort{position:relative;min-width:174px}
  .cve-library-sort-trigger{width:100%;height:36px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 10px;border-radius:var(--radius-md);color:var(--ink-2);font:inherit;font-size:12px;cursor:pointer}
  .cve-library-sort-trigger:hover,.cve-library-sort.open .cve-library-sort-trigger{background:var(--bg-2)}
  .cve-library-sort-trigger svg{color:var(--ink-4);transition:transform var(--dur-fast) var(--ease-out)}
  .cve-lib2-grid.cve-lib2-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr)) minmax(280px,1.2fr);align-items:stretch;gap:var(--space-4);width:100%;max-width:none;margin:0;padding:0;overflow:visible;scroll-snap-type:none}
  .cve-lib2-row>.cve-candfollow,.cve-lib2-row>.cve-card{width:auto;min-width:0;max-width:none;flex:none;scroll-snap-align:none}
  .cve-library-document{min-height:0}
  .cve-library-document-pocket{height:calc(154px + 10px + 10.5px * 1.35);margin:11px 11px 0;flex:0 0 auto;cursor:pointer;outline:1px solid transparent;outline-offset:0;transition:outline-color var(--dur-fast) var(--ease-out)}
  .cve-library-document-pocket:hover{outline-color:var(--border-input-hover)}
  .cve-library-document-pocket:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .cve-library-preview-mount{display:block;width:100%;height:100%}
  .cve-library-document .cve-card-body{flex:1;padding:12px 13px var(--space-5)}
  .cve-library-document .cve-card-foot{justify-content:space-between;margin-top:auto;padding-top:var(--space-5);border-color:var(--border)}
  .cve-document-footer{position:relative}
  .cve-document-metadata{position:relative;display:block;flex:1;min-width:0;color:var(--ink-2);font-size:13px;line-height:1;white-space:nowrap}
  .cve-document-metadata-content{display:inline-flex;align-items:center;gap:var(--space-3);width:max-content;height:36px}
  .cve-document-date{display:inline-flex;align-items:center;gap:5px}
  .cve-document-date.cve-info{position:static;margin:0;color:inherit}
  .cve-document-date:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--ring-focus)}
  .cve-document-date .cve-info-tip{top:auto;bottom:calc(100% + var(--space-3));left:0;max-width:min(240px,100%);white-space:normal}
  .cve-document-date-short{display:none}
  .cve-document-metadata[data-mode="date"] .cve-document-date-full{display:none}
  .cve-document-metadata[data-mode="date"] .cve-document-date-short{display:inline}
  .cve-document-metadata[data-mode="icons"] time{display:none}
  .cve-document-footer-actions{display:inline-flex;align-items:center;gap:var(--space-3);flex:0 0 auto}
  .cve-lib2 .edge.card-options-trigger{background:color-mix(in srgb,var(--surface-2) 40%,var(--bg-2))}
  .cve-lib2 .edge.card-options-trigger:is(:hover,[aria-expanded="true"]):where(:not(:disabled,[aria-disabled="true"])){background:color-mix(in srgb,var(--bg-2) 80%,var(--border-strong))}
  .cve-library-document .document-preview-title-line strong{font-size:14px;font-weight:650}
  .cve-library-document .document-preview-meta{margin-top:2px}
  .cve-candfollow{container:document-followup / inline-size;cursor:pointer;position:relative;z-index:0;display:flex;min-width:0;flex-direction:column;overflow:visible;border-radius:var(--radius-lg);background:var(--content-bg);transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .cve-candfollow:has(.cdet-stage-menu){z-index:calc(var(--z-menu) + 2)}
  .cve-library-document[data-card-action]:hover,.cve-candfollow:hover,
  .cve-library-document[data-card-action]:focus-within,.cve-candfollow:focus-within{background:var(--content-hover-bg);box-shadow:none}
  .cve-candfollow-main{display:flex;width:100%;min-height:0;flex:1;flex-direction:column;padding:var(--space-5) var(--space-5) 0;color:inherit}
  .cve-candfollow-head{display:flex;width:100%;align-items:center;gap:10px;padding:0;border:0;border-radius:var(--radius-md);background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}
  .cve-candfollow-head:hover{background:var(--bg-2)}
  .cve-candfollow-head:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .cve-candfollow-head>span:last-child{display:flex;min-width:0;flex-direction:column}
  .cve-candfollow-head b{font-size:14px;font-weight:650;line-height:1.25;color:var(--ink)}
  .cve-candfollow-head small{margin-top:2px;font-size:12px;color:var(--ink-3)}
  .cve-candfollow-ic{display:grid;width:34px;height:34px;flex:0 0 auto;place-items:center;border:1px solid var(--border);border-radius:8px;background:var(--bg-2);color:var(--ink-3)}
  .cve-lib2 :is(.document-preview-kind-icon,.cve-candfollow-ic){box-sizing:border-box;border:1px solid var(--border);background:var(--bg-2);box-shadow:none}
  .cve-lib2 .cve-candfollow-ic.cve-candfollow-ic--logo,.cve-candfollow-ic--logo{border:0;background:none}
  .cve-candfollow-ic--logo>.logo{width:34px;height:34px}
  .cve-candfollow-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3);margin-top:var(--space-5)}
  .cve-candfollow-fact{display:flex;width:100%;height:100%;min-width:0;flex-direction:column;gap:3px;padding:9px 10px;border:1px solid color-mix(in srgb,var(--border) 50%,var(--border-strong));border-radius:8px;background:var(--bg);color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}
  .cve-candfollow-fact:hover,.cve-candfollow-fact[aria-expanded="true"]{border-color:var(--border-strong);background:var(--bg-2)}
  .cve-candfollow-fact:focus-visible{outline:0;box-shadow:var(--ring-focus)}
  .cve-candfollow-fact small{font-size:11px;color:var(--ink-4)}
  .cve-candfollow-fact b{display:flex;min-width:0;align-items:center;gap:6px;color:var(--ink);font-size:12px;font-weight:600;white-space:nowrap}
  .cve-fact-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-candfollow-fact b>svg:last-child{margin-left:auto;flex:0 0 auto;color:var(--ink-4)}
  .cve-candfollow-stage-pick{display:block;min-width:0}
  .cve-candfollow-stage-pick .cdet-stage-menu{top:auto;bottom:calc(100% + 5px);min-width:200px;background:var(--focus-popover-surface)}
  .cve-candfollow-actions{display:flex;justify-content:flex-end;gap:var(--space-3);margin:var(--space-5);padding-top:var(--space-5);border-top:1px solid var(--border)}
  /* Placement seulement : les deux actions sont des Btn de 36 px (size="lg"). */
  .cve-candfollow-actions .btn{min-width:0;max-width:100%;flex:1 1 0}
  .cve-candfollow-actions[data-mode="icons"] .btn{flex:0 0 36px}
  .cve-candfollow-actions[data-measuring] .btn{width:max-content;max-width:none;flex:0 0 auto}
  .cve-library-loading .cve-card{cursor:default}
  .cve-library-loading .cve-library-document-pocket,.cve-library-loading .cve-card-body>span{border-radius:var(--radius-md);background:var(--bg-2)}
  .cve-library-loading .cve-card-body>span{display:block;height:14px;width:75%}
  .cve-library-loading .cve-card-body>span:last-child{width:40%;margin-block:12px}
  @container document-library (max-width:960px){
    .cve-library-tools{grid-template-columns:1fr}
    .cve-library-controls{justify-content:space-between}
  }
  @container document-library (max-width:780px){
    .cve-lib2-grid.cve-lib2-row{grid-template-columns:repeat(2,minmax(0,1fr))}
    .cve-lib2-row>.cve-candfollow{grid-column:1/3}
  }
  @container document-library (max-width:720px){
    .cve-candgrp-scores{display:none}
  }
  @container document-library (max-width:480px){
    .cve-candgrp-id>span{display:none}
  }
  @container document-followup (min-width:620px){
    .cve-candfollow-facts{grid-template-columns:repeat(4,minmax(0,1fr))}
  }
  @container document-library (max-width:520px){
    .cve-lib2-head.row{align-items:flex-start;flex-direction:column}
    .cve-lib2-head.row h2{white-space:normal}
    .cve-library-heading{display:grid;gap:8px}
    /* L’aide reste dans la largeur du titre, même au zoom, sans scroll invisible. */
    .cve-library-heading h2{position:relative}
    .cve-library-heading .cve-info{position:static}
    .cve-library-heading .cve-info-tip{max-width:100%;box-sizing:border-box}
    .cve-library-result-count{padding-top:0}
    .cve-library-controls{align-items:stretch;flex-direction:column}
    .cve-library-controls .tabbar.cve-libfilter{width:100%}
    .cve-library-sort{width:100%}
    .cve-lib2-grid.cve-lib2-row{grid-template-columns:1fr}
    .cve-lib2-row>.cve-candfollow{grid-column:auto}
  }

  /* SIH-363 : composition validée du dossier, deux niveaux, géométrie stable. */
  .cve-top[data-document-workspace]{gap:16px;position:relative}
  .cve-top[data-document-workspace]{--cve-crumbs-max:32%}
  .cve-top[data-document-workspace] .cve-crumbs{flex:0 0 auto;max-width:var(--cve-crumbs-max)}
  .cve-top[data-document-workspace] .cve-crumb-return .cve-crumb-lbl{display:none}
  .cve-top[data-document-workspace] .cve-leaf-center{position:absolute;left:50%;transform:translate(-50%,-50%);margin:0;min-width:0;max-width:40%}
  /* Le bloc du document rétrécit dans sa limite de 40 % : un poste long se tronque au lieu de déborder. */
  .cve-top[data-document-workspace] .cve-crumb-leaf{flex:0 1 auto;max-width:100%;background:none;padding:0;gap:9px;min-width:0}
  /* DEV-568 · Identité du contexte (éditeur de documents et carnet du Vault) : une seule pièce. */
  .context-identity{display:inline-flex;align-items:center;gap:9px;min-width:0;max-width:100%}
  .context-identity>:is(.logo,.vc-carnet-logo-wrap,svg){flex:0 0 auto}
  .context-identity__name{flex:0 0 auto;max-width:200px;font-size:14px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .context-identity__role{min-width:0;font-size:12px;font-weight:400;color:var(--sidebar-fg-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* Centrage optique (DEV-568) : l'œil se cale sur la fenêtre blanche, pas sur la bande. La
     fenêtre n'a de retrait qu'à droite (--screen-inset) : son axe est une demi-marge plus à
     gauche que celui de la bande. Le TEXTE est centré sur cet axe (le nom, et le poste quand
     l'éditeur l'affiche : l'œil juge toute la ligne lue, un poste accroché à droite décentrait
     l'ensemble de près de 100 px) ; le logo se pose à sa gauche, hors du calcul. */
  /* Largeur du texte : déduite du plafond du fil d'Ariane (--cve-crumbs-max), symétrique de
     part et d'autre de l'axe, moins le logo posé (33 px) et une respiration : 2 × 3,125rem. */
  .cve-top[data-document-workspace] .cve-leaf-center{transform:translate(calc(-50% - var(--screen-inset) / 2),-50%);max-width:calc(100% - 2 * var(--cve-crumbs-max) - 6.25rem)}
  :is(.sec-head-identity,.cve-top[data-document-workspace] .cve-leaf-center) .context-identity{position:relative;overflow:visible}
  :is(.sec-head-identity,.cve-top[data-document-workspace] .cve-leaf-center) .context-identity>:first-child:not(.context-identity__name){position:absolute;right:calc(100% + 9px);top:50%;transform:translateY(-50%)}
  .cve-top[data-document-workspace]>.capture-actions{margin-left:auto}
  .document-context-bar{--screen-context-h:52px;flex:0 0 auto;padding:0 20px;gap:24px;border-bottom-color:var(--border-strong)}
  .document-context-bar .screen-context-action{gap:12px;margin-left:auto}
  .document-context-tabs{height:100%;flex-shrink:0;flex-wrap:nowrap;gap:12px}
  .document-context-tabs[data-variant="souligne"] .tabbar-btn{padding:0 var(--space-5);min-width:106px;gap:9px;font-size:14px;flex-shrink:0}
  .document-context-tabs .tabbar-btn[data-kind="cv"]{--document-tab-accent:var(--doc-cv-ink);--document-tab-bg:var(--doc-cv)}
  .document-context-tabs .tabbar-btn[data-kind="lettre"]{--document-tab-accent:var(--tag-green-ink);--document-tab-bg:var(--tag-green)}
  .document-context-tabs .tabbar-btn[data-kind="offre"]{--document-tab-accent:var(--tag-cyan-ink);--document-tab-bg:var(--tag-cyan)}
  .document-context-tabs .tabbar-btn[data-kind="journal"]{--document-tab-accent:var(--ink-2);--document-tab-bg:var(--bg-2);--document-tab-icon-bg:var(--bg-2);--document-tab-icon-hover-bg:color-mix(in srgb,var(--bg-2) 90%,var(--ink))}
  .document-context-tabs[data-variant="souligne"] .tabbar-btn{align-self:center;height:36px;border-radius:var(--radius-md);font-weight:500;color:var(--ink-2);--tabbar-selected-bg:color-mix(in srgb,var(--ink) 8%,var(--surface));--tabbar-selected-ink:var(--ink);--tabbar-selected-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 18%,transparent);--tabbar-selected-icon-bg:transparent;--tabbar-indicator-height:0px;--tabbar-hover-bg:var(--surface-2)}
  .document-context-tabs .tabbar-btn>svg{width:18px;height:18px;padding:5px;box-sizing:content-box;border-radius:var(--radius-md);background:var(--document-tab-icon-bg,color-mix(in srgb,var(--document-tab-bg) 35%,var(--surface)));color:var(--document-tab-accent)}
  .document-context-tabs .tabbar-btn[aria-selected="false"]:hover:not(:disabled):not([aria-disabled="true"])>svg{background-color:var(--document-tab-icon-hover-bg,var(--document-tab-bg))}
  .document-context-tabs .tabbar-btn,.document-context-tabs .tabbar-btn>svg{transition:none}
  .document-context-edit{flex:0 0 180px}
  .document-context-edit .cve-editmode{width:180px;min-width:180px;max-width:180px;height:36px;padding:0 15px;justify-content:center;white-space:nowrap;background:var(--action-bg);color:var(--action-ink);border:1px solid var(--action-border)}
  .document-context-edit .cve-editmode[aria-pressed="true"]{background:var(--action-bg);color:var(--action-ink);border-color:var(--action-border)}
  .document-context-edit .cve-editmode:hover{background:var(--action-bg-hover);color:var(--action-ink);border-color:var(--action-border)}
  .document-context-edit .cve-editmode:disabled:hover{background:var(--action-bg)}
  .document-workspace-body[hidden]{display:none}
  .document-offer-body{flex:1 1 auto;min-height:0;overflow:auto;background:var(--surface-2)}
  .document-context-surface{height:100%;min-height:0;display:flex;flex-direction:column}
  .document-module-panel{display:flex;flex:1;min-height:0}
  .document-module-panel[hidden]{display:none}
  .document-context-surface>.cdet-workspace,.document-context-surface>.document-studio{flex:1;min-height:0}
  .document-context-surface .cdet-modal2--workspace{height:100%}
  .document-studio .studio-screenbar{flex-shrink:0}
  .studio-doc-actions button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
.document-context-surface { min-width: 0; overflow: hidden; }
.document-context-surface .cdet-modal2--workspace { min-height: 0; grid-template-rows: auto minmax(0, 1fr) auto; }
.document-studio, .document-studio > [role="region"] { min-width: 0; min-height: 0; }
.document-studio .studio-stage-pane { min-width: 0; }
.document-studio .studio-journal-content { width: 100%; min-width: 0; }
@media (max-width: 1000px) {
  .document-context-surface .cdet-foot2 { flex-wrap: wrap; }
  .document-context-surface .cdet-foot2 > * { min-width: 0; }
}

/* SIH-418 · SIHAGE Match. La maquette V4 porte la composition, les primitives restent partagées. */
.match-page{display:flex;width:100%;max-width:1440px;min-height:0;flex:1;flex-direction:column;margin:0 auto;padding:12px 20px 20px;overflow:hidden}
.match-alert{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-4);min-height:54px;margin:0 0 16px;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg);color:var(--bad-ink);font-size:13px}
/* The list could not be read: the only message left above the columns. Everything a search
   says lives in its remote (DEV-536). */
.match-alert>span{flex:1 1 18rem;min-width:0}
.match-alert>.btn{flex:0 0 auto;margin-left:auto}
.match-preferences-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.match-preferences-grid label,.match-preference-field{display:grid;gap:6px;color:var(--ink-2);font-size:12px;font-weight:600}
.match-city-trigger{width:100%;height:38px;padding:0 10px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);color:var(--ink);font:inherit;font-size:13px}
.match-city-trigger:focus{outline:0;border-color:var(--border-strong);box-shadow:var(--ring-focus)}
.match-city-picker{position:relative}.match-city-trigger{display:flex;align-items:center;justify-content:space-between;text-align:left;cursor:pointer}.match-city-menu{position:absolute;z-index:2;top:calc(100% + 6px);left:0;right:0;overflow:auto;max-height:220px;padding:6px;border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-overlay)}.match-city-menu p{margin:7px 6px;color:var(--ink-4);font-size:12px;font-weight:400}.match-city-option{display:block;width:100%;padding:8px 7px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--ink);font:inherit;font-size:13px;text-align:left;cursor:pointer}.match-city-option:hover{background:var(--hover-bg)}
  .match-city-option:focus-visible{outline:0;box-shadow:var(--ring-focus)}
@media(max-width:980px){.match-page{padding-inline:24px}}
@media(max-width:720px){.match-page{padding:22px 14px 32px;overflow:auto}.match-preferences-grid{grid-template-columns:1fr}}
@media (max-width: 900px) {
  .fm-grid--generated{grid-template-columns:minmax(0,300px)}
}
@media (max-width: 720px) {
  .cdet-modal2--workspace,
  .document-context-surface .cdet-modal2--workspace { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 36%) auto minmax(0, 1fr) auto; grid-template-areas: "rail" "header" "body" "footer"; }
  .cdet-modal2--workspace .cdet-railnav { overflow-y: auto; }
  .cdet-modal2--workspace .cdet-railnav > * { flex-shrink: 0; }
  .cdet-modal2--workspace .cdet-railnav .cdet-railgrp { flex: 0 0 auto; overflow: visible; }
  .cdet-modal2--workspace .cdet-sysbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; height: auto; }
  .cdet-modal2--workspace .cdet-sysbar > * { min-width: 0; }
  .cdet-modal2--workspace .cdet-sysbar .ui-panel-header__center { grid-row: 2; grid-column: 1 / -1; }
  .cdet-modal2--workspace .cdet-sysbar .ui-panel-header__right { grid-row: 1; grid-column: 2; }
  .cdet-modal2--workspace .cdet-foot2 { gap: 8px; padding: 8px 12px; }
  .cdet-modal2--workspace .cdet-foot2 .ui-panel-footer__right { width: 100%; justify-content: flex-end; }
  .document-studio [aria-label="Étapes de préparation"] { padding: 8px 8px 0 !important; gap: 4px !important; }
  .document-studio [aria-label="Étapes de préparation"] > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) { flex-direction: column; gap: 4px !important; padding-inline: 2px !important; text-align: center !important; }
  .document-studio .studio-stage-pane { padding: 16px 12px !important; }
  .document-studio .studio-journal-content button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) { max-width: 100% !important; }
  .document-studio .studio-journal-content button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){max-width:100% !important}
  .document-studio .studio-prepare-columns { grid-template-columns: minmax(0, 1fr) !important; }
  .document-studio .studio-modal-foot { display: grid !important; grid-template-columns: minmax(0, 1fr); gap: 8px !important; padding: 8px 12px !important; }
  .document-studio .studio-modal-foot > * { min-width: 0; max-width: 100%; }
  .document-studio .studio-modal-foot > .document-dossier { justify-self: end; }
  .document-studio .studio-modal-foot > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) { justify-self: start; }
  .document-studio .studio-modal-foot > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){justify-self:start}
  .document-studio .studio-modal-foot > div:not(.document-dossier) { flex-wrap: wrap; }
}
@media (max-width: 1000px) {
  .document-studio .studio-documents-grid,
  .document-studio .studio-verification-grid { grid-template-columns: minmax(0, 1fr) !important; }
  .document-studio .studio-documents-grid { flex: 0 0 auto !important; }
  .document-studio .studio-documents-grid > * { overflow: visible !important; min-width: 0; }
}
@media (max-width: 720px) {
  .document-studio .studio-verification-grid > * { min-width: 0; }
  .document-studio .studio-doc-card { grid-template-columns: minmax(0, 1fr) !important; }
  .document-studio .studio-document-pocket { width: 100% !important; }
  .document-studio .studio-doc-actions { grid-template-columns: minmax(0, 1fr) !important; }
  .document-studio .studio-deliverable-card > [role="radio"] { display: grid !important; grid-template-columns: 32px minmax(0, 1fr); gap: 8px !important; }
  .document-studio .studio-deliverable-card > [role="radio"] > span:nth-child(2) { flex-wrap: wrap; }
  .document-studio .studio-deliverable-card > [role="radio"] > span:last-child { grid-column: 2; justify-self: start; margin: 0 !important; }
}

.document-studio .studio-document-pocket .studio-doc-thumb-preview{width:calc(100% - 28px);height:calc(100% + 42px);margin:12px 14px 0}
.document-studio .studio-doc-card .document-preview-title-line{font-size:16px}
.document-studio .studio-doc-card .document-preview-role{font-size:13px}
.document-studio .studio-doc-card .document-preview-meta{font-size:12px}
  .document-dossier>.cve-ft-dl{width:212px;min-width:212px;max-width:212px;justify-content:center;white-space:nowrap}
  .document-dossier>.cve-ft-dl:disabled{opacity:.5;cursor:not-allowed}
  .document-dossier>.cve-dlmenu{top:auto;bottom:calc(100% + 8px);max-width:calc(100vw - 24px)}
  .document-dossier-row{display:flex;align-items:center;gap:4px;min-height:64px}
  .document-dossier-row .cve-dlchk{flex:1;min-width:0;margin:0}
  .document-dossier-row .cve-dlchk .k{width:auto;flex:1}
  .document-dossier-row .cve-dlchk>svg{flex:0 0 auto;color:var(--ink-3)}
  .document-dossier-row[data-status="missing"] .cve-dlchk:not(:has(.ui-choice)){opacity:.55}
  .document-dossier-row[data-status="loading"] .cve-dlchk .ui-choice{cursor:progress}
  .document-dossier-row .cve-inlinebtn{flex-shrink:0;padding:7px 8px;font-size:11px}
  .document-dossier-meta{display:block;font-weight:400;font-size:11px;line-height:1.4;margin-top:4px;color:var(--ink-3)}
  .document-dossier-feedback{margin:8px;font-size:12px;line-height:1.4;color:var(--ink-2)}
  .document-dossier-feedback[role="alert"]{color:var(--bad-ink)}
  /* SIH-363 : adaptation bornee des barres documentaires. */
  .document-company-identity{grid-column:1;grid-row:1;display:flex;align-items:center;gap:var(--space-3);min-width:0;color:var(--ink-2);font-size:12px}
  .document-company-identity>.logo{flex-shrink:0;width:28px;height:28px;font-size:12px}
  .document-company-identity>span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  @media(hover:hover) and (pointer:fine){
    .cve-top[data-document-workspace] .cve-crumb-more{opacity:0;pointer-events:none}
    .cve-top[data-document-workspace] .cve-crumbs:is(:hover,:focus-within) .cve-crumb-more{opacity:1;pointer-events:auto}
  }
  .cve-ft:has(.document-dossier) .cve-ft-tools{grid-column:2}
  .cve-ft:has(.document-dossier) .document-dossier{grid-column:3;justify-self:end}
  @media(max-width:1100px){
    /* En grille étroite, l'identité reprend son logo dans le flux, sans débord vers le fil d'Ariane. */
    .cve-top[data-document-workspace] .cve-leaf-center .context-identity>:first-child:not(.context-identity__name){position:static;transform:none}
    .cve-top[data-document-workspace]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,min(180px,35%)) minmax(0,1fr);gap:var(--space-3)}
    .cve-top[data-document-workspace] .cve-crumbs{max-width:none;min-width:0;overflow-x:auto;scrollbar-width:thin}
    .cve-top[data-document-workspace] .cve-crumb-more{display:inline-flex;flex-shrink:0;max-width:none}
    .cve-top[data-document-workspace] .cve-leaf-center{position:static;transform:none;margin:0;max-width:100%;overflow:hidden;justify-content:center}
    /* Une seule ligne : sans place, le poste s'efface, le logo et le nom restent (finition-entete-lettre-cv). */
    .cve-top[data-document-workspace] .cve-crumb-leaf{flex:0 1 auto;gap:8px;max-width:100%;align-items:center}
    .cve-top[data-document-workspace] .cve-crumb-leaf>.context-identity__name{max-width:100%}
    .cve-top[data-document-workspace] .context-identity__role{display:none}
  }
  @media(max-width:1000px){
    .document-context-bar{gap:var(--space-3);padding-inline:var(--space-5)}
    .document-context-bar .screen-context-action{gap:var(--space-3)}
    .document-context-bar .tabbar.document-context-tabs{gap:var(--space-3)}
    .document-context-tabs .tabbar-btn{min-width:84px;padding-inline:var(--space-3)}
    .cve-ft:has(.document-dossier){grid-template-columns:auto minmax(0,1fr) auto;gap:var(--space-3)}
    .cve-ft:has(.document-dossier) .cve-ft-tools{width:auto;min-width:0;max-width:100%}
  }
  @media(max-width:820px){
    .os-shell:has(.document-context-bar){flex-direction:row}
    .os-shell:has(.document-context-bar)>.side{height:100%;border-bottom:0}
  }
  @media(max-width:720px){
    .document-context-bar{--screen-context-h:96px;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) 44px;gap:0;padding-inline:var(--space-3)}
    .document-company-identity{grid-row:2;gap:var(--space-2)}
    .document-context-bar .screen-context-nav{width:100%;min-height:0}
    .document-context-bar .tabbar.document-context-tabs{width:100%;justify-content:space-between}
    .document-context-bar .screen-context-action{width:100%;margin-left:0;gap:var(--space-3)}
    .document-context-bar .cve-newwrap{display:block;flex:1 1 auto;min-width:0;position:static}
    .document-context-bar .cve-newcv-label{display:block;white-space:normal;line-height:14px}
    .document-context-bar .cve-newmenu.wide.cmd{right:var(--space-3);top:calc(100% + var(--space-3));width:calc(100% - var(--space-5));max-height:calc(100dvh - 180px);overflow-y:auto}
    .cve-top[data-document-workspace] .capture-actions-main-label{display:none}
    .cve-ft:has(.document-dossier){grid-template-columns:minmax(0,1fr) 212px;grid-template-rows:36px 36px;gap:var(--space-3);padding:var(--space-3)}
    .cve-ft:has(.document-dossier) .cve-ft-tools{grid-column:1/-1;grid-row:1;width:auto;justify-self:center;gap:var(--space-3)}
    .cve-ft:has(.document-dossier) .document-dossier{grid-column:2;grid-row:2;justify-self:end}
    .cve-ft:has(.document-dossier) .document-label-prefix{display:none}
    .cve-ft:has(.document-dossier) .cve-ft-tools .cve-zoom-lbl{display:inline}
    .cve-ft:has(.document-dossier) .cve-ft-action span{display:block;max-width:80px;white-space:normal;line-height:14px}
    .cve-ft:has(.document-dossier) .cve-ft-action{height:36px}
  }

  /* photo · modèles · 2 pages */
  .cve-photo{width:58px;height:58px;border-radius:8px;background:var(--bg-2);border:1px solid var(--border);display:grid;place-items:center;color:var(--ink-4);margin-bottom:9px;overflow:hidden}
  .cve-photo.has-img{background:var(--ink)}
  .cve-photo img{width:100%;height:100%;object-fit:cover;display:block}
  .cve-cv.two{min-height:1123px}
  .cve-cv--compact .cve-exp{margin-bottom:10px}
  .cve-cv--compact .cve-cvsec{margin:15px 0 8px}
  .cve-cv--compact .cve-accroche{margin:12px 0 6px}
  .cve-cv--compact .cve-exp ul{gap:3px}
  /* impeccable-disable-next-line side-tab: accent de section du document bicolore, pas un onglet latéral */
  .cve-cv--bicol .cve-cvsec{color:var(--ink);border-left:3px solid var(--border-strong);padding-left:9px}
  .cve-cv--bicol .cve-cvsec::after{display:none}
  /* Modèle « deux colonnes » RÉEL : contenu principal (exp/formations/compétences) à gauche,
     atouts/langues/centres d'intérêt en colonne latérale (au lieu d'un pied 3-colonnes). */
  .cve-cv--bicol .cve-cols{grid-template-columns:1fr 208px;gap:28px;align-items:start}
  .cve-cv--bicol .cve-foot3{grid-template-columns:1fr;gap:16px;margin-top:0;padding-top:0;border-top:0}

  /* CTA boucle Vault */

  /* Surface canonique du document : sa géométrie reste fixe. Le zoom de l'éditeur
     est une transformation visuelle portée par ZoomViewport ; il ne participe jamais
     aux retours à la ligne ni à la pagination. */
  .cve-cvwrap{width:100%;min-width:0;display:flex;justify-content:center;align-items:flex-start;overflow:hidden}
  .cve-cvscale{width:794px;align-self:flex-start}

  /* états appliqué / traité (coach & correction) */
  .cve-allclear{display:flex;align-items:center;justify-content:center;gap:9px;padding:18px;border:1px dashed var(--border-strong);border-radius:10px;color:var(--ink-3);font-size:13px;font-weight:500;margin-top:4px}
  .cve-allclear svg{color:var(--good)}

  /* offre ciblée — carte d'identité */

  /* boîte « ce que l'IA a compris » */
  .cve-ptitle.neutral svg{color:var(--ink-3)}
  .cve-kw span.req{color:var(--ink);border-color:var(--border-strong);background:var(--surface);font-weight:600}
  .cve-kw span.req svg{color:var(--ink)}

  /* match — score + dimensions */
  .cve-scoresub{font-size:12px;color:var(--ink-3);line-height:1.55;margin:-8px 0 16px}
  .cve-why100{border:1px solid var(--border);border-radius:10px;background:var(--bg-2);padding:12px 13px;margin-top:6px}
  .cve-why100-h{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--ink)}
  .cve-why100-h svg{color:var(--ink-3)}
  .cve-why100 p{font-size:12px;color:var(--ink-2);line-height:1.55;margin-top:7px}
  .cve-mrow{display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5;color:var(--ink-2);padding:7px 0}
  .cve-mrow + .cve-mrow{border-top:1px solid var(--border)}
  .cve-mrow svg{flex:0 0 auto;color:var(--good);margin-top:2px}

  /* chemin vers 100 % — étapes */
  .cve-step{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;margin-bottom:8px;background:var(--content-bg);transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .cve-step.done{background:var(--good-soft);border-color:transparent}
  .cve-step-h{display:flex;align-items:center;gap:9px}
  .cve-step-ic{flex:0 0 auto;width:24px;height:24px;border-radius:8px;background:var(--bg-2);color:var(--ink-3);display:grid;place-items:center}
  .cve-step.done .cve-step-ic{background:var(--good);color:var(--fg-inverse)}
  .cve-step-t{flex:1;min-width:0;font-size:13px;font-weight:600;color:var(--ink)}
  .cve-step-gain{flex:0 0 auto;font-family:var(--font-data);font-size:11px;font-weight:500;color:var(--accent)}
  .cve-step.done .cve-step-gain{color:var(--good-ink);background:transparent;text-transform:uppercase;letter-spacing:.05em;font-size:11px}
  .cve-step-detail{font-size:12px;color:var(--ink-2);line-height:1.55;margin-top:8px}
  .cve-step-detail.muted{color:var(--ink-3)}
  .cve-step-foot{display:flex;gap:8px;margin-top:10px}
  .cve-step-done{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:12px;font-weight:600;color:var(--good-ink);margin-top:9px}
  .cve-step-done .undo{margin-left:auto;font:inherit;font-size:12px;font-weight:500;color:var(--ink-3);background:none;border:0;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
  .cve-step-done .undo:hover{color:var(--accent)}

  /* panneau « Ce qu'on a fait » */
  .cve-vwhy{display:flex;align-items:flex-start;gap:6px;font-size:12px;color:var(--ink-3);line-height:1.5;margin-top:8px}
  .cve-vwhy svg{flex:0 0 auto;color:var(--accent);margin-top:2px}
  .cve-reform{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;margin-bottom:8px;background:var(--content-bg);position:relative}
  .cve-reform.off{opacity:.6}
  .cve-reform-k{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--accent)}
  .cve-reform-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;line-height:1.4;margin-top:6px;color:var(--ink-2);padding-right:54px}
  .cve-reform-line svg{color:var(--ink-4);flex:0 0 auto}
  .cve-reform-line .del{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--border-strong)}
  .cve-reform-line .ins{color:var(--good-ink);font-weight:600}
  .cve-reform-why{font-size:11px;color:var(--ink-3);line-height:1.45;margin-top:6px}
  .cve-reform-undo{position:absolute;top:11px;right:12px}
  .cve-disc{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--ink-3);line-height:1.5;background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px;margin:6px 0 12px}
  .cve-disc svg{flex:0 0 auto;color:var(--good);margin-top:1px}

  /* expériences éditables (panneau « Ce qu'on a fait ») */
  .cve-expcard{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;margin-bottom:9px;background:var(--content-bg)}
  .cve-expcard-r{font-size:13px;font-weight:600;color:var(--ink);line-height:1.3}
  .cve-expcard-o{font-size:12px;color:var(--ink-3);margin-top:2px}
  .cve-expbullet{font-size:12px;line-height:1.5;color:var(--ink-2);margin-top:9px}
  .cve-expbullet.locate{cursor:pointer;border-radius:6px;transition:background-color .15s}
  .cve-expbullet.locate:hover{background:var(--bg-2)}
  .cve-editbox{margin-top:10px}
  .cve-editfoot{display:flex;gap:8px;margin-top:8px}
  /* Récap « Ce qu'on a fait » par section (en-tête, formations, compétences, forces…) */
  .cve-recap{display:flex;flex-direction:column;gap:0}
  .cve-recap-li{display:flex;gap:12px;align-items:baseline;font-size:12px;line-height:1.5;padding:7px 0;border-top:1px solid var(--border)}
  .cve-recap-li:first-child{border-top:0}
  .cve-recap-li .k{flex:0 0 92px;color:var(--ink-3);font-weight:500;display:flex;align-items:center;gap:6px}
  .cve-recap-li .k svg{color:var(--ink-4)}
  .cve-recap-li .v{flex:1 1 auto;min-width:0;color:var(--ink);word-break:break-word}
  /* Dossier des versions générées (T6) */
  .cve-versions{display:flex;flex-direction:column;gap:4px}
  .cve-versions.compact{gap:6px}
  .cve-tonevers{padding-top:2px}
  .cve-verrow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);padding:9px 11px;cursor:pointer;font:inherit;transition:border-color .15s var(--ease-out),background-color .15s var(--ease-out)}
  .cve-verrow:hover:not(:disabled){border-color:var(--border-strong);background:var(--hover-bg)}
  .cve-verrow.on{border-color:var(--accent-soft-2,var(--accent-soft));background:var(--select-bg);cursor:default;color:var(--select-ink)}
  .cve-verrow .l{font-size:13px;font-weight:600;color:var(--ink);flex:0 0 auto}
  .cve-verrow .m{font-size:12px;color:var(--ink-3);flex:1 1 auto;min-width:0}
  .cve-verrow .a{font-size:11px;font-weight:600;color:var(--accent);display:inline-flex;align-items:center;gap:5px;flex:0 0 auto}
  /* Refonte panneau Langue 2026-07-18 : ligne de version = zone « Afficher » + bouton ⋯ options.
     Tuile agrandie (padding + relief) pour accueillir le menu et respirer. */
  .cve-verrow2{position:relative;display:flex;align-items:stretch;gap:0;width:100%;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);overflow:visible;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}
  .cve-verrow2:hover{border-color:var(--content-hover-border)}
  .cve-verrow2.on{border-color:var(--accent-soft-2,var(--accent-soft));background:var(--select-bg);color:var(--select-ink)}
  .cve-verrow2.menuopen{border-color:var(--accent);z-index:3}
  .cve-verrow-apply{display:flex;align-items:center;gap:10px;flex:1 1 auto;min-width:0;text-align:left;border:0;background:transparent;padding:11px 12px;cursor:pointer;font:inherit;border-radius:10px 0 0 10px}
  .cve-verrow-apply:hover:not(:disabled){background:var(--hover-bg)}
  .cve-verrow2.on .cve-verrow-apply:hover:not(:disabled){background:transparent}
  .cve-verrow-apply:disabled{cursor:default}
  .cve-verrow-apply .l{font-size:13px;font-weight:600;color:var(--ink);flex:0 0 auto}
  .cve-verrow-apply .m{font-size:12px;color:var(--ink-3);flex:1 1 auto;min-width:0}
  .cve-verrow-apply .a{font-size:11px;font-weight:600;color:var(--accent);display:inline-flex;align-items:center;gap:5px;flex:0 0 auto}
  .cve-verrow-opt{display:flex;align-items:center;border-left:1px solid var(--border);flex:0 0 auto}
  .cve-verrow2.on .cve-verrow-opt{border-left-color:var(--accent-soft-2,var(--accent-soft))}
  .cve-vermenu{position:absolute;top:calc(100% + 4px);right:0;min-width:240px;background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;box-shadow:var(--shadow-popover);padding:5px;z-index:6;display:flex;flex-direction:column;gap:2px}
  .cve-vermenu-intent,.cve-vermenu-confirm{display:flex;flex-direction:column;gap:8px;padding:8px}
  .cve-vermenu-confirm span{font-size:12px;color:var(--ink-2);font-weight:600}
  .cve-vermenu-intent-act{display:flex;align-items:center;justify-content:flex-end;gap:8px}
  /* ── Brique « bouton d'options ⋯ » PAR SECTION (chantier options par section, 2026-07-18) ── */
  .cve-secopt-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
  .cve-secopt-bar .cve-secopt-title{font-weight:600;font-size:13px;color:var(--ink)}
  .cve-secopt{position:relative;display:inline-flex;flex:0 0 auto}
  /* Menu ancré en position:fixed (mesure JS, cf. SectionOptions) : échappe à l'overflow du panneau,
     recadré dans le viewport. z60 = au-dessus des cartes, sous le dock assistant (z85, qui décale le
     shell). Le conteneur fixe porte lui-même maxHeight+overflow (style inline) → on NEUTRALISE le
     scroll interne des sous-menus pour ne pas doubler la barre de défilement (architecte). */
  /* Retour d’un sous-menu : plus petit et plus gras, il n’est pas un choix. */
  .cve-secopt-reorder{display:flex;flex-direction:column;gap:1px;max-height:288px;overflow-y:auto;padding-top:3px;margin-top:3px;border-top:1px solid var(--border)}
  .cve-secopt-rerow{display:flex;align-items:center;gap:9px;padding:5px 9px;border-radius:8px;font-size:13px;color:var(--ink-2)}
  .cve-secopt-rerow .l{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-secopt-reord-act{display:inline-flex;gap:3px;flex:0 0 auto}
  .cve-secopt-reord-act button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:26px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--border-soft);background:var(--surface);color:var(--ink-3);border-radius:6px;cursor:pointer}
  .cve-secopt-reord-act button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:26px}
  .cve-secopt-reord-act button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover:not(:disabled){background:var(--bg-2);color:var(--ink)}
  .cve-secopt-reord-act button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:default}
  .cve-secopt-custom{padding:5px 4px 2px;margin-top:3px;border-top:1px solid var(--border)}
  .cve-secopt-custom .cve-insprow{padding:5px 5px;gap:8px}
  /* ⋯ PAR ÉLÉMENT dans une carte d'inspecteur (niveau 2) */
  .cve-inspcard-puces{font-size:11px;color:var(--ink-3);white-space:nowrap;flex:0 0 auto}
  .cve-inspcard-h .cve-secopt{margin-left:2px}
  .cve-inspcard{overflow:visible}
  /* ⋯ d'un ITEM/CARTE révélé au survol (remplace tout ✎ isolé — Landry 07-18) */
  .cve-secopt.hover{flex:0 0 auto}
  .cve-hfield-val--ro{cursor:default}
  /* Bouton contextuel « Générer le CV en <langue> » (langue sans version encore) */
  .cve-genlang-has{display:flex;align-items:center;gap:7px;margin-top:12px;font-size:12px;color:var(--ink-3)}
  .cve-genlang-has svg{color:var(--good)}
  .cve-langnotes{margin-top:24px;padding-top:10px;border-top:1px solid var(--border)}
  .cve-langnotes .cve-disc{margin-top:6px}
  .cve-inlinebtn{display:inline-flex;align-items:center;gap:7px;font:inherit;font-size:12px;font-weight:600;color:var(--ink-2);background:var(--surface);border:1px solid var(--border-soft);border-radius:8px;padding:8px 11px;cursor:pointer}
  .cve-inlinebtn:hover:not(:disabled){border-color:var(--border-hover);background:var(--bg-2)}
  .cve-inlinebtn:disabled{opacity:.5;cursor:not-allowed}

  .cve-vcard{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;margin-bottom:9px;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out);background:var(--content-bg)}
  .cve-vcard.inserted{border-color:var(--good)}
  .cve-vcard.flash{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);transition:box-shadow .25s,border-color .25s}
  .cve-vtop{display:flex;align-items:flex-start;gap:9px}
  .cve-vicon{flex:0 0 auto;width:24px;height:24px;border-radius:8px;display:grid;place-items:center;background:var(--bg-2);color:var(--ink-3)}
  .cve-vcard h4{font-size:13px;font-weight:600;line-height:1.3;flex:1}
  .cve-vmatch{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;font-family:var(--font-data);font-size:11px;color:var(--ink-3)}
  .cve-vmatch .bar{width:34px;height:5px;border-radius:99px;background:var(--bg-2);overflow:hidden}
  .cve-vmatch .bar i{display:block;height:100%;background:var(--accent);border-radius:99px}
  .cve-vsrc{font-size:11px;color:var(--ink-3);margin-top:6px}
  .cve-vbullet{font-size:12px;color:var(--ink-2);line-height:1.5;margin-top:8px}
  .cve-vfoot{display:flex;align-items:center;gap:8px;margin-top:10px}
  .cve-flabel{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:7px;display:flex;align-items:center;justify-content:space-between}
  /* Label cliquable (Langues, Centres d'intérêt) avec petit crayon discret à droite —
     ouvre Mon Profil sur la bonne fiche. Pattern unique (cf. lignes du HeaderInspector). */
  .cve-toggle{width:38px;height:22px;border-radius:99px;background:var(--accent);position:relative;flex:0 0 auto;border:0;cursor:pointer}
  .cve-toggle::after{content:"";position:absolute;top:2px;left:18px;width:18px;height:18px;border-radius:50%;background:var(--surface);transition:left .18s var(--ease-out)}
  .cve-toggle.off{background:var(--border-strong)}
  .cve-toggle.off::after{left:2px}

  /* aperçu CV */
  .cve-cv{position:relative;width:794px;max-width:100%;margin:0 auto;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg);padding:44px 46px;min-height:1123px}
  /* 1 page : la feuille a une hauteur fixe — le contenu est resserré (zoom) pour y tenir */
  .cve-cv:not(.two){height:1123px;overflow:hidden}
  /* 2 pages : la hauteur (= pages×1123) est posée en inline ; les feuilles sont
     rendues comme surfaces séparées, façon éditeur de document. */
  .cve-cv.two{overflow:visible;background:transparent;border-color:transparent;box-shadow:none}
  .cve-cv.two .cve-fitwrap{position:relative;z-index:2}
  .cve-page-sheet{position:absolute;left:0;right:0;height:1123px;z-index:0;pointer-events:none;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg)}
  .cve-pagespacer{width:100%;flex:0 0 auto}
  /* Espace de bureau entre deux feuilles : repère d'éditeur, jamais contenu du CV. */
  .cve-pagebreak{position:absolute;left:0;right:0;z-index:1;background:transparent;border:0;box-shadow:none;pointer-events:none}
  .cve-pagebreak .lbl{position:absolute;right:26px;top:50%;transform:translateY(-50%);font-family:var(--font-sans);font-size:10px;letter-spacing:var(--tracking-wide);color:rgba(255,255,255,.70);background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:999px;padding:3px 8px}
  .cve-pagenum{display:none}
  /* Sortie A4 canonique : mêmes blocs que le CV édité, avec une séparation
     visuelle réelle à l'écran. Le @media print masque ces repères. */
  .cve-cv.cve-output .cve-page-sheet{border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg)}
  .cve-cv.cve-output .cve-pagebreak{display:block}

  .doc-layout-gate{position:relative;min-height:100%}
  .doc-layout-gate-content{position:relative;z-index:1}
  .doc-layout-gate-content[data-obscured="true"]{filter:blur(10px);transform:translateZ(0);user-select:none;pointer-events:none}
  .doc-layout-gate-placeholder{position:absolute;z-index:2;inset:0;min-height:100%;background:var(--bg-2)}
  .doc-layout-gate-placeholder.is-obscuring{display:grid;place-items:center;background:color-mix(in srgb,var(--ink) 62%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
  .cve-save-state{position:absolute;z-index:3;right:12px;top:12px;padding:5px 8px;border:1px solid var(--border);border-radius:var(--radius-sm,6px);background:var(--surface);color:var(--ink-3);font:11px/1.2 var(--font-data)}
  .cve-save-state.is-error{color:var(--danger-500);border-color:color-mix(in srgb,var(--danger-500) 28%,var(--border))}
  .doc-html-preview-stage .cve-cv.two{background:transparent;border:0;border-radius:0;box-shadow:none}

  @media print{
    @page{size:A4;margin:0}
    html.sihage-document-pdf-render,
    html.sihage-document-pdf-render body{background:#fff !important;margin:0 !important;width:794px !important;min-height:0 !important;height:auto !important;overflow:visible !important}
    body.sihage-document-pdf-render .doc-pdf-render{width:794px !important;height:auto !important;min-height:0 !important;overflow:visible !important;background:#fff !important}
    body.sihage-document-pdf-render .doc-pdf-stage{width:794px !important;margin:0 !important;background:#fff !important}
    body.sihage-document-pdf-render .doc-pdf-stage .cve-cvwrap,
    body.sihage-document-pdf-render .doc-pdf-stage .cve-cvscale{height:auto !important;overflow:visible !important}
    body.sihage-document-pdf-render .doc-pdf-stage,
    body.sihage-document-pdf-render .doc-pdf-stage *{-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important}
    body.sihage-document-pdf-render .cve-cv{width:794px !important;max-width:none !important;height:auto !important;min-height:0 !important;margin:0 !important;border:0 !important;border-radius:0 !important;box-shadow:none !important;background:#fff !important;overflow:visible !important}
    /* Le zoom et la largeur du fitwrap sont publiés avec les coupures qui en dépendent :
       le PDF les conserve pour garder exactement la même géométrie que l'aperçu A4. */
    body.sihage-document-pdf-render .doc-pdf-stage .lte-letter,
    body.sihage-document-pdf-render .doc-pdf-stage .lte-emailwrap,
    body.sihage-document-pdf-render .doc-pdf-stage .lte-msgwrap{margin:0 !important;border:0 !important;border-radius:0 !important;box-shadow:none !important;background:#fff !important}
    body.sihage-document-pdf-render .doc-pdf-stage .lte-letter{width:794px !important;max-width:none !important;min-height:1123px !important}
    body.sihage-document-pdf-render .cve-cv.two .cve-fitwrap{page-break-inside:auto !important;break-inside:auto !important}
    /* Le vrai saut de page (.cve-pagespacer → break-after:page) est IGNORÉ à l'intérieur d'un
       conteneur CSS grid. Le corps du CV (.cve-cols) est un grid → sans ceci, un CV de 2 pages
       s'imprime tassé sur 1 page (le saut n'agit pas) : l'impression ne suit plus l'éditeur.
       On le repasse en flux bloc à l'impression (colonne unique 1fr → aucun changement visuel,
       seul le découpage en pages redevient effectif). Solution d'origine (commit f4c40af7)
       nécessaire à la composition PDF ; on la conserve ici. */
    body.sihage-document-pdf-render .cve-cols{display:block !important}
    body.sihage-document-pdf-render .cve-page-sheet,
    body.sihage-document-pdf-render .cve-pagebreak,
    body.sihage-document-pdf-render .cve-pagenum{display:none !important}
    body.sihage-document-pdf-render .cve-pagespacer{display:block !important;height:0 !important;break-after:page !important;page-break-after:always !important}
    body.sihage-document-pdf-render .cve-pagespacer + .cve-contsec,
    body.sihage-document-pdf-render .cve-pagespacer + .cve-cvsec,
    body.sihage-document-pdf-render .cve-pagespacer + .cve-unit{padding-top:var(--pdf-cv-continuation-pad,44px) !important}
    /* La lettre reprend à SA marge (54 px, `.lte-letter`), pas à celle du CV. Une reprise à 44
       ferait sortir un document dont la page 2 ne s'aligne pas sur la page 1, et le décalage se
       verrait sur le papier, pas à l'écran. */
    body.sihage-document-pdf-render .lte-letter .cve-pagespacer + .cve-unit{padding-top:54px !important}
    /* Les feuilles empilées de la lettre paginée : même neutralisation que le CV, et la hauteur
       inline gelée cède la place à la hauteur naturelle du contenu (vraie pagination A4). */
    /* Les sauts publiés portent déjà la marge de reprise : ne pas la cloner à chaque fragment. */
    body.sihage-document-pdf-render .doc-pdf-stage .lte-letter.two{height:auto !important;min-height:0 !important;background:#fff !important;box-decoration-break:slice !important;-webkit-box-decoration-break:slice !important}
  }
  /* ── Bouton Éditer + édition directe du document ── */
  .cve-editwrap{position:relative}
  /* Version manuelle (HTML figé) : les anciens wrappers externes ne doivent pas
     imposer leur transform. Le calage intrinsèque de `.cve-fitwrap` appartient en
     revanche à la révision officielle et reste identique dans l'éditeur, la modale B
     et l'impression. La feuille peut grandir avant sa pagination stable. */
  .cve-manual .cve-cvwrap{height:auto !important;overflow:visible !important}
  .cve-manual .cve-cvscale{transform:none !important}
  .cve-manual .cve-cv{height:auto !important;min-height:1123px;overflow:visible !important;
  background-image:repeating-linear-gradient(to bottom, transparent 0, transparent 1122px, var(--border) 1122px, var(--border) 1123px) !important}
  /* Version manuelle paginée (2 pages) : on retire le repère gradient au profit des vraies coupures */
  .cve-manual .cve-cv.two{background:transparent !important;background-image:none !important;border-color:transparent !important;box-shadow:none !important;overflow:visible !important}
  /* Réglages de mise en page (panneau Sections) */
  .cve-layblock{display:flex;flex-direction:column;gap:11px;padding:12px 13px;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;margin-bottom:14px}
  .cve-layrow{display:flex;align-items:center;justify-content:space-between;gap:12px}
  .cve-laylbl{font-size:13px;color:var(--ink-2);font-weight:500}
  .cve-stepper{display:inline-flex;align-items:center;gap:2px;background:var(--surface);border:1px solid var(--border-strong);border-radius:8px;padding:2px}
  .cve-stepper button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:26px;height:24px;border:0;background:transparent;border-radius:6px;display:grid;place-items:center;color:var(--ink-2);cursor:pointer}
  .cve-stepper button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:26px}
  .cve-stepper button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover:not(:disabled){background:var(--bg-2);color:var(--ink)}
  .cve-stepper button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
  .cve-stepper span{min-width:78px;text-align:center;font-size:12px;font-weight:600;color:var(--ink)}
  /* Contrôle Taille du texte : chip « Ajuster » + stepper en % (graduel comme le zoom) */
  .cve-sizectl{display:inline-flex;align-items:center;gap:7px}
  .cve-sizectl .cve-stepper span{min-width:52px}
  .cve-swatches{display:inline-flex;gap:7px}
  .cve-swatch{width:22px;height:22px;border-radius:50%;border:2px solid var(--surface);background:var(--sw);cursor:pointer;box-shadow:0 0 0 1px var(--border-strong);padding:0;transition:box-shadow .15s var(--ease-out)}
  .cve-swatch:hover{box-shadow:0 0 0 1px var(--ink-4)}
  .cve-swatch.on{box-shadow:0 0 0 2px var(--sw)}
  /* Interligne du CV (data-lh sur .cve-cv) */
  .cve-cv[data-lh="serre"] .cve-accroche{line-height:1.4}
  .cve-cv[data-lh="serre"] .cve-exp li{line-height:1.32}
  .cve-cv[data-lh="aere"] .cve-accroche{line-height:1.95}
  .cve-cv[data-lh="aere"] .cve-exp li{line-height:1.78}
  /* Interligne appliqué aussi à la version manuelle (via le conteneur live) */
  .lte-zoomwrap[data-cvlh="serre"] .cve-accroche{line-height:1.4}
  .lte-zoomwrap[data-cvlh="serre"] .cve-exp li{line-height:1.32}
  .lte-zoomwrap[data-cvlh="aere"] .cve-accroche{line-height:1.95}
  .lte-zoomwrap[data-cvlh="aere"] .cve-exp li{line-height:1.78}
  /* Espacement des blocs du CV (data-sp sur .cve-cv ; data-cvsp sur le conteneur pour la version manuelle) */
  .cve-cv[data-sp="serre"] .cve-accroche,.lte-zoomwrap[data-cvsp="serre"] .cve-accroche{margin:10px 0 6px}
  .cve-cv[data-sp="serre"] .cve-cvsec,.lte-zoomwrap[data-cvsp="serre"] .cve-cvsec{margin:13px 0 7px}
  .cve-cv[data-sp="serre"] .cve-exp,.lte-zoomwrap[data-cvsp="serre"] .cve-exp{margin-bottom:9px}
  .cve-cv[data-sp="serre"] .cve-edu,.lte-zoomwrap[data-cvsp="serre"] .cve-edu{margin-bottom:7px}
  .cve-cv[data-sp="serre"] .cve-cols,.lte-zoomwrap[data-cvsp="serre"] .cve-cols{margin-top:12px}
  .cve-cv[data-sp="serre"] .cve-foot3,.lte-zoomwrap[data-cvsp="serre"] .cve-foot3{margin-top:12px}
  .cve-cv[data-sp="aere"] .cve-accroche,.lte-zoomwrap[data-cvsp="aere"] .cve-accroche{margin:22px 0 13px}
  .cve-cv[data-sp="aere"] .cve-cvsec,.lte-zoomwrap[data-cvsp="aere"] .cve-cvsec{margin:30px 0 16px}
  .cve-cv[data-sp="aere"] .cve-exp,.lte-zoomwrap[data-cvsp="aere"] .cve-exp{margin-bottom:24px}
  .cve-cv[data-sp="aere"] .cve-edu,.lte-zoomwrap[data-cvsp="aere"] .cve-edu{margin-bottom:18px}
  .cve-cv[data-sp="aere"] .cve-cols,.lte-zoomwrap[data-cvsp="aere"] .cve-cols{margin-top:26px}
  .cve-cv[data-sp="aere"] .cve-foot3,.lte-zoomwrap[data-cvsp="aere"] .cve-foot3{margin-top:26px}
  /* Aides du panneau Mise en page */
  .cve-laytip{display:flex;align-items:flex-start;gap:7px;font-size:12px;line-height:1.45;color:var(--ink-3);margin:9px 2px 0;text-wrap:pretty}
  .cve-laytip svg{flex:0 0 auto;margin-top:2px;color:var(--ink-4)}
  /* Lettre — taille du texte & interligne (var --lt-fs / --lt-lh). Consommees depuis le wrapper
     editeur (.lte-zoomwrap/.lte-pdf-doc) ET depuis la RACINE du document
     (.lte-letter/.lte-msgwrap/.lte-emailwrap) ou lmVars est desormais bake. Le snapshot est ainsi
     AUTO-SUFFISANT : le PDF et la modale B rendent la meme mise en page que l'editeur,
     sans dependre du wrapper (parite CV, dont data-lh vit sur la racine du document). */
  .lte-zoomwrap .lte-p,.lte-letter .lte-p{font-size:calc(13px * var(--lt-fs,1));line-height:var(--lt-lh,1.7)}
  .lte-zoomwrap .lte-lmeta,.lte-letter .lte-lmeta,.lte-zoomwrap .lte-lobj,.lte-letter .lte-lobj,.lte-zoomwrap .lte-lref,.lte-letter .lte-lref{font-size:calc(13px * var(--lt-fs,1))}
  .lte-zoomwrap .lte-letter .lte-sign,.lte-letter .lte-sign{font-size:calc(13px * var(--lt-fs,1))}
  .lte-zoomwrap .lte-from .n,.lte-letter .lte-from .n{font-size:calc(15px * var(--lt-fs,1))}
  .lte-zoomwrap .lte-from .l,.lte-letter .lte-from .l{font-size:calc(13px * var(--lt-fs,1))}
  .lte-zoomwrap .lte-to,.lte-letter .lte-to{font-size:calc(13px * var(--lt-fs,1))}
  .lte-zoomwrap .lte-to .org,.lte-letter .lte-to .org{font-size:calc(15px * var(--lt-fs,1))}
  .lte-zoomwrap .lte-msg-box,.lte-zoomwrap .lte-email-body,.lte-msgwrap .lte-msg-box,.lte-emailwrap .lte-email-body{font-size:calc(13px * var(--lt-fs,1))}
  /* (Ancienne UI de bascule « version assistant / votre version » retirée : un seul
     document désormais.)
     SIH-115 : ce commentaire n'avait JAMAIS été fermé. Il courait jusqu'à la fermeture
     du commentaire suivant et avalait deux règles `.cve-editdoc.editing`. Le navigateur
     ne les a donc jamais vues, et aucun JSX ne pose la classe `editing` sur
     `.cve-editdoc`. Elles sont RETIRÉES, pas ressuscitées : les ranimer poserait un
     contour pointillé accent que le contrat des contours refuse, et changerait le rendu
     d'un document que le client imprime. Le nombre de règles parsées est identique
     avant et après. Défaut trouvé par l'architecte, invisible à la première version du
     rempart, qui ne voyait qu'une des deux faces. */
  /* ── Panneau Sections : date de naissance + accordéon des sections ── */
  .cve-fdate{border:1px solid var(--border-strong);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;color:var(--ink);background:var(--surface);margin-top:5px;outline:none}
  .cve-fdate:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .cve-letter-date-pop{width:100%;min-width:0}
  .cve-date-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer}
  .cve-date-trigger > span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cve-date-trigger.on{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .cve-toggle.sm{transform:scale(.85);flex-shrink:0}
  .cve-secnote{margin:4px 2px 2px;font-size:11px;color:var(--ink-4);text-wrap:pretty}
  .cve-profile-item{display:flex;align-items:flex-start;gap:10px;border:1px solid var(--border-soft);border-radius:10px;background:var(--bg);padding:11px 12px;min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer}
  .cve-profile-item:hover{border-color:var(--border-strong);background:var(--bg-2);box-shadow:none}
  .cve-profile-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .cve-profile-item>div{flex:1;min-width:0}
  .cve-profile-item b{display:block;font-size:13px;font-weight:600;color:var(--ink);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cve-profile-item p{margin:3px 0 0;font-size:12px;line-height:1.45;color:var(--ink-3);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .cve-profile-detail{display:flex;flex-direction:column;gap:14px;min-height:100%;height:100%;flex:1}
  .cve-profile-detail-head{display:flex;align-items:flex-start;gap:12px;border-bottom:1px solid var(--border);padding-bottom:14px}
  .cve-profile-detail-head>div{min-width:0}
  .cve-profile-detail-head span:not(.vpf-ic){display:block;font-family:var(--font-sans);font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4)}
  .cve-profile-detail-head h4{margin:2px 0 0;font-size:22px;line-height:1.15;color:var(--ink)}
  .cve-profile-detail-head p{margin:5px 0 0;font-size:13px;line-height:1.45;color:var(--ink-3)}
  .cve-profile-intro{margin:0;font-size:13px;line-height:1.6;color:var(--ink-2);max-width:760px;text-wrap:pretty}
  .cve-profile-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  /* Un choix unique en édition prend toute la ligne : la piste ou les radios restent lisibles (DEV-560). */
  .cve-profile-detail-grid > .cve-profile-field.is-choice{grid-column:1/-1}
  .cve-profile-field{border:1px solid var(--border);border-radius:10px;background:var(--bg);padding:12px;min-width:0}
  .cve-profile-field.is-readonly{background:var(--surface);border-color:var(--border)}
  .cve-profile-field>span{display:block;font-size:13px;font-weight:600;color:var(--ink-3);margin-bottom:6px}
  .cve-profile-field strong{display:block;font-size:13px;line-height:1.35;color:var(--ink);font-weight:600}
  .cve-profile-field p{margin:0;font-size:13px;line-height:1.55;color:var(--ink-3);text-wrap:pretty}
  .account-identity-field{min-width:0}
  .account-identity-reader,.account-identity-editor{min-height:46px;border-radius:var(--radius-md);background:var(--surface-2);padding:var(--space-2) var(--space-3)}
  .account-identity-reader{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}
  .account-identity-reader strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:1.35;color:var(--ink);font-weight:600}
  .account-identity-editor{display:grid;grid-template-columns:minmax(7.5rem,.7fr) minmax(8rem,1fr) minmax(8rem,1fr) auto;align-items:center;gap:var(--space-2)}
  .account-identity-editor input{width:100%;height:36px;min-width:0;border-radius:var(--radius-sm);color:var(--ink);font:inherit;font-size:13px;padding:0 var(--space-3)}
  .account-identity-editor select{width:100%;height:36px;min-width:0;border:1px solid var(--border-input);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font:inherit;font-size:13px;padding:0 var(--space-3);outline:0}
  .account-identity-editor select:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .account-identity-editor select:disabled,.account-identity-editor input:disabled{opacity:.5;cursor:not-allowed}
  .account-identity-actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:var(--space-2);white-space:nowrap}
  .account-identity-error{margin:var(--space-2) 0 0;color:var(--bad);font-size:13px;line-height:1.4}
  .cve-profile-display-heading{margin-top:var(--space-2);font-size:13px;font-weight:600;color:var(--ink-3)}
  .cve-profile-source{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:35px}
  .cve-profile-source i{font-style:normal;font-family:var(--font-sans);font-size:13px;font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--ink-4);background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:2px 7px;white-space:nowrap}
  .cve-profile-combo{position:relative}
  .cve-profile-pick{display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer}
  .cve-profile-pick span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}
  .cve-profile-menu{position:absolute;top:calc(100% + 5px);left:0;right:0;z-index:80;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);overflow:hidden}
  .cve-profile-menu-search{width:100%;height:36px;border:0;border-bottom:1px solid var(--border);background:var(--surface);color:var(--ink);font:inherit;font-size:13px;outline:none;padding:0 11px}
  .cve-profile-menu-list{max-height:212px;overflow:auto;padding:4px}
  .cve-profile-menu-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)),.cve-profile-menu-list span{display:flex;width:100%;min-height:32px;align-items:center;border:0;background:transparent;border-radius:8px;color:var(--ink-2);font:inherit;font-size:13px;text-align:left;padding:7px 8px}
  .cve-profile-menu-list button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
  .cve-profile-menu-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){cursor:pointer}
  .cve-profile-menu-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--hover-bg);color:var(--ink)}
  .cve-profile-menu-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on{background:var(--select-bg);color:var(--select-ink)}
  .cve-profile-menu-list span{color:var(--ink-4);cursor:default}
  .cve-profile-chiprow{display:flex;flex-wrap:wrap;gap:6px}
  .cve-profile-area{width:100%;border:1px solid var(--input-rest-border);border-radius:8px;color:var(--ink);font:inherit;font-size:13px;line-height:1.4;padding:9px 10px}
  .cve-profile-input{width:100%;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;line-height:1.4;padding:9px 10px;outline:none}
  .cve-profile-input:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .cve-profile-area{resize:vertical;min-height:76px}
  @media(max-width:760px){
    .account-identity-editor{grid-template-columns:minmax(7.5rem,.75fr) minmax(0,1fr) minmax(0,1fr)}
    .account-identity-actions{grid-column:1/-1}
  }
  @media(max-width:560px){
    .account-identity-editor{grid-template-columns:1fr}
    .account-identity-actions{grid-column:auto;justify-content:flex-start}
  }
  .cve-profile-detail-actions{margin:auto -24px 0;padding:11px 24px;min-height:58px;display:flex;justify-content:space-between;align-items:center;gap:12px;border-top:1px solid var(--border);background:var(--surface-2)}
  .cve-profile-detail-actions-left{min-width:0;flex:1;display:flex;align-items:center;gap:8px}
  .cve-profile-detail-actions-main{flex:0 0 auto;display:flex;align-items:center;justify-content:flex-end;gap:8px}

  @media (max-width:900px){

    .cve-profile-detail-grid{grid-template-columns:1fr}
    .cve-profile-detail-actions{justify-content:flex-start;flex-wrap:wrap}
    .cve-profile-detail-actions-left,.cve-profile-detail-actions-main{flex:1 1 100%;justify-content:flex-start;flex-wrap:wrap}
  }
  .cve-cvhead{display:flex;justify-content:space-between;gap:24px;border-bottom:2px solid var(--ink);padding-bottom:16px}
  .cve-cvhead.three{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);gap:22px;align-items:start;border-bottom:0;padding-bottom:0}
  .cve-hcol{display:flex;flex-direction:column;gap:6px}
  .cve-hcol.name{gap:3px;min-width:0}
  .cve-hcol .row{display:flex;align-items:flex-start;gap:8px;min-width:0;font-size:11.5px;color:var(--ink-2);white-space:normal;overflow-wrap:anywhere;word-break:break-word;line-height:1.35}
  .cve-hcol .row[draggable="true"]{cursor:grab}
  .cve-hcol .row[draggable="true"]:active{cursor:grabbing}
  .cve-hcol .row.dragging{opacity:.72;outline:1.5px solid var(--ink-4);outline-offset:3px;border-radius:6px;background:var(--bg-2)}
  .cve-hcol .row.target{outline:1.5px solid var(--ink-4);outline-offset:3px;border-radius:6px;background:var(--bg-2)}
  .cve-hcol .row svg{color:var(--ink-3);flex:0 0 auto}
  .cve-name{font-family:var(--doc-title-font,var(--doc-font,inherit));font-size:26px;font-weight:600;letter-spacing:var(--tracking-tight);color:var(--doc-heading,var(--ink));min-width:0;overflow-wrap:break-word;word-break:break-word;hyphens:auto}
  .cve-cvrole{font-size:15px;font-weight:600;color:var(--doc-role-accent,var(--accent));margin-top:3px;min-width:0;overflow-wrap:break-word}
  .cve-accroche{font-size:12px;line-height:1.65;color:var(--ink-2);margin:16px 0 8px}
  .cve-cvsec{font-family:var(--doc-title-font,var(--doc-font,inherit));font-size:13px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--doc-heading,var(--ink));margin:22px 0 12px;display:flex;align-items:center;gap:10px}
  .cve-cvsec::after{content:"";flex:1;height:0;border-top:1px solid var(--doc-rule,var(--border));background:transparent}
  .cve-contsec{margin:0 0 12px}
  /* Frise — colonne ultra-fine 60px à gauche, dates EMPILÉES en très petit
     (sur deux lignes via le <br> du JSX) et durée en GRAS dessous, le tout aligné
     à GAUCHE de la colonne (lecture occidentale). Barre verticale fine séparant la
     colonne du contenu. Mois abrégés à 3 lettres (jan., fév., sep., …), `auj.`
     pour « aujourd'hui ». */
  .cve-exp,.cve-edu{display:grid;grid-template-columns:72px 1fr;gap:14px;margin-bottom:14px;border-radius:8px;transition:background-color .3s var(--ease-out,ease),box-shadow .3s var(--ease-out,ease)}
  .cve-exp .when,.cve-edu .when{
    font-family:var(--doc-font,inherit);font-size:10px;color:var(--ink-3);
    line-height:1.35;letter-spacing:var(--tracking-tight);
    padding-top:2px;padding-right:10px;text-align:left;
    border-right:1px solid var(--doc-rule,var(--border));align-self:stretch;
  }
  /* Dans le format empilé, la flèche « → » n'a plus de sens (le saut de ligne
     fait la séparation visuelle entre début et fin). */
  .cve-exp .when .datesep,.cve-edu .when .datesep{display:none}
  .cve-exp .when .dur,.cve-edu .when .dur{
    display:block;margin-top:4px;font-family:var(--doc-font,inherit);
    font-size:10px;font-weight:600;color:var(--ink);letter-spacing:var(--tracking-normal);
    white-space:nowrap;
  }

  /* === Thème « inline » (v4c) : pas de colonne dates à gauche, la date est intégrée
     dans la ligne meta (org · lieu · dates) sous le rôle, la durée affichée à droite
     sur la même ligne. Pilotable via `layout.theme = "inline"` (défaut). =========== */
  .cve-exp.cve-exp--inline,
  .cve-edu.cve-edu--inline{display:block;grid-template-columns:none;gap:0}
  /* La durée n'est plus poussée à droite (flex:1 sur meta-line) — elle suit la
     meta-line, alignée à gauche avec un petit gap. Lecture continue gauche→droite,
     pas d'espace mort entre l'org et la durée. */
  .cve-exp--inline .meta-row,
  .cve-edu--inline .meta-row{display:flex;align-items:baseline;gap:12px;justify-content:flex-start;margin-top:2px}
  .cve-exp--inline .meta-line,
  .cve-edu--inline .meta-line{flex:0 1 auto;min-width:0;font-size:11.5px;line-height:1.45;color:var(--ink-3)}
  .cve-exp--inline .meta-line .dates,
  .cve-edu--inline .meta-line .dates{font-family:var(--doc-font,inherit);font-size:10.5px;color:var(--ink-2)}
  .cve-exp--inline .meta-line .dates .datesep,
  .cve-edu--inline .meta-line .dates .datesep{color:var(--ink-4)}
  .cve-exp--inline .meta-line .sep,
  .cve-edu--inline .meta-line .sep{color:var(--ink-4);margin:0 2px}
  .cve-exp--inline .meta-line .org{color:var(--ink);font-weight:600}
  .cve-exp--inline .meta-line .loc{color:var(--ink-3)}
  .cve-edu--inline .meta-line .d-org{color:var(--ink-3);font-weight:400}
  .cve-exp--inline .meta-row .dur,
  .cve-edu--inline .meta-row .dur{
    flex:0 0 auto;font-family:var(--doc-font,inherit);font-size:10px;
    font-style:italic;color:var(--ink-4);
  }
  .cve-exp--inline ul{margin-top:5px}
  .cve-edu--inline{margin-bottom:7px}
  .cve-exp.focus{background:var(--accent-soft);box-shadow:0 0 0 2px var(--accent),0 0 0 8px var(--accent-soft)}
  .cve-as-skill.add{background:var(--accent-soft);border-radius:8px;padding:6px 9px;margin:-2px -9px}
  .cve-as-skill.add b{color:var(--accent-700)}
  .cve-exp .role{font-size:13px;font-weight:600;color:var(--doc-role-accent,var(--accent))}
  .cve-exp .org{font-size:12.5px;color:var(--ink);font-weight:600;margin-top:1px}
  .cve-exp .org span{font-weight:400;color:var(--ink-3)}
  .cve-exp ul{list-style:none;margin:7px 0 0;padding:0;display:flex;flex-direction:column;gap:5px}
  .cve-exp li{font-size:11.5px;line-height:1.5;color:var(--ink-2);padding-left:0;position:relative}
  .cve-exp li::before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background:currentColor;margin-right:8px;vertical-align:2px}

  /* Modèle deux colonnes (d'après le CV fourni) */
  .cve-cols{display:grid;grid-template-columns:1fr;gap:0;margin-top:18px}
  .cve-main2{min-width:0}
  .cve-edu .d-role{font-size:12.5px;font-weight:600;color:var(--doc-heading,var(--ink))}
  .cve-edu .d-cur{font-size:9.5px;font-weight:600;color:var(--warn);background:var(--warn-soft);border-radius:99px;padding:1px 7px;margin-left:6px;text-transform:uppercase;letter-spacing:.03em}
  /* À l'impression / dans l'aperçu PDF : « en cours » redevient un texte normal entre parenthèses */
  .lte-pdf .cve-edu .d-cur{background:none;border-radius:0;padding:0;margin-left:5px;font-size:12px;font-weight:400;color:var(--ink-2);text-transform:none;letter-spacing:var(--tracking-normal)}
  .lte-pdf .cve-edu .d-cur::before{content:"("}
  .lte-pdf .cve-edu .d-cur::after{content:")"}
  .cve-edu .d-org{font-size:11.5px;color:var(--ink-3);margin-top:1px}
  .cve-edu .d-detail{font-size:11.5px;line-height:1.42;color:var(--ink-3);margin-top:3px}
  .cve-edu--inline .d-detail{margin-top:2px}
  .cve-as-skill{margin-bottom:9px}
  .cve-as-skill b{display:block;font-size:11.5px;font-weight:600;color:var(--ink)}
  .cve-as-skill span{display:block;font-size:10.5px;line-height:1.45;color:var(--ink-3);margin-top:1px}
  .cve-as-skill span.tools{color:var(--ink-2)}
  @media (max-width:560px){.cve-cols{grid-template-columns:1fr}}
  .cve-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px 22px}
  .cve-info-grid>.cve-pagespacer,.cve-info-grid>.cve-contsec,
  .cve-toolgrid>.cve-pagespacer,.cve-toolgrid>.cve-contsec{grid-column:1/-1}
  /* Compétences sur 3 colonnes (data-skillcols) — pour condenser et tenir sur une page */
  .cve-cv[data-skillcols="3"] .cve-info-grid,.lte-zoomwrap[data-cvskillcols="3"] .cve-info-grid{grid-template-columns:1fr 1fr 1fr;gap:6px 16px}
  .cve-cv[data-skillcols="3"] .cve-as-skill span,.lte-zoomwrap[data-cvskillcols="3"] .cve-as-skill span{font-size:10px;line-height:1.35}
  .cve-toolgrid{display:grid;grid-template-columns:1fr 1fr;gap:7px 22px;margin-bottom:12px}
  .cve-toolgrp{margin-bottom:6px}
  .cve-toolgrp b{display:block;font-size:11.5px;font-weight:600;color:var(--ink)}
  .cve-toolgrp span{display:inline;font-size:10.5px;line-height:1.45;color:var(--ink-2);margin-top:1px}
  .cve-cv[data-skillcols="3"] .cve-toolgrid,.lte-zoomwrap[data-cvskillcols="3"] .cve-toolgrid{grid-template-columns:1fr 1fr 1fr;gap:6px 16px}
  .cve-cv[data-skillcols="3"] .cve-toolgrp span,.lte-zoomwrap[data-cvskillcols="3"] .cve-toolgrp span{font-size:10px;line-height:1.35}
  /* Grilles complètes 3/2/1, titres au-dessus des détails. */
  .cve-cv .cve-collection[data-collection-columns]{display:grid;gap:var(--space-2) var(--space-4)}
  .cve-cv .cve-collection[data-collection-columns="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}
  .cve-cv .cve-collection[data-collection-columns="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cve-cv .cve-collection[data-collection-columns="1"]{grid-template-columns:minmax(0,1fr)}
  .cve-foot3{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:22px}
  /* Titres du pied (Atouts / Langues / Centres d'intérêt) : filet inline à droite
     du titre, sur la même ligne. Définition partagée avec `.cve-cvsec::after` pour
     un rendu strictement identique (vrai filet de bordure, stable au zoom/export). */
  .cve-f3-title{display:flex;align-items:center;gap:10px;font-family:var(--doc-title-font,var(--doc-font,inherit));font-size:13px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--doc-heading,var(--ink));margin-bottom:9px}
  .cve-f3-title::after{content:"";flex:1;height:0;border-top:1px solid var(--doc-rule,var(--border));background:transparent}
  .cve-f3-li{font-size:12px;font-weight:600;color:var(--accent);margin-bottom:5px}
  .cve-f3-lang{margin-bottom:9px}
  .cve-f3-lang b{display:block;font-size:12.5px;font-weight:600;color:var(--accent)}
  .cve-f3-lang span{display:block;font-size:11.5px;color:var(--ink-3);margin-top:1px}
  .cve-f3-b{display:flex;flex-direction:column;gap:1px;margin-bottom:4px;color:var(--ink)}
  .cve-f3-b b{font-size:12.5px;font-weight:600;color:var(--accent);line-height:1.18}
  .cve-f3-b ul{list-style:none;margin:2px 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
  .cve-f3-b li{font-size:10.8px;font-weight:500;color:var(--ink-2);line-height:1.22;padding-left:9px;position:relative}
  .cve-f3-b li::before{content:"";position:absolute;left:0;top:.58em;width:3px;height:3px;border-radius:50%;background:currentColor}
  .cve-f3-list{display:flex;flex-direction:column;gap:4px;margin-top:4px}
  .cve-f3-b--secondary{margin-bottom:0}
  .cve-f3-b--secondary ul{display:none}
  .cve-f3-ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px}
  .cve-f3-ul li{font-size:11.5px;line-height:1.45;color:var(--ink-2);padding-left:0;position:relative}
  .cve-f3-ul li::before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background:currentColor;margin-right:8px;vertical-align:2px}
  @media (max-width:560px){.cve-foot3{grid-template-columns:1fr}}

  /* ===== Outil « Lettres de motivation » ===== */

  /* `position:relative` est la SEULE règle de ce chantier posée sans condition sur la présence
     du décor de coupure : les feuilles paginées sont absolues et ont besoin d'un référent. Sans
     décalage ni descendant absolu, un instantané publié avant SIH-247, rendu verbatim, reste
     pixel pour pixel le même : c'est ce qui rend inutile un incrément de DOCUMENT_RENDER_VERSION. */
  .lte-letter{position:relative;width:794px;max-width:100%;margin:0 auto;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg);padding:54px 58px;min-height:1123px;font-size:13px;line-height:1.7;color:var(--ink-2)}
  /* LETTRE PAGINÉE (SIH-247, même mécanique que `.cve-cv.two`) : dès qu'une lettre dépasse une
     feuille, la « feuille unique » n'existe plus. Le blanc, le bord et l'ombre appartiennent aux
     feuilles `.cve-page-sheet` ; le fond du canvas doit rester visible dans l'écart entre elles.
     Tout est conditionné à la classe `two`, donc à la PRÉSENCE du décor : une lettre déjà
     publiée sans découpe, rendue verbatim, s'affiche exactement comme avant ce chantier. */
  .lte-letter.two{background:transparent;border:0;border-radius:0;box-shadow:none}
  /* Le contenu passe AU-DESSUS des feuilles : elles sont positionnées (`z-index:0`), donc
     peintes après un contenu qui, lui, ne l'est pas, et elles le recouvriraient de blanc. */
  .lte-letter.two > .lte-lhead,
  .lte-letter.two > .lte-lmeta,
  .lte-letter.two > .lte-lobj,
  .lte-letter.two > .lte-lref,
  .lte-letter.two > .lte-p,
  .lte-letter.two > .lte-close{position:relative;z-index:1}
  .lte-lhead{display:flex;justify-content:space-between;gap:30px}
  .lte-from{display:flex;flex-direction:column;align-items:flex-start}
  .lte-from .n{font-size:15px;font-weight:600;color:var(--doc-ink,var(--ink))}
  .lte-from .l{font-size:13px;color:var(--doc-ink,var(--ink-2));line-height:1.6;margin-top:3px}
  .lte-to{text-align:right;font-size:13px;color:var(--doc-ink,var(--ink-2));line-height:1.6}
  .lte-to .org{font-size:15px;font-weight:600;color:var(--doc-ink,var(--ink))}
  /* Marqueur « info manquante » : affordance d'édition (jamais inventé), masquée à l'impression/PDF. */
  .lte-lmeta{margin:26px 0 8px;font-size:13px;color:var(--doc-ink,var(--ink-2));text-align:left}
  .lte-lobj{margin:18px 0 22px;font-size:13px;font-weight:600;color:var(--doc-ink,var(--ink))}
  .lte-lobj span{font-weight:400;color:var(--ink-2)}
  .lte-lobj.has-ref{margin-bottom:3px}
  .lte-lref{margin:0 0 22px;font-size:13px;font-weight:600;color:var(--doc-ink,var(--ink))}
  .lte-lref span{font-weight:400;color:var(--ink-2)}
  .lte-p{font-size:13px;line-height:1.7;margin-bottom:15px}
  .lte-letter .lte-sign{font-size:13px;margin-top:15px}
  .lte-letter .mark,.lte-msg-box .mark,.lte-email-body .mark{background:var(--accent-soft);padding:1px 2px;border-radius:3px;transition:background-color .3s var(--ease-out,ease)}
  .lte-letter .mark.focus,.lte-msg-box .mark.focus,.lte-email-body .mark.focus{background:var(--accent);color:#fff}

  /* e-mail de candidature */
  .lte-emailwrap{width:600px;max-width:100%;margin:0 auto}
  .lte-email{background:#fff;border:1px solid var(--border);border-radius:13px;overflow:hidden}
  .lte-email-hd{padding:6px 16px 8px;background:var(--surface);border-bottom:1px solid var(--border)}
  /* Eyebrow e-mail (parité format Message, refonte 2026-07-18) : « E-MAIL » à gauche + société
     à droite, séparé des champs À/Objet en dessous. */
  .lte-email-hd-top{display:flex;align-items:center;justify-content:space-between;padding:5px 0 8px;border-bottom:1px solid var(--border)}
  .lte-email-hd-top .lab{font-size:10.5px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-3)}
  .lte-email-hd-top .cnt{font-family:var(--font-data);font-size:11.5px;color:var(--ink-4)}
  .lte-email-hd .row{display:flex;gap:10px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--border)}
  .lte-email-hd .row:last-child{border-bottom:0}
  .lte-email-hd .k{flex:0 0 auto;min-width:54px;padding-right:8px;font-size:11px;font-weight:600;color:var(--ink-4);text-transform:uppercase;letter-spacing:var(--tracking-wide)}
  .lte-email-hd .v{font-size:12.5px;color:var(--ink-2);min-width:0}
  .lte-email-hd .obj .v{font-weight:600;color:var(--ink)}
  .lte-email-body{padding:18px;font-size:13px;line-height:1.65;color:var(--ink-2)}
  .lte-email-body p{margin-bottom:12px}
  .lte-email-sign{margin-top:18px;font-size:12.5px;line-height:1.6;color:var(--ink-2)}
  .lte-email-sign b{color:var(--ink);font-weight:600}
  .lte-email-sign .t{color:var(--ink-3);font-size:12px}

  /* message court (plateformes) */
  .lte-msgwrap{width:560px;max-width:100%;margin:0 auto}
  .lte-msg{background:#fff;border:1px solid var(--border);border-radius:13px;overflow:hidden}
  .lte-msg-head{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;border-bottom:1px solid var(--border);background:var(--surface)}
  .lte-msg-head .lab{font-size:10.5px;font-weight:600;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--ink-3)}
  .lte-msg-head .cnt{font-family:var(--font-data);font-size:11.5px;color:var(--ink-4)}
  .lte-msg-head .cnt.over{color:var(--bad,var(--danger-500))}
  .lte-msg-box{padding:18px;font-size:13px;line-height:1.65;color:var(--ink-2);min-height:300px}
  .lte-msg-box p{margin-bottom:12px}
  .lte-msg-box p:last-child{margin-bottom:0}
  .lte-msg-hint{display:flex;align-items:flex-start;gap:8px;font-size:11.5px;color:var(--ink-3);line-height:1.5;background:var(--support-bg);border-radius:var(--radius-md);padding:10px 12px;margin-top:14px}
  .lte-msg-hint svg{flex:0 0 auto;color:var(--ink-3);margin-top:1px}
  .lte-sign{margin-top:26px}
  .lte-sign .name{font-weight:600;color:var(--ink);margin-top:6px}

  /* ===== Outil « Contacts » ===== */
  .contview{flex:1;display:flex;min-width:0;min-height:0;container:contacts-workspace / inline-size}
  /* La colonne suit l'écran au lieu d'être figée à 340 px (SIH-101). Le
     pourcentage de `--contacts-rail-w` se mesure sur CE conteneur, qui couvre
     la fenêtre : c'est ce qui rend la largeur juste quelle que soit la barre
     de navigation. La fiche prend le reste et garde son propre gabarit de
     lecture (`.ct-dcard`, 1040 px centrés) ; elle n'est pas re-plafonnée ici. */
  .ct-body{flex:1;display:grid;grid-template-columns:var(--contacts-rail-w) minmax(0,1fr);min-width:0;min-height:0}
  /* Le plan de la fenêtre traverse Contacts, comme il traverse le Tableau. Mesuré le
     2026-08-03 : `.ct-list` et `.ct-detail`, toutes deux en `--surface`, couvraient la
     fenêtre bord à bord — le plan n'apparaissait jamais et l'écran paraissait blanc alors
     que Candidatures paraissait gris. Même objet, deux surfaces selon l'écran.
     `--bg-2` est ré-épinglé sur `--surface` pour ce sous-arbre : le champ de recherche, la
     piste d'onglets et la ligne sélectionnée deviennent des TUILES sur le plan, au lieu de
     creux gris sur du blanc. Aucun composant n'est touché — le contrat de la barre d'onglets
     interdit de la restyler, et il n'a pas à l'être : elle consomme un autre token. */
  .ct-list{border-right:1px solid var(--border);--bg-2:var(--surface);--ct-gutter:clamp(20px,6%,32px);display:flex;flex-direction:column;min-height:0}
  /* UN SEUL retrait intérieur pour toute la colonne (SIH-101, arbitrage Landry 2026-08-04).
     Avant, il y en avait TROIS, jamais alignés : titre/recherche/onglets à 16 px du bord,
     intitulés de groupe et fond des lignes à 8 px, avatars à 18 px. Ces valeurs avaient été
     réglées quand la colonne était figée à 340 px et n'ont pas suivi son passage en largeur
     fluide — d'où « on est trop proche des bords » sur grand écran, mesuré à 8 px de
     respiration pour une colonne de 500. Le retrait est donc lui aussi FLUIDE, et il est
     porté UNE fois : l'en-tête et la liste le consomment tous les deux, ce qui fait partir
     la recherche, les onglets, les intitulés de groupe et le fond des lignes de la MÊME
     ligne verticale. Mesuré : 20 px à 340 de colonne · 23 px à 381 · 30 px à 500. */
  .ct-lhead{padding:14px var(--ct-gutter) 10px;display:flex;flex-direction:column;gap:10px;flex:0 0 auto}
  .ct-ltitle{display:flex;align-items:center;justify-content:space-between}
  .ct-ltitle h2{font-size:22px;font-weight:600;letter-spacing:var(--tracking-tight)}
  .ct-search{display:flex;align-items:center;gap:8px;border:1px solid var(--input-rest-border);border-radius:8px;padding:8px 11px;color:var(--ink-3);cursor:text}
  .ct-search input{min-width:0;border:0;background:transparent;outline:none;font:inherit;font-size:13px;color:var(--ink);flex:1}

  .ct-lscroll{flex:1;overflow-y:auto;padding:6px var(--ct-gutter) 16px}
  .ct-grp{font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-4);padding:12px 10px 6px;display:flex;align-items:center;gap:7px}
  .ct-citem{display:flex;align-items:center;gap:11px;width:100%;text-align:left;border:0;background:transparent;border-radius:10px;padding:9px 10px;cursor:pointer}
  /* Canon : une sélection de LISTE est neutre (état de position, pas une
     action). Sur liste blanche : survol = creux visible, sélection = même
     creux + filet — jamais de bleu. */
  .ct-citem:hover{background:var(--content-hover-bg)}
  .ct-citem.on{background:var(--content-selected-bg);box-shadow:none}
  .ct-av{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:600;color:var(--fg-inverse);flex:0 0 auto}
  img.ct-av,img.ct-dav{display:block;object-fit:cover;background:var(--bg-2)}
  /* Avatar personne + petit badge logo entreprise (favicon) en coin. */
  .ct-av-wrap{position:relative;flex:0 0 auto;display:inline-flex}
  .ct-av-co{position:absolute;right:-2px;bottom:-2px;width:17px;height:17px;border-radius:6px;background:var(--logo-plate);border:1px solid var(--border);object-fit:cover}
  .ct-ci-body{flex:1;min-width:0}
  .ct-ci-name{display:block;font-size:14px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ct-ci-sub{display:block;font-size:12px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}

  /* Fond retiré : les blocs internes sont déjà blancs et deviennent des tuiles sur le plan. */
  /* La fiche est une COLONNE DE LECTURE CENTRÉE qui REMPLIT son volet (SIH-101, arbitrage
     Landry 2026-08-04, sur le modèle du feed du Vault — même comportement, valeurs propres).
     Avant, elle était plafonnée à 680 px : dans un volet de 1340, cela laissait 394 px de
     vide de chaque côté, et le vide de droite se voyait comme un trou. Désormais elle prend
     toute la largeur disponible, bornée par un plafond de lecture, et ses deux marges sont
     TOUJOURS égales — à n'importe quelle largeur et à n'importe quel zoom, puisque la
     gouttière du volet est fluide et le centrage automatique.
     Mesuré : volet 700 → fiche 630, marges 35/35 · volet 979 → 881, marges 49/49 ·
     volet 1340 → 1040 (plafond), marges 150/150.
     Le plafond existe parce qu'au-delà, les tuiles E-mail/LinkedIn et les lignes de
     coordonnées deviennent des rubans presque vides : essayé à 920 puis 1200, écarté. */
  .ct-detail{min-width:0;min-height:0;overflow-y:auto;padding:26px clamp(24px,5%,72px) 40px}
  .ct-dcard{width:100%;max-width:1040px;margin-inline:auto}
  .ct-dhero{display:flex;align-items:center;gap:16px}
  .ct-dav{width:72px;height:72px;border-radius:50%;display:grid;place-items:center;font-size:30px;font-weight:600;color:var(--fg-inverse);flex:0 0 auto}
  .ct-dhero h2{font-size:22px;font-weight:600;letter-spacing:var(--tracking-tight)}
  .ct-drole{font-size:14px;color:var(--ink-2);margin-top:2px}
  .ct-dco{font-size:13px;color:var(--ink-3);margin-top:2px;display:flex;align-items:center;gap:7px}
  .ct-cologo{width:18px;height:18px;border-radius:6px;background:var(--surface);border:1px solid var(--border);object-fit:cover;flex:0 0 auto}
  .ct-co-link{border:0;background:transparent;font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer;padding:0;border-radius:3px;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:2px;transition:text-decoration-color var(--dur-fast,.18s) var(--ease-out),color var(--dur-fast,.18s) var(--ease-out)}
  .ct-co-link:hover{color:var(--accent);text-decoration-color:var(--accent)}
  .ct-added{display:flex;align-items:center;gap:6px;font-family:var(--font-sans);font-size:11px;color:var(--ink-4);margin-top:8px}
  /* Filtre par entreprise (chip effaçable sous les segments). */
  .ct-cofilter{display:flex;align-items:center;gap:8px;margin-top:8px;padding:6px 8px 6px 9px;background:var(--surface);border:1px solid var(--border);border-radius:8px}
  .ct-cofilter-name{flex:1;min-width:0;font-size:13px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ct-quick{display:flex;gap:9px;margin:18px 0 4px}
  .ct-qbtn{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;padding:11px 0;background:var(--surface);border:1px solid transparent;border-radius:10px;color:var(--accent-ink);font:inherit;font-size:12px;font-weight:600;cursor:pointer}
  .ct-qic{width:30px;height:30px;border-radius:50%;background:var(--accent-soft);color:var(--accent-ink);display:grid;place-items:center}
  .ct-qbtn:hover{background:var(--bg-2);border-color:var(--accent-soft-2)}
  .ct-sec{margin-top:20px}
  .ct-sec-h{font-family:var(--font-sans);font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);margin-bottom:8px;padding-left:2px;display:flex;align-items:center;gap:7px}
  .ct-sec-h .count-badge{text-transform:none;letter-spacing:var(--tracking-normal)}
  .ct-glist{border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--content-bg)}
  .ct-grow{display:flex;align-items:center;gap:12px;padding:12px 15px;position:relative}
  .ct-grow + .ct-grow::before{content:"";position:absolute;left:52px;right:0;top:0;height:1px;background:var(--border)}
  .ct-gic{width:30px;height:30px;border-radius:8px;background:var(--bg-2);color:var(--ink-3);display:grid;place-items:center;flex:0 0 auto}
  .ct-gic.has-logo{background:var(--surface);border:1px solid var(--border);overflow:hidden;padding:0}
  .ct-gic.has-logo img{width:18px;height:18px;object-fit:contain}
  .ct-gt{flex:1;min-width:0}
  .ct-gl{display:block;font-size:11px;color:var(--ink-3)}
  .ct-gv{display:block;font-size:14px;color:var(--ink);word-break:break-word}
  .ct-gv.link{color:var(--accent)}
  .ct-link-card{display:flex;align-items:center;gap:13px;background:transparent;border:1px solid transparent;border-radius:10px;padding:13px 15px}
  .ct-link-card + .ct-link-card{border-top-color:var(--support-border);border-top-left-radius:0;border-top-right-radius:0}
  .ct-lc-logo{width:40px;height:40px;border-radius:10px;background:var(--bg-2);border:1px solid var(--border);display:grid;place-items:center;font-weight:600;color:var(--ink-2);flex:0 0 auto}
  .ct-lc-body{flex:1;min-width:0}
  .ct-lc-role{font-size:14px;font-weight:600}
  .ct-lc-meta{font-size:12px;color:var(--ink-3);margin-top:2px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
  .ct-tl{position:relative;padding-left:22px}
  .ct-tl::before{content:"";position:absolute;left:6px;top:4px;bottom:4px;width:2px;background:var(--border)}
  .ct-tl-it{position:relative;padding:0 42px 14px 0;border-radius:8px}
  .ct-tl-it::before{content:"";position:absolute;left:-19px;top:3px;width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px var(--bg)}
  .ct-tl-it.editing{outline:2px solid var(--accent-soft);outline-offset:2px}
  /* Échanges DÉRIVÉS du journal de candidature (rattachés via l'interlocuteur) : pastille + teinte
     distinctes, non éditables ici (ils appartiennent à la candidature). */
  .ct-tl-journal{margin-top:2px}
  .ct-tl-it-journal::before{background:var(--ink-4)}
  .ct-tl-origin{display:inline-flex;align-items:center;gap:5px;margin-right:7px;padding:1px 7px;border-radius:99px;background:var(--bg-2);font-size:11px;font-weight:600;color:var(--ink-3);vertical-align:1px}
  .ct-tl-origin svg{color:var(--ink-4)}
  .ct-tw{font-family:var(--font-sans);font-size:11px;color:var(--ink-3)}
  .ct-td{font-size:13px;color:var(--ink-2);margin-top:2px;word-break:break-word}
  /* Rendu markdown d'une note (synthèse d'appel collée en markdown → texte formaté). */
  .ct-td .ct-md-p{margin:0 0 4px}
  .ct-td .ct-md-p:last-child{margin-bottom:0}
  .ct-td .ct-md-h{font-weight:600;color:var(--ink);margin:7px 0 3px;line-height:1.35}
  .ct-td .ct-md-h:first-child{margin-top:0}
  .ct-td .ct-md-h1{font-size:14px}
  .ct-td .ct-md-h2{font-size:14px}
  .ct-td .ct-md-h3,.ct-td .ct-md-h4{font-size:13px}
  .ct-td ul,.ct-td ol{margin:3px 0 5px;padding-left:20px}
  .ct-td li{margin:1px 0}
  .ct-td strong{font-weight:600;color:var(--ink)}
  .ct-td em{font-style:italic}
  .ct-td code{font-family:var(--font-data);font-size:12px;background:var(--bg-2);padding:1px 4px;border-radius:3px}
  .ct-td a{color:var(--accent);text-decoration:underline}
  /* Actions par note (modifier / supprimer) révélées au survol. */
  /* SIH-115 : role discret, taille compacte. Ils mesuraient 24 px, une onzieme hauteur
     pour la meme intention que le « ⋯ » d'une carte. Ne reste que le TON danger. */
  /* Composeur de note en ligne (esprit journal de bord, contexte contact). */
  .ct-note-composer{margin-top:12px;border:1px solid var(--border);border-radius:10px;background:var(--surface-2);transition:border-color .18s var(--ease-out),box-shadow .18s var(--ease-out)}
  .ct-note-composer:focus-within{border-color:var(--accent);box-shadow:var(--ring-focus)}
  .ct-note-composer.editing{border-color:var(--accent)}
  .ct-note-composer .jc-rte-toolbar{padding:5px 8px 6px;margin:0;border-bottom:1px solid var(--border)}
  .ct-note-composer .jc-tsep{width:1px;height:18px;background:var(--border);margin:0 4px}
  .ct-note-input.jc-input{min-height:56px;max-height:220px;overflow-y:auto;padding:9px 11px;font-size:14px;line-height:1.5}
  .ct-note-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-top:1px solid var(--border)}
  .ct-note-date{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3)}
  .ct-note-date input{border:0;background:transparent;font:inherit;font-size:12px;color:var(--ink-2);padding:2px 2px;cursor:pointer}
  .ct-note-actions{display:flex;gap:8px}
  /* Bouton d'ouverture de la modale de note (ajout) — pas de zone de saisie permanente. */
  /* SIH-115 : role secondaire. Ne garde que sa place dans le flux. */
  /* Fenêtre Travail « rouvrir la note en grand » : le composeur remplit la hauteur. */
  .ui-window__body.ct-note-window-body{display:flex;flex-direction:column;padding:0}
  .ct-note-composer.in-modal{flex:1 1 auto;min-height:0;width:100%;max-width:860px;margin:0 auto;border:0;border-radius:0;background:transparent;box-shadow:none;display:flex;flex-direction:column;padding:14px 22px 18px}
  .ct-note-composer.in-modal:focus-within{box-shadow:none}
  .ct-note-composer.in-modal .jc-rte-toolbar{padding:0 0 8px;border-bottom:1px solid var(--border);flex:0 0 auto}
  .ct-note-composer.in-modal .ct-note-input{flex:1 1 auto;min-height:0;max-height:none;padding:14px 2px;font-size:14px;line-height:1.55}
  .ct-note-composer.in-modal .ct-note-foot{border-top:1px solid var(--border);padding:12px 0 0;flex:0 0 auto}
  @container contacts-workspace (max-width:920px){.ct-body{grid-template-columns:260px minmax(0,1fr)}}
  /* La liste reste accessible, la fiche retrouve toute la largeur utile. */
  @container contacts-workspace (max-width:760px){
    .ct-body{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(240px,35%) minmax(0,1fr)}
    .ct-list{border-right:0;border-bottom:1px solid var(--border)}
    .ct-detail{padding-top:18px;padding-bottom:24px}
    .ct-dhero{flex-wrap:wrap}
    .ct-dhero>div{min-width:0}
    .ct-dhero h2,.ct-drole,.ct-co-link{overflow-wrap:anywhere}
  }
  /* Tâches confiées (lien inverse depuis le gestionnaire d'objectifs) */
  .ct-tasks{display:flex;flex-direction:column;gap:6px}
  .ct-task{display:flex;align-items:center;gap:10px;text-align:left;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:12px;cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out);background:var(--content-bg)}
  .ct-task-dot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:var(--ink-4)}
  .ct-task-dot.s-todo{background:var(--info)}
  .ct-task-dot.s-doing{background:var(--accent)}
  .ct-task-dot.s-review{background:var(--warn)}
  .ct-task-dot.s-done{background:var(--good)}
  .ct-task-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
  .ct-task-t{font-size:13px;font-weight:500;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ct-task-m{font-size:11px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ct-task svg{color:var(--ink-4);flex-shrink:0}
  .ct-task:hover svg{color:var(--accent)}
  .ct-task-foot{margin-top:8px;font-size:11px;color:var(--ink-4);text-wrap:pretty}

  /* ============================================================================
     Journal de bord — saisie « façon chat » (hifi-journal-chat.jsx)
     ========================================================================== */
  /* Barre flottante ancrée en bas du feed (sticky) */
  .jc-barwrap{position:sticky;bottom:0;left:0;right:0;flex-shrink:0;margin-top:auto;padding:4px 24px 4px;z-index:20;
    background:linear-gradient(to top, var(--screen-plane) 62%, color-mix(in srgb,var(--screen-plane) 0%, transparent) 100%);pointer-events:none}
  /* Au focus / saisie, on redonne un peu d'air pour bien détacher l'éditeur du feed */
  .jc-barwrap:has(.jc-bar.expanded){padding-top:14px;padding-bottom:12px}
  .jc-barwrap > *{pointer-events:auto}
  .jc-composer-shell{position:relative;width:min(960px,calc(100% - 48px));margin:0 auto;
    /* SIH-115 : `--jc-action-height` (34 px) et `--jc-mini-control-height` (28 px) sont
       SUPPRIMES. Ils ne servaient qu'a donner au composeur des hauteurs de bouton a lui ;
       les boutons prennent desormais les deux tailles du role. Les deux qui restent
       mesurent des objets qui ne sont PAS des boutons : les pastilles de type/carnet/date
       sont des declencheurs de selecteur, un objet distinct qui garde sa propre echelle. */
    --jc-control-height:32px;--jc-rail-control-height:26px}
  body[data-side="expanded"] .jc-composer-shell{width:min(820px,calc(100% - 88px))}
  /* Composer (planche G) : blanc chaud + hairline, radius 14 — l'ombre portée lourde
     disparaît, la surface interactive se distingue par son hairline, pas par son relief. */
  .jc-bar{position:relative;z-index:2;margin:0 auto;background:var(--surface);border:1px solid var(--border-strong);
    border-radius:16px;box-shadow:none;
    padding:12px 12px 10px;transition:border-color var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out)}
  /* État au repos (pas de saisie, pas de focus) → barre compacte et discrète.
     Au focus / saisie, on retrouve l'éditeur complet (.expanded / .active). */
  .jc-bar:not(.expanded){
    padding:var(--space-2) 6px var(--space-2) var(--space-4);border-radius:var(--radius-lg);
    box-shadow:none;display:flex;align-items:center;gap:var(--space-3)
  }
  .jc-bar:not(.expanded) .jc-input{
    font-size:14px;line-height:1.4;padding:3px 0;flex:1;min-width:0
  }
  .jc-bar:not(.expanded) .jc-text-shell{flex:1;min-width:0}
  .jc-bar:not(.expanded) .jc-input::placeholder{color:var(--ink-3)}
  .jc-bar:not(.expanded) .jc-rte-toolbar,
  .jc-bar:not(.expanded) .jc-chips,
  .jc-bar:not(.expanded) .jc-controls > .jc-pills{display:none}
  .jc-bar:not(.expanded) .jc-controls{padding:0;gap:0;margin:0;border-top:0;flex-shrink:0}
  .jc-bar:not(.expanded) .jc-actions{gap:0}
  /* SIH-115 : la barre repliee est dense, donc l'envoi y prend la taille COMPACTE du
     role (26 px) au lieu d'un 28 px invente pour ce seul endroit. Le selecteur est
     inscrit a la declaration des tailles, plus haut : rien n'est redonne ici. */
  .jc-bar:not(.expanded).active{border-color:color-mix(in srgb,var(--accent) 45%,var(--border-strong));box-shadow:0 0 0 3px var(--accent-soft)}
  .jc-rest-type{display:inline-flex;align-items:center;gap:8px;flex:0 0 auto;color:var(--ink-3)}
  .jc-rest-type > svg{color:var(--ink-3)}
  .jc-rest-type > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:26px;padding:0 9px;border:1px solid var(--accent-soft-2);border-radius:var(--radius-pill);background:var(--accent-soft);color:var(--accent-ink);font:inherit;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
  .jc-rest-type > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--accent-soft-2);border-color:color-mix(in srgb,var(--accent) 28%,var(--border))}
  .jc-input{width:100%;border:0;outline:0;resize:none;background:transparent;font-family:var(--font-sans);
    font-size:14px;line-height:1.5;color:var(--ink);padding:6px 8px 2px;max-height:280px;overflow-y:auto}
  .jc-input::placeholder{color:var(--ink-4)}
  .jc-text-shell{position:relative;min-width:0}
  /* Éditeur complet : une surface basse au repos, qui grandit avec le texte. Le focus réel
     reste volontairement invisible : le caret suffit et aucun clic ne change l'apparence. */
  .jc-bar.expanded{padding:0 var(--space-4) var(--space-3);border-radius:var(--radius-xl);box-shadow:var(--shadow-popover)}
  .jc-bar.awaiting-input .jc-text-shell::before{content:"";position:absolute;z-index:1;left:0;top:6px;width:2px;height:20px;
    border-radius:99px;background:var(--ink-2);pointer-events:none;animation:jc-caret-blink 1.05s steps(1,end) infinite}
  .jc-bar.expanded.awaiting-input .jc-text-shell::before{left:12px;top:18px}
  .jc-bar.awaiting-input .jc-input{caret-color:transparent}
  @keyframes jc-caret-blink{0%,46%{opacity:1}47%,100%{opacity:0}}
  @media (prefers-reduced-motion:reduce){.jc-bar.awaiting-input .jc-text-shell::before{animation:none}}
  .jc-bar.expanded .jc-input{min-height:72px;padding:18px var(--space-4) var(--space-2);overflow-y:hidden}
  /* Nouvelle entrée → la fenêtre de capture (CaptureWindow) : la carte du composeur garde son
     propre cadre, la fenêtre n'en ajoute aucun. */
  .jc-capture-overlay .jc-barwrap{position:static;display:block;margin:0;padding:0;background:none;z-index:auto}
  .jc-capture-overlay .jc-composer-shell,.jc-capture-overlay .jc-barwrap:has(.jc-bar.expanded) .jc-composer-shell{width:100%;margin:0}
  .jc-capture-overlay .jc-bar.expanded .jc-input{min-height:180px;max-height:280px;resize:vertical;overflow-y:auto}
  .jc-focus-toggle{position:absolute;z-index:2;top:12px;right:12px}
  .jc-capture-overlay:has(.jc-focus-toggle) .jc-input{padding-right:112px}
  /* Mode focus : une page d'écriture, pas une pop-up agrandie. L'application disparaît et
     le regard ne rencontre qu'une colonne éditoriale, ses commandes, puis le repère discret. */
  .jc-capture-overlay.focus-mode{--jc-focus-content-width:min(860px,100%);box-sizing:border-box;display:flex;flex-direction:column;min-height:100dvh;padding:var(--space-5);overflow:hidden}
  .jc-capture-overlay.focus-mode .jc-barwrap{flex:1;min-height:0;display:flex;flex-direction:column}
  .jc-capture-overlay.focus-mode .jc-composer-shell,.jc-capture-overlay.focus-mode .jc-barwrap:has(.jc-bar.expanded) .jc-composer-shell{width:var(--jc-focus-content-width);height:100%;min-height:0;display:flex;flex-direction:column;margin:0 auto}
  .jc-capture-overlay.focus-mode .jc-bar{width:100%;box-sizing:border-box;flex:1;min-height:0;display:flex;flex-direction:column;margin:0;padding:var(--space-3) var(--space-4);border-color:transparent;box-shadow:none}
  .jc-capture-overlay.focus-mode .jc-text-shell{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto minmax(0,1fr);column-gap:var(--space-3)}
  .jc-focus-heading{grid-column:1;grid-row:1;align-self:center;min-width:0;margin:0;color:var(--ink-3);font:inherit;font-size:13px;font-weight:500;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .jc-capture-overlay.focus-mode .jc-bar.expanded .jc-input{grid-column:1/-1;grid-row:2;height:auto;min-height:0;max-height:none;padding:var(--space-4) 0;resize:none;overflow-y:auto;font-size:16px;line-height:1.7}
  .jc-capture-overlay.focus-mode .jc-bar.expanded.awaiting-input .jc-text-shell::before{left:0;top:calc(34px + var(--space-4) + 4px)}
  .jc-capture-overlay.focus-mode .jc-focus-toggle{position:static;grid-column:2;grid-row:1}
  .jc-capture-overlay.focus-mode .jc-capture-invitation{width:var(--jc-focus-content-width);margin:var(--space-4) auto 0;padding:0;text-align:center}
  @media (max-width:640px){.jc-capture-overlay .jc-bar.expanded .jc-input{min-height:160px}.jc-focus-toggle-label{display:none}.jc-capture-overlay:has(.jc-focus-toggle) .jc-input{padding-right:48px}}
  @media (max-width:640px){.jc-capture-overlay.focus-mode{padding:var(--space-5) var(--space-4) var(--space-4)}.jc-capture-overlay.focus-mode .jc-bar.expanded .jc-input{padding-inline:0;font-size:16px;line-height:1.65}.jc-capture-overlay.focus-mode .jc-context-rail{margin-inline:8px}.jc-capture-overlay.focus-mode .jc-capture-invitation{margin-top:var(--space-3)}}
  .jc-rte-toolbar{display:flex;align-items:center;gap:2px;flex-wrap:nowrap;padding:2px 4px 8px;margin-bottom:4px;border-bottom:1px solid var(--border)}
  /* Scopé aux enfants directs : ne doit PAS toucher les boutons des popovers (Tags/date)
     ni leurs items de menu, sinon ils sont écrasés en carrés 30×30. */
  .jc-rte-toolbar > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:0;
    background:transparent;border-radius:8px;color:var(--ink-2);cursor:pointer;transition:background var(--dur-fast) var(--ease-out)}
  .jc-rte-toolbar > button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:30px}
  .jc-rte-toolbar > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-2);color:var(--ink)}
  .jc-rte-toolbar > button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).on{background:var(--accent-soft);color:var(--accent-ink)}
  .jc-rte-sep{width:1px;height:18px;background:var(--border);margin:0 4px}
  .jc-rte-spacer{flex:1 1 auto;min-width:6px}
  /* Boutons texte de la barre d'outils (Tags / date) — approche compacte.
     Stylés en autonomie (plus rattachés à « .jc-rte-toolbar button »). */
  .jc-rte-text{display:inline-flex;align-items:center;width:auto;height:30px;padding:0 10px;gap:5px;
    border:0;background:transparent;border-radius:8px;cursor:pointer;color:var(--ink-2);
    font-family:var(--font-sans);font-size:13px;font-weight:500;white-space:nowrap;
    transition:background var(--dur-fast) var(--ease-out)}
  .jc-rte-text:hover,.jc-rte-text.on{background:var(--bg-2);color:var(--ink)}
  .jc-rte-text > svg{color:var(--ink-3)}
  .jc-rte-text.on > svg{color:var(--accent-ink)}
  /* Pastille date très compacte */
  .jc-rte-date{height:26px;padding:0 7px;gap:4px;font-size:12px;
    font-variant-numeric:tabular-nums;color:var(--ink-2)}
  .jc-rte-date > svg{color:var(--ink-3)}
  /* Options de période en grille compacte (menu « Quand ? ») */
  .jc-when-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:6px 8px}
  /* Choix libre date + heure dans le menu « Quand ? » */

  /* Calendrier maison (menu « Quand ? ») — aligné au design SIHAGE */
  .jc-cal{padding:6px}
  .jc-cal-back{display:inline-flex;align-items:center;gap:3px;border:0;background:transparent;cursor:pointer;
    color:var(--ink-3);font-family:var(--font-sans);font-size:12px;font-weight:500;
    padding:4px 4px 6px;border-radius:6px;transition:color var(--dur-fast) var(--ease-out)}
  .jc-cal-back:hover{color:var(--ink)}
  .jc-cal-back > svg{color:var(--ink-4)}
  .jc-cal-head{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:0 2px 6px}
  .jc-cal-title{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:var(--ink);text-transform:capitalize;
    border:0;background:transparent;cursor:pointer;padding:4px 8px;border-radius:8px;transition:background var(--dur-fast) var(--ease-out)}
  .jc-cal-title:hover{background:var(--bg-2)}
  .jc-cal-title > svg{color:var(--ink-4)}
  /* Vue choix d'année — grille de 12 ans (paginée par décennie) */
  .jc-year-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:2px 0}
  .jc-year-cell{height:34px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;
    background:transparent;border-radius:8px;color:var(--ink-2);font-size:13px;font-weight:500;cursor:pointer;
    font-variant-numeric:tabular-nums;transition:all var(--dur-fast) var(--ease-out)}
  .jc-year-cell:hover:not(:disabled){background:var(--accent-soft);color:var(--accent-ink);border-color:var(--accent)}
  .jc-year-cell.today{border-color:var(--border-strong);color:var(--ink);font-weight:600}
  .jc-year-cell.sel{background:var(--accent);color:var(--fg-inverse);border-color:transparent;font-weight:600}
  .jc-cal-nav{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:0;
    background:transparent;border-radius:8px;color:var(--ink-2);cursor:pointer;transition:background var(--dur-fast) var(--ease-out)}
  .jc-cal-nav:hover{background:var(--bg-2);color:var(--ink)}
  .jc-cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:2px}
  .jc-cal-dow > span{height:20px;display:inline-flex;align-items:center;justify-content:center;
    font-family:var(--font-sans);font-size:11px;font-weight:600;color:var(--ink-4)}
  .jc-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
  .jc-cal-day{height:28px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;
    background:transparent;border-radius:8px;color:var(--ink-2);font-size:12px;font-weight:500;cursor:pointer;
    font-variant-numeric:tabular-nums;transition:all var(--dur-fast) var(--ease-out)}
  .jc-cal-day:hover:not(:disabled){background:var(--accent-soft);color:var(--accent-ink);border-color:var(--accent)}
  .jc-cal-day.today{border-color:var(--border-strong);color:var(--ink);font-weight:600}
  .jc-cal-day.sel,.jc-cal-day.sel:hover{background:var(--accent);border-color:transparent;color:var(--fg-inverse);font-weight:600}
  .jc-cal-nav:disabled,.jc-year-cell:disabled,.jc-cal-day:disabled{opacity:.5;cursor:not-allowed}
  .jc-cal-time{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;
    padding-top:8px;border-top:1px solid var(--border)}
  .jc-cal-time-lbl{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--ink-2)}
  .jc-cal-time-lbl > svg{color:var(--ink-3)}
  .jc-tagpop{padding:2px}
  .jc-tagpop .jc-tagzone-chips{padding:4px 6px 2px}
  .jc-tagzone-chips{display:flex;align-items:center;flex-wrap:wrap;gap:6px}

  .jc-chips{display:flex;flex-wrap:wrap;gap:6px;padding:6px 6px 2px}

  .jc-controls{display:flex;align-items:center;gap:var(--space-3);padding:2px 0 0}
  /* Pastilles alignées à gauche, toujours sur une ligne. Pas d'overflow:hidden ici — il rognait
     les popovers (les dossiers ne s'ouvraient pas) ; la troncature se fait sur .jc-pill-lbl. */
  .jc-pills{flex:1;min-width:0;display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-wrap:nowrap}
  .jc-actions{flex-shrink:0;display:flex;align-items:center;gap:var(--space-2);align-self:flex-end}
  .jc-pill{flex-shrink:0}
  .jc-pills > .jc-pop{min-width:0;flex:0 1 auto}
  .jc-pills > .jc-pop:first-child{flex-shrink:0}        /* type : toujours lisible */            /* carnet : peut se réduire */
  .jc-pills > .jc-pop .jc-pill{max-width:100%}
  /* Rail secondaire sous la zone de saisie : contexte de rangement à gauche, date à droite.
     Le fond neutre plus soutenu distingue clairement cette couche sans concurrencer l'écriture. */
  /* Planche G (lot 3) : couche secondaire en remplissage doux — plus de bord ni d'ombre
     portée, la profondeur vient du seul ton crème. */
  .jc-context-rail{position:relative;z-index:1;min-height:36px;height:auto;margin:-6px 14px 0;
    display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;column-gap:var(--space-3);row-gap:var(--space-2);padding:var(--space-3) var(--space-3) 2px;
    background:var(--bg-2);border:0;border-radius:0 0 16px 16px;
    box-shadow:none}
  .jc-context-left{display:flex;align-items:center;gap:4px;min-width:0}
  .jc-context-btn,.jc-context-date{height:var(--jc-rail-control-height);display:inline-flex;align-items:center;justify-content:center;gap:5px;
    border:1px solid transparent;border-radius:var(--radius-lg);background:transparent;color:var(--fg-2);
    font-family:var(--font-sans);font-size:12px;font-weight:500;white-space:nowrap;cursor:pointer;
    transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
  .jc-context-btn{padding:0 8px}
  .jc-context-btn:hover,.jc-context-btn.on,.jc-context-date:hover,.jc-context-date.on{background:var(--surface);border-color:var(--border);color:var(--ink)}
  .jc-context-btn > svg{width:13px;height:13px;color:var(--ink-3);flex-shrink:0}
  .jc-context-btn > svg:last-child:not(:first-child){width:10px;height:10px;color:var(--ink-4)}
  .jc-context-carnet .vc-carnet-logo-wrap{display:inline-flex;flex:0 0 auto}
  .jc-context-carnet,.jc-context-tags.empty{width:var(--jc-rail-control-height);padding:0}
  /* Le repli coloré porte son propre fond : le bouton ne lui ajoute pas de halo blanc. */
  .jc-context-carnet:has(.organization-fallback):is(:hover,.on){background:transparent;border-color:transparent}
  .jc-context-carnet:is(:hover,.on) .organization-fallback{filter:brightness(.94)}
  .jc-context-tags span{max-width:150px;overflow:hidden;text-overflow:ellipsis}
  .jc-context-date{padding:0 7px;font-size:12px;font-variant-numeric:tabular-nums}
  .jc-context-date > svg{width:13px;height:13px;color:var(--ink-3);flex-shrink:0}
  @media (max-width:640px){
    .jc-context-rail{margin-inline:8px;padding-inline:8px}
    .jc-context-date span{display:none}
    .jc-context-date{width:var(--jc-rail-control-height);padding:0}
    .jc-composer-shell,body[data-side="expanded"] .jc-composer-shell{width:100%}
    .jc-bar.expanded .jc-input{padding-inline:8px}
  }
  
  /* Ligne d'aide affichée au démarrage de la conversation (plus dans la barre) */
  /* SIH-115 : role secondaire, icone seule. */

  .jc-pill{display:inline-flex;align-items:center;gap:5px;height:var(--jc-control-height);padding:0 9px;border-radius:var(--radius-md);
    border:1px solid var(--border-soft);background:var(--bg-2);color:var(--ink-2);font-size:13px;font-weight:500;cursor:pointer;
    max-width:200px;transition:all var(--dur-fast) var(--ease-out)}
  .jc-pill:hover,.jc-pill.on{border-color:var(--border-hover);color:var(--ink);background:var(--surface)}
  .jc-pill > svg:first-child{color:var(--ink-3);flex-shrink:0}
  .jc-pill-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .jc-pill > svg:last-child{color:var(--ink-4);flex-shrink:0}

  /* SIH-115 · LE COMPOSEUR CESSE DE PARLER SA PROPRE LANGUE.
     Mesure avant ce passage : « Enregistrer sans discuter » sans boite, l'envoi en
     carre de 38 px a l'encre, la fleche d'enregistrement en ovale de 34 px, les deux
     gestes en rectangles de 34 px. Quatre hauteurs et trois rayons pour une barre.
     Chacun rejoint son RANG : la fleche est principale (c'est le geste qui compte)
     et « Enrichir » est secondaire.
     Le rayon de la fleche N'EST PAS conserve : c'est precisement le defaut nomme dans
     la decision (« deux boutons d'accent, meme fond, DEUX rayons : 8 px et 99 px »).
     `.jc-send`, `.jc-save` et `.jc-savedirect` ne sont RENDUS PAR AUCUN JSX : ils sont
     retires au lieu d'etre convertis. Inscrire un selecteur mort a un role, c'est
     grossir la liste sans rien changer pour le client. */

  /* Popovers (menus des pastilles + « + ») */
  .jc-pop{position:relative}
  .jc-pop-menu{position:absolute;bottom:calc(100% + 8px);z-index:60;background:var(--surface);border:1px solid var(--border-strong);
    border-radius:10px;box-shadow:var(--shadow-popover);padding:6px;min-width:200px;
    animation:jc-pop-in var(--dur-fast) var(--ease-out)}
  .jc-pop-menu.left{left:0}.jc-pop-menu.right{right:0}
  /* Mode `fixed` (sélecteur de date des tâches) : ancré au viewport par JS, il
     échappe à l'overflow:hidden du modal et se rabat au-dessus si l'espace
     manque (retour Landry). Les positions viennent du style inline ; on
     neutralise juste les ancrages CSS, et on borne la largeur au viewport. */
  .jc-pop-menu.fixed{left:auto;right:auto;top:auto;bottom:auto;box-sizing:border-box;max-width:calc(100vw - 20px);overscroll-behavior:contain}
  .jc-pop-menu.fixed[data-jc-pop-scope="composer"]{z-index:100}
  /* Quand le panneau plafonne et défile : onglets Date/Durée épinglés en haut,
     pied Effacer/OK épinglé en bas — toujours visibles. */
  
  .win-dp-pop > .jc-pop-menu.fixed .win-dp-foot{position:sticky;bottom:0;z-index:2;background:var(--surface)}
  /* Sélecteur de date des tâches (début/échéance) : ouvre VERS LE BAS (en-tête du
     détail, pas la barre du journal qui ouvre vers le haut). */
  .win-dp-pop{position:relative;display:inline-flex}
  .win-dp-pop > .jc-pop-menu{top:calc(100% + 8px);bottom:auto}
  .win-dp{display:flex;flex-direction:column}
  .win-dp-quick{display:flex;flex-direction:column;gap:1px}
  .win-dp-quick .jc-menu-item{padding:7px 9px}
  .win-dp-qd{flex:0 0 auto;font-family:var(--font-data);font-size:11px;color:var(--ink-4);font-variant-numeric:tabular-nums;white-space:nowrap}
  .win-dp-cal{padding:4px 2px 2px}
  .win-dp-remrow .win-dp-remval{flex:0 0 auto;font-size:12px;color:var(--ink-3)}
  .win-dp-remrow > svg:last-child{color:var(--ink-4);transition:transform var(--dur-fast) var(--ease-out)}
  .win-dp-remrow.on > svg:last-child{transform:rotate(180deg)}
  .win-dp-remlist{display:flex;flex-direction:column;gap:1px;padding:2px 0 0}
  /* Sélecteur de date (TickTick) : champs Début/Fin + pied Effacer/OK. */

  .win-dp-fields{display:flex;flex-direction:column;gap:6px;padding:0 2px 2px}
  .win-dp-field{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--border-soft);background:var(--surface);border-radius:8px;padding:8px 11px;font:inherit;cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
  .win-dp-field:hover{border-color:var(--ink-4)}
  .win-dp-field.on{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
  .win-dp-field-l{font-family:var(--font-sans);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4)}
  .win-dp-field-v{font-size:13px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
  .win-dp-field-v.empty{color:var(--ink-4);font-weight:500}
  .win-dp-field-v.over{color:var(--bad)}
  .win-dp-remsub{font-size:11px;color:var(--ink-4);margin-left:6px;font-weight:500}
  /* Ligne « Heure » (Landry, juin 2026) — une tâche peut être due un après-midi précis. */
  .win-dp-timerow{display:flex;align-items:center;gap:8px;padding:7px 9px}
  .win-dp-time-l{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:500;color:var(--ink-2);flex:1 1 auto}
  .win-dp-time-l > svg{color:var(--ink-4)}
  .win-dp-foot{display:flex;gap:8px;padding:9px 2px 2px;margin-top:4px;border-top:1px solid var(--border)}
  @keyframes jc-pop-in{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}
  .jc-menu-head{font-family:var(--font-sans);font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);padding:6px 9px 7px}
  .jc-menu-sep{height:1px;background:var(--border);margin:5px 6px}
  .jc-menu-scroll{max-height:240px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}
  .jc-menu-empty{padding:10px 11px 12px;font-size:12px;line-height:1.45;color:var(--ink-3)}
  /* Menu du composeur : encre pleine, il porte des actions et non des réglages. */
  .jc-menu-item{color:var(--ink)}
  .jc-menu-item.sel > svg:last-child{color:var(--accent)}
  .jc-menu-item > svg:last-child{margin-left:auto;color:var(--ink-4)}
  .jc-menu-ic{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;background:var(--bg-2);color:var(--ink-2);flex-shrink:0}
  .jc-menu-item:hover .jc-menu-ic{background:var(--surface)}
  .jc-menu-stack{display:flex;flex-direction:column;gap:1px;min-width:0}
  .jc-menu-stack b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .jc-menu-stack span{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .jc-menu-logo{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:8px;background:var(--bg-2);border:1px solid var(--border);font-size:11px;font-weight:600;color:var(--ink-2);flex-shrink:0}
  .jc-menu-av{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;color:var(--fg-inverse);font-size:11px;font-weight:600;flex-shrink:0}

  /* ── Conversation plein écran ── */

  /* Deux colonnes : discussion (gauche) + synthèse (droite) */
  /* Pulsation d'opacité — le bounce (translateY) est banni par regle-animation-fluide. */
  @keyframes jc-pulse{0%,60%,100%{opacity:.4}30%{opacity:1}}

  /* Carte synthèse STAR */

  /* Questions à choix rapide (multi-sélection) */

  /* Récapitulatif */

  /* Clôture douce + pistes de continuation (l'entrée est déjà enregistrée) */

/* ── Boutons de réglages déplacés au CENTRE du footer de l'éditeur ──────────────
   (le header ne garde que « Sections du CV » côté droit). Footer en 3 colonnes :
   récap IA à gauche · réglages centrés · info à droite. Comme les réglages sont
   désormais en bas, le menu de téléchargement et les tooltips s'ouvrent VERS LE HAUT. */
.cve-ft{display:grid;grid-template-columns:1fr auto 1fr;gap:10px}
.cve-ft-tools{justify-self:center;display:inline-flex;align-items:center;justify-content:center;width:560px;gap:6px}
.cve-ft .cve-dlwrap{position:relative}
.cve-ft .cve-dlmenu{top:auto;bottom:calc(100% + 6px)}
.cve-ft-action{padding-inline:10px}
.cve-ft-action span,.cve-editmode span{white-space:nowrap}
.cve-ft-tools .cve-zoom{padding:2px 4px 2px 7px;gap:2px}
.cve-ft-tools .cve-zoom .cve-zoom-lbl{min-width:auto;margin-right:3px;font-family:var(--font-sans,inherit);font-size:12px;font-weight:600;color:var(--ink-2);font-variant-numeric:normal}
/* trait vertical qui sépare le groupe « modes » (sélection · édition · aperçu)
   des contrôles de vue (zoom · ajuster · télécharger) */
.cve-ft-sep{flex:0 0 auto;width:1px;height:22px;background:var(--border-strong);margin:0 4px;border-radius:1px}
/* un tooltip stylé sur CHAQUE bouton du footer (icônes ET boutons de zoom),
   ouvert vers le HAUT puisque la barre est en bas de l'éditeur */
.cve-ft-tools .cve-zoom{overflow:visible}
.cve-ft-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[title]{position:relative}
.cve-ft-tools button:where(.btn,.ui-close-button,.text-link,.card-options-trigger)[title]{position:relative}
.cve-ft-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[title]:hover::after{content:attr(title);position:absolute;top:auto;right:auto;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);background:var(--ink);color:var(--sidebar-fg-strong);font-size:11px;font-weight:500;line-height:1.3;padding:5px 9px;border-radius:6px;white-space:nowrap;pointer-events:none;z-index:60;box-shadow:var(--shadow-popover)}
/* Télécharger isolé en bas à DROITE, bouton noir (action de sortie principale) */
.cve-ft-dlwrap{justify-self:end}
.cve-ft-dl{white-space:nowrap}
.cve-ft-dl svg{flex:0 0 auto}
/* « Sections de la lettre » : affordance de sélection sur le document lettre
   (les règles équivalentes du CV sont scopées .cve-cv) */
.lte-letter .cve-secsel{cursor:pointer;position:relative;transition:outline-color var(--dur-fast,.15s) var(--ease-out,ease)}
.lte-letter .cve-secsel:hover{outline:2.5px solid var(--accent);outline-offset:4px;border-radius:6px}
.lte-letter .cve-secsel.secactive{outline:3px solid var(--accent);outline-offset:4px;border-radius:6px;box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 18%,transparent)}
.lte-letter .cve-secsel:hover::after{content:attr(data-seclabel);position:absolute;left:0;top:0;transform:translateY(-100%);margin-top:-6px;background:var(--accent);color:#fff;font-size:10px;font-weight:600;line-height:1;padding:3px 7px;border-radius:6px;white-space:nowrap;pointer-events:none;z-index:9}
/* Mode Sélection actif : indice persistant « ces blocs sont sélectionnables »
   (miroir du CV .cve-cv.selmode — cohérence entre les deux éditeurs) */
/* Miroir CV : la cible est le document entier → un seul contour, tout autour. */
.lte-letter.selmode .cve-secsel{outline:1px dashed color-mix(in srgb,var(--accent) 30%,transparent);outline-offset:4px;border-radius:6px}
.lte-letter.selmode .cve-secsel:hover{outline:2.5px solid var(--accent);outline-offset:4px}
/* Mode Édition (crayon) : le cadre pointillé du CV était rogné par .cve-cvwrap
   (overflow:hidden). On le laisse déborder en édition, comme la lettre. */
.cve-editdoc.editing .cve-cvwrap{overflow:visible}

/* Footer robuste au zoom / aux fenêtres étroites : les OUTILS (icônes) restent
   centrés et de taille fixe ; les libellés latéraux « L'offre… » et « Télécharger »
   se replient en icônes seules quand la place manque → jamais de débordement, jamais
   de bouton coupé ni d'icônes décentrées. (Le footer fait toute la largeur de
   l'éditeur, donc on se cale sur la largeur de fenêtre.) */
.cve-ft-tools{flex:0 0 auto}
.cve-crumb-return{width:30px;height:30px;justify-content:center;padding:0;flex:0 0 auto}
.cve-crumb-return .cve-crumb-lbl{display:none}
.cve-ft-dl .cve-ft-lbl{white-space:nowrap}
/* SIH-68 · UN SEUL volet, à droite (le volet gauche n'existe plus). Sa largeur se déduit du
   DOCUMENT, pas d'un pourcentage : le CV garde les 854 px qu'il faut à une page A4 entière à
   100 % (794 px + les marges du canevas), le volet prend le reste, borné entre 520 et 620 px.
   → 1374 px d'éditeur et au-delà : volet 620, tout le surplus va au document. En dessous, le
   volet tient son plancher de 520 px — toujours plus large que ce qu'il faisait avant — et
   c'est le document qui cède, récupérable par « Ajuster la largeur ». Exprimé en FLEXBOX et non en unités de conteneur (`cqi`) à dessein : un
   `container-type` sur `.cve-body2` créerait du containment et rattacherait les menus
   `.cve-secopt-menu.fixed` du volet à ce bloc au lieu du viewport. Le flex mesure en plus la
   place RÉELLE, quelle que soit la largeur du rail de l'application. */
.cve-body2 .cve-side{width:auto;flex:0 1 620px;min-width:520px}
/* Le document réclame 854 px de base et récupère TOUT le surplus (flex-grow). Quand la place
   manque, les deux cèdent ensemble jusqu'à ce que le volet touche son plancher de 520 px, puis
   le document absorbe le reste — `min-width:0` garantit qu'on ne déborde JAMAIS à l'horizontale,
   quelle que soit la largeur de fenêtre ou l'état du rail de l'application. Le zoom « Ajuster la
   largeur » reste la porte de sortie du client sur les petits écrans. */
.cve-optA .cve-canvas-wrap{flex:1 1 854px;min-width:0}
/* LISIBILITÉ DES RAILS DE L'ÉDITEUR (retour Landry 2026-07-19, relevé 3 fois : inspecteur droit,
   liste droite, puis rail gauche). Les rails se sont élargis mais texte/contrôles/icônes n'avaient
   pas suivi → texte minuscule + espace gâché. SOURCE UNIQUE = `.cve-body2 .cve-side` (les DEUX rails
   `-l` réglages + `-r` sections, CV ET lettre) plutôt qu'une rustine par côté → tout futur rail/onglet
   hérite (reco cofondateur PATTERN-2 ; évite l'oubli du prochain maillon). JAMAIS `.cve-cv` : le papier
   est un FRÈRE de `.cve-side` dans `.cve-body2`, jamais un descendant → la taille ne peut pas fuir dans
   le rendu (parité écran/PDF + convergence snapshot garanties structurellement, architecte CONFIRMED). */
.cve-body2 .cve-side .cve-midscroll{padding:16px 22px}
.cve-body2 .cve-side .cve-insplbl{font-size:14px}
.cve-body2 .cve-side .cve-flabel,.cve-body2 .cve-side .cve-laylbl{font-size:14px}
.cve-body2 .cve-side .cve-hfield-top .lbl{font-size:14px}
.cve-body2 .cve-side .cve-hfield-val{font-size:14px;padding:9px 12px}
.cve-body2 .cve-side .cve-secnote{font-size:13px;line-height:1.55}
.cve-body2 .cve-side .cve-fdate{font-size:14px}
.cve-body2 .cve-side .cve-secopt-title{font-size:14px}
/* Niveau LISTE « Sections du CV » (le menu principal du panneau, rail droit) : lignes plus grandes/
   aérées, texte + compteur plus lisibles, icônes plus grosses ET plus épaisses. */
.cve-body2 .cve-side .cve-secroot{padding:12px var(--cve-rail-gutter);gap:7px}
.cve-body2 .cve-side .cve-secroot-row{padding:15px 16px;font-size:16px;gap:13px;border-radius:10px}
.cve-body2 .cve-side .cve-secroot-row .l,.cve-body2 .cve-side .cve-secroot-row .l b{font-size:16px}
.cve-body2 .cve-side .cve-secroot-row .c{font-size:14px}
.cve-body2 .cve-side .cve-secroot-row .ic svg{width:20px;height:20px;stroke-width:2.1}
.cve-body2 .cve-side .cve-secroot-row > svg:last-child{width:19px;height:19px;stroke-width:2.1}
.cve-body2 .cve-side .cve-inspcount{font-size:14px}
/* Icônes du panneau plus épaisses/visibles (champs, cartes) */
.cve-body2 .cve-side .cve-hfield-top .ic svg,.cve-body2 .cve-side .cve-inspcard .ic svg{stroke-width:2.1}
/* Bulle d'info ⓘ (point d'interrogation) : trop petite pour se lire (Landry) → agrandie + épaissie.
   Couvre le ⓘ du header de panneau (.cve-bc-hint) ET les ⓘ inline de carte (.sm), les deux rails. */
.cve-body2 .cve-side .cve-midhead-hint{width:32px;height:32px}
.cve-body2 .cve-side .cve-midhead-hint svg{width:19px;height:19px;stroke-width:2.2}
.cve-body2 .cve-side .cve-midhead-hint.sm{width:27px;height:27px}
.cve-body2 .cve-side .cve-midhead-hint.sm svg{width:17px;height:17px}
/* Échelle typographique des SOUS-SECTIONS CV. Les tailles ne vivent plus dans les composants :
   Accroche, Expériences, Formations, Compétences, Outils, Atouts, Langues et Centres d'intérêt
   héritent des mêmes rôles sémantiques. Le scope `.cve-cv-editor` évite d'étendre cette décision
   à l'éditeur de lettre sans validation explicite. */
.cve-cv-editor .cve-side-r{
  --cve-rail-copy:14.5px;
  --cve-rail-subcopy:13px;
  --cve-rail-eyebrow:11.5px;
  --cve-rail-badge:11px;
  --cve-rail-title:15.5px;
}
.billing-offer-grid{display:grid;align-items:stretch;gap:14px;grid-template-columns:repeat(2,minmax(0,1fr))}
.billing-offer-card{display:flex;flex-direction:column;gap:12px;min-width:0;padding:20px;border:1px solid var(--border-strong);border-radius:16px;background:var(--surface)}
.billing-offer-card[data-offer="parcours"]{--billing-tone-surface:var(--accent-soft);--billing-tone-ink:var(--accent-ink);border-color:var(--accent-ink)}
.billing-offer-card[data-offer="elan"]{--billing-tone-surface:var(--tag-amber);--billing-tone-ink:var(--tag-amber-ink);border-color:var(--tag-amber-ink)}
.billing-offer-card-header{display:flex;align-items:center;gap:10px;color:var(--accent-ink)}
.billing-offer-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex-shrink:0;border-radius:10px;background:var(--billing-tone-surface);color:var(--billing-tone-ink)}
.billing-offer-card-header strong{font-size:var(--settings-type-display);color:var(--ink)}
.billing-offer-description{margin:0;color:var(--ink-2);font-size:var(--settings-type-body);line-height:1.5}
.billing-offer-price{font-size:30px;font-weight:650;line-height:1.2;font-variant-numeric:tabular-nums;color:var(--ink)}
.billing-offer-price span{font-size:var(--settings-type-meta);font-weight:400;color:var(--ink-2)}
.billing-cycle-note{margin:0;color:var(--ink-2);font-size:var(--settings-type-supporting);line-height:1.5}
.billing-cycle-single{display:flex;align-items:center;min-height:40px}
.billing-offer-highlights{display:grid;gap:9px;list-style:none;margin:4px 0 0;padding:12px;border-radius:10px;background:var(--billing-tone-surface);color:var(--billing-tone-ink);font-size:var(--settings-type-supporting);line-height:1.45}
.billing-offer-highlights li{display:flex;align-items:flex-start;gap:7px}
.billing-offer-highlights svg{flex-shrink:0;margin-top:2px}
.billing-offer-volume{display:flex;flex-direction:column;gap:5px;margin:auto 0 0;padding:12px 0 0;border-top:1px solid var(--border);font-size:var(--settings-type-supporting);color:var(--ink-2)}
.billing-offer-volume span{font-size:var(--settings-type-meta)}
.founder-offer-card{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr) var(--founder-offer-action-width);align-items:center;gap:18px;margin-top:16px;padding:18px 0 18px 18px;border:1px solid var(--founder-accent);border-radius:10px}
.founder-offer-card>button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){justify-self:center}
.founder-offer-card .billing-offer-description{margin-top:6px}
.billing-offers-intro{margin-bottom:22px}
.billing-offers-intro h3{margin:0;font-size:22px;line-height:1.35;color:var(--ink)}
.billing-offers-intro p{margin:12px 0 0;color:var(--ink-2);font-size:var(--settings-type-body);line-height:1.6}
.billing-benefits{margin-top:36px;padding-top:24px;border-top:1px solid var(--border)}
.billing-benefits h3{margin:0 0 18px;color:var(--ink);font-size:var(--settings-type-display);line-height:1.35;text-wrap:balance}
.billing-benefit-list article{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,3fr);gap:20px;padding:18px 0;border-bottom:1px solid var(--border)}
.billing-benefit-label{display:flex;align-items:center;align-self:start;gap:12px}
.billing-benefit-label > svg{color:var(--accent-ink);flex-shrink:0}
.billing-benefits-memory .billing-benefit-list article:last-child{border-bottom:0}
.billing-benefit-list h4{margin:0;font-size:var(--settings-type-body);color:var(--ink)}
.billing-benefit-list p,.billing-benefit-list ul{margin:0;color:var(--ink-2);font-size:var(--settings-type-supporting);line-height:1.6}
.billing-benefit-list ul{margin-top:7px}
.billing-benefit-list ul{padding-left:20px}
.billing-memory-flow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;border-radius:10px;background:var(--accent-soft);font-size:var(--settings-type-supporting);color:var(--accent-ink)}
.billing-benefits .billing-offer-grid{margin:18px 0 12px}
.billing-benefits > .founder-offer-card + .billing-cycle-note{margin-top:16px}
.billing-offer-card-compact{gap:10px}
.billing-usage-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(220px,.8fr);gap:22px;margin-top:14px}
.billing-usage-formula{padding-left:22px;border-left:1px solid var(--border)}
@media(max-width:760px){
 .billing-offer-grid{grid-template-columns:minmax(0,1fr)}
 .billing-usage-grid{grid-template-columns:minmax(0,1fr)}
 .billing-usage-formula{padding-left:0;border-left:0;padding-top:22px;border-top:1px solid var(--border)}
 .founder-offer-card{grid-template-columns:minmax(0,1fr);padding:18px}
  .founder-offer-card>button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){justify-self:stretch}
 .founder-offer-card{mask-image:none;-webkit-mask-image:none}
 .founder-offer-card::before{display:none}
 .billing-memory-flow{flex-wrap:wrap;justify-content:flex-start}
 .billing-benefit-list article{grid-template-columns:minmax(0,1fr);gap:8px}
 .billing-offers-intro h3{font-size:13px}
}
.cve-cv-editor .cve-side-r .cve-rail-copy{font-size:var(--cve-rail-copy);line-height:1.45}
.cve-cv-editor .cve-side-r .cve-rail-subcopy{font-size:var(--cve-rail-subcopy);line-height:1.45}
.cve-cv-editor .cve-side-r .cve-inspcard-id .r{font-size:var(--cve-rail-copy)}
.cve-cv-editor .cve-side-r .cve-inspcard-id .o{font-size:var(--cve-rail-subcopy);line-height:1.4}
.cve-cv-editor .cve-side-r .cve-bulrow .t{font-size:var(--cve-rail-subcopy)}
.cve-cv-editor .cve-side-r .cve-focusinsp-role{font-size:var(--cve-rail-title)}
.cve-cv-editor .cve-side-r .cve-focusinsp-meta{font-size:var(--cve-rail-copy)}
.cve-cv-editor .cve-side-r .cve-focusinsp-when{font-size:var(--cve-rail-subcopy)}
.cve-cv-editor .cve-side-r .cve-focusinsp-bullets .cve-bulrow .t{font-size:var(--cve-rail-copy)}
.cve-cv-editor .cve-side-r .cve-focusinsp-bullets .cve-bulrow .t em{font-size:var(--cve-rail-subcopy)}
.cve-cv-editor .cve-side-r .cve-bul-editin{font-size:var(--cve-rail-copy)}
.cve-cv-editor .cve-side-r .cve-panel-search input{font-size:var(--cve-rail-copy)}
.cve-cv,.lte-letter,.lte-msgwrap,.lte-emailwrap,.cve-pdfmanual{font-family:var(--doc-font,Calibri,'Segoe UI',Arial,sans-serif);color:var(--doc-ink,var(--ink-2))}
.cve-cvsec::after,.cve-f3-title::after{border-top-color:var(--doc-rule,var(--border))}
.cve-foot3{border-color:var(--doc-rule,var(--border))}
.lte-lobj span,.lte-lref span,.lte-p,.lte-letter .lte-sign,.lte-email-body,.lte-msg-box{color:var(--doc-ink,var(--ink-2))}
.lte-letter h1,.lte-letter h2,.lte-letter h3,.lte-emailwrap h1,.lte-emailwrap h2,.lte-emailwrap h3{font-family:var(--doc-title-font,var(--doc-font,inherit));color:var(--doc-heading,var(--doc-ink,var(--ink)))}
.cve-exp .when,.cve-edu .when{font-family:var(--doc-font,Calibri,'Segoe UI',Arial,sans-serif)}
.cve-fontgrp{padding:8px 4px 3px;font-size:11px;letter-spacing:var(--tracking-normal);color:var(--ink-4)}
.cve-fontitem{display:flex;align-items:center;gap:9px;width:100%;border:1px solid transparent;background:transparent;border-radius:8px;padding:7px 8px;color:var(--ink-2);font:inherit;text-align:left;cursor:pointer}
.cve-fontitem:hover{background:var(--hover-bg);border-color:var(--border)}
.cve-fontitem.on{background:var(--select-bg);border-color:var(--accent-soft-2,var(--accent-soft));color:var(--select-ink)}
.cve-fontsample{display:grid;place-items:center;flex:0 0 auto;width:46px;height:30px;border:1px solid var(--border);border-radius:8px;background:var(--surface);font-size:16px;font-weight:600;color:var(--ink)}
.cve-fontitem.compact .cve-fontsample{width:68px;font-size:12px;font-weight:500}
.cve-fontmeta{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.cve-fontmeta b{font-size:13px;font-weight:600;color:var(--ink)}
.cve-fontmeta em{font-style:normal;font-size:11px;color:var(--ink-3)}
.cve-fontitem>svg{flex:0 0 auto;color:var(--accent)}
.cve-fontchoices{display:flex;flex-direction:column;gap:4px}
.cve-themegrid{display:flex;flex-direction:column;gap:3px}
.cve-themeitem{display:flex;align-items:center;gap:9px;width:100%;border:1px solid transparent;background:transparent;border-radius:8px;padding:7px 8px;color:var(--ink-2);font:inherit;text-align:left;cursor:pointer}
.cve-themeitem:hover{background:var(--hover-bg);border-color:var(--border)}
.cve-themeitem.on{background:var(--select-bg);border-color:var(--accent-soft-2,var(--accent-soft));color:var(--select-ink)}
.cve-themeswatch{width:30px;height:30px;flex:0 0 auto;border-radius:8px;background:var(--sw);border:1px solid var(--border-strong);box-shadow:inset 0 0 0 5px #fff}
.cve-themeitem>svg{flex:0 0 auto;color:var(--accent)}
@media (max-width:720px){
  .cve-ft{gap:6px}
  .cve-ft-action span,.cve-ft-tools .cve-zoom .cve-zoom-lbl{display:none}
  .cve-ft-action{padding-inline:8px}
  .cve-ft-tools{width:auto}
  .cve-body2 .cve-side{width:min(92vw,420px);flex-basis:min(92vw,420px);min-width:0}
}
@media (max-width:560px){
  .cve-ft-dl .cve-ft-lbl{display:none}
  .cve-ft-dl{padding:8px 11px}
}

/* Zoom du document : le wrapper extérieur de ZoomViewport. À 100 % il est neutre
   (aucun style inline) ; quand on zoome, il reçoit width/height = taille réelle × zoom
   (réservation de la zone défilable) et l'intérieur passe en transform: scale(). */
.lte-zoomouter{position:relative;flex:0 0 auto;min-width:0}
.lte-zoomouter>.lte-zoomwrap{will-change:transform}

/* Décor écran des éditeurs. */
@media screen{
  .cve-optA .cve-canvas{--document-paper-edge:color-mix(in srgb,var(--ink) 32%,var(--surface));--document-paper-shadow:0 2px 3px color-mix(in srgb,var(--ink) 14%,transparent),0 10px 16px -6px color-mix(in srgb,var(--ink) 26%,transparent)}
  .cve-optA .cve-canvas :is(.cve-cv:not(.two),.lte-letter:not(.two),.cve-page-sheet){border-color:var(--document-paper-edge);border-radius:var(--radius-xs);box-shadow:var(--document-paper-shadow)}
  .cve-optA .cve-canvas .cve-pagebreak .lbl{color:var(--ink-2);background:var(--surface);border-color:var(--border-strong)}
}

/* ===== Échanges pro · croquis reconstruit ===== */
.ep-page{height:100%;min-height:0;display:flex;flex-direction:column;background:var(--bg);color:var(--ink);overflow:hidden}
.ep-screen-context{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:6;display:flex;align-items:center;gap:var(--space-2);max-width:48%;min-width:0}
.ep-screen-crumb{height:28px;display:inline-flex;align-items:center;gap:var(--space-2);min-width:0;padding:0 var(--space-3);border:0;border-radius:var(--radius-md);background:transparent;color:var(--ink-3);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.ep-screen-crumb:hover{background:var(--bg-2);color:var(--ink)}
.ep-screen-crumb span,.ep-screen-current span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ep-screen-current{display:inline-flex;align-items:center;gap:var(--space-2);min-width:0;max-width:var(--screen-context-current-max);color:var(--ink);font-size:13px;font-weight:600}
.ep-crumb-sep{color:var(--ink-4);flex:0 0 auto}
.ep-grid{position:relative;flex:1 1 auto;height:auto;min-height:0;display:block;overflow:hidden}
.ep-doc-tools{position:absolute;top:14px;right:16px;z-index:11;display:inline-flex;align-items:center;gap:6px}
.ep-autosave{height:28px;display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:999px;background:color-mix(in srgb,var(--surface) 92%,transparent);padding:0 10px;color:var(--ink-4);font-size:11px;font-weight:600;white-space:nowrap}
.ep-rail-drawer{position:absolute;top:60px;bottom:14px;width:300px;z-index:10;opacity:0;pointer-events:none;transition:opacity .16s var(--ease-out,cubic-bezier(.2,.8,.2,1)),transform .16s var(--ease-out,cubic-bezier(.2,.8,.2,1))}
.ep-rail-drawer.evidence{right:14px;width:330px;transform:translateX(10px)}
.ep-rail-drawer.utility{right:14px;width:286px;transform:translateX(10px)}
.ep-rail-drawer.open{opacity:1;pointer-events:auto;transform:translateX(0)}
.ep-rail-drawer .ep-rail{height:100%;border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-popover);overflow:hidden}
.ep-evidence-panel{height:100%;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:10px;background:color-mix(in srgb,var(--surface) 96%,transparent);box-shadow:var(--shadow-popover);overflow:hidden}
.ep-evidence-head{height:48px;display:grid;grid-template-columns:minmax(0,1fr) 32px;align-items:center;gap:8px;padding:7px 8px 7px 10px;border-bottom:1px solid var(--border);background:var(--surface)}

.ep-evidence-body{flex:1;min-height:0;overflow:hidden}
.ep-evidence-view{height:100%;min-height:0}
.ep-evidence-view[hidden]{display:none}
.ep-evidence-panel .ep-rail{height:100%;border:0;border-radius:0;box-shadow:none;background:transparent}
.ep-evidence-panel .ep-rail-head{display:none}
.ep-utility-panel{height:100%;display:flex;flex-direction:column;gap:16px;border:1px solid var(--border);border-radius:10px;background:color-mix(in srgb,var(--surface) 96%,transparent);box-shadow:var(--shadow-popover);padding:15px;overflow:auto}
.ep-utility-panel header{padding-bottom:10px;border-bottom:1px solid var(--border)}
.ep-utility-panel h2{margin:0;font-size:14px;line-height:1.25;font-weight:600;color:var(--ink)}
.ep-utility-panel p{margin:4px 0 0;font-size:12px;line-height:1.45;color:var(--ink-4)}
.ep-utility-panel section{display:flex;flex-direction:column;gap:8px}
.ep-utility-panel h3{margin:0;font-size:12px;line-height:1.25;font-weight:600;color:var(--ink-3)}

.ep-option-row{min-height:36px;display:flex;align-items:center;gap:9px;width:100%;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);color:var(--ink-2);font:inherit;font-size:13px;font-weight:600;text-align:left;padding:0 10px;cursor:pointer}
.ep-option-row.on{border-color:var(--accent-soft-2);background:var(--select-bg);color:var(--select-ink)}
.ep-option-row:hover:not(.on){background:var(--hover-bg);border-color:var(--border-strong)}
.ep-canvas-theme-list{display:flex;flex-direction:column;gap:6px}
.ep-canvas-theme{min-height:38px;display:flex;align-items:center;gap:9px;width:100%;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);color:var(--ink-2);font:inherit;font-size:13px;font-weight:600;text-align:left;padding:0 10px;cursor:pointer}
.ep-canvas-theme:hover{background:var(--hover-bg);border-color:var(--border-strong)}
.ep-canvas-theme.on{border-color:var(--accent-soft-2);background:var(--select-bg);color:var(--select-ink)}
.ep-canvas-theme svg{margin-left:auto;color:currentColor;flex:0 0 auto}
.ep-canvas-swatch{width:24px;height:24px;flex:0 0 auto;border-radius:8px;border:1px solid var(--border-strong);background:var(--sw);box-shadow:inset 0 0 0 4px color-mix(in srgb,var(--surface) 88%,transparent)}
.ep-rail{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--surface)}
.ep-facts,.ep-side{border:0}
.ep-rail-head{height:58px;display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:13px 13px 9px;border-bottom:1px solid var(--border)}
.ep-rail-head h2{margin:0;font-size:13px;line-height:1.25;font-weight:600;color:var(--ink)}
.ep-rail-head span,.ep-rail-head p{display:block;margin:2px 0 0;font-size:11px;color:var(--ink-4)}
.ep-icon-static{width:27px;height:27px;display:grid;place-items:center;border:1px solid var(--border);border-radius:8px;color:var(--ink-4);background:var(--surface)}
.ep-fact-scroll{flex:1;min-height:0;overflow:auto;padding:9px 10px 12px}
.ep-fact-group{border-bottom:1px solid var(--border);padding:7px 0 9px}
.ep-fact-group:last-child{border-bottom:0}
.ep-fact-group header{height:24px;display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--ink)}
.ep-fact-group header span{font-size:12px;font-weight:600}
.ep-fact-group header svg{color:var(--ink-4)}
.ep-fact{width:100%;display:flex;align-items:flex-start;gap:7px;border:0;border-radius:8px;background:transparent;padding:6px 5px;text-align:left;color:var(--ink);font:inherit;cursor:pointer}
.ep-fact:hover{background:var(--bg-2)}
.ep-fact-text{display:flex;min-width:0;flex-direction:column;gap:2px}
.ep-fact-text b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;line-height:1.25;font-weight:600;color:var(--ink)}
.ep-fact-text small{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;font-size:11px;line-height:1.25;color:var(--ink-4)}
.ep-empty-line{border:1px dashed var(--border);border-radius:8px;background:var(--bg-2);padding:8px;font-size:12px;color:var(--ink-4)}
.ep-facts-foot{min-height:44px;display:flex;align-items:center;gap:9px;padding:8px 12px;border-top:1px solid var(--border);background:var(--surface)}
.ep-facts-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:28px;display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);padding:0 8px;color:var(--ink-3);font:inherit;font-size:12px;font-weight:600;cursor:pointer}
.ep-facts-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-2)}
.ep-facts-foot strong{margin-left:auto;font-size:12px;color:var(--ink-3);font-weight:600}
.ep-stage{position:absolute;inset:0;min-width:0;min-height:0;display:flex;justify-content:center;align-items:stretch;overflow-x:hidden;overflow-y:auto;padding:28px 52px 30px;background:var(--bg)}
.ep-canvas-swatch.theme-night,.ep-stage.theme-night{background:color-mix(in srgb,var(--sidebar-bg) 12%,var(--bg))}
.ep-canvas-swatch.theme-sand,.ep-stage.theme-sand{background:color-mix(in srgb,var(--brand-ivory) 58%,var(--bg))}
.ep-canvas-swatch.theme-mist,.ep-stage.theme-mist{background:var(--bg-2)}
.ep-stage.theme-night,.ep-stage.theme-sand,.ep-stage.theme-mist{box-shadow:none}
.ep-paper{width:min(980px,100%);min-height:100%;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:10px;background:var(--surface);box-shadow:var(--shadow-sm,0 1px 2px color-mix(in srgb,var(--ink) 4%,transparent));overflow:hidden}
.ep-stage.theme-night .ep-paper,.ep-stage.theme-sand .ep-paper,.ep-stage.theme-mist .ep-paper{box-shadow:var(--shadow-lg);border-color:var(--border)}
.ep-paper-head{min-height:86px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:24px 34px 15px;border-bottom:1px solid var(--border)}
.ep-paper-head h1{margin:0;font-size:22px;line-height:1.2;font-weight:760;letter-spacing:var(--tracking-normal);color:var(--ink)}
.ep-paper-summary{margin:7px 0 0;max-width:540px;font-size:12.5px;line-height:1.45;color:var(--ink-3)}
.ep-empty-doc{flex:1;min-height:360px;display:grid;place-items:center;align-content:center;gap:12px;padding:28px 34px;text-align:center;color:var(--ink-3)}
.ep-empty-doc > span{width:64px;height:74px;display:grid;place-items:center;border:1px dashed var(--border-strong);border-radius:10px;background:var(--bg);color:var(--ink-4)}
.ep-empty-doc h2{margin:0;font-size:17px;line-height:1.3;font-weight:700;color:var(--ink)}
.ep-empty-doc p{margin:0;max-width:320px;font-size:13px;line-height:1.5;color:var(--ink-3)}
.ep-preview-list{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:10px;padding:18px 34px 10px}
.ep-preview-card{border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;background:var(--content-bg);box-shadow:none;}
.ep-preview-card header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:11px}
.ep-preview-card h2{margin:0;font-size:13px;line-height:1.25;font-weight:760;color:var(--ink)}
.ep-preview-card header span{height:23px;display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:999px;background:var(--bg);padding:0 8px;font-size:11px;font-weight:650;color:var(--ink-3);white-space:nowrap}
.ep-lines{display:flex;flex-direction:column;gap:8px;padding-left:4px}
.ep-lines i{height:7px;border-radius:999px;background:var(--border);opacity:.9}
.ep-lines i.short{width:64%}
.ep-paper-foot{display:grid;grid-template-columns:minmax(0,1fr) 190px;align-items:end;gap:16px;padding:14px 34px 18px;border-top:1px solid var(--border);background:var(--surface)}
.ep-paper-foot p{margin:0;font-size:12px;line-height:1.45;color:var(--ink-4)}
.ep-paper-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:38px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:8px;background:var(--accent);color:var(--fg-inverse);padding:0 13px;font:inherit;font-size:13px;font-weight:700;cursor:pointer}
.ep-paper-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.46;cursor:not-allowed}
.ep-note .ep-paper-head{min-height:112px;display:block;padding:34px 56px 18px;border-bottom:0}
.ep-note{width:min(1040px,100%);align-self:flex-start;min-height:100%}
.ep-note.wide{width:min(1160px,100%)}
.ep-note .ep-paper-head h1{font-size:24px;line-height:1.15}
.ep-note .ep-paper-summary{margin-top:7px;color:var(--ink-3)}
.ep-note .ep-paper-head:after{content:"";display:block;height:1px;margin-top:20px;background:var(--border-strong)}
.ep-generated-list{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:24px;padding:4px 56px 40px}
.ep-note .ep-generated-list{flex:0 0 auto;min-height:auto;overflow:visible}
.ep-note-section{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 72px;gap:22px;border:0;background:transparent;padding:0;overflow:visible}
.ep-note.hide-sources .ep-note-section{grid-template-columns:minmax(0,1fr) 42px}
.ep-note.hide-sources .ep-note-sources{display:none}
.ep-note-section h2{margin:0 0 9px;font-size:14px;line-height:1.25;font-weight:760;color:var(--accent)}
.ep-note-content{min-width:0}
.ep-note-body{display:flex;flex-direction:column;gap:8px}
.ep-note-body p{margin:0;font-size:13px;line-height:1.7;color:var(--ink-2)}
.ep-note-section textarea{width:100%;min-height:132px;border:1px solid var(--border);border-radius:8px;outline:0;resize:vertical;background:var(--surface);color:var(--ink-2);font:inherit;font-size:13px;line-height:1.7;padding:11px 12px}
.ep-note-section textarea:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
.ep-note-margin{position:relative;display:flex;align-items:flex-start;flex-direction:column;gap:10px;padding-top:28px;border-left:1px solid var(--border);padding-left:10px}
.ep-note-sources{display:flex;flex-direction:column;gap:6px}
.ep-note-sources small{height:23px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:0 8px;font-size:11px;font-weight:650;color:var(--ink-3);white-space:nowrap}
.ep-side-head{height:66px}
.ep-side-section{padding:14px 13px;border-bottom:1px solid var(--border)}
.ep-side-section h3{margin:0 0 10px;font-size:13px;font-weight:760;color:var(--ink)}
.ep-source-counts{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 10px;margin:0}
.ep-source-counts dt{display:flex;align-items:center;gap:8px;min-width:0;font-size:12px;color:var(--ink-3)}
.ep-source-counts dd{margin:0;font-size:12px;font-weight:760;color:var(--ink)}
.ep-source-list{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.ep-source-list span{font-size:12px;line-height:1.3;color:var(--ink-3)}
.ep-side-note{margin:10px 0 0;font-size:12px;line-height:1.45;color:var(--ink-3)}
.ep-setup-summary .ep-source-counts dd{max-width:128px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ep-source-total{margin-top:auto;padding:10px 13px;font-size:11px;color:var(--ink-4)}
/* Dossiers d’échanges : frein720->960 ; la liste racine conserve son plafond720.
   Le bureau documentaire .ep-paper reste indépendant de ces marges. */
.ep-library{--ep-gutter:clamp(12px,3.2%,30px);--ep-inset:max(var(--ep-gutter),calc((100% - 720px + var(--ep-gutter) + var(--ep-gutter))/4),calc((100% - 960px)/2));flex:1;min-width:0;min-height:0;overflow:auto;background:var(--bg);padding:30px var(--ep-inset) 44px;container:exchange-library / inline-size}
.ep-library:has(.ep-library-root){--ep-inset:var(--ep-gutter)}
.ep-library-inner{max-width:none;margin:0 auto}
.ep-library-root{max-width:720px}
.ep-library-head{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:22px}
.ep-library-head h1{margin:0;font-size:22px;line-height:1.2;font-weight:600;color:var(--ink)}
.ep-library-head p{margin:6px 0 0;font-size:13px;line-height:1.45;color:var(--ink-3)}
.ep-library-trail{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--ink-4);font-size:12px;font-weight:600}
.ep-library-trail button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){border:0;background:transparent;color:var(--ink-3);font:inherit;font-size:12px;font-weight:600;padding:0;cursor:pointer}
.ep-library-trail button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.ep-folder-grid{display:grid;grid-template-columns:1fr;gap:12px}
.ep-folder-card{display:flex;align-items:center;gap:16px;width:100%;min-height:88px;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;text-align:left;color:var(--ink);font:inherit;cursor:pointer;transition:border-color var(--dur-fast,.15s) var(--ease-out,ease),box-shadow var(--dur-fast,.15s) var(--ease-out,ease);background:var(--content-bg);box-shadow:none;}
.ep-folder-card:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
.ep-folder-ico{width:44px;height:44px;display:grid;place-items:center;flex:0 0 auto;border:1px solid var(--border);border-radius:10px;background:var(--bg-2);color:var(--ink-3)}
.ep-folder-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}
.ep-folder-main b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:600;color:var(--ink)}
.ep-folder-main small{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;line-height:1.35;color:var(--ink-3)}
.ep-folder-main em{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:12px;color:var(--ink-4)}
.ep-doc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(360px,100%),1fr));gap:12px;margin:0 auto}
.ep-doc-card{display:flex;align-items:center;gap:14px;width:100%;min-height:86px;border:1px solid var(--content-border);border-radius:var(--radius-lg);padding:16px;text-align:left;color:var(--ink);font:inherit;cursor:pointer;transition:border-color var(--dur-fast,.15s) var(--ease-out,ease),box-shadow var(--dur-fast,.15s) var(--ease-out,ease);background:var(--content-bg);box-shadow:none;}
.ep-doc-card:hover{border-color:var(--content-hover-border);background:var(--content-hover-bg);box-shadow:none}
.ep-doc-ico{width:40px;height:40px;display:grid;place-items:center;flex:0 0 auto;border:1px solid var(--border);border-radius:10px;background:var(--bg-2);color:var(--accent)}
.ep-doc-main{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.ep-doc-main b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600;color:var(--ink)}
.ep-doc-main small,.ep-doc-main em{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:12px;color:var(--ink-3)}
.ep-doc-main em{font-size:12px;color:var(--ink-4)}
.ep-libempty{min-height:360px;display:grid;place-items:center;align-content:center;gap:10px;border:1px dashed var(--border);border-radius:16px;background:var(--surface);text-align:center;color:var(--ink-3)}
.ep-libempty span{width:56px;height:56px;display:grid;place-items:center;border:1px solid var(--border);border-radius:16px;background:var(--bg-2);color:var(--ink-4)}
.ep-libempty h2{margin:0;font-size:16px;color:var(--ink)}
.ep-libempty p{margin:0;font-size:13px}
.ep-libempty button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:34px;display:inline-flex;align-items:center;gap:7px;border:0;border-radius:8px;background:var(--accent);color:var(--fg-inverse);font:inherit;font-size:13px;font-weight:600;padding:0 13px;cursor:pointer}
.ep-wizard{flex:1;min-height:0;overflow:auto;background:var(--bg);padding:26px 28px 34px}
.ep-wizard-card{min-height:100%;display:flex;flex-direction:column;border:1px solid var(--content-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--content-bg);box-shadow:none;}
.ep-wizard-top{height:86px;display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,520px);align-items:center;gap:20px;padding:0 28px;border-bottom:1px solid var(--border)}
.ep-wizard-top p{margin:0 0 4px;font-size:12px;font-weight:600;color:var(--accent)}
.ep-wizard-top h1{margin:0;font-size:22px;line-height:1.2;font-weight:600;color:var(--ink)}
.ep-wizard-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ep-wizard-steps span{height:36px;display:flex;align-items:center;justify-content:center;gap:7px;border-radius:999px;background:var(--bg-2);color:var(--ink-4);font-family:var(--font-sans);font-size:12px;font-weight:600}
.ep-wizard-steps span.on{background:var(--accent-soft);color:var(--accent)}
.ep-wizard-steps small{font-family:inherit;font-size:12px;font-weight:600}
.ep-wizard-grid{flex:1;min-height:0;display:grid;grid-template-columns:minmax(360px,.95fr) minmax(460px,1.05fr);gap:20px;padding:24px 28px}
.ep-wizard-panel{min-width:0;border:1px solid var(--support-border);border-radius:10px;padding:18px;background:var(--support-bg);box-shadow:none;border-color:var(--support-border)}
.ep-wizard-panel h2,.ep-wizard-facts h2{margin:0 0 14px;font-size:16px;line-height:1.25;font-weight:600;color:var(--ink)}
.ep-choice-list{display:flex;flex-direction:column;gap:10px}
.ep-choice-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:58px;display:flex;align-items:center;gap:13px;width:100%;border:1px solid var(--border-soft);border-radius:10px;background:var(--surface);padding:0 14px;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.ep-choice-list button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
.ep-choice-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).selected{border-color:transparent;box-shadow:none;background:var(--select-bg);color:var(--select-ink)}
.ep-choice-list button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):not(.selected):hover{background:var(--hover-bg);border-color:var(--border-strong)}
.ep-choice-list span{width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--border);border-radius:8px;background:var(--bg-2);color:var(--accent)}
.ep-choice-list b{font-size:14px;font-weight:600;flex:1}
.ep-choice-list em{font-style:normal;font-size:12px;font-weight:600;color:var(--ink-3)}
.ep-form-grid{display:grid;grid-template-columns:1fr 180px;gap:12px}
.ep-form-grid label{display:flex;flex-direction:column;gap:6px}
.ep-form-grid label.wide{grid-column:1/-1}
.ep-form-grid label > span,.ep-source-picker h3{font-size:12px;font-weight:600;color:var(--ink-3)}
.ep-source-picker{margin-top:16px;border-top:1px solid var(--border);padding-top:15px}
.ep-source-picker header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:9px}
.ep-source-picker header h3{margin:0}
.ep-source-picker header span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--ink-4)}
.ep-source-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}
.ep-source-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)),.ep-goal-toggle{min-height:36px;display:flex;align-items:center;gap:8px;border:1px solid var(--border-soft);border-radius:8px;background:var(--surface);padding:0 10px;color:var(--ink-2);font:inherit;font-size:12px;font-weight:600;text-align:left;cursor:pointer}
.ep-source-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).selected,.ep-goal-toggle.on{background:var(--select-bg);border-color:var(--accent-soft-2);color:var(--select-ink)}
.ep-source-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):not(.selected):hover,.ep-goal-toggle:not(.on):hover{background:var(--hover-bg);border-color:var(--border-strong)}
.ep-source-options button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)) span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ep-goal-toggle{margin-top:10px;width:100%;justify-content:flex-start}
.ep-wizard-facts{flex:1;min-height:0;display:grid;grid-template-columns:280px minmax(0,1fr);gap:20px;padding:24px 28px}
.ep-wizard-facts aside,.ep-wizard-facts section{min-width:0;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg);padding:16px}
.ep-wizard-facts dl{display:grid;grid-template-columns:105px minmax(0,1fr);gap:9px 10px;margin:0}
.ep-wizard-facts dt{font-size:12px;font-weight:600;color:var(--ink-4)}
.ep-wizard-facts dd{margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;color:var(--ink)}
.ep-wizard-facts aside p,.ep-wizard-facts section>p{margin:14px 0 0;font-size:13px;line-height:1.45;color:var(--ink-3)}
.ep-wizard-fact-list{max-height:540px;overflow:auto;display:flex;flex-direction:column;gap:12px;padding-right:4px}
.ep-wizard-fact-group{border:1px solid var(--border);border-radius:10px;overflow:hidden}
.ep-wizard-fact-group header{height:38px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 12px;background:var(--bg);font-size:13px;font-weight:600;color:var(--ink)}
.ep-wizard-fact-group header span{font-family:var(--font-sans);font-size:11px;color:var(--ink-4)}
.ep-wizard-fact-group button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){width:100%;display:flex;align-items:flex-start;gap:9px;border:0;border-top:1px solid var(--border);background:var(--surface);padding:10px 12px;text-align:left;color:var(--ink);font:inherit;cursor:pointer}
.ep-wizard-fact-group button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){width:100%}
.ep-wizard-fact-group button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--bg-2)}
.ep-wizard-fact-group button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))>span:last-child{display:flex;min-width:0;flex-direction:column;gap:3px}
.ep-wizard-fact-group b{font-size:13px;line-height:1.3;font-weight:600;color:var(--ink)}
.ep-wizard-fact-group small{font-size:12px;line-height:1.35;color:var(--ink-3)}
.ep-wizard-foot{height:58px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;padding:0 24px;border-top:1px solid var(--border);background:var(--surface)}
.ep-wizard-foot p{margin:0;font-size:13px;color:var(--ink-3)}
.ep-wizard-foot div{display:flex;align-items:center;gap:8px}
.ep-wizard-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){height:36px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:8px;background:var(--accent);color:var(--fg-inverse);font:inherit;font-size:13px;font-weight:600;padding:0 15px;cursor:pointer}
.ep-wizard-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)).secondary{border:1px solid var(--border);background:var(--surface);color:var(--ink-2)}
.ep-wizard-foot button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{opacity:.5;cursor:not-allowed}
.ep-share-wrap{position:relative;justify-self:end;display:inline-flex;align-items:center}

@container exchange-library (max-width:760px){
  .ep-library-head{align-items:flex-start;flex-direction:column}
}

@media (max-width:1180px){
  .ep-stage{padding:18px 56px 28px}
}
@media (max-width:900px){
  .ep-page{overflow:auto}
  .ep-screen-context{display:none}
  .ep-grid{height:720px;min-height:720px}
  .ep-rail{max-height:330px}
  .ep-stage{padding:12px}
  .ep-side{order:3;border-left:0;border-top:1px solid var(--border)}
  .ep-paper-head,.ep-preview-list,.ep-generated-list,.ep-paper-foot{padding-left:16px;padding-right:16px}
  .ep-paper-foot{grid-template-columns:1fr}
  .ep-library{padding-block:18px 30px}
  .ep-wizard{padding:12px}
  .ep-wizard-top,.ep-wizard-grid,.ep-wizard-facts,.ep-wizard-foot{display:flex;flex-direction:column;align-items:stretch;height:auto}
  .ep-wizard-top,.ep-wizard-grid,.ep-wizard-facts{padding:16px}
  .ep-wizard-foot{padding:12px}
  .ep-form-grid{grid-template-columns:1fr}
}

/* Lot D conventions natives — bloc signature du Lebenslauf (doc DE uniquement) */
.cve-cvsign{display:flex;justify-content:space-between;align-items:flex-end;margin-top:26px;padding-top:10px;font-size:12px;color:var(--ink-2)}
.cve-cvsign .n{font-weight:600;color:var(--ink)}

/* ===== Focus clavier — raccords du contrat (audit contours 2026-07-27) =====
   Chaque contrôle focusable doit montrer le ring token au clavier ; aucun champ muet. */
.vjob-source-tabs button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible,
.win-dp-field:focus-visible,
.vdp-select:focus-visible,
.ui-close-button:focus-visible,
.vdp-btn:focus-visible{
  outline:0;box-shadow:var(--ring-focus)
}
.vw-cl-input:focus-visible{border-radius:6px;box-shadow:var(--ring-focus)}
.cve-profile-menu-search:focus-visible{border-bottom-color:var(--accent)}
.vw-pick-search:focus-within{border-bottom-color:var(--accent)}
.ct-qbtn:focus-visible,.vc-display-btn:focus-visible,.vw-statuspill:focus-visible,.vw-origin-hbtn:focus-visible,.vw-filterbtn:focus-visible,.vw-due-btn:focus-visible,.cve-inlinebtn:focus-visible,.aev-tmpl-btn:focus-visible,.jc-pill:focus-visible{
  outline:0;box-shadow:var(--ring-focus)
}

/* Tactile et hybride : l'OS reste seul propriétaire du scroll. Les anciennes
   règles WebKit desktop sont neutralisées, puis la propriété standard donne
   un contraste suffisant à l'indicateur overlay quand Safari la prend en charge. */
@media (any-pointer:coarse){
  *{
    scrollbar-width:auto !important;
    scrollbar-color:var(--scroll-native-touch-thumb) transparent !important;
  }
  *::-webkit-scrollbar,
  *::-webkit-scrollbar-thumb,
  *::-webkit-scrollbar-track,
  *::-webkit-scrollbar-corner{
    all:revert !important;
  }
  .ui-scrollpill{display:none !important}
}

  /* ==========================================================================
     SIH-60 · Renforcer un fait : une seule porte
     Décisions de la maquette validée du 2026-07-31 (docs/maquettes/
     sih-60-une-seule-porte/DECISIONS.md). Le garde `npm run check:sih60`
     échoue si l'une d'elles cesse d'être tenue.
     ========================================================================== */
  /* d15 — La case à cocher remplace le raccourci chiffré 1·2·3, hérité des
     questionnaires en ligne de commande : elle se comprend sans mode d'emploi. */
  /* d14 — Le trombone se réduit à son icône, posée dans l'angle du champ ; son
     intitulé revient au survol et reste lisible par un lecteur d'écran. La zone
     entière accepte le glisser-déposer. */
  .memory-reinforce-zone{position:relative}
  .memory-reinforce-clip{position:absolute;top:2px;right:2px;box-sizing:border-box;width:24px;height:24px;display:grid;place-items:center;padding:0;border:1px solid transparent;border-radius:var(--radius-md);color:var(--ink-4);cursor:pointer}
  .memory-reinforce-clip:hover{border-color:var(--border);background:var(--surface);color:var(--ink-2)}
  .memory-reinforce-dropcue{display:none;position:absolute;inset:0;place-items:center;border:1px dashed var(--ink-4);border-radius:var(--radius-md);background:linear-gradient(var(--hover-bg),var(--hover-bg)),color-mix(in srgb,var(--surface) 88%,transparent);color:var(--ink-2);font-size:12px}
  .memory-reinforce-zone.is-drop .memory-reinforce-dropcue{display:grid}
  /* d11 — Pendant le renforcement, le récit rejoint la saisie à gauche et la
     question occupe toute la colonne de droite. Simple bascule de disposition :
     le bloc est le même, il change de colonne. */
  .vdp-grid.is-reinforcing{grid-template-columns:.92fr 1.08fr}
  /* d08 — Double étiquette : le libellé client en tête, le terme de la méthode
     en seconde ligne, discret. Un lecteur technique reconnaît STAR ; le client
     lit d'abord une formulation qu'il comprend. */
  .vdp-sk-star{display:block;margin-top:3px;font-size:11px;letter-spacing:var(--tracking-wide);opacity:.72}
  /* d07 — L'Action reste visible : les quatre étapes doivent se lire. Le texte
     seul est borné à deux lignes, le paragraphe complet vivant à gauche. */
  .vdp-sv-clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .vdp-sv-from{display:block;margin-top:3px;color:var(--ink-4);font-family:var(--font-sans);font-size:11px;letter-spacing:.05em;text-transform:uppercase}

  /* SIH-60 — Correctifs du rendu réel (retours Landry, 2026-07-31).
     · Le pied du questionnaire vit DANS la carte : il flottait dessous,
       désaligné et détaché du bloc auquel il appartient.
     · Le nom du fichier joint se lit comme une pastille, pas comme une chaîne
       brute jetée sous le champ. */
  .memory-reinforce-foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--border-soft)}
  .memory-reinforce-filename{display:inline-flex;align-items:center;gap:6px;margin-top:8px;max-width:100%;padding:4px 9px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--ink-2);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .memory-reinforce-file-facts{display:grid;gap:7px;margin-top:10px;padding:10px 12px;border:0;border-radius:var(--radius-md);background:var(--support-bg)}
  .memory-reinforce-file-facts strong{font-size:11px;color:var(--ink-2)}
  .memory-reinforce-file-facts label{display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.4;color:var(--ink-2)}
  .memory-reinforce-file-facts input{margin-top:2px;accent-color:var(--ink)}
  .memory-reinforce-file-author{min-width:0;margin:10px 0 0;padding:0;border:0}
  .memory-reinforce-file-author legend{padding:0;font-size:11px;font-weight:500;color:var(--ink-2)}
  .memory-reinforce-file-author .memory-reinforce-options{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:7px}
  /* Le champ laisse la place au trombone pour qu'ils ne se chevauchent jamais. */
  .memory-reinforce-zone .memory-reinforce-free > span{padding-right:30px}
  /* Séparateurs entre les sections de la fiche : sans eux, les rubriques de la
     colonne de gauche se lisent comme un seul bloc continu. */
  .vdp-col > .vdp-block + .vdp-block{margin-top:18px;padding-top:18px;border-top:1px solid var(--border-soft)}
  /* Traitement de fin (d17) : on montre qu'on prend le temps de relire, plutôt
     que de laisser le client devant un bouton qui ne répond pas. */
  .memory-reinforce-proc{height:3px;margin-top:16px;border-radius:99px;background:var(--bg-2);overflow:hidden}
  .memory-reinforce-proc span{display:block;height:100%;width:38%;border-radius:99px;background:var(--ink-3);animation:memoryReinforceProc 1.3s var(--ease-out) infinite}
  @keyframes memoryReinforceProc{from{transform:translateX(-100%)}to{transform:translateX(320%)}}
  /* Le bouton de renforcement reprend la place qu'il avait dans la maquette :
     pleine largeur sous le tableau, et respirant. Collé au bloc au-dessus, il se
     lisait comme un appendice plutôt que comme l'action principale. */

/* SIH-193 · Une charte rédactionnelle durable, facultative et sans friction répétée. */
/* La largeur de Rédaction est celle de la COLONNE COMMUNE des réglages, posée
   une seule fois côté panneau (SIH-231). Une mesure propre à cette section
   rouvrait la situation mesurée ce jour-là : trois largeurs concurrentes,
   808, 760 et 680, et du vide sur le seul flanc droit selon l'onglet ouvert.
   Les paragraphes gardent en revanche leur mesure de lecture : c'est le TEXTE
   qui a besoin d'être borné, pas la section. La règle a donc été retirée plutôt
   que vidée : une déclaration sans propriété est une dette qui invite à y
   remettre une largeur. */
.settings-column{max-width:var(--settings-column-max,100%);margin-inline:auto}
.settings-redaction{display:grid;gap:var(--space-4)}
.settings-redaction>section{min-width:0}
.settings-section-heading{display:flex;align-items:flex-start;gap:12px;min-width:0}
.settings-section-heading>div{min-width:0}
.settings-section-heading h3{margin:0;color:var(--ink);font-size:var(--settings-type-display,13px);font-weight:600}
.settings-section-heading p{max-width:580px;margin:4px 0 0;color:var(--ink-3);font-size:var(--settings-type-body,13px);line-height:1.45}
.settings-section-icon{display:grid;flex:0 0 auto;width:34px;height:34px;place-items:center;border-radius:var(--radius-sm);background:var(--bg-2);color:var(--ink-2)}
.settings-generation-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,.82fr);gap:var(--space-5);padding:var(--space-5);border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
.settings-generation-details{min-width:0}
.settings-generation-label{margin:0 0 var(--space-2);color:var(--ink-3)}
.settings-generation-band{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-3) var(--space-5);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--support-bg)}
.settings-generation-release{display:flex;align-items:center;flex:1 1 auto;min-width:0;flex-wrap:wrap;gap:var(--space-3);line-height:var(--type-body-line)}
.settings-generation-version{color:var(--ink);font-weight:var(--weight-strong);overflow-wrap:anywhere}
.settings-generation-date{min-height:1.45em;margin:var(--space-2) 0 0;color:var(--ink-3);line-height:var(--type-body-line)}
.settings-charter-selector{padding:var(--space-5);border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
/* DEV-570 : le choix prend la taille de ses mots et s'aligne, avec sa description, sur le
   texte du titre (pictogramme de 34 px + écart de 12 px), comme un réglage et non un champ. */
.settings-charter-selector .tabbar,.settings-charter-selector .settings-charter-description{margin-left:calc(34px + 12px)}
.settings-charter-selector .tabbar{margin-top:var(--space-4)}
.settings-charter-intro{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-5);margin-bottom:var(--space-5)}
.settings-charter-intro h3{margin:0;color:var(--ink);font-size:var(--settings-type-display,13px);font-weight:600}
.settings-charter-intro p{max-width:560px;margin:6px 0 0;color:var(--ink-2);font-size:var(--settings-type-body,13px);line-height:1.55}
.settings-charter-state{display:inline-flex;flex:0 0 auto;align-items:center;gap:7px;padding-top:2px;color:var(--ink-3);font-size:var(--settings-type-meta,13px);white-space:nowrap}
.settings-charter-state i{width:7px;height:7px;border-radius:50%;background:var(--ink-4)}
.settings-charter-state i.is-on{background:var(--good)}
.settings-charter{margin-top:var(--space-4);padding:var(--space-5);border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
.settings-charter-titlebar{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;margin-bottom:var(--space-4)}
.settings-charter-titlecopy{min-width:0}
.settings-charter-description{margin:var(--space-4) 0 0;color:var(--ink-3);font-size:var(--settings-type-body,13px);line-height:var(--type-body-line)}
.settings-charter-summary,.settings-charter-editor{padding:var(--space-4);border-radius:var(--radius-md);background:var(--surface-2)}
.settings-charter-summary blockquote{margin:0;color:var(--ink-2);font-size:var(--settings-type-value,13px);line-height:var(--type-body-line);overflow-wrap:anywhere}
.settings-charter-guardrail{display:flex;align-items:flex-start;gap:7px;margin:12px 0 0;color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.5}
.settings-charter-guardrail svg{flex:0 0 auto;margin-top:1px}
.settings-charter-actions,.settings-charter-editor-actions{display:flex;align-items:center;gap:8px;margin-top:16px;flex-wrap:wrap}
.settings-charter-editor-head h4{margin:4px 0 0;color:var(--ink);font-size:var(--settings-type-display,13px);font-weight:600}
.settings-charter-editor-head p{max-width:640px;margin:6px 0 0;color:var(--ink-2);font-size:var(--settings-type-body,13px);line-height:1.55}
.settings-charter-editor>label{display:block;margin:16px 0 6px;color:var(--ink-2);font-size:var(--settings-type-control,13px);font-weight:600}
.settings-charter-editor textarea{box-sizing:border-box;width:100%;min-height:126px;resize:vertical;padding:11px 12px;border-radius:var(--radius-md);color:var(--ink);font:inherit;font-size:var(--settings-type-value,13px);line-height:1.55}
.settings-charter-field-meta{display:flex;justify-content:space-between;gap:14px;margin-top:6px;color:var(--ink-4);font-size:var(--settings-type-meta,13px);line-height:1.4}
.settings-charter-effect{margin-top:18px}
.settings-charter-effect>h4{margin:0 0 8px;color:var(--ink-2);font-size:var(--settings-type-control,13px);font-weight:600}
.settings-charter-preview{display:grid;grid-template-columns:minmax(0,1fr) 58px minmax(0,1fr);align-items:stretch;gap:10px}
.settings-charter-preview>div:not(.settings-charter-preview-connector){padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg)}
.settings-charter-preview>div.is-personal{border-color:var(--accent);background:var(--accent-soft-hover)}
.settings-charter-preview-connector{display:flex;align-items:center;align-self:center;flex-direction:column;gap:5px;padding:0;color:var(--ink-4);text-align:center}
.settings-charter-preview span{display:block;color:var(--ink-3);font-size:var(--settings-type-eyebrow,13px);font-weight:600}
.settings-charter-preview-connector span{font-size:var(--settings-type-meta,13px);letter-spacing:0;text-transform:none;white-space:nowrap}
.settings-charter-preview p{margin:8px 0 0;color:var(--ink-2);font-size:var(--settings-type-value,13px);line-height:1.5;overflow-wrap:anywhere}
.settings-charter-preview>div.is-personal span,.settings-charter-preview>div.is-personal p{color:var(--accent-ink)}
.settings-charter-preview>div.is-personal p{font-weight:600}
.settings-charter-preview-invitation{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:12px;border-radius:var(--radius-md);background:var(--surface);color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.5}
.settings-charter-preview-invitation p{margin:0}
.settings-charter-preview-invitation .btn{flex:0 0 auto}
.settings-charter-editable{max-width:720px;margin:12px auto 0;color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.5;text-align:center}
.settings-charter-editable strong{color:var(--ink-2);font-weight:600}
.settings-charter-editor-actions{justify-content:flex-end;padding-top:14px;border-top:1px solid var(--border-soft)}
.settings-charter-message{min-height:18px;margin-top:10px;color:var(--ink-3);font-size:var(--settings-type-supporting,13px)}
.settings-charter-message.is-error{color:var(--bad-2)}
.settings-charter-message.is-saved{color:var(--good-2)}
.settings-developer-mode{margin:0 0 18px;padding-bottom:18px;border-bottom:1px solid var(--border)}

/* SIH-319 · page dédiée Sihage Community dans les réglages. */
.settings-community{display:grid;gap:18px;padding-bottom:4px}
.settings-community-hero{display:flex;align-items:flex-start;gap:12px;max-width:72ch}
.settings-community-icon,.community-silence-icon{display:grid;flex:0 0 auto;width:32px;height:32px;place-items:center;border-radius:var(--radius-sm);background:var(--accent-soft);color:var(--accent-ink)}
.settings-community h3{margin:0;color:var(--ink);font-size:22px;font-weight:600;letter-spacing:-.02em}
.settings-community h4{margin:0;color:var(--ink);font-size:var(--settings-type-title,13px);font-weight:600}
.settings-community p,.community-silence-card p{margin:4px 0 0;color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.55}
.community-silence-card h3{margin:0;color:var(--ink);font-size:var(--settings-type-title,13px);font-weight:600}
.settings-community-benefit,.settings-community-how,.settings-community-join{padding:18px;border-radius:var(--radius-lg);background:var(--bg-2)}
.settings-community-illustration{overflow:hidden;margin:15px 0 0;border-radius:var(--radius-lg);background:var(--surface)}
.settings-community-illustration img{display:block;width:100%;height:auto;object-fit:contain}
.settings-community-illustration-privacy{margin-bottom:15px}
.settings-community-benefit-close{margin-top:10px!important;color:var(--ink-2)!important;text-align:center}
.settings-community-how>h4{margin-bottom:14px}
.settings-community-how-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.settings-community-how-grid article{display:grid;grid-template-columns:30px minmax(0,1fr);gap:9px;align-items:start}
.settings-community-how-grid article>span{display:grid;width:30px;height:30px;place-items:center;border-radius:var(--radius-sm);background:var(--surface);color:var(--accent-ink)}
.settings-community-how-grid strong{color:var(--ink);font-size:var(--settings-type-supporting,13px);font-weight:500;line-height:1.4}
.settings-community-how-grid p{font-size:var(--settings-type-meta,13px)}
.settings-community-trust{display:flex;align-items:center;justify-content:center;gap:7px;margin:15px -18px -18px;padding:9px 16px;border-radius:0 0 var(--radius-lg) var(--radius-lg);background:var(--accent-soft);color:var(--accent-ink);font-size:var(--settings-type-supporting,13px);font-weight:500;text-align:center}
.settings-community-join{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,.85fr);gap:16px;align-items:center}
.settings-community-join-copy>span{display:flex;align-items:flex-start;gap:6px;margin-top:9px;color:var(--ink-2);font-size:var(--settings-type-meta,13px);line-height:1.45}
.settings-community-join-copy>span svg{flex:0 0 auto;margin-top:1px;color:var(--accent-ink)}
.settings-community-state{display:grid;gap:12px;padding:16px;border:1px solid var(--content-border);border-radius:var(--radius-lg);background:var(--content-bg)}
.settings-community-state.is-enabled{background:color-mix(in srgb,var(--good-soft) 56%,var(--surface))}
.settings-community-state.is-error{background:color-mix(in srgb,var(--bad-soft) 45%,var(--surface))}
.settings-community-state-copy{display:flex;align-items:flex-start;gap:9px;min-width:0}
.settings-community-state-copy>div{display:grid;gap:3px;min-width:0}
.settings-community-state-copy strong{color:var(--ink);font-size:var(--settings-type-body,13px);font-weight:500}
.settings-community-state-copy div>span,.settings-community-limit{color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.45}
.settings-community-state-dot{width:9px;height:9px;flex:0 0 auto;margin-top:4px;border-radius:50%;background:var(--ink-4)}
.settings-community-state.is-enabled .settings-community-state-dot{background:var(--good)}
.settings-community-state.is-error .settings-community-state-dot{background:var(--bad)}
.settings-community-state>.btn{justify-self:start}
.settings-community-error{grid-column:1/-1;color:var(--bad-2)!important}
.settings-community-limit{grid-column:1/-1;margin:0!important}
.settings-community-footer{display:grid;gap:4px;padding:2px 10px;text-align:center}
.settings-community-footer strong{color:var(--accent-ink);font-size:var(--settings-type-body,13px);font-weight:500}
.settings-community-footer span{color:var(--ink-3);font-size:var(--settings-type-meta,13px)}
.community-silence-card{display:grid;gap:13px;margin:0 0 18px}
.community-silence-head{display:flex;align-items:flex-start;gap:11px}
.community-silence-actions{display:flex;flex-wrap:wrap;gap:8px}
.community-silence-community{display:grid;gap:6px;padding:10px 12px;border-radius:var(--radius-md);background:var(--support-bg)}
.community-silence-community>strong{color:var(--ink);font-size:var(--settings-type-body,13px)}
.community-silence-community>span,.community-silence-note{color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.45}
.community-silence-community>.btn{justify-self:start;margin-top:3px}
.community-silence-domain{display:flex;gap:8px;margin-top:4px}
.community-silence-signal{display:grid;gap:3px;margin-top:4px;padding:11px 12px;border-radius:var(--radius-sm);background:var(--surface)}
.community-silence-signal strong{color:var(--ink);font-size:var(--settings-type-body,13px)}
.community-silence-signal span,.community-silence-signal small{color:var(--ink-3);font-size:var(--settings-type-supporting,13px);line-height:1.45}

@media(max-width:760px){
  .ui-window-scrim:has(> .settings-dialog){align-items:stretch!important;padding:10px!important}
  .ui-window.settings-dialog{width:100%!important;height:calc(100dvh - 20px)!important;max-height:none!important;flex-direction:column;border-radius:var(--radius-lg)!important}
  .settings-nav-rail{width:auto!important;flex:0 0 auto!important;padding:10px!important;border-right:0!important;border-bottom:1px solid var(--border)}
  .settings-account-identity,.settings-signout,.settings-nav .side-menu__group-label{display:none!important}
  .settings-nav{flex-direction:row;overflow-x:auto;gap:6px;margin-top:0;padding-top:0;padding-bottom:2px;border-top:0;scrollbar-width:thin}
  .settings-nav .side-menu__group{display:contents}
  .settings-nav .side-menu__item{width:auto;flex:0 0 auto;white-space:nowrap}
  .settings-main{min-height:0}
  .settings-header{padding:13px 14px!important}
  .settings-content{padding:16px 14px!important}
  .settings-generation-panel{grid-template-columns:1fr}
  .settings-charter-selector,.settings-charter{padding:var(--space-4)}
  /* Fenêtre étroite : le choix reprend toute la largeur sous le titre et ses libellés peuvent
     passer à la ligne plutôt que déborder. */
  .settings-charter-selector .tabbar,.settings-charter-selector .settings-charter-description{margin-left:0}
  .settings-charter-selector .tabbar{display:flex;width:100%}
  .settings-charter-selector .tabbar-btn{flex:1 1 0;min-width:0;white-space:normal;text-align:center}
  .settings-charter-intro{display:grid}
  .settings-charter-titlebar{grid-template-columns:auto minmax(0,1fr)}
  .settings-charter-titlebar .settings-charter-state{grid-column:2}
  .settings-charter-state{white-space:normal}
  .settings-charter-summary,.settings-charter-editor{padding:var(--space-4)}
  .settings-charter-field-meta{display:grid;gap:3px}
  .settings-charter-preview{grid-template-columns:1fr}
  .settings-charter-preview-connector{min-height:42px}
  .settings-charter-preview-connector svg{transform:rotate(90deg)}
  .settings-charter-preview-invitation{align-items:stretch;flex-direction:column}
  .settings-charter-preview-invitation .btn{justify-content:center;width:100%}
  .settings-charter-editable{text-align:left}
  .settings-charter-editor-actions{align-items:stretch;flex-direction:column-reverse}
  .settings-charter-editor-actions .btn{width:100%;justify-content:center}
  .settings-community-how-grid,.settings-community-join{grid-template-columns:1fr}
  .settings-community-hero{display:grid}
  .settings-community-illustration-paths{padding:4px}
  .settings-community-illustration-privacy img{height:auto;max-height:180px}
  .settings-community-trust{justify-content:flex-start;text-align:left}
  .settings-community-state>.btn{width:100%;justify-content:center}
  .community-silence-domain{align-items:stretch;flex-direction:column}
}

/* ═══ SIH-84 · reports de disposition (voir « LA barre d'onglets ») ═══ */
/* Sélecteur de date : la barre reste visible quand la liste des jours défile. */
.win-dp-pop > .jc-pop-menu.fixed .tabbar.win-dp-tabs{position:sticky;top:0;z-index:2;background:var(--surface)}
/* Volet d'édition élargi (SIH-68) : les réglages y respirent. */

/* SIH-356 : clarification dans la famille C, près des documents disponibles. */
.generation-clarification { display: flex; align-items: center; justify-content: space-between; gap: var(--space-5); padding: var(--space-5); }
.generation-clarification p { margin: 6px 0 0; color: var(--ink-3); font-size: var(--type-meta-size); }
.generation-clarification__question { display: block; margin: 16px 0 10px; font-weight: 600; }
.generation-clarification__exchange { margin-bottom: 16px; }
@media (max-width: 600px) { .generation-clarification { align-items: flex-start; flex-direction: column; } }

/* SIH-373: the library inherits the shared memory width and profile modal. */
.library-page { padding-block: 28px; }
.library-heading { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; margin-bottom:24px; }
.library-heading h1 { margin:0; font-size:22px; font-weight:600; color:var(--ink); }
.library-heading p { margin:8px 0 0; color:var(--ink-2); }
.library-tools { display:flex; align-items:flex-end; justify-content:space-between; gap:16px; margin-block:18px; flex-wrap:wrap; }
.library-correction label { display:flex; flex-direction:column; gap:8px; font-size:13px; color:var(--ink-2); }
.library-search { flex:1; min-width:200px; }
.library-page .tabbar[data-variant="souligne"] { overflow-x:auto; max-width:100%; }
.library-results { min-height:240px; }
.library-list { list-style:none; padding:0; margin:0; }
.library-list li + li { border-top:1px solid var(--border); }
.library-row { width:100%; display:flex; align-items:center; justify-content:space-between; gap:16px; text-align:left; padding:16px 8px; border:0; border-radius:0; background:transparent; color:var(--ink); box-shadow:none; }
.library-row:hover { background:var(--bg-2); }
.library-row .vpf-body { display:flex; flex-direction:column; gap:6px; min-width:0; }
.library-row .vpf-name { white-space:normal; overflow-wrap:anywhere; }
.library-pagination { display:flex; align-items:center; justify-content:center; gap:20px; padding-block:20px; color:var(--ink-2); font-size:13px; }
.library-detail-body { overflow-y:auto; }
.library-detail-body section { margin-block:24px; }
.library-detail-body h3 { font-size:16px; color:var(--ink); margin:0 0 12px; font-weight:600; }
.library-detail-body h4 { font-size:14px; margin:0 0 8px; }
.library-detail-body p { line-height:1.6; overflow-wrap:anywhere; }
.library-detail-body details { margin-block:12px; }
.library-detail-body summary { cursor:pointer; color:var(--ink-2); }
.library-correction { display:grid; gap:16px; }
@media (max-width: 640px) {
  .library-heading { flex-direction:column; gap:16px; }
  .library-heading h1 { font-size:22px; }
  .library-row { flex-wrap:wrap; gap:8px; }
  .library-row .vpf-body { flex-basis:100%; }
  .library-tools > label { flex:1; min-width:180px; }
}
.library-page { padding-inline:var(--vault-reading-inset); gap:0; height:100%; }
.library-detail-body { display:block; }
.library-detail-body > section:first-of-type { margin-top:8px; }
.library-detail .tabbar { max-width:100%; overflow-x:auto; }
@media (max-width:640px) {
  .os-shell:has(.library-page) { flex-direction:row; }
  .os-shell:has(.library-page) > .side { height:100%; border-bottom:0; }
}

/* DEV-530 · cartes Candidatures, liste persistante et lecture ouverte. */
.match-workspace{max-width:none;padding:0;gap:0}
.match-columns{display:grid;grid-template-columns:minmax(360px,34fr) minmax(0,66fr);gap:0;flex:1;min-height:0}
.match-list-panel,.match-reading{min-width:0;min-height:0;border:0;border-radius:0;background:var(--content-bg);box-shadow:none}
/* DEV-536 : la liste se cale sur le cartouche de l'en-tête de lecture. Même retrait de 12 px de part
   et d'autre du filet, même départ en haut (8 px), et un seul pas de 8 px entre onglets, recherche et tuiles. */
.match-list-panel{display:flex;flex-direction:column;padding:8px 12px 12px;color:var(--ink);border-right:1px solid var(--border)}
.match-list-tabs{display:flex;flex-shrink:0;gap:12px;padding-bottom:0;border-bottom:0;margin-bottom:8px} /* DEV-570 : la recherche est retirée, le pas de 8 px reste entre onglets et tuiles */
.match-list-tabs .tabbar{max-width:100%;flex-wrap:wrap}
  .match-tiles{display:flex;flex:1;min-height:0;flex-direction:column;gap:8px;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;margin-right:-12px;padding-right:12px;padding-bottom:2px} /* les tuiles gardent toute la largeur : le repère de défilement vit dans la marge du panneau */
.match-quality{display:inline-flex;align-items:center;gap:7px;flex:none;white-space:nowrap;color:var(--ink);font-size:14px;font-weight:600;line-height:1.4}
.match-quality i{width:9px;height:9px;border-radius:50%;background:var(--ink-3);flex:none}
.match-quality[data-quality="good"] i,.match-quality[data-quality="very_strong"] i{background:var(--good)}
.match-quality[data-quality="verify"] i{background:var(--warn)}
.match-reading-title{display:flex;align-items:center;justify-content:space-between;gap:18px;grid-row:1;min-height:36px;margin-bottom:8px}
.match-reading-head .match-reading-title h1{flex:1;min-width:0;margin-bottom:0}
.match-reading-meta .kc-facts{max-width:100%;margin-bottom:8px}
.match-reading-meta .cve-info{cursor:default}
.match-list-footer{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border);font-size:13px;color:var(--ink-2)}
.match-list-footer button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){display:flex;align-items:center;gap:6px;border:0;padding:0;background:transparent;color:var(--accent);font:inherit;text-decoration:underline;cursor:pointer}.match-pagination{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:10px}
.match-reading{display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden;color:var(--ink-2);font-size:16px;line-height:1.5;container-type:inline-size}
.match-reading-head{position:relative;isolation:isolate;padding:16px 28px 18px;border-bottom:1px solid transparent;display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:16px;align-items:center}
.match-reading-head::before{content:"";position:absolute;inset:8px 12px;z-index:-1;border-radius:var(--radius-md);background:var(--bg-muted);pointer-events:none}
.match-reading-head > *{grid-column:1/-1;}
.match-reading-body{min-height:0;overflow:auto;overscroll-behavior:contain;padding:0 28px 28px;scrollbar-gutter:stable}
.match-reading-body:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
.match-reading h1{margin:0 0 8px;font-size:16px;line-height:1.25;letter-spacing:-.02em;font-weight:600;color:var(--ink);text-wrap:balance} /* même taille que « Pourquoi ce match ? » */
.match-reading h2{margin:0 0 8px;font-size:22px;line-height:1.25;letter-spacing:-.02em;color:var(--ink)}
.match-reading h3{margin:0 0 6px;font-size:16px;color:var(--ink)}
.match-reading p{margin:0 0 8px;font-size:16px;line-height:1.5}.match-reading-head> .btn{margin-bottom:14px}
.match-reading-head>.match-reading-subtitle{font-size:22px;color:var(--ink-2)}
.match-reading-company{display:flex;align-items:flex-start;gap:10px;margin-bottom:8px;font-size:16px;color:var(--ink);grid-column:1/-1}
.match-reading-identity{display:flex;flex-direction:column;gap:4px;min-width:0}
.match-reading-location{display:flex;align-items:baseline;gap:6px;font-size:14px;line-height:1.4;color:var(--ink-2)}
.match-reading-location svg{flex:none;align-self:center}
.match-reading-meta{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}
.match-reading-head>p,.match-reading-meta{font-size:14px;color:var(--ink-2)}
.match-reading a{display:inline-flex;align-items:center;gap:7px;color:var(--accent);text-underline-offset:3px}
.match-reading-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;gap:12px 24px;margin-top:12px}
.match-reading-actions{display:flex;flex-wrap:nowrap;gap:12px}
.match-reading .match-source-link{flex:none;gap:12px;min-height:36px;margin-left:auto;font-size:14px;white-space:nowrap;text-decoration:none}
.match-source-link>span:last-of-type{text-decoration:underline;text-underline-offset:3px}
.match-source-logo{display:block;width:auto;height:20px;object-fit:contain}
.match-source-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:var(--radius-sm)}
.match-reading-actions .btn{min-width:0}
.match-reading-toolbar:not([data-density="full"]){gap:10px}
.match-reading-toolbar:not([data-density="full"]) .match-reading-actions{gap:6px}
.match-reading-toolbar:not([data-density="full"]) .btn.icon-only{flex:none}
.match-reading-toolbar:not([data-density="full"]) .match-source-link{font-size:12px;gap:8px;min-height:32px}
.match-reading-toolbar:not([data-density="full"]) .match-source-logo{height:16px}
.match-positive{padding:20px 22px;background:color-mix(in srgb,var(--accent) 6%,var(--surface));border-radius:var(--radius-md);margin:16px 0 20px}
.match-summary header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}
.match-summary header h2{display:flex;align-items:center;gap:10px;font-size:16px}.match-summary header>.match-quality{font-size:14px}
.match-summary>div{display:grid;grid-template-columns:1.2fr 1fr;gap:24px}.match-summary section+section{padding-left:24px;border:0}
.match-summary h3{font-size:14px}.match-summary p{font-size:14px;line-height:1.45}.match-summary>.btn{margin-top:8px}
.match-strengths article h3{font-size:22px;line-height:1.3}.match-strengths article{padding:14px 0;border-bottom:1px solid var(--border)}
.match-strengths article:last-child{border-bottom:0}.match-strengths summary{font-size:13px;color:var(--ink-3);cursor:pointer}.match-strengths blockquote{margin:12px 0;font-size:14px;color:var(--ink-2)}.match-strengths blockquote strong{display:block;margin-bottom:4px;color:var(--ink)}
.match-clarifications{padding:16px 18px;background:var(--support-bg);border-radius:var(--radius-md);margin-top:20px}.match-clarifications h2{font-size:22px}.match-clarifications small{font-size:13px;color:var(--ink-3)}
.match-offer-footer{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:24px;padding:20px;background:var(--bg-muted);border-radius:var(--radius-md);font-size:14px}.match-offer-footer[data-company=false]{grid-template-columns:1fr}.match-offer-footer a{display:flex;margin:6px 0}.match-offer-footer>section+section:not(.match-footer-wide){border-left:1px solid var(--border);padding-left:24px}.match-offer-footer p{font-size:14px;line-height:1.5;margin:4px 0}.match-offer-footer .match-footer-source{display:flex;gap:5px;align-items:baseline;flex-wrap:wrap}.match-offer-footer .match-footer-source a{display:inline-flex;margin:0}.match-footer-wide{grid-column:1/-1;border-top:1px solid var(--border);padding-top:16px}
.match-reading .annonce-sec{padding:14px 0;border-top:0;border-bottom:1px solid var(--border)}.match-reading .annonce-sec p{margin-bottom:0}.match-reading .annonce-sec h6{font-size:16px;color:var(--ink);margin-bottom:8px}.match-reading .annonce-doc p,.match-reading .annonce-doc li{font-size:16px;color:var(--ink-2);line-height:1.5}
.match-reading-empty{display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center}
.match-tiles .kc{flex:none;width:100%;cursor:pointer;}
.match-tiles .kc.selected{background:var(--content-selected-bg);border-color:var(--content-selected-border);}
.match-tiles .kc:has(>.kc-open:focus-visible){outline:2px solid var(--accent);outline-offset:-2px;}
.match-tiles .kc[aria-disabled=true]{cursor:wait;}
.match-tiles .kc-role{-webkit-line-clamp:2;}
.match-card-summary{margin-top:8px;min-width:0;}
.match-card-summary-head{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:4px 12px;}
.match-card-summary .match-quality{font-size:12px;}
.match-card-publication.cve-info{margin:0 0 0 auto;font-size:12px;color:var(--ink-2);white-space:nowrap;}
.match-card-publication .cve-info-tip{top:auto;bottom:calc(100% + 8px);left:auto;right:0;}
.match-card-publication:focus-visible{border-radius:6px;box-shadow:var(--ring-focus);}
.match-card-summary p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;margin:6px 0 0;font-size:13px;line-height:1.45;color:var(--ink-2);}
.match-reading-head:has(.match-reading-subtitle) .match-reading-title{grid-row:auto;}
.match-reading-head > .match-reading-published{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;font-size:13px;}
.match-reading-published .match-publication-tag{max-width:100%;padding:5px 8px;gap:8px;flex-wrap:wrap;font-size:12px;line-height:18px;font-weight:400}
.match-publication-tag time,.match-publication-age{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.match-publication-tag strong{font-weight:600}
.match-publication-tag svg{flex:none}
.match-publication-age{border-left:1px solid var(--border-strong);padding-left:8px}
@container(min-width:800px){
  .match-reading-head:not(:has(.match-reading-subtitle)) .match-reading-title{grid-column:1;}
  .match-reading-head:not(:has(.match-reading-subtitle)) .match-reading-title h1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-wrap:nowrap;}
  .match-reading-head > .match-reading-published{grid-column:2;grid-row:1;flex-wrap:nowrap;}
}
.match-summary{margin:0;padding:20px 0 16px;background:transparent;border:0;border-bottom:1px solid var(--border);border-radius:0;}
.match-list-footer button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media(max-width:1250px){.match-columns{grid-template-columns:minmax(340px,36fr) minmax(0,64fr)}.match-reading-head,.match-reading-body{padding-inline:20px}}
@media(max-width:1000px){.match-summary>div{grid-template-columns:1fr;gap:10px}.match-summary section+section{border:0;padding:0}}
@media(max-width:720px){.match-workspace{overflow:auto}.match-columns{grid-template-columns:1fr;flex:none}.match-list-panel{max-height:480px;border-right:0;border-bottom:1px solid var(--border)}.match-tiles .kc-foot{flex-wrap:wrap}.match-reading{height:max(560px,calc(100dvh - 32px))}.match-reading-empty{padding:20px}.match-reading-title{flex-wrap:wrap;gap:0}.match-reading-title h1{flex-basis:100%}.match-reading-title>.match-quality{margin-bottom:8px}.match-offer-footer{grid-template-columns:1fr}.match-offer-footer>section+section:not(.match-footer-wide){border-left:0;border-top:1px solid var(--border);padding-left:0;padding-top:16px}}
/* Même garde de coque que la bibliothèque : une petite fenêtre ne transforme pas
   la barre latérale en un bloc au-dessus de Match. */
@media(max-width:820px){.os-shell:has(.match-workspace){flex-direction:row}.os-shell:has(.match-workspace)>.side{height:100%;border-bottom:0}}

  .cve-document-footer .cve-document-metadata{position:static}
  .fm-generated-actions.cve-document-footer{margin-top:auto;padding-top:var(--space-3)}

/* DEV-489 : aperçu borné, classes nouvelles pour préserver les snapshots archivés. */
.ct-ci-sub.ct-ci-sub--spaced,.ct-co-meta{display:flex;flex-wrap:wrap;gap:0 var(--space-3);white-space:normal;overflow:visible;text-overflow:clip}
.ct-ci-sub--spaced>span,.ct-co-meta>span{min-width:0;overflow-wrap:anywhere}
.cve-library-result-count--spaced{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);white-space:normal}
.cve-library-result-count--spaced>span{white-space:nowrap}
.cve-candgrp--spaced .cve-candgrp-meta{display:flex;flex-wrap:wrap;gap:0 var(--space-3);white-space:normal}
.cve-candgrp--spaced .cve-candgrp-meta>span{display:block;min-width:0;margin-top:0;white-space:normal;overflow:visible;overflow-wrap:anywhere}
.cve-candgrp--spaced .cve-candgrp-scores{gap:var(--space-4)}
.cve-candgrp--spaced .cve-candgrp-score{display:inline-flex;align-items:baseline;gap:var(--space-2);white-space:nowrap}
.cve-edu--inline .meta-line--spaced{display:flex;flex-wrap:wrap;gap:0 var(--space-3)}
@container document-library (max-width:720px){
 .cve-candgrp--spaced .cve-candgrp-head{flex-wrap:wrap}
 .cve-candgrp--spaced .cve-candgrp-scores{display:flex;flex-wrap:wrap;border:0;padding:0}
}
@container document-library (max-width:480px){.cve-candgrp--spaced .cve-candgrp-id>span{display:flex}}

/* Métadonnées distinctes, sans séparateur ajouté au contenu. */
.meta-items{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:0 var(--space-3);min-width:0;max-width:100%;white-space:normal;vertical-align:baseline}
.meta-items>.meta-items__item{min-width:0;overflow-wrap:anywhere}

.jc-menu-stack .meta-items,.jc-menu-stack .meta-items__item{white-space:normal;overflow:visible;text-overflow:clip}
.ct-task-m:has(>.meta-items){white-space:normal;overflow:visible;text-overflow:clip}

.cve-f3-lang .meta-items{display:inline-flex;margin-top:0}
.cve-f3-lang .meta-items__item{margin-top:0}

/* DEV-494 : recherche flottante, aucune modification de géométrie. */
.sihage-gsearch-field{cursor:text}
.sihage-gsearch-result{background:transparent}
.sihage-gsearch-result:hover{background:var(--hover-bg)}
.sihage-gsearch-result:focus-visible{background:var(--content-hover-bg);outline:2px solid var(--accent);outline-offset:-2px}

/* DEV-497 · avatar personnel commun, distinct des photos documentaires. */
.personal-avatar{position:relative;display:inline-grid;place-items:center;overflow:hidden;border-radius:50%;flex:none;vertical-align:middle;background:var(--bg-2);color:var(--ink-2)}
.personal-avatar>img{position:absolute;max-width:none;display:block;object-fit:fill;border-radius:0}
.personal-avatar>.personal-avatar-photo{inset:0;width:100%;height:100%;object-fit:cover}
:root[data-demo-discreet="on"] .personal-avatar[data-avatar-kind="portrait"]>img,:root[data-demo-discreet="on"] .personal-avatar[data-avatar-kind="photo"]>img{visibility:hidden}
.account-avatar-card{border:1px solid var(--content-border);border-radius:10px;background:var(--content-bg);padding:16px;margin-bottom:14px}
.account-avatar-card h3{font-size:var(--settings-type-title,13px);font-weight:600;margin:0 0 4px;color:var(--ink)}
.account-avatar-card p{font-size:var(--settings-type-body,13px);line-height:1.5;color:var(--ink-3);margin:0 0 12px}
.account-avatar-current{display:flex;align-items:center;gap:14px;min-height:52px;color:var(--ink-2)}
.account-avatar-current>span:not(.personal-avatar){flex:1;font-size:var(--settings-type-body,13px)}
.account-avatar-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:10px 6px;margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.account-avatar-grid>button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)){position:relative;display:flex;flex-direction:column;align-items:center;gap:5px;padding:5px 2px;border:2px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--ink-3);font:inherit;cursor:pointer}
.account-avatar-grid>button:where(.btn,.ui-close-button,.text-link,.card-options-trigger){position:relative}
.account-avatar-grid>button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):hover{background:var(--hover-bg)}
.account-avatar-grid>button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[aria-pressed="true"]{border-color:var(--accent);background:var(--select-bg)}
.account-avatar-grid>button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.account-avatar-grid>button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger)):disabled{cursor:wait;opacity:.5}
.account-avatar-number{font-size:var(--settings-type-meta,13px);font-variant-numeric:tabular-nums}
.account-avatar-selected{position:absolute;right:4px;top:4px;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:var(--accent);color:var(--fg-inverse)}
.account-avatar-card [role="alert"]{margin-top:12px;color:var(--danger-600)}

/* Le portrait détouré laisse apparaître la surface qui l’accueille. */
.personal-avatar[data-avatar-kind="portrait"]{background:transparent}
.me .av:has(>.personal-avatar[data-avatar-kind="portrait"]),.usp-av:has(>.personal-avatar[data-avatar-kind="portrait"]),.vc-carnet-logo-wrap>.logo:has(>.personal-avatar[data-avatar-kind="portrait"]){background:transparent;border-color:transparent;box-shadow:none}

/* Contact support : composition de la modale B validée. */
.support-contact-body{display:flex;flex-direction:column;gap:24px;padding:24px}
.support-contact-fields{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.support-contact-muted{color:var(--ink-3);font-size:13px;line-height:1.5}
.support-contact-message{min-height:170px;resize:vertical;width:100%;line-height:1.6}
.support-contact .ui-window__foot-start{flex:1 1 auto;min-width:0}
.support-contact .ui-window__foot-end{flex-shrink:0}
.support-contact-footer-note{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.support-contact-attachment-head{position:relative;display:flex;align-items:center;gap:7px;margin-bottom:12px;font-size:13px;flex-wrap:wrap}
.support-contact-attachment-head strong{font-weight:500}
.support-contact-attachment-tools{display:flex;align-items:center;gap:8px;margin-left:auto}
.support-contact-file-info{position:relative;color:var(--ink-3)}
.support-contact-file-info summary{list-style:none}
.support-contact-file-info summary:before{content:none}
.support-contact-file-info summary::-webkit-details-marker{display:none}
.support-contact-file-info .smed-menu{left:0;right:auto;width:280px;padding:12px;line-height:1.5;font-weight:400}
.support-contact-attachments .smed-tile{width:168px}
.support-contact-attachments .smed-pic,.support-contact-attachments .smed-ic{height:80px}
.support-contact-attachments .smed-cap{display:flex;flex-direction:column;align-items:flex-start;gap:3px;font-size:12px}
.support-contact-attachments .smed-cap span{max-width:100%}
.support-contact-attachments .smed-x.is-tile{opacity:1}
.support-contact-error{color:var(--danger-500);margin:0}
.support-contact-receipt{margin:auto;max-width:560px;width:100%;text-align:center;line-height:1.6;padding:24px 0}
.support-contact-receipt>svg{color:var(--good-ink);margin-bottom:16px}
.support-contact-receipt h2{margin:0 0 8px;font-size:22px;font-weight:600}
.support-contact-receipt p{margin:0 0 28px}
.support-contact-reply{display:flex;flex-direction:column;gap:4px;margin-bottom:18px;overflow-wrap:anywhere}
.support-contact-reply span{font-size:13px;color:var(--ink-3)}
.support-contact-reply strong{font-weight:500}
.support-contact-summary{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;text-align:left;border-top:1px solid var(--border);padding-top:24px;margin:36px 0 0;font-size:14px}
.support-contact-summary dd{margin:0;overflow-wrap:anywhere}
@media(max-width:640px){.support-contact-fields{grid-template-columns:1fr;gap:16px}.support-contact-message{min-height:160px}.support-contact .ui-window__foot{flex-wrap:wrap}.support-contact .ui-window__foot-end{margin-left:auto;max-width:100%;flex-wrap:wrap;justify-content:flex-end}}

.support-contact-body .field>label{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:500;letter-spacing:normal;text-transform:none}
.support-contact-footer-note strong{font-weight:600}
.support-contact-file-empty.vdp-btn{display:flex;flex-direction:column;justify-content:center;gap:8px;width:100%;min-height:112px;border:1px dashed var(--border);background:var(--content-bg);color:var(--ink-3)}
.support-contact-file-empty strong{font-weight:500;color:var(--ink)}
.support-contact-file-empty span{font-size:12px}

/* Le cadre de l'éditeur porte la matière du champ (bord, fond, halo) mais pas sa hauteur d'une ligne :
   il contient la barre de mise en forme et la zone du message (régression DEV-550, DEV-557). */
.support-contact-editor.input{height:auto;padding:0;overflow:hidden}
.support-contact-editor:focus-within{border-color:var(--accent);box-shadow:var(--ring-focus)}
.support-contact-editor .journal-format-row{min-height:40px;padding:6px 10px;margin:0;border-bottom:1px solid var(--border-soft)}
.support-contact-editor .support-contact-message{display:block;padding:12px;border:0;border-radius:0;background:transparent;color:inherit;font:inherit;line-height:1.6;outline:none;box-shadow:none}

@media(max-width:640px){.support-contact-file-info{position:static}.support-contact-file-info .smed-menu{top:100%;width:min(280px,100%);box-sizing:border-box}.support-contact-editor .journal-format-tools{flex-wrap:wrap}}

/* DEV-534 : partage, sur la modale décision et le bureau documentaire existants. */
.candidature-share-selection{border:0;padding:0;margin:20px 0;display:grid;gap:12px}
.candidature-share-selection legend{font-weight:600;margin-bottom:12px}
.candidature-share-selection label{display:flex;align-items:center;gap:12px;padding:16px;border:1px solid var(--border);border-radius:var(--radius-md)}
.candidature-share-selection .ui-choice{font-size:inherit;color:var(--ink)}
.candidature-share-selection .ui-choice__label{display:flex;align-items:center;gap:12px}
.candidature-share-selection small{display:block;color:var(--ink-3);margin-top:4px}
.candidature-share-link{display:grid;gap:8px;font-weight:600}
.candidature-share-link input{width:100%;min-width:0;padding:12px;border:1px solid var(--border);border-radius:var(--radius-md);font:inherit;font-weight:400;background:var(--bg);color:var(--ink)}
.candidature-share-preview{display:inline-flex;align-items:center;gap:6px;color:var(--ink)}
.public-candidature{height:100dvh;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:var(--bg);color:var(--ink);font-family:var(--font-sans)}
.public-candidature-toolbar,.public-candidature>.public-candidature-message{flex-shrink:0}
.public-candidature-toolbar{position:relative;z-index:2;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;padding:12px 24px;background:var(--surface);border-bottom:1px solid var(--border)}
.public-candidature-toolbar .brand-logo{--brand-wordmark-width:60px}
.public-candidature-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0;justify-self:end}
.public-candidature-actions .document-dossier>.cve-ft-dl{width:auto;min-width:0;max-width:none;padding:8px 12px}
.public-candidature-toolbar .cve-ft-tools{width:auto;max-width:100%;flex-wrap:wrap;white-space:nowrap}
.public-candidature-toolbar .cve-ft-tools :is(.tabbar,.cve-zoom){height:34px;box-sizing:border-box}
.public-candidature-toolbar .cve-ft-tools .tabbar{padding:2px}
.public-candidature-toolbar .cve-ft-tools .tabbar-btn{height:30px;box-sizing:border-box;padding:0 10px;font-size:12px}
.public-candidature-toolbar .document-dossier>.cve-dlmenu{top:calc(100% + 8px);bottom:auto;max-height:calc(100dvh - 96px);overflow-y:auto}
.public-candidature-toolbar .cve-ft-tools button:where(:not(.btn,.ui-close-button,.text-link,.card-options-trigger))[title]:hover::after{top:calc(100% + 8px);bottom:auto}
.public-candidature-message{padding:24px;margin:0;text-align:center}
/* Fond de l’aperçu de la modale B, porté par le cadre fixe hors du défilement. */
.public-candidature-workspace{flex:1 1 auto;isolation:isolate}
.public-candidature .public-candidature-desk{display:flex;flex-direction:column;align-items:flex-start;overscroll-behavior:contain;background:transparent;box-shadow:none}
.public-candidature .public-candidature-desk[hidden]{display:none}
.public-candidature-desk>.public-candidature-message{color:var(--fg-inverse);align-self:stretch}
.public-candidature-paper{min-width:100%;margin:0;overflow:clip;flex:none}
.public-candidature-paper .lte-zoomouter{margin:0 auto}
@media(max-width:980px){
.public-candidature-toolbar{grid-template-columns:1fr auto;gap:12px;padding:12px 16px}
.public-candidature-toolbar .cve-ft-tools{grid-column:1/-1;grid-row:2}
.public-candidature-actions{grid-column:2;grid-row:1}
}
@media(max-width:640px){
.public-candidature-toolbar{padding:10px 12px;gap:10px}
.public-candidature .public-candidature-desk{padding:16px 8px}
}
