/* app.css — feuille de l'application Idonis, écrite contre les rôles de /tokens.css (jamais un hex ici).
   Externalisée pour être partagée avec le site public www (pubsite/) : mêmes composants, mêmes classes. */
  * { box-sizing:border-box; }
  /* overflow-x:clip = pas de défilement horizontal parasite (mobile) SANS casser position:sticky
     (contrairement à overflow:hidden) → garde la carte « sticky » de l'app intacte. */
  html { overflow-x:clip; }
  body { margin:0; font:14px/1.5 var(--font-ui);
         background:var(--surface-0); color:var(--text-primary); max-width:100%; overflow-x:clip;
         -webkit-font-smoothing:antialiased; }
  /* Chiffres TABULAIRES partout (§6.5) : tout chiffre affiché a une chasse fixe → les colonnes s'alignent,
     les montants se comparent d'un coup d'œil. Les blocs financiers passent en plus par --font-num. */
  html { font-variant-numeric:tabular-nums; font-feature-settings:var(--num-features); }
  table, .num, .gauge-val, .credit-score, .kf-v, .valo-range, .sl-amount, .bp-price, .pc-price,
  .auth-stats b, .lp-bignum, .cm-tick { font-family:var(--font-num); font-variant-numeric:tabular-nums; }
  a { color:var(--ink); text-decoration:none; }
  /* focus visible (accessibilité) : anneau accent sur clavier, pas au clic */
  :focus-visible { outline:2px solid var(--ink); outline-offset:2px; border-radius:4px; }
  header { padding:12px 20px; border-bottom:1px solid var(--line); display:flex; background:var(--surface-1);
           align-items:center; gap:14px; flex-wrap:wrap; }
  /* logotype de l'en-tête SEULEMENT (un h1 markdown dans le chat ne doit ni s'aligner en flex ni refuser de se couper) */
  header > h1 { font-size:20px; margin:0; cursor:pointer; white-space:nowrap; display:flex; align-items:center;
       gap:9px; font-weight:700; letter-spacing:-.02em; }
  header > h1 img { width:26px; height:26px; display:block; }
  header > h1 { color:var(--ink); }   /* logotype : le nom seul, en encre (brand §8) */
  .sub { color:var(--text-secondary); font-size:13px; }
  /* recherche globale = bouton loupe → ouvre la MODALE (nom / adresse). Hamburger = menu mobile. */
  #navtoggle { display:none; background:var(--surface-2); border:1px solid var(--line); color:var(--text-primary);
     width:38px; height:38px; border-radius:8px; font-size:18px; cursor:pointer; padding:0;
     align-items:center; justify-content:center; }
  #searchbtn { margin-left:auto; background:var(--surface-2); border:1px solid var(--line); color:var(--text-secondary);
     height:38px; border-radius:10px; font-size:13.5px; cursor:pointer; line-height:1; padding:0 10px 0 12px;
     display:inline-flex; align-items:center; justify-content:flex-start; gap:9px; flex:1 1 240px;
     max-width:440px; min-width:0; font:inherit; font-size:13.5px; text-align:left; }
  #searchbtn .sb-label { flex:1 1 auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  #searchbtn .sb-short { display:none; }
  #searchbtn .sb-kbd { font:inherit; font-size:11px; color:var(--text-secondary); border:1px solid var(--line);
     border-radius:5px; padding:1px 6px; line-height:1.3; }
  #searchbtn:hover, #navtoggle:hover { border-color:var(--ink); }
  #searchbtn:hover { color:var(--text-primary); }
  /* Autocomplétion réutilisable (dropdown sous l'input ; parent = .ac-wrap) */
  .ac-wrap { position:relative; }
  .ac-pop { position:absolute; left:0; right:0; top:calc(100% + 4px); z-index:70; max-height:300px;
     overflow:auto; background:var(--surface-1); border:1px solid var(--line-strong); border-radius:10px;
     }
  .ac-item { padding:8px 12px; cursor:pointer; border-bottom:1px solid var(--line); }
  .ac-item:last-child { border-bottom:none; }
  .ac-item.on { background:color-mix(in srgb, var(--ink) 12%, transparent); }
  .ac-main { font-size:14px; color:var(--text-primary); overflow-wrap:anywhere; display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
  .ac-sub { font-size:12px; color:var(--text-secondary); }
  .ac-ico { flex:0 0 auto; font-size:13px; opacity:.85; }
  .ac-note { padding:10px 12px; font-size:13px; display:flex; align-items:center; gap:8px; }   /* « recherche… » / « aucun résultat » */
  .ac-pop.ac-busy .ac-item { opacity:.5; transition:opacity .15s; }
  /* Mode INLINE (palette) : la liste vit dans le flux de la carte et défile — plus de dropdown rogné. */
  .ac-pop.ac-inline { position:static; max-height:none; box-shadow:none; border:none; border-radius:0;
     background:transparent; margin-top:6px; overscroll-behavior:contain; }
  .ac-inline .ac-item { padding:10px 10px; border-radius:8px; border-bottom:none; touch-action:pan-y; }
  .ac-inline .ac-item + .ac-item { margin-top:2px; }
  .ac-inline .ac-item.on { background:color-mix(in srgb, var(--ink) 14%, transparent); }
  /* Palette de recherche : ancrée en HAUT (comme toute palette), plein écran sur mobile (100dvh =
     hauteur SANS le clavier) ; la zone de résultats est la seule qui défile. */
  .modal.palette { align-items:flex-start; padding-top:7vh; }
  .modal.palette .searchcard { max-height:min(80vh, 640px); }
  .sm-pane-name { display:flex; flex-direction:column; min-height:0; flex:1 1 auto; }
  .sm-pane[hidden] { display:none !important; }
  .sm-results { flex:1 1 auto; min-height:0; overflow-y:auto; overflow-x:hidden; margin:4px -6px 0; padding:0 6px;
     scrollbar-width:thin; scrollbar-color:var(--line) transparent; -webkit-overflow-scrolling:touch; }
  .sm-field { position:relative; }
  .sm-field .ic { position:absolute; left:13px; top:50%; transform:translateY(-50%); color:var(--text-secondary); pointer-events:none; }
  .sm-field input { padding-left:40px !important; }
  .sm-field input::-webkit-search-cancel-button { -webkit-appearance:none; }
  .sm-close { margin-left:auto; background:none; border:none; color:var(--text-secondary); font-size:16px; cursor:pointer; padding:6px 8px; }
  .sm-sec { font-size:12px; margin:12px 0 6px; }
  .sm-tip { font-size:12px; margin:14px 2px 4px; line-height:1.5; }
  .sm-none { margin:14px 2px 0; }
  @media (max-width:560px){
    .modal.palette { padding-top:0; }
    .modal.palette .searchcard { width:100vw; max-width:100vw; height:100dvh; max-height:100dvh; border-radius:0; border:none; padding:12px 14px; }
    .modal.palette .searchcard > .modalbtns { display:none; }
  }
  /* Modale de recherche */
  .searchcard { width:520px; max-width:calc(100vw - 24px); }
  .sm-tabs { display:flex; gap:4px; border-bottom:1px solid var(--line); margin-bottom:14px; }
  .sm-tab { background:none; border:none; border-bottom:2px solid transparent; color:var(--text-secondary);
     padding:8px 14px; font-size:14px; font-weight:600; cursor:pointer; }
  .sm-tab.active { color:var(--ink); border-bottom-color:var(--ink); }
  .sm-pane input { width:100%; box-sizing:border-box; background:var(--surface-2); color:var(--text-primary);
     border:1px solid var(--line); border-radius:8px; padding:11px 13px; font-size:15px; }
  .sm-hint { font-size:12px; margin:8px 2px 0; }
  .sm-qinfo { font-size:12px; margin:6px 2px 0; color:var(--ink); }
  .sm-rad { display:flex; align-items:center; gap:8px; font-size:13px; color:var(--text-secondary); margin-top:12px; }
  .sm-rad input { width:80px; }
  #stats { width:100%; color:var(--text-secondary); font-size:12px; }
  #stats b { color:var(--text-primary); }
  .modebar { display:flex; align-items:center; gap:12px; margin:10px 0 2px; flex-wrap:wrap; }
  .listmeta { margin:2px 0 10px; }
  /* bandeau d'accueil (1re connexion) */
  .welcomebar { display:flex; gap:14px; align-items:flex-start; justify-content:space-between; flex-wrap:wrap;
     background:var(--tint-ink); border:1px solid color-mix(in srgb, var(--ink) 30%, transparent);
     border-radius:12px; padding:14px 16px; margin-bottom:14px; }
  .welcomebar b { font-size:15px; }
  .wchips { display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; }
  .wchip { cursor:pointer; font-size:13px; border:1px solid var(--line); border-radius:999px; padding:5px 12px;
     background:var(--surface-2); color:var(--text-primary); } .wchip:hover { border-color:var(--ink); color:var(--ink); }
  .wchip.on { border-color:var(--ink); color:var(--ink); background:color-mix(in srgb, var(--ink) 10%, transparent); }
  /* checklist « Bien démarrer » (dashboard) : progression + étapes cochées côté serveur */
  .welcomebar.onboard { margin:0 0 18px; }
  .ob-bar { height:6px; background:var(--line); border-radius:3px; margin:9px 0 11px; overflow:hidden; max-width:420px; }
  .ob-bar div { height:100%; background:var(--ink); transition:width .4s; }
  .ob-steps { display:flex; flex-wrap:wrap; gap:8px; }
  .ob-step { display:inline-flex; align-items:center; gap:7px; font-size:13px; border:1px solid var(--line);
     border-radius:999px; padding:5px 12px 5px 7px; background:var(--surface-2); color:var(--text-primary); cursor:pointer; }
  .ob-step:hover { border-color:var(--ink); }
  .ob-step.done { opacity:.55; cursor:default; text-decoration:line-through; }
  .ob-check { display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px;
     border-radius:50%; border:1px solid var(--line); font-size:11px; color:var(--status-ok); }
  .ob-step.done .ob-check { border-color:var(--status-ok); background:color-mix(in srgb, var(--status-ok) 12%, transparent); }
  /* cartes personas (état vide du chat) : l'invitation à découvrir les 10 métiers de l'agent */
  .persona-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:9px;
     width:100%; max-width:640px; margin:0 auto; text-align:left; }
  @media (max-width:480px){ .persona-grid { grid-template-columns:1fr; } }
  .persona-card { display:flex; flex-direction:column; gap:4px; background:var(--surface-1);
     border:1px solid var(--line); border-radius:10px; padding:11px 13px; cursor:pointer; color:var(--text-primary);
     text-align:left; }
  .persona-card { transition:border-color .15s; }
  .persona-card:hover { border-color:var(--ink); }
  .persona-card .pc-ic { font-size:17px; }
  .persona-card .pc-n { font-weight:600; font-size:13px; }
  .persona-card .pc-d { font-size:11.5px; color:var(--text-secondary); line-height:1.35; }
  /* presets explorer : screenings-types en un clic */
  .preset-chips { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:12px; }
  .preset-chip { font-size:12.5px; border:1px solid var(--line); border-radius:999px; padding:5px 12px;
     background:var(--surface-1); color:var(--text-primary); cursor:pointer; }
  .preset-chip:hover { border-color:var(--ink); color:var(--ink); }
  /* toast éphémère */
  #toast { position:fixed; left:50%; bottom:24px; transform:translateX(-50%) translateY(14px);
     background:var(--surface-1); border:1px solid var(--ink); color:var(--text-primary); padding:11px 18px; border-radius:10px;
     font-size:13px; z-index:1200; opacity:0; pointer-events:none;
     transition:opacity .25s ease, transform .25s ease; }
  #toast.show { opacity:1; transform:translateX(-50%) translateY(0); }
  .modetoggle { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
  .modetoggle button { background:var(--surface-2); color:var(--text-secondary); border:none; padding:6px 12px; font-size:13px; cursor:pointer; }
  .modetoggle button.on { background:var(--ink); color:var(--text-on-ink); font-weight:600; }
  .notidx { font-size:10px; color:var(--text-secondary); border:1px solid var(--line); border-radius:8px; padding:0 5px; vertical-align:1px; white-space:nowrap; }
  .notidx.err { color:var(--text-on-ink); background:var(--status-critical); border-color:var(--status-critical); }
  /* ligne vérifiée mais sans rien d'exploitable → grisée (mais toujours cliquable) */
  tbody tr.dim td { color:var(--text-secondary); opacity:.7; }
  tbody tr.dim:hover td { opacity:1; }
  .rundot { font-size:12px; white-space:nowrap; }
  .rundot.on { color:var(--status-ok); font-weight:600; }
  .rundot.on::before { content:''; display:inline-block; width:8px; height:8px; border-radius:50%;
     background:var(--status-ok); margin-right:6px; vertical-align:0; animation:pulse 1.2s infinite; }
  @keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.25} }
  .pbar { display:inline-block; width:120px; height:7px; background:var(--line); border-radius:4px;
     overflow:hidden; vertical-align:middle; margin-right:6px; }
  .pbar > div { height:100%; background:var(--ink); }
  .playbtn { background:none; border:1px solid color-mix(in srgb, var(--status-ok) 50%, transparent); color:var(--status-ok); border-radius:6px;
     padding:0 7px; font-size:12px; line-height:18px; cursor:pointer; }
  .playbtn:hover { background:color-mix(in srgb, var(--status-ok) 14%, transparent); } .playbtn:disabled { opacity:.6; cursor:default; }
  .scrape { display:flex; gap:8px; flex-wrap:wrap; margin-top:6px; }
  .sc { font-size:11px; padding:2px 8px; border-radius:10px; border:1px solid var(--line); white-space:nowrap; }
  .sc.ok { color:var(--status-ok); border-color:color-mix(in srgb, var(--status-ok) 40%, transparent); background:color-mix(in srgb, var(--status-ok) 8%, transparent); }
  .sc.no { color:var(--text-secondary); }
  .sc.warn { color:var(--text-on-ink); background:var(--status-watch); border-color:var(--status-watch); }
  .sc.err { color:var(--text-on-ink); background:var(--status-critical); border-color:var(--status-critical); }
  .liico { display:inline-block; background:var(--ext-linkedin); color:var(--text-on-ink); font-weight:700; font-size:10px;
     line-height:14px; padding:0 4px; border-radius:3px; text-decoration:none; vertical-align:1px; }
  .liico:hover { filter:brightness(1.15); }
  .techlink { color:var(--text-secondary); font-size:12px; text-decoration:none; white-space:nowrap; display:none; }
  .techlink:hover { color:var(--ink); }
  #userbox { position:relative; font-size:12px; white-space:nowrap; }
  /* CTA d'en-tête « Passer Pro » (Free) + cadenas de formule */
  .up-chip { display:inline-flex; align-items:center; gap:6px; background:var(--ink); color:var(--text-on-ink); border:0; border-radius:20px;
     padding:6px 12px; font-size:12.5px; font-weight:700; cursor:pointer; white-space:nowrap; margin-right:8px; }
  .up-chip .ic { width:13px; height:13px; }
  .lock-card { border-style:dashed; }
  .persona-card.pc-lock { border-style:dashed; opacity:.85; } .persona-card.pc-lock .pc-ic .ic { width:22px; height:22px; }
  .pl-note { display:flex; flex-wrap:wrap; gap:6px; align-items:center; font-size:12px; color:var(--text-secondary); margin:8px 0 0; }
  @media (max-width:620px){ .up-chip span { display:none; } }
  #userchip { background:none; border:1px solid var(--line); border-radius:50%; padding:3px;
     cursor:pointer; display:inline-flex; line-height:0; }
  #userchip:hover { border-color:var(--ink); }
  .uava { display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px;
     border-radius:50%; background:var(--ink); color:var(--text-on-ink); font-size:11px; font-weight:700; }
  .umhead { padding:8px 12px; font-size:13px; font-weight:600; color:var(--text-primary); }
  .usermenu { position:absolute; right:0; top:calc(100% + 6px); min-width:230px; max-width:calc(100vw - 16px);
     background:var(--surface-1);
     border:1px solid var(--line-strong); border-radius:10px; padding:6px;
     display:none; z-index:1050; }
  .usermenu.show { display:block; }
  .usermenu a { display:block; padding:8px 10px; border-radius:6px; color:var(--text-primary); text-decoration:none; font-size:13px; }
  .usermenu a:hover { background:var(--surface-2); color:var(--ink); }
  .umsep { height:1px; background:var(--line); margin:5px 4px; }
  /* écran de connexion */
  /* Responsive (fondateur 28/09 : « page inutilisable ») : la carte s'élargit (≤ 440 px), l'écran DÉFILE quand
     le formulaire dépasse la hauteur (le haut était coupé), et la case à cocher n'hérite plus du width:100%. */
  #login { position:fixed; inset:0; background:var(--surface-2); display:none; align-items:flex-start;
     justify-content:center; z-index:1000; overflow-y:auto; padding:24px 16px; box-sizing:border-box; }
  #login.show { display:flex; }
  #login .authcard { background:var(--surface-1); border:1px solid var(--line); border-radius:12px;
     padding:30px 28px; width:min(440px, 100%); box-sizing:border-box; margin:auto; }
  #login input[type=checkbox], #terms-gate input[type=checkbox] { width:auto; padding:0; }
  @media (max-width:480px){ #login { padding:0; } #login .authcard { border-radius:0; border:0; min-height:100%; padding:24px 20px; } }
  #login h2 { margin:0 0 4px; font-size:22px; font-weight:800; letter-spacing:-.02em; }
  #login h2 { color:var(--ink); }
  #login p.sub { margin:0 0 20px; }
  /* la carte d'auth vend : promesse + stats réelles du registre */
  .auth-value { margin:2px 0 10px; font-size:12.5px; color:var(--text-secondary); line-height:1.45; }
  .auth-site { margin:0 0 12px; font-size:12px; } .auth-site a { color:var(--text-secondary); } .auth-site a:hover { color:var(--ink); }
  .auth-stats { display:flex; gap:14px; font-size:11.5px; color:var(--text-secondary); margin-bottom:14px;
     padding-bottom:14px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
  .auth-stats b { color:var(--text-primary); font-size:14px; display:block; }
  /* skeleton loaders : pulsation discrète à la place des « chargement… » texte (pas de reflet dégradé, §6.5) */
  .skel { position:relative; overflow:hidden; background:var(--line); border-radius:6px; min-height:14px; }
  .skel { animation:skel 1.4s ease-in-out infinite; }
  @keyframes skel { 50% { opacity:.45; } }
  .skel-row { height:15px; margin:9px 0; } .skel-row.w60 { width:60%; } .skel-row.w80 { width:80%; }
  #login label { display:block; font-size:12px; color:var(--text-secondary); margin:12px 0 4px; }
  #login input { width:100%; box-sizing:border-box; background:var(--surface-2); color:var(--text-primary);
     border:1px solid var(--line); border-radius:6px; padding:9px 11px; font-size:14px; }
  #login button[type=submit] { width:100%; margin-top:20px; background:var(--ink); color:var(--text-on-ink); border:none;
     border-radius:6px; padding:10px; font-size:14px; font-weight:600; cursor:pointer; }
  #login button[type=submit]:hover { filter:brightness(1.1); }
  #login button[type=submit]:disabled { opacity:.5; cursor:default; }
  #login .err { color:var(--status-critical); font-size:12px; margin-top:12px; min-height:14px; }
  #login .okmsg { color:var(--status-ok); font-size:13px; margin-top:12px; }
  /* envoi réussi : la carte ne montre plus QUE ça (fondateur 06/10) */
  .auth-sent { text-align:center; padding:18px 0 4px; }
  .auth-sent-ico { width:64px; height:64px; margin:0 auto 14px; border-radius:50%; display:flex; align-items:center; justify-content:center;
     background:color-mix(in srgb, var(--status-ok) 14%, transparent); }
  .auth-sent-ico svg { width:34px; height:34px; fill:none; stroke:var(--status-ok); stroke-width:2.6; stroke-linecap:round; stroke-linejoin:round; }
  .auth-sent h3 { margin:0 0 8px; font-size:19px; color:var(--text-primary); }
  .auth-sent p { margin:0 0 10px; font-size:14px; line-height:1.5; color:var(--text-secondary); }
  .auth-sent p b { color:var(--text-primary); overflow-wrap:anywhere; }
  .auth-sent .auth-sent-done { color:var(--text-primary); font-weight:600; }
  .auth-sent .auth-sent-back { display:block; text-decoration:none; text-align:center; margin:16px 0 14px; padding:11px; box-sizing:border-box; }
  .auth-sent p.small { font-size:12px; }
  .authlinks { display:flex; justify-content:space-between; gap:10px; margin-top:16px; flex-wrap:wrap; }
  .authlinks a { font-size:12px; color:var(--text-secondary); } .authlinks a:hover { color:var(--ink); }
  /* modale générique (édition compte) */
  .modal { position:fixed; inset:0; background:var(--overlay); display:none; align-items:center;
     justify-content:center; z-index:1100; }
  .modal.show { display:flex; }
  .ag-launch { width:min(560px, 92vw); } .ag-launch label { margin:10px 0 3px; } .ag-launch label .muted { display:block; font-size:11.5px; margin-top:3px; }
  .ag-launch label.chk { display:flex; gap:8px; align-items:flex-start; } .ag-launch label.chk input { width:auto; margin-top:3px; }
  .ag-metrics { font-size:12.5px; }
  .modal form { background:var(--surface-1); border:1px solid var(--line); border-radius:12px;
     padding:24px 26px; width:340px; }
  .modal h3 { margin:0 0 14px; font-size:18px; }
  .modal label { display:block; font-size:12px; color:var(--text-secondary); margin:10px 0 3px; }
  /* `background-color` et non `background` : le raccourci effacerait le chevron des select (thème, :where(select)). */
  .modal input, .modal select { width:100%; box-sizing:border-box; background-color:var(--surface-2); color:var(--text-primary);
     border:1px solid var(--line); border-radius:6px; padding:8px 10px; font-size:14px; }
  .modal select { padding-right:30px; }
  .modal input:disabled { color:var(--text-secondary); }
  .modal .err { color:var(--status-critical); font-size:12px; margin-top:10px; min-height:14px; }
  .modalbtns { display:flex; gap:8px; justify-content:flex-end; margin-top:16px; }
  /* Confirmation d'un geste destructif (uiConfirm) : le bouton d'action porte la couleur du risque,
     jamais l'encre neutre — on ne doit pas pouvoir le confondre avec « Annuler ». */
  .cf-body { font-size:13.5px; line-height:1.5; } .cf-body p { margin:0 0 8px; }
  button.btn-danger { background:var(--status-critical); color:var(--text-on-ink); border:1px solid var(--status-critical); }
  @media (hover:hover){ button.btn-danger:hover { background:color-mix(in srgb, var(--status-critical) 85%, black); } }
  /* MODALES (retour fondateur 15/09) : largeur qui suit l'écran — étroite sur mobile, confortable sur
     laptop (760 px), large pour les modales de LECTURE (`.reading` : score, indicateur, valorisation,
     format & source, gouvernance, dépôts, estimations, usage : 980 px) ; barres de défilement fines ;
     jamais de défilement horizontal (le contenu se replie). */
  .agentcard { background:var(--surface-1); border:1px solid var(--line); border-radius:12px;
     padding:22px 24px; width:min(92vw, 560px); display:flex; flex-direction:column; max-height:calc(100vh - 40px); overflow:hidden; }
  @media (min-width:900px){
    .agentcard { width:min(90vw, 760px); padding:26px 30px; }
    .agentcard.reading { width:min(92vw, 980px); }
    .agentcard.reading h3 { font-size:20px; }
  }
  .agentcard h3 { margin:0 0 10px; font-size:18px; }
  /* zone défilante : le corps scrolle au lieu de déborder de la modale — barres fines, pas d'horizontal */
  #usage_body, #mi_body, #credit_body, .agentlist, .agentcard > div[id$="_body"] {
     overflow-y:auto; overflow-x:hidden; min-height:0; flex:1 1 auto; overflow-wrap:anywhere;
     scrollbar-width:thin; scrollbar-color:var(--line) transparent; padding-right:4px; }
  .agentcard ::-webkit-scrollbar { width:8px; height:8px; }
  .agentcard ::-webkit-scrollbar-thumb { background:var(--line); border-radius:4px; }
  .agentcard ::-webkit-scrollbar-track { background:transparent; }
  .agentcard table { max-width:100%; }
  .agentcard pre, .agentcard .mono { white-space:pre-wrap; overflow-wrap:anywhere; }
  .agentusage { flex:none; margin-top:4px; }
  .agentusage-in { font-size:12px; color:var(--text-secondary); background:var(--surface-2); border:1px solid var(--line);
     border-radius:8px; padding:8px 11px; }
  /* score crédit (jauge) */
  .creditcard { padding:14px 18px; }
  .credit-head { display:flex; align-items:center; justify-content:space-between; gap:12px; }
  .credit-title { font-size:14px; font-weight:600; color:var(--text-primary); }
  .credit-score { font-size:26px; font-weight:800; line-height:1; }
  .credit-score .credit-max { font-size:14px; font-weight:600; color:var(--text-secondary); }
  .cg-track { margin:10px 0 0; height:9px; border-radius:5px; background:var(--surface-2); border:1px solid var(--line); overflow:hidden; }
  .cg-fill { height:100%; border-radius:5px; transition:width .4s; }
  /* Jauge « compteur de voiture » : demi-anneau rouge→vert + aiguille (cf. _creditGauge) */
  /* ── JAUGE DU SCORE — l'objet visuel de la marque (fiche, démo, modale, plus tard partout).
     Un arc qui SE DESSINE de 0 au score sur une piste papier ; sa couleur suit une échelle DIVERGENTE
     fragile → à surveiller → solide (rouge → ocre de marque → vert, §6.4 : deux teintes + pivot). Ce dégradé
     encode l'échelle, il n'est pas décoratif — déviation assumée du « pas de dégradés » de §6.5, consignée
     dans todo/rebrand-identite-visuelle.md. Les deux graduations = les seuils PUBLIÉS du verdict (0,33 · 0,66).
     Plus d'aiguille de compteur : un repère au bout de l'arc, le chiffre au centre. Motion réduite respectée. */
  .gauge { position:relative; width:220px; max-width:100%; margin:12px auto 6px; }
  .gauge svg { display:block; width:100%; height:auto; overflow:visible; }
  .gauge-track { fill:none; stroke-width:14; stroke-linecap:round; opacity:.18; }   /* l'échelle entière, en filigrane */
  .gauge-fill  { fill:none; stroke-width:14; stroke-linecap:round; stroke-dasharray:var(--L); stroke-dashoffset:var(--off);
     animation:gaugeDraw 1.1s cubic-bezier(.22,.8,.25,1) both; }
  @keyframes gaugeDraw { from { stroke-dashoffset:var(--L); } }
  .gauge-tick { stroke:var(--line-strong); stroke-width:2; stroke-linecap:round; }
  .gauge-mark { fill:var(--surface-1); stroke-width:3.5; transform-box:fill-box; transform-origin:center;
     animation:gaugeMark .45s cubic-bezier(.34,1.5,.6,1) 1s both; }
  @keyframes gaugeMark { from { opacity:0; transform:scale(.2); } }
  .gauge-val { position:absolute; left:0; right:0; bottom:2px; text-align:center;
     font-size:40px; font-weight:800; line-height:1; letter-spacing:-.03em;
     animation:gaugeVal .5s ease-out both; }
  @keyframes gaugeVal { from { opacity:0; transform:translateY(6px); } }
  .gauge-val .gauge-max { font-size:15px; font-weight:600; color:var(--text-secondary); letter-spacing:0; margin-left:2px; }
  @media (prefers-reduced-motion:reduce){ .gauge-fill, .gauge-mark, .gauge-val { animation:none; } }
  /* la carte du score porte la couleur de son verdict, à peine (5 %) : elle se distingue des autres cartes */
  .creditcard.v-solid   { background:color-mix(in srgb, var(--status-ok) 5%, var(--surface-1)); border-color:color-mix(in srgb, var(--status-ok) 28%, var(--line)); }
  .creditcard.v-watch   { background:color-mix(in srgb, var(--accent) 6%, var(--surface-1)); border-color:color-mix(in srgb, var(--accent) 32%, var(--line)); }
  .creditcard.v-fragile { background:color-mix(in srgb, var(--status-critical) 5%, var(--surface-1)); border-color:color-mix(in srgb, var(--status-critical) 28%, var(--line)); }
  /* Onglet Synthèse : descriptif (gauche, ≈col8) + jauge crédit (droite, ≈col4) */
  /* minmax(0,…) partout : sans ça, une colonne refuse de descendre sous la min-width de son contenu
     (table, graphe) → débordement horizontal sur petit écran. Mobile = 1 colonne pleine largeur. */
  /* Tête de synthèse (plafond-fournisseur § 11) : score | encours fournisseur, 50/50 ≥ 760 px, empilés en mobile
     (l'encours SOUS le score). Les deux cartes se tiennent au même sommet et à la même hauteur. */
  .synth-top { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; align-items:stretch; }
  @media (min-width:760px){ .synth-top { grid-template-columns:minmax(0,1fr) minmax(0,1fr); } }
  @media (min-width:1100px){ .synth-top.n3 { grid-template-columns:repeat(3, minmax(0,1fr)); } }
  @media (min-width:1280px){ .synth-top.n4 { grid-template-columns:repeat(4, minmax(0,1fr)); } }
  .synth-top { margin-bottom:14px; }     /* pas de collision avec la carte suivante (retour fondateur 15/09) */
  .synth-top > .card { margin:0; }
  /* CHIFFRES CLÉS (synthèse) : tuiles du dernier exercice, YoY, ⚡ si estimé — le front lit trend[0]/[1] */
  .synth-mid { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; margin-bottom:14px; }
  @media (min-width:1000px){ .synth-mid { grid-template-columns:minmax(0,1fr) minmax(0,1fr); } }
  .synth-mid > .card { margin:0; }
  .kf-strip { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px; }
  @media (min-width:600px){ .kf-strip { grid-template-columns:repeat(4, minmax(0,1fr)); } }
  @media (min-width:1000px){ .kf-strip { grid-template-columns:repeat(3, minmax(0,1fr)); } }
  .kf { background:var(--surface-1); border:1px solid var(--line); border-radius:10px; padding:10px 12px; cursor:pointer; }
  .kf:hover { border-color:var(--ink); }
  .kf .kf-l { font-size:11px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.03em; }
  .kf .kf-v { font-size:16px; font-weight:700; margin-top:3px; white-space:nowrap; }
  .kf .kf-y { font-size:11px; margin-top:2px; }
  .kf-head { font-size:12px; color:var(--text-secondary); margin:0 0 6px; display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px; }
  /* squelette du positionnement pendant le calcul (l'encart existe tout de suite, il se remplit) */
  .pos-skel { display:flex; align-items:center; gap:10px; color:var(--text-secondary); font-size:13px; padding:6px 0; }
  .spin { display:inline-block; vertical-align:middle; flex:none; box-sizing:border-box; width:14px; height:14px; border:2px solid var(--line); border-top-color:var(--ink); border-radius:50%; animation:spin .9s linear infinite; }   /* inline-block : un <span> ignorait sa taille (fondateur 29/09) */
  @keyframes spin { to { transform:rotate(360deg); } }
  /* VALORISATION indicative (rachat) — carte synthèse + ligne Finances + modale (core/valuation via /valuation) */
  .valo-range { font-size:22px; font-weight:800; line-height:1.1; margin-top:8px; }
  .valo-central { font-size:13px; color:var(--text-secondary); margin-top:2px; }
  .valo-line { font-size:13px; margin-top:8px; }
  .valo-alert { font-size:12px; color:var(--status-watch); margin-top:8px; }
  .valo-fin { display:flex; flex-wrap:wrap; gap:6px 18px; align-items:center; font-size:13px; padding:10px 16px; }
  .valo-fin b { font-weight:700; }
  .valo-steps { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:5px 14px; font-size:13px; margin:6px 0 10px; }
  .valo-steps > div { overflow-wrap:normal; min-width:0; }        /* les libellés ne se coupent pas lettre à lettre */
  .valo-steps .v { font-weight:600; text-align:right; white-space:nowrap; }
  @media (max-width:640px){                                          /* mobile : libellé au-dessus, valeur en dessous à droite */
    .valo-steps { grid-template-columns:minmax(0,1fr); gap:2px; }
    .valo-steps .v { text-align:right; white-space:normal; padding-bottom:6px; border-bottom:1px solid var(--line); }
    .valo-steps .v.sum { border-bottom:none; }
    .valo-steps .sub { display:block; }
  }
  .valo-steps .sum { border-top:1px solid var(--line); padding-top:5px; }
  .valo-steps .sub { color:var(--text-secondary); font-size:12px; }
  table.valo-m { width:100%; table-layout:fixed; border-collapse:collapse; font-size:13px; margin:6px 0 10px; }
  table.valo-m th:nth-child(2), table.valo-m td.num { width:110px; }
  table.valo-m th:nth-child(3), table.valo-m td:nth-child(3) { width:130px; }
  table.valo-m th, table.valo-m td { white-space:normal; overflow-wrap:anywhere; }   /* le td global est nowrap */
  table.valo-m th, table.valo-m td { padding:5px 8px; border-bottom:1px solid var(--line); text-align:left; vertical-align:top; }
  table.valo-m td.num { text-align:right; white-space:nowrap; font-weight:600; }
  table.valo-m tr.off td { color:var(--text-secondary); font-weight:400; }
  .valo-why { font-size:12px; color:var(--text-secondary); }
  .valo-caveats li { font-size:12px; color:var(--text-secondary); margin:2px 0; }
  .valo-teaser { width:100%; }
  .sl-main { display:flex; align-items:baseline; gap:10px; margin-top:8px; flex-wrap:wrap; }
  .sl-amount { font-size:26px; font-weight:800; line-height:1; }
  .sl-amount.sl-zero { color:var(--status-critical); }
  .sl-sub { font-size:13px; color:var(--text-secondary); }
  .sl-second { margin-top:6px; font-size:13px; color:var(--text-primary); }
  .sl-asof { margin-top:8px; font-size:12px; color:var(--text-secondary); }
  .sl-na { margin-top:10px; font-size:13px; color:var(--text-secondary); }
  .sl-cv { margin-top:8px; font-size:12px; color:var(--text-secondary); display:flex; flex-direction:column; gap:3px; }
  .sl-form { font-family:ui-monospace, Menlo, monospace; font-size:12px; background:var(--surface-2); border:1px solid var(--line); border-radius:6px; padding:8px 10px; margin:8px 0; }
  .sl-steps { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:6px 14px; font-size:13px; margin:8px 0; }
  .sl-steps .sl-v { font-weight:600; text-align:right; white-space:nowrap; }
  .sl-contrib { width:100%; min-width:0; border-collapse:collapse; font-size:12px; margin-top:6px; table-layout:fixed; }  /* min-width:0 : la règle globale `table{min-width:640px}` déborderait la modale */
  .sl-contrib td { padding:3px 6px; border-top:1px solid var(--line); overflow-wrap:anywhere; white-space:normal; vertical-align:top; }
  .sl-contrib td.num { text-align:right; }
  .sl-contrib col.c-lbl { width:44%; } .sl-contrib col.c-val { width:16%; } .sl-contrib col.c-bin { width:26%; } .sl-contrib col.c-woe { width:14%; }
  .sl-contrib .pos { color:var(--status-critical); } .sl-contrib .neg { color:var(--status-ok); }
  .synth-grid { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; align-items:start; }
  @media (min-width:760px){ .synth-grid { grid-template-columns:minmax(0,2fr) minmax(0,1fr); } }
  .synth-left { display:flex; flex-direction:column; gap:14px; }   /* « en bref » puis identité, empilés */
  /* Onglet Finances : tableau (gauche) + graphique (droite) côte à côte ; minmax(0,…) = table scrollable */
  .fin-grid { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; align-items:start; }
  /* Finances : tableau pleine largeur (tous les exercices visibles), graphe EN DESSOUS — ne plus
     brider le tableau à ~4 ans à côté du graphe (incohérent avec les ratios 9 ans). */
  .blurb p { color:var(--text-primary); font-size:14px; }
  /* N° d'entreprise copiable en 1 clic */
  .copynum { cursor:pointer; border-bottom:1px dashed var(--line); padding:0 2px; border-radius:3px; }
  .copynum:hover { color:var(--ink); border-bottom-color:var(--ink); }
  .copynum .copyico { font-size:11px; opacity:.6; }
  /* Liste clé/valeur (onglet Information entreprise) — div/grid (PAS de table avec display:block,
     fragile sur Android : la valeur disparaissait). Desktop = 2 colonnes ; mobile = empilé. */
  .kvlist { display:flex; flex-direction:column; }
  .kvrow { display:grid; grid-template-columns:minmax(0,38%) minmax(0,1fr); gap:12px;
     padding:7px 0; border-bottom:1px solid var(--line); }
  .kvrow:last-child { border-bottom:none; }
  .kvk { color:var(--text-secondary); font-size:14px; overflow-wrap:anywhere; }
  .kvv { color:var(--text-primary); font-size:14px; overflow-wrap:anywhere; }
  @media (max-width:560px){
    .kvrow { grid-template-columns:1fr; gap:2px; padding:9px 0; }
    .kvk { font-size:11px; text-transform:uppercase; letter-spacing:.03em; }
  }
  .credit-cap { margin-top:10px; font-size:13px; color:var(--text-primary); }
  /* Verdict décision-led : badge coloré (Solide/À surveiller/Fragile · grade) + notes */
  .verdict-badge { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em;
     border-radius:999px; padding:4px 11px; white-space:nowrap; color:var(--text-on-ink); border:1px solid transparent; }
  .verdict-badge.v-solid   { background:var(--status-ok); }
  .verdict-badge.v-watch   { background:var(--status-watch); }
  .verdict-badge.v-fragile { background:var(--status-critical); }
  .verdict-badge.v-na { color:var(--text-secondary); background:color-mix(in srgb, var(--text-secondary) 12%, transparent); border:1px solid var(--line); }
  /* Entité régulée : score non applicable (14.4) — état ASSUMÉ, pas une erreur */
  .credit-na { margin-top:12px; font-size:13px; line-height:1.4; color:var(--text-secondary); }
  /* Explication du PLAFOND, au point de dissonance (sous le badge) : la lettre ne suit pas la jauge
     parce qu'un cap prime les ratios. Ton neutre — ce n'est pas une alerte de plus, c'est la clé de
     lecture. Les ⚠ de détresse gardent leur place sous la jauge (décision 21/07). */
  .credit-caphint { margin-top:8px; font-size:12px; line-height:1.35; color:var(--text-secondary);
     border-left:2px solid var(--line); padding:2px 0 2px 8px; }
  .credit-asof { display:block; margin-top:8px; font-size:12px; color:var(--text-secondary); text-align:center; }
  .credit-note { margin-top:8px; font-size:12px; line-height:1.35; border-radius:6px; padding:6px 8px; }
  .credit-distress { color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 10%, transparent); border:1px solid color-mix(in srgb, var(--status-critical) 30%, transparent); }
  .credit-conf { color:var(--status-watch); background:color-mix(in srgb, var(--status-watch) 8%, transparent); border:1px solid color-mix(in srgb, var(--status-watch) 25%, transparent); }
  /* Réseau de risque : dirigeants → sociétés en détresse. Certifié = rouge (assertable), présumé = ambre. */
  .risknet-card .credit-title { display:flex; align-items:center; gap:8px; }
  .risknet-sub { font-size:12px; font-weight:700; letter-spacing:.02em; margin:12px 0 6px;
     display:flex; align-items:center; gap:6px; }
  .risknet-sub.cert { color:var(--status-critical); } .risknet-sub.pres { color:var(--status-watch); }
  .risknet-row { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:7px 9px; border-radius:7px;
     margin-top:5px; font-size:13px; border:1px solid transparent; }
  .risknet-row.cert { background:color-mix(in srgb, var(--status-critical) 8%, transparent); border-color:color-mix(in srgb, var(--status-critical) 28%, transparent); }
  .risknet-row.pres { background:color-mix(in srgb, var(--status-watch) 6%, transparent); border-color:color-mix(in srgb, var(--status-watch) 22%, transparent); }
  .risknet-row a { font-weight:600; }
  .risknet-kind { font-size:10.5px; font-weight:800; text-transform:uppercase; letter-spacing:.04em;
     border-radius:999px; padding:2px 8px; white-space:nowrap; color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 14%, transparent);
     border:1px solid color-mix(in srgb, var(--status-critical) 40%, transparent); }
  .risknet-row.pres .risknet-kind { color:var(--status-watch); background:color-mix(in srgb, var(--status-watch) 14%, transparent); border-color:color-mix(in srgb, var(--status-watch) 40%, transparent); }
  .risknet-via { color:var(--text-secondary); font-size:12px; }
  .risknet-count { font-size:11px; font-weight:800; border-radius:999px; padding:1px 8px; color:var(--status-critical);
     background:color-mix(in srgb, var(--status-critical) 14%, transparent); border:1px solid color-mix(in srgb, var(--status-critical) 40%, transparent); }
  /* Compteur NEUTRE (lien isolé / présumé) : pas de rouge alarmant, réservé au dirigeant sériel. */
  .risknet-count.soft { color:var(--text-secondary); background:color-mix(in srgb, var(--text-secondary) 14%, transparent); border-color:color-mix(in srgb, var(--text-secondary) 35%, transparent); }
  /* Bandeau d'alerte en tête de fiche personne : sociétés dirigées en détresse. */
  .distress-banner { display:flex; align-items:center; gap:10px; margin-top:12px; padding:10px 12px;
     border-radius:8px; color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 10%, transparent); border:1px solid color-mix(in srgb, var(--status-critical) 35%, transparent);
     font-size:13px; font-weight:600; }
  .distress-banner .big { font-size:20px; }
  /* Vue agrégée d'homonymes présumés : bandeau d'avertissement + UN BLOC PAR PERSONNE. */
  .agg-banner { border-left:3px solid var(--status-watch); }
  .agg-banner .agg-head { display:flex; align-items:flex-start; gap:10px; }
  .agg-banner .agg-head .big { font-size:20px; color:var(--status-watch); line-height:1; }
  /* Bloc-personne : en-tête (avatar numéroté coloré + #id + compteurs) puis toutes ses relations. */
  /* Repliable (<details>) : sur un nom à N homonymes, seuls le 1er + les cas en détresse sont ouverts. */
  .person-block { scroll-margin-top:70px; }
  details.person-block > summary { cursor:pointer; list-style:none; }
  details.person-block > summary::-webkit-details-marker { display:none; }
  details.person-block[open] > summary { margin-bottom:10px; }
  .pb-head { display:flex; align-items:center; gap:10px; margin:0 0 10px; }
  .pb-avatar { flex:0 0 auto; width:30px; height:30px; border-radius:50%; display:flex; align-items:center;
     justify-content:center; font-weight:800; font-size:14px; color:var(--text-on-ink); }
  .pb-id { flex:1 1 auto; min-width:0; font-size:14px; line-height:1.3; }
  .pb-id .num { font-size:12px; }
  .pb-counts { font-size:11.5px; margin-top:2px; }
  .pb-head .mini-link { flex:0 0 auto; font-size:11px; color:var(--text-secondary); text-decoration:none;
     border:1px solid var(--line); border-radius:999px; padding:2px 9px; }
  .pb-head .mini-link:hover { color:var(--ink); border-color:var(--ink); }
  .pb-sec { margin-top:12px; }
  .pb-sec:first-child { margin-top:0; }
  .pb-sec-h { font-size:12.5px; font-weight:700; letter-spacing:.02em; margin:0 0 6px; color:var(--text-primary); }
  /* Onglets « une personne à la fois » du graphe (fiche agrégée) : même signalétique que les blocs. */
  .pg-tabs { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 10px; }
  .pg-pill { display:inline-flex; align-items:center; gap:7px; padding:4px 10px 4px 5px; border-radius:999px;
     background:var(--surface-2); border:1px solid var(--line); color:var(--text-secondary); font-size:12px; cursor:pointer; }
  .pg-pill:hover { border-color:var(--ink); color:var(--text-primary); }
  .pg-pill.on { border-color:var(--ink); color:var(--text-primary); background:color-mix(in srgb, var(--ink) 8%, transparent); }
  .pg-pill .pg-dot { width:20px; height:20px; border-radius:50%; display:inline-flex; align-items:center;
     justify-content:center; font-weight:800; font-size:11px; color:var(--text-on-ink); }
  .pg-pill .num { font-size:12px; }
  /* Pastille de détresse inline (tableau des sociétés dirigées, fiche personne). */
  .dpill { font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.03em; border-radius:999px;
     padding:1px 7px; white-space:nowrap; color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 14%, transparent); border:1px solid color-mix(in srgb, var(--status-critical) 40%, transparent);
     margin-left:6px; }
  tr.row-distress td { background:color-mix(in srgb, var(--status-critical) 5%, transparent); }
  .score-tip { margin-top:10px; font-size:12px; line-height:1.45; border-radius:0 6px 6px 0; padding:7px 10px;
     background:var(--tint-accent); color:var(--text-secondary);
     border-left:3px solid var(--accent); display:flex; align-items:center; gap:10px; justify-content:space-between; }
  /* Pro / upsell : tag « Pro », modale offres, liens */
  .pro-tag { font-size:9.5px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; margin-left:5px;
     background:var(--ink); color:var(--text-on-ink); border-radius:4px; padding:1px 5px; vertical-align:1px; }
  .pro-lock { cursor:pointer; opacity:.92; } .pro-lock:hover { opacity:1; }
  .est-teaser { background:var(--surface-1); border:1px dashed color-mix(in srgb, var(--accent) 45%, transparent); color:var(--text-primary);
     border-radius:8px; padding:9px 13px; font-size:13px; cursor:pointer; width:100%; text-align:left; }
  .up-link { color:var(--ink); cursor:pointer; text-decoration:underline; }
  /* Moniteur : renvoi au DOCUMENT officiel quand l'extraction est partielle/absente */
  .mon-doc-cta { font-size:12px; border:1px solid var(--line); border-radius:8px; padding:3px 9px;
     background:var(--surface-2); white-space:nowrap; }
  .mon-doc-cta:hover { border-color:var(--ink); }
  .mon-year { font-size:12px; font-weight:700; color:var(--text-secondary); margin:10px 0 2px; letter-spacing:.03em; }
  /* Actualité & Documents (refonte 11/09) : une entrée par fait — liseré de gravité, date, icône, titre humain,
     chips (objets, personnes, valeurs), bouton source, détail repliable. */
  .ax-head { display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; }
  .ax-search { font-size:12.5px; border:1px solid var(--line); border-radius:8px; padding:5px 10px; background:transparent; color:var(--text-primary); min-width:220px; }
  .wchip.sm { font-size:12px; padding:3px 9px; }
  .ax-list { margin-top:8px; }
  .ax-year { font-size:11.5px; font-weight:700; color:var(--text-secondary); letter-spacing:.06em; margin:14px 0 4px; padding-left:2px; }
  .ax-item { border:1px solid var(--line); border-left:4px solid var(--line); border-radius:10px; margin:6px 0; background:color-mix(in srgb, var(--text-primary) 3%, transparent); }
  .ax-item.sev-distress { border-left-color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 6%, transparent); }
  .ax-item.sev-warn { border-left-color:var(--status-watch); }
  .ax-item.doc-deposit { border-left-color:var(--ink); }
  .ax-item.doc-moniteur { border-left-color:var(--accent); }
  .ax-item > summary { list-style:none; cursor:pointer; }
  .ax-item > summary::-webkit-details-marker { display:none; }
  .ax-item[open] > summary .ax-chev { transform:rotate(180deg); }
  .ax-row { display:grid; grid-template-columns:58px 26px minmax(0,1fr) auto; gap:4px 10px; align-items:start; padding:9px 12px; font-size:13px; }
  .ax-row:hover { background:color-mix(in srgb, var(--text-primary) 3%, transparent); border-radius:10px; }
  .ax-date { display:flex; flex-direction:column; line-height:1.15; font-variant-numeric:tabular-nums; }
  .ax-date b { font-size:12.5px; } .ax-date .muted { font-size:11px; }
  .ax-ico { font-size:16px; line-height:1.2; }
  .ax-main { min-width:0; }
  .ax-type { font-weight:650; font-size:13.5px; margin-right:6px; }
  .ax-chip { display:inline-block; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:middle; font-size:11.5px; border:1px solid var(--line); border-radius:999px; padding:1px 8px; margin:2px 4px 2px 0; color:var(--text-secondary); }
  .ax-chip.neg { color:var(--status-critical); border-color:var(--status-critical); }
  .ax-objet { font-size:12px; margin-top:2px; }
  .ax-sub { display:flex; flex-wrap:wrap; gap:4px 8px; align-items:center; margin-top:5px; font-size:12.5px; }
  .ax-kv { border:1px solid var(--line); border-radius:6px; padding:1px 7px; font-size:12px; }
  .ax-pchip { border:1px solid var(--line); border-radius:999px; padding:1px 8px; font-size:12px; text-decoration:none; color:var(--text-primary); }
  .ax-pchip:hover { border-color:var(--ink); }
  .ax-act { display:flex; align-items:center; gap:8px; white-space:nowrap; justify-self:end; }
  .ax-src { font-size:12px; border:1px solid var(--line); border-radius:8px; padding:3px 9px; text-decoration:none; display:inline-flex; align-items:center; gap:6px; }
  .ax-fmt { font-size:9.5px; font-weight:800; letter-spacing:.04em; border-radius:4px; padding:1px 4px; line-height:1.3; color:var(--text-on-ink); background:var(--text-secondary); }
  .ax-fmt.xbrl, .ax-fmt.xml { background:var(--ink); }
  .ax-fmt.pdf { background:#D7261E; }            /* PDF = rouge Adobe, PARTOUT (un seul composant docBtn) */
  a.ax-src:has(.ax-fmt.pdf) { border-color:#D7261E; color:#D7261E; }   /* le BOUTON PDF entier, rouge Adobe */
  a.ax-src:has(.ax-fmt.pdf):hover { border-color:#D7261E; background:color-mix(in srgb, #D7261E 8%, transparent); }
  .ax-item.ax-flash { box-shadow:0 0 0 2px var(--accent); transition:box-shadow .3s; }
  .ax-goev { font-size:12px; }   /* le format structuré (celui qu'on lit) ressort ; les autres restent neutres */
  .ax-src:hover { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 6%, transparent); }
  .ax-src.sm { padding:1px 6px; font-size:11px; gap:4px; vertical-align:middle; }
  .pdfrow .ax-src { margin-left:auto; }
  .ax-src.off { opacity:.4; pointer-events:none; }
  .ax-chev { color:var(--text-secondary); font-size:12px; transition:transform .15s; }
  .ax-state { font-size:11px; border-radius:6px; padding:1px 6px; border:1px solid var(--line); color:var(--text-secondary); margin-left:4px; }
  .ax-state.warn { color:var(--text-on-ink); background:var(--status-watch); border-color:var(--status-watch); }
  .ax-detail { padding:4px 12px 12px 94px; font-size:12.5px; display:flex; flex-direction:column; gap:5px; border-top:1px dashed var(--line); margin-top:2px; }
  .ax-defs { margin-top:4px; font-size:12px; }
  @media (max-width:640px){ .ax-row { grid-template-columns:52px 22px minmax(0,1fr); } .ax-act { grid-column:3; justify-self:start; flex-wrap:wrap; white-space:normal; gap:6px; } .ax-detail { padding-left:12px; } }
  .ax-row .tl-val { color:var(--text-primary); font-weight:500; }
  .tl-src { font-size:12px; border:1px solid var(--line); border-radius:8px; padding:2px 8px; white-space:nowrap; text-decoration:none; }
  .tl-src:hover { border-color:var(--ink); }
  .tl-src.off { opacity:.45; pointer-events:none; }
  .tl-pchip { border:1px solid var(--line); border-radius:999px; padding:1px 8px; font-size:12px; text-decoration:none; }
  .tl-state { font-size:11px; border-radius:6px; padding:1px 6px; border:1px solid var(--line); color:var(--text-secondary); }
  .tl-state.warn { color:var(--text-on-ink); background:var(--status-watch); border-color:var(--status-watch); }
  /* Publication Moniteur : repli par acte (lisibilité mobile) — le détail ne s'affiche qu'à la demande. */
  .mon-act { padding:8px 0; border-top:1px solid var(--line); }
  .mon-act > summary { cursor:pointer; list-style:none; }
  .mon-act > summary::-webkit-details-marker { display:none; }
  .mon-act:not(.mon-act-plain) > summary::before { content:"▸"; color:var(--text-secondary); margin-right:5px; font-size:11px; }
  .mon-act[open] > summary::before { content:"▾"; }
  /* Section « Textes d'annexe » (dernier bloc) repliée par défaut. */
  .mon-notes > summary { cursor:pointer; list-style:none; }
  .mon-notes > summary::-webkit-details-marker { display:none; }
  .mon-notes > summary::before { content:"▸ "; color:var(--text-secondary); font-weight:400; }
  .mon-notes[open] > summary::before { content:"▾ "; }
  /* carte « Dépôts des comptes » (échéances légales / retards) */
  .fil-row { display:flex; gap:10px; font-size:13px; padding:4px 0; border-top:1px solid var(--line); }
  .fil-row:first-of-type { border-top:0; }
  .fil-row .num { width:40px; }
  .pos { color:var(--status-ok); } .warn-t { color:var(--status-watch); }
  .upgradecard { max-width:440px; }
  .up-plans { margin-top:6px; }
  .up-head, .up-feat, .up-price { display:grid; grid-template-columns:1fr 64px 64px; align-items:center; gap:4px; }
  .up-head { font-weight:700; font-size:12px; color:var(--text-secondary); padding-bottom:6px; border-bottom:1px solid var(--line); }
  .up-col-pro { color:var(--ink); text-align:center; } .up-col-free { text-align:center; }
  .up-feat { font-size:13px; padding:8px 0; border-bottom:1px solid var(--line); }
  .up-feat .up-x, .up-feat .up-v { text-align:center; } .up-feat .up-x { color:var(--text-secondary); }
  .up-feat .up-v { color:var(--status-ok); font-weight:700; }
  .up-feat.hi { background:var(--tint-accent); border-radius:6px; }
  .up-price { padding:12px 0 4px; font-size:14px; } .up-price>div:nth-child(2),.up-price>div:nth-child(3){ text-align:center; }
  .up-cta { width:100%; margin-top:14px; background:var(--ink); color:var(--text-on-ink); border:0; border-radius:8px;
     padding:11px; font-size:14px; font-weight:700; cursor:pointer; }
  .up-note { font-size:11.5px; text-align:center; margin-top:8px; }
  /* Essai Pro : le bouton d'ESSAI est l'action principale quand il est proposé ; « souscrire » passe
     en second plan (on ne vend pas à quelqu'un qui n'a pas encore vu le produit). */
  .up-cta.alt { background:transparent; color:var(--text); border:1px solid var(--line); font-weight:600; margin-top:8px; }
  .trial-card { border-left:3px solid var(--ink); }
  /* ── Accueil du premier accès (/welcome) : une colonne, une action, lisible en 390 px ── */
  .ob-wrap { max-width:560px; margin:0 auto; padding:0 2px; }
  /* ── ACCUEIL v2 (fondateur 02/10) : une question par écran, réponse en un clic, la valeur montrée tout de suite ── */
  .acc-prof { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px 14px; margin:0 0 10px; }
  .acc-prof dt { font-size:11.5px; color:var(--text-secondary); } .acc-prof dd { margin:2px 0 0; font-weight:600; font-size:13.5px; }
  @media (max-width:560px){ .acc-prof { grid-template-columns:1fr 1fr; } }
  .ob2 { padding:22px 24px 26px; margin-top:4vh; }
  .ob2-top { display:grid; grid-template-columns:32px 1fr auto; align-items:center; gap:12px; margin-bottom:22px; }
  .ob2-back { width:32px; height:32px; border-radius:50%; border:1px solid var(--line); background:var(--surface-1); color:var(--ink);
     font-size:20px; line-height:1; padding:0; cursor:pointer; }
  .ob2-prog { display:flex; gap:6px; } .ob2-prog i { flex:1; height:5px; border-radius:3px; background:var(--surface-2); }
  .ob2-prog i.on { background:linear-gradient(90deg, var(--ink), color-mix(in srgb, var(--ink) 70%, var(--accent))); }
  .ob2-skip { font-size:12.5px; color:var(--text-secondary); text-decoration:none; white-space:nowrap; }
  .ob2-skip:hover { color:var(--ink); }
  .ob2-hello { font-size:13.5px; font-weight:600; color:var(--accent-text); margin-bottom:6px; }
  .ob2-q { font-size:clamp(22px,4.4vw,28px); line-height:1.2; letter-spacing:-.02em; margin:0 0 8px; }
  .ob2-why { color:var(--text-secondary); font-size:14px; line-height:1.5; margin:0 0 16px; }
  .ob2-why.small { font-size:12.5px; margin:8px 0 10px; }
  .ob2-input { width:100%; font-size:17px; padding:13px 14px; border-radius:12px; border:1.5px solid var(--line-strong); background:var(--surface-1); }
  .ob2-input:focus { outline:none; border-color:var(--ink); box-shadow:0 0 0 4px var(--ring); }
  .ob2-lbl { display:block; font-size:13px; font-weight:600; margin:4px 0 6px; }
  .ob2-co { display:flex; align-items:center; gap:12px; margin-top:12px; padding:12px 14px; border-radius:12px; border:1px solid var(--line);
     background:var(--surface-2); animation:gaugeVal .25s ease-out both; }
  .ob2-co-l { display:flex; flex-direction:column; min-width:0; flex:1; } .ob2-co-l b { font-size:15px; }
  .ob2-co-l span { font-size:12.5px; color:var(--text-secondary); }
  .ob2-co-g { flex:none; width:40px; height:40px; border-radius:10px; display:inline-flex; align-items:center; justify-content:center;
     font-size:21px; font-weight:800; color:var(--text-on-ink); background:var(--line); }
  .ob2-co-g.gA { background:var(--status-ok); } .ob2-co-g.gB { background:color-mix(in srgb, var(--status-ok) 70%, var(--accent)); }
  .ob2-co-g.gC { background:var(--accent); } .ob2-co-g.gD { background:color-mix(in srgb, var(--accent) 50%, var(--status-critical)); }
  .ob2-co-g.gE { background:var(--status-critical); } .ob2-co-g.none, .ob2-co-g.pending { background:var(--surface-1); color:var(--text-secondary); border:1px solid var(--line); }
  .ob2-ready { font-size:13.5px; color:var(--status-ok); font-weight:600; margin:10px 2px 0; } .ob2-ready.muted { color:var(--text-secondary); font-weight:400; }
  .ob2-foot { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-top:22px; flex-wrap:wrap; }
  .ob2-alt { font-size:13.5px; color:var(--text-secondary); } .ob2-alt.center { display:block; text-align:center; margin-top:12px; }
  .ob2-next[hidden] { display:none; }
  .ob2-opts { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:16px; }
  .ob2-opts.goal { grid-template-columns:1fr; }
  .ob2-opt { display:flex; align-items:center; gap:12px; text-align:left; padding:14px; border-radius:12px; cursor:pointer; font:inherit;
     background:var(--surface-1); color:var(--text-primary); border:1.5px solid var(--line); transition:border-color .12s, background .12s, transform .12s; }
  .ob2-opt:hover { border-color:var(--ink); }
  .ob2-opt.on { border-color:var(--ink); background:var(--tint-ink); transform:scale(.99); }
  .ob2-ico { flex:none; width:38px; height:38px; border-radius:10px; display:inline-flex; align-items:center; justify-content:center;
     background:var(--surface-2); color:var(--ink); } .ob2-ico .ic { width:19px; height:19px; }
  .ob2-opt.on .ob2-ico { background:var(--ink); color:var(--text-on-ink); }
  .ob2-ol { display:flex; flex-direction:column; gap:2px; min-width:0; } .ob2-ol b { font-size:14.5px; font-weight:650; }
  .ob2-ol small { font-size:12.5px; color:var(--text-secondary); }
  .ob2-go { width:100%; margin-top:14px; padding:14px; font-size:16px; }
  .ob2-modal { max-width:440px; } .ob2-modal h3 { margin:0 0 6px; font-size:19px; letter-spacing:-.01em; }
  @media (max-width:560px){ .ob2 { padding:18px 16px 22px; margin-top:0; } .ob2-opts.role { grid-template-columns:1fr 1fr; } .ob2-opt { padding:12px; gap:10px; }
     .ob2-ico { width:34px; height:34px; } }

  .ob-card { padding:20px; }
  .ob-head { margin-bottom:18px; }
  .ob-h1 { margin:0 0 6px; font-size:22px; line-height:1.25; }
  .ob-sub { margin:0; color:var(--text-secondary); font-size:14px; }
  .ob-q { margin:0 0 18px; }
  .ob-label { display:block; font-weight:700; font-size:14px; margin-bottom:4px; }
  .ob-why { color:var(--text-secondary); font-size:12.5px; line-height:1.45; margin-bottom:8px; }
  .ob-q input[type=text], .ob-q input[type=tel], .ob-q input:not([type=checkbox]) { width:100%; box-sizing:border-box; }
  .ob-chips { display:flex; flex-wrap:wrap; gap:8px; }
  .ob-chip { background:var(--surface-2); border:1px solid var(--line); border-radius:999px;
     padding:8px 14px; font-size:13px; cursor:pointer; color:var(--text); }
  .ob-chip.on { background:var(--ink); color:var(--text-on-ink); border-color:var(--ink); font-weight:600; }
  .ob-sel { display:flex; align-items:center; gap:8px; margin-top:8px; padding:8px 10px;
     background:var(--tint-accent); border:1px solid var(--line); border-radius:8px; font-size:13.5px; }
  /* `display:flex` bat le `display:none` du navigateur pour [hidden] : sans cette ligne, la pastille
     de société choisie reste visible (une barre vide) avant toute sélection. Vu à la sonde 22/09. */
  .ob-sel[hidden] { display:none; }
  /* Premier accès : l'écran est SEUL (pas d'onglets, pas de recherche, pas d'incitation concurrente).
     On ne propose qu'une chose à la fois — l'essai est offert à l'écran SUIVANT, sur sa propre fiche. */
  body.onboarding #tabs, body.onboarding #searchbtn, body.onboarding #upgradechip,
  body.onboarding .navsearch, body.onboarding #navtoggle { display:none !important; }
  .ob-clear { margin-left:auto; background:transparent; border:0; font-size:18px; line-height:1;
     cursor:pointer; color:var(--text-secondary); }
  .ob-optout { margin-top:10px; font-size:12.5px; }
  .ob-card .up-cta { margin-top:6px; }
  .ob-skip { text-align:center; margin-top:10px; font-size:13px; }
  /* ── Rattrapage « ce que vous auriez reçu » (essai / premiers jours) ── */
  .recap-card { border-left:3px solid var(--status-warn, var(--ink)); }
  .recap-head { display:flex; align-items:flex-start; gap:12px; justify-content:space-between; margin-bottom:10px; }
  .recap-kicker { text-transform:uppercase; letter-spacing:.08em; font-size:11px; font-weight:700; color:var(--text-secondary); }
  .recap-h3 { margin:3px 0 0; font-size:17px; line-height:1.25; }
  .recap-note { font-size:12px; margin-top:10px; }
  .recap-empty { font-size:13px; margin:6px 0 0; }
  #wow_recap .recap-card { margin:14px 0 0; border-left:0; border:1px solid var(--line); }
  /* ── « Vos concurrents » : une liste qu'on RECONNAÎT (nom, commune, taille, score) ── */
  .conc-card { border-left:3px solid var(--ink); }
  .conc-kicker { text-transform:uppercase; letter-spacing:.08em; font-size:11px; font-weight:700; color:var(--text-secondary); }
  .conc-h3 { margin:3px 0 0; font-size:17px; }
  .conc-crit { font-size:12.5px; margin:8px 0 10px; }
  .conc-list { border:1px solid var(--line); border-radius:8px; overflow:hidden; }
  .conc-row { display:grid; grid-template-columns:1fr auto auto 28px; gap:10px; align-items:center;
     padding:9px 12px; font-size:13.5px; cursor:pointer; }
  .conc-row + .conc-row { border-top:1px solid var(--line); }
  .conc-row:hover { background:var(--surface-2); }
  .conc-eq { font-variant-numeric:tabular-nums; }
  .conc-more { font-size:12px; margin-top:8px; }
  .conc-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:12px; }
  .conc-actions .up-cta { width:auto; margin-top:0; padding:10px 16px; }
  @media (max-width:560px){
    .conc-row { grid-template-columns:1fr auto; row-gap:2px; }
    .conc-city { grid-column:1; font-size:12px; }
    .conc-g { grid-column:2; }
    .conc-actions { flex-direction:column; align-items:stretch; }
    .conc-actions .up-cta, .conc-actions .ghost { width:100%; }
  }
  /* ── Bande d'accueil sur la fiche (?welcome=1) ── */
  /* Fondateur 06/10 : l'accueil doit ressortir — couleur de marque (ocre), et le reste de la fiche grisé
     jusqu'au premier clic (wowFocus). */
  .card.wow-card { position:relative; z-index:1; border:2px solid var(--accent); background:linear-gradient(var(--tint-accent), var(--tint-accent)), var(--surface-1);
     box-shadow:0 10px 32px color-mix(in srgb, var(--accent) 22%, transparent); }
  .wow-kicker { display:inline-block; text-transform:uppercase; letter-spacing:.08em; font-size:11px; font-weight:700;
     color:var(--text-on-ink); background:var(--accent); padding:4px 10px; border-radius:var(--radius-pill); }
  .wow-once { margin:12px 0 0; font-size:12px; color:var(--accent-text); }
  #view.wow-focus > :not(.wow-card) { opacity:.35; filter:grayscale(1); cursor:pointer; transition:opacity .35s, filter .35s; }
  #view > .wow-card ~ * { transition:opacity .35s, filter .35s; }
  .wow-h2 { margin:4px 0 6px; font-size:21px; line-height:1.2; }
  .wow-sub { margin:0 0 14px; color:var(--text-secondary); font-size:13.5px; line-height:1.5; }
  .wow-actions { display:flex; flex-wrap:wrap; gap:10px; }
  .wow-actions .up-cta { width:auto; margin-top:0; padding:10px 16px; }
  .wow-actions .ghost { padding:10px 16px; }
  @media (max-width:560px){
    /* Mobile : on resserre pour que « Commencer » reste à portée de pouce sans long défilement. */
    .ob-card { padding:16px; }
    .ob-h1 { font-size:20px; }
    .ob-head { margin-bottom:14px; }
    .ob-q { margin-bottom:14px; }
    .ob-why { font-size:12px; margin-bottom:6px; }
    .ob-chips { gap:6px; }
    .ob-chip { padding:7px 12px; font-size:12.5px; }
    .wow-actions { flex-direction:column; align-items:stretch; }
    .wow-actions .up-cta, .wow-actions .ghost { width:100%; }
  }
  .auth-trial { display:flex; gap:8px; align-items:center; margin:0 0 12px; padding:10px 12px; font-size:13px;
     background:var(--tint-accent); border:1px solid var(--line); border-radius:8px; }
  .lp-trial-note { margin-top:4px; font-weight:600; }
  .trial-card .up-cta { width:auto; margin-top:0; padding:10px 16px; }
  .trial-chip { border-color:var(--ink) !important; }
  /* Démo publique (try-before-signup) */
  .democard { max-width:520px; position:relative; }
  .democlose { position:absolute; top:12px; right:12px; background:transparent; border:0; color:var(--text-secondary); font-size:16px; cursor:pointer; }
  .demo-head { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:14px; padding-right:22px; }
  .demo-why { display:flex; gap:18px; align-items:flex-start; margin:0 0 14px; padding:12px;
              background:var(--surface-2); border:1px solid var(--line); border-radius:10px; flex-wrap:wrap; }
  .demo-gauge { flex:0 0 220px; margin:0 auto; }
  .demo-comps { flex:1; min-width:230px; }
  .demo-fins { display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:10px; margin-bottom:14px; }
  .demo-fin { background:var(--surface-2); border:1px solid var(--line); border-radius:8px; padding:8px 10px; }
  .demo-fin span { display:block; font-size:11px; } .demo-fin b { font-size:14px; }
  .demo-chat { background:var(--tint-ink);
     border:1px solid color-mix(in srgb, var(--ink) 25%, transparent); border-radius:10px; padding:12px 14px; margin-bottom:14px; }
  .demo-q { font-weight:600; font-size:13px; margin-bottom:6px; } .demo-a { font-size:13px; line-height:1.5; }
  .demo-cta { text-align:center; border-top:1px solid var(--line); padding-top:14px; }
  .demo-cta p { font-size:13.5px; margin:0 0 12px; }
  .demo-switch { margin-top:14px; font-size:12px; display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
  .lp-demochips { display:flex; flex-wrap:wrap; gap:7px; justify-content:center; margin-top:14px; }
  .lp-legal { display:block; margin-top:8px; font-size:12px; } .lp-legal a { color:var(--text-secondary); }
  /* Page abonnement (renderBilling) */
  .bill-status { display:flex; align-items:center; gap:8px; background:var(--surface-1); border:1px solid var(--ink);
     border-radius:10px; padding:10px 14px; margin-bottom:14px; font-size:13px; }
  .bill-plans { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-bottom:16px; }
  @media (max-width:620px){ .bill-plans { grid-template-columns:1fr; } }
  .bill-plan { background:var(--surface-1); border:1px solid var(--line); border-radius:14px; padding:20px; }
  .bill-plan.pro { border-color:color-mix(in srgb, var(--accent) 55%, transparent); }
  .bp-name { font-size:18px; font-weight:800; } .bp-tag { font-size:12.5px; margin:4px 0 14px; }
  .bp-price { font-size:30px; font-weight:800; margin:6px 0 14px; letter-spacing:-.02em; }
  .bp-price .muted { font-size:14px; font-weight:600; }
  .bill-cycle { display:inline-flex; gap:4px; background:var(--surface-2); border:1px solid var(--line); border-radius:20px; padding:3px; margin-bottom:10px; }
  .bill-cycle button { border:0; background:transparent; color:var(--text-secondary); border-radius:16px; padding:5px 12px; font-size:12px; cursor:pointer; }
  .bill-cycle button.on { background:var(--ink); color:var(--text-on-ink); }
  .bill-cycle .save { font-size:10px; opacity:.9; }
  .bp-head, .bp-row { display:grid; grid-template-columns:1fr 90px 90px; align-items:center; gap:6px; }
  .bp-head { font-size:12px; font-weight:700; color:var(--text-secondary); padding-bottom:8px; border-bottom:1px solid var(--line); }
  .bp-free, .bp-pro { text-align:center; } .bp-pro { color:var(--ink); }
  .bp-row { font-size:13px; padding:9px 0; border-bottom:1px solid var(--line); }
  .bp-row .ok { color:var(--status-ok); }
  /* Comparatif à TROIS formules (la liste du catalogue) : libellé + 3 colonnes égales, groupes en capitales. */
  .bp-head.three, .bp-row.three { grid-template-columns:minmax(0,1.7fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr); }
  .bp-row.three > span:not(:first-child) { text-align:center; font-size:12.5px; }
  .bp-row.three .bp-note { grid-column:2 / span 3; text-align:left; font-size:12px; color:var(--text-secondary); }
  .bp-grp { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--text-secondary); padding:16px 0 4px; }
  .bill-plan .pc-feats { margin:6px 0 14px; gap:6px; } .bill-plan .pc-feats li { font-size:12.5px; }
  .bill-plan .pc-plus { margin:8px 0 6px; }
  .pack-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:12px; margin-top:6px; }
  .pack-card { position:relative; background:var(--surface-2); border:1px solid var(--line); border-radius:12px; padding:16px; text-align:center; }
  .pack-card.best { border-color:color-mix(in srgb, var(--accent) 55%, transparent); }
  .pack-badge { position:absolute; top:-9px; left:50%; transform:translateX(-50%); background:var(--ink); color:var(--text-on-ink);
     font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; padding:2px 8px; border-radius:10px; white-space:nowrap; }
  .pack-cr { font-size:24px; font-weight:800; color:var(--ink); }
  .pack-price { font-size:18px; font-weight:700; margin-top:8px; }
  .pack-buy { width:100%; margin-top:12px; }
  /* Entreprise self-service : 3 formules, curseur de sièges, console /org */
  .bill-plans.three { grid-template-columns:1fr 1fr 1fr; }
  @media (max-width:900px){ .bill-plans.three { grid-template-columns:1fr; } }
  .bill-plan.ent { border-color:color-mix(in srgb, var(--ink) 40%, transparent); }
  .seat-pick { display:flex; align-items:center; gap:10px; margin:8px 0 6px; }
  .seat-pick input[type=range] { flex:1; accent-color:var(--ink); }
  .seat-pick input[type=number] { width:64px; text-align:center; font-weight:700; }
  .seat-total { font-size:12.5px; color:var(--text-secondary); margin-bottom:10px; line-height:1.45; }
  .seat-total b { color:var(--text); }
  .org-head { display:flex; flex-wrap:wrap; gap:10px 18px; align-items:baseline; }
  .org-kpis { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; margin:12px 0 4px; }
  .org-kpi { background:var(--surface-2); border:1px solid var(--line); border-radius:12px; padding:12px 14px; }
  .org-kpi .v { font-size:22px; font-weight:800; color:var(--ink); } .org-kpi .l { font-size:12px; color:var(--text-secondary); }
  .org-row { display:flex; align-items:center; gap:10px; padding:9px 0; border-bottom:1px solid var(--line); font-size:13px; }
  .org-row .who { flex:1; min-width:0; } .org-row .who .muted { font-size:12px; }
  .org-row .role { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; color:var(--text-secondary); }
  .org-row .role.admin { color:var(--ink); }
  .org-invite { display:flex; gap:8px; margin-top:10px; } .org-invite input { flex:1; }
  .join-card { max-width:520px; margin:24px auto; text-align:center; }
  .co-banner, .pay-banner { position:fixed; left:50%; transform:translateX(-50%); z-index:900; display:flex; gap:10px; align-items:center;
     background:var(--surface-1); border:1px solid var(--ink); border-radius:12px; padding:10px 14px; font-size:13px; box-shadow:0 8px 24px rgba(0,0,0,.18); max-width:92vw; }
  .co-banner { bottom:18px; } .pay-banner { top:8px; border-color:var(--status-bad, #c33); }
  .co-banner .spin { width:14px; height:14px; border:2px solid var(--line); border-top-color:var(--ink); border-radius:50%; animation:spin 1s linear infinite; }
  @keyframes spin { to { transform:rotate(360deg); } }
  .pl-bar { display:flex; flex-wrap:wrap; gap:8px; align-items:center; font-size:12.5px; color:var(--text-secondary); background:var(--surface-2);
     border:1px dashed var(--line); border-radius:10px; padding:8px 12px; margin:10px 0; }
  .up-ent { text-align:center; padding:6px 0 10px; } .up-ent .pc-feats { list-style:none; padding:0; margin:8px 0 0; font-size:13px; }
  .em-var { cursor:pointer; background:var(--surface-2); border:1px solid var(--line); border-radius:6px; padding:1px 6px; font-size:12px; }
  .em-var:hover { border-color:var(--ink); }
  .em-frame { width:100%; height:420px; border:1px solid var(--line); border-radius:10px; background:#fff; margin-top:8px; }
  .co-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
  @media (max-width:900px){ .co-grid { grid-template-columns:1fr; } }
  .co-plan .bp-name { font-size:22px; font-weight:800; } .co-plan .pc-feats { list-style:none; padding:0; margin:8px 0; font-size:13px; }
  .co-plan .pc-feats li::before { content:'✓  '; color:var(--status-ok); }
  .bp-results { position:relative; }
  .bp-regime { margin:8px 0 4px; padding:8px 10px; border:1px solid var(--line); border-radius:8px; font-size:13px; background:var(--surface-1); }
  .bp-regime:empty { display:none; }
  .bp-hit { padding:7px 10px; border:1px solid var(--line); border-top:0; background:var(--surface-1); cursor:pointer; font-size:13px; }
  .bp-hit:first-child { border-top:1px solid var(--line); border-radius:8px 8px 0 0; } .bp-hit:last-child { border-radius:0 0 8px 8px; }
  .bp-hit:hover { background:var(--surface-2); }
  .auth-consent { font-size:11px; color:var(--text-secondary); line-height:1.4; margin:10px 0 0; }
  .chat-notice { font-size:11px; color:var(--text-secondary); line-height:1.4; margin:4px 12px 8px; text-align:center; }  /* AI Act art. 50 : transparence */
  .auth-check { display:flex; gap:8px; align-items:flex-start; cursor:pointer; margin:12px 0 10px; }
  .auth-check input { margin-top:2px; flex:none; }
  /* porte CGU : comptes dont la version acceptée ≠ version en vigueur (comptes antérieurs, CGU mises à jour) */
  #terms-gate { position:fixed; inset:0; background:var(--overlay); display:none; align-items:center; justify-content:center; z-index:1001; }
  #terms-gate.show { display:flex; }
  #terms-gate .authcard { background:var(--surface-1); border:1px solid var(--line); border-radius:12px; padding:26px 26px; width:380px; max-width:92vw; }
  #terms-gate h3 { margin:0 0 8px; font-size:18px; }
  #terms-gate p { font-size:13px; color:var(--text-secondary); line-height:1.5; margin:0 0 6px; }
  #terms-gate button { width:100%; margin-top:8px; }
  /* écran d'intro première utilisation (6.7) */
  .introcard { max-width:520px; }
  .intro-tile { display:flex; gap:12px; align-items:flex-start; padding:9px 0; }
  .intro-ic { font-size:20px; flex:none; width:28px; text-align:center; }
  .intro-act { display:flex; align-items:center; gap:12px; width:100%; margin:6px 0; padding:12px 14px;
               font-size:14px; font-weight:600; text-align:left; cursor:pointer; color:var(--text-primary);
               background:color-mix(in srgb, var(--text-primary) 3%, transparent); border:1px solid var(--line); border-radius:10px;
               min-height:48px; transition:border-color .15s ease, background .15s ease; }
  .intro-act:hover { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 8%, transparent); }
  .intro-arrow { margin-left:auto; color:var(--ink); }
  .auth-tabs { display:flex; gap:0; margin:14px 0 4px; border:1px solid var(--line); border-radius:10px;
               overflow:hidden; }
  .auth-tabs button { flex:1; padding:11px 0; font-size:14px; font-weight:600; background:transparent;
               color:var(--text-secondary); border:none; cursor:pointer; min-height:44px; }  /* cible tactile 44px */
  .auth-tabs button.on { background:var(--tint-ink);
               color:var(--text-primary); }
  .estbadge { font-size:10px; text-transform:uppercase; letter-spacing:.04em; color:var(--estimated);
     border:1px solid var(--estimated); border-radius:4px; padding:1px 5px; margin-left:4px; }
  .meta.est { color:var(--estimated); }   /* CA estimé : teinte estimé = distinct des chiffres officiels ET du feu orange */
  .meta.est .muted { font-size:12px; }
  /* encart positionnement sectoriel */
  .poshead { font-size:15px; margin:0 0 10px; }
  /* Synthèse RELATIVE (14.2) — verdict d'un coup d'œil EN TÊTE de l'encart sectoriel (foyer unique du
     relatif). Coloré selon la position vs les pairs ; distinct du grade ABSOLU (jauge de score). */
  .pos-verdict { display:flex; align-items:center; gap:8px; margin:2px 0 12px; padding:8px 12px;
     border-radius:8px; font-size:13.5px; font-weight:600; border:1px solid var(--line); }
  .pos-verdict .pv-ico { font-size:15px; line-height:1; }
  .pos-verdict .pv-pct { margin-left:auto; font-weight:500; color:var(--text-secondary); font-size:12.5px; white-space:nowrap; }
  .pos-verdict.pv-up   { color:var(--status-ok); background:color-mix(in srgb, var(--status-ok) 10%, transparent);  border-color:color-mix(in srgb, var(--status-ok) 40%, transparent); }
  .pos-verdict.pv-mid  { color:var(--text-primary);   background:color-mix(in srgb, var(--status-watch) 8%, transparent); border-color:color-mix(in srgb, var(--status-watch) 35%, transparent); }
  .pos-verdict.pv-down { color:var(--status-watch);      background:color-mix(in srgb, var(--status-watch) 10%, transparent); border-color:color-mix(in srgb, var(--status-watch) 40%, transparent); }
  .pos-verdict.pv-bad  { color:var(--status-critical);   background:color-mix(in srgb, var(--status-critical) 10%, transparent);  border-color:color-mix(in srgb, var(--status-critical) 40%, transparent); }
  .posbar { position:relative; height:18px; }
  .posbar-track { position:absolute; top:8px; left:2px; right:2px; height:3px; background:var(--line); border-radius:2px; }
  .posbar-med { position:absolute; top:3px; width:2px; height:12px; background:var(--text-secondary); }
  .posbar-dot { position:absolute; top:3px; width:11px; height:11px; border-radius:50%; transform:translateX(-50%); border:2px solid var(--surface-1); }
  .poschip { font-size:11px; padding:2px 7px; border-radius:10px; white-space:nowrap; }
  .poschip.top, .poschip.high { color:var(--status-ok); border:1px solid var(--status-ok); }
  .poschip.low { color:var(--status-watch); border:1px solid var(--status-watch); }
  .poschip.bottom { color:var(--status-critical); border:1px solid var(--status-critical); }
  .poshead-row { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
  .regtoggle { display:flex; gap:4px; flex-wrap:wrap; }
  .regtoggle button { background:var(--surface-2); color:var(--text-secondary); border:1px solid var(--line); border-radius:6px;
     padding:3px 9px; font-size:12px; cursor:pointer; }
  .regtoggle button:hover { color:var(--text-primary); }
  .regtoggle button.on { background:var(--ink); color:var(--text-on-ink); border-color:var(--ink); }
  .posfoot { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:8px;
     flex-wrap:wrap; font-size:12px; }
  .poslink { color:var(--ink); cursor:pointer; white-space:nowrap; }
  .poslink:hover { text-decoration:underline; }
  .secCols { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:14px; }
  @media (max-width:720px){ .secCols { grid-template-columns:minmax(0,1fr); } }
  .seccol-h { font-size:13px; font-weight:600; margin:4px 0 2px; }
  .seccol-h.good { color:var(--status-ok); } .seccol-h.bad { color:var(--status-critical); }
  /* Comptes estimés : carte AMBRE repliée par défaut (un clic = activation), nettement distincte de l'officiel */
  details.estcard { border:1px solid var(--estimated); border-radius:12px; background:color-mix(in srgb, var(--estimated) 6%, transparent);
     margin:14px 0; padding:0; }
  details.estcard > summary { cursor:pointer; list-style:none; padding:12px 16px; color:var(--estimated); font-weight:600;
     display:flex; align-items:center; gap:8px; }
  details.estcard > summary::-webkit-details-marker { display:none; }
  details.estcard > summary::before { content:'▸'; color:var(--estimated); transition:transform .15s; }
  details.estcard[open] > summary::before { transform:rotate(90deg); }
  details.estcard .estbadge { font-size:11px; padding:2px 7px; border-radius:10px; border:1px solid var(--estimated);
     color:var(--estimated); font-weight:500; }
  details.estcard .estbody { padding:0 16px 16px; }
  .cc-list { display:flex; flex-direction:column; margin:4px 0 6px; }
  .cc-row { display:flex; align-items:center; gap:10px; padding:7px 0; border-bottom:1px solid var(--line); }
  .cc-row:last-child { border-bottom:none; }
  .cc-name { flex:1; font-size:13px; } .cc-val { font-size:13px; color:var(--text-secondary); min-width:5em; text-align:right; }
  .cc-status { font-size:11px; font-weight:600; border-radius:10px; padding:2px 9px; min-width:5.5em; text-align:center; }
  .cc-good { color:var(--status-ok); background:color-mix(in srgb, var(--status-ok) 12%, transparent); }
  .cc-watch { color:var(--status-watch); background:color-mix(in srgb, var(--status-watch) 12%, transparent); }
  .cc-risk { color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 12%, transparent); }
  .cc-cap { font-size:12px; color:var(--text-secondary); margin-top:10px; line-height:1.6; }
  .cc-filing { margin-top:12px; padding-top:10px; border-top:1px solid var(--line); font-size:13px; }
  /* Encart capacité d'emprunt (modale score) : plus clair, encadré ; variante « nulle » = avertissement. */
  .cap-box { border:1px solid var(--line); border-radius:10px; padding:12px 14px; background:var(--surface-2); }
  .cap-box-zero { border-color:color-mix(in srgb, var(--status-watch) 45%, transparent); background:color-mix(in srgb, var(--status-watch) 7%, transparent); }
  .cap-box-h { font-weight:700; font-size:14px; margin:0 0 10px; }
  .cap-figs { display:flex; gap:26px; flex-wrap:wrap; margin:0 0 10px; }
  .cap-figs .muted { font-size:11px; }
  .cap-figs b { font-size:16px; }
  .cap-advice { color:var(--status-watch); font-size:13px; line-height:1.45; margin:0 0 10px; }
  .cap-explain { font-size:12px; margin:0; line-height:1.5; }
  .credit-cap-zero { color:var(--status-watch); font-weight:600; }
  /* Modale « i » du score : facteurs DÉROULABLES (details/summary), groupés informatif vs plafonnement. */
  .cc-sec { margin-top:16px; }
  .cc-sec > h4 { font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--text-secondary); margin:0 0 4px; }
  details.cc-f { border-bottom:1px solid var(--line); }
  details.cc-f > summary { display:flex; align-items:center; gap:8px; padding:9px 0; cursor:pointer; list-style:none; font-size:13px; }
  details.cc-f > summary::-webkit-details-marker { display:none; }
  details.cc-f > summary::after { content:'▸'; margin-left:6px; color:var(--text-secondary); font-size:11px; transition:transform .15s; }
  details.cc-f[open] > summary::after { transform:rotate(90deg); }
  .cc-dot { width:9px; height:9px; border-radius:50%; flex:none; }
  .cc-dot.cc-good{background:var(--status-ok);} .cc-dot.cc-watch{background:var(--status-watch);} .cc-dot.cc-risk{background:var(--status-critical);}
  .cc-fname { font-weight:600; } .cc-fval { color:var(--text-secondary); }
  .cc-w { font-size:10.5px; color:var(--text-secondary); background:color-mix(in srgb, var(--text-secondary) 12%, transparent); border-radius:9px; padding:1px 7px; margin-left:auto; }
  .cc-fdet { padding:0 0 10px 17px; font-size:12px; line-height:1.5; }
  .cc-fdet .mono { font-variant-numeric:tabular-nums; }
  .cc-bar { height:7px; border-radius:4px; background:color-mix(in srgb, var(--text-secondary) 15%, transparent); overflow:hidden; margin:2px 0 5px; }
  .cc-bar-fill { height:100%; }
  .cc-bar-fill.cc-good{background:var(--status-ok);} .cc-bar-fill.cc-watch{background:var(--status-watch);} .cc-bar-fill.cc-risk{background:var(--status-critical);}
  .cc-scale { margin-top:3px; }
  .cc-holding { display:block; margin-top:7px; padding:6px 9px; border-radius:6px; line-height:1.45;
     background:var(--tint-ink); border:1px solid color-mix(in srgb, var(--ink) 30%, transparent); }
  .cc-profile { display:flex; align-items:center; gap:9px; margin:12px 0; padding:9px 11px; border-radius:8px; line-height:1.4;
     background:var(--tint-ink); border:1px solid color-mix(in srgb, var(--ink) 30%, transparent); font-size:13px; }
  .cc-result { margin-top:11px; padding-top:11px; border-top:1px solid var(--line); font-size:13px; }
  .cc-result .cc-cur { color:var(--ink); font-weight:700; }
  .cc-cap-row { display:flex; align-items:baseline; gap:9px; padding:6px 0; font-size:13px; border-bottom:1px solid var(--line); }
  .cc-cap-row:last-child { border-bottom:none; }
  .cc-cap-eff { margin-left:auto; font-size:11px; color:var(--text-secondary); text-align:right; }
  .cc-badge { font-size:9.5px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; border-radius:9px; padding:1px 6px;
     background:color-mix(in srgb, var(--ink) 15%, transparent); color:var(--ink); border:1px solid color-mix(in srgb, var(--ink) 40%, transparent); }
  /* repères ratios (bon/vigilance/risque — seuils du Score Idonis) */
  .rg-good  { color:var(--status-ok); font-weight:600; }
  .rg-watch { color:var(--status-watch); font-weight:600; }
  .rg-risk  { color:var(--status-critical); font-weight:600; }
  .blurb-line { display:flex; gap:8px; align-items:flex-start; margin:4px 0; line-height:1.5; }
  .blurb-ic { flex:none; display:inline-flex; padding-top:3px; color:var(--text-secondary); }
  .blurb-ic .ic { width:15px; height:15px; }
  /* « En bref » fusionné dans l'en-tête de la fiche : fragments sous l'adresse */
  .glance { margin-top:8px; padding-top:8px; border-top:1px solid var(--line); }
  /* Adresse cliquable → modale carte + entreprises à cette adresse */
  .addrlink { color:var(--text-primary); cursor:pointer; text-decoration:underline; text-decoration-style:dotted;
     text-underline-offset:2px; }
  .addrlink:hover { color:var(--ink); }
  .addr-map { width:100%; height:300px; border:1px solid var(--line); border-radius:10px; }
  .addr-list { margin:12px 0 0; display:flex; flex-direction:column; }
  .addr-list a { display:block; padding:7px 0; border-bottom:1px solid var(--line); }
  .addr-list a:last-child { border-bottom:none; }
  /* Tableau Finances : colonne d'un exercice NON DÉPOSÉ (placeholder rouge : échéance + retard) */
  table.fin th.yhead-missing { color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 10%, transparent); }
  table.fin td.fin-missing { background:color-mix(in srgb, var(--status-critical) 6%, transparent); }
  table.fin td.fin-missing .neg { white-space:nowrap; }
  /* Exercice DÉPOSÉ mais INEXPLOITABLE (constat qualité bloquant) : distinct du « non déposé »,
     qui est un signal tout autre. On le montre plutôt que de le faire disparaître. */
  table.fin th.yhead-unusable { color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 6%, transparent); }
  table.fin th.yhead-unusable .acctbtn { color:inherit; }
  .badge.watch { color:var(--text-on-ink); background:var(--status-watch); border-color:var(--status-watch); }
  .badge.neg { color:var(--status-critical); border-color:var(--status-critical); }
  /* Constats de qualité listés dans la modale « d'où vient ce chiffre ? » */
  .qual-list { margin:6px 0 0; padding-left:18px; }
  .qual-list li { margin:7px 0; font-size:12px; }
  /* le TYPE d'erreur se lit en premier ; la preuve chiffrée vient dessous, en retrait */
  .qual-list .qual-what { color:var(--text-primary); }
  .qual-list .qual-why { color:var(--text-secondary); font-variant-numeric:tabular-nums; }
  /* Exercice clôturé, comptes À DÉPOSER (pas encore exigibles) : colonne NEUTRE, jamais en erreur */
  table.fin th.yhead-pending { color:var(--text-secondary); }
  table.fin td.fin-pending .muted { white-space:nowrap; }
  /* Onglet Finances : 1re colonne (libellés) de LARGEUR COMMUNE entre la table des montants et
     celle des ratios → colonnes d'années alignées visuellement entre les deux cartes. */
  .ftab-panel[data-ftab="comptes"] table.fin th:first-child, .ftab-panel[data-ftab="analyse"] table.fin th:first-child,
  .ftab-panel[data-ftab="comptes"] table.fin td:first-child, .ftab-panel[data-ftab="analyse"] table.fin td:first-child { width:230px; min-width:175px; }
  /* Gouvernance unifiée : lignes dirigeants + timeline des mandats */
  .gov-row { display:flex; align-items:baseline; gap:8px; padding:6px 0; border-top:1px solid var(--line); flex-wrap:wrap; }
  .gov-row.off { opacity:.55; }
  .gov-dot { width:8px; height:8px; border-radius:50%; flex:none; align-self:center; }
  .gov-dot.on { background:var(--status-ok); } .gov-dot.off { background:var(--text-secondary); }
  .gov-name { font-weight:600; min-width:0; }
  .gov-nm { color:var(--ink); }                 /* même couleur que les liens : la ligne s'ouvre en modale */
  .gov-row.click:hover .gov-nm { text-decoration:underline; }
  .gov-fn { color:var(--text-secondary); font-size:12.5px; }
  .gov-period { font-size:12px; color:var(--text-secondary); white-space:nowrap; margin-left:auto; }
  .gov-src { display:inline-flex; gap:4px; }
  .gov-chip { font-size:10.5px; border:1px solid var(--line); border-radius:4px; padding:0 5px;
              color:var(--text-secondary); text-decoration:none; white-space:nowrap; }
  a.gov-chip:hover { color:var(--ink); border-color:var(--ink); }
  .gv-wrap { overflow-x:auto; }
  .gv-grid { min-width:460px; }
  .gv-row { display:flex; align-items:center; gap:8px; margin:3px 0; }
  .gv-lbl { flex:0 0 130px; font-size:11.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .gv-track { position:relative; flex:1; height:12px; background:color-mix(in srgb, var(--text-primary) 3%, transparent);
              border-radius:3px; border:1px solid var(--line); }
  /* frise de gouvernance : la couleur suit la CATÉGORIE (_GOV_CAT_COLOR, légende libellée) — jamais le rang */
  .gv-bar { position:absolute; top:1px; bottom:1px; border-radius:2px; background:var(--series-1); opacity:.85; }
  /* ── Modèle mandats (engine=mandates, 29/09) ── */
  .gv-track { overflow:hidden; }                /* une barre ne déborde JAMAIS de sa piste (plus de défilement parasite) */
  .gm-head, .gm-row { display:grid; grid-template-columns: 12px minmax(170px,1.25fr) minmax(150px,1fr) minmax(150px,1fr) minmax(120px,.8fr);
    gap:10px; align-items:center; }
  .gm-head { font-size:10.5px; text-transform:uppercase; letter-spacing:.4px; color:var(--text-tertiary); padding:2px 0 3px; }
  .gm-row { padding:6px 0; border-top:1px solid var(--line); cursor:pointer; }
  .gm-row:hover { background:color-mix(in srgb, var(--text-primary) 3%, transparent); }
  .gm-row.off { opacity:.55; }
  .gm-who { font-weight:600; color:var(--ink); min-width:0; overflow:hidden; text-overflow:ellipsis; }
  .gm-row:hover .gm-who { text-decoration:underline; }
  .gm-fn { font-size:13px; }
  .gm-nofn { font-size:12px; font-style:italic; }
  .gm-via { font-size:12.5px; color:var(--text-secondary); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .gm-via b { font-weight:500; color:var(--text-primary); }
  .gm-per { font-size:12px; color:var(--text-secondary); text-align:right; white-space:nowrap; }
  /* MOBILE : une ligne de mandat COMPACTE — nom ; « fonction · via société » ; période (fondateur 29/09) */
  @media (max-width:720px){
    .gm-head { display:none; }
    .gm-row { display:flex; flex-wrap:wrap; align-items:baseline; column-gap:6px; row-gap:1px; padding:8px 0 8px 18px; position:relative; }
    .gm-row .gov-dot { position:absolute; left:2px; top:14px; }
    .gm-who { flex:0 0 100%; white-space:normal; }
    .gm-fn, .gm-nofn { font-size:12.5px; }
    .gm-via { font-size:12.5px; white-space:normal; }
    .gm-via:not(:empty)::before { content:"· "; }
    .gm-per { flex:0 0 100%; text-align:left; font-size:11.5px; }
    /* chronologie : le nom AU-DESSUS de sa barre → la piste prend toute la largeur (plus de défilement caché) */
    .gm-tl .gv-grid { min-width:0; }
    .gm-tl .gv-row { flex-direction:column; align-items:stretch; gap:2px; margin:6px 0; }
    .gm-tl .gv-row > .gv-lbl { flex:none; white-space:normal; }
    .gm-tl .gv-row > .gv-track { flex:none; width:100%; height:16px; }
  }
  .gm-tlbox { margin-top:14px; border-top:1px solid var(--line); padding-top:10px; }
  .gm-tlbox > summary { cursor:pointer; font-size:13px; font-weight:600; color:var(--text-primary); }
  .gm-tl { position:relative; }
  .gm-tl .gv-lbl { flex:0 0 190px; }
  .gm-tl .gv-track { height:16px; }
  .gv-bar.gm-base { top:1px; bottom:1px; opacity:.28; }       /* le MANDAT : bande claire pleine hauteur */
  .gv-bar.gm-fnbar { top:1px; bottom:1px; }
  .gv-bar i { font-style:normal; font-size:9.5px; color:#fff; padding-left:4px; white-space:nowrap; overflow:hidden; display:block; line-height:14px; }
  .gv-bar.gm-exec { background:var(--series-2); } .gv-bar.gm-control { background:var(--series-4); } .gv-bar.gm-other { background:var(--text-tertiary); }
  .gm-tl .gv-bar:hover { outline:2px solid var(--ink); z-index:2; opacity:1; }
  .gm-cursor { position:absolute; top:0; bottom:18px; width:0; border-left:1px dashed var(--text-secondary); pointer-events:none; z-index:3; }
  .gm-cursor span { position:absolute; top:-2px; left:4px; font-size:10px; background:var(--surface-1); padding:0 3px;
    border-radius:3px; box-shadow:0 0 0 1px var(--line); white-space:nowrap; }
  .gm-mblock { border:1px solid var(--line); border-radius:8px; padding:8px 10px; margin:8px 0; }
  .gm-mblock h4 { margin:0 0 4px; font-size:14px; }
  .gm-mblock h5 { margin:6px 0 2px; font-size:11px; text-transform:uppercase; letter-spacing:.4px; color:var(--text-secondary); }
  .gm-mblock details summary { cursor:pointer; font-size:12px; color:var(--text-secondary); margin-top:6px; }
  .gm-pfn { font-size:12px; font-weight:600; margin:6px 0 2px; }
  .gm-pw { padding:3px 0 5px; border-top:1px dashed var(--line); font-size:12.5px; }
  .gm-quote { font-size:12px; color:var(--text-secondary); margin-top:2px; }
  .ai-sum { color:var(--text-primary); }
  .gtools { display:flex; justify-content:flex-end; gap:8px; margin:0 0 6px; }
  .ax-chip.flag { background:#fef3c7; border-color:#f59e0b; color:#92400e; font-weight:600; }
  .gtl { border:1px solid var(--line); border-radius:8px; padding:8px 12px; background:var(--surface-2); }
  .gtl-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
  .gtl-dates { display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
  .gtl-dates button { font:inherit; font-size:11px; padding:2px 8px; border:1px solid var(--line); border-radius:10px;
    background:var(--surface); color:var(--text-secondary); cursor:pointer; }
  .gtl-dates button.on { background:#d97706; border-color:#d97706; color:#fff; }
  .gtl-text { font-size:12.5px; margin-top:6px; min-height:18px; }
  .gtl-text .pos { color:#16a34a; font-weight:600; } .gtl-text .neg { color:#dc2626; font-weight:600; }
  .gtl-legend { display:flex; gap:14px; flex-wrap:wrap; font-size:11px; color:var(--text-secondary); margin-top:4px; }
  .gtl-step { background:var(--surface-1); border:1px solid var(--line); border-radius:6px; padding:2px 8px; font-size:11px;
              color:var(--text-secondary); cursor:pointer; line-height:1.6; }
  .gtl-step:hover { color:var(--ink); border-color:var(--ink); }
  @media (max-width:640px){
    .gtl { padding:8px 10px; }
    .gtl-row { gap:6px; flex-wrap:nowrap; }
    .gtl-row > span:first-child, .gtl-now { display:none; }
    .gtl-row input[type=range] { min-width:0 !important; }
    .gtl-dates.many { display:none; }
    .gtl-legend { display:grid; grid-template-columns:1fr 1fr; gap:3px 10px; font-size:10.5px; }
    .gtl-text { font-size:12px; }
  }
  .gtl-legend i { display:inline-block; width:14px; height:8px; border-radius:2px; margin-right:5px; vertical-align:middle; }
  :fullscreen { background:var(--surface-0); padding:14px; overflow:auto; }
  .ax-chip.ai-chip { color:var(--accent); border-color:var(--accent); font-size:10.5px; }
  .gv-bar.off { opacity:.4; }
  .gv-bar.cat-delegate { background:var(--series-2); }
  .gv-bar.cat-auditor  { background:var(--series-4); }
  .gv-bar.cat-other    { background:var(--text-tertiary); }
  .gv-axis { display:flex; justify-content:space-between; font-size:10px; color:var(--text-secondary);
             margin:2px 0 0 138px; }
  .gov-cat { font-size:11px; text-transform:uppercase; letter-spacing:.5px; color:var(--text-secondary);
             margin:12px 0 2px; padding-top:8px; border-top:2px solid var(--line); display:flex; gap:6px; align-items:center; }
  .gov-cat:first-child { margin-top:4px; border-top:none; padding-top:0; }
  .gov-cat .swatch { width:10px; height:10px; border-radius:2px; }
  .gov-sub { font-size:12px; font-weight:600; color:var(--text-primary); margin:8px 0 1px 2px; }
  .gov-row.click { cursor:pointer; }
  .gov-row.click:hover { background:color-mix(in srgb, var(--text-primary) 3%, transparent); }
  .gvm-src { margin:10px 0; padding:8px 10px; border:1px solid var(--line); border-radius:8px; }
  .gvm-src h4 { margin:0 0 6px; font-size:13px; }
  .gvm-line { font-size:13px; margin:3px 0; display:flex; gap:8px; align-items:baseline; flex-wrap:wrap; }
  /* ───────────── Onglets de navigation (Dashboard / Chat / Explorateur) ───────────── */
  #tabs { display:none; gap:4px; padding:0 24px; border-bottom:1px solid var(--line); background:var(--surface-1); }
  body:not(.landing) #tabs { display:flex; }
  #tabs a { position:relative; padding:11px 16px; font-size:14px; font-weight:600; color:var(--text-secondary);
     cursor:pointer; border:0; background:transparent; text-decoration:none; display:inline-flex; align-items:center; gap:7px; }
  #tabs a:hover { color:var(--text-primary); }
  #tabs a.on { color:var(--ink); }
  #tabs a.on::after { content:''; position:absolute; left:12px; right:12px; bottom:-1px; height:2px; background:var(--accent); border-radius:2px 2px 0 0; }
  /* icônes SVG du chrome (sprite #i-*) : héritent de la couleur du texte. .ic-inl = en ligne dans du texte */
  .ic { width:17px; height:17px; flex:0 0 auto; }
  .ic-inl { width:15px; height:15px; vertical-align:-3px; margin-right:2px; color:var(--text-secondary); }
  h2 .ic-inl, h3 .ic-inl, .credit-title .ic-inl { width:18px; height:18px; vertical-align:-4px; margin-right:6px; color:var(--ink); }
  .ac-q .ic-inl, .ftab-ico .ic, button .ic-inl, .pill .ic-inl, .cm-cos .ic-inl { color:inherit; }
  .chat-input button .ic, .nc-send .ic { width:19px; height:19px; }
  #searchbtn .ic { width:18px; height:18px; }
  /* Mobile : la barre d'onglets devient un MENU déroulant (toggle via le hamburger #navtoggle). */
  @media (max-width:560px){
    #navtoggle { display:inline-flex; }
    #searchbtn { flex:1 1 auto; padding:0 10px; gap:7px; }
    #searchbtn .sb-long, #searchbtn .sb-kbd { display:none; }
    #searchbtn .sb-short { display:block; }
    body:not(.landing) #tabs { display:none; position:fixed; left:10px; right:10px; top:58px; z-index:65;
       flex-direction:column; gap:2px; padding:6px; border:1px solid var(--line); border-radius:10px;
       }
    body:not(.landing) #tabs.open { display:flex; }
    #tabs a { padding:12px 14px; font-size:15px; }
    #tabs a.on::after { display:none; }
    #tabs a.on { background:color-mix(in srgb, var(--ink) 10%, transparent); border-radius:8px; }
  }

  /* ───────────── Dashboard (page d'accueil après connexion) ───────────── */
  .dash { max-width:920px; margin:0 auto; }
  .dash-hero { text-align:center; padding:18px 0 26px; }
  .dash-hero h2 { font-size:26px; margin:0 0 6px; } .dash-hero h2 span { color:var(--ink); }
  .dash-hero p { color:var(--text-secondary); font-size:15px; margin:0; }
  /* ── .ai-frame : cadre de l'agent (widget du tableau de bord .nc, CTA .ai-cta, page chat .chat-main).
     Un filet encre sur fond papier — l'agent se distingue par sa réponse, pas par un halo (§6.5 : ni
     dégradé ni ombre). ── */
  .ai-frame { position:relative; border:1px solid var(--ink); background:var(--surface-1); }
  /* ── CARTES DE L'AGENT (.nc tableau de bord, .ai-cta fiche/explorateur/secteur) : la seule surface ENCRE de
     l'app — c'est la voix de l'avis, elle se voit sans crier. Papier pour le texte, ocre éclairci pour le
     sur-titre, un seul bouton ocre (envoyer). La page chat (.chat-main) reste papier : on y lit. ── */
  .nc, .ai-cta { background:var(--ink); color:var(--text-on-ink); border-color:var(--ink); }
  .nc .ai-mark, .ai-cta .ai-mark { background:var(--text-on-ink); }
  .nc { border-radius:14px; padding:18px 18px 16px; }
  .nc-label { font-size:13px; font-weight:600; color:color-mix(in srgb, var(--text-on-ink) 78%, transparent); margin:0 0 12px; display:flex; align-items:center; gap:9px; }
  .nc-label .ai-name { color:var(--text-on-ink); }
  .nc-bal { margin-left:auto; font-weight:500; white-space:nowrap; }
  .nc-label .nc-t { flex:1; min-width:0; }
  /* Mobile : « Démarrer une conversation avec Idonis » et le solde d'analyses se CHEVAUCHAIENT en
     390 px (le solde est `nowrap` et poussé à droite, le titre se repliait dessous). Le solde passe
     sur sa propre ligne — vu à la sonde 23/09, sur le premier écran d'un compte neuf. */
  @media (max-width:560px){
    .nc-label { flex-wrap:wrap; }
    .nc-label .nc-t { flex:1 1 auto; }
    .nc-bal { margin-left:0; order:3; flex:1 0 100%; white-space:normal; }
  }
  .nc-row { display:flex; gap:10px; align-items:flex-end; }
  .nc-row textarea { flex:1; resize:none; max-height:140px; min-height:46px; background:var(--surface-1); color:var(--text-primary);
     border:1px solid var(--line); border-radius:10px; padding:12px 13px; font:inherit; font-size:14px; line-height:1.45; }
  .nc-row textarea:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 35%, transparent); }
  .nc-send { width:46px; height:46px; flex:none; border-radius:10px; background:var(--accent); color:var(--text-on-ink); border:0; font-size:18px; cursor:pointer;
     }
  .nc-send:hover:not(:disabled) { filter:brightness(1.1); }
  .nc-send:disabled { opacity:.4; cursor:not-allowed; }
  .nc-sugg { display:flex; flex-wrap:wrap; gap:7px; margin-top:11px; }
  .nc-sugg button { background:color-mix(in srgb, var(--text-on-ink) 9%, transparent); border:1px solid color-mix(in srgb, var(--text-on-ink) 28%, transparent); color:var(--text-on-ink); border-radius:20px;
     font:inherit; font-weight:500; text-align:left;
     padding:6px 12px; font-size:12.5px; cursor:pointer; }
  .nc-sugg button:hover { border-color:var(--text-on-ink); background:color-mix(in srgb, var(--text-on-ink) 16%, transparent); }
  .dash-sec { margin-top:26px; }
  .dash-sec h3 { font-size:14px; color:var(--text-secondary); margin:0 0 10px; font-weight:600; }
  /* « Reprendre où vous étiez » : chips société + badge de grade */
  .dash-chips { display:flex; flex-wrap:wrap; gap:8px; }
  .dash-chip { display:inline-flex; align-items:center; gap:8px; background:var(--surface-1);
     border:1px solid var(--line); color:var(--text-primary); border-radius:20px; padding:7px 12px;
     font-size:13px; cursor:pointer; max-width:100%; }
  .dash-chip:hover { border-color:var(--ink); }
  .dash-chip .dc-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:220px; }
  /* bandeau favoris : alerte détresse (rouge, cliquable) ou veille calme */
  .dash-alert { margin-top:16px; border-radius:8px; padding:9px 13px; font-size:13px; }
  .dash-alert.warn { color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 10%, transparent); border:1px solid color-mix(in srgb, var(--status-critical) 35%, transparent); cursor:pointer; }
  .dash-alert.ok { color:var(--text-secondary); background:transparent; border:1px dashed var(--line); }
  .dash-convs { display:flex; flex-direction:column; gap:7px; }
  .dash-sec .sec-head { display:flex; align-items:center; gap:10px; margin:0 0 10px; }
  .dash-sec .sec-head h3 { margin:0; } .dash-sec .sec-head a { margin-left:auto; font-size:12.5px; cursor:pointer; }
  .dash-conv { display:flex; align-items:center; gap:10px; background:var(--surface-1); border:1px solid var(--line);
     border-radius:10px; padding:11px 13px; cursor:pointer; }
  .dash-conv:hover { border-color:var(--ink); }
  .dash-conv .dc-t { flex:1; font-size:13.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dash-conv .dc-d { font-size:11.5px; color:var(--text-secondary); white-space:nowrap; }
  .dash-empty { color:var(--text-secondary); font-size:13px; padding:4px 2px; }
  /* PORTEFEUILLE (favoris) + DERNIERS ÉVÉNEMENTS — la première chose vue au login (15/09) */
  .dash { max-width:1180px; }
  .pf-grid { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; margin-top:22px; }
  @media (min-width:1000px){ .pf-grid { grid-template-columns:minmax(0,1fr); } }
  .pf-grid > .card { margin:0; }
  .pf-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:8px; }
  .pf-head h3 { margin:0; font-size:15px; }
  .pf-sum { display:flex; gap:6px; flex-wrap:wrap; font-size:12px; }
  .pf-sum span { border:1px solid var(--line); border-radius:10px; padding:2px 8px; color:var(--text-secondary); }
  .pf-sum span.bad { color:var(--status-critical); border-color:var(--status-critical); }
  .pf-sum span.warn { color:var(--status-watch); border-color:var(--status-watch); }
  .pf-head { flex-wrap:wrap; }
  .pf-sum span.ok { color:var(--status-ok); border-color:var(--status-ok); }
  .sig-card { margin-bottom:14px; }
  /* Carte du score (app, 02/10) : SIGNAUX en pied de la colonne de gauche ; ligne « Position dans le secteur ». */
  .sc-app .sc-sigs { margin-top:16px; padding-top:12px; border-top:1px solid var(--line); text-align:left; grid-column:1 / -1; }
  .sc-app .sc-sigs .sc-mini { display:flex; justify-content:space-between; align-items:center; gap:8px; }
  .sc-app .sc-sigsum { display:inline-flex; gap:8px; font-size:11.5px; font-weight:600; text-transform:none; letter-spacing:0; }
  .sc-app .sc-sigsum .bad { color:var(--status-critical); } .sc-app .sc-sigsum .warn { color:var(--status-watch); } .sc-app .sc-sigsum .ok { color:var(--status-ok); }
  .sc-app .sc-sigs .sig-row { padding:6px 2px; font-size:12.5px; gap:8px; }
  .sc-app .sc-signone { font-size:12.5px; margin:4px 0 0; }
  .sc-app .sc-checks i.mid { background:var(--text-secondary); opacity:.45; }
  .sc-app .sc-checks b small { font-weight:400; }
  .sc-app .sc-secrow .sc-xv { white-space:nowrap; }
  .sc-app .sc-secrow .spin { width:12px; height:12px; }
  /* Fenêtre 10 ans des comptes : bouton « + N exercices antérieurs » dans l'en-tête des cartes */
  .cardh-act { display:inline-flex; align-items:center; gap:8px; flex-wrap:wrap; justify-content:flex-end; }
  .fin-older { font-size:12px; padding:4px 10px; white-space:nowrap; }
  /* CTA d'onglet → bulle « Demander à Idonis » pré-remplie : un éclat signale où la question est arrivée */
  .askwrap.ask-flash .askpop { animation:askflash 1.2s ease-out; }
  @keyframes askflash { 0% { box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent); } 100% { box-shadow:0 0 0 14px transparent; } }
  .sig-row { display:flex; align-items:baseline; gap:10px; padding:7px 4px; border-top:1px solid var(--line); font-size:13px; color:var(--text-primary); text-decoration:none; }
  .sig-row.click, a.sig-row { cursor:pointer; } .sig-row.click:hover, a.sig-row:hover { background:color-mix(in srgb, var(--text-secondary) 6%, transparent); }
  .sig-dot { font-size:12px; flex:none; } .sig-red { color:var(--status-critical); } .sig-orange { color:var(--status-watch); } .sig-info { color:var(--text-secondary); } .sig-good { color:var(--status-ok); }
  .sig-l { flex:1 1 auto; } .sig-go { color:var(--text-secondary); flex:none; }
  table.pf { width:100%; table-layout:fixed; border-collapse:collapse; font-size:13px; }
  /* Largeurs FIXES : la somme doit laisser vivre la colonne « Société » ET contenir les boutons
     d'action (retour fondateur 22/09 : la table glissait de 6 px et « Ouvrir la fiche » était coupé —
     c.-à-d. le bouton débordait sa colonne de 118 px). En dessous de 1 000 px la colonne « Société »
     tombait sous 130 px (noms tronqués) : on passe alors en CARTES, mesuré au navigateur. */
  table.pf col.c-name { width:auto; } table.pf col.c-q { width:100px; } table.pf col.c-ca { width:112px; }
  table.pf col.c-eb { width:104px; } table.pf col.c-fl { width:180px; }
  table.pf .pf-name { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  table.pf td.fl { white-space:normal; }
  table.pf th { font-size:11px; text-transform:uppercase; letter-spacing:.03em; color:var(--text-secondary); font-weight:600;
                padding:6px 8px; border-bottom:1px solid var(--line); text-align:left; white-space:nowrap; }
  table.pf td { padding:8px 8px; border-bottom:1px solid var(--line); vertical-align:middle; white-space:normal; text-align:left; }
  table.pf td.num, table.pf th.num { text-align:right; white-space:nowrap; }
  table.pf tr.click { cursor:pointer; } table.pf tr.click:hover td { background:color-mix(in srgb, var(--text-secondary) 6%, transparent); }
  table.pf tr.sev-red td:first-child { box-shadow:inset 3px 0 0 var(--status-critical); }
  table.pf tr.sev-orange td:first-child { box-shadow:inset 3px 0 0 var(--status-watch); }
  /* Assez large pour la langue la plus LONGUE (EN « Open the company → » 144 px + la corbeille) :
     une colonne calée sur le français coupait le bouton en anglais. */
  table.pf col.c-op { width:196px; }
  table.pf tr.open td, table.xl tr.open td { background:color-mix(in srgb, var(--text-secondary) 6%, transparent); border-bottom-color:transparent; }
  table.pf tr.pf-detail td, table.xl tr.pf-detail td { padding:0 8px 10px; }
  /* Explorer : détail déplié (même carte que le portefeuille) */
  table.xl tr.pf-detail td { text-align:left; white-space:normal; }
  /* le détail reste dans la ZONE VISIBLE quand le tableau défile horizontalement (carte à droite) */
  .listpane .tablewrap { container-type:inline-size; }
  table.xl tr.pf-detail .pf-detail-in { position:sticky; left:8px; width:calc(100cqw - 16px); box-sizing:border-box; }
  .xl-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(190px, 1fr)); gap:10px 18px; }
  .xl-it > div { font-size:13px; }
  table.xl .pf-actw { justify-content:flex-end; }
  /* boutons de ligne : deux CARRÉS identiques (30 px) — flèche = fiche, tuile Idonis = chat */
  table.xl .pf-actw { gap:6px; }
  table.xl .xl-ic { width:30px; height:30px; padding:0; margin:0; border-radius:7px; display:inline-flex;
     align-items:center; justify-content:center; line-height:0; cursor:pointer; flex:none;
     border:1px solid var(--line); background:var(--surface-1); color:var(--text-secondary); }
  table.xl .xl-ic:hover { color:var(--ink); border-color:var(--ink); }
  table.xl .xl-ic .ic { width:16px; height:16px; }
  /* tuile Idonis en version CLAIRE (trait orange sur fond clair) : 50 tuiles pleines faisaient une colonne
     sombre qui écrasait les données. Même poids visuel que la flèche. */
  table.xl .xl-ic.xl-ai .ai-mark { --sz:28px; background:none; border-radius:6px; }
  table.xl .xl-ic.xl-ai:hover { border-color:var(--accent); }
  /* discrets au repos ; SEUL le bouton survolé (ou focalisé) change — fondateur 24/09 : au survol de la ligne,
     les deux boutons changeaient ensemble. Pleins sur la ligne dépliée et toujours au tactile. */
  @media (hover:hover) {
    table.xl .xl-ic { opacity:.5; transition:opacity .12s, border-color .12s, color .12s; }
    table.xl .xl-ic:hover, table.xl .xl-ic:focus-visible, table.xl tr.open .xl-ic { opacity:1; }
  }
  /* survol LÉGER de la ligne entière (cellule collante de l'étoile comprise) */
  table.xl tbody tr[data-num] td { transition:background-color .12s; }
  table.xl tbody tr[data-num]:hover td { background:color-mix(in srgb, var(--accent) 8%, var(--surface-1)); }
  /* nom de société lisible à GAUCHE (la règle globale aligne tout à droite sauf la 1re colonne) */
  table.xl td.wrap, table.xl th.xl-l { text-align:left; }
  .pf-detail-in { background:var(--surface-2); border:1px solid var(--line); border-radius:10px; padding:10px 12px; }
  .pf-detail-h { font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:var(--text-secondary); margin-bottom:4px; }
  .pf-open { font-size:12px; padding:3px 9px; white-space:nowrap; }
  /* Actions d'une ligne : ouvrir (nommé) + retirer (icône). Une seule fois, sur la ligne. */
  .pf-actw { display:flex; justify-content:flex-end; align-items:center; gap:6px; }
  .pf-del { padding:3px 6px; line-height:0; color:var(--text-secondary); }
  .pf-del .ic-inl { width:15px; height:15px; margin:0; vertical-align:0; color:inherit; }
  @media (hover:hover){ .pf-del:hover { color:var(--status-critical); border-color:var(--status-critical); } }
  .pf-tabs { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
  .pf-tabs button { background:none; border:none; color:var(--text-secondary); font-size:12px; padding:5px 10px; cursor:pointer; }
  .pf-tabs button.on { background:var(--surface-2); color:var(--text-primary); }
  table.pf .pf-name { font-weight:600; }
  table.pf .pf-sub { font-size:11.5px; color:var(--text-secondary); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .pf-flag { font-size:11px; border-radius:8px; padding:1px 7px; white-space:nowrap; }
  .pf-flag.bad { color:var(--status-critical); border:1px solid var(--status-critical); }
  .pf-flag.warn { color:var(--status-watch); border:1px solid var(--status-watch); }
  .pf-flag.up { color:var(--status-ok); border:1px solid var(--status-ok); }
  /* ÉCRAN ÉTROIT — < 1 000 px (retour fondateur 16/09 : la colonne « Entreprise » disparaissait, largeurs fixes > viewport) :
     le tableau devient une liste de CARTES — nom + dernier événement sur toute la largeur, puis
     quotation · CA · EBITDA (libellés via data-l), puis les signaux ; le bouton « Ouvrir » est retiré
     (la ligne dépliée le porte déjà). Même DOM, même données : uniquement de la mise en page. */
  @media (max-width:1000px){
    table.pf, table.pf tbody { display:block; min-width:0; }        /* la règle globale table{min-width:640px} ferait déborder */
    table.pf thead, table.pf colgroup { display:none; }
    table.pf tr.click { display:grid; grid-template-columns:auto 1fr 1fr; gap:4px 12px; align-items:end;
      padding:10px 10px 10px 12px; border-bottom:1px solid var(--line); }
    table.pf tr.click td { display:block; padding:0; border:none; min-width:0; }
    table.pf tr.click td:first-child { grid-column:1 / -1; box-shadow:none; position:static; background:none; }  /* pas de colonne collante en carte */
    table.pf tr.sev-red { box-shadow:inset 3px 0 0 var(--status-critical); }
    table.pf tr.sev-orange { box-shadow:inset 3px 0 0 var(--status-watch); }
    table.pf tr.click td.num::before { content:attr(data-l); display:block; font-size:10px; text-transform:uppercase;
      letter-spacing:.03em; color:var(--text-secondary); font-weight:600; margin-bottom:1px; }
    table.pf tr.click td.fl { grid-column:1 / -1; display:flex; flex-wrap:wrap; gap:4px; }
    table.pf tr.click td.fl:empty { display:none; }
    /* les actions RESTENT en carte (le panneau déplié ne les porte plus) : ouvrir + retirer, à droite */
    table.pf tr.click td.pf-act { grid-column:1 / -1; margin-top:4px; }
    table.pf tr.click td.pf-act .pf-actw { gap:10px; } table.pf tr.click td.pf-act .pf-del { padding:6px 8px; }
    table.pf .pf-name, table.pf .pf-sub { white-space:normal; }
    table.pf tr.pf-detail:not([hidden]), table.pf tr.pf-detail td { display:block; }   /* [hidden] reste replié */
    table.pf tr.pf-detail td { padding:0 0 10px; }
    table.pf tr.open { border-bottom-color:transparent; background:color-mix(in srgb, var(--text-secondary) 6%, transparent); }
    table.pf tr.click:hover td, table.pf tr.open td { background:none; }   /* le fond va sur la carte, pas par cellule */
  }
  /* Événements du portefeuille = les lignes de l'onglet « Actualité » (.ax-item), pas une 2e grammaire :
     mêmes filets de gravité, même colonne de date, mêmes puces de type (retour fondateur 22/09). */
  .pf-evlist { margin-top:6px; } .pf-evlist .ax-item { margin:5px 0; background:var(--surface-1); }
  /* ── Liste plus calme (fondateur 03/10 : « chargée visuellement », « surcharge quand on déplie ») ── */
  table.pf .pf-qc { white-space:nowrap; } .pf-yr { font-size:11px; color:var(--text-secondary); margin-left:6px; font-variant-numeric:tabular-nums; }
  /* événements dépliés : des LIGNES séparées d'un filet, plus des cartes encadrées les unes sous les autres */
  .pf-detail-in .pf-evlist { margin-top:2px; }
  .pf-detail-in .pf-evlist .ax-item { margin:0; border:0; border-radius:0; background:none; border-left:2px solid transparent; border-bottom:1px solid var(--line); }
  .pf-detail-in .pf-evlist .ax-item:last-of-type { border-bottom:0; }
  .pf-detail-in .pf-evlist .ax-item.sev-distress { border-left-color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 4%, transparent); }
  .pf-detail-in .pf-evlist .ax-item.sev-warn { border-left-color:var(--status-watch); }
  .pf-detail-in .pf-evlist .ax-row { grid-template-columns:56px 20px minmax(0,1fr); padding:8px 6px; font-size:13px; }
  .pf-detail-in .pf-evlist .ax-date b { white-space:nowrap; }
  .pf-detail-in .pf-evlist .ax-chip { font-size:11px; padding:0 7px; margin:3px 4px 0 0; display:inline-block; }
  .pf-detail-in .pf-evlist .ax-type { font-weight:550; }
  .pf-detail-in .pf-evlist .ax-date b { font-size:12px; }
  .pf-detail-in .pf-evlist .ax-ico { font-size:14px; opacity:.85; }
  .pf-detail-in { background:var(--surface-1); padding:6px 12px 8px; }
  .pf-detail-in .pf-note { font-size:12.5px; padding:4px 0 8px; border-bottom:1px solid var(--line); margin-bottom:4px; }
  .pf-detail-in .pf-detail-h { margin:6px 0 0; }
  .pf-detail-top { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; border-bottom:1px solid var(--line); margin-bottom:4px; }
  .pf-detail-top .pf-note { border-bottom:0; margin:0; flex:1; min-width:0; }
  .pf-del-m { display:none !important; align-items:center; gap:4px; font-size:12px; color:var(--text-secondary); }
  .pf-del-m:hover { color:var(--status-critical); }
  .pf-evmore { display:inline-block; margin:8px 6px 2px; font-size:12.5px; font-weight:600; color:var(--ink); text-decoration:none; }
  @media (max-width:1000px){
    /* CARTE en trois lignes : nom + lettre · dernier événement · chiffres + actions */
    table.pf tr.click { grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto; grid-template-areas:"name name q" "ca eb act" "fl fl fl";
      gap:6px 12px; align-items:center; padding:12px 12px 12px 14px; }
    table.pf tr.click td:nth-child(1) { grid-area:name; grid-column:auto; }
    table.pf tr.click td:nth-child(2) { grid-area:q; justify-self:end; }
    table.pf tr.click td:nth-child(3) { grid-area:ca; } table.pf tr.click td:nth-child(4) { grid-area:eb; }
    table.pf tr.click td.fl { grid-area:fl; grid-column:auto; }
    table.pf tr.click td.pf-act { grid-area:act; grid-column:auto; margin-top:0; justify-self:end; }
    table.pf .pf-name { font-size:14.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    table.pf .pf-sub { white-space:normal; overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; font-size:12px; line-height:1.35; }
    table.pf tr.click td.num { text-align:left; font-size:13px; font-variant-numeric:tabular-nums; }
    table.pf tr.click td.num::before { display:block; margin:0 0 1px; font-size:9.5px; }
    table.pf tr.click td.num { overflow:hidden; text-overflow:ellipsis; }
    /* mobile : « ouvrir » = une flèche ronde ; « retirer » vit dans le panneau déplié (.pf-del-m) */
    table.pf .pf-open { width:34px; height:34px; padding:0; border-radius:50%; display:inline-flex; align-items:center; justify-content:center;
      font-size:16px; font-weight:700; color:var(--ink); border:1px solid var(--line); background:var(--surface-1); }
    table.pf .pf-open-l { display:none; }
    table.pf tr.click .pf-del { display:none; }
    .pf-del-m { display:inline-flex !important; }
    table.pf .pf-yr { display:none; }
  }

  .pf-evt { font-size:12.5px; color:var(--text-primary); }
  .ax-item.click { cursor:pointer; }
  @media (hover:hover){ .ax-item.click:hover { border-color:var(--line-strong); } }
  .pf-star { background:none; border:none; color:var(--status-watch); cursor:pointer; font-size:15px; padding:0 4px; }

  /* ───────────── Page Chat (sidebar conversations + fil actif) ───────────── */
  .chatpage { display:grid; grid-template-columns:260px minmax(0,1fr); gap:16px;
     height:calc(100vh - 180px); height:calc(100dvh - 180px); min-height:420px; }
  .chat-side { display:flex; flex-direction:column; background:var(--surface-1); border:1px solid var(--line); border-radius:12px; overflow:hidden; }
  .chat-side-top { padding:12px; border-bottom:1px solid var(--line); display:flex; gap:8px; align-items:center; }
  .chat-newbtn { flex:1; padding:9px 10px; border-radius:9px; background:var(--ink); color:var(--text-on-ink); border:0; font-size:13.5px; font-weight:600; cursor:pointer;
     display:inline-flex; align-items:center; justify-content:center; gap:8px; }
  .chat-newbtn:hover { filter:brightness(1.08); }
  .chat-side-close { display:none; flex:none; width:40px; height:40px; border-radius:9px; background:var(--surface-2); border:1px solid var(--line); color:var(--text-primary); font-size:16px; cursor:pointer; }
  /* bouton ☰ (mobile) pour ouvrir la liste des conversations — caché sur desktop */
  .cm-menu { display:none; flex:none; width:34px; height:34px; border-radius:8px; background:var(--surface-2); border:1px solid var(--line); color:var(--text-primary); font-size:16px; cursor:pointer; align-items:center; justify-content:center; }
  .chat-convs { flex:1; overflow-y:auto; padding:8px; display:flex; flex-direction:column; gap:2px; }
  .chat-convs-empty { color:var(--text-secondary); font-size:12.5px; text-align:center; padding:14px 8px; }
  .chat-main { display:flex; flex-direction:column; border-radius:14px; overflow:hidden; min-width:0; }   /* + .ai-frame (signature) */
  .chat-main.ai-frame { border-color:var(--line); }   /* le filet irisé de l'en-tête et la saisie portent la signature */
  /* En-tête de l'agent (revamp fondateur 02/10) : le bandeau encre plein devient PAPIER, lavé d'un voile irisé
     très léger et souligné d'un filet irisé qui glisse lentement — la page dit « IA » sans assombrir le fil. */
  .chat-main-head { position:relative; display:flex; align-items:center; gap:12px; padding:12px 16px 13px;
     background:linear-gradient(100deg, color-mix(in srgb, var(--ai-c1) 7%, var(--surface-1)), color-mix(in srgb, var(--ai-c2) 6%, var(--surface-1)) 30%,
       color-mix(in srgb, var(--ai-c3) 4%, var(--surface-1)) 60%, color-mix(in srgb, var(--ai-c5) 6%, var(--surface-1)));
     color:var(--text-primary); }
  .chat-main-head::after { content:''; position:absolute; left:0; right:0; bottom:0; height:2px;
     background:linear-gradient(90deg, var(--ai-iris-lin), var(--ai-c1)); background-size:200% 100%; animation:aiSlide 12s linear infinite; }
  @keyframes aiSlide { to { background-position:-200% 0; } }
  .chat-main-head .ai-mark { --sz:34px; box-shadow:-4px 0 12px -5px var(--ai-halo-l), 4px 0 12px -5px var(--ai-halo-r); }
  .chat-main-head .cm-title { font-size:15px; font-weight:700; letter-spacing:-.01em; }
  .chat-main-head .cm-title .ai-badge { margin-left:7px; font-size:10px; font-weight:700; letter-spacing:.06em; padding:1px 7px; border-radius:20px; vertical-align:2px;
     color:var(--ink); background:linear-gradient(var(--surface-1), var(--surface-1)) padding-box, linear-gradient(90deg, var(--ai-iris-lin)) border-box; border:1px solid transparent; }
  .cm-id { display:flex; align-items:center; gap:10px; min-width:0; }
  .cm-title { font-size:14px; line-height:1.15; }
  .cm-sub { font-size:11px; color:var(--text-secondary); line-height:1.2; margin-top:2px; }
  /* ── MARQUE DE L'AGENT (composant unique, aiMark) = le logo pierre de touche : tuile encre, trait OCRE.
     Sur une surface encre, la tuile passe papier, le trait reste ocre. Pendant un traitement (.busy) le trait
     se TRACE en boucle — l'épreuve en cours. La nav utilise #i-mark-mono (couleur courante). ── */
  .ai-mark { --sz:30px; width:var(--sz); height:var(--sz); border-radius:22%; flex:none; position:relative;   /* rx du logo (12/64) */
     display:inline-flex; align-items:center; justify-content:center; color:var(--text-on-ink); vertical-align:middle;
     background:var(--ink); }
  .ai-mark svg { position:absolute; inset:0; width:100%; height:100%; color:var(--accent); }
  .ai-mark.sm { --sz:24px; }
  .ai-mark.xs { --sz:18px; }
  .ai-mark.lg { --sz:56px; }
  .ai-mark.busy .mk-long, .ai-mark.busy .mk-short { stroke-dasharray:100; animation:mkdraw 1.4s ease-in-out infinite; }
  .ai-mark.busy .mk-short { animation-delay:.25s; }
  @keyframes mkdraw { 0% { stroke-dashoffset:100; opacity:1; } 55% { stroke-dashoffset:0; opacity:1; } 85%,100% { stroke-dashoffset:0; opacity:.25; } }
  @media (prefers-reduced-motion:reduce){ .ai-mark.busy .mk-long, .ai-mark.busy .mk-short { animation:none; } }
  /* nom de l'agent (à côté de la marque) : « Idonis », tout court — partout le même rendu */
  .ai-name { font-weight:700; letter-spacing:-.01em; }
  /* ── CTA IA (aiCta) : UNE carte par page, cadrée par .ai-frame (filet encre). Boutons de question :
     le premier est plein encre, les autres en filet. ── */
  .ai-cta { display:flex; gap:14px; align-items:flex-start; margin:14px 0; padding:16px 18px 15px; border-radius:14px; overflow:hidden; }
  .ai-cta > * { position:relative; z-index:1; }
  .ai-cta .ac-body { flex:1; min-width:0; }
  .ai-cta .ac-kicker { font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; margin-bottom:2px; color:var(--accent-on-ink); }
  .ai-cta h4 { margin:0 0 3px; font-size:15px; font-weight:700; letter-spacing:-.01em; }
  .ai-cta p { margin:0 0 10px; font-size:13px; color:color-mix(in srgb, var(--text-on-ink) 78%, transparent); line-height:1.5; }
  .ai-cta .ac-qs { display:flex; flex-wrap:wrap; gap:7px; }
  .ai-cta .ac-q { display:inline-flex; align-items:center; gap:6px; background:color-mix(in srgb, var(--text-on-ink) 9%, transparent); border:1px solid color-mix(in srgb, var(--text-on-ink) 30%, transparent); color:var(--text-on-ink);
     border-radius:999px; padding:6px 13px; cursor:pointer; text-align:left; max-width:100%; font:inherit; font-size:12.5px;
     transition:border-color .15s, background .15s, transform .15s; }
  .ai-cta .ac-q:hover { border-color:var(--text-on-ink); background:color-mix(in srgb, var(--text-on-ink) 16%, transparent); transform:translateY(-1px); }
  .ai-cta .ac-q.primary { background:var(--text-on-ink); color:var(--ink); border-color:transparent; font-weight:600;
     }
  .ai-cta .ac-q.primary:hover { filter:brightness(1.1); }
  .ai-cta .ac-q::after { content:'→'; opacity:.65; }
  .ai-cta.compact { padding:11px 14px 11px 16px; margin:10px 0; } .ai-cta.compact h4 { font-size:14px; } .ai-cta.compact p { margin-bottom:8px; }
  /* variante LATÉRALE (colonne 1/4 à droite d'une carte : Synthèse/Signaux, Personnes/Dirigeants) : marque
     en haut, questions empilées ; hauteur NATURELLE (une carte voisine étirée sur du vide était laide). */
  .ai-cta.side { display:grid; grid-template-columns:auto 1fr; grid-template-rows:auto auto auto; gap:2px 10px; align-items:center;
     margin:0; padding:13px 14px 12px; }
  .ai-cta.side .ai-mark { --sz:28px; grid-row:1/3; grid-column:1; align-self:center; }
  .ai-cta.side .ac-body { display:contents; }      /* kicker · titre · questions deviennent des cellules de la grille */
  .ai-cta.side .ac-kicker { grid-row:1; grid-column:2; margin:0; font-size:10px; }
  .ai-cta.side h4 { grid-row:2; grid-column:2; margin:0; font-size:13.5px; line-height:1.3; }
  .ai-cta.side p { display:none; }                 /* compact : la phrase est de trop en colonne */
  .ai-cta.side .ac-qs { grid-row:3; grid-column:1/-1; margin-top:9px; gap:6px; }
  .ai-cta.side .ac-q { padding:5px 11px; font-size:12px; }
  .ai-split { display:grid; grid-template-columns:3fr 1fr; gap:12px; align-items:stretch; margin-bottom:14px; }
  .ai-split > * { min-width:0; } .ai-split > .card, .ai-split > div > .card { margin:0; height:100%; box-sizing:border-box; }
  .ai-split:has(> div:first-child:empty) { grid-template-columns:1fr; }
  @media (max-width:900px){ .ai-split { grid-template-columns:1fr; } }
  /* variante BANDEAU (en tête d'un onglet large : Comptes, Analyse, Actualité) : une ligne, titre + questions,
     pas de texte — visible d'emblée sans voler de hauteur au tableau. */
  .ai-cta.strip { align-items:center; padding:10px 14px 10px 16px; margin:0 0 12px; gap:12px; }
  .ai-cta.strip .ac-body { display:flex; align-items:center; gap:10px 16px; flex-wrap:wrap; }
  .ai-cta.strip .ac-kicker, .ai-cta.strip p { display:none; }
  .ai-cta.strip h4 { margin:0; font-size:14px; }
  .ai-cta.strip .ac-qs { margin-left:auto; }
  @media (max-width:680px){ .ai-cta:not(.side):not(.strip) { flex-direction:column; gap:10px; } .ai-cta.strip .ac-qs { margin-left:0; } }
  /* ── SIGNATURE IA « IRISÉE » (fondateur 02/10) : la surface encre des bandeaux de la fiche concurrençait le
     sous-menu. Bandeau PAPIER cerclé d'un liseré irisé (encre → violet → rose → ocre → sarcelle, teintes
     sourdes, pas d'arc-en-ciel criard) qui tourne lentement, et un halo à 20 % : on voit que c'est l'IA sans
     qu'elle crie. Même anneau autour de « Demander à Idonis ». Exception consignée à la charte §6.5. ── */
  @property --ai-a { syntax:'<angle>'; initial-value:0deg; inherits:false; }
  @keyframes aiSpin { to { --ai-a:360deg; } }
  /* anneau = fond « border-box » sous un fond « padding-box » ; halo = ombre bicolore très douce (sous le fond) */
  .ai-cta.ai-soft { background:linear-gradient(var(--surface-1), var(--surface-1)) padding-box,
      conic-gradient(from var(--ai-a), var(--ai-iris)) border-box;
     border:1.5px solid transparent; color:var(--text-primary);
     box-shadow:-6px 0 18px -10px rgba(124,92,214,.45), 6px 0 18px -10px rgba(58,163,148,.45);
     animation:aiSpin 10s linear infinite; }
  .ai-cta.ai-soft .ai-mark { background:var(--ink); --sz:26px; }
  .ai-cta.ai-soft.strip { padding:8px 12px; margin:0 0 14px; }
  .ai-cta.ai-soft.strip .ac-kicker { display:block; margin:0; color:var(--accent-text, var(--accent)); white-space:nowrap; }
  .ai-cta.ai-soft .ac-q { background:var(--surface-1); color:var(--ink); border:1px solid var(--line); }
  .ai-cta.ai-soft .ac-q:hover { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 5%, var(--surface-1)); }
  .ai-cta.ai-soft .ac-q.primary { background:var(--surface-1); color:var(--ink); border-color:color-mix(in srgb, var(--ink) 55%, transparent); font-weight:600; }
  .askwrap .askbtn, .askwrap .askbtn:hover { background:linear-gradient(var(--ink), var(--ink)) padding-box,
      conic-gradient(from var(--ai-a), var(--ai-iris)) border-box;
     border:2px solid transparent; box-shadow:-5px 0 14px -6px rgba(124,92,214,.5), 5px 0 14px -6px rgba(58,163,148,.5);
     animation:aiSpin 10s linear infinite; }
  .askwrap .askbtn:hover { background:linear-gradient(var(--ink-hover, var(--ink)), var(--ink-hover, var(--ink))) padding-box,
      conic-gradient(from var(--ai-a), var(--ai-iris)) border-box; }
  @media (prefers-reduced-motion:reduce){ .ai-cta.ai-soft, .askwrap .askbtn { animation:none; } }
  /* ── Item de conversation (convItem) : partagé sidebar chat ⟷ tableau de bord ── */
  /* Item de conversation (revamp 02/10 : « très dense, pas visuel ») : pastille de la société principale (initiales),
     titre sur 2 lignes, heure à droite, sociétés en une ligne discrète ; la conversation ouverte porte un filet irisé. */
  .conv-item { position:relative; display:flex; align-items:flex-start; gap:10px; padding:9px 10px; border-radius:11px; cursor:pointer; color:var(--text-primary);
     border:1px solid transparent; min-width:0; transition:background-color .12s, border-color .12s; }
  .conv-item:hover { background:var(--surface-2); }
  .conv-item.on { background:var(--surface-1); border-color:var(--line); box-shadow:0 1px 3px color-mix(in srgb, var(--text-primary) 8%, transparent); }
  .conv-item.on::before { content:''; position:absolute; left:-1px; top:9px; bottom:9px; width:3px; border-radius:3px;
     background:linear-gradient(180deg, var(--ai-iris-lin)); }
  .conv-item .ci-av { --sz:30px; width:var(--sz); height:var(--sz); border-radius:9px; flex:none; display:inline-flex; align-items:center; justify-content:center;
     font-size:11px; font-weight:700; letter-spacing:.02em; color:var(--ink); background:var(--tint-ink); border:1px solid color-mix(in srgb, var(--ink) 14%, transparent); }
  .conv-item .ci-av.h1 { background:color-mix(in srgb, var(--ai-c1) 13%, var(--surface-1)); color:color-mix(in srgb, var(--ai-c1) 70%, var(--text-primary)); }
  .conv-item .ci-av.h2 { background:color-mix(in srgb, var(--ai-c2) 13%, var(--surface-1)); color:color-mix(in srgb, var(--ai-c2) 70%, var(--text-primary)); }
  .conv-item .ci-av.h3 { background:color-mix(in srgb, var(--ai-c3) 13%, var(--surface-1)); color:color-mix(in srgb, var(--ai-c3) 70%, var(--text-primary)); }
  .conv-item .ci-av.h4 { background:color-mix(in srgb, var(--ai-c4) 16%, var(--surface-1)); color:color-mix(in srgb, var(--accent-text) 85%, var(--text-primary)); }
  .conv-item .ci-av.h5 { background:color-mix(in srgb, var(--ai-c5) 13%, var(--surface-1)); color:color-mix(in srgb, var(--ai-c5) 70%, var(--text-primary)); }
  .conv-item .ci-av .ai-mark { --sz:30px; border-radius:9px; }
  .conv-item .ci-body { flex:1; min-width:0; }
  .conv-item .ci-t { font-size:13px; font-weight:550; line-height:1.35; overflow:hidden;
     display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow-wrap:anywhere; }
  .conv-item .ci-when { flex:none; margin-left:auto; padding-left:8px; font-size:11px; color:var(--text-secondary); font-variant-numeric:tabular-nums; white-space:nowrap; }
  .conv-item:hover .ci-when { visibility:hidden; }   /* le bouton supprimer prend sa place au survol (sidebar) */
  .conv-item.card-like:hover .ci-when { visibility:visible; }
  .conv-item .ci-m { display:flex; align-items:center; gap:4px; font-size:11.5px; color:var(--text-secondary); margin-top:3px; min-width:0; white-space:nowrap; }
  .conv-item .ci-cos { min-width:0; overflow:hidden; text-overflow:ellipsis; }
  .conv-item .ci-m .ic-inl { width:12px; height:12px; flex:none; opacity:.7; }
  .conv-item .ci-m .ci-n { flex:none; }
  .conv-item .ci-del { opacity:0; position:absolute; right:6px; bottom:7px; background:var(--surface-1); border:1px solid var(--line); border-radius:6px; color:var(--text-secondary);
     cursor:pointer; font-size:12px; padding:2px 5px; line-height:1; }
  .conv-item:hover .ci-del, .conv-item .ci-del:focus-visible { opacity:1; } .conv-item .ci-del:hover { color:var(--status-critical); border-color:var(--status-critical); }
  @media (hover:none){ .conv-item .ci-del { opacity:.6; } }
  .conv-item.card-like { background:var(--surface-1); border-color:var(--line); padding:10px 13px; }
  .conv-item.card-like:hover { border-color:var(--ink); }
  .conv-group { font-size:10.5px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--text-tertiary, var(--text-secondary)); padding:14px 10px 5px; }
  .conv-group:first-child { padding-top:4px; }
  .chat-convs { gap:3px; }
  /* recherche dans les conversations (titre + sociétés, côté client) */
  .chat-search { position:relative; padding:10px 12px 2px; }
  .chat-search input { width:100%; padding:8px 10px 8px 31px; border-radius:9px; border:1px solid var(--line); background:var(--surface-2);
     color:var(--text-primary); font:inherit; font-size:13px; }
  .chat-search input:focus { outline:none; border-color:var(--ink); background:var(--surface-1); }
  .chat-search .ic { position:absolute; left:22px; top:50%; margin-top:4px; transform:translateY(-50%); width:15px; height:15px; color:var(--text-secondary); pointer-events:none; }
  .chat-newbtn { background:linear-gradient(var(--ink), var(--ink)) padding-box, conic-gradient(from var(--ai-a), var(--ai-iris)) border-box;
     border:2px solid transparent; animation:aiSpin 10s linear infinite; }
  .cm-right { margin-left:auto; display:flex; align-items:center; gap:10px; }
  .cm-cos { background:var(--surface-1); border:1px solid var(--line); color:var(--ink); border-radius:20px;
     padding:5px 12px; font-size:12px; cursor:pointer; white-space:nowrap; display:inline-flex; align-items:center; gap:6px; }
  .cm-cos:hover { border-color:var(--ink); }
  .cm-bal { font-size:11.5px; color:var(--text-secondary); white-space:nowrap; }
  /* Solde d'analyses = BOUTON (fondateur 02/10) : mini-jauge du mois + nombre ; ouvre le détail (chatBalOpen). */
  button.cm-bal { display:inline-flex; align-items:center; gap:8px; padding:5px 11px 5px 10px; border-radius:20px; cursor:pointer;
     background:var(--surface-1); border:1px solid var(--line); color:var(--text-primary); font:inherit; font-size:12px; }
  button.cm-bal:hover { border-color:var(--ink); }
  button.cm-bal b { font-weight:700; font-variant-numeric:tabular-nums; }
  button.cm-bal .cb-gauge { width:34px; height:5px; border-radius:3px; background:var(--surface-3, var(--line)); overflow:hidden; flex:none; }
  button.cm-bal .cb-gauge i { display:block; height:100%; border-radius:3px; background:linear-gradient(90deg, var(--ai-iris-lin)); }
  button.cm-bal.low { border-color:var(--status-watch); } button.cm-bal.low b { color:var(--status-watch); }
  button.cm-bal .cb-chev { color:var(--text-secondary); font-size:10px; }
  /* Détail du solde (modale) */
  .credmod { padding:4px 2px; width:min(460px, 100%); max-width:100%; }
  #genmodal_body:has(.credmod) { width:auto; max-width:min(520px, calc(100vw - 24px)); }   /* la carte épouse le détail */
  .credmod h3 { margin:0 0 2px; font-size:17px; display:flex; align-items:center; gap:9px; }
  .credmod .cr-hero { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin:12px 0 4px; }
  .credmod .cr-hero b { font-size:30px; line-height:1; font-weight:750; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
  .credmod .cr-approx { font-size:12.5px; color:var(--text-secondary); margin:0 0 4px; }
  .credmod .cr-sec { border:1px solid var(--line); border-radius:11px; padding:11px 13px; margin-top:10px; background:var(--surface-1); }
  .credmod .cr-row { display:flex; justify-content:space-between; gap:10px; font-size:13px; }
  .credmod .cr-row b { font-variant-numeric:tabular-nums; }
  .credmod .cr-row .muted { font-size:11.5px; }
  .credmod .cr-bar { height:9px; border-radius:6px; background:var(--surface-2); border:1px solid var(--line); overflow:hidden; margin:8px 0 5px; }
  .credmod .cr-bar i { display:block; height:100%; background:linear-gradient(90deg, var(--ai-iris-lin)); border-radius:6px; }
  .credmod .cr-note { font-size:11.5px; color:var(--text-secondary); margin-top:10px; line-height:1.5; }
  .credmod .cr-packs { display:grid; grid-template-columns:repeat(auto-fit, minmax(120px, 1fr)); gap:8px; margin-top:8px; }
  .credmod .cr-pack { text-align:left; padding:10px 11px; border-radius:10px; cursor:pointer; background:var(--surface-1); color:var(--text-primary);
     border:1px solid var(--line); font:inherit; display:flex; flex-direction:column; gap:2px; }
  .credmod .cr-pack:hover { border-color:var(--ink); }
  .credmod .cr-pack b { font-size:14px; } .credmod .cr-pack span { font-size:11.5px; color:var(--text-secondary); }
  .credmod .cr-pack .cr-price { color:var(--ink); font-weight:700; font-size:13px; margin-top:3px; }
  .chat-msgs { flex:1; overflow-y:auto; overflow-x:hidden; padding:18px; display:flex; flex-direction:column; gap:14px; background:var(--surface-2); min-width:0; }
  /* width:100% + min-width:0 : l'état vide se BORNE au fil (sinon, centré par margin:auto dans la colonne
     flex, il débordait à droite sur mobile — retour fondateur 16/09). */
  .chat-empty { color:var(--text-secondary); font-size:14px; line-height:1.6; text-align:center; margin:auto; width:100%; max-width:640px; min-width:0; }
  .chat-empty > p:first-of-type, .chat-empty .ce-lead { max-width:420px; margin-left:auto; margin-right:auto; }
  .chat-empty .ai-mark { margin:0 auto 14px; }
  .chat-empty h4 { color:var(--text-primary); font-size:17px; margin:0 0 6px; letter-spacing:-.01em; }
  /* séparateur de jour dans le fil (comme une messagerie) + méta d'un tour (heure, crédits, sources) */
  .cm-daysep { align-self:center; font-size:11px; color:var(--text-secondary); background:var(--surface-1); border:1px solid var(--line);
     border-radius:999px; padding:2px 10px; margin:2px 0; }
  .cm-who { display:flex; align-items:baseline; gap:7px; font-size:12px; color:var(--text-secondary); min-width:0; }
  .cm-who .ai-name { font-size:12.5px; color:var(--text-primary); }
  .cm-who time { font-variant-numeric:tabular-nums; }
  .cm-foot { font-size:11px; color:var(--text-secondary); display:flex; gap:10px; flex-wrap:wrap; padding:0 2px; }
  .cm-upsell { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:8px 0 6px; padding:10px 12px; border-radius:10px; background:var(--tint-neutral); font-size:13px; }
  .cm-upsell .ic { flex:none; } .cm-upsell span { flex:1 1 220px; } .cm-upsell button { margin:0; }
  .cm-foot .cf-src { cursor:pointer; color:var(--ink); } .cm-foot .cf-src:hover { text-decoration:underline; }
  .cm-ucol { align-self:flex-end; max-width:82%; display:flex; flex-direction:column; align-items:flex-end; gap:3px; }
  .cm-ucol time { font-size:11px; color:var(--text-secondary); font-variant-numeric:tabular-nums; padding:0 4px; }
  /* messages */
  .cm { font-size:13.5px; line-height:1.6; padding:11px 14px; border-radius:13px; overflow-wrap:anywhere; animation:cmin .28s ease both;
        max-width:100%; min-width:0; }
  @keyframes cmin { from{opacity:0; transform:translateY(6px);} to{opacity:1; transform:none;} }
  /* bulle utilisateur : teinte signature translucide + texte clair (même palette que les cartes du
     tableau de bord) — plus de bleu plein à texte sombre, seul élément de l'app rendu ainsi. */
  .cm-user { max-width:100%; background:var(--tint-ink); color:var(--text-primary);
     border:1px solid color-mix(in srgb, var(--ink) 32%, transparent); border-bottom-right-radius:4px; white-space:pre-wrap; }
  .airow { display:flex; gap:10px; align-items:flex-start; align-self:flex-start; max-width:92%; min-width:0; }
  @media (max-width:640px){ .airow { max-width:100%; } .cm-ucol { max-width:92%; } }
  .airow .ai-mark { margin-top:1px; }
  .airow .col { display:flex; flex-direction:column; gap:6px; min-width:0; }
  .cm-assistant { background:var(--surface-1); border:1px solid color-mix(in srgb, var(--ink) 22%, transparent); border-bottom-left-radius:4px; }
  .cm-assistant b { color:var(--text-primary); }
  .cm code { font-family:ui-monospace,Menlo,Consolas,monospace; font-size:12px; background:var(--surface-3); padding:1px 4px; border-radius:4px; }
  .cm a { color:var(--ink); text-decoration:underline; overflow-wrap:anywhere; }
  /* titres markdown (#, ##, ###…) */
  /* éléments markdown rendus par marked à l'intérieur d'une bulle (.cm) */
  .cm > :first-child { margin-top:0; } .cm > :last-child { margin-bottom:0; }
  .cm p { margin:6px 0; }
  .cm h1, .cm h2, .cm h3, .cm h4, .cm h5, .cm h6 { font-weight:700; color:var(--text-primary); line-height:1.3; margin:12px 0 5px; overflow-wrap:anywhere; }
  .cm h1 { font-size:17px; } .cm h2 { font-size:15.5px; }
  .cm h3, .cm h4, .cm h5, .cm h6 { font-size:13.5px; color:var(--ink); }
  .cm ul, .cm ol { margin:6px 0; padding-left:22px; } .cm li { margin:2px 0; }
  .cm blockquote { margin:8px 0; padding:2px 12px; border-left:3px solid var(--ink);
     background:color-mix(in srgb, var(--ink) 6%, transparent); color:var(--text-secondary); border-radius:0 6px 6px 0; }
  .cm hr { border:0; border-top:1px solid var(--line); margin:12px 0; }
  .cm pre { background:var(--surface-3); border:1px solid var(--line); border-radius:8px; padding:10px 12px;
     overflow-x:auto; margin:8px 0; } .cm pre code { background:none; padding:0; font-size:12px; }
  /* tableaux rendus depuis le markdown */
  .cm-tablewrap { overflow-x:auto; width:0; min-width:100%; margin:8px 0 2px; -webkit-overflow-scrolling:touch; }   /* width:0+min-width:100% : ne pousse jamais la bulle */
  .cm table { border-collapse:collapse; font-size:12.5px; width:auto; min-width:100%; }
  .cm th, .cm td { border:1px solid var(--line); padding:5px 9px; text-align:left; }
  .cm th { background:color-mix(in srgb, var(--ink) 10%, transparent); color:var(--text-primary); font-weight:600; }
  .cm td.num, .cm th.num { text-align:right; font-variant-numeric:tabular-nums; }
  /* pastilles d'appels d'outils */
  .pills { display:flex; flex-wrap:wrap; gap:6px; }
  .pill { font-size:11.5px; background:color-mix(in srgb, var(--ink) 8%, transparent); border:1px solid var(--line); color:var(--text-secondary);
     border-radius:20px; padding:3px 10px; display:inline-flex; align-items:center; gap:5px; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  a.pill-link { color:var(--ink); cursor:pointer; text-decoration:none; }
  a.pill-link:hover { background:color-mix(in srgb, var(--ink) 18%, transparent); border-color:var(--ink); }
  /* pastille « action » cliquable (ouvre une modale : critères de recherche / type de tâche) */
  .pill-act { cursor:pointer; }
  .pill-act:hover { border-color:var(--ink); color:var(--text-primary); background:color-mix(in srgb, var(--ink) 14%, transparent); }
  .pill-act::after { content:'›'; margin-left:2px; opacity:.5; font-weight:700; }
  /* lignes de paramètres dans la modale de critères */
  .paramrow { display:flex; justify-content:space-between; gap:14px; padding:8px 2px; border-bottom:1px solid var(--line); }
  .paramrow:last-child { border-bottom:0; }
  .paramrow .pl { color:var(--text-secondary); font-size:12.5px; }
  .paramrow .pl small { display:block; color:var(--text-secondary); opacity:.7; font-size:11px; }
  .paramrow .pv { color:var(--text-primary); font-weight:600; font-size:13px; white-space:nowrap; }
  .rbapproach { color:var(--text-secondary); font-size:12px; margin:10px 0 2px; text-transform:uppercase; letter-spacing:.5px; }
  .cm-think { color:var(--text-secondary); font-size:12.5px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
  .cm-think .tdots span { animation:tblink 1.2s infinite; } .cm-think .tdots span:nth-child(2){animation-delay:.2s;} .cm-think .tdots span:nth-child(3){animation-delay:.4s;}
  .cm-think .cm-think-label { color:var(--text-primary); }
  .cm-tick { font-variant-numeric:tabular-nums; background:color-mix(in srgb, var(--ink) 10%, transparent); border:1px solid var(--line);
     color:var(--ink); border-radius:20px; padding:1px 8px; font-size:11.5px; animation:tickpulse 1s ease-in-out infinite; }
  .cm-stepn { font-size:11.5px; color:var(--text-secondary); }
  .cm-eta { color:var(--text-secondary); font-size:11px; margin-left:8px; }
  .cm-partial { margin-top:8px; opacity:.92; }
  .cm-cursor { display:inline-block; animation:cmblink 1s steps(2) infinite; color:var(--ink); }
  @keyframes cmblink { 50% { opacity:0; } }
  .cm-patience { margin-top:8px; font-size:12px; color:var(--text-secondary); line-height:1.5; opacity:.9;
     border-left:2px solid var(--line); padding-left:10px; }
  @keyframes tickpulse { 0%,100%{opacity:.65;} 50%{opacity:1;} }
  @keyframes tblink { 0%,60%,100%{opacity:.25;} 30%{opacity:1;} }
  /* modale « sociétés citées » */
  .coslist { display:flex; flex-direction:column; gap:8px; max-height:60vh; overflow-y:auto; }
  .cositem { display:flex; align-items:center; gap:11px; background:var(--surface-2); border:1px solid var(--line); border-radius:10px; padding:10px 12px; }
  .cositem .ci-ico { width:30px; height:30px; border-radius:8px; flex:none; display:flex; align-items:center; justify-content:center;
     background:color-mix(in srgb, var(--ink) 12%, transparent); font-size:15px; }
  .cositem .ci-main { flex:1; min-width:0; }
  .cositem .ci-name { font-size:13.5px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .cositem .ci-meta { font-size:11.5px; color:var(--text-secondary); }
  .cositem a.ci-link { font-size:12px; color:var(--ink); text-decoration:none; white-space:nowrap; }
  .cositem a.ci-link:hover { text-decoration:underline; }
  /* Saisie (revamp 02/10) : UNE barre cerclée du liseré irisé tournant (même signature que les bandeaux IA de la
     fiche), le bouton d'envoi = celui de « Demander à Idonis » (encre + anneau irisé). */
  .chat-input { padding:12px 14px 8px; border-top:1px solid var(--line); background:var(--surface-1); }
  .chat-compose { display:flex; gap:8px; align-items:flex-end; padding:5px 5px 5px 4px; border-radius:14px;
     background:linear-gradient(var(--surface-1), var(--surface-1)) padding-box, conic-gradient(from var(--ai-a), var(--ai-iris)) border-box;
     border:1.5px solid transparent; box-shadow:-6px 0 18px -10px var(--ai-halo-l), 6px 0 18px -10px var(--ai-halo-r);
     animation:aiSpin 10s linear infinite; transition:box-shadow .2s; }
  .chat-compose:focus-within { box-shadow:-8px 0 22px -8px var(--ai-halo-l), 8px 0 22px -8px var(--ai-halo-r); }
  .chat-input textarea { flex:1; resize:none; max-height:140px; background:transparent; color:var(--text-primary);
     border:0; padding:9px 10px; font:inherit; font-size:14px; line-height:1.45; }
  .chat-input textarea:focus, .chat-input textarea:focus-visible { outline:none; box-shadow:none; }   /* le halo :focus-within de la barre signale le focus */
  .chat-input button { width:42px; height:38px; border-radius:10px; color:var(--text-on-ink); font-size:16px; cursor:pointer; flex:none; display:inline-flex; align-items:center; justify-content:center;
     background:linear-gradient(var(--ink), var(--ink)) padding-box, conic-gradient(from var(--ai-a), var(--ai-iris)) border-box;
     border:2px solid transparent; box-shadow:-5px 0 14px -6px var(--ai-halo-l), 5px 0 14px -6px var(--ai-halo-r); animation:aiSpin 10s linear infinite; }
  .chat-input button:hover:not(:disabled):not(.stopping) { background:linear-gradient(var(--ink-hover), var(--ink-hover)) padding-box, conic-gradient(from var(--ai-a), var(--ai-iris)) border-box; }
  .chat-input button:disabled { opacity:.4; cursor:not-allowed; }
  /* bouton ⏹ d'arrêt (pendant l'exécution) : DISCRET (gris) — on PEUT arrêter, mais ce n'est pas
     mis en avant ; surtout pas de rouge qui « donne envie » d'arrêter le raisonnement. */
  .chat-input button.stopping { background:var(--surface-2); color:var(--text-secondary); border:1px solid var(--line); font-size:13px; box-shadow:none; animation:none; }
  .chat-input button.stopping:hover { color:var(--text-primary); border-color:var(--text-secondary); }
  @media (prefers-reduced-motion:reduce){ .chat-compose, .chat-input button, .chat-main-head::after, .chat-newbtn { animation:none; } }
  @media (max-width:680px){
    /* hauteur bornée au viewport VISIBLE → la barre d'outils mobile ET le CLAVIER virtuel ne poussent
       plus le champ d'envoi sous l'écran (Pixel 8). --vvh = window.visualViewport.height (mis à jour en
       JS quand le clavier s'ouvre/ferme) ; repli dvh puis vh pour les navigateurs sans visualViewport. */
    .chatpage { grid-template-columns:minmax(0,1fr); gap:0; min-height:0;
       height:calc(100vh - 132px); height:calc(100dvh - 132px); height:calc(var(--vvh, 100dvh) - 132px); }
    .chat-side { display:none; }
    .chatpage.show-side .chat-side { display:flex; height:100%; }
    .chatpage.show-side .chat-main { display:none; }
    .chat-main { height:100%; min-height:0; }
    .chat-msgs { padding:14px; }
    .cm-menu { display:inline-flex; }          /* ☰ visible sur mobile */
    .chat-main-head { padding:9px 12px; gap:9px; }
    .cm-id { flex:1; } .cm-title { white-space:nowrap; } .cm-sub { display:none; }
    button.cm-bal { padding:4px 9px; } .cm-bal .cb-gauge, .cm-bal .cb-chev { display:none; }   /* solde compact, toujours cliquable (02/10) */
    .chat-side-close { display:inline-flex; align-items:center; justify-content:center; }
  }
  .agentcard .modalbtns { flex:none; }
  .agentintro { font-size:13px; color:var(--text-secondary); line-height:1.5; margin:0 0 10px; }
  .agentrepo { font-size:13px; margin:0 0 14px; } .agentrepo a { color:var(--ink); }
  .agentnew { background:var(--surface-2); border:1px solid var(--ink); border-radius:8px; padding:12px 14px; margin-bottom:14px; }
  .agentnew label { display:block; font-size:12px; color:var(--text-secondary); margin-bottom:6px; }
  .agentcopy { display:flex; gap:6px; }
  .agentcopy input { flex:1; box-sizing:border-box; background:var(--surface-3); color:var(--text-primary); border:1px solid var(--line);
     border-radius:6px; padding:8px 10px; font-family:ui-monospace,Menlo,Consolas,monospace; font-size:12px; }
  .agentcopy button { white-space:nowrap; }
  .agentwarn { font-size:12px; color:var(--status-watch); margin:8px 0 0; }
  .agentlist { margin:6px 0 4px; }
  .agentrow { display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:10px 0; border-bottom:1px solid var(--line); }
  .agentrow:last-child { border-bottom:none; }
  .agenttok { font-family:ui-monospace,Menlo,Consolas,monospace; font-size:12px; color:var(--text-primary);
     background:var(--surface-3); border:1px solid var(--line); border-radius:6px; padding:5px 9px; white-space:nowrap; }
  .agentname { font-size:12px; color:var(--text-secondary); }
  .agentmeta { margin-left:auto; font-size:12px; color:var(--text-secondary); white-space:nowrap; }
  .agentrow .agentrevoke { flex:0 0 auto; white-space:nowrap; }
  .agenttbl { width:100%; border-collapse:collapse; font-size:13px; }
  .agenttbl th, .agenttbl td { padding:7px 6px; border-bottom:1px solid var(--line); text-align:left; }
  .agenttbl th { color:var(--text-secondary); font-weight:600; }
  .agenttbl .num { text-align:right; font-variant-numeric:tabular-nums; }
  .agentrevoke { padding:4px 10px; font-size:12px; }
  /* table d'usage API : jour collé à gauche, nombre d'appels lisible avec mini-barre */
  /* espace Agent IA (admin) : onglets + bandeau « comment ça s'articule » + familles de cas golden */
  .ag-head h2 { margin:0 0 8px; }
  .ag-tabs { display:flex; gap:4px; border-bottom:1px solid var(--line); margin-bottom:12px; }
  .ag-tab { padding:8px 14px; color:var(--text-secondary); text-decoration:none; border-bottom:2px solid transparent; font-weight:600; }
  .ag-tab.active { color:var(--text-primary); border-bottom-color:var(--ink); }
  .ag-tab:hover { color:var(--text-primary); }
  .ag-how { border:1px solid var(--line); border-radius:10px; padding:8px 12px; margin-bottom:14px; background:var(--surface-2); }
  .ag-how summary { cursor:pointer; font-weight:600; }
  .ag-how-grid { display:grid; grid-template-columns:1fr auto 1fr auto 1fr; gap:10px; align-items:start; margin-top:10px; }
  .ag-how-grid p { margin:4px 0 0; font-size:12.5px; color:var(--text-secondary); line-height:1.45; }
  .ag-arrow { font-size:22px; color:var(--text-secondary); padding-top:2px; }
  .ag-stats { display:flex; gap:10px; flex-wrap:wrap; margin:8px 0 12px; }
  .ag-stats .stat { flex:1 1 120px; text-align:center; background:var(--surface-2); border-radius:10px; padding:8px 6px; text-decoration:none; color:inherit; }
  .ag-stats .sv { font-size:20px; font-weight:700; } .ag-stats .sl { font-size:10.5px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.03em; margin-top:2px; }
  .ag-cases { display:flex; flex-direction:column; gap:14px; margin-top:12px; }
  .ag-case { border:1px solid var(--line); border-radius:12px; padding:12px 16px; background:var(--surface-1); }
  .ag-case-head { display:flex; justify-content:space-between; gap:12px; align-items:baseline; flex-wrap:wrap; }
  .ag-case-score { font-size:20px; } .ag-case-score .muted { font-size:12px; margin-left:4px; }
  .ag-q { margin:10px 0; padding:8px 12px; border-left:3px solid var(--ink); background:var(--surface-2); border-radius:6px; white-space:pre-wrap; }
  .ag-answer-head { margin:8px 0 4px; font-size:12.5px; }
  .ag-answer { border:1px solid var(--line); border-radius:8px; padding:10px 14px; max-height:520px; overflow:auto; }
  .ag-judge { margin-top:10px; font-size:12.5px; } .ag-judge-note { margin:4px 0 6px; color:var(--text-secondary); }
  .ag-items { display:flex; flex-direction:column; gap:2px; margin:4px 0; } .ag-items.pos { color:var(--status-ok); } .ag-items.warn { color:var(--status-watch); } .ag-items.neg { color:var(--status-critical); }
  .ag-expected { margin-top:8px; } .ag-expected pre { white-space:pre-wrap; font-size:12px; margin:6px 0 0; }
  .ag-coll { margin-top:18px; } .ag-coll-head { display:flex; gap:12px; align-items:center; } .ag-coll-head h3 { margin:0; } .ag-coll-head button { margin-left:auto; }
  @media (max-width:900px){ .ag-how-grid { grid-template-columns:1fr; } .ag-arrow { display:none; } }
  .usagetbl { width:100%; border-collapse:collapse; font-size:13px; }
  /* modale admin : conversations d'un compte (liste → questions/réponses) */
  #convmodal .agentcard { width:min(960px,94vw); max-height:88vh; display:flex; flex-direction:column; }
  #conv_body { overflow:auto; flex:1; min-height:200px; }
  .conv-row { display:flex; gap:10px; align-items:baseline; padding:8px 6px; border-bottom:1px solid var(--line); cursor:pointer; }
  .conv-row:hover { background:var(--surface-2); }
  .conv-row .ct { flex:1; font-weight:600; }
  .conv-row .muted { font-size:12px; }
  .conv-msg { margin:10px 0; padding:10px 12px; border-radius:10px; border:1px solid var(--line); }
  .conv-msg.user { background:var(--surface-2); }
  .conv-msg .cm-who { font-size:12px; color:var(--text-secondary); margin-bottom:4px; display:flex; gap:8px; flex-wrap:wrap; }
  .conv-msg .tag { font-size:11px; padding:1px 6px; border-radius:6px; background:var(--line); }
  .conv-msg .tag.bad { background:color-mix(in srgb, var(--status-critical) 18%, transparent); color:var(--status-critical); }
  .conv-msg .tag.warn { background:color-mix(in srgb, var(--status-watch) 18%, transparent); }
  .usagetbl th { text-align:left; color:var(--text-secondary); font-weight:600; padding:6px 8px; border-bottom:1px solid var(--line); }
  .usagetbl td { padding:6px 8px; border-bottom:1px solid var(--line); }
  .usagetbl tr:last-child td { border-bottom:none; }
  .usagetbl-fixed { table-layout:fixed; } .usagetbl-fixed td, .usagetbl-fixed th { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .usagetbl-fixed th:nth-child(2), .usagetbl-fixed th:nth-child(3) { width:64px; } .usagetbl-fixed th:nth-child(4) { width:34%; }
  .usagetbl .ud { white-space:nowrap; width:1%; padding-right:18px; color:var(--text-primary); }
  .usagetbl .uc { display:flex; align-items:center; gap:10px; }
  .usagetbl .uc b { min-width:3ch; text-align:right; }
  .usagetbl .ubar { display:inline-block; height:8px; min-width:3px; border-radius:4px; background:var(--ink); flex:0 0 auto; }
  /* ── Fiche compte utilisateur (admin) ── */
  .urow:hover { background:color-mix(in srgb, var(--text-secondary) 7%, transparent); }
  .lnk { color:var(--ink); }
  .crumb { font-size:12px; color:var(--text-secondary); } .crumb a { color:var(--text-secondary); text-decoration:none; }
  .crumb a:hover { color:var(--ink); }
  .adu-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:14px; }
  .kv { display:flex; justify-content:space-between; gap:12px; padding:6px 0; border-bottom:1px solid var(--line);
        font-size:13px; align-items:center; }
  .kv:last-child { border-bottom:none; }
  .kv > span:first-child { color:var(--text-secondary); flex:0 0 auto; }
  .kv > span:last-child { text-align:right; }
  .adu-actions { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:12px; }
  .adu-note { display:block; font-size:12px; color:var(--text-secondary); margin-top:10px; }
  .adu-note input { width:100%; margin-top:3px; }
  /* éditeur du bundle de l'agent (/admin/agent/{name}) : champs pleine largeur, corps haut, aperçu collant */
  .agd-grid { display:grid; grid-template-columns:minmax(0,3fr) minmax(0,2fr); gap:20px; align-items:start; }
  @media (max-width:1100px){ .agd-grid { grid-template-columns:minmax(0,1fr); } }
  .agd-form label { display:block; margin:12px 0 0; font-weight:600; font-size:13px; }
  .agd-form label .muted { font-weight:normal; }
  .agd-form input, .agd-form textarea { display:block; width:100%; box-sizing:border-box; margin-top:4px;
    padding:8px 10px; font-size:13px; line-height:1.45; }
  .agd-form textarea { resize:vertical; }
  .ag-fold { border:1px solid var(--line); border-radius:10px; margin:6px 0; }
  .ag-fold.off { opacity:.6; }
  .ag-fold > summary { cursor:pointer; padding:9px 12px; display:flex; flex-wrap:wrap; align-items:center; gap:6px; font-size:13px; list-style:none; }
  .ag-fold > summary::-webkit-details-marker { display:none; }
  .ag-fold > summary::before { content:"▸"; color:var(--text-secondary); margin-right:2px; } .ag-fold[open] > summary::before { content:"▾"; }
  .ag-fold-r { margin-left:auto; } .ag-fold-q { flex-basis:100%; font-size:12px; padding-left:16px; }
  .ag-fold > .ag-case { margin:0 10px 10px; }
  .agd-form textarea.agd-body { min-height:62vh; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12.5px; }
  .agd-prev { position:sticky; top:12px; max-height:calc(100vh - 40px); overflow:auto; border:1px solid var(--line);
    padding:14px 16px; border-radius:10px; }
  .adu-h4 { font-size:12px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.03em; margin:14px 0 6px; }
  .adu-stats { display:flex; gap:10px; flex-wrap:wrap; }
  .adu-stats .stat { flex:1 1 60px; text-align:center; background:var(--surface-2);
        border-radius:10px; padding:10px 6px; }
  .adu-stats .sv { font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
  .adu-stats .sl { font-size:10.5px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.03em; margin-top:2px; }
  .chips { display:flex; gap:6px; flex-wrap:wrap; }
  .chip { font-size:11.5px; border:1px solid var(--line); border-radius:999px; padding:2px 9px; color:var(--text-secondary); }
  .chip b { color:var(--text-primary); }
  .tl { display:flex; flex-direction:column; }
  .tl-row { display:flex; gap:10px; align-items:baseline; padding:4px 0; border-bottom:1px solid var(--line); font-size:12.5px; }
  .tl-row:last-child { border-bottom:none; }
  .tl-ts { flex:0 0 128px; font-size:11px; } .tl-act { flex:0 0 84px; font-weight:600; }
  .tl-obj { min-width:0; overflow:hidden; text-overflow:ellipsis; }
  .mono { font-family:ui-monospace,Menlo,monospace; font-size:11px; }
  .warn-txt { color:var(--status-watch); } .neg-btn { background:var(--status-critical); border-color:transparent; color:var(--text-on-ink); }
  .danger-card { border-color:color-mix(in srgb, var(--status-critical) 40%, transparent); }
  /* formulaires (compte, listes, admin) : libellé AU-DESSUS du champ, champ pleine largeur — lisible
     sur mobile et en colonne étroite (avant : libellé à gauche en flex, le 2ᵉ champ passait à la ligne) */
  .frow { display:flex; flex-direction:column; gap:5px; margin-bottom:12px; min-width:0; }
  .frow > label { font-size:11.5px; font-weight:600; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.04em; }
  .frow input, .frow select, .frow textarea { width:100%; min-width:0; }
  .frow .fhint { font-size:12px; color:var(--text-secondary); }
  .frow-2 { display:grid; grid-template-columns:1fr 1fr; gap:10px; }          /* deux champs côte à côte */
  .frow-2.icon { grid-template-columns:96px 1fr; }
  @media (max-width:420px){ .frow-2 { grid-template-columns:1fr; } }
  .pw-wrap { position:relative; } .pw-wrap input { padding-right:42px; }
  .pw-eye { position:absolute; right:4px; top:50%; transform:translateY(-50%); background:none; border:none; color:var(--text-secondary);
            cursor:pointer; padding:6px 8px; font-size:15px; line-height:1; border-radius:6px; }
  .pw-eye:hover { color:var(--text-primary); background:color-mix(in srgb, var(--text-secondary) 12%, transparent); }
  .adu-actions .err:not(:empty) { color:var(--status-critical); font-size:12.5px; }
  .adu-actions .err:not(:empty)::before { content:"⚠ "; }
  .adu-actions .ok { color:var(--status-ok); font-size:12.5px; }
  /* bandeau d'état d'analyse de la fiche (à venir / pas de comptes) */
  .analysis-banner { display:flex; gap:12px; align-items:flex-start; border:1px solid var(--line);
        border-radius:12px; padding:13px 16px; margin:0 0 14px; background:var(--surface-1); }
  .analysis-banner .ab-ic { font-size:20px; line-height:1.2; flex:none; }
  .analysis-banner b { font-size:14px; } .analysis-banner .muted { font-size:12.5px; margin-top:2px; }
  .analysis-banner.pending { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 7%, transparent); }
  .analysis-banner.no-accounts { border-color:var(--line); }
  /* modale « i » : explication d'un indicateur (formule + origine au bilan) */
  #mi_body { max-width:100%; }
  .mi-desc { font-size:13px; color:var(--text-primary); line-height:1.5; margin:0 0 12px; }
  .mi-formula { font-size:13px; background:var(--surface-2); border:1px solid var(--line); border-radius:8px;
     padding:10px 12px; margin-bottom:12px; line-height:2; overflow-wrap:anywhere; word-break:break-word; }
  .mi-formula .mi-lbl { display:block; color:var(--text-secondary); font-size:11px; text-transform:uppercase; letter-spacing:.04em; margin-bottom:6px; }
  .codechip { font-family:ui-monospace,Menlo,Consolas,monospace; font-size:11px; color:var(--ink);
     background:var(--surface-3); border:1px solid var(--line); border-radius:4px; padding:1px 5px; white-space:nowrap; }
  .mi-years { display:flex; flex-direction:column; }
  .mi-year { padding:8px 0; border-bottom:1px solid var(--line); }
  .mi-year:last-child { border-bottom:none; }
  .mi-yhead { display:flex; justify-content:space-between; align-items:baseline; gap:12px; }
  .mi-yr { font-weight:600; color:var(--text-primary); }
  .mi-res { color:var(--text-primary); white-space:nowrap; }
  .mi-calc { color:var(--text-secondary); font-size:12px; margin-top:3px; line-height:1.6; overflow-wrap:anywhere; }
  .mi-src { font-size:11px; color:var(--text-secondary); margin:12px 0 0; font-style:italic; }
  .mi-srclink { font-size:11px; font-weight:600; font-style:normal; margin-left:8px; white-space:nowrap; }
  .mi-example { font-size:13px; color:var(--text-primary); line-height:1.5; margin:0 0 12px;
     background:var(--surface-2); border:1px solid var(--line); border-left:3px solid var(--ink);
     border-radius:6px; padding:8px 12px; }
  .mi-dir { font-size:12px; color:var(--text-secondary); margin:0 0 12px; }
  /* Variation année/année dans le tableau financier (▲/▼ %) */
  .yoy { font-size:11px; margin-top:2px; font-weight:600; white-space:nowrap; }
  .yoy.fav { color:var(--status-ok); } .yoy.unfav { color:var(--status-critical); } .yoy.neutral { color:var(--text-secondary); }
  /* Badge de format d'exercice cliquable (ouvre la modale format & source) */
  .acctbtn { background:none; border:none; padding:0; margin:0; cursor:pointer; font:inherit; }
  .acctbtn:hover { filter:brightness(1.25); }
  /* L'ANNÉE elle-même ouvre la modale « format & source » (contrôle qualité + PDF du dépôt) :
     sans marque, rien n'indiquait qu'on pouvait cliquer — soulignement pointillé discret. */
  .acctbtn.yearbtn { color:inherit; text-decoration:underline dotted var(--text-secondary); text-underline-offset:4px; }
  .acctbtn.yearbtn:hover { text-decoration-color:var(--accent,currentColor); }
  /* Toggle « ajouter les chiffres calculés » + cellules estimées (or + ⚡) dans le tableau Finances */
  .esttoggle { display:inline-flex; align-items:center; gap:6px; cursor:pointer; font-size:13px; color:var(--text-primary);
     border:1px solid var(--estimated); border-radius:8px; padding:6px 12px; background:color-mix(in srgb, var(--estimated) 6%, transparent); }
  .est-sec { margin:14px 0; }
  .est-h { font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:var(--text-secondary); margin-bottom:6px; }
  .est-chips { display:flex; flex-wrap:wrap; gap:6px; }
  .est-chip { font-size:12px; color:var(--estimated); border:1px solid color-mix(in srgb, var(--estimated) 45%, transparent); border-radius:10px; padding:2px 9px; }
  .est-tiles { display:grid; grid-template-columns:minmax(0,1fr); gap:10px; margin:14px 0; }
  @media (min-width:700px){ .est-tiles { grid-template-columns:minmax(0,1fr) minmax(0,1fr); } }
  .est-tile { background:var(--surface-2); border:1px solid var(--line); border-radius:10px; padding:10px 12px; font-size:13px; line-height:1.5; }
  .est-tile .muted { font-size:12px; }
  .est-warn { border-left:3px solid var(--status-watch); background:color-mix(in srgb, var(--status-watch) 8%, transparent); border-radius:8px; padding:10px 12px; font-size:13px; line-height:1.5; margin:14px 0 8px; }
  .est-always { display:flex; align-items:flex-start; gap:10px; font-size:13px; margin-top:14px; padding:10px 12px;
     border:1px solid var(--line); border-radius:10px; cursor:pointer; line-height:1.4; }
  .est-always input { width:16px; height:16px; margin:2px 0 0; flex:none; accent-color:var(--estimated); }   /* le .modal input global est en 100 % */
  .est-always .muted { font-size:12px; }
  .esttoggle:hover { border-color:var(--estimated); }
  .esttoggle input { accent-color:var(--estimated); }
  #esttoggle { margin-bottom:12px; }
  .estval { color:var(--estimated); font-weight:600; cursor:pointer; white-space:nowrap; }
  .estmark { color:var(--estimated); opacity:.75; font-size:12px; cursor:pointer; }
  .estmark:hover { opacity:1; }
  /* proxy natif (schéma abrégé/micro) : ratio officiel qui tient la place d'un ratio sur CA */
  .provbadge { font-size:11px; color:var(--text-secondary); cursor:help; margin-left:2px; }
  /* Titre de carte (boîtes de la fiche, désormais non repliables, toujours visibles) */
  .cardh { margin:0 0 10px; font-size:15px; font-weight:600; }
  .cardh .muted { font-weight:400; }
  /* Texte d'annexe : sous-boîte repliée par défaut (le texte est long, on évite le débordement) */
  .notebox { border:1px solid var(--line); border-radius:8px; margin:8px 0; background:var(--surface-2); }
  .notebox > summary { cursor:pointer; font-weight:600; font-size:13px; padding:8px 12px; list-style:none; }
  .notebox > summary::before { content:"▸ "; color:var(--text-secondary); }
  .notebox[open] > summary::before { content:"▾ "; }
  .notetext { white-space:pre-wrap; font-size:13px; line-height:1.55; padding:0 12px 12px;
     max-height:360px; overflow:auto; color:var(--text-primary); }
  /* Icône de type de publication au Moniteur (repère visuel) + « i » de définition */
  .monico { font-size:15px; cursor:default; }
  /* Badge de provenance (golden record MDM) à côté du nom : source la plus fiable */
  .srcbadge { font-size:10px; text-transform:uppercase; letter-spacing:.03em; padding:2px 7px;
     border-radius:9px; border:1px solid var(--line); white-space:nowrap; vertical-align:middle; color:var(--text-secondary); }
  .srcbadge.prov-gazette { color:var(--status-ok); border-color:color-mix(in srgb, var(--status-ok) 50%, transparent); background:color-mix(in srgb, var(--status-ok) 8%, transparent); }
  .srcbadge.prov-manual { color:var(--ink); border-color:var(--ink); }
  .srcbadge.prov-conflict { color:var(--status-watch); border-color:var(--status-watch); background:color-mix(in srgb, var(--status-watch) 8%, transparent); }
  .infocard { background:var(--surface-1); border:1px solid var(--line); border-radius:12px;
     padding:22px 24px; width:520px; max-width:calc(100vw - 24px); }
  .infocard h3 { margin:0 0 10px; font-size:18px; }
  .infocard p { margin:0 0 10px; }
  .metric-label { display:inline-flex; align-items:center; gap:6px; }
  .info-btn { display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px;
     padding:0; border:1px solid var(--line); border-radius:50%; background:transparent; color:var(--text-secondary);
     font-size:11px; line-height:1; font-weight:800; vertical-align:middle; }
  .info-btn:hover, .info-btn:focus { color:var(--ink); border-color:var(--ink); background:color-mix(in srgb, var(--ink) 8%, transparent); }
  .star { cursor:pointer; color:var(--text-secondary); font-size:16px; user-select:none; }
  .star:hover { color:var(--status-watch); }
  .star.on { color:var(--status-watch); }
  .favbtn.on { color:var(--status-watch); border-color:var(--status-watch); }
  /* « ＋ Ajouter à une liste ▾ » (fiche société et personne) : bouton PRIMAIRE lisible + menu à cases */
  .listwrap { position:relative; display:flex; flex-direction:column; align-items:flex-end; gap:3px; }
  .listbtn { font-weight:600; white-space:nowrap; background:transparent; color:var(--ink); border:1px solid var(--ink); }
  .listbtn.on { background:var(--tint-ink); }
  /* « Demander à l'IA » : bouton + info-bulle intelligente (question + contexte de page décochable) */
  .askwrap { position:relative; }
  .askbtn { display:inline-flex; align-items:center; gap:8px; background:var(--ink); color:var(--text-on-ink); border:1px solid var(--ink); font-weight:600; }
  .askbtn .ai-mark { background:var(--text-on-ink); }
  .askpop { position:absolute; top:calc(100% + 6px); right:0; z-index:120; width:min(420px, 92vw); background:var(--surface-1);
            border:1px solid var(--ink); border-radius:12px; padding:12px; text-align:left; }
  .askpop::before { content:""; position:absolute; top:-6px; right:22px; width:10px; height:10px; transform:rotate(45deg);
            background:var(--surface-1); border-left:1px solid var(--ink); border-top:1px solid var(--ink); }
  .askpop textarea { width:100%; resize:none; min-height:64px; font-size:13.5px; }
  .askctx { display:flex; align-items:center; gap:8px; margin-top:8px; font-size:12.5px; }
  .askctx input { accent-color:var(--ink); margin:0; flex:none; }
  .askctx .askchip { display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); border-radius:999px; padding:2px 10px; color:var(--text-secondary); min-width:0; }
  .askctx .askchip b { color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:220px; }
  .askctx.off .askchip { opacity:.45; text-decoration:line-through; }
  .askfoot { display:flex; align-items:center; gap:8px; margin-top:10px; }
  .asksugg { display:flex; gap:6px; flex-wrap:wrap; margin-top:8px; } .asksugg button { font-size:11.5px; padding:3px 9px; }
  /* modale « Texte » d'une publication du Moniteur */
  .pubcard { width:min(96vw, 900px); max-height:calc(100vh - 32px); }
  .pub-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; flex-wrap:wrap; }
  .pub-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
  .pub-actions .askpop { right:auto; left:0; }  .pub-actions .askpop::before { right:auto; left:22px; }   /* ancrée à gauche : la modale rogne à droite */
  .pub-tools { display:flex; align-items:center; gap:10px; margin:12px 0 8px; }
  .pub-tools input { max-width:260px; font-size:12.5px; }
  .pub-text { flex:1; min-height:0; overflow:auto; white-space:pre-wrap; font-family:ui-monospace,Menlo,monospace; font-size:12.5px; line-height:1.55;
              background:var(--surface-2); border:1px solid var(--line); border-radius:10px; padding:14px 16px; }
  .pub-text mark { background:color-mix(in srgb, var(--status-watch) 45%, transparent); color:var(--text-primary); border-radius:3px; }
  button.ax-src { background:transparent; color:var(--text-primary); font-weight:500; cursor:pointer; }
  .askfoot .muted { font-size:11.5px; flex:1; }
  @media (max-width:640px){ .askwrap { width:100%; } .askbtn { width:100%; justify-content:center; } .askpop { right:auto; left:0; } }
  /* menu OPAQUE (--panel : --card n'existe pas dans le thème → il était transparent, retour fondateur 16/09) */
  .listpop { position:absolute; top:calc(100% + 6px); right:0; z-index:120; min-width:250px; max-width:320px;
             background:var(--surface-1); border:1px solid var(--ink); border-radius:10px; padding:6px 0;
             font-size:13.5px; text-align:left; color:var(--text-primary); }
  .listpop::before { content:""; position:absolute; top:-6px; right:22px; width:10px; height:10px; transform:rotate(45deg);
             background:var(--surface-1); border-left:1px solid var(--ink); border-top:1px solid var(--ink); }
  /* Le nom d'une liste peut être long (60 car.) : il se TRONQUE dans le menu, il ne déborde pas du
     panneau (mesuré 23/09 : « Portefeuille clients grands comptes Wallonie… » sortait de 117 px). */
  .listrow { display:flex; align-items:center; gap:10px; padding:8px 14px; cursor:pointer; margin:0; min-width:0; }
  .listrow > span { flex:1 1 auto; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .listrow > span.pf-ln { flex:none; }        /* le compteur ne se tronque pas : c'est le nom qui cède */
  .listrow input[type=checkbox] { accent-color:var(--ink); width:15px; height:15px; margin:0; flex:none; }
  .listrow:hover { background:color-mix(in srgb, var(--ink) 10%, transparent); }
  button.listrow { width:100%; background:none; border:none; font:inherit; color:inherit; text-align:left; }
  .listnew { display:flex; gap:6px; padding:10px 12px 6px; border-top:1px solid var(--line); margin-top:4px; }
  .listnew input { flex:1; min-width:0; font-size:12.5px; background:var(--surface-2); color:var(--text-primary); border:1px solid var(--line); border-radius:6px; padding:5px 8px; }
  .listnew button { font-size:12px; padding:5px 10px; white-space:nowrap; }
  @media (max-width:640px){ .listwrap { width:100%; align-items:stretch; } .listbtn { width:100%; }
                            .listpop { right:auto; left:0; max-width:100%; } }
  /* sélecteur de liste du tableau de bord (onglets ≤ 5, menu au-delà), pagination, recherche */
  .pf-lbar { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
  .pf-ltabs { display:inline-flex; flex-wrap:wrap; gap:4px; }
  .pf-ltabs button { background:transparent; color:var(--text-secondary); border:1px solid var(--line); border-radius:14px; font-size:12.5px; padding:4px 11px; cursor:pointer; }
  .pf-ltabs button.on { color:var(--text-primary); border-color:var(--ink); background:color-mix(in srgb, var(--ink) 10%, transparent); }
  .pf-ln { font-size:11px; opacity:.85; } .pf-ln b.bad { color:var(--status-critical); } .pf-ln b.warn { color:var(--status-watch); }
  /* Un <select> prend la largeur de sa PLUS LONGUE option : avec une liste nommée « Portefeuille
     clients grands comptes… », la barre débordait sa carte de 130 px sous 390 px (mesuré 23/09,
     scrollWidth 438 pour 308 de large). Un enfant flex ne rétrécit pas sans `min-width:0`. */
  .pf-lsel { font-size:13px; padding:4px 8px; max-width:100%; min-width:0; text-overflow:ellipsis; }
  .pf-lbar { min-width:0; }
  @media (max-width:640px){ .pf-lbar { width:100%; } .pf-lsel { flex:1 1 auto; } }
  .pf-lnew { font-size:13px; padding:3px 9px; }
  .pf-sub2 { margin-top:4px; } .pf-q { font-size:12.5px; padding:4px 8px; max-width:200px; }
  .pf-pager { display:flex; align-items:center; justify-content:center; gap:10px; margin-top:8px; font-size:12.5px; }
  .pf-pager button { padding:2px 10px; }
  .pf-flag.nil { color:var(--text-secondary); border:1px solid var(--line); } .pf-flag.click { cursor:pointer; }
  /* page « Mes listes » : maître (gauche) / détail (droite), en page — pas de modale */
  .ll-grid { display:grid; grid-template-columns:280px minmax(0,1fr); gap:14px; align-items:start; }
  @media (max-width:760px){ .ll-grid { grid-template-columns:minmax(0,1fr); } }
  .ll-item { padding:9px 11px; border:1px solid var(--line); border-radius:9px; cursor:pointer; margin-bottom:6px; }
  .ll-item:hover { background:color-mix(in srgb, var(--text-secondary) 6%, transparent); } .ll-item.on { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 10%, transparent); }
  .ll-name { font-weight:600; font-size:13.5px; } .ll-meta { font-size:11.5px; color:var(--text-secondary); margin-top:2px; }
  .ll-meta b.bad { color:var(--status-critical); } .ll-meta b.warn { color:var(--status-watch); }
  .ll-counts { display:flex; gap:12px; flex-wrap:wrap; align-items:center; font-size:12.5px; color:var(--text-secondary); margin:-4px 0 14px; }
  .ll-counts .bad { color:var(--status-critical); } .ll-counts .warn { color:var(--status-watch); }
  .ll-sec { font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:var(--text-secondary); font-weight:600; margin:14px 0 6px; }
  .ll-radios { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:8px; }
  .ll-radio { display:flex; gap:10px; align-items:flex-start; padding:10px 12px; border:1px solid var(--line); border-radius:9px; cursor:pointer; font-size:13px; }
  .ll-radio.on { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 8%, transparent); } .ll-radio input { margin-top:3px; accent-color:var(--ink); }
  .ll-segs { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
  .ll-seg { background:none; border:none; border-right:1px solid var(--line); color:var(--text-secondary); font-size:12.5px; padding:6px 12px; cursor:pointer; }
  .ll-seg:last-child { border-right:none; } .ll-seg.on { background:color-mix(in srgb, var(--ink) 14%, transparent); color:var(--text-primary); }
  /* Listes L2 : import de numéros (collage ou fichier), aperçu ligne par ligne, journal, export */
  .ll-tools { border-top:1px solid var(--line); margin-top:18px; }
  .ll-hint { font-size:12.5px; margin:2px 0 8px; }
  .ll-ta { width:100%; font-family:ui-monospace, SFMono-Regular, Menlo, monospace; font-size:12.5px; line-height:1.5;
           background:var(--surface-2); color:var(--text-primary); border:1px solid var(--line); border-radius:8px; padding:8px 10px; }
  .ll-impbar { display:flex; gap:8px; align-items:center; margin-top:8px; flex-wrap:wrap; }
  .ll-file { position:relative; overflow:hidden; display:inline-flex; align-items:center; padding:8px 15px;
             border:1px solid var(--line); border-radius:var(--radius-ctl); cursor:pointer; font-size:13px; font-weight:600; }
  .ll-file input { position:absolute; inset:0; opacity:0; cursor:pointer; }
  .ll-impsum { display:flex; gap:14px; flex-wrap:wrap; font-size:13px; font-weight:600; margin:4px 0 8px; }
  .ll-impsum .ok { color:var(--status-ok); }
  .ll-imptbl { max-height:320px; overflow:auto; }
  .ll-log { font-size:12.5px; }
  .ll-logrow { padding:6px 0; border-bottom:1px solid var(--line); }
  .ll-logrow:last-child { border-bottom:none; }
  /* Note d'un membre, éditable en ligne (L3) : affichée dans le panneau déplié, elle devient un champ
     au clic — même hauteur, pas de saut de mise en page entre les deux états. */
  .pf-note { font-size:12.5px; margin-bottom:6px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; min-height:28px; }
  .pf-notetxt { color:var(--text-primary); }
  .pf-noteinput { flex:1 1 260px; min-width:0; font-size:12.5px; padding:4px 8px; border:1px solid var(--line);
                  border-radius:6px; background:var(--surface-2); color:var(--text-primary); }
  .pf-note .ghost { font-size:12px; padding:4px 10px; }
  /* Export Excel = le VERT d'Excel (fondateur 03/10) : le bouton se reconnaît avant d'être lu. Icône : document
     blanc, « X » vert. Même couleur verrouillé (Pro) : c'est la même action, le badge dit la condition. */
  .xlsbtn { display:inline-flex; align-items:center; gap:7px; background:#1D6F42;
            color:#fff; border:1px solid #1D6F42; border-radius:var(--radius-ctl); padding:8px 15px;
            font-weight:600; font-size:13px; cursor:pointer; text-decoration:none; line-height:1; }
  .xlsbtn:hover { background:#185C37; border-color:#185C37; color:#fff; }
  .xlsbtn svg { width:15px; height:15px; flex:none; }
  .xlsbtn svg path:first-child { fill:#fff; }
  .xlsbtn svg path:last-child { fill:#1D6F42; }
  .xlsbtn .pro-tag { background:#fff; color:#1D6F42; }
  @media (max-width:640px){ .topline .right .xlsbtn { width:100%; justify-content:center; padding:11px 15px; } }   /* fiche : pleine largeur comme « Demander » et « Ajouter à une liste » (fondateur 03/10) */
  .filters label.chk { flex-direction:row; align-items:center; gap:6px; white-space:nowrap; }
  h3.th { margin:0 0 12px; font-size:15px; }
  .tiles { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; }
  .tile { background:var(--surface-2); border:1px solid var(--line); border-radius:8px; padding:12px 14px; }
  .tval { font-size:20px; font-weight:700; color:var(--text-primary); line-height:1.1; }
  .tlbl { color:var(--text-secondary); font-size:12px; margin-top:4px; }
  .tsub { color:var(--text-secondary); font-size:11px; margin-top:3px; opacity:.8; }
  main { padding:18px 20px; }
  /* pied de page court de l'app (le pied complet vit sur www) — masqué sur l'écran de connexion */
  #appfoot { display:flex; justify-content:space-between; align-items:center; gap:10px 16px; flex-wrap:wrap;
     padding:16px 20px 18px; margin-top:24px; border-top:1px solid var(--line); font-size:12px; color:var(--text-secondary); }
  #appfoot a { color:var(--text-secondary); } #appfoot a:hover { color:var(--ink); }
  body.landing #appfoot { display:none; }
  /* ── Explorateur ── en-tête de page (parité Secteurs / Tableau de bord : titre + mission) */
  .pagehead { margin:2px 0 14px; }
  .pagehead h2 { margin:0 0 4px; font-size:22px; }
  .pagehead p { margin:0; font-size:14px; }
  /* Idées de screening : tuiles persona-card (DRY avec l'état vide du chat), masquables/ré-affichables */
  .ideas { margin-bottom:14px; }
  .ideas-h { display:flex; justify-content:space-between; align-items:center; font-size:13px; font-weight:600; margin-bottom:8px; }
  .ideas-grid { max-width:none; margin:0; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); }
  .ideas-grid .persona-card { font:inherit; }
  @media (max-width:760px){
    .ideas-grid { display:flex; overflow-x:auto; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; padding-bottom:4px; }
    .ideas-grid .persona-card { flex:0 0 78%; scroll-snap-align:start; }
    /* barre d'état : bouton + bascule Liste/Carte sur la 1re ligne, les puces sur une ligne à part */
    #filterbar .fchips { flex:1 1 100%; order:3; }
    #filterbar .fchips:empty { display:none; }
    #filterbar #ideaslink { order:4; }
  }
  .linkbtn { background:none; border:none; color:var(--ink); font-size:12.5px; cursor:pointer; padding:4px 6px; }
  .linkbtn:hover { text-decoration:underline; }
  /* Barre d'ÉTAT des filtres : bouton « Filtres » (chevron + badge) + une puce ✕ par critère actif +
     bascule Liste/Carte. L'état est toujours visible, chaque critère se retire en un clic. */
  .filterbox { background:var(--surface-1); border:1px solid var(--line); border-radius:12px; margin-bottom:14px; }
  #filterbar { display:flex; gap:8px 10px; align-items:center; flex-wrap:wrap; padding:8px 12px; }
  .filtbtn { display:inline-flex; align-items:center; gap:7px; background:none; border:none; color:var(--text-primary);
     font:inherit; font-size:13.5px; font-weight:600; cursor:pointer; padding:4px 2px; }
  .filtbtn .chev { display:inline-block; transition:transform .15s; font-size:11px; color:var(--text-secondary); }
  .filterbox.open .filtbtn .chev { transform:rotate(90deg); }
  .fcount { background:var(--ink); color:var(--text-on-ink); font-size:11px; font-weight:700; border-radius:9px; padding:1px 7px; }
  .fchips { display:flex; gap:6px; flex-wrap:wrap; align-items:center; flex:1; min-width:0; }
  .fchip { display:inline-flex; align-items:center; gap:4px; font-size:12.5px; border:1px solid color-mix(in srgb, var(--ink) 45%, transparent);
     background:color-mix(in srgb, var(--ink) 10%, transparent); color:var(--text-primary); border-radius:999px; padding:3px 6px 3px 11px; white-space:nowrap; }
  .fchip-x { background:none; border:none; color:var(--text-secondary); cursor:pointer; font-size:11px; padding:1px 5px; border-radius:50%; line-height:1; }
  .fchip-x:hover { color:var(--text-on-ink); background:var(--status-critical); }
  #viewtoggle { margin-left:auto; }
  /* Panneau : 4 groupes (lieu · taille · santé · reprise), chacun avec un titre et une aide courte */
  .filters { display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:10px;
             border-top:1px solid var(--line); padding:12px; }
  .filters[hidden] { display:none; }   /* sinon display:grid écrase l'attribut hidden → toujours déroulé */
  .fgrp { background:var(--surface-2); border:1px solid var(--line); border-radius:10px; padding:10px 12px; display:flex; flex-direction:column; gap:8px; }
  .fgh { font-size:13px; font-weight:600; cursor:help; }
  .fgf { display:flex; gap:8px; flex-wrap:wrap; align-items:flex-end; }
  .filtfoot { grid-column:1 / -1; display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding-top:2px; }
  .filters label { display:flex; flex-direction:column; gap:4px; font-size:12px; color:var(--text-secondary); flex:1 1 130px; min-width:0; }
  .filters label.short { flex:0 1 96px; }
  .filters label.chk { flex:0 0 auto; }
  .filters label.acl { position:relative; }   /* ancre le dropdown d'autocomplétion sous le champ */
  .filters input, .filters select { background-color:var(--surface-1); color:var(--text-primary); width:100%; box-sizing:border-box;
     border:1px solid var(--line); border-radius:6px; padding:6px 8px; font-size:13px; min-width:0; }
  .filters select { padding-right:30px; }   /* place du chevron (background-image du thème, jamais écrasé ici) */
  .filters label.chk input { width:auto; }
  /* État vide de la liste : une issue (retirer le filtre bloquant / tout effacer), pas un mur */
  .tablewrap.loading { opacity:.45; transition:opacity .2s; pointer-events:none; }
  .empty-state { display:flex; flex-direction:column; align-items:center; gap:8px; padding:28px 12px; text-align:center; font-size:13px; }
  .empty-state .es-ic { font-size:28px; }
  .empty-relax { display:flex; flex-direction:column; align-items:center; gap:6px; margin-top:4px; }
  /* CHAMPS DE FORMULAIRE — base du thème (retour fondateur 16/09 : les champs natifs blancs, sans mise
     en forme, sur /account et /lists). `:where()` = spécificité nulle : toute règle de composant
     existante (#login, .modal, .filters, .sm-pane…) continue de gagner ; ceci ne fait que remplacer
     le rendu NATIF par défaut. */
  :where(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]):not([type=color]), select, textarea) {
    background:var(--surface-2); color:var(--text-primary); border:1px solid var(--line); border-radius:8px;
    padding:8px 11px; font:inherit; font-size:13.5px; line-height:1.3; box-sizing:border-box; min-height:36px;
    transition:border-color .12s, box-shadow .12s; }
  :where(input, select, textarea):focus-visible { outline:none; border-color:var(--ink); box-shadow:0 0 0 3px var(--ring); }
  :where(input, textarea)::placeholder { color:var(--text-secondary); opacity:.8; }
  :where(select) { appearance:none; -webkit-appearance:none; padding-right:30px; cursor:pointer;
    background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%238b98a9' stroke-width='1.8' stroke-linecap='round'/></svg>");
    background-repeat:no-repeat; background-position:right 11px center; }
  :where(input, select, textarea):disabled { opacity:.55; cursor:not-allowed; }
  /* autofill Chrome/Safari : jamais le fond jaune natif — on peint l'intérieur aux couleurs du thème */
  input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus {
    -webkit-box-shadow:0 0 0 1000px var(--surface-2) inset; -webkit-text-fill-color:var(--text-primary); caret-color:var(--text-primary); transition:background-color 9999s; }
  :where(input[type=search])::-webkit-search-cancel-button { filter:invert(.6); }
  button { background:var(--ink); color:var(--text-on-ink); border:0; border-radius:var(--radius-ctl);
           padding:8px 15px; font-weight:600; cursor:pointer; font-size:13px; font-family:inherit; }   /* un bouton n'hérite pas la fonte par défaut (Android le rendait en système) */
  @media (hover:hover){
    button:not([class]):hover:not(:disabled), .askbtn:hover { background:var(--ink-hover); }
    button.ghost:hover:not(:disabled) { background:var(--surface-2); }
  }
  button.ghost { background:transparent; color:var(--ink); border:1px solid var(--line-strong); }
  button:disabled { opacity:.5; cursor:wait; }
  /* tables — responsive : scroll horizontal sur petit écran */
  .tablewrap { overflow-x:auto; -webkit-overflow-scrolling:touch;
               border:1px solid var(--line); border-radius:10px; }
  /* .pcap : table dense (mandats/détention d'une personne très active) → hauteur plafonnée + scroll
     interne, sinon une fiche personne pouvait faire 30 000+ px. */
  .tablewrap.pcap { max-height:560px; overflow:auto; }
  table { width:100%; border-collapse:collapse; min-width:640px; }
  /* 1re colonne (libellé) de largeur fixe → les deux tables « fin » (montants & ratios), l'une sous
     l'autre, ont des colonnes alignées. PAS de table-layout:fixed (il écrasait/superposait les colonnes
     d'années sur mobile) : layout AUTO + min-width → les colonnes gardent leur largeur et la table
     DÉFILE horizontalement au lieu de se chevaucher. */
  table.fin th:first-child, table.fin td:first-child { width:210px; white-space:normal; }
  th,td { padding:8px 10px; text-align:right; border-bottom:1px solid var(--line); white-space:nowrap; }
  th:first-child,td:first-child { text-align:left; position:sticky; left:0;
     background:var(--surface-2); z-index:1; }
  thead th { background:var(--surface-1); }
  th { color:var(--text-secondary); font-weight:600; font-size:12px; }
  th.sortable { cursor:pointer; user-select:none; }
  th.sortable:hover { color:var(--text-primary); }
  th.active { color:var(--ink); }
  tbody tr.click:hover { background:var(--surface-2); cursor:pointer; }
  .pager { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:10px 0; }
  .pager select { background-color:var(--surface-2); color:var(--text-primary); border:1px solid var(--line);
     border-radius:6px; padding:4px 30px 4px 6px; }
  .num { font-variant-numeric:tabular-nums; }
  td.wrap, th.wrap { white-space:normal; word-break:break-word; min-width:120px; max-width:230px; }
  .pos { color:var(--status-ok); } .neg { color:var(--status-critical); }
  .muted { color:var(--text-secondary); }
  .form { color:var(--text-secondary); font-weight:500; }
  details.card > summary { cursor:pointer; font-weight:600; list-style:none; outline:none; }
  details.card > summary::-webkit-details-marker { display:none; }
  details.card > summary::before { content:'▸'; color:var(--ink); margin-right:8px; }
  details.card[open] > summary::before { content:'▾'; }
  /* lignes de documents PDF (fiche) */
  .pdfrow { display:flex; align-items:center; gap:12px; padding:9px 11px; border:1px solid var(--line);
     border-radius:9px; margin:6px 0; text-decoration:none; color:var(--text-primary);
     transition:border-color .15s ease, background .15s ease; }
  a.pdfrow:hover { border-color:var(--ink); background:color-mix(in srgb, var(--ink) 6%, transparent); }
  .pdfrow.off { opacity:.7; }
  .pdficon { flex:none; font-size:10px; font-weight:800; letter-spacing:.04em; color:var(--text-on-ink); background:var(--ink);
     border-radius:5px; padding:3px 6px; }
  .pdficon.off { background:var(--line); color:var(--text-secondary); }
  .pdflbl { flex:1; min-width:0; font-size:13.5px; }
  .pdfopen { font-size:12px; color:var(--ink); white-space:nowrap; }
  tr.section td { color:var(--ink); font-weight:600; font-size:11px; text-transform:uppercase;
     letter-spacing:.04em; background:var(--surface-2); border-bottom:1px solid var(--line); }
  /* badges type de comptes */
  .badge { font-size:11px; padding:1px 7px; border-radius:9px; border:1px solid var(--line);
           color:var(--text-secondary); white-space:nowrap; }
  .badge.reduced { color:var(--text-on-ink); background:var(--status-watch); border-color:var(--status-watch); font-weight:600; }
  .badge.full { color:var(--status-ok); border-color:var(--status-ok); }
  .badge.people { color:var(--text-on-ink); background:var(--status-ok); border-color:var(--status-ok); font-weight:600; }
  .badge.alert { color:var(--text-on-ink); background:var(--status-critical); border-color:var(--status-critical); font-weight:600; }
  .card { background:var(--surface-1); border:1px solid var(--line); border-radius:var(--radius-card);
          padding:18px 20px; margin-bottom:16px; }
  .card h2 { margin:0 0 4px; font-size:22px; letter-spacing:-.02em; line-height:1.2; }
  .card > h3, .card h3.th { font-size:15px; letter-spacing:-.01em; }
  /* en-tête de fiche : la raison sociale est le titre de la page */
  .topline h2 { font-size:28px; }
  @media (max-width:640px){ .topline h2 { font-size:24px; } }
  .meta { color:var(--text-secondary); font-size:13px; }
  /* Bandeau de confiance (score crédit + flags) */
  .trustbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:10px; }
  .trust-score { font-size:13px; padding:3px 10px; border-radius:9px; border:1px solid var(--line);
                 background:var(--surface-2); }
  .trust-score b { font-size:15px; }
  .trust-score.s4, .trust-score.s5 { color:var(--status-ok); border-color:color-mix(in srgb, var(--status-ok) 50%, transparent); background:color-mix(in srgb, var(--status-ok) 8%, transparent); }
  .trust-score.s3 { color:var(--status-watch); border-color:color-mix(in srgb, var(--status-watch) 50%, transparent); background:color-mix(in srgb, var(--status-watch) 8%, transparent); }
  .trust-score.s1, .trust-score.s2 { color:var(--status-critical); border-color:var(--status-critical); background:color-mix(in srgb, var(--status-critical) 8%, transparent); }
  /* Onglets de la fiche société */
  /* Barre d'onglets de la fiche (refonte 15/09, docs/ux_fiche.md § onglets) : lisible (icône + libellé +
     COMPTEUR), COLLANTE sous le haut de page, défilement horizontal sur mobile ; un onglet sans contenu
     est MASQUÉ (jamais une porte vide), un onglet mince le dit par son compteur. */
  .ftabs { display:flex; flex-wrap:nowrap; gap:2px; margin:0 0 16px; border:1px solid var(--line); border-radius:var(--radius-card);
           position:sticky; top:8px; z-index:30; background:var(--surface-1); overflow-x:auto; scrollbar-width:none; padding:0 6px; }
  .ftabs::-webkit-scrollbar { display:none; }
  .ftab-btn { background:none; border:none; border-bottom:2px solid transparent; color:var(--text-secondary);
              padding:12px 14px 11px; font-size:14px; font-weight:600; cursor:pointer; white-space:nowrap;
              display:inline-flex; align-items:center; gap:7px; }
  .ftab-btn:hover { color:var(--text-primary); }
  .ftab-btn.active { color:var(--ink); border-bottom-color:var(--accent); }
  .ftab-btn[hidden] { display:none; }
  .ftab-ico { line-height:1; display:inline-flex; }
  .ftab-ico .ic { width:16px; height:16px; }
  .ftab-n { font-size:11px; font-weight:600; color:var(--text-secondary); background:var(--surface-1); border:1px solid var(--line);
            border-radius:10px; padding:1px 7px; line-height:1.4; }
  .ftab-btn.active .ftab-n { color:var(--ink); border-color:var(--ink); }
  .ftab-n.alert { color:var(--status-watch); border-color:var(--status-watch); }
  .ftab-n:empty { display:none; }
  .ftab-s { display:none; }
  /* MOBILE (retour fondateur 15/09, Pixel 8 : 3 onglets visibles sur 6) : les SIX onglets tiennent sur une
     ligne — icône au-dessus d'un libellé court, compteur en pastille sur l'icône. Plus de défilement caché. */
  @media (max-width:640px){
    .ftabs { display:grid; grid-template-columns:repeat(6, minmax(0,1fr)); gap:0; overflow:visible; }
    .ftab-btn { position:relative; flex-direction:column; gap:4px; padding:9px 2px 7px; font-size:10.5px; line-height:1.1;
                white-space:normal; text-align:center; border-bottom-width:2px; }
    .ftab-ico .ic { width:20px; height:20px; }
    .ftab-l { display:none; } .ftab-s { display:inline; }
    .ftab-n { position:absolute; top:2px; right:calc(50% - 26px); font-size:9px; padding:0 4px; line-height:1.4;
              background:var(--surface-2); border-color:var(--text-secondary); }
  }
  /* SOUS-ONGLETS de « Personnes & contrôle » (fondateur 29/09) : contrôle segmenté, COLLANT juste sous la barre
     d'onglets (hauteur mesurée → --ftabs-h), compteur discret ; un sous-onglet vide est masqué. */
  .psubs { display:flex; gap:6px; padding:5px; margin:0 0 14px; background:var(--surface-1); border:1px solid var(--line);
           border-radius:10px; position:sticky; top:calc(var(--ftabs-h, 50px) + 8px); z-index:29; box-shadow:0 -8px 0 var(--surface-0, var(--bg, #f3f2ee)); }
  .psub-btn { flex:1 1 0; min-width:0; display:inline-flex; align-items:center; justify-content:center; gap:7px;
              background:var(--surface-2); border:1px solid transparent; border-radius:8px; padding:10px 12px; font:inherit;
              font-size:14px; font-weight:650; color:var(--text-primary); cursor:pointer; white-space:nowrap; overflow:hidden;
              text-overflow:ellipsis; transition:background .12s, color .12s; }
  .psub-btn:hover { border-color:var(--ink); }
  .psub-btn .psub-ico { width:17px; height:17px; flex-shrink:0; }
  .psub-btn.on { background:var(--ink); color:var(--text-on-ink); border-color:var(--ink); box-shadow:0 2px 6px rgba(0,0,0,.18); }
  .psub-btn.on .psub-n { color:var(--text-on-ink); border-color:currentColor; }
  .psub-btn[hidden] { display:none; }
  .psub-s { display:none; }
  .psub-n { font-size:11px; font-weight:600; color:var(--text-secondary); border:1px solid var(--line); border-radius:10px;
            padding:0 6px; line-height:1.5; }
  .psub-n:empty { display:none; }

  /* GROUPE & CAPITAL : état actuel en tête — chaîne de contrôle, détenue par, détient, mandats exercés */
  .grp .grp-intro { font-size:12.5px; margin:0 0 10px; }
  .grp-body.two { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); column-gap:48px; align-items:start; }
  .grp-body.one .grp-col { max-width:680px; }
  .grp-row + .grp-row { border-top:1px dashed color-mix(in srgb, var(--line) 70%, transparent); }
  .grp-sec { border:1px solid var(--line); border-radius:10px; margin:0 0 14px; min-width:0; overflow:hidden; background:var(--surface-1); }
  .grp-bd { padding:6px 14px 8px; }
  .grp-n { margin-left:auto; font-size:11.5px; font-weight:700; color:var(--ink); background:var(--surface-1);
           border:1px solid var(--line); border-radius:10px; padding:0 8px; line-height:1.6; }
  .grp-ico { width:16px; height:16px; color:var(--ink); flex-shrink:0; }
  .grp-note { font-size:12.5px; color:var(--status-watch); background:color-mix(in srgb, var(--status-watch) 8%, transparent);
              border-radius:6px; padding:6px 10px; margin:6px 0 4px; }
  .grp-pct { font-weight:700; font-variant-numeric:tabular-nums; }
  .grp-h { display:flex; align-items:center; gap:8px; font-size:13px; font-weight:700; color:var(--text-primary);
           padding:9px 14px; background:var(--surface-2); border-bottom:1px solid var(--line); }
  .grp-row { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:5px 0; min-height:32px; }
  .grp-name { min-width:0; overflow-wrap:anywhere; }
  .grp-val { display:flex; align-items:center; gap:8px; white-space:nowrap; flex-shrink:0; }
  .grp-sh { font-size:11.5px; }
  .grp-chip { font-size:10.5px; font-weight:600; padding:1px 7px; border-radius:10px; color:var(--text-on-ink); background:var(--status-watch); }
  .grp-chip.soft { background:none; color:var(--status-watch); border:1px solid var(--status-watch); }
  .grp-chain { list-style:none; margin:0; padding:0 0 0 4px; }
  .grp-step { position:relative; padding:4px 0 4px 20px; }
  .grp-step { line-height:22px; }
  .grp-step::before { content:""; position:absolute; left:4px; top:11px; width:8px; height:8px; border-radius:50%;
                      background:var(--surface-1); border:2px solid var(--text-secondary); }
  .grp-step:not(:last-child)::after { content:""; position:absolute; left:8px; top:21px; bottom:-8px; width:2px; background:var(--line); }
  .grp-step.head::before { border-color:var(--ink); background:var(--ink); }
  .grp-step.self::before { border-color:var(--accent); background:var(--accent); }
  .grp-tag { font-size:11px; margin-left:6px; white-space:nowrap; display:inline-block; }
  .grp-more summary { cursor:pointer; font-size:12.5px; color:var(--ink); padding:6px 0; }
  @media (max-width:640px){
    .psubs { top:calc(var(--ftabs-h, 62px) + 8px); margin-bottom:10px; }
    .psub-btn { font-size:13px; padding:9px 4px; gap:5px; }
    .psub-btn .psub-ico { width:15px; height:15px; }
    .grp-bd { padding:4px 12px 6px; }
    .psub-l { display:none; } .psub-s { display:inline; }
    .psub-n { font-size:10px; padding:0 4px; }
    /* mobile : une seule colonne dans l'ordre LOGIQUE — chaîne, détenue par, détient, mandats exercés */
    .grp-body.two { display:flex; flex-direction:column; align-items:stretch; }
    .grp-body.two .grp-col { display:contents; }
    .grp-sec.o1 { order:1; } .grp-sec.o2 { order:2; } .grp-sec.o3 { order:3; } .grp-sec.o4 { order:4; }

    .grp-row { flex-direction:column; align-items:flex-start; gap:2px; padding:6px 0; }
    .grp-val { gap:8px; font-size:13px; }
    #cy { height:calc(100vh - 230px) !important; min-height:360px; }
  }
  /* LÉGENDE des tableaux (retour fondateur 15/09) : une convention, un seul composant — bouton discret à
     droite du titre, panneau au survol (desktop) ou au clic (tactile). Plus de lignes de légende inline. */
  .cardh-row { display:flex; align-items:center; justify-content:space-between; gap:10px; margin:0 0 8px; }
  .cardh-row h3 { margin:0; }
  .lg { position:relative; display:inline-block; }
  .lg-btn { background:none; border:1px solid var(--line); border-radius:8px; color:var(--text-secondary); font-size:12px;
            padding:3px 9px; cursor:pointer; display:inline-flex; align-items:center; gap:5px; }
  .lg-btn:hover, .lg.open .lg-btn { color:var(--text-primary); border-color:var(--ink); }
  .lg-pop { display:none; position:absolute; right:0; top:calc(100% + 6px); z-index:40; width:min(92vw, 440px);
            background:var(--surface-1); border:1px solid var(--line); border-radius:12px; padding:12px 14px;
            font-size:12.5px; line-height:1.5; text-align:left; }
  .lg:hover .lg-pop, .lg.open .lg-pop { display:block; }
  .lg-pop h4 { margin:0 0 6px; font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:var(--text-secondary); }
  .lg-row { display:flex; gap:10px; align-items:baseline; margin:4px 0; }
  .lg-row .lg-k { flex:0 0 110px; white-space:nowrap; font-weight:600; }
  .lg-sep { border-top:1px solid var(--line); margin:8px 0; }
  /* Synthèse : le positionnement en UNE ligne (le tableau complet vit dans Analyse) */
  .posbrief { display:flex; align-items:center; gap:10px; flex-wrap:wrap; cursor:pointer; }
  .kf-pos-tile .kf-v { font-size:14px; }
  .kf-pos-tile .kf-v.pv-up { color:var(--status-ok); } .kf-pos-tile .kf-v.pv-down { color:var(--status-watch); } .kf-pos-tile .kf-v.pv-bad { color:var(--status-critical); }
  .posbrief .muted { font-size:12px; }
  .topline { display:flex; align-items:flex-start; gap:12px; flex-wrap:wrap; }
  .topline .right { margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
  #msg { font-size:13px; margin-top:8px; }
  .yhead small { display:block; margin-top:3px; }
  .leaflet-popup-content a { color:var(--ink); }
  .leaflet-popup-content-wrapper, .leaflet-popup-tip { background:var(--surface-1); color:var(--text-primary); }
  /* clusters de la carte */
  .fr-cluster { width:100%; height:100%; border-radius:50%; display:flex; align-items:center;
    justify-content:center; font-weight:700; font-size:13px; color:var(--text-on-ink);
    background:var(--ink);
    border:2px solid var(--surface-1); transition:transform .15s ease; }
  /* cluster qui contient l'entreprise survolée dans la liste → il brille */
  .fr-cluster-hl { transform:scale(1.14); border-color:var(--accent); }
  .maplegend { display:flex; gap:14px; flex-wrap:wrap; font-size:12px; color:var(--text-secondary); margin-top:8px; }
  .maplegend i { display:inline-block; width:11px; height:11px; border-radius:50%; margin-right:4px; vertical-align:-1px; }
  /* sélecteur de langue (FR/EN/NL) */
  .langsw { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
  .langsw button { background:var(--surface-2); color:var(--text-secondary); border:none; padding:5px 9px; font-size:12px;
     font-weight:600; cursor:pointer; }
  .langsw button.on { background:var(--ink); color:var(--text-on-ink); }
  .langsw button:not(.on):hover { color:var(--text-primary); }
  #login .langsw { margin:18px auto 0; width:fit-content; }
  .usermenu .langsw { display:flex; margin:4px; }
  .usermenu .langsw button { flex:1; }
  /* mobile : la recherche passe en pleine largeur sur sa propre ligne ; le compte reste en
     haut à droite (sinon le menu déroulant, ancré à droite du chip, débordait hors écran). */
  @media (max-width:560px) {
    header { padding:12px 14px; gap:10px; }
    #searchbox { margin-left:auto; }
    #userbox { margin-left:0; }
  }
  /* vue intégrée liste + carte côte à côte (desktop) */
  .splitview { display:flex; gap:14px; align-items:flex-start; }
  .listpane { flex:1 1 58%; min-width:0; }
  /* carte = toute la hauteur d'écran disponible (fondateur 02/10) : volet collant haut de 100vh − marges,
     la barre (infos + légende) prend sa hauteur, la carte remplit le reste (flex). */
  .mappane { flex:1 1 42%; align-self:flex-start; position:sticky; top:14px; height:calc(100vh - 28px); min-height:460px;
     display:flex; flex-direction:column;
     border:1px solid var(--line); border-radius:10px; overflow:hidden; background:var(--surface-1); }
  .mapbar { display:flex; align-items:center; gap:10px 12px; flex-wrap:wrap; padding:8px 11px;
     border-bottom:1px solid var(--line); font-size:12px; color:var(--text-secondary); }
  .mapbar #mapinfo b { color:var(--text-primary); }
  .mapbar .zone { margin-left:auto; padding:5px 10px; font-size:12px; }
  .mappane .maplegend { margin-top:0; }
  #leafmap { flex:1 1 auto; min-height:0; }
  /* en-tête de l'Explorer flottant (stickListHead → --lhy) : les th glissent au-dessus des lignes */
  #lhead th { position:relative; z-index:2; transform:translateY(var(--lhy, 0px)); }
  #lhead th:first-child { position:sticky; z-index:3; }
  #lhead.stuck th { box-shadow:0 1px 0 var(--line), 0 4px 8px -4px color-mix(in srgb, var(--text-primary) 18%, transparent); }
  #viewtoggle { display:none; margin-bottom:12px; }   /* segmented Liste|Carte : mobile uniquement */
  tbody tr.hl td { background:var(--tint-ink) !important; }    /* ligne liée au pin cliqué */
  @media (max-width:900px) {
    .splitview { display:block; }
    #viewtoggle { display:inline-flex; }
    .mappane { position:static; height:auto; display:block; }
    #leafmap { height:64vh; }
    .splitview.show-list .mappane { display:none; }
    .splitview.show-map  .listpane { display:none; }
  }
  /* ───────────────────── HOME anonyme (brand §7) ───────────────────── */
  #landing { display:none; color:var(--text-primary); overflow-wrap:break-word; }
  body.landing #landing { display:block; max-width:100%; }        /* visible uniquement en mode landing */
  body.landing > header, body.landing > main { display:none; }
  .lp-steps>*, .lp-split>*, .lp-stats>*, .lp-price-cards>* { min-width:0; }   /* une piste ne pousse jamais la page */
  .lp-nav { position:sticky; top:0; z-index:20; display:flex; align-items:center; gap:14px;
     padding:12px 24px; background:var(--surface-1); border-bottom:1px solid var(--line); }
  .lp-nav .brand { font-size:20px; font-weight:700; cursor:pointer; color:var(--ink); display:inline-flex; align-items:center; gap:8px; letter-spacing:-.02em; }
  .lp-nav .brand img { width:24px; height:24px; }
  .lp-nav .spacer { flex:1; }
  .lp-nav-link { color:var(--text-secondary); font-size:14px; cursor:pointer; padding:8px 6px; white-space:nowrap; text-decoration:none; }
  .lp-nav-link:hover { color:var(--text-primary); }
  .lp-btn { border-radius:var(--radius-ctl); padding:9px 18px; font-size:14px; font-weight:600; cursor:pointer;
     border:1px solid transparent; text-decoration:none; display:inline-flex; align-items:center; gap:8px; transition:background .15s ease, border-color .15s ease; }
  .lp-btn.primary { background:var(--ink); color:var(--text-on-ink); }
  .lp-btn.primary:hover { background:var(--ink-hover); }
  .lp-btn.ghost { background:transparent; color:var(--text-primary); border-color:var(--line-strong); }
  .lp-btn.ghost:hover { border-color:var(--ink); color:var(--ink); }
  .lp-btn.lg { padding:13px 26px; font-size:16px; }
  /* ── recherche publique (la démonstration est le produit) : sa propre bande, entre la démo et « pour qui » ── */
  .hm-search-band { padding:56px 0; background:var(--surface-1); border-top:1px solid var(--line); border-bottom:1px solid var(--line); text-align:center; }
  .hm-search-title { font-size:clamp(20px,2.6vw,28px); font-weight:800; letter-spacing:-.02em; margin:0 0 18px; }
  .hm-search-wrap { max-width:640px; margin:0 auto; }
  .hm-search-lbl { font-size:13px; color:var(--text-secondary); margin-bottom:8px; }
  .hm-search { display:flex; align-items:center; gap:10px; background:var(--surface-1); border:1.5px solid var(--line-strong);
     border-radius:14px; padding:6px 6px 6px 16px; max-width:640px; margin:0 auto; text-align:left; transition:border-color .15s; }
  .hm-search:focus-within { border-color:var(--ink); box-shadow:0 0 0 4px var(--ring); }
  .hm-search .ic { width:20px; height:20px; color:var(--text-secondary); }
  .hm-search input { flex:1; min-width:0; border:0; background:transparent; font:inherit; font-size:17px; padding:10px 0; min-height:44px; box-shadow:none; }
  .hm-search input:focus-visible { outline:none; box-shadow:none; border:0; }
  .hm-search button { padding:11px 18px; font-size:15px; border-radius:10px; }
  .hm-hint { color:var(--text-secondary); font-size:13px; margin:14px 0 0; }
  .hm-results { max-width:640px; margin:10px auto 0; text-align:left; background:var(--surface-1); border:1px solid var(--line-strong); border-radius:12px; overflow:hidden; }
  .hm-res { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:11px 14px; border-bottom:1px solid var(--line); cursor:pointer; color:inherit; text-decoration:none; }
  .hm-res:last-child { border-bottom:0; } .hm-res:hover, .hm-res:focus-visible { background:var(--surface-2); outline:none; }
  .hm-res-main { min-width:0; display:flex; flex-direction:column; gap:2px; }
  .hm-res-sub { color:var(--text-secondary); font-size:12.5px; }
  .hm-res-cta { flex:none; color:var(--ink); font-weight:600; font-size:13px; white-space:nowrap; }
  @media (max-width:560px){ .hm-res-cta { white-space:normal; text-align:right; max-width:42%; font-size:12.5px; } }
  .hm-res-none { padding:12px 14px; color:var(--text-secondary); font-size:13.5px; }
  /* ── sections ── */
  .lp-wrap { max-width:1060px; margin:0 auto; padding:0 24px; }
  .lp-section { padding:76px 0; }
  .lp-eyebrow { text-align:center; color:var(--accent-text); font-size:12.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; margin-bottom:10px; }
  .lp-h2 { text-align:center; font-size:clamp(24px,3.4vw,36px); font-weight:800; letter-spacing:-.02em; margin:0 0 12px; line-height:1.15; }
  .lp-lead { text-align:center; color:var(--text-secondary); max-width:640px; margin:0 auto 40px; font-size:16.5px; line-height:1.55; }
  /* ── qui / démo : pièces héritées de la landing v1 (copie du cours EMBA), sans radar ni dégradé ── */
  /* hero */
  .lp-hero { position:relative; padding:72px 24px 56px; text-align:center; background:var(--surface-1); border-bottom:1px solid var(--line); }
  /* width:100% indispensable : enfant d'un flex centré (align-items:center) NON étiré, sinon il
     prend sa largeur de CONTENU jusqu'à max-width (880px) → déborde un écran de 412 px (Pixel 8). */
  .lp-hero-inner { position:relative; z-index:1; width:100%; max-width:880px; margin:0 auto; }
  .lp-badge { display:inline-flex; align-items:center; gap:7px; font-size:12px; color:var(--ink);
     border:1px solid color-mix(in srgb, var(--ink) 40%, transparent); background:color-mix(in srgb, var(--ink) 8%, transparent); border-radius:999px;
     padding:5px 13px; margin-bottom:22px; }
  .lp-hero h1 { font-size:clamp(28px,5.4vw,50px); line-height:1.1; margin:0 0 16px; letter-spacing:-.025em; font-weight:800; }
  .lp-hero h1 .grad { color:var(--ink); }
  .lp-sub { font-size:clamp(16px,2.1vw,20px); color:var(--text-secondary); max-width:680px; margin:0 auto 30px; line-height:1.55; }
  .lp-actions { display:flex; gap:12px; justify-content:center; flex-wrap:wrap; }
  .lp-note { color:var(--text-secondary); font-size:13px; margin-top:16px; }
  /* stats */
  .lp-stats { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; max-width:880px; margin:40px auto 0; }
  /* tuiles de chiffres : posées sur le canevas (relief par plans), trait d'or en tête — pas de boîte plate sur papier */
  .lp-stat { background:var(--surface-0); border:1px solid var(--line); border-top:3px solid var(--accent); border-radius:12px; padding:18px 14px 16px; text-align:center; }
  .lp-stat b { display:block; font-size:clamp(22px,2.5vw,34px); font-weight:800; color:var(--ink); font-family:var(--font-num); letter-spacing:-.02em; line-height:1.1; white-space:nowrap; }
  .lp-stat span { display:block; margin-top:6px; color:var(--text-secondary); font-size:12px; font-weight:600; letter-spacing:.05em; text-transform:uppercase; }
  /* steps */
  .lp-steps { display:grid; grid-template-columns:repeat(3,1fr); gap:18px; counter-reset:step; }
  .lp-step { background:var(--surface-1); border:1px solid var(--line); border-radius:16px; padding:26px; position:relative; }
  .lp-step::before { counter-increment:step; content:counter(step); position:absolute; top:-16px; left:24px;
     width:34px; height:34px; border-radius:10px; background:var(--ink); color:var(--text-on-ink);
     font-weight:800; display:flex; align-items:center; justify-content:center; }
  .lp-step h3 { margin:14px 0 6px; font-size:17px; } .lp-step p { margin:0; color:var(--text-secondary); font-size:15px; line-height:1.5; }
  /* final cta */
  /* landing : lien nav + section tarifs */
  /* section veille & alertes : texte + feed live */
  .lp-split { display:grid; grid-template-columns:1.05fr .95fr; gap:44px; align-items:center; }
  .lp-split .lp-eyebrow, .lp-split .lp-h2, .lp-split .lp-lead { text-align:left; margin-left:0; margin-right:0; }
  .lp-bullets { list-style:none; padding:0; margin:8px 0 0; display:grid; gap:13px; }
  .lp-bullets li { position:relative; padding-left:28px; color:var(--text-primary); font-size:15px; }
  .lp-bullets li::before { content:'✓'; position:absolute; left:0; top:-1px; color:var(--status-ok); font-weight:800; }
  .lp-ic { width:46px; height:46px; border-radius:12px; display:flex; align-items:center; justify-content:center; color:var(--ink);
     background:var(--tint-ink); border:1px solid color-mix(in srgb, var(--ink) 30%, transparent); margin-bottom:16px; }
  .lp-ic .ic { width:22px; height:22px; }
  .lp-who .lp-step::before { content:none; }   /* cartes « situations » : icône, pas de numéro d'étape */
  .lp-who { grid-template-columns:repeat(2,1fr); }   /* 4 situations en 2×2 (1 colonne sur mobile via .lp-steps) */
  .lp-who .lp-step h3 { margin-top:6px; }
  .lp-case-who { font-size:12.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--accent-text); }
  /* section IA : démo de conversation animée (langage naturel → réponse sourcée) */
  /* Fenêtre de chat de la landing = la page chat connectée en miniature : .ai-frame, en-tête
     .chat-main-head (aiMark + « Idonis » + rôle), bulles .cm-user/.cm-assistant.
     Ce que le visiteur voit ici est ce qu'il retrouvera une fois connecté — pas une maquette à part. */
  /* hauteur FIXE : le fil défile DANS la fenêtre (barre masquée) — sinon la page montait et descendait au rythme
     des réponses (retour fondateur 19/09) */
  .lp-chat { border-radius:14px; overflow:hidden; display:flex; flex-direction:column; height:520px; }
  .lp-chat.ai-frame { border-color:var(--line); }   /* = .chat-main.ai-frame (revamp 02/10) : le filet de l'en-tête et la saisie portent la signature */
  .lp-chat-head { justify-content:space-between; }
  .lp-chat-head .cm-title { font-weight:700; }
  /* badge sur l'en-tête PAPIER (revamp 02/10 ; il était blanc sur encre) : pastille au liseré irisé, comme .ai-badge */
  .lp-chat-badge { margin-left:auto; font-size:10.5px; font-weight:700; color:var(--ink); letter-spacing:.01em; white-space:nowrap; border-radius:999px; padding:3px 10px;
     background:linear-gradient(var(--surface-1), var(--surface-1)) padding-box, linear-gradient(90deg, var(--ai-iris-lin)) border-box; border:1px solid transparent; }
  .lp-ai-stream { flex:1; min-height:0; padding:16px; display:flex; flex-direction:column; gap:11px;
     overflow-y:auto; overflow-x:hidden; scrollbar-width:none; transition:opacity .45s ease; }
  .lp-ai-stream::-webkit-scrollbar { display:none; }
  .lp-ai-stream.fade { opacity:0; }
  .lp-ai-persona { align-self:center; font-size:11.5px; font-weight:600; color:var(--ink); margin-bottom:2px;
     background:color-mix(in srgb, var(--ink) 8%, transparent); border:1px solid color-mix(in srgb, var(--ink) 28%, transparent); border-radius:999px; padding:4px 13px; }
  .lp-mrow { display:flex; gap:9px; max-width:100%; }
  .lp-mrow.user { justify-content:flex-end; }
  .lp-mrow.bot { justify-content:flex-start; align-items:flex-start; }
  .lp-mrow.bot .ai-mark { margin-top:1px; }
  .lp-msg { font-size:13.5px; line-height:1.6; padding:11px 14px; border-radius:13px; }
  .lp-mrow.user .lp-msg { max-width:84%; color:var(--text-primary); min-height:18px; border-bottom-right-radius:4px;   /* = .cm-user */
     background:var(--tint-ink); border:1px solid color-mix(in srgb, var(--ink) 32%, transparent); }
  .lp-mrow.user .lp-msg.typing::after { content:'▌'; margin-left:1px; animation:caret .9s steps(1) infinite; }
  @keyframes caret { 50%{opacity:0} }
  .lp-botcol { display:flex; flex-direction:column; gap:6px; max-width:calc(100% - 40px); min-width:0; }
  .lp-mrow.bot .lp-msg { max-width:100%; background:var(--surface-2); border:1px solid color-mix(in srgb, var(--ink) 16%, transparent); color:var(--text-primary);   /* = .cm-assistant */
     border-bottom-left-radius:4px; opacity:0; transform:translateY(8px); transition:opacity .4s ease, transform .4s ease; }
  .lp-mrow.bot .lp-msg.show { opacity:1; transform:none; }
  /* pastilles d'outils (comme le vrai chat) : apparaissent au-dessus de la réponse */
  .lp-pills { display:flex; flex-wrap:wrap; gap:6px; animation:pillIn .35s ease; }
  .lp-pill { font-size:11px; background:color-mix(in srgb, var(--ink) 9%, transparent); border:1px solid var(--line); color:var(--text-secondary);
     border-radius:999px; padding:3px 10px; white-space:nowrap; }
  @keyframes pillIn { from{ opacity:0; transform:translateY(-3px);} to{ opacity:1; transform:none;} }
  .lp-msg .ln { display:block; } .lp-msg .ln + .ln { margin-top:2px; }
  .lp-msg .hl { color:var(--ink); font-weight:700; }
  .lp-pill .ic-inl { width:13px; height:13px; }
  .lp-src { margin-top:10px; padding-top:9px; border-top:1px solid var(--line); font-size:11.5px;
     color:var(--status-ok); display:flex; align-items:center; gap:6px; }
  .lp-think { display:inline-flex; gap:5px; padding:13px 15px; background:var(--surface-2);
     border:1px solid color-mix(in srgb, var(--ink) 16%, transparent); border-radius:13px; }
  .lp-think span { width:6px; height:6px; border-radius:50%; background:var(--text-secondary); animation:thinking 1.2s infinite; }
  .lp-think span:nth-child(2){ animation-delay:.18s } .lp-think span:nth-child(3){ animation-delay:.36s }
  @keyframes thinking { 0%,60%,100%{ opacity:.3; transform:translateY(0) } 30%{ opacity:1; transform:translateY(-3px) } }
  /* Zone de saisie du chat : RESSEMBLE à un champ (frappe de l'utilisateur) mais tout CLIC = CTA
     (inscription). Au survol, le placeholder cède la place à l'appel à l'action. */
  /* = .chat-input/.chat-compose de la page chat (revamp 02/10) : barre au liseré irisé tournant, bouton encre + anneau irisé */
  .lp-chat-input { display:block; padding:12px 14px; border-top:1px solid var(--line); background:var(--surface-1);
     cursor:pointer; position:relative; text-decoration:none; outline:none; }
  .lp-chat-input .chat-compose { align-items:center; padding:5px 5px 5px 12px; }
  .lp-chat-input:hover .chat-compose, .lp-chat-input:focus-visible .chat-compose { box-shadow:-8px 0 22px -8px var(--ai-halo-l), 8px 0 22px -8px var(--ai-halo-r); }
  .lp-chat-input .ph { flex:1; color:var(--text-secondary); font-size:13px; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .lp-chat-input .ph::after { content:'▏'; margin-left:1px; color:var(--ink); animation:caret 1.1s steps(1) infinite; }
  /* CTA EXPLICITE, toujours visible (pas au survol) : dit la valeur, pas « créer un compte » */
  .lp-try-btn { flex:0 0 auto; display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:700;
     color:var(--text-on-ink); border-radius:10px; padding:7px 13px; white-space:nowrap;
     background:linear-gradient(var(--ink), var(--ink)) padding-box, conic-gradient(from var(--ai-a), var(--ai-iris)) border-box;
     border:2px solid transparent; box-shadow:-5px 0 14px -6px var(--ai-halo-l), 5px 0 14px -6px var(--ai-halo-r); animation:aiSpin 10s linear infinite; }
  .lp-chat-input:hover .lp-try-btn, .lp-chat-input:focus-visible .lp-try-btn {
     background:linear-gradient(var(--ink-hover), var(--ink-hover)) padding-box, conic-gradient(from var(--ai-a), var(--ai-iris)) border-box; }
  @media (prefers-reduced-motion:reduce){ .lp-try-btn { animation:none; } }
  .lp-try-btn .arr { font-size:14px; }
  .lp-aitry { color:var(--text-secondary); font-size:13px; margin-top:22px; padding-left:14px; border-left:2px solid var(--ink); }
  /* ── tarifs (inchangés) ── */
  #lp-pricing { text-align:center; }
  .lp-price-toggle { display:inline-flex; gap:4px; background:var(--surface-1); border:1px solid var(--line); border-radius:22px; padding:4px; margin:22px 0 26px; }
  .lp-price-toggle button { border:0; background:transparent; color:var(--text-secondary); border-radius:18px; padding:7px 16px; font-size:13px; cursor:pointer; }
  .lp-price-toggle button.on { background:var(--ink); color:var(--text-on-ink); }
  .lp-price-toggle .save { font-size:10.5px; opacity:.9; }
  .lp-price-cards { display:grid; grid-template-columns:repeat(2,minmax(0,320px)); gap:18px; justify-content:center; }
  /* Gamme à TROIS formules (Free · Pro · Entreprise) : 3 pistes au-delà de 1040 px, 2 puis 1 ensuite. */
  .lp-price-cards.lp-price-3 { grid-template-columns:repeat(3,minmax(0,320px)); }
  @media (max-width:1040px){ .lp-price-cards.lp-price-3 { grid-template-columns:repeat(2,minmax(0,320px)); } }
  @media (max-width:680px){ .lp-price-cards, .lp-price-cards.lp-price-3 { grid-template-columns:1fr; } }
  .lp-aster { font-size:.82rem; opacity:.75; max-width:52rem; margin-inline:auto; }
  .lp-price-card { position:relative; background:var(--surface-1); border:1px solid var(--line); border-radius:var(--radius-card); padding:26px 24px; text-align:left; display:flex; flex-direction:column; }
  .lp-price-card.pro { border-color:var(--accent); }
  .pc-badge { position:absolute; top:-11px; left:24px; background:var(--accent); color:var(--text-on-ink); font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; padding:3px 10px; border-radius:10px; }
  .pc-name { font-size:15px; font-weight:700; color:var(--text-secondary); }
  .pc-price { font-size:38px; font-weight:800; letter-spacing:-.02em; margin:4px 0 2px; }
  .pc-price .pc-per { font-size:15px; font-weight:600; color:var(--text-secondary); }
  .pc-sub { color:var(--text-secondary); font-size:13px; margin-bottom:16px; min-height:34px; }
  .pc-feats { list-style:none; padding:0; margin:0 0 22px; display:flex; flex-direction:column; gap:9px; flex:1; }
  .pc-feats li { font-size:13.5px; padding-left:24px; position:relative; }
  .pc-feats li::before { content:'✓'; position:absolute; left:0; color:var(--status-ok); font-weight:700; }
  .lp-note { color:var(--text-secondary); font-size:13px; }
  /* Free n'est pas un client : carte plus discrète (fond de page, texte secondaire), alignée en bas avec les autres. */
  .lp-price-card.free { background:transparent; border-style:dashed; }
  .lp-price-card.free .pc-price { font-size:30px; color:var(--text-secondary); }
  /* « Tout Free, et : » — la carte dit ce qu'elle AJOUTE, pas l'inventaire. */
  .pc-plus { font-size:12.5px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--text-secondary); margin:0 0 10px; }
  .pc-cta-note { font-size:12px; color:var(--text-secondary); text-align:center; margin-top:8px; }
  /* Tarif de lancement : sous le prix, avant « Tout Free, et : » (la .pc-sub au-dessus porte déjà la marge). */
  .pc-launch { font-size:12.5px; font-weight:600; color:var(--accent); margin:-8px 0 16px; }
  /* Grands comptes : une phrase et un bouton sous les cartes, pas une 4ᵉ carte. */
  .lp-large { max-width:52rem; margin:26px auto 0; text-align:center; font-size:14px; color:var(--text-secondary); display:flex; flex-wrap:wrap; gap:10px 14px; align-items:center; justify-content:center; }
  /* Tableau « dans le détail » : valeurs réelles du catalogue, colonne Pro accentuée comme sa carte. */
  /* Replié par défaut : <details> natif (pas de JS, contenu indexable). Le résumé est le bouton « en savoir plus ». */
  .lp-cmp-details { max-width:860px; margin:40px auto 0; }
  .lp-cmp-details summary { cursor:pointer; list-style:none; text-align:center; font-size:15px; font-weight:700; padding:12px 18px; border:1px solid var(--line); border-radius:12px; background:var(--surface-1); }
  .lp-cmp-details summary::-webkit-details-marker { display:none; }
  .lp-cmp-details summary::after { content:' ▾'; color:var(--text-secondary); }
  .lp-cmp-details[open] summary::after { content:' ▴'; }
  .lp-cmp-details[open] summary { margin-bottom:16px; }
  .lp-cmp td.note { text-align:left; font-size:12.5px; color:var(--text-secondary); }
  .lp-cmp-wrap { max-width:860px; margin:0 auto; overflow-x:auto; }
  .lp-cmp { width:100%; min-width:0; border-collapse:collapse; font-size:13.5px; table-layout:fixed; }   /* min-width:0 : le `table{min-width:640px}` global est pour les tableaux de données, pas ici */
  .lp-cmp thead th:first-child { width:34%; }   /* libellé à gauche, 3 colonnes égales : rien ne déborde, même à 390 px */
  .lp-cmp th, .lp-cmp td { padding:9px 12px; text-align:center; border-bottom:1px solid var(--line); vertical-align:middle; white-space:normal; }
  .lp-cmp thead th { font-size:13px; font-weight:700; color:var(--text-secondary); border-bottom:2px solid var(--line); }
  .lp-cmp tbody th { text-align:left; font-weight:500; }
  .lp-cmp tr.grp th { padding-top:18px; font-size:11.5px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--text-secondary); border-bottom:0; }
  .lp-cmp .pro { background:color-mix(in srgb, var(--accent) 7%, transparent); }
  .lp-cmp thead th.pro { color:var(--accent); }
  .lp-cmp .cmp-yes { color:var(--status-ok); font-weight:700; }
  .lp-cmp .cmp-no { color:var(--text-secondary); opacity:.6; }
  @media (max-width:680px){ .lp-cmp { font-size:12px; } .lp-cmp th, .lp-cmp td { padding:7px 5px; } .lp-cmp thead th:first-child { width:30%; } }
  /* ── final + pied ── */
  .lp-final-cta { display:flex; gap:12px; justify-content:center; flex-wrap:wrap; }
  .lp-final { text-align:center; margin:0 24px 80px; padding:56px 24px; border-radius:20px; background:var(--ink); color:var(--text-on-ink); }
  .lp-final h2 { font-size:clamp(24px,3.4vw,36px); font-weight:800; margin:0 0 10px; letter-spacing:-.02em; }
  .lp-final p { color:color-mix(in srgb, var(--text-on-ink) 78%, transparent); max-width:560px; margin:0 auto 26px; font-size:16.5px; }
  .lp-final .lp-btn.primary { background:var(--accent); } .lp-final .lp-btn.primary:hover { background:var(--accent-text); }
  .lp-final .lp-btn.ghost { color:var(--text-on-ink); border-color:color-mix(in srgb, var(--text-on-ink) 45%, transparent); }
  .lp-final .lp-btn.ghost:hover { border-color:var(--text-on-ink); color:var(--text-on-ink); }
  .lp-footer { border-top:1px solid var(--line); padding:36px 24px 22px; color:var(--text-secondary); font-size:13px; background:var(--surface-1); }
  .lp-foot-grid { max-width:1060px; margin:0 auto; display:grid; grid-template-columns:1.6fr 1fr 1fr 1.2fr; gap:28px; }
  .lp-foot-grid h4 { margin:0 0 10px; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--text-primary); }
  .lp-foot-grid a { display:block; color:var(--text-secondary); text-decoration:none; padding:3px 0; } .lp-foot-grid a:hover { color:var(--ink); }
  .lp-foot-grid p { margin:0 0 8px; line-height:1.5; }
  .lp-foot-brand .brand { display:inline-flex; align-items:center; gap:8px; font-size:18px; font-weight:700; color:var(--ink); margin-bottom:8px; padding:0; }
  .lp-foot-brand .brand img { width:22px; height:22px; }
  .lp-foot-editor { font-size:12px; }
  .lp-foot-bottom { max-width:1060px; margin:26px auto 0; padding-top:14px; border-top:1px solid var(--line); display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap; font-size:12px; }
  @media (max-width:780px){ .lp-foot-grid { grid-template-columns:1fr 1fr; gap:22px; } .lp-foot-brand { grid-column:1 / -1; } }
  .lp-legal a { color:var(--text-secondary); }
  /* scroll reveal */
  .reveal { opacity:0; transform:translateY(18px); transition:opacity .55s ease, transform .55s ease; }
  .reveal.in { opacity:1; transform:none; }
  @media (prefers-reduced-motion:reduce){ .reveal { opacity:1; transform:none; transition:none; } }
  @media (max-width:780px) {
    .lp-stats { grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
    .lp-steps, .lp-split, .lp-who { grid-template-columns:1fr; gap:22px; }
    .lp-section { padding:56px 0; }
    .lp-hero { padding:52px 18px 40px; }
    .lp-chat { height:460px; }
    .lp-wrap { padding:0 18px; }
    .lp-final { margin:0 18px 60px; padding:44px 20px; }
    .hm-search { border-radius:12px; padding:5px 5px 5px 12px; }
    .hm-search button { padding:10px 14px; font-size:14px; }
  }
  /* nav sur petit écran (Pixel 8 ≈ 412 px) : UNE seule ligne — logo + langues + les 2 CTA. NE PAS masquer
     « Se connecter » (retour fondateur). « Tarifs » est atteignable au défilement. */
  @media (max-width:560px) {
    .lp-nav { flex-wrap:nowrap; padding:10px 8px; gap:6px; }
    .lp-nav .spacer { display:none; }
    .lp-nav .lp-nav-link { display:none; }
    .lp-nav .brand { margin-right:auto; font-size:16px; white-space:nowrap; }
    .lp-nav .brand img { width:18px; height:18px; }
    .lp-nav .lp-btn { padding:7px 9px; font-size:12px; white-space:nowrap; }
    .lp-nav .langsw { gap:0; }
    .lp-nav .langsw button { padding:4px 5px; font-size:11px; }
    .hm-search .ic { display:none; }
    .lp-actions { flex-direction:column; }
    .lp-actions .lp-btn { width:100%; justify-content:center; }
  }
  /* Badges de TYPE de contact (carte Contacts, onglet Information entreprise) */
  .ct-badge { display:inline-block; font-size:11px; font-weight:600; padding:2px 8px; border-radius:999px;
    border:1px solid var(--line); background:var(--surface-1); color:var(--text-secondary);
    white-space:nowrap; }
  .ct-badge.ct-generic { color:var(--ink); border-color:color-mix(in srgb, var(--ink) 35%, transparent); }
  .ct-badge.ct-personal { color:var(--status-watch); border-color:color-mix(in srgb, var(--status-watch) 35%, transparent); }
  .ct-badge.ct-dpo { color:var(--series-7); border-color:color-mix(in srgb, var(--series-7) 35%, transparent); }
  .ct-badge.ct-admin { color:var(--status-ok); border-color:color-mix(in srgb, var(--status-ok) 35%, transparent); }

/* étiquette « HTVA » à côté de chaque prix affiché (décision fondateur 21/09 : prix hors TVA) */
.htva { display:inline-block; font-size:11px; font-weight:600; letter-spacing:.02em; color:var(--text-secondary, #6b7280); border:1px solid currentColor; border-radius:4px; padding:0 5px; line-height:16px; vertical-align:middle; opacity:.85; }
  /* ── ORGANISATION (Entreprise) — identité : l'ocre de marque marque tout ce qui est PARTAGÉ (todo/organisation-partage.md, 21/09) */
  .org-b { display:inline-flex; align-items:center; gap:4px; font-size:10.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase;
     color:var(--accent-text); background:var(--tint-accent); border:1px solid color-mix(in srgb, var(--accent) 45%, transparent); border-radius:9px; padding:1px 7px; vertical-align:1px; }
  .org-b.xs { font-size:9.5px; padding:0 5px; }
  .org-chip { display:inline-flex; align-items:center; gap:6px; background:var(--tint-accent); color:var(--accent-text); border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);
     border-radius:20px; padding:5px 11px; font-size:12.5px; font-weight:700; cursor:pointer; white-space:nowrap; margin-right:8px; max-width:180px; overflow:hidden; text-overflow:ellipsis; }
  .org-chip:hover { background:color-mix(in srgb, var(--accent) 22%, transparent); }
  @media (max-width:720px){ .org-chip { display:none; } }   /* mobile : l'entrée du menu du compte suffit (le header ne doit pas passer à la ligne) */
  .org-hero { position:relative; overflow:hidden; border:1px solid color-mix(in srgb, var(--accent) 40%, var(--line));
     background:linear-gradient(135deg, color-mix(in srgb, var(--accent) 14%, var(--surface-1)) 0%, var(--surface-1) 55%, color-mix(in srgb, var(--ink) 7%, var(--surface-1)) 100%); }
  .org-hero::after { content:""; position:absolute; right:-40px; top:-40px; width:200px; height:200px; border-radius:50%;
     background:radial-gradient(closest-side, color-mix(in srgb, var(--accent) 22%, transparent), transparent); pointer-events:none; }
  .org-hero h2 { margin:0; font-size:24px; letter-spacing:-.01em; }
  .org-plan, .org-hero .org-plan { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase;
     color:var(--text-on-ink); background:linear-gradient(135deg, var(--accent), #8A5A1E); border-radius:8px; padding:3px 9px; vertical-align:3px; box-shadow:0 2px 8px color-mix(in srgb, var(--accent) 35%, transparent); }
  .org-hero .lead { color:var(--text-secondary); font-size:13px; margin:4px 0 0; }
  .org-tabs { display:flex; flex-wrap:wrap; gap:4px; margin:14px 0 12px; border-bottom:1px solid var(--line); padding-bottom:8px; }
  .org-tabs button { background:transparent; border:1px solid transparent; color:var(--text-secondary); border-radius:14px; padding:5px 12px; font-size:13px; cursor:pointer; }
  .org-tabs button.on { color:var(--accent-text); background:var(--tint-accent); border-color:color-mix(in srgb, var(--accent) 45%, transparent); font-weight:700; }
  .org-tabs button b { font-weight:700; margin-left:4px; opacity:.75; }
  .org-ck { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:10px; margin-top:10px; }
  .org-ck .ck { display:flex; gap:10px; align-items:flex-start; padding:10px 12px; border:1px solid var(--line); border-radius:12px; background:var(--surface-2); font-size:13px; }
  .org-ck .ck .n { width:22px; height:22px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; font-size:12px; font-weight:800; flex:none;
     border:1.5px solid var(--accent); color:var(--accent-text); }
  .org-ck .ck.done { border-color:color-mix(in srgb, var(--status-ok) 40%, var(--line)); background:var(--tint-ok); }
  .org-ck .ck.done .n { background:var(--status-ok); border-color:var(--status-ok); color:var(--text-on-ink); }
  .org-ck .ck .ghost { font-size:12px; padding:2px 9px; margin-top:4px; }
  .org-list-row { display:flex; align-items:center; gap:10px; padding:10px 0; border-bottom:1px solid var(--line); font-size:13px; flex-wrap:wrap; }
  .org-list-row .nm { font-weight:700; } .org-list-row .meta { color:var(--text-secondary); font-size:12px; flex:1; min-width:180px; }
  .org-alert { display:flex; align-items:flex-start; gap:10px; padding:10px 0; border-bottom:1px solid var(--line); font-size:13px; flex-wrap:wrap; }
  .org-alert .em { font-weight:700; word-break:break-all; } .org-alert .meta { color:var(--text-secondary); font-size:12px; flex:1; min-width:200px; }
  .org-alert .st { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; border-radius:9px; padding:2px 8px; }
  .org-alert .st.verified { color:var(--status-ok); background:var(--tint-ok); }
  .org-alert .st.pending { color:var(--status-watch); background:var(--tint-watch); }
  .org-alert .st.unsubscribed { color:var(--text-secondary); background:var(--tint-neutral); }
  .org-alert-form { display:grid; grid-template-columns:2fr 1.2fr auto; gap:8px; margin-top:12px; }
  @media (max-width:700px){ .org-alert-form { grid-template-columns:1fr; } }
  .org-usage { width:100%; border-collapse:collapse; font-size:13px; } .org-usage th { text-align:left; font-size:11.5px; color:var(--text-secondary); font-weight:600; padding:6px 8px; border-bottom:1px solid var(--line); }
  .org-usage td { padding:7px 8px; border-bottom:1px solid var(--line); vertical-align:top; } .org-usage td.num, .org-usage th.num { text-align:right; font-variant-numeric:tabular-nums; }
  .org-usage .sub { color:var(--text-secondary); font-size:12px; }
  .org-bars { display:flex; align-items:flex-end; gap:8px; height:120px; padding:8px 4px 0; border-bottom:1px solid var(--line); margin-bottom:6px; }
  .org-bars .bar { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:100%; min-width:26px; max-width:70px; position:relative; }
  .org-bars .bar .fill { width:100%; background:var(--series-1); border-radius:5px 5px 0 0; min-height:2px; }
  .org-bars .bar .fill.open { background:color-mix(in srgb, var(--series-1) 55%, var(--surface-1)); border:1px dashed var(--series-1); }
  .org-bars .bar .cap { position:absolute; left:0; right:0; border-top:1.5px dashed var(--accent); }
  .org-bars .bar .v { font-size:11px; color:var(--text-secondary); margin-bottom:3px; font-variant-numeric:tabular-nums; }
  .org-bar-labels { display:flex; gap:8px; padding:0 4px; } .org-bar-labels span { flex:1; min-width:26px; max-width:70px; text-align:center; font-size:10.5px; color:var(--text-secondary); }
  .org-member-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:12px; margin-top:12px; }
  .org-member-grid .tile { border:1px solid var(--line); border-radius:12px; padding:14px; background:var(--surface-2); font-size:13px; }
  .org-member-grid .tile h4 { margin:0 0 6px; font-size:14px; display:flex; align-items:center; gap:8px; }
  .org-member-grid .tile .ic { width:18px; height:18px; color:var(--accent-text); }
  .ll-group { font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--text-secondary); margin:10px 2px 6px; display:flex; align-items:center; gap:6px; }
  .ll-group.org { color:var(--accent-text); }
  .ll-item.org { border-left:3px solid var(--accent); }
  .listpop .grp { font-size:10.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--text-secondary); padding:6px 10px 2px; }
  .listpop .grp.org { color:var(--accent-text); border-top:1px solid var(--line); margin-top:4px; }
  .pf-ltabs .sep { align-self:center; width:1px; height:18px; background:var(--line); margin:0 4px; }
  .pf-ltabs button.org { border-color:color-mix(in srgb, var(--accent) 45%, transparent); }
  .pf-ltabs button.org.on { border-color:var(--accent); background:var(--tint-accent); color:var(--accent-text); }
  .ll-rcpts label { display:flex; align-items:center; gap:8px; font-size:13px; padding:5px 0; } .ll-rcpts label .muted { font-size:12px; }
  .public-card { max-width:560px; margin:48px auto; text-align:center; padding:28px 24px; }
  .public-card .big { font-size:40px; margin-bottom:8px; }

/* CONSOLE d'administration (todo/archive/console-admin-separee.md) : l'administration SEULE — ni recherche,
   ni onglets clients, ni pastille d'offre, ni pied de page client. Posé par enterApp() quand /api/me dit
   `surface: console`. */
body.console #searchbtn, body.console #upgradechip, body.console #tabs, body.console #navtoggle,
body.console #appfoot { display: none !important; }
body.console #userbox { margin-left: auto; }

/* ── Console d'administration : navigation groupée + cockpit (todo/console-admin-ux.md, lot A) ── */
#adminnav { display:none; gap:2px; padding:0 20px; border-bottom:1px solid var(--line); background:var(--surface-1);
  overflow-x:auto; align-items:stretch; }
body.console:not(.landing) #adminnav { display:flex; }
#adminnav .an-grp { display:flex; align-items:center; gap:2px; padding-right:10px; margin-right:6px; border-right:1px solid var(--line); }
#adminnav .an-grp:last-child { border-right:0; }
#adminnav .an-lbl { font-size:10.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--text-tertiary);
  padding:0 8px 0 4px; white-space:nowrap; }
#adminnav a { position:relative; padding:11px 10px; font-size:13.5px; font-weight:600; color:var(--text-secondary);
  text-decoration:none; white-space:nowrap; }
#adminnav a:hover { color:var(--text-primary); }
#adminnav a.on { color:var(--ink); }
#adminnav a.on::after { content:''; position:absolute; left:8px; right:8px; bottom:-1px; height:2px; background:var(--accent); border-radius:2px 2px 0 0; }
.adm-page { display:flex; flex-direction:column; gap:18px; }
.adm-h { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; }
.adm-h h2 { margin:0; }
.adm-sec h3 { margin:0 0 10px; font-size:13px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--text-secondary); }
.adm-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:12px; }
.adm-card { display:block; background:var(--surface-1); border:1px solid var(--line); border-left:4px solid var(--line); border-radius:10px;
  padding:14px 16px; color:inherit; text-decoration:none; }
