@layer modules{
  /* ── Atelier Copilote - onglet plein écran, identité IA teintée par moteur (--eng) ── */
  .cw{--eng:var(--accent);display:grid;grid-template-columns:208px minmax(0,1fr) 330px;height:min(78vh,900px);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card)}
  .cw-rail,.cw-main,.cw-side{display:flex;flex-direction:column;min-width:0;overflow:hidden}
  .cw-rail{background:var(--card2);border-right:1px solid var(--line)}
  .cw-main{border-right:1px solid var(--line)}
  .cw-rail-top{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-10) var(--sp-10) var(--sp-6)}
  .cw-rail-top .cw-brand{flex:1}
  .cw-new{margin:var(--sp-2) var(--sp-10) var(--sp-8);padding:var(--sp-6) var(--sp-8);border:1px dashed color-mix(in srgb,var(--accent) 45%,var(--line));border-radius:var(--radius);background:transparent;color:var(--accent);font-weight:var(--fw-strong);font-size:var(--fs-sm);cursor:pointer;text-align:left}
  .cw-new:hover{background:color-mix(in srgb,var(--accent) 9%,transparent)}
  .cw-rail-lbl{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.7px;color:var(--mut2);padding:var(--sp-2) var(--sp-14) var(--sp-4)}
  .cw-rail-list{flex:1;overflow:auto;padding:var(--sp-4) var(--sp-8) var(--sp-10);display:flex;flex-direction:column;gap:var(--sp-2)}
  .cw-conv{position:relative;padding:var(--sp-6) var(--sp-26) var(--sp-6) var(--sp-8);border-radius:var(--radius-sm);cursor:pointer;border:1px solid transparent}
  .cw-conv:hover{background:color-mix(in srgb,var(--txt) 4%,transparent)}
  .cw-conv.on{background:color-mix(in srgb,var(--accent) 13%,transparent);border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
  .cw-conv-t{font-size:var(--fs-sm);font-weight:var(--fw-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cw-conv-s{font-size:var(--fs-2xs);color:var(--mut);margin-top:var(--sp-1)}
  .cw-conv-x{position:absolute;top:50%;right:6px;transform:translateY(-50%);width:18px;height:18px;border:0;background:transparent;color:var(--mut2);border-radius:var(--radius-sm);cursor:pointer;opacity:0;font-size:var(--fs-xs)}
  .cw-conv:hover .cw-conv-x{opacity:1}
  .cw-conv-x:hover{background:color-mix(in srgb,var(--err) 16%,transparent);color:var(--err)}
  .cw-bar{display:flex;align-items:center;gap:var(--sp-6);row-gap:var(--sp-4);padding:var(--sp-6) var(--sp-10);border-bottom:1px solid var(--line);background:var(--card2);flex-wrap:wrap;min-width:0}
  #cw-model{width:auto;min-width:84px;max-width:120px;flex:0 0 auto;padding:var(--sp-4) var(--sp-6)}
  .cw-brand{display:flex;align-items:center;gap:var(--sp-6);font-weight:var(--fw-bold);font-size:var(--fs-md);letter-spacing:.2px;margin-right:var(--sp-2)}
  .cw-spark{color:var(--eng);font-size:var(--fs-base);line-height:var(--lh-flat)}
  .cw-sub{font-weight:var(--fw-strong);font-size:var(--fs-2xs);color:var(--mut);text-transform:uppercase;letter-spacing:.6px;padding:var(--sp-2) var(--sp-8);border:1px solid var(--line2);border-radius:var(--radius-modal)}
  .cw-grow{flex:1 1 auto;min-width:6px}
  .cw-status{display:inline-flex;align-items:center;gap:var(--sp-6);flex:0 1 auto;min-width:0;max-width:240px;font-size:var(--fs-xs);color:var(--mut);white-space:nowrap;overflow:hidden}
  .cw-status code{font:11px ui-monospace,Menlo,monospace;color:var(--mut2)}
  .cw-icon{width:26px;height:26px;display:grid;place-items:center;font-size:var(--fs-sm);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg2);color:var(--mut);cursor:pointer;padding:0;flex:0 0 auto}
  .cw-icon:hover{color:var(--txt);border-color:var(--line2)}
  .cw-icon.danger{color:var(--err)}
  .cw-icon:disabled{opacity:.4;cursor:default}
  .cw-seg.dim{opacity:.4;pointer-events:none}
  #cw-model.dim{opacity:.5;pointer-events:none}
  .cw-seg{display:inline-flex;flex:0 0 auto;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-2);gap:var(--sp-2)}
  .cw-seg-b{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-sm);font-weight:var(--fw-strong);color:var(--mut);background:transparent;border:0;border-radius:var(--radius-sm);padding:var(--sp-4) var(--sp-8);cursor:pointer;transition:.12s}
  .cw-seg-b:hover{color:var(--txt)}
  .cw-seg-b.on{color:var(--txt);background:var(--card);box-shadow:var(--elev-1)}
  #cw-engseg .cw-seg-b.on{color:var(--on-solid);background:var(--eng)}
  .cw-eng-dot{width:8px;height:8px;border-radius:50%;flex:0 0 8px}
  #cw-engseg .cw-seg-b.on .cw-eng-dot{box-shadow:0 0 0 2px rgba(255,255,255,.55)}
  .cw-mini{font-size:var(--fs-sm);padding:var(--sp-4) var(--sp-8);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg2);color:var(--txt);cursor:pointer}
  .cw-mini.danger{color:var(--err);border-color:color-mix(in srgb,var(--err) 30%,var(--line))}
  .cw-mini:disabled{opacity:.45;cursor:default}
  .cw-log{flex:1;overflow:auto;padding:var(--sp-14) var(--sp-14) var(--sp-8);display:flex;flex-direction:column;gap:var(--sp-12);background:var(--bg2)}
  .cw-row{display:flex;gap:var(--sp-10);align-items:flex-start;max-width:92%}
  .cw-row.ai{align-self:flex-start}
  .cw-av{flex:0 0 24px;width:24px;height:24px;border-radius:var(--radius-sm);display:grid;place-items:center;font-size:var(--fs-xs);font-weight:var(--fw-bold);color:var(--on-solid);background:var(--accent);margin-top:var(--sp-1)}
  .cw-b{padding:var(--sp-8) var(--sp-12);border-radius:var(--radius);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-md);line-height:1.55}
  .cw-b.ai{background:var(--card);color:var(--txt);border:1px solid var(--line);border-top-left-radius:4px}
  .cw-b.me{align-self:flex-end;max-width:92%;background:var(--accent);color:var(--on-solid);border-bottom-right-radius:5px}
  .cw-b.sys{align-self:center;max-width:90%;background:transparent;color:var(--mut);font-size:var(--fs-sm);border:1px dashed var(--line2);border-radius:var(--radius);padding:var(--sp-6) var(--sp-12)}
  /* Rendu markdown des réponses IA */
  /* Pas d'avatar par message : dans un fil à deux voix, la place et la couleur disent déjà qui
     parle. Répéter la marque à chaque tour la vidait de son sens. Elle reste à l'accueil et sur
     l'indicateur d'activité, là où elle signe vraiment. */
  #brain-log .cw-row.ai .cw-av{display:none}
  .cw-b.ai{white-space:normal}
  .cw-b.ai>div{margin:var(--sp-2) 0}
  .cw-b.ai>div:first-child{margin-top:0}.cw-b.ai>div:last-child{margin-bottom:0}
  .cw-b.ai .cw-h{font-weight:var(--fw-bold);line-height:1.3;margin:var(--sp-8) 0 var(--sp-4)}
  .cw-b.ai .cw-h1{font-size:var(--fs-base)}.cw-b.ai .cw-h2{font-size:var(--fs-base)}.cw-b.ai .cw-h3{font-size:var(--fs-md)}.cw-b.ai .cw-h4{font-size:var(--fs-md);color:var(--mut)}
  .cw-b.ai ul,.cw-b.ai ol{margin:var(--sp-4) 0 var(--sp-4) var(--sp-20);padding:0}
  .cw-b.ai li{margin:var(--sp-2) 0}
  .cw-b.ai code{font:12px ui-monospace,Menlo,monospace;background:color-mix(in srgb,var(--accent) 9%,transparent);color:inherit;border-radius:var(--radius-sm);padding:1.5px 5px}
  .cw-b.ai pre.cw-code{margin:var(--sp-8) 0;padding:var(--sp-10) var(--sp-12);background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);overflow:auto}
  .cw-b.ai pre.cw-code code{border:0;background:none;padding:0;font-size:var(--fs-xs);line-height:var(--lh-normal);white-space:pre}
  .cw-b.ai a{color:var(--eng);text-decoration:underline}
  .cw-b.ai strong{font-weight:var(--fw-bold)}.cw-b.ai em{font-style:italic}
  .cw-b.ai .cw-tbl{border-collapse:collapse;width:100%;margin:var(--sp-8) 0;font-size:var(--fs-sm)}
  .cw-b.ai .cw-tbl th,.cw-b.ai .cw-tbl td{border:1px solid var(--line);padding:var(--sp-4) var(--sp-8);text-align:left;vertical-align:top}
  .cw-b.ai .cw-tbl th{background:var(--card2);font-weight:var(--fw-bold)}
  .cw-b.ai .cw-tbl tr:nth-child(2n) td{background:color-mix(in srgb,var(--txt) 3%,transparent)}
  .cw-b.ai .cw-q{border-left:3px solid color-mix(in srgb,var(--accent) 40%,var(--line2));margin:var(--sp-6) 0;padding:var(--sp-2) 0 var(--sp-2) var(--sp-10);color:var(--mut)}
  .cw-think{align-self:flex-start;display:flex;gap:var(--sp-10);align-items:center;color:var(--mut);font-size:var(--fs-sm)}
  .cw-dots{display:inline-flex;gap:var(--sp-2)}
  .cw-dots i{width:5px;height:5px;border-radius:50%;background:var(--eng);opacity:.5;animation:cwdot 1s infinite}
  .cw-dots i:nth-child(2){animation-delay:.15s}.cw-dots i:nth-child(3){animation-delay:.3s}
  @keyframes cwdot{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}
  .cw-intro{display:flex;flex-direction:column;align-items:center;gap:var(--sp-8);margin:auto;text-align:center;padding:var(--sp-24) var(--sp-16);max-width:440px}
  .cw-intro-ic{width:40px;height:40px;border-radius:var(--radius);display:grid;place-items:center;font-size:var(--fs-lg);color:var(--on-solid);background:linear-gradient(135deg,var(--eng),color-mix(in srgb,var(--eng) 55%,#000))}
  .cw-intro-t{font-weight:var(--fw-bold);font-size:var(--fs-base)}
  .cw-intro-d{color:var(--mut);font-size:var(--fs-sm);line-height:var(--lh-normal)}
  .cw-chips{display:flex;flex-wrap:wrap;gap:var(--sp-6);justify-content:center;margin-top:var(--sp-2)}
  .cw-chip{font-size:var(--fs-xs);padding:var(--sp-4) var(--sp-10);border:1px solid var(--line2);border-radius:var(--radius-modal);background:var(--card);color:var(--txt);cursor:pointer;transition:.12s}
  .cw-chip:hover{border-color:var(--eng);color:var(--eng)}
  .cw-inwrap{display:flex;gap:var(--sp-8);align-items:flex-end;padding:var(--sp-10);border-top:1px solid var(--line);background:var(--card2)}
  .cw-inwrap textarea{flex:1;min-height:42px;max-height:170px;resize:none;padding:var(--sp-8) var(--sp-12);border:1px solid var(--line);border-radius:var(--radius);background:var(--bg2);color:var(--txt);font:13px/1.5 inherit;outline:none;transition:.12s}
  .cw-inwrap textarea:focus{border-color:var(--eng);box-shadow:0 0 0 2px color-mix(in srgb,var(--eng) 16%,transparent)}
  .cw-send{display:inline-flex;align-items:center;gap:var(--sp-6);font-weight:var(--fw-bold);font-size:var(--fs-sm);color:var(--on-solid);background:var(--eng);border:0;border-radius:var(--radius);padding:var(--sp-8) var(--sp-14);cursor:pointer;transition:.12s}
  .cw-send:hover{filter:brightness(1.06)}
  .cw-send:disabled{opacity:.5;cursor:default}
  .cw-stabs{display:flex;border-bottom:1px solid var(--line);background:var(--card2)}
  .cw-stab{flex:1;padding:var(--sp-8) var(--sp-4);font-size:var(--fs-xs);font-weight:var(--fw-strong);border:0;border-radius:0;background:transparent;color:var(--mut);cursor:pointer;border-bottom:2px solid transparent;display:flex;align-items:center;justify-content:center;gap:var(--sp-4)}
  .cw-stab:hover{color:var(--txt);background:color-mix(in srgb,var(--txt) 3%,transparent);border-color:transparent}
  .cw-stab.on{color:var(--txt);border-bottom-color:var(--eng)}
  .cw-badge{min-width:16px;height:16px;padding:0 var(--sp-4);border-radius:var(--radius);background:var(--eng);color:var(--on-solid);font-size:var(--fs-2xs);font-weight:var(--fw-bold);display:inline-flex;align-items:center;justify-content:center}
  .cw-pane{flex:1;overflow:auto;padding:var(--sp-10)}
  .cw-empty{color:var(--mut);font-size:var(--fs-sm);text-align:center;padding:var(--sp-26) var(--sp-12);line-height:var(--lh-normal)}
  .cw-task{display:flex;gap:var(--sp-8);align-items:flex-start;padding:var(--sp-6) var(--sp-6);font-size:var(--fs-sm);border-bottom:1px solid var(--line)}
  .cw-task .ico{flex:0 0 17px;height:17px;border-radius:50%;display:grid;place-items:center;font-size:var(--fs-2xs);border:1.5px solid var(--line2);color:var(--mut);margin-top:var(--sp-1)}
  .cw-task.active .ico{border-color:var(--eng);color:var(--eng)}
  .cw-task.done .ico{background:var(--ok);border-color:var(--ok);color:var(--on-solid)}
  .cw-task.done{color:var(--mut)}.cw-task.done span:last-child{text-decoration:line-through}
  .cw-task.active{font-weight:var(--fw-strong)}
  .cw-act{display:flex;gap:var(--sp-8);align-items:baseline;padding:var(--sp-6) var(--sp-6);font-size:var(--fs-sm);border-bottom:1px solid var(--line)}
  .cw-act .tool{font-weight:var(--fw-bold);color:var(--eng);font-family:var(--font-mono);font-size:var(--fs-xs)}
  .cw-act .arg{color:var(--mut);font-family:var(--font-mono);font-size:var(--fs-xs);word-break:break-all;flex:1}
  .cw-act .st{font-size:var(--fs-xs);color:var(--mut2)}
  .cw-prop{border:1px solid var(--line);border-radius:var(--radius);margin-bottom:var(--sp-8);overflow:hidden;box-shadow:var(--elev-1)}
  .cw-prop-h{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-10);background:var(--card2);border-bottom:1px solid var(--line)}
  .cw-prop-h .f{font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:var(--fw-strong);flex:1;word-break:break-all}
  .cw-prop-h .tag{font-size:var(--fs-2xs);font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.4px;padding:var(--sp-2) var(--sp-6);border-radius:var(--radius-modal);background:color-mix(in srgb,var(--eng) 16%,transparent);color:var(--eng)}
  .cw-diff{max-height:260px;overflow:auto;font:11px/1.5 ui-monospace,Menlo,monospace;background:var(--bg2)}
  .cw-diff .ln{display:block;padding:0 var(--sp-10);white-space:pre-wrap;word-break:break-word;border-left:2px solid transparent}
  .cw-diff .add{background:color-mix(in srgb,var(--ok) 14%,transparent);border-left-color:var(--ok)}
  .cw-diff .del{background:color-mix(in srgb,var(--err) 14%,transparent);border-left-color:var(--err)}
  .cw-prop-a{display:flex;gap:var(--sp-6);padding:var(--sp-8) var(--sp-10);border-top:1px solid var(--line);background:var(--card)}
  .cw-render{height:100%;display:flex;flex-direction:column}
  .cw-render iframe{flex:1;width:100%;border:0;background:var(--paper)}
  .cw-render-bar{display:flex;gap:var(--sp-6);padding:var(--sp-6);border-bottom:1px solid var(--line);background:var(--card2)}
  .cw-render-bar input{flex:1;font:11px ui-monospace,Menlo,monospace;padding:var(--sp-6) var(--sp-8);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg2);color:var(--txt)}
  .cw.fs{position:fixed;inset:0;z-index:1200;height:100vh;border-radius:0}
  body.cw-fs-lock{overflow:hidden}
  .cw-hist{display:flex;flex-direction:column;gap:var(--sp-8);max-height:62vh;overflow:auto}
  .cw-hrow{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-8) var(--sp-12);border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}
  .cw-hrow:hover{border-color:var(--line2)}
  .cw-hmeta{flex:1;min-width:0}
  .cw-htitle{font-weight:var(--fw-strong);font-size:var(--fs-md);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cw-hsub{font-size:var(--fs-xs);color:var(--mut);margin-top:var(--sp-2)}
  @media(max-width:1100px){ .cw{grid-template-columns:minmax(0,1fr) 320px} .cw-rail{display:none} }
  @media(max-width:860px){ .cw{grid-template-columns:1fr;height:auto} .cw-main{height:56vh} .cw-side{height:44vh} }
  /* ══════════ Pilote (IA globale) - design system (ClickUp / Anthropic-like) ══════════ */

  /* - Bouton Pilote : anneau conic-gradient en rotation continue (masque ring) + halo soft.
       Couleurs mixées avec --line pour rester discrètes sur le fond, quel que soit le thème. */
  @property --dh-bga{syntax:'<angle>';initial-value:0deg;inherits:false}
  /* Fond conique animé (au lieu d'un anneau) : le dégradé tourne EN REMPLISSAGE du bouton.
     L'icône « système solaire » passe en blanc pour contraster. Halo soft repris derrière. */
  /* ── Bouton de messagerie ──
     Il empilait un dégradé conique animé, un anneau conique et un halo flou :
     trois ornements pour dire une seule chose. Il se donne maintenant à lire
     comme ce qu'il est — un bouton pour PARLER à l'app : forme ronde, glyphe
     de bulle plein, teinte des pilules du chrome.
     Volontairement PAS rempli d'accent : le « + » l'est déjà, et deux aplats
     d'accent côte à côte dans la barre empêchent l'œil de se poser. */
  button.brain-btn{position:relative;border:0;border-radius:var(--radius-modal);
    padding:var(--sp-2);display:inline-flex;align-items:center;
    background:var(--chrome-bg);transition:none}
  .brain-btn:hover{background:color-mix(in srgb,var(--accent) 18%,var(--card))}
  .brain-btn.on{background:color-mix(in srgb,var(--accent) 24%,var(--card))}
  /* ── Pilote « en mode bouton » : icône + libellé ──
     Le Pilote est l'action principale de l'en-tête. Il se donne donc à lire
     comme un bouton (pilule à libellé), pas comme une icône énigmatique parmi
     d'autres. Largeur libre, hauteur commune aux contrôles d'en-tête (--hh),
     rayon de pilule (--hr) : il se pose dans la grammaire de la barre au lieu
     de s'en détacher. Le fond conique animé reste son signe distinctif. */
  .hcenter>button.brain-btn{width:auto;padding:var(--sp-2) var(--sp-8) var(--sp-2) var(--sp-14);gap:var(--sp-10);justify-content:center}
  /* Raccourci à droite, dans la même famille que les touches du reste de l'app :
     mono, discret, sur un fond qui reprend la surface du bouton. */
  .brain-kbd{font-family:var(--font-mono);font-size:var(--fs-2xs);line-height:1;
    color:var(--chrome-ink);opacity:.7;padding:var(--sp-4) var(--sp-6);
    border-radius:var(--radius-xs);background:color-mix(in srgb,var(--txt) 7%,transparent);
    flex:none;letter-spacing:.02em}
  @media(max-width:1100px){ .brain-kbd{display:none} }
  .brain-lbl{font-size:var(--fs-sm);font-weight:var(--fw-label);letter-spacing:-.01em;white-space:nowrap;
    color:var(--chrome-ink)}
  /* Exception assumée à « icônes seules » (Paramètres › Application › Densité) :
     ce réglage dégarnit les boutons d'en-tête, mais le Pilote garde son libellé.
     Une icône, aussi jolie soit-elle, n'apprend à personne qu'on peut PARLER à
     l'app - et c'est précisément ce qu'il faut dire ici. Seule la contrainte de
     place le fait céder (règle suivante). */
  @media(max-width:1100px){
    .hcenter>button.brain-btn{width:var(--hh);padding:var(--sp-2)}
    .brain-lbl{display:none}
  }
  /* Le glyphe mène le bouton : un peu plus grand que les icônes de barre,
     et en accent plein (les points évidés reprennent le fond du bouton). */
  .brain-btn .bic-msg{width:18px;height:18px;color:var(--accent)}
  /* La marque a hérité de l'icône du bouton MAIS PAS de ses rehauts : les
     orbites vivent à 13 % d'opacité, calibrées pour un glyphe de 24 px posé
     sur un fond teinté. Dans la tuile claire de la barre, à 40 px, elles
     disparaissaient. On leur rend le contraste que le bouton leur donnait. */
  .brand-mark.bic .po{opacity:.34}
  .brand-mark.bic .cmtH{opacity:.55}
  .brand-mark.bic .cmtT{opacity:.24}
  /* Fond clair (teinte accent) → icône en accent profond pour le contraste, quel que soit le thème. */
  .brain-btn .bic .sun{fill:color-mix(in srgb,var(--accent) 80%,#000)}
  .brain-btn .bic .pl{fill:color-mix(in srgb,var(--accent) 82%,#000)}
  .brain-btn .bic .pl5,.brain-btn .bic .pl6{fill:color-mix(in srgb,var(--accent) 64%,#000)}
  .brain-btn .bic .po{stroke:color-mix(in srgb,var(--accent) 70%,#000);opacity:.32}
  .brain-btn .bic .cmt{stroke:color-mix(in srgb,var(--accent) 78%,#000)}
  /* - Icône sur mesure : petit système solaire. 7 corps (Mercure→Uranus) sur orbites concentriques
       inclinées, périodes RÉALISTES (échelle 1 an = 10 s : Terre 10 s, Jupiter ~2 min, Saturne ~5 min,
       Uranus ~14 min - les orbites internes filent, les externes rampent, comme en vrai).
       Soleil au centre (dégradé radial). Survol/clic (bouton seul) : le plan bascule en perspective. */
  .bic{width:24px;height:24px;display:block}
  .bic .psys{transform:rotate(-24deg);transform-origin:12px 12px;transition:transform .7s cubic-bezier(.3,1.2,.35,1)}
  .bic .po{fill:none;stroke:url(#dh-pilot-grad);vector-effect:non-scaling-stroke;stroke-width:.6;opacity:.13;transition:opacity .3s}
  .bic .sun{fill:url(#dh-pilot-orb);stroke:none}
  .bic .pl{fill:color-mix(in srgb,var(--accent) 82%,var(--bg));stroke:none}
  .bic .pl5,.bic .pl6{fill:color-mix(in srgb,var(--accent) 68%,var(--bg))} /* géantes gazeuses un peu plus claires */
  /* Traînée « comète » : arc en dégradé accentué qui suit chaque planète (2 couches → fondu),
     piloté par stroke-dashoffset, synchronisé au mouvement de la planète. Opacité soft. */
  .bic .cmt{fill:none;stroke:url(#dh-pilot-grad);vector-effect:non-scaling-stroke;stroke-linecap:round}
  .bic .cmtH{stroke-width:1.1;opacity:.4;stroke-dasharray:10 90}
  .bic .cmtT{stroke-width:.9;opacity:.15;stroke-dasharray:26 74}
  .brain-btn:hover .bic .po{opacity:.22}
  .brain-btn:hover .bic .psys{transform:rotate(-24deg) scaleY(1.22)}
  .brain-btn:active .bic .psys{transform:rotate(-24deg) scaleY(1.4);transition-duration:.35s}
  @supports (offset-path:path('M0 0H1')){
    .bic .pl{cx:0;cy:0;offset-distance:0%}
    .bic .pl1{offset-path:path('M15.1 12 A3.1 1.24 0 1 1 8.9 12 A3.1 1.24 0 1 1 15.1 12')}
    .bic .pl2{offset-path:path('M16.35 12 A4.35 1.74 0 1 1 7.65 12 A4.35 1.74 0 1 1 16.35 12')}
    .bic .pl3{offset-path:path('M17.6 12 A5.6 2.24 0 1 1 6.4 12 A5.6 2.24 0 1 1 17.6 12')}
    .bic .pl4{offset-path:path('M18.85 12 A6.85 2.74 0 1 1 5.15 12 A6.85 2.74 0 1 1 18.85 12')}
    .bic .pl5{offset-path:path('M20.1 12 A8.1 3.24 0 1 1 3.9 12 A8.1 3.24 0 1 1 20.1 12')}
    .bic .pl6{offset-path:path('M21.35 12 A9.35 3.74 0 1 1 2.65 12 A9.35 3.74 0 1 1 21.35 12')}
    .bic .pl7{offset-path:path('M22.5 12 A10.5 4.2 0 1 1 1.5 12 A10.5 4.2 0 1 1 22.5 12')}
    @media (prefers-reduced-motion:no-preference){
      /* Timing partagé planète + traînée, par orbite (délais négatifs = départs répartis ≈ i/7 de tour). */
      .bic .pl,.bic .cmt{animation-timing-function:linear;animation-iteration-count:infinite}
      .bic .pl{animation-name:dh-pilot-orbit}
      .bic .cmtH{animation-name:dh-comet-h} .bic .cmtT{animation-name:dh-comet-t}
      .bic .c1{animation-duration:2.4s;animation-delay:0s}      /* Mercure 0,24 an */
      .bic .c2{animation-duration:6.2s;animation-delay:-.9s}    /* Vénus 0,62 an */
      .bic .c3{animation-duration:10s;animation-delay:-2.9s}    /* Terre 1 an */
      .bic .c4{animation-duration:18.8s;animation-delay:-8.1s}  /* Mars 1,88 an */
      .bic .c5{animation-duration:118s;animation-delay:-67s}    /* Jupiter 11,9 an */
      .bic .c6{animation-duration:295s;animation-delay:-211s}   /* Saturne 29,5 an */
      .bic .c7{animation-duration:840s;animation-delay:-720s}   /* Uranus 84 an */
    }
  }
  @media (prefers-reduced-motion:no-preference){
    .bic{animation:dh-pilot-float 4.5s ease-in-out infinite}
  }
  @media (prefers-reduced-motion:reduce){
    .bic .psys{transition:none}
  }
  @keyframes dh-pilot-ring{to{--dh-bga:360deg}}
  @keyframes dh-pilot-orbit{to{offset-distance:100%}}
  @keyframes dh-comet-h{from{stroke-dashoffset:10}to{stroke-dashoffset:-90}}
  @keyframes dh-comet-t{from{stroke-dashoffset:26}to{stroke-dashoffset:-74}}
  @keyframes dh-pilot-float{0%,100%{transform:translateY(.55px)}50%{transform:translateY(-.55px)}}
  /* Hauteur calée par POSITION (top:0 + bottom:0), pas par unité de viewport : égale au viewport
     par construction, insensible aux scrollbars / barres d'outils mobiles / quirks dvh. */
  .brain{position:fixed;top:0;bottom:0;right:0;width:440px;max-width:94vw;z-index:1300;display:flex;flex-direction:column;
    background:var(--bg);border-left:1px solid var(--line);box-shadow:var(--elev-1);
    transform:translateX(101%);transition:transform .26s cubic-bezier(.32,.72,0,1)}
  .brain.on{transform:translateX(0)}
  .brain[hidden]{display:flex} /* on pilote via .on, pas hidden */
  /* - En-tête - */
  /* La hauteur est celle de la barre de l'application (--hh-bar) : le Pilote s'ouvre
     EN FACE du header, les deux filets du bas doivent tomber sur la même ligne.
     --hh-bar compte déjà le filet ; on la pose donc en border-box, padding vertical
     nul, la hauteur des contrôles (32 px) tenant largement dans le reste. */
  .brain-head{display:flex;align-items:center;gap:var(--sp-10);
    flex:0 0 auto;height:var(--hh-bar);padding:0 var(--sp-16);border-bottom:1px solid var(--line);
    background:var(--card);backdrop-filter:saturate(1.4)}
  /* La marque se pose NUE dans l'en-tête : ni pastille teintée, ni filet, ni anneau. Le glyphe
     porte déjà l'accent ; l'enfermer dans un disque le répétait une deuxième fois à 5 px du titre. */
  .brain-av{flex:0 0 32px;width:32px;height:32px;display:grid;place-items:center;color:var(--accent);
    background:transparent;border:0}
  .brain-av .bic{width:27px;height:27px}
  /* - Identité du Pilote : l'anneau dégradé animé est la SIGNATURE → réservé au SEUL bouton
     Envoyer (l'acte de parler au Pilote), qui n'a plus de glyphe : l'anneau EST le bouton.
     Les boutons utilitaires (en-tête + outils du composer) restent des icônes « ghost »
     discrètes → composer calme et minimaliste. - */
  .brain-foot .bc-send #brain-send{border-radius:50%!important;position:relative;isolation:isolate}
  .brain-foot .bc-send #brain-send::before{
    content:"";position:absolute;inset:-1px;border-radius:50%;pointer-events:none;
    background:conic-gradient(from var(--dh-bga),
      color-mix(in srgb,var(--accent) 30%,var(--bg)),
      color-mix(in srgb,var(--accent) 72%,var(--bg)) 30%,
      color-mix(in srgb,var(--accent) 22%,var(--bg)) 60%,
      color-mix(in srgb,var(--accent) 30%,var(--bg)) 100%);
    padding:1.5px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
    -webkit-mask-composite:xor;mask-composite:exclude}
  @media (prefers-reduced-motion:no-preference){
    .brain-foot .bc-send #brain-send::before{animation:dh-pilot-ring 12s linear infinite}
  }
  .brain-id{display:flex;flex-direction:column;line-height:1.25;min-width:0}
  .brain-title{font-weight:var(--fw-bold);font-size:var(--fs-base);letter-spacing:-.01em}
  .brain-sub{font-size:var(--fs-xs);color:var(--mut)}
  /* L'état du moteur ne s'affiche QUE s'il y a quelque chose à dire. « Moteur prêt » en
     permanence, c'est du bruit : l'utilisateur le constate en écrivant. Restent l'erreur
     (moteur absent ou injoignable) et le travail en cours, qui eux méritent un mot. */
  .brain-status{display:none;align-items:center;gap:var(--sp-4);font-size:var(--fs-xs);font-weight:var(--fw-strong);color:var(--mut);
    margin-left:auto;white-space:nowrap;padding:var(--sp-2) var(--sp-8) var(--sp-2) var(--sp-6);border-radius:var(--radius-pill);border:0;background:transparent}
  .brain-status.err,.brain-status.busy{display:inline-flex}
  .brain-status::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--mut2)}
  .brain-status.ok{color:var(--ok)} .brain-status.ok::before{background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 22%,transparent)}
  .brain-status.err{color:var(--err)} .brain-status.err::before{background:var(--err)}
  .brain-status.busy{background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 28%,transparent),var(--accent) 50%,color-mix(in srgb,var(--accent) 28%,transparent));background-size:220% 100%;background-position:100% center;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:brain-shimmer 3s ease-in-out infinite}
  .brain-status.busy::before{background:var(--accent);animation:cwdot 1s infinite}
  @keyframes brain-shimmer{0%{background-position:100% center}100%{background-position:-100% center}}
  /* En-tête du Pilote : mêmes boutons-icônes que le header d'accueil (.island>button.icon) - sans
     bordure, fond au survol, icône centrée 18px. */
  .brain-head .brain-x,.brain-head .brain-fs,.brain-head .brain-convos-btn{
    flex:0 0 auto;width:32px;height:32px;padding:0;display:grid;place-items:center;border:0;border-radius:var(--radius-sm);
    background:transparent;color:var(--mut);cursor:pointer;transition:background .15s ease,color .15s ease,transform .12s ease}
  .brain-head .brain-x:hover,.brain-head .brain-fs:hover,.brain-head .brain-convos-btn:hover{background:var(--card);color:var(--txt)}
  .brain-head .brain-x:active,.brain-head .brain-fs:active,.brain-head .brain-convos-btn:active{transform:scale(.94)}
  .brain-head .brain-x .ic,.brain-head .brain-fs .ic,.brain-head .brain-convos-btn .ic{width:18px;height:18px;display:block}
  /* - Fil - */
  /* Défilement VERTICAL seulement : un contenu trop large (jeton insécable, tableau, bloc de
     code) doit se couper ou défiler DANS son propre bloc, jamais entraîner le fil entier. */
  .brain-log{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--sp-18) var(--sp-16) var(--sp-12);display:flex;flex-direction:column;gap:var(--sp-12);background:var(--bg);min-width:0}
  .brain-log>*{max-width:100%;min-width:0}
  /* la barre maison (02-base.css) s'applique déjà ici */
  /* - Indicateur d'activité en direct (verbe + cible : « lit · 21-pilote.js ») - */
  .brain-think{align-self:flex-start;display:flex;gap:var(--sp-10);align-items:center;color:var(--mut);font-size:var(--fs-sm);max-width:100%}
  .brain-think .bt-av{flex:0 0 auto;color:var(--accent);display:grid;place-items:center}
  .brain-think .bt-av .bic{width:28px;height:28px}
  .brain-think .bt-av .bic .po{opacity:.22}
  .brain-think .bt-label{font-weight:var(--fw-strong);color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .brain-think .bt-dots{color:var(--mut);letter-spacing:.05em}
  .brain-think .bt-dots::after{content:'';animation:brain-dots 1.4s steps(4,end) infinite}
  @keyframes brain-dots{0%{content:''}25%{content:'.'}50%{content:'..'}75%{content:'...'}}
  /* - Pied / saisie - */
  .brain-foot{padding:var(--sp-12) var(--sp-14) var(--sp-12);border-top:1px solid var(--line);background:var(--card)}
  .brain-inputwrap{border:1px solid var(--line);border-radius:var(--radius-modal);background:var(--bg2);padding:var(--sp-4) var(--sp-4) var(--sp-4) 0;
    transition:border-color .12s,box-shadow .12s}
  /* Pas de bague d'accent au focus : le champ occupe déjà tout le pied du panneau, et un
     cadre vert autour d'une zone aussi large criait plus fort que le message écrit. Le
     curseur qui clignote suffit à dire où l'on tape. */
  .brain-foot textarea{width:100%;resize:none;font:13.5px/1.5 inherit;padding:var(--sp-10) var(--sp-12);border:0;background:transparent;color:var(--txt);max-height:160px}
  .brain-foot textarea:focus,.brain-foot textarea:focus-visible{outline:none;box-shadow:none}
  .brain-row{display:flex;gap:var(--sp-8);margin-top:var(--sp-8);align-items:center;justify-content:flex-end}
  .brain-row .hint{font-size:var(--fs-xs);color:var(--mut2);margin-right:auto}
  #brain-stop,#brain-send{font-size:var(--fs-sm);font-weight:var(--fw-strong);padding:var(--sp-6) var(--sp-14);border-radius:var(--radius);cursor:pointer;border:1px solid var(--line)}
  #brain-stop{background:transparent;color:var(--mut)} #brain-stop:not(:disabled):hover{color:var(--txt);border-color:var(--line2)}
  #brain-send{background:var(--accent);border-color:var(--accent);color:var(--on-solid)} #brain-send:hover{background:var(--accent-h);border-color:var(--accent-h)}
  #brain-send:disabled,#brain-stop:disabled{opacity:.5;cursor:default}
  /* - CTA embarqués sous une réponse (raccourcis d'action cliquables) - */
  .brain-cta{display:flex;flex-wrap:wrap;gap:var(--sp-6);align-self:flex-start;max-width:100%;animation:bcIn .18s cubic-bezier(.32,.72,0,1)}
  .bcta-btn{font-size:var(--fs-sm);font-weight:var(--fw-strong);padding:var(--sp-6) var(--sp-12);border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;
    border:1px solid var(--line);background:var(--card);color:var(--txt);transition:.12s}
  .bcta-btn:hover{border-color:var(--accent);color:var(--accent)}
  .bcta-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-solid)}
  .bcta-btn.primary:hover{background:var(--accent-h);border-color:var(--accent-h)}
  /* ── Hero d'accueil (titre + sous-titre centrés, disparaît dès la 1ʳᵉ interaction) ── */
  .brain-hero{margin:auto;text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--sp-10);padding:var(--sp-30) var(--sp-18);max-width:320px}
  .brain-hero .bh-av{width:44px;height:44px;border-radius:var(--radius);display:grid;place-items:center;color:var(--accent);
    background:color-mix(in srgb,var(--accent) 11%,var(--card));border:1px solid color-mix(in srgb,var(--accent) 28%,var(--line))}
  .brain-hero .bh-av .bic{width:38px;height:38px}
  .brain-hero .bh-title{font-size:var(--fs-lg);font-weight:var(--fw-bold);letter-spacing:var(--ls-tight);color:var(--txt)}
  .brain-hero .bh-sub{font-size:var(--fs-sm);line-height:1.55;color:var(--mut)}
  .brain-hero .bh-chips{display:flex;flex-wrap:wrap;gap:var(--sp-6);justify-content:center;margin-top:var(--sp-2)}
  .brain-hero .bh-chip{font-size:var(--fs-xs);padding:var(--sp-6) var(--sp-12);border-radius:var(--radius-pill);border:1px solid var(--line);
    background:var(--card);color:var(--mut);cursor:pointer}
  .brain-hero .bh-chip:hover{border-color:var(--accent);color:var(--txt)}
  /* ── Actions : UN seul conteneur par salve, lignes séparées par un filet (pas de cartes colorées) ── */
  /* Le groupe n'est plus une carte : son en-tête est une LIGNE de journal, et seules les étapes
     dépliées méritent une surface. Encadrer les deux enfermait une trace dans une boîte. */
  .brain-acts{border:0;border-radius:0;background:transparent;overflow:visible;
    animation:bcIn .18s cubic-bezier(.32,.72,0,1)}
  .brain-acts .ba-rows{border:1px solid var(--line2);border-radius:var(--radius);background:var(--card);
    overflow:hidden;margin-top:var(--sp-6)}
  /* Tour terminé : c'est le bouton « étapes » de la bande de méta qui ouvre et ferme le groupe.
     Garder EN PLUS son en-tête, ce serait deux commandes pour un seul geste. */
  .brain-acts:not(.live) .ba-head{display:none}
  @keyframes bcIn{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
  .brain-acts .ba-row{display:flex;align-items:flex-start;gap:var(--sp-8);padding:var(--sp-8) var(--sp-12);font-size:var(--fs-sm);line-height:1.45}
  .brain-acts .ba-row + .ba-row{border-top:1px solid var(--line2)}
  .brain-acts .ba-ico{flex:0 0 15px;width:15px;text-align:center;color:var(--mut2);font-size:var(--fs-xs);margin-top:var(--sp-2);font-weight:var(--fw-bold)}
  .brain-acts .ba-ico.spin{border:2px solid color-mix(in srgb,var(--accent) 30%,transparent);border-top-color:var(--accent);border-radius:50%;flex:0 0 12px;width:12px;height:12px;margin-top:0;align-self:center;animation:bspin .7s linear infinite}
  @keyframes bspin{to{transform:rotate(360deg)}}
  .brain-acts .ba-row.st-ok .ba-ico{color:var(--ok)} .brain-acts .ba-row.st-bad .ba-ico{color:var(--err)}
  .brain-acts .ba-body{flex:1;min-width:0}
  .brain-acts .ba-title{color:var(--txt);font-weight:var(--fw-medium);word-break:break-word}
  .brain-acts .ba-sub{color:var(--mut);font-size:var(--fs-xs);margin-top:var(--sp-2);word-break:break-word}
  .brain-acts .ba-actions{display:flex;gap:var(--sp-6);flex:0 0 auto;margin-left:var(--sp-8)}
  .brain-acts .ba-btn{font-size:var(--fs-xs);font-weight:var(--fw-strong);padding:var(--sp-4) var(--sp-10);border-radius:var(--radius-sm);cursor:pointer;
    border:1px solid var(--line);background:var(--card2);color:var(--txt);white-space:nowrap}
  .brain-acts .ba-btn:hover{border-color:var(--line2)}
  .brain-acts .ba-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-solid)}
  .brain-acts .ba-btn.primary:hover{background:var(--accent-h);border-color:var(--accent-h)}
  .brain-acts .ba-btn:disabled{opacity:.5;cursor:default}
  /* ── Demande adressée à l'utilisateur : le pied du message du Pilote ──────────────
     Une proposition de faculté n'est pas une trace de travail : c'est une QUESTION posée
     dans le message. Pas de boîte dans la boîte — un simple filet la sépare du texte, et
     elle se lit comme la fin de la phrase. Une fois tranchée, il ne reste qu'une ligne. */
  /* Le filet se mesure au TEXTE, pas au fond : la bulle du Pilote est déjà une surface
     décalée (--txt 5 % sur --bg), et un filet pris dans la palette des fonds y disparaît —
     en clair, --line2 est plus pâle que la bulle elle-même. Un mix du texte tient dans les
     deux thèmes, sur n'importe quelle surface. */
  #brain-log .bk-ask{margin-top:var(--sp-18);padding-top:var(--sp-14);
    border-top:1px solid color-mix(in srgb,var(--txt) 14%,transparent);
    animation:bcIn .18s cubic-bezier(.32,.72,0,1)}
  #brain-log .bk-ask-h{display:flex;align-items:baseline;gap:var(--sp-6);flex-wrap:wrap;min-width:0}
  #brain-log .bk-ask-ico{flex:none;align-self:center;display:grid;place-items:center;color:var(--accent)}
  #brain-log .bk-ask-ico svg{width:13px;height:13px;display:block}
  #brain-log .bk-ask-eyebrow{font-size:var(--fs-xs);font-weight:var(--fw-strong);color:var(--txt)}
  #brain-log .bk-ask-name{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent)}
  #brain-log .bk-ask-d{font-size:var(--fs-sm);color:var(--mut);line-height:var(--lh-normal);
    margin-top:var(--sp-6)}
  #brain-log .bk-ask-a{display:flex;justify-content:flex-end;align-items:center;gap:var(--sp-2);margin-top:var(--sp-8)}
  /* Un seul bouton porte une surface : celui qu'on attend. L'autre est du texte. */
  #brain-log .bk-btn{font-size:var(--fs-xs);font-weight:var(--fw-strong);padding:var(--sp-4) var(--sp-10);
    border-radius:var(--radius-sm);cursor:pointer;border:0;background:transparent;color:var(--mut);
    white-space:nowrap;transition:background .12s,color .12s}
  #brain-log .bk-btn:hover{color:var(--txt);background:color-mix(in srgb,var(--txt) 6%,transparent)}
  #brain-log .bk-btn.primary{background:var(--accent);color:var(--on-solid);padding:var(--sp-4) var(--sp-12)}
  #brain-log .bk-btn.primary:hover{background:var(--accent-h);color:var(--on-solid)}
  /* Verdict : la question a été tranchée, il n'en reste qu'une ligne calme. */
  #brain-log .bk-ask.settled .bk-ask-eyebrow{color:var(--mut);font-weight:var(--fw-medium)}
  #brain-log .bk-ask.settled.ok .bk-ask-ico{color:var(--ok)}
  #brain-log .bk-ask.settled.no .bk-ask-ico{color:var(--mut2)}
  #brain-log .bk-ask.settled.no .bk-ask-name{color:var(--mut2)}
  #brain-log .bk-ask-run{font-size:var(--fs-xs);color:var(--mut2);margin-top:var(--sp-2);
    padding-left:var(--sp-20);font-family:var(--font-mono)}
  #brain-log .bk-ask-run.bad{color:var(--err)}
  /* Bouton « étapes » : le journal du tour, rangé à côté de « Copier ». Il ne s'impose dans
     la bande qu'à partir de DEUX étapes — une seule ligne de trace ne mérite pas une marque
     permanente sous chaque message ; elle reste accessible au survol, comme « Copier ». */
  #brain-log .cw-meta .cw-steps{order:2;display:flex;align-items:center;gap:var(--sp-4);
    height:var(--sp-22);padding:0 var(--sp-6);border:0;border-radius:var(--radius-sm);
    background:transparent;color:var(--mut2);cursor:pointer;transition:background .12s,color .12s}
  #brain-log .cw-meta .cw-steps svg{width:14px;height:14px}
  #brain-log .cw-meta .cw-steps .cw-steps-n{font-family:var(--font-mono);font-size:var(--fs-2xs);font-weight:var(--fw-strong)}
  #brain-log .cw-meta .cw-steps:hover{color:var(--accent)}
  #brain-log .cw-meta .cw-steps.on{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}
  #brain-log .cw-meta:has(.cw-steps.multi){opacity:1;pointer-events:auto}
  #brain-log .cw-meta:has(.cw-steps.multi) .cw-copy,
  #brain-log .cw-meta:has(.cw-steps.multi) .cw-regen,
  #brain-log .cw-meta:has(.cw-steps.multi) .cw-time{opacity:0;transition:opacity .14s ease}
  #brain-log .cw-row.ai:hover .cw-meta .cw-copy,
  #brain-log .cw-row.ai:hover .cw-meta .cw-regen,
  #brain-log .cw-row.ai:hover .cw-meta .cw-time,
  #brain-log .cw-meta:focus-within .cw-copy,
  #brain-log .cw-meta:focus-within .cw-regen{opacity:1}
  /* Bulles épurées (scopées au cerveau ; le Copilote garde son style) : IA = texte simple, user = pastille douce */
  #brain-log .cw-row{gap:var(--sp-8);max-width:100%}
  /* La réponse se POSE sur une surface décalée plutôt que de flotter à nu : le décalage part du
     TEXTE, donc il assombrit en thème clair et éclaircit en sombre — une seule recette, pas deux.
     Pas de filet : un fond et un cadre feraient deux fois le même travail. */
  #brain-log .cw-b.ai{background:color-mix(in srgb,var(--txt) 5%,var(--bg));border:0;
    padding:var(--sp-14) var(--sp-16);border-radius:var(--radius-modal)}
  /* L'amorce en gras de la première ligne prend l'accent : « Mission acceptée. » se lit avant la
     phrase, et tout le reste de la réponse garde une seule couleur. */
  #brain-log .cw-b.ai>div:first-child>strong:first-child{color:var(--accent)}
  #brain-log .cw-av{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font-size:var(--fs-sm)}
  #brain-log .cw-av .bic{width:20px;height:20px}
  /* La demande est de l'ENCRE : elle prend la couleur du texte et rend celle du fond. L'accent
     n'a rien à faire ici — il est réservé à ce qui appelle une décision, et une phrase qu'on vient
     d'écrire n'en appelle aucune. L'inversion se lit dans les deux thèmes, sans cas particulier. */
  #brain-log .cw-b.me{background:color-mix(in srgb,var(--txt) 92%,var(--bg));color:var(--bg);border:0;
    font-size:var(--fs-md);padding:var(--sp-12) var(--sp-16);border-radius:var(--radius-modal)}
  #brain-log .cw-b.sys{font-size:var(--fs-sm)}
  /* ── Respiration : aère les paragraphes de la réponse IA (« retour à la ligne » lisible) ── */
  #brain-log .cw-b.ai{line-height:1.66}
  #brain-log .cw-b.ai>div{margin:var(--sp-8) 0}
  #brain-log .cw-b.ai>div:first-child{margin-top:0} #brain-log .cw-b.ai>div:last-child{margin-bottom:0}
  #brain-log .cw-b.ai .cw-h{margin:var(--sp-18) 0 var(--sp-6)} #brain-log .cw-b.ai .cw-h:first-child{margin-top:0}
  #brain-log .cw-b.ai ul,#brain-log .cw-b.ai ol{margin:var(--sp-8) 0 var(--sp-8) var(--sp-20)}
  #brain-log .cw-b.ai li{margin:var(--sp-4) 0}
  #brain-log .cw-b.ai pre.cw-code{margin:var(--sp-12) 0}
  /* ── Bouton « Copier » au survol d'une réponse IA ── */
  #brain-log .cw-row{position:relative}
  #brain-log .cw-copy svg{width:15px;height:15px}
  /* ── Bouton « Copier le code » dans les blocs <pre> ── */
  #brain-log .cw-b.ai pre.cw-code{position:relative}
  #brain-log pre.cw-code .cw-codecopy{position:absolute;top:7px;right:7px;width:26px;height:26px;display:grid;place-items:center;
    border:1px solid var(--line);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--card) 80%,transparent);
    color:var(--mut);cursor:pointer;opacity:0;transition:opacity .12s,color .12s,border-color .12s;backdrop-filter:blur(4px)}
  #brain-log pre.cw-code:hover .cw-codecopy,#brain-log pre.cw-code .cw-codecopy:focus-visible{opacity:1}
  #brain-log pre.cw-code .cw-codecopy:hover{color:var(--accent);border-color:var(--accent)}
  #brain-log pre.cw-code .cw-codecopy.ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 50%,var(--line));opacity:1}
  #brain-log .cw-codecopy svg{width:14px;height:14px}
  /* ════════ Tableaux modernes : triables + filtres de colonne dynamiques ════════ */
  #brain-log .cw-tblx{margin:var(--sp-12) 0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card)}
  #brain-log .cw-tblbar{display:flex;justify-content:flex-end;align-items:center;padding:var(--sp-4) var(--sp-6);
    border-bottom:1px solid var(--line);background:var(--card2)}
  #brain-log .cw-tfbtn{width:26px;height:26px;display:grid;place-items:center;border:1px solid transparent;border-radius:var(--radius-sm);
    background:transparent;color:var(--mut);cursor:pointer;transition:.12s}
  #brain-log .cw-tfbtn:hover{color:var(--txt);background:color-mix(in srgb,var(--txt) 5%,transparent)}
  #brain-log .cw-tfbtn.on{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
  #brain-log .cw-tfbtn svg{width:15px;height:15px}
  #brain-log .cw-tblx .cw-tbl{margin:0;border:0;border-radius:0;width:100%;font-size:var(--fs-sm)}
  #brain-log .cw-tblx .cw-tbl th,#brain-log .cw-tblx .cw-tbl td{border:0;border-bottom:1px solid var(--line);padding:var(--sp-8) var(--sp-12)}
  #brain-log .cw-tblx .cw-tbl tbody tr:last-child td{border-bottom:0}
  #brain-log .cw-tblx .cw-tbl thead tr:first-child th{background:var(--card2);font-weight:var(--fw-bold);position:relative}
  #brain-log .cw-tbl th.cw-th-sort{cursor:pointer;user-select:none;padding-right:var(--sp-24)}
  #brain-log .cw-tbl th.cw-th-sort:hover{background:color-mix(in srgb,var(--accent) 8%,var(--card2))}
  #brain-log .cw-tbl th.cw-th-sort::after{content:"";position:absolute;right:9px;top:50%;transform:translateY(-50%);
    width:7px;height:7px;opacity:.32;background:currentColor;
    clip-path:polygon(50% 0,100% 42%,72% 42%,72% 100%,28% 100%,28% 42%,0 42%)}
  #brain-log .cw-tbl th.cw-th-sort[data-sort]::after{opacity:.95;color:var(--accent)}
  #brain-log .cw-tbl th.cw-th-sort[data-sort=desc]::after{transform:translateY(-50%) rotate(180deg)}
  #brain-log .cw-tbl tbody tr{transition:background .1s}
  #brain-log .cw-tblx .cw-tbl tbody tr:hover td{background:color-mix(in srgb,var(--accent) 6%,transparent)}
  #brain-log .cw-tbl tr.cw-tfilter{display:none}
  #brain-log .cw-tblx.show-filter .cw-tbl tr.cw-tfilter{display:table-row}
  #brain-log .cw-tbl tr.cw-tfilter th{background:var(--bg2);padding:var(--sp-4) var(--sp-6)}
  #brain-log .cw-tbl tr.cw-tfilter input{width:100%;font:11.5px inherit;padding:var(--sp-4) var(--sp-8);border:1px solid var(--line);
    border-radius:var(--radius-sm);background:var(--card);color:var(--txt)}
  #brain-log .cw-tbl tr.cw-tfilter input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus)}
  /* ── Structure interne : colonne principale + rail historique (rail masqué hors plein écran) ── */
  .brain-id{flex:1} /* pousse statut + boutons à droite, même quand le statut est vide */
  .brain-status:empty{display:none} /* pas de pastille vide avant le 1ᵉʳ check moteur */
  .brain-main{flex:1;min-height:0;min-width:0;display:flex;flex-direction:column}
  .brain-rail{display:none;flex-direction:column;min-height:0;width:266px;flex:0 0 266px;
    background:var(--card2);border-right:1px solid var(--line)}
  /* ── Rail des discussions : même registre que le fil. Surfaces tirées du TEXTE (comme la
     bulle du Pilote), filets fins, et la couleur réservée à un ÉTAT. Un rail latéral qui
     crie plus fort que la conversation qu'il indexe, c'est la hiérarchie à l'envers. ── */
  .brain-rail-head{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-16) var(--sp-14) var(--sp-10)}
  .brain-rail-title{flex:1;font-weight:var(--fw-strong);font-size:var(--fs-md)}
  .brain-rail-new{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-sm);font-weight:var(--fw-strong);color:var(--mut);
    background:transparent;border:1px dashed color-mix(in srgb,var(--accent) 45%,var(--line));border-radius:var(--radius);padding:var(--sp-6) var(--sp-10);cursor:pointer}
  .brain-rail-new .ic{width:14px;height:14px}
  .brain-rail-new:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
  .brain-rail-list{flex:1;overflow:auto;padding:var(--sp-4) var(--sp-8) var(--sp-12);display:flex;flex-direction:column;gap:var(--sp-2)}
  .brain-rail-more{display:block;width:100%;border:0;background:transparent;cursor:pointer;
    color:var(--mut2);font-size:var(--fs-2xs);font-family:var(--font-mono);
    text-align:center;padding:var(--sp-10) var(--sp-8)}
  .brain-rail-more:hover{color:var(--txt)}
  .brain-rail-empty{color:var(--mut);font-size:var(--fs-sm);text-align:center;padding:var(--sp-26) var(--sp-14);line-height:var(--lh-normal)}
  .brain-conv{position:relative;display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-30) var(--sp-8) var(--sp-10);
    border-radius:var(--radius);cursor:pointer;border:1px solid transparent}
  .brain-conv{position:relative}
  .brain-conv:hover{background:color-mix(in srgb,var(--txt) 4%,transparent)}
  /* Active = une marque, pas un aplat : filet d'accent à gauche + surface à peine tenue. */
  .brain-conv.on{background:color-mix(in srgb,var(--txt) 6%,transparent);border-color:transparent}
  .brain-conv.on::before{content:'';position:absolute;left:0;top:var(--sp-6);bottom:var(--sp-6);
    width:2px;border-radius:var(--radius-pill);background:var(--accent)}
  .brain-conv-meta{flex:1;min-width:0}
  .brain-conv-t{font-size:var(--fs-sm);font-weight:var(--fw-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .brain-conv-s{font-size:var(--fs-2xs);color:var(--mut2);margin-top:var(--sp-1);font-family:var(--font-mono)}
  .brain-conv-x{position:absolute;top:50%;right:7px;transform:translateY(-50%);width:18px;height:18px;border:0;
    background:transparent;color:var(--mut2);border-radius:var(--radius-sm);cursor:pointer;opacity:0;font-size:var(--fs-xs)}
  .brain-conv:hover .brain-conv-x{opacity:1}
  .brain-conv-x:hover{background:color-mix(in srgb,var(--err) 16%,transparent);color:var(--err)}
  /* ── Bouton plein écran (icône expand ⇄ collapse selon l'état) ── */
  .brain-fs{flex:0 0 auto;width:30px;height:30px;padding:0;display:grid;place-items:center;border-radius:var(--radius);
    border:1px solid transparent;background:transparent;color:var(--mut);cursor:pointer}
  .brain-fs:hover{background:var(--card2);color:var(--txt);border-color:var(--line)}
  .brain-fs .ic{width:17px;height:17px;grid-area:1/1}
  .brain-fs .ic-collapse{display:none}
  .brain-fs.on{color:var(--accent)}
  /* ── Mode plein écran : la fenêtre s'étend, le rail apparaît, le fil se centre ── */
  body.brain-fs-lock{overflow:hidden}
  /* Plein écran : inset:0 (top/right/bottom/left:0) + width/height AUTO → le panneau s'étire sur les
     4 bords du viewport par pure position, sans vw/vh. On neutralise aussi le transform/transition de
     glissement du drawer (sinon, selon le timing de l'anim, le panneau reste décalé hors écran). */
  .brain.fs{inset:0;width:auto;max-width:none;flex-direction:row;border-left:0;
    box-shadow:none;z-index:1400;transform:none;transition:none}
  .brain.fs .brain-rail{display:flex}
  .brain.fs .brain-fs .ic-expand{display:none}
  .brain.fs .brain-fs .ic-collapse{display:block}
  .brain.fs .brain-log{padding:28px max(28px,16vw) 18px}
  .brain.fs .brain-foot{padding:16px max(28px,16vw) 22px}
  @media(max-width:760px){
    .brain.fs .brain-rail{display:none}
    .brain.fs .brain-log,.brain.fs .brain-foot{padding-left:var(--sp-16);padding-right:var(--sp-16)}
  }
  @media(max-width:560px){ .brain{width:100vw} }

  /* ════════ PANNEAU DE TRAVAIL (plein écran uniquement) ════════
     En plein écran, la fenêtre est en flex-row : [rail][chat][panneau]. Le panneau
     n'apparaît que sur .brain.fs.has-side (ouvert par le Pilote via panel*). Quand il est
     ouvert, le chat perd son grand padding centré (max(28px,16vw)) et partage la largeur. */
  /* --paper (blanc dans les deux thèmes) : le panneau RENDU un contenu utilisateur - c'est
     le même token que l'iframe, l'image ou l'écran de maquette (01-tokens.css). Un fond neutre
     assombri en thème sombre faisait paraître le rendu web (presque toujours blanc) posé sur
     une plaque grise, au lieu de la continuité qu'il a dans un vrai navigateur. */
  .brain-side{display:none;flex-direction:column;min-width:0;background:var(--paper)}
  .brain.fs.has-side .brain-side{display:flex;flex:1 1 0;min-width:380px}
  .brain.fs.has-side .brain-main{flex:1 1 0;min-width:360px}
  /* - Séparateur drag-resize entre chat et panneau - */
  .brain-resize-handle{display:none;flex:0 0 7px;cursor:col-resize;position:relative;user-select:none;background:transparent}
  .brain-resize-handle::after{content:'';position:absolute;left:3px;top:0;bottom:0;width:1px;background:var(--line);transition:background .15s,width .15s,left .15s}
  .brain-resize-handle:hover::after,.brain-resize-handle.dragging::after{left:2px;width:3px;background:var(--accent)}
  .brain.fs.has-side .brain-resize-handle{display:block}
  .brain.fs.has-side .brain-log{padding:var(--sp-24) var(--sp-30) var(--sp-16)}
  .brain.fs.has-side .brain-foot{padding:var(--sp-14) var(--sp-30) var(--sp-20)}
  /* - Barre d'onglets des conteneurs - */
  /* ── Panneau de travail : même langue que le fil. Les onglets étaient des CHEMISES
     encadrées posées sur une bande grise ; ils deviennent des libellés plats, l'actif marqué
     par un soulignement. Un cadre par onglet dessinait trois lignes pour dire une chose. ── */
  .brain-side-tabs{display:flex;gap:var(--sp-2);align-items:stretch;padding:0 var(--sp-8);background:var(--bg);
    border-bottom:1px solid var(--line2);overflow-x:auto;min-height:var(--sp-42);scrollbar-width:thin}
  /* `border-radius:0` explicite : le style générique des boutons pose 7 px, et un soulignement
     de 2 px sur un coin arrondi se lit comme un arc de cercle, pas comme un onglet actif. */
  .bsd-tab{flex:0 0 auto;display:inline-flex;align-items:center;gap:var(--sp-6);max-width:230px;
    padding:var(--sp-8) var(--sp-10);border:0;border-bottom:2px solid transparent;border-radius:0;
    background:transparent;color:var(--mut);
    font-size:var(--fs-sm);font-weight:var(--fw-medium);cursor:pointer;white-space:nowrap;
    transition:color .12s,border-color .12s}
  .bsd-tab:hover{color:var(--txt);background:transparent}
  .bsd-tab.on{color:var(--txt);background:transparent;font-weight:var(--fw-strong);border-bottom-color:var(--accent)}
  .bsd-tab-ic{flex:0 0 auto;display:grid;place-items:center;color:var(--mut2)}
  .bsd-tab.on .bsd-tab-ic{color:var(--accent)}
  .bsd-tab-ic svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
  .bsd-tab-t{overflow:hidden;text-overflow:ellipsis}
  .bsd-tab-x{flex:0 0 auto;width:17px;height:17px;display:grid;place-items:center;border-radius:var(--radius-sm);
    color:var(--mut2);font-size:var(--fs-xs);margin-left:var(--sp-1)}
  .bsd-tab-x:hover{background:color-mix(in srgb,var(--err) 16%,transparent);color:var(--err)}
  /* - Corps : un pane par conteneur, empilés (un seul visible) - */
  .brain-side-body{flex:1;min-height:0;position:relative;background:var(--paper)}
  .bsd-pane{position:absolute;inset:0;overflow:auto;display:flex;flex-direction:column}
  .bsd-pane[hidden]{display:none}
  .bsd-load,.bsd-empty{margin:auto;color:var(--mut);font-size:var(--fs-sm);padding:var(--sp-30);text-align:center}
  /* Render : laisse l'instance DH.render gérer son scroll/cadre */
  .bsd-render{overflow:hidden}
  .bsd-render .rv-host{flex:1;min-height:0;display:flex}
  /* Code : pré formaté, coloration via highlight() (réutilise .hl du module éditeur) */
  .bsd-code{flex:1;min-height:0;overflow:auto;background:var(--bg)}
  .bsd-code pre{margin:0;padding:var(--sp-16) var(--sp-18);font:12.5px/1.6 var(--mono,ui-monospace,SFMono-Regular,Menlo,monospace);
    color:var(--txt);white-space:pre;tab-size:2}
  /* Markdown : rendu cwMd (même style que les bulles IA) */
  .bsd-md{padding:var(--sp-22) var(--sp-26);font-size:var(--fs-md);line-height:1.6;color:var(--txt);max-width:760px}
  /* - Conteneur Propositions (diffs à valider, comme le Copilote) - */
  .bsd-props-head{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-12) var(--sp-16);border-bottom:1px solid var(--line);background:var(--card)}
  .bsd-props-n{flex:1;font-size:var(--fs-sm);font-weight:var(--fw-strong);color:var(--mut)}
  .bsd-props{flex:1;min-height:0;overflow:auto;padding:var(--sp-14) var(--sp-16);display:flex;flex-direction:column;gap:var(--sp-12)}
  .bsd-prop{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card)}
  .bsd-prop.done{opacity:.7}
  .bsd-prop-h{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-12);border-bottom:1px solid var(--line2);background:var(--card2)}
  .bsd-prop-f{flex:1;font-size:var(--fs-sm);font-weight:var(--fw-strong);word-break:break-all}
  .bsd-prop-tag{flex:0 0 auto;font-size:var(--fs-2xs);font-weight:var(--fw-bold);padding:var(--sp-2) var(--sp-8);border-radius:var(--radius-pill);
    background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
  .bsd-prop.done .bsd-prop-tag{background:color-mix(in srgb,var(--ok) 16%,transparent);color:var(--ok)}
  .bsd-prop-diff{max-height:320px;overflow:auto;font:11.5px/1.5 var(--mono,ui-monospace,Menlo,monospace);padding:var(--sp-6) 0}
  .bsd-prop-diff .ln{display:block;padding:0 var(--sp-12);white-space:pre-wrap;word-break:break-word}
  .bsd-prop-diff .ln.add{background:color-mix(in srgb,var(--ok) 14%,transparent);color:color-mix(in srgb,var(--ok) 80%,var(--txt))}
  .bsd-prop-diff .ln.del{background:color-mix(in srgb,var(--err) 13%,transparent);color:color-mix(in srgb,var(--err) 75%,var(--txt))}
  .bsd-prop-a{display:flex;gap:var(--sp-6);justify-content:flex-end;padding:var(--sp-8) var(--sp-12);border-top:1px solid var(--line2)}
  .bsd-btn{font-size:var(--fs-xs);font-weight:var(--fw-strong);padding:var(--sp-6) var(--sp-12);border-radius:var(--radius);cursor:pointer;
    border:1px solid var(--line);background:var(--card2);color:var(--txt)}
  .bsd-btn:hover{border-color:var(--line2)}
  .bsd-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-solid)}
  .bsd-btn.primary:hover{background:var(--accent-h);border-color:var(--accent-h)}
  .bsd-btn:disabled{opacity:.5;cursor:default}
  /* - Mini-barre d'outils du conteneur render (Pointer / Faire voir) - */
  .bsd-render{display:flex;flex-direction:column}
  /* Le haut du panneau empilait TROIS barres encadrées : onglets, outils du Pilote, réglages du
     rendu. Trois cadres pour un seul en-tête. La rangée d'outils perd sa surface et son filet :
     elle devient une ligne d'actions posée entre les onglets et la barre du rendu, et l'en-tête
     se lit comme un seul bloc. */
  .bsd-render-tools{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-6) var(--sp-8) var(--sp-2);
    border-bottom:0;background:transparent;flex:0 0 auto}
  /* Fondus dans la barre du rendu : plus de rangée à eux, un simple filet les sépare des
     réglages d'affichage - ce sont les actions du Pilote SUR ce rendu, pas un autre outil. */
  /* La barre du rendu est calibrée pour la vue Render en pleine page ; dans le panneau du
     Pilote elle est deux fois plus étroite et reçoit trois boutons de plus. Elle passe donc à
     la ligne quand il le faut : une barre coupée cache des commandes sans le dire. */
  .bsd-render .rv-bar{flex-wrap:wrap;height:auto;row-gap:var(--sp-4);padding-top:var(--sp-4);padding-bottom:var(--sp-4)}
  /* Ordre de la barre dans le panneau : réglages, puis les actions (⋯ compris), et l'ENVIRONNEMENT
     en dernier, calé à droite. C'est lui qui dit quelle version on regarde : il mérite le bout de
     la barre, pas le milieu. Réordonné par `order`, sans toucher au DOM : la vue Render en pleine
     page garde sa disposition. */
  /* La scène prend toute la place restante et ne défile pas : dans un panneau, un cadre arrondi
     avec sa propre barre de défilement crée une fenêtre dans la fenêtre. L'appareil est déjà le
     cadre ; le conteneur n'a pas à en ajouter un second. */
  .bsd-render .rv-stage{flex:1;min-height:0;width:100%;overflow:hidden;border:0;border-radius:0}
  .bsd-render .rv-bar>.rv-zone:not(.rv-acts){order:1}
  .bsd-render .rv-acts{order:2;margin-left:auto}
  .bsd-render .rv-addr{order:3;margin-left:var(--sp-4)}
  /* Le chemin d'URL est retiré du panneau du Pilote : dans une colonne étroite il mangeait la
     moitié de la barre pour un « / » que personne n'édite là. L'environnement, lui, reste : il
     dit QUELLE version on regarde. La vue Render en pleine page garde le champ. */
  .bsd-render .rv-addr-in,.bsd-render .rv-addr-sep{display:none}
  /* Sans le champ d'URL, la pilule d'environnement se contente de sa largeur - mais elle garde
     la surface de la famille (groupe de vues, sélecteur d'appareil), sinon elle flotte seule. */
  .bsd-render .rv-addr{flex:0 0 auto;min-width:0}
  .bsd-tool{display:inline-flex;align-items:center;gap:var(--sp-6);font-size:var(--fs-xs);font-weight:var(--fw-medium);
    padding:var(--sp-4) var(--sp-8);border-radius:var(--radius-sm);
    border:0;background:transparent;color:var(--mut);cursor:pointer;transition:color .12s,background .12s}
  .bsd-tool svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
  .bsd-tool:hover{color:var(--txt);background:color-mix(in srgb,var(--txt) 6%,transparent);border-color:transparent}
  /* Armé = un état, donc une teinte d'accent - pas un pavé plein qui hurle plus fort que le rendu. */
  .bsd-tool.on{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:transparent;color:var(--accent)}
  .bsd-tool-hint{font-size:var(--fs-xs);color:var(--mut)}
  .rv-frame.rv-picking{cursor:crosshair}
  .rv-frame.rv-picking iframe{pointer-events:auto}
  /* - Vignettes avant/après d'une proposition (boucle fermée) - */
  .bsd-prop-shots{display:flex;gap:var(--sp-10);padding:var(--sp-10) var(--sp-12);border-top:1px solid var(--line2)}
  .bsd-prop-shots figure{flex:1;margin:0;min-width:0}
  .bsd-prop-shots figcaption{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.5px;color:var(--mut2);margin-bottom:var(--sp-4)}
  .bsd-prop-shots img{width:100%;border:1px solid var(--line);border-radius:var(--radius-sm);display:block}
  .bsd-shot-na{height:80px;display:grid;place-items:center;color:var(--mut2);border:1px dashed var(--line);border-radius:var(--radius-sm)}
  /* - Chip « élément ciblé » au-dessus du composer du Pilote - */
  .brain-target{display:flex;align-items:center;gap:var(--sp-8);margin-bottom:var(--sp-8);padding:var(--sp-6) var(--sp-10);border-radius:var(--radius);
    background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 32%,var(--line))}
  .brain-target .bt-ico{flex:0 0 auto;display:flex;color:var(--accent)}
  .brain-target .bt-txt{flex:1;min-width:0;font-size:var(--fs-sm);color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .brain-target .bt-x{flex:0 0 auto;width:18px;height:18px;border:0;background:transparent;color:var(--mut);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--fs-xs)}
  .brain-target .bt-x:hover{background:color-mix(in srgb,var(--err) 16%,transparent);color:var(--err)}
  @media(max-width:760px){
    .brain.fs.has-side .brain-main{display:none}
    .brain.fs.has-side .brain-side{min-width:0}
  }
  /* Menu contextuel maison → déplacé dans assets/css/34-contextmenu.css */
  /* ════════════════ DISCUSSIONS V2 - refonte UX du Pilote (lots A·B·C·D) ════════════════ */
  /* ── Lot A : rail intelligent (recherche, groupes temporels, actions de discussion) ── */
  .brain-rail-search{padding:0 var(--sp-12) var(--sp-8);position:relative}
  .brain-rail-search .brs-ico{position:absolute;left:22px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--mut2);pointer-events:none}
  .brain-rail-search input{width:100%;padding:var(--sp-6) var(--sp-10) var(--sp-6) var(--sp-30);
    border:1px solid color-mix(in srgb,var(--txt) 10%,transparent);border-radius:var(--radius);
    background:color-mix(in srgb,var(--txt) 4%,transparent);color:var(--txt);font-size:var(--fs-sm)}
  .brain-rail-search input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus)}
  .brain-rail-grp{font-size:var(--fs-2xs);font-weight:var(--fw-bold);letter-spacing:.05em;text-transform:uppercase;color:var(--mut2);padding:var(--sp-10) var(--sp-12) var(--sp-4)}
  .brain-rail-grp:first-child{padding-top:var(--sp-2)}
  .brain-conv{padding:var(--sp-8) var(--sp-8) var(--sp-8) var(--sp-10);gap:var(--sp-6)}
  .brain-conv-acts{display:flex;gap:var(--sp-1);flex:0 0 auto}
  .brain-conv-act{width:25px;height:25px;display:grid;place-items:center;border:0;background:transparent;color:var(--mut2);border-radius:var(--radius-sm);cursor:pointer;opacity:0;transition:opacity .12s,background .12s,color .12s}
  .brain-conv-act svg{width:14px;height:14px}
  .brain-conv:hover .brain-conv-act,.brain-conv.on .brain-conv-act{opacity:1}
  .brain-conv-act:hover{background:color-mix(in srgb,var(--txt) 9%,transparent);color:var(--txt)}
  .brain-conv-act.on{opacity:1;color:var(--accent)}
  .brain-conv-act.danger:hover{background:color-mix(in srgb,var(--err) 16%,transparent);color:var(--err)}
  .brain-conv.pinned .brain-conv-t{font-weight:var(--fw-bold)}

  /* ── Lot B : actions de message + horodatage + bouton « revenir en bas » ── */
  #brain-log .cw-row.ai{flex-wrap:wrap}
  /* ── Bande de méta d'une réponse (régénérer · copier · heure) ──
     Elle vit SOUS la bulle et DANS le flux. Trois conséquences voulues : la bulle épouse enfin
     son contenu (l'heure ne la gonfle plus depuis l'intérieur), rien ne recouvre jamais le texte
     (les boutons ne sont plus posés en absolu sur le coin haut), et le survol ne déplace aucune
     ligne — la bande occupe sa place en permanence, seule son opacité change. Sa hauteur se lit
     comme la respiration entre deux messages, pas comme un vide. */
  #brain-log .cw-row.ai{flex-direction:column;align-items:flex-start;gap:0}
  #brain-log .cw-meta{display:flex;align-items:center;gap:var(--sp-2);height:var(--sp-22);
    padding-left:var(--sp-2);opacity:0;transition:opacity .14s ease;pointer-events:none}
  #brain-log .cw-row.ai:hover .cw-meta,#brain-log .cw-meta:focus-within{opacity:1;pointer-events:auto}
  /* Les trois éléments arrivent à des moments différents du tour : l'ordre se tient ici. */
  #brain-log .cw-meta .cw-regen{order:1} #brain-log .cw-meta .cw-copy{order:3} #brain-log .cw-meta .cw-time{order:4}
  /* Boutons fantômes : dans une bande de méta, un filet et un fond par bouton pèsent plus que
     l'action qu'ils portent. La surface n'apparaît qu'au survol du bouton lui-même. */
  #brain-log .cw-meta .cw-regen,#brain-log .cw-meta .cw-copy{position:static;width:var(--sp-22);height:var(--sp-22);
    display:grid;place-items:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--mut2);
    cursor:pointer;opacity:1;transform:none;pointer-events:auto;transition:background .12s,color .12s}
  /* Au survol, seule la COULEUR change : dans une bande de méta, une pastille de fond sous
     le curseur pèse plus que l'action qu'elle porte. Le fond reste réservé aux ÉTATS
     (copie faite, groupe d'étapes ouvert). */
  #brain-log .cw-meta .cw-regen:hover,#brain-log .cw-meta .cw-copy:hover{color:var(--accent)}
  #brain-log .cw-meta .cw-copy.ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 14%,transparent)}
  #brain-log .cw-meta .cw-time{display:inline;margin:0 0 0 var(--sp-6);font-size:var(--fs-2xs);
    color:var(--mut2);opacity:1;pointer-events:none;font-family:var(--font-mono)}
  #brain-log .cw-regen svg{width:15px;height:15px}
  /* Le message de l'utilisateur porte la MÊME bande de méta que celui du Pilote, simplement
     alignée à droite : mêmes boutons fantômes, même horodatage, même apparition au survol.
     Avant, ses outils flottaient à gauche de la bulle, encadrés : deux langages pour un
     seul geste. */
  /* La ligne prend TOUTE la largeur et pousse son contenu à droite. Si on la laisse se
     rétracter (align-self:flex-end), sa largeur se calcule sur la bande de méta et la bulle
     se retrouve coupée en deux lignes pour rien. */
  #brain-log .cw-row.me{flex-direction:column;align-items:flex-end;gap:0;align-self:stretch;width:100%}
  #brain-log .cw-row.me .cw-meta{justify-content:flex-end;padding-right:var(--sp-2);padding-left:0}
  #brain-log .cw-row.me:hover .cw-meta,#brain-log .cw-row.me .cw-meta:focus-within{opacity:1;pointer-events:auto}
  #brain-log .cw-meta .cw-mbtn{width:var(--sp-22);height:var(--sp-22);display:grid;place-items:center;
    border:0;border-radius:var(--radius-sm);background:transparent;color:var(--mut2);cursor:pointer;
    transition:color .12s}
  #brain-log .cw-meta .cw-mbtn svg{width:14px;height:14px}
  #brain-log .cw-meta .cw-mbtn:hover{color:var(--accent)}
  .brain.fs .brain-log{gap:var(--sp-16)}
  .brain-main{position:relative}
  /* Fondus de bord : le fil ne se coupe pas net, il s'estompe là où il continue. Un VOILE de la
     couleur du fil, pas un masque : le masque rendait la bulle elle-même translucide, on voyait
     à travers. Le voile recouvre, le contenu disparaît SOUS le fond.
     Il s'accroche à l'ENVELOPPE du fil, pas au panneau : sur le panneau il se calait sur
     l'en-tête et le composer ; dans le fil, il défilait avec le contenu. */
  .brain-logwrap{position:relative;flex:1;min-height:0;min-width:0;display:flex;flex-direction:column}
  .brain-logwrap::before,.brain-logwrap::after{content:'';position:absolute;left:0;right:0;
    height:var(--sp-40);z-index:2;pointer-events:none;opacity:0;transition:opacity .18s ease}
  .brain-logwrap::before{top:0;background:linear-gradient(to bottom,var(--bg),transparent)}
  .brain-logwrap::after{bottom:0;background:linear-gradient(to top,var(--bg),transparent)}
  .brain-main.fade-top .brain-logwrap::before{opacity:1}
  .brain-main.fade-bottom .brain-logwrap::after{opacity:1}
  .brain-tobottom{position:absolute;left:50%;bottom:104px;transform:translateX(-50%) scale(.92);width:34px;height:34px;
    display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:var(--card);color:var(--mut);
    cursor:pointer;box-shadow:0 6px 18px -7px var(--backdrop);opacity:0;pointer-events:none;z-index:3;
    transition:opacity .15s,transform .15s,color .12s,border-color .12s}
  .brain-main.show-tobottom .brain-tobottom{opacity:1;pointer-events:auto;transform:translateX(-50%) scale(1)}
  .brain-tobottom:hover{color:var(--accent);border-color:var(--accent)}
  .brain-tobottom svg{width:17px;height:17px}

  /* ── Lot C : rail en superposition (drawer compact ; et sous 760px en plein écran) ── */
  .brain-convos-btn{flex:0 0 auto;width:30px;height:30px;padding:0;display:grid;place-items:center;border-radius:var(--radius);
    border:1px solid transparent;background:transparent;color:var(--mut);cursor:pointer}
  .brain-convos-btn:hover{background:var(--card2);color:var(--txt);border-color:var(--line)}
  .brain-convos-btn .ic{width:17px;height:17px}
  .brain-convos-btn.on{color:var(--accent)}
  .brain.fs .brain-convos-btn{display:none}
  /* Vue panneau compacte (drawer à droite) : en-tête + pied épurés. Discussions, statut moteur et
     suggestions ne servent qu'en plein écran → on les masque ici (le ⤢ donne accès à tout). */
  .brain:not(.fs) .brain-convos-btn{display:none}
  .brain:not(.fs) .brain-status{display:none}
  .brain:not(.fs) .brain-quick{display:none}
  .brain:not(.fs) .brain-rail{position:absolute;left:0;top:0;bottom:0;width:284px;max-width:84%;z-index:6;display:flex;
    transform:translateX(-104%);visibility:hidden;transition:transform .24s cubic-bezier(.32,.72,0,1),visibility .24s;box-shadow:6px 0 24px -12px var(--backdrop)}
  .brain:not(.fs).show-rail .brain-rail{transform:none;visibility:visible}
  .brain:not(.fs).show-rail::before{content:"";position:absolute;inset:0;z-index:5;background:color-mix(in srgb,var(--backdrop) 42%,transparent)}

  /* ── Lot D : groupe d'actions repliable + barre de suggestions persistante ── */
  .brain-acts .ba-head{display:flex;align-items:center;gap:var(--sp-8);width:100%;padding:var(--sp-8) var(--sp-12);border:0;background:transparent;
    color:var(--mut);font:600 12px inherit;cursor:pointer;border-bottom:1px solid var(--line2);text-align:left}
  .brain-acts .ba-head:hover{color:var(--txt);background:color-mix(in srgb,var(--txt) 3%,transparent)}
  /* Tuile squircle teintée d'accent : le même vocabulaire que les icônes de l'app, pas un
     chevron nu suspendu dans le vide. */
  .brain-acts .ba-head-ico{display:grid;place-items:center;flex:0 0 auto;width:28px;height:28px;
    border-radius:var(--radius-sm);color:var(--accent);
    background:color-mix(in srgb,var(--accent) 12%,transparent);transition:transform .15s}
  .brain-acts .ba-head-ico svg{width:14px;height:14px}
  .brain-acts.collapsed .ba-head{border-bottom:0}
  .brain-acts.collapsed .ba-head-ico{transform:rotate(-90deg)}
  .brain-acts .ba-rows{max-height:260px;overflow-y:auto}
  .brain-acts.collapsed{display:none}   /* replié = hors du fil : le bouton « étapes » de la bande de méta le rappelle */
  .brain-quick{display:flex;gap:var(--sp-6);padding:0 var(--sp-1) var(--sp-10);overflow-x:auto;scrollbar-width:none}
  .brain-quick::-webkit-scrollbar{display:none}
  .brain-quick:empty{display:none}
  .brain-foot.has-text .brain-quick,.brain-foot.gen .brain-quick{display:none}
  .bq-chip{display:inline-flex;align-items:center;gap:var(--sp-6);flex:0 0 auto;font-size:var(--fs-sm);font-weight:var(--fw-strong);padding:var(--sp-6) var(--sp-12);
    border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--card);color:var(--mut);cursor:pointer;white-space:nowrap;transition:.12s}
  .bq-chip:hover{border-color:var(--accent);color:var(--accent)}
  .bq-chip svg{width:13px;height:13px}
  /* Rail superposé aussi en plein écran étroit (au lieu de disparaître) */
  @media(max-width:760px){
    .brain.fs .brain-convos-btn{display:grid}
    .brain.fs .brain-rail{position:absolute;left:0;top:0;bottom:0;width:284px;max-width:84%;z-index:6;display:flex;
      transform:translateX(-104%);visibility:hidden;transition:transform .24s cubic-bezier(.32,.72,0,1),visibility .24s;box-shadow:6px 0 24px -12px var(--backdrop)}
    .brain.fs.show-rail .brain-rail{transform:none;visibility:visible}
    .brain.fs.show-rail::before{content:"";position:absolute;inset:0;z-index:5;background:color-mix(in srgb,var(--backdrop) 42%,transparent)}
  }

  /* ════════════════ DISCUSSIONS V2.1 - calme & lisibilité (composer, raisonnement, recherche) ════════════════ */
  /* #3 - Révélation douce des blocs de réponse + curseur de frappe */
  @keyframes brainLineIn{from{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:reduce){ #brain-log .cw-b.ai>*{animation:none!important} }
  .brain-caret{display:inline-block;width:7px;height:1.05em;margin:0 1px -2px;border-radius:var(--radius-xs);
    background:var(--accent);opacity:.85;animation:brainCaret 1s steps(1) infinite;vertical-align:text-bottom}
  @keyframes brainCaret{50%{opacity:0}}
  /* Le groupe « Raisonnement » : plus sobre que les cartes d'action brutes */
  /* Le méta passe en chasse fixe : la trace d'exécution n'est pas de la prose, et la distinguer
     par la FORME évite de la distinguer par une couleur de plus. */
  .brain-acts .ba-head-t{font-weight:var(--fw-medium);font-family:var(--font-mono);font-size:var(--fs-xs)}
  .brain-acts .ba-head-st{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent);display:none}
  .brain-acts.live .ba-head-st{display:inline}
  .brain-acts:not(.collapsed) .ba-head{color:var(--txt)}

  /* #1 - Composer calme : les outils de gauche sont des icônes discrètes (pas d'anneau) */
  .brain-foot .bc-main>button{color:var(--mut2)}
  .brain-foot .bc-main>button:hover{color:var(--txt);background:var(--card2);border-color:var(--line)}

  /* #4 - Recherche DANS la conversation (barre flottante + surlignage + navigation) */
  .brain-find{position:absolute;top:10px;right:16px;z-index:7;display:none;align-items:center;gap:var(--sp-6);
    padding:var(--sp-6) var(--sp-8);border:1px solid var(--line);border-radius:var(--radius);background:var(--card);
    box-shadow:0 8px 24px -10px var(--backdrop)}
  .brain-find.on{display:flex}
  .brain-find input{width:160px;border:0;background:transparent;color:var(--txt);font:13px inherit;padding:var(--sp-2) var(--sp-4)}
  .brain-find input:focus{outline:none}
  .brain-find .bf-count{font-size:var(--fs-xs);color:var(--mut2);min-width:34px;text-align:center;font-variant-numeric:tabular-nums}
  .brain-find button{width:26px;height:26px;display:grid;place-items:center;border:1px solid transparent;border-radius:var(--radius-sm);
    background:transparent;color:var(--mut);cursor:pointer}
  .brain-find button:hover{background:var(--card2);color:var(--txt)}
  .brain-find button:disabled{opacity:.4;cursor:default}
  .brain-find button svg{width:15px;height:15px}
  #brain-log mark.brain-find-hl{background:color-mix(in srgb,var(--accent) 26%,transparent);color:inherit;border-radius:var(--radius-xs);padding:0 var(--sp-1)}
  #brain-log mark.brain-find-hl.cur{background:var(--accent);color:var(--on-solid)}
  .brain.fs .brain-find{right:max(34px,16vw)}

  /* #2 - Proposition de code en ligne (drawer compact : diff condensé + Appliquer/Ignorer) */
  .brain-iprop{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card);
    animation:bcIn .18s cubic-bezier(.32,.72,0,1)}
  .brain-iprop-h{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-12);background:var(--card2);border-bottom:1px solid var(--line)}
  .brain-iprop-ic{flex:0 0 auto;display:grid;place-items:center;color:var(--accent)}
  .brain-iprop-ic svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
  .brain-iprop-f{flex:1;min-width:0;font:600 12.5px var(--mono,ui-monospace,Menlo,monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .brain-iprop-tag{flex:0 0 auto;font-size:var(--fs-2xs);font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.04em;color:var(--mut2);
    padding:var(--sp-2) var(--sp-6);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--txt) 6%,transparent)}
  .brain-iprop.done .brain-iprop-tag{color:var(--ok);background:color-mix(in srgb,var(--ok) 14%,transparent)}
  .brain-iprop-diff{max-height:230px;overflow:auto;font:11.5px/1.55 var(--mono,ui-monospace,Menlo,monospace);padding:var(--sp-8) 0}
  .brain-iprop-diff.clip{max-height:150px}
  .brain-iprop-diff .ln{display:block;padding:0 var(--sp-12);white-space:pre-wrap;word-break:break-word}
  .brain-iprop-diff .ln.add{background:color-mix(in srgb,var(--ok) 13%,transparent)}
  .brain-iprop-diff .ln.del{background:color-mix(in srgb,var(--err) 13%,transparent)}
  .brain-iprop-more{display:block;width:100%;padding:var(--sp-6);border:0;border-top:1px solid var(--line2);background:transparent;
    color:var(--accent);font:600 11.5px inherit;cursor:pointer}
  .brain-iprop-more:hover{background:color-mix(in srgb,var(--accent) 8%,transparent)}
  .brain-iprop-a{display:flex;gap:var(--sp-6);padding:var(--sp-8) var(--sp-12);border-top:1px solid var(--line)}
  .brain-iprop-a button{font-size:var(--fs-sm);font-weight:var(--fw-strong);padding:var(--sp-6) var(--sp-12);border-radius:var(--radius);cursor:pointer;border:1px solid var(--line);background:var(--card2);color:var(--txt)}
  .brain-iprop-a button:hover{border-color:var(--line2)}
  .brain-iprop-a button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-solid)}
  .brain-iprop-a button.primary:hover{background:var(--accent-h);border-color:var(--accent-h)}
  .brain-iprop-a button:disabled{opacity:.5;cursor:default}
  .brain-iprop.done .brain-iprop-a{display:none}

  /* ════════════════ TABLEAUX V2 - aperçu clippé + export + panneau dédié ════════════════ */
  /* Aperçu inline : ne montrer que les 10 premières lignes, pied « Tout afficher ↗ » */
  #brain-log .cw-tbl tbody tr.cw-clip-off{display:none!important}
  #brain-log .cw-tblmore{border-top:1px solid var(--line)}
  #brain-log .cw-tblmore button{display:flex;align-items:center;justify-content:center;gap:var(--sp-6);width:100%;padding:var(--sp-8);
    border:0;background:transparent;color:var(--accent);font:600 12px inherit;cursor:pointer}
  #brain-log .cw-tblmore button:hover{background:color-mix(in srgb,var(--accent) 8%,transparent)}
  #brain-log .cw-tblmore svg{width:14px;height:14px}
  /* Panneau dédié « Tableau » : barre de CTA d'export + tableau plein défilable */
  .bsd-table{display:flex;flex-direction:column;min-height:0}
  .bsd-tblbar2{flex:0 0 auto;display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-10) var(--sp-14);border-bottom:1px solid var(--line);background:var(--card2)}
  .bsd-tblbar2 .bsd-tblmeta{flex:1;min-width:0;font-size:var(--fs-sm);color:var(--mut);font-variant-numeric:tabular-nums}
  .bsd-tblbody{flex:1;min-height:0;overflow:auto;padding:var(--sp-14) var(--sp-16)}
  .bsd-tblbody .cw-tblx{margin:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card)}
  .bsd-tblbody .cw-tbl{width:100%;font-size:var(--fs-sm);border:0}
  .bsd-tblbody .cw-tbl th,.bsd-tblbody .cw-tbl td{border:0;border-bottom:1px solid var(--line);padding:var(--sp-8) var(--sp-12);text-align:left;vertical-align:top}
  .bsd-tblbody .cw-tbl tbody tr:last-child td{border-bottom:0}
  .bsd-tblbody .cw-tbl thead tr:first-child th{position:sticky;top:0;background:var(--card2);font-weight:var(--fw-bold);z-index:1}
  .bsd-tblbody .cw-tbl th.cw-th-sort{cursor:pointer;user-select:none;padding-right:var(--sp-24);position:sticky}
  .bsd-tblbody .cw-tbl th.cw-th-sort::after{content:"";position:absolute;right:9px;top:50%;transform:translateY(-50%);
    width:7px;height:7px;opacity:.32;background:currentColor;clip-path:polygon(50% 0,100% 42%,72% 42%,72% 100%,28% 100%,28% 42%,0 42%)}
  .bsd-tblbody .cw-tbl th.cw-th-sort[data-sort]::after{opacity:.95;color:var(--accent)}
  .bsd-tblbody .cw-tbl th.cw-th-sort[data-sort=desc]::after{transform:translateY(-50%) rotate(180deg)}
  .bsd-tblbody .cw-tbl tbody tr:hover td{background:color-mix(in srgb,var(--accent) 6%,transparent)}
  .bsd-tblbody .cw-tbl tr.cw-tfilter{display:none}
  .bsd-tblbody .cw-tblx.show-filter .cw-tbl tr.cw-tfilter{display:table-row}
  .bsd-tblbody .cw-tbl tr.cw-tfilter th{background:var(--bg2);padding:var(--sp-4) var(--sp-6);position:sticky;top:34px}
  .bsd-tblbody .cw-tbl tr.cw-tfilter input{width:100%;font:11.5px inherit;padding:var(--sp-4) var(--sp-8);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--card);color:var(--txt)}
  .bsd-tblbody .cw-tbl tr.cw-tfilter input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus)}

  /* Centrage robuste des boutons-icônes du Pilote : le padding par défaut des <button> (6px 12px)
     n'était jamais remis à zéro → en box-sizing:border-box, il écrasait la zone de contenu et
     poussait l'icône hors du centre. On force padding:0 + svg en bloc. */
  #brain-log .cw-copy,#brain-log .cw-regen,#brain-log .cw-codecopy,#brain-log .cw-mbtn,
  .cw-tfbtn,.brain-conv-act,.brain-find button,.brain-tobottom,.cw-tblmore button,.cw-conv-act{padding:0}
  #brain-log .cw-mbtn svg,#brain-log .cw-copy svg,#brain-log .cw-regen svg,#brain-log .cw-codecopy svg,
  .brain-conv-act svg,.cw-tfbtn svg,.brain-find button svg,.brain-tobottom svg{display:block}

  /* ── Pièces jointes dans les bulles utilisateur ── */
  #brain-log .cw-att-strip{display:flex;flex-wrap:wrap;gap:var(--sp-8);margin-top:var(--sp-8)}
  #brain-log .cw-att-chip{display:flex;flex-direction:column;align-items:center;gap:var(--sp-4);cursor:default}
  #brain-log .cw-att-chip.img{cursor:pointer}
  #brain-log .cw-att-chip.img img{display:block;max-width:160px;max-height:120px;border-radius:var(--radius);
    object-fit:cover;border:1.5px solid rgba(255,255,255,.22);transition:transform .15s,box-shadow .15s}
  #brain-log .cw-att-chip.img:hover img{transform:scale(1.03);box-shadow:var(--elev-2)}
  #brain-log .cw-att-chip .cw-att-nm{font-size:var(--fs-2xs);opacity:.72;max-width:160px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #brain-log .cw-att-chip:not(.img){flex-direction:row;align-items:center;gap:var(--sp-6);
    padding:var(--sp-4) var(--sp-8);border-radius:var(--radius);background:rgba(255,255,255,.14)}
  #brain-log .cw-att-chip .cw-att-ico{font-size:var(--fs-base);flex:0 0 auto}

  /* ── Visionneuse fullscreen (lightbox) ── */

  /* ── Barre de score projet - Copilote (17-report.js + paneCopilote) ── */
  .cw-score-bar{display:flex;align-items:center;gap:var(--sp-12);padding:var(--sp-8) var(--sp-14);background:var(--card);
    border-bottom:1px solid var(--line);flex:none}
  .cw-score-ring{position:relative;width:40px;height:40px;flex:none}
  .cw-score-ring svg{width:40px;height:40px;display:block}
  .cw-score-ring span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
    font-size:var(--fs-2xs);font-weight:var(--fw-bold)}
  .cw-score-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--sp-2)}
  .cw-score-info b{font-size:var(--fs-md);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cw-score-info .muted{font-size:var(--fs-xs)}
  .cw-score-acts{display:flex;gap:var(--sp-4);flex:none}
  .cw-score-acts .mini{padding:var(--sp-2) var(--sp-8);font-size:var(--fs-sm)}
  .cw-score-acts .mini svg{width:13px;height:13px;stroke:currentColor;stroke-width:1.8;fill:none;display:block}

}