a.adm-card:hover { border-color:var(--ink); }
.adm-card.crit { border-left-color:var(--status-critical); }
.adm-card.warn { border-left-color:var(--status-watch); }
.adm-card.ok { border-left-color:var(--status-ok); }
.adm-card .v { font-size:28px; font-weight:800; letter-spacing:-.02em; color:var(--text-primary); line-height:1.1; }
.adm-card .l { font-size:13px; font-weight:600; color:var(--text-primary); margin-top:4px; }
.adm-card .s { font-size:12px; color:var(--text-secondary); margin-top:4px; }
.adm-card.crit .v { color:var(--status-critical); }
.adm-note { font-size:12px; color:var(--text-tertiary); }
/* Liste + éditeur côte à côte (gabarits d'e-mail) : la règle manquait, la liste s'étalait pleine largeur et
   l'éditeur tombait sous 25 gabarits (todo/console-admin-ux.md, lot D). */
.ll-wrap { display:flex; gap:16px; align-items:flex-start; }
.ll-wrap > .ll-list { flex:0 0 300px; max-height:calc(100vh - 190px); overflow:auto; position:sticky; top:12px; padding:10px; }
.ll-grp { font-size:10.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--text-tertiary); margin:10px 2px 6px; }
.ll-grp:first-child { margin-top:0; }
@media (max-width: 900px) { .ll-wrap { flex-direction:column; } .ll-wrap > .ll-list { position:static; max-height:none; flex:none; width:100%; } }
/* Tableaux de la CONSOLE : le style global (tout à droite, sans retour à la ligne, 1re colonne grise figée) est
   celui des tableaux FINANCIERS des fiches. Pour l'administration : texte à gauche, nombres (.num) à droite,
   retour à la ligne permis — c'est ce qui décalait les colonnes et coupait les tableaux à droite. */
body.console th, body.console td { text-align:left; white-space:normal; }
body.console th.num, body.console td.num { text-align:right; white-space:nowrap; }
body.console th:first-child, body.console td:first-child { position:static; background:transparent; }
body.console table { min-width:0; }
/* Revue des identités : une carte par fiche créée par prudence, ses candidates dessous, le sens écrit. */
.pr-grp { display:flex; flex-direction:column; gap:6px; }
.pr-tag { font-size:10.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--text-tertiary); margin-right:6px; }
.pr-cand { display:grid; grid-template-columns:28px 1fr auto; gap:10px; align-items:center; padding:8px 0; border-top:1px solid var(--line); }
.pr-arrow { font-size:20px; color:var(--text-tertiary); text-align:center; line-height:1.2; }
.pr-effect { font-size:12px; color:var(--text-secondary); margin-top:4px; max-width:760px; }
.pr-act { display:flex; gap:6px; align-items:center; flex-wrap:wrap; justify-content:flex-end; }
  /* Dirigeants verrouillés (Free, décision 03/10) : le nombre, ce que Pro ouvre, l'essai */
  .pers-lock { border-style:dashed; }
  .pers-lock-h { display:flex; align-items:center; gap:8px; font-size:15px; margin-bottom:6px; }
  .pers-lock-h .ic { width:18px; height:18px; color:var(--ink); }
  .pers-lock p { margin:0 0 12px; color:var(--text-secondary); font-size:13.5px; line-height:1.5; }

  /* ══ ALERTES (todo/alertes-v2.md) : cloche, boîte, version en ligne ══ */
  #userbox { display:flex; align-items:center; gap:8px; }
  #alertbell { position:relative; background:none; border:1px solid var(--line); border-radius:50%; width:36px; height:36px;
    display:grid; place-items:center; color:var(--ink); cursor:pointer; padding:0; }
  #alertbell:hover { border-color:var(--line-strong); }
  #alertbell .ic { width:18px; height:18px; }
  #alertbell .bell-n { position:absolute; top:-5px; right:-6px; min-width:18px; height:18px; padding:0 5px; border-radius:99px;
    background:var(--status-critical); color:#fff; font-size:11px; font-weight:800; line-height:18px; text-align:center; }
  .ab-pill { display:inline-block; min-width:22px; padding:1px 8px; border-radius:99px; font-size:12px; font-weight:700; text-align:center; }
  .ab-pill.ab-red { background:color-mix(in srgb, var(--status-critical) 14%, transparent); color:var(--status-critical); }
  .ab-pill.ab-orange { background:color-mix(in srgb, var(--status-warn, #B4762A) 16%, transparent); color:var(--status-warn, #9A5B12); }
  .ab-pill.ab-info { background:var(--surface-2); color:var(--text-secondary); }
  .al-list { display:flex; flex-direction:column; }
  .al-row { display:flex; gap:12px; align-items:flex-start; padding:12px 6px; border-top:1px solid var(--line); color:inherit; text-decoration:none; border-radius:8px; }
  .al-row:first-child { border-top:0; }
  .al-row:hover { background:var(--surface-2); }
  .al-dot { width:8px; height:8px; border-radius:50%; margin-top:7px; flex:none; background:transparent; }
  .al-row.unread .al-dot { background:var(--status-critical); }
  .al-row.unread .al-head { font-weight:800; }
  .al-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
  .al-head { font-weight:600; color:var(--ink); }
  .al-sub { font-size:12.5px; color:var(--text-secondary); }
  .al-hl { font-size:13px; color:var(--text-secondary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .al-pills { display:flex; gap:4px; flex:none; }
  .al-dash .sec-head h3 { display:flex; align-items:center; gap:8px; }
  .al-teaser { display:flex; align-items:center; justify-content:space-between; gap:14px; border-style:dashed; }
  .al-teaser b { display:flex; align-items:center; gap:6px; }
  .al-detail h2 { margin:6px 0 4px; }
  .al-key { margin:14px 0 6px; padding:12px 16px; border-left:4px solid var(--accent); background:var(--surface-2); border-radius:0 10px 10px 0; }
  .al-key-t { font-size:12px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--ink); margin-bottom:4px; }
  .al-key ul { margin:0; padding-left:18px; line-height:1.55; }
  .al-filters { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:16px 0 10px; }
  .al-filters select, .al-filters input { height:34px; font-size:13.5px; }
  .al-filters input { flex:1; min-width:180px; }
  .al-chip { border:1px solid var(--line); background:var(--surface-1); border-radius:99px; padding:5px 12px; font-size:13px; cursor:pointer; color:var(--text-primary); }
  .al-chip b { margin-left:4px; }
  .al-chip.on { border-color:var(--ink); background:var(--ink); color:var(--text-on-ink); }
  .al-chip.ab-red:not(.on) b { color:var(--status-critical); }
  .al-table { min-width:0; }
  .al-table td { vertical-align:top; white-space:normal; text-align:left; }
  .al-table td:first-child, .al-table th:first-child { position:static; background:none; }
  .al-co a { font-weight:700; color:var(--ink); display:block; }
  .al-co .num { font-size:12px; }
  .al-ev { position:relative; padding-left:16px !important; }
  .al-bar { position:absolute; left:4px; top:9px; bottom:9px; width:3px; border-radius:2px; background:var(--line); }
  .ab-red .al-bar { background:var(--status-critical); }
  .ab-orange .al-bar { background:var(--status-warn, #B4762A); }
  .al-lists { display:block; font-size:12px; color:var(--text-secondary); margin-top:2px; }
  .al-figs { font-size:13px; }
  .al-fig { display:block; white-space:nowrap; }
  .al-y { display:block; font-size:11.5px; }
  .al-delta { font-size:12px; font-weight:700; }
  .al-delta.pos { color:var(--status-ok); } .al-delta.neg { color:var(--status-critical); }
  .al-pager { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-top:12px; flex-wrap:wrap; }
  .al-pager button { margin:0 4px; }
  @media (max-width:640px){
    .al-table thead { display:none; }
    .al-table, .al-table tbody, .al-table tr, .al-table td { display:block; width:100%; }
    .al-table tr { border-top:1px solid var(--line); padding:10px 0; }
    .al-table td { border:0; padding:2px 0; }
    .al-grade { display:inline-block !important; width:auto !important; margin-right:8px; }
    .al-figs { display:inline-block !important; width:auto !important; }
    .al-fig { display:inline-block; margin-right:10px; }
    .al-detail .topline .right { width:100%; }
    .al-detail .askbtn, .al-detail .xlsbtn { width:100%; justify-content:center; }
    .al-teaser { flex-direction:column; align-items:stretch; }
  }

/* Valeur fiscale des parts au 31/12/2025 (Pro, Analyse › Flux & valeur) — cgtCard() */
.cgt-app-big { font-size:28px; font-weight:700; letter-spacing:-.02em; margin:6px 0 2px; font-variant-numeric:tabular-nums; }
.cgt-app-src { font-size:13px; color:var(--text-secondary); margin:8px 0 0; }
.cgt-app-flag { font-size:13px; margin:8px 0 0; border-left:3px solid var(--warn, #c8892b); padding-left:8px; }
.cgt-app-warn { margin:12px 0 4px; padding:10px 12px; border-radius:8px; background:#fff6e0; border:1px solid #f0d48a; font-size:13px; line-height:1.45; color:#3b2f12; }
.cgt-app-fold { margin:10px 0 0; border-top:1px solid var(--border, #e6e1d6); padding-top:8px; }
.cgt-app-fold summary { cursor:pointer; font-weight:600; }
.cgt-app-tbl { width:100%; border-collapse:collapse; font-size:13px; margin:8px 0 0; }
.cgt-app-tbl td { padding:4px 6px; border-bottom:1px solid var(--border, #e6e1d6); }
.cgt-app-tbl td.num { text-align:right; white-space:nowrap; font-variant-numeric:tabular-nums; }
.cgt-app-tbl tr.tot td { font-weight:700; }
.cgt-app-form { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:6px 16px; margin:8px 0; }
.cgt-app-form label { display:grid; grid-template-columns:48px 1fr 120px; gap:6px; align-items:center; font-size:13px; }
.cgt-app-form input { width:100%; text-align:right; }
.cgt-app-actions { display:flex; flex-wrap:wrap; gap:8px; margin:10px 0 0; }
.xlsbtn.cgt-pdf { background:#5b2a2a; }

.pp-ok { color:#1f7a4d; font-weight:600; }   /* Peppol : inscrite (vert) */
