@layer modules{
  /* ── Studio (vue projet plein cadre) ── */
  body.in-detail .col-report{display:none}
  body.in-detail .col-profile{display:none}
  body.in-detail .split{grid-template-columns:1fr}
  .studio{max-width:none}
  .studio-head{display:flex;flex-direction:column;gap:var(--sp-14);margin-bottom:var(--sp-18);padding-bottom:var(--sp-18);
    border-bottom:1px solid var(--line)}
  .sh-ligne{display:flex;align-items:flex-start;gap:var(--sp-14);min-width:0}   /* 2026-10-15 : l'identité sur une ligne, la fiche de stockage dessous ; 2026-10-16 : l'icône et le lien calés en haut (proprio) */
  .studio-head .picon{width:46px;height:46px;border-radius:var(--radius);flex:none;
    box-shadow:none;border-width:.5px}   /* sans ombre et filet de 0,5 px depuis le 2026-10-16 (proprio) */
  .studio-head .ver{border:0}   /* le badge de version sans bordure dans l'en-tête du Studio (proprio, 2026-10-16) */
  .sh-txt{flex:1;min-width:0}
  .sh-name{font-size:var(--fs-lg);font-weight:var(--fw-bold);display:flex;align-items:center;gap:var(--sp-8);flex-wrap:wrap;letter-spacing:-.015em;line-height:1.1}
  .ptarget{display:flex;align-items:center;gap:var(--sp-6) var(--sp-14);flex-wrap:wrap;margin-top:var(--sp-4);margin-bottom:var(--sp-10)}
  .ptarget .phost+.phost{position:relative}
  .ptarget .phost+.phost::before{content:'';position:absolute;left:-8px;top:50%;width:3px;height:3px;
    border-radius:50%;background:var(--mut2);transform:translateY(-50%);opacity:.5}
  a.phost{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-sm);font-weight:var(--fw-medium);
    color:var(--mut);text-decoration:none;transition:color .15s}
  a.phost:hover{color:var(--accent);text-decoration:underline;text-underline-offset:3px}   /* souligné au survol (le proprio, 2026-11-02) */
  a.phost svg.ic{width:11px;height:11px;flex:none;opacity:.55}
  a.phost:hover svg.ic{opacity:1}
  .phost.none{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-sm);color:var(--mut2);font-style:italic}
  /* Actions d'en-tête (Cockpit / partager / éditer) */
  /* 2026-10-16 (proprio) : « Paramètres » est un lien, sans bordure ni fond, souligné au survol. */
  .sh-acts .mini{padding:var(--sp-6) 0;border:0;background:transparent;box-shadow:none;font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--mut);border-radius:0}
  .sh-acts .mini:hover,.sh-acts .mini:focus-visible{background:transparent;color:var(--txt);text-decoration:underline;text-underline-offset:3px}
  .sh-acts .mini.live-btn{padding-left:var(--sp-10)}

  /* ── Panneau latéral de sections (remplace la barre d'onglets) ── */
  .studio-body{display:grid;grid-template-columns:264px minmax(0,1fr);gap:var(--sp-22);align-items:start}   /* 204 → 234 → 254 px le 2026-10-16 (proprio : +30 puis +20 px) ; 264 le 2026-11-02 (+10 px pour les logos des apps, agrandis) */
  /* Même DA que le panneau des Paramètres (.set-nav) : carte flottante sans
     filet (l'ombre suffit à la détacher du fond), pastille pleine sur l'item
     actif plutôt qu'une teinte - une seule recette de navigation latérale.
     Qualifié par `.studio-body` : `.snav` tout court est AUSSI le nom de la
     nav sociale de l'accueil (19-social.css, filet + fond carte assumés là-bas)
     - homonymie fortuite. Sans le qualificatif, celle-ci gagnait la cascade
     (chargée après) et réintroduisait le filet qu'on vient d'enlever ici. */
  .studio-body .snav{position:sticky;top:calc(var(--hh-bar,64px) + var(--sp-16));display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-10);margin-top:0;   /* la marge du .snav social (19-social.css) décalait le panneau sous le contenu (proprio, 2026-10-16) */
  /* Collé sous l'en-tête avec 16 px d'air (le proprio, 2026-11-02 : « le panneau se fixe trop bas ») : jusque-là 80 px en dur,
     alors qu'un dossier ouvert dans un onglet n'a pas d'en-tête (--hh-bar vaut 0) et se collait donc à 80 px du haut du cadre. */
    background:var(--bg2);border:0;border-radius:var(--radius);box-shadow:none}   /* sans ombre depuis le 2026-10-16 (proprio) */
  .sni{display:flex;align-items:center;gap:var(--sp-8);width:100%;text-align:left;background:transparent;
    border:none;border-radius:var(--radius);padding:var(--sp-6) var(--sp-8);color:var(--txt);font-weight:var(--fw-regular);font-size:var(--fs-sm)}
  .sni:hover{background:var(--line2);border-color:transparent;color:var(--txt)}
  .snav .sni:hover .sni-l{text-decoration:underline;text-underline-offset:3px}   /* le fond et le libellé souligné (le proprio, 2026-11-02) */
  .snav.snav-tri .sni:hover .sni-l{text-decoration:none}   /* pendant le tri, rien ne se souligne : on déplace, on n'ouvre pas */
  /* Les tuiles du Studio rognent leur libellé (deux lignes, interligne 1,2, overflow:hidden) : le trait, posé sous la ligne,
     était coupé (le proprio, 2026-11-02 : « toujours pas de soulignement sur les apps du Studio »). Une marge basse lui fait
     place, le trait remonte d'un cran. */
  .snav-tuiles .sni .sni-l{padding-bottom:3px}
  .snav-tuiles .sni:hover .sni-l{text-underline-offset:2px}
  .studio-body .snav .sni{transition:none}   /* 2026-10-16 (proprio) : le panneau du Studio répond au survol sans délai (la transition U1 des boutons ne s'y applique pas) */
  .sni.on{background:var(--accent);color:var(--on-solid);font-weight:var(--fw-regular)}
  .sni svg.ic{width:15px;height:15px;color:var(--mut2)}
  .sni.on svg.ic{color:var(--on-solid)}
  .sni .sni-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* Le groupe Studio en tuiles, deux par ligne (proprio, 2026-10-16) : l'icône à gauche, le nom à droite sur deux lignes au plus,
     une hauteur qui tient ces deux lignes sans bouger quand le nom est court. Les autres groupes gardent leurs lignes. */
  .snav-tuiles{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4);margin-top:var(--sp-2)}
  /* 32 px de haut (proprio, « plus petits ») ; le retrait, l'écart et l'icône des lignes du panneau (15 px), pour que les icônes et
     les noms de la colonne gauche tombent à l'aplomb de ceux de Projet et Compléments (proprio, 2026-10-16 : « l'alignement »). */
  .snav-tuiles .sni{min-height:34px;padding-block:var(--sp-2);text-align:start}   /* 32 → 36 → 34 px le 2026-11-02 : le logo passe à 24 px, puis le proprio réduit de 2 px */
  .snav-tuiles .sni svg.ic{flex:none}
  /* Les logos des apps (le proprio, 2026-11-02) : 26 px (20 puis × 1,2, « pas très visibles », puis × 1,1 le 2026-11-04), mais une emprise de 16 px en
     largeur (marges négatives), celle des icônes des autres lignes, pour que les noms restent à l'aplomb de ceux de Projet et
     Compléments (« l'alignement », 2026-10-16). */
  .sni svg.dh-logo{width:26px;height:26px;flex:none;margin:-5px}
  .snav-tuiles .sni .sni-l{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.2;font-size:var(--fs-xs)}
  /* Les apps sans fichier et inutilisées depuis trois jours (12e-snav-apps.js, 2026-10-25) : rangées, et un lien discret sous la
     grille les montre ou les range. */
  .snav [data-masquee]{display:none}
  .snav-apps-plus{display:block;margin:var(--sp-4) 0 0;padding:var(--sp-2) var(--sp-8);border:0;background:transparent;color:var(--mut2);
    font:inherit;font-size:var(--fs-xs);text-align:start;cursor:pointer;border-radius:var(--radius-sm)}
  .snav-apps-plus:hover{color:var(--txt);background:var(--line2)}
  .snav-apps-plus:focus-visible{outline:none;box-shadow:var(--focus)}
  .sni .sni-pic{display:inline-flex;flex:none}
  .sni .sni-pic svg.ic{color:currentColor}
  .snav-grp{margin-top:var(--sp-4)}
  .snav-grp summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:var(--sp-6);
    font-size:var(--fs-2xs);font-weight:var(--fw-bold);color:var(--mut2);text-transform:uppercase;letter-spacing:.07em;
    padding:var(--sp-6) var(--sp-8) var(--sp-4);user-select:none}
  .snav-grp summary::-webkit-details-marker{display:none}
  .snav-grp summary:hover{color:var(--mut)}
  /* Le panneau se réordonne en glissant (12d-snav-ordre.js, 2026-10-20) : l'élément tenu pâlit à sa place provisoire ; pendant
     le glissé, les survols se taisent pour que seule la place libre se lise. */
  .snav .snav-glisse{opacity:.4}
  .snav.snav-tri .sni:hover{background:transparent}
  .snav.snav-tri summary:hover{color:var(--mut2)}
  .snav-car{margin-left:auto;display:inline-flex;transition:transform .15s}
  /* Le « + » de l'en-tête d'un groupe, à gauche de la flèche (2026-10-19, applications web du Studio) */
  .snav-grp-acts{margin-left:auto;display:inline-flex;align-items:center}
  .snav-grp-acts+.snav-car{margin-left:0}
  .snav-grp-plus{display:inline-grid;place-items:center;width:20px;height:20px;padding:0;border:0;border-radius:var(--radius-xs);
    background:transparent;color:var(--mut2);cursor:pointer}
  .snav-grp-plus:hover{background:var(--card2);color:var(--txt)}
  .snav-grp-plus svg.ic{width:13px;height:13px}
  .snav-car svg.ic{width:11px;height:11px}
  .snav-grp[open] .snav-car{transform:rotate(90deg)}
  .snav-foot{margin-top:var(--sp-6);padding-top:var(--sp-6);border-top:1px solid var(--line2)}
  .snav-sep{height:1px;background:var(--line2);margin:var(--sp-8) var(--sp-6) var(--sp-4)}
  @media(max-width:760px){
    .studio-body{grid-template-columns:1fr}
    .snav{position:static;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--sp-2)}
    /* <details> ignore display:contents → groupe rendu en rangée de ses entrées */
    .snav-grp{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);margin:0}
    .snav-grp summary{display:none}
    .snav-tuiles{display:contents} .snav-tuiles .sni{flex-direction:row;min-height:0;padding:var(--sp-6) var(--sp-8)} .snav-tuiles .sni .sni-l{font-size:var(--fs-sm)}   /* en ligne sur petit écran, comme les autres */
    .sni{width:auto}
    .snav-foot{margin:0;padding:0;border:0;display:flex}
    .snav-sep{display:none}
  }

  /* Segment Éditeur / Render - toggle (réutilisé par les modes du CDC) */
  .tab-seg{display:inline-flex;align-items:center;gap:var(--sp-2);align-self:center;margin:0 var(--sp-4) var(--sp-4);padding:var(--sp-2);
    background:var(--card2);border:1px solid var(--line);border-radius:var(--radius)}
  .tab-seg.on{border-color:var(--accent)}
  .seg-btn{background:transparent;border:none;border-radius:var(--radius-sm);padding:var(--sp-4) var(--sp-12);color:var(--mut);
    font-weight:var(--fw-medium);white-space:nowrap;transition:background .12s,color .12s}
  .seg-btn:hover{color:var(--txt)}
  .seg-btn.on{background:var(--accent);color:var(--on-solid)}
  .tabpane{min-height:300px}
  .tabpane:focus-visible:not(.focus-clavier){box-shadow:none}   /* l'anneau du contenu, au clavier (Tab) seulement : 12-studio.js */

  /* Carte « environnement local » - compacte (config + CTA, pas une cible de déploiement) */
  .local-card{background:var(--card2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-8) var(--sp-10);margin-bottom:var(--sp-16)}
  .lc-top{display:flex;align-items:center;gap:var(--sp-8);min-width:0}
  .lc-url{color:var(--link);font-size:var(--fs-sm);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:42%}
  .lc-url:hover{text-decoration:underline} .lc-url.muted{color:var(--mut2)}
  .lc-git{display:inline-flex;align-items:center;font-size:var(--fs-xs);font-weight:var(--fw-label);color:var(--mut);white-space:nowrap;cursor:help}
  .lc-git:empty{display:none}
  .lc-status{font-size:var(--fs-xs);font-weight:var(--fw-strong);color:var(--mut2);white-space:nowrap}
  .lc-status.ok{color:var(--ok)} .lc-status.err{color:var(--err)} .lc-status.warn{color:var(--warn)}
  .lc-acts{display:flex;gap:var(--sp-4);flex:none}
  .lc-meta{margin-top:var(--sp-6);font-size:var(--fs-xs);color:var(--mut2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  @media(max-width:620px){ .lc-url{max-width:none} .lc-git,.lc-status{display:none} }
  .ov-sec{font-size:var(--fs-xs);font-weight:var(--fw-bold);color:var(--mut);text-transform:uppercase;letter-spacing:.05em;margin:var(--sp-2) 0 var(--sp-8)}
  /* Vue d'ensemble - tuiles de stats + accès rapide */
  .ov-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:var(--sp-10)}
  .ov-tile{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-2);text-align:left;
    background:var(--card2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-10) var(--sp-12);
    cursor:pointer;transition:border-color .12s,background .12s}
  .ov-tile.static{cursor:default}
  button.ov-tile:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--card2))}
  .ovt-ic{color:var(--mut)} .ovt-ic svg.ic{width:17px;height:17px;display:block}
  button.ov-tile:hover .ovt-ic{color:var(--accent)}
  .ovt-n{font-size:var(--fs-lg);font-weight:var(--fw-bold);color:var(--txt);line-height:1.15}
  .ovt-l{font-size:var(--fs-xs);color:var(--mut)}
  /* Mockups d'appareils */
  .ov-devices{display:grid;grid-template-columns:1fr 156px;gap:var(--sp-12);align-items:end;margin-bottom:var(--sp-2)}
  @media(max-width:700px){.ov-devices{grid-template-columns:1fr}}
  .ovd-browser{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card2)}
  .ovd-chromebar{display:flex;align-items:center;gap:var(--sp-6);background:var(--bg2);border-bottom:1px solid var(--line);padding:var(--sp-6) var(--sp-10);min-height:32px}
  .ovd-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--line2)}
  .ovd-dot:nth-child(1){background:#ff5f57}.ovd-dot:nth-child(2){background:#febc2e}.ovd-dot:nth-child(3){background:#28c840}
  .ovd-addr{flex:1;font-size:var(--fs-2xs);font-family:var(--font-mono);color:var(--mut2);background:var(--bg);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
  .ovd-screen{background:var(--bg2);position:relative;overflow:hidden}
  .ovd-screen.dsk{height:210px}
  .ovd-screen img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block}
  .ovd-skel{position:absolute;inset:0;display:flex;flex-direction:column;gap:var(--sp-8);padding:var(--sp-14);background:var(--bg2)}
  .ovd-skel-bar{height:9px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--line2) 70%,var(--bg2));animation:ov-pulse 1.5s ease-in-out infinite}
  .ovd-skel-bar.w80{width:80%}.ovd-skel-bar.w55{width:55%}.ovd-skel-bar.w35{width:35%}.ovd-skel-bar.w70{width:70%}
  @keyframes ov-pulse{0%,100%{opacity:.4}50%{opacity:1}}
  .ovd-nosnap{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-4);color:var(--mut2);font-size:var(--fs-xs)}
  .ovd-nosnap svg.ic{width:26px;height:26px;opacity:.25}
  .ovd-right{display:flex;flex-direction:column;gap:var(--sp-10)}
  .ovd-tablet{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card2)}
  .ovd-tb-top{height:18px;background:var(--bg2);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:center}
  .ovd-cam{width:5px;height:5px;border-radius:50%;background:var(--line2)}
  .ovd-tb-screen{height:115px;background:var(--bg2);overflow:hidden;position:relative}
  .ovd-tb-bot{height:10px;background:var(--bg2);border-top:1px solid var(--line);display:flex;align-items:center;justify-content:center}
  .ovd-hbar{width:26px;height:3px;border-radius:var(--radius-xs);background:var(--line2)}
  .ovd-phone{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--card2)}
  .ovd-ph-top{height:15px;background:var(--bg2);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:center}
  .ovd-island{width:22px;height:6px;border-radius:var(--radius-xs);background:var(--line2)}
  .ovd-ph-screen{height:115px;background:var(--bg2);overflow:hidden;position:relative}
  .ovd-ph-bot{height:12px;background:var(--bg2);border-top:1px solid var(--line);display:flex;align-items:center;justify-content:center}
  /* ── Env rows compactes ── */
  .ov-env-rows{background:var(--card2);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
  .ov-env-row2{position:relative;display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-12) var(--sp-8) var(--sp-14);min-width:0;
    transition:background .12s}
  .ov-env-row2:hover{background:color-mix(in srgb,var(--accent) 4%,var(--card2))}
  .ov-env-row2+.ov-env-row2{border-top:1px solid var(--line)}
  .ov-env-row2[data-ov-env]{cursor:pointer}   /* une ligne mène au détail de son environnement (2026-10-18) */
  .ov-env-row2::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
    background:var(--erst,transparent)}
  .ov-env-row2[data-state=ok],.ov-env-row2[data-state=local]{--erst:var(--ok)}
  .ov-env-row2[data-state=warn]{--erst:var(--err)}   /* en retard : le rouge de « N mises à jour disponibles » (le proprio, 2026-11-02) */
  .ov-env-row2[data-state=muted]{--erst:var(--line2)}
  .ov-er-name{font-size:var(--fs-md);font-weight:var(--fw-strong);color:var(--txt);white-space:nowrap;flex:none}
  .ov-er-url{font-size:var(--fs-xs);font-family:var(--font-mono);color:var(--mut2);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1;text-decoration:none}
  .ov-er-url:not(.muted):hover{color:var(--accent);text-decoration:underline}
  .ov-er-url{flex:0 1 auto;margin-right:auto}   /* le lien à la taille de son texte, le vide reste à la ligne (2026-11-02 : survoler le vide soulignait le lien) */
  .ov-env-row2 .ov-er-acts{margin-left:0}   /* la marge du lien pousse déjà tout le reste à droite : « v1.3.2 → » reste collé à son bouton */
  /* Survol d'une ligne (le proprio, 2026-11-02) : le nom se souligne, la ligne mène au détail ; sur le lien de droite ou un
     bouton, seul ce qu'on vise est souligné ou éclairé, le nom ne l'est plus. */
  .ov-env-row2:hover .ov-er-name{text-decoration:underline;text-underline-offset:3px}
  .ov-env-row2:has(.ov-er-url:not(.muted):hover,.ov-er-acts button:hover,.stk-pas:hover) .ov-er-name{text-decoration:none}
  .ov-er-st{font-size:var(--fs-xs);font-weight:var(--fw-strong);white-space:nowrap;flex:none}
  .ov-er-st.ok{color:var(--ok)}.ov-er-st.warn{color:var(--warn)}.ov-er-st.muted{color:var(--mut2)}
  /* Pastille de statut de déploiement */
  .ov-er-pill{display:inline-flex;align-items:center;gap:var(--sp-6);flex:none;white-space:nowrap;
    font-size:var(--fs-xs);font-weight:var(--fw-strong);padding:var(--sp-2) var(--sp-10);border-radius:var(--radius-pill);
    color:var(--mut2);background:var(--line2)}
  .ov-er-pill i{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
  .ov-er-pill.ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 13%,transparent)}
  .ov-er-pill.warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 14%,transparent)}
  .ov-er-pill.muted{color:var(--mut);background:var(--line2)}
  /* Une version d'avance (le proprio, 2026-11-01) : la version en ligne, graisse 400, sans aplat, avant « Mettre à jour vers » ;
     en rouge depuis le 2026-11-02 (le proprio : « la version à gauche doit être en rouge »), le rouge de « N mises à jour disponibles ». */
  .ov-er-pill.maj{color:var(--err);background:none;font-weight:var(--fw-regular);padding-inline:var(--sp-2) 0;margin-right:calc(-1 * var(--sp-4))}
  .ov-er-pill svg.ic,.ov-sec-tag svg.ic{width:13px;height:13px;flex:none}
  /* « Mettre à jour vers v1.3.1 » sur deux lignes, le nombre de versions en attente dessous (le proprio, 2026-11-02, maquette). */
  .ov-er-acts .mini.ov-maj{height:auto;min-height:28px;padding:var(--sp-4) var(--sp-12) var(--sp-4) var(--sp-8);gap:var(--sp-8);text-align:left;align-items:center}
  .ov-maj svg.ic{width:16px;height:16px;flex:none}
  .ov-maj-txt{display:flex;flex-direction:column;line-height:1.2}
  .ov-maj-n{font-size:var(--fs-2xs);font-weight:var(--fw-regular);opacity:.85;min-height:1.2em}   /* 1.2em : la hauteur de la ligne de texte (.ov-maj-txt), squelette compris */
  .ov-maj-n:empty{display:none}
  .ov-maj-n .sq{display:inline-block;vertical-align:middle;width:110px;height:6px}   /* la place du nombre tenue pendant la lecture : la ligne ne grandit plus à son arrivée */
  .ov-maj:hover .ov-maj-txt > span:first-child{text-decoration:underline;text-underline-offset:2px}   /* « Mettre à jour vers » souligné au survol (le proprio, 2026-11-02) */
  .ov-sec-tag svg.ic{width:12px;height:12px}
  .ov-er-acts{display:flex;align-items:center;gap:var(--sp-4);flex:none;margin-left:auto}
  .ov-er-acts [hidden]{display:none}   /* « Ouvrir » et « Démarrer le serveur » s'échangent par hidden, que l'affichage des boutons écrasait (2026-10-18) */
  /* Les boutons des lignes sans bordure (proprio, 2026-10-20) : l'aplat teinté suffit au geste principal, le lien vers le
     site est une icône nue qui s'éclaire au survol. */
  .ov-er-acts .mini{border-color:transparent;box-shadow:none;transition-duration:0s}   /* survol instantané (le proprio, 2026-11-02 : « un effet hover réactif ») */
  .ov-er-acts .mini.icon-only{padding:var(--sp-4);width:28px;height:28px;justify-content:center;background:transparent;color:var(--mut)}
  .ov-er-acts .mini.icon-only:hover{background:color-mix(in srgb,var(--txt) 7%,transparent);color:var(--txt)}
  /* Action de ligne : jamais un aplat d'accent. Une liste de quatre
     environnements affichait quatre boutons violets pleins - l'œil ne savait
     plus où se poser. L'accent teinté garde l'affordance et rend le plein
     violet à ce qui est vraiment principal (le CTA de la page). */
  .ov-er-acts .mini.primary{background:color-mix(in srgb,var(--accent) 13%,transparent);
    border-color:transparent;color:var(--accent)}
  .ov-er-acts .mini.primary:hover{background:var(--accent);border-color:var(--accent);color:var(--on-solid)}
  /* Statut local (rempli par localPing) en pastille discrète ; le libellé, sans puce depuis le 2026-10-18 (le proprio : « une
     majuscule au début, Accessible, Injoignable ; retire le cercle »), dit l'état seul. */
  #lc-status.lc-status{flex:none;display:inline-flex;align-items:center;gap:var(--sp-4);white-space:nowrap;
    font-size:var(--fs-xs);font-weight:var(--fw-strong);padding:var(--sp-2) var(--sp-2);border-radius:var(--radius-pill);background:none}
  #lc-status.lc-status svg.ic{width:12px;height:12px;flex:none}
  /* Sans aplat depuis le 2026-11-02 (le proprio : « retire la couleur de fond, garde la couleur du texte, en accent ») :
     « Accessible » en texte sourd, l'échec et l'attente gardent leur couleur. */
  #lc-status.lc-status.ok{color:var(--mut);background:none;font-weight:var(--fw-regular)}   /* sourd, graisse 400 (le proprio, 2026-11-02, après l'accent) */
  #lc-status.lc-status.err{color:var(--err);background:none}
  #lc-status.lc-status.warn{color:var(--warn);background:none}
  /* En-tête de section avec étiquette d'état */
  .ov-sec-row{display:flex;align-items:center;gap:var(--sp-10);margin:0 0 var(--sp-8)}
  .ov-sec-row .ov-sec{margin:0}
  .ov-widgets-grid + .ov-sec-row{margin-top:var(--sp-28)}   /* de l'air au-dessus d'Applications et de Compléments, pas d'Environnements (le proprio, 2026-11-02) */
  .ov-sec-tag{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-2xs);font-weight:var(--fw-strong);
    padding:var(--sp-2) var(--sp-8);border-radius:var(--radius-pill);letter-spacing:.01em;text-transform:none}
  .ov-sec-tag i{width:5px;height:5px;border-radius:50%;background:currentColor}
  .ov-sec-tag.ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 12%,transparent)}
  .ov-sec-tag.warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 13%,transparent)}
  /* « N mises à jour disponibles » (le proprio, 2026-11-02) : le texte en rouge, sans aplat. */
  .ov-sec-tag.maj{color:var(--err);background:none;padding-inline:0}
  .ov-sec-tag.muted{color:var(--mut);background:var(--line2)}
  /* ── Plugin widgets ── */
  .ov-plug-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:var(--sp-8)}
  .ov-plug-widget{display:flex;flex-direction:column;align-items:center;gap:var(--sp-6);
    padding:var(--sp-14) var(--sp-10) var(--sp-12);background:var(--card2);border:1px solid var(--line);
    border-radius:var(--radius);cursor:pointer;text-align:center;
    transition:border-color .15s,background .15s}
  .ov-plug-widget:hover{border-color:var(--pw-col,var(--accent));
    background:color-mix(in srgb,var(--pw-col,var(--accent)) 8%,var(--card2))}
  .ov-pw-ic{width:36px;height:36px;display:flex;align-items:center;justify-content:center;
    border-radius:var(--radius);background:color-mix(in srgb,var(--pw-col,var(--accent)) 14%,transparent);
    color:var(--pw-col,var(--accent))}
  .ov-pw-ic svg.ic{width:18px;height:18px}
  .ov-pw-name{font-size:var(--fs-xs);font-weight:var(--fw-strong);color:var(--txt);line-height:1.3;
    max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ov-pw-badge{font-size:var(--fs-2xs);font-weight:var(--fw-strong);color:var(--ok);
    background:color-mix(in srgb,var(--ok) 13%,transparent);padding:var(--sp-1) var(--sp-6);border-radius:var(--radius-modal)}

  /* ── Overview widget cards ── */
  /* Trois formats de carte (proprio, 2026-10-19) sur une grille de quatre colonnes : .ovw-quart (une colonne, CARRÉ : la
     hauteur vaut la largeur d'une colonne, bornée de 200 à 400 px), .ovw-moitie (deux colonnes), .ovw-large (toute la
     largeur) ; le quart et la moitié ont la hauteur --ov-h, le large celle de son contenu, au plus --ov-h. La largeur se lit sur la colonne de la vue d'ensemble (.ov-left,
     conteneur de requêtes : 100cqw), qui passe à deux colonnes puis une quand elle se resserre. Une carte plus remplie
     que sa hauteur fait défiler son corps, jamais la page. */
  .ov-left{container-type:inline-size}
  .ov-widgets-grid{--ov-cols:4;--ov-gap:var(--sp-10);display:grid;grid-template-columns:repeat(var(--ov-cols),minmax(0,1fr));gap:var(--ov-gap);
    --ov-h:clamp(200px, calc((100cqw - (var(--ov-cols) - 1) * var(--ov-gap)) / var(--ov-cols)), 400px)}
  @container (max-width:860px){ .ov-widgets-grid{--ov-cols:2} }
  @container (max-width:460px){ .ov-widgets-grid{--ov-cols:1} .ov-widgets-grid .ovw-moitie{grid-column:span 1} }
  .ovw-quart{grid-column:span 1;height:var(--ov-h)}
  .ovw-moitie{grid-column:span 2;height:var(--ov-h)}
  .ovw-large{grid-column:1 / -1;height:auto;max-height:var(--ov-h)}   /* à la hauteur de son contenu, jamais plus haut que le carré (proprio, 2026-10-19) */
  .ov-env-rows.ovw-large{overflow:hidden;max-height:none}   /* la liste des environnements prend toute sa hauteur, sans défilement interne (le proprio, 2026-11-02 : avec cinq lignes, Staging était coupé) */
  .ovw-card{background:var(--card2);border:1px solid var(--line);border-radius:var(--radius);min-height:132px;
    display:flex;flex-direction:column;overflow:hidden}
  .ovw-card.ovw-quart,.ovw-card.ovw-moitie,.ovw-card.ovw-large{min-height:0}
  /* Aucune carte ne défile (proprio, 2026-10-19) : le contenu s'adapte à la hauteur de la carte. Le corps d'une carte de
     hauteur fixe (quart, moitié) est un conteneur de requêtes (ovwcorps) : l'état vide s'y resserre selon la place. */
  .ovw-card .ovw-body{min-height:0;overflow:hidden}
  .ovw-quart .ovw-body,.ovw-moitie .ovw-body{container-type:size;container-name:ovwcorps}
  .ovw-sans-tete .ovw-head{display:none}
  .ovw-head{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-10) var(--sp-12) var(--sp-8);
    border-bottom:1px solid var(--line)}
  .ovw-ic{width:28px;height:28px;display:flex;align-items:center;justify-content:center;
    border-radius:var(--radius);background:color-mix(in srgb,var(--wc,var(--accent)) 15%,transparent);
    color:var(--wc,var(--accent));flex:none}
  .ovw-ic svg.ic{width:15px;height:15px}
  .ovw-ic:has(svg.dh-logo),.ovw-fichier-ic:has(svg.dh-logo){background:none}   /* le logo d'app porte sa couleur et son relief (2026-11-04) */
  .ovw-ic svg.dh-logo{width:28px;height:28px}
  .ovw-fichier-ic svg.dh-logo{width:26px;height:26px}
  .ovw-title{font-size:var(--fs-sm);font-weight:var(--fw-strong);color:var(--txt);flex:1;min-width:0;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ovw-open{padding:var(--sp-2) var(--sp-4);margin-left:auto;flex:none;color:var(--mut)}
  .ovw-body{padding:var(--sp-10) var(--sp-12);flex:1;display:flex;flex-direction:column;gap:var(--sp-6);font-size:var(--fs-sm)}
  .ovw-foot{padding:var(--sp-8) var(--sp-12);border-top:1px solid var(--line);display:flex;gap:var(--sp-6);flex-wrap:wrap}
  .ovw-foot:empty{display:none}

  /* ── Widgets Réseaux sociaux & Figma : état connexion / vignettes ── */
  /* État vide : CTA de connexion centré */
  .ovw-connect{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
    text-align:center;gap:var(--sp-2);padding:var(--sp-6) var(--sp-4) var(--sp-2)}
  .ovw-connect-ic{width:42px;height:42px;display:grid;place-items:center;border-radius:var(--radius);margin-bottom:var(--sp-4);
    background:color-mix(in srgb,var(--cc,var(--accent)) 14%,transparent);color:var(--cc,var(--accent))}
  .ovw-connect-ic svg{width:22px;height:22px;display:block}
  .ovw-connect-t{font-size:var(--fs-sm);font-weight:var(--fw-strong);color:var(--txt);margin:0}
  .ovw-connect-d{font-size:var(--fs-xs);color:var(--mut);margin:0;line-height:1.45}
  .ovw-connect-btn{margin-top:var(--sp-10)}
  .ovw-connect-btn svg{vertical-align:-.15em}

  /* Entreprise sans devis (proprio, 2026-10-19) : un visuel, une invitation, une phrase, le bouton. Le dessin est fait de
     jetons (papier = carte, lignes = encre atténuée, pastille = accent) : il suit le thème clair et sombre et l'accent choisi. */
  .ovw-vide{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;
    gap:var(--sp-4);padding:var(--sp-4) var(--sp-4) var(--sp-2)}
  .ovw-vide-visuel{width:112px;height:86px;display:block;margin-bottom:var(--sp-6)}
  .ovw-vide-filet{fill:var(--line)}
  .ovw-vide-ombre{fill:color-mix(in srgb,var(--accent) 10%,transparent)}
  .ovw-vide-papier{fill:var(--card);stroke:var(--line);stroke-width:1.5}
  .ovw-vide-ligne{fill:color-mix(in srgb,var(--mut) 28%,transparent)}
  .ovw-vide-ligne.fort{fill:color-mix(in srgb,var(--txt) 55%,transparent)}
  .ovw-vide-total{fill:color-mix(in srgb,var(--accent) 35%,transparent)}
  .ovw-vide-pastille{fill:var(--accent-plein)}
  .ovw-vide-t{font-size:var(--fs-md);font-weight:var(--fw-strong);color:var(--txt);margin:0}
  .ovw-vide-d{font-size:var(--fs-xs);color:var(--mut);margin:0;line-height:var(--lh-normal);max-width:240px}
  .ovw-vide-btn{margin-top:var(--sp-10)}
  .ovw-vide-btn svg{vertical-align:-.15em}
  .ovw-vide-btn.marque{background:var(--cc);border-color:var(--cc);color:var(--on-solid)}
  .ovw-vide-btn.marque:hover{filter:brightness(1.07)}
  .ovw-vide-btn.marque svg{color:var(--on-solid)}
  /* « Connecter Facebook » dans la DA de Meta (le proprio, 2026-11-02, comme « Importer » de Figma) : le bleu Facebook,
     texte blanc en 600, rayon 6 px, le bleu plus sombre de Meta au survol. Couleurs de marque, pas du système. */
  .mini.ovw-fb-btn{height:32px;padding:0 var(--sp-14);border:0;border-radius:6px;background:#1877F2;color:#fff;font-weight:600;gap:var(--sp-8);box-shadow:none}
  .mini.ovw-fb-btn:hover{background:#166FE5;color:#fff}
  .mini.ovw-fb-btn svg{color:#fff;width:16px;height:16px}
  .ovw-vide-plus{stroke:var(--on-solid);stroke-width:2.4;stroke-linecap:round;fill:none}
  /* Le devis au trait fin (proprio, 2026-10-19 : « Trait fin, et plus fin ») : un dessin au trait d'environ un pixel,
     monochrome, l'accent seulement sur le total et la coche ; en jetons, il suit le thème et l'accent. */
  .ovw-tf > :where(:not(g):not(.ovw-fig-pastille)){fill:none;stroke-linecap:round;stroke-linejoin:round}   /* le logo (g) et sa pastille gardent les couleurs écrites dans le dessin */
  .ovw-tf-feuille{fill:var(--card);stroke:color-mix(in srgb,var(--txt) 62%,transparent);stroke-width:1}
  .ovw-tf-bord{stroke:color-mix(in srgb,var(--txt) 62%,transparent);stroke-width:1}
  .ovw-tf-titre{stroke:color-mix(in srgb,var(--txt) 62%,transparent);stroke-width:1.6}
  .ovw-tf-ligne{stroke:color-mix(in srgb,var(--txt) 30%,transparent);stroke-width:1}
  .ovw-tf-filet{stroke:color-mix(in srgb,var(--txt) 18%,transparent);stroke-width:.7}
  .ovw-tf-total{stroke:var(--accent-texte);stroke-width:2}
  .ovw-tf-rond{fill:var(--card);stroke:var(--accent-texte);stroke-width:1.1}
  .ovw-tf-coche{stroke:var(--accent-texte);stroke-width:1.3}
  .ovw-tf-vague{stroke:color-mix(in srgb,var(--accent) 45%,transparent);stroke-width:.9}
  .ovw-tf-etoile{stroke:color-mix(in srgb,var(--accent) 65%,transparent);stroke-width:.8}
  /* La fenêtre de Figma en squelette : des blocs pleins et pâles, une planche blanche au centre ; la pastille du logo,
     noire comme l'icône de Figma, reçoit un filet pour se détacher du fond sombre. */
  .ovw-tf .ovw-sq{fill:color-mix(in srgb,var(--txt) 12%,transparent);stroke:none}
  .ovw-tf .ovw-sq-fort{fill:color-mix(in srgb,var(--accent) 16%,transparent)}
  .ovw-tf .ovw-tf-planche{fill:var(--paper);stroke:color-mix(in srgb,var(--txt) 22%,transparent);stroke-width:.8}
  .ovw-tf .ovw-fig-pastille{stroke:var(--line);stroke-width:1;filter:drop-shadow(0 2px 3px color-mix(in srgb,var(--txt) 25%,transparent))}
  /* Le mini calendrier : le mois en accent, le jour en grand (tailles en attributs du dessin, unités du SVG). */
  .ovw-tf .ovw-tf-mois{fill:var(--accent-texte);stroke:none;font-weight:var(--fw-strong);letter-spacing:.08em;font-family:var(--font-sans)}
  .ovw-tf .ovw-tf-jour{fill:color-mix(in srgb,var(--txt) 75%,transparent);stroke:none;font-weight:var(--fw-regular);font-family:var(--font-sans)}
  /* L'état vide se resserre quand la carte est basse : le dessin rapetisse d'abord, la phrase tient en trois lignes, puis le
     dessin disparaît, et la phrase en dernier ; le titre et le bouton restent toujours. Jusqu'au 2026-11-02 la phrase partait
     la première, dès 250 px : la carte au quart ne disait jamais à quoi elle sert (le proprio, sur « Accédez à vos réseaux »). */
  @container ovwcorps (max-height:250px){ .ovw-vide-visuel{width:76px;height:58px;margin-bottom:var(--sp-2)} .ovw-vide-btn{margin-top:var(--sp-6)}
    .ovw-vide-d{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden} }
  @container ovwcorps (max-height:190px){ .ovw-vide-visuel{display:none} }
  @container ovwcorps (max-height:130px){ .ovw-vide-d{display:none} }

  /* Studio : les cinq derniers fichiers (proprio, 2026-10-19). Une rangée par fichier : l'icône de son type, son nom, le
     type et le jour ; toute la rangée ouvre le fichier. */
  /* Les lignes se partagent la hauteur restante de la carte (proprio, 2026-10-19) : 28 px au moins, 64 au plus (un fichier
     seul ne devient pas un bloc). */
  .ovw-fichiers{flex:1;min-height:0;display:flex;flex-direction:column;gap:var(--sp-1);margin:calc(var(--sp-4) * -1) calc(var(--sp-6) * -1)}
  .ovw-fichiers > .ovw-fichier{flex:1 1 0;min-height:28px;max-height:64px}
  .ovw-fichier{display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:var(--sp-8);align-items:center;
    width:100%;padding:var(--sp-2) var(--sp-6);border:0;border-radius:var(--radius-sm);background:none;color:var(--txt);
    font:inherit;text-align:left;cursor:pointer}
  .ovw-fichier:hover{background:var(--line2);transition:none}   /* le fond du panneau de gauche (--card2 se confondait avec la carte), sans délai */
  .ovw-fichier:hover .ovw-fichier-nom{text-decoration:underline;text-underline-offset:2px}   /* et le nom souligné (le proprio, 2026-11-02) */
  .ovw-fichier .ovw-fichier-nom{padding-bottom:2px}   /* overflow:hidden rognerait le trait (même défaut que les tuiles du Studio) */
  .ovw-fichier-ic{display:grid;place-items:center;width:24px;height:24px;border-radius:var(--radius-xs);
    background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent-texte)}
  .ovw-fichier-ic svg.ic{width:14px;height:14px}
  .ovw-fichier-nom{font-size:var(--fs-sm);font-weight:var(--fw-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ovw-fichier-meta{font-size:var(--fs-xs);color:var(--mut);white-space:nowrap}
  /* « Créer un fichier » dans l'en-tête de la carte Studio : un bouton d'accent léger, à droite du titre. */
  .ovw-tete-btn{display:inline-flex;align-items:center;gap:var(--sp-4);flex:none;height:26px;padding:0 var(--sp-8);border:0;
    border-radius:var(--radius-sm);background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent-texte);
    font:inherit;font-size:var(--fs-xs);font-weight:var(--fw-strong);white-space:nowrap;cursor:pointer}
  .ovw-tete-btn:hover{background:color-mix(in srgb,var(--accent) 20%,transparent)}
  .ovw-tete-btn svg.ic{width:13px;height:13px}
  /* Carte étroite (2026-10-20, Entreprise à 210 px : « bu… ») : le bouton d'en-tête garde son « + », le titre reste lisible. */
  .ovw-card:has(.ovw-tete-btn) .ovw-head{container-type:inline-size;container-name:ovwtete}
  @container ovwtete (max-width:250px){ .ovw-tete-btn span{display:none} .ovw-tete-btn{padding:0 var(--sp-6)} }
  .ovw-foot .mini svg{vertical-align:-.15em}
  /* Entreprise (proprio, 2026-10-20 : « les KPI, meilleur design ») : trois tuiles posées sur le fond doux, le chiffre en
     tête et à gauche, l'étiquette dessous ; « En attente » prend l'avertissement seulement quand il compte. */
  .ovw-chiffres{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-6);flex:none}
  .ovw-chiffre{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0;padding:var(--sp-6) var(--sp-8);
    border-radius:var(--radius-sm);background:var(--card2)}
  .ovw-chiffre strong{font-size:var(--fs-lg);font-weight:var(--fw-bold);line-height:var(--lh-flat);color:var(--txt);font-variant-numeric:tabular-nums}
  .ovw-chiffre span{font-size:var(--fs-2xs);color:var(--mut);font-weight:var(--fw-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ovw-chiffre.warn{background:color-mix(in srgb,var(--warn) 10%,var(--card2))}
  .ovw-chiffre.warn strong{color:var(--warn)}
  /* Les trois derniers documents : la rangée du Studio, le titre et dessous le numéro et le montant, le statut à droite. */
  .ovw-docs{margin-top:var(--sp-2)}
  .ovw-docs > .ovw-fichier{max-height:52px}
  .ovw-fichier-ic.facture{background:color-mix(in srgb,var(--ok) 12%,transparent);color:var(--ok)}
  .ovw-doc-txt{display:flex;flex-direction:column;min-width:0}
  .ovw-doc-sous{font-size:var(--fs-2xs);color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
  .ovw-statut{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-2xs);font-weight:var(--fw-medium);color:var(--mut);white-space:nowrap}
  .ovw-statut::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}
  .ovw-statut.st-sent{color:var(--accent-texte)}.ovw-statut.st-read{color:var(--warn)}
  .ovw-statut.st-signed{color:var(--ok)}.ovw-statut.st-invoiced{color:var(--ok)}
  .ovw-statut.st-err{color:var(--err)}
  /* Le montant d'un devis, à droite de son nom (2026-11-01) ; le statut se range dessous quand il y en a un. */
  .ovw-doc-droite{display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex:none;margin-left:auto}
  .ovw-doc-montant{font-size:var(--fs-xs);font-weight:var(--fw-strong);color:var(--txt);white-space:nowrap;font-variant-numeric:tabular-nums}
  .ec-st.ec-st-maj{color:var(--mut);font-weight:var(--fw-regular)}
  .ec-st.ec-st-maj svg.ic{width:13px;height:13px}
  /* Réseaux sociaux : la vignette de la publication dans la case de l'icône ; sans image (ou image morte), l'icône. */
  .ovw-sm-vignette{position:relative;overflow:hidden}
  .ovw-sm-vignette img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
  /* Gestionnaire d'API : la méthode tient la place de l'icône, sur une largeur fixe pour aligner les noms. */
  .ovw-api-methode{min-width:58px;box-sizing:border-box;text-align:center}
  @container ovwcorps (max-height:170px){ .ovw-doc-sous{display:none} .ovw-chiffre{padding:var(--sp-4) var(--sp-6)} }
  @container ovwcorps (max-width:220px){ .ovw-chiffres{gap:var(--sp-4)} .ovw-chiffre{padding:var(--sp-4) var(--sp-6)} }
  /* Vignettes Figma */
  .ovw-fig-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-6)}
  .ovw-fig-thumb{display:flex;flex-direction:column;gap:0;padding:0;border:1px solid var(--line);
    border-radius:var(--radius);overflow:hidden;background:var(--card);cursor:pointer;text-align:left;transition:border-color .12s}
  /* Survol dans la DA de Figma (le proprio, 2026-11-02) : le liseré bleu de la sélection Figma, et le nom souligné. */
  .ovw-fig-thumb:hover{border-color:var(--fg-bleu);box-shadow:0 0 0 1px var(--fg-bleu)}
  .ovw-fig-thumb:hover .ovw-fig-name{text-decoration:underline;text-underline-offset:2px}
  .ovw-fig-vi.sq img{opacity:0}
  .ovw-sq-fig{display:flex;flex-direction:column;gap:var(--sp-6);padding-bottom:var(--sp-6);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
  .ovw-sq-fig .sq-l{margin-left:var(--sp-6)}
  /* « Importer » comme les boutons principaux de l'app Figma (32-figma.css .fig .mini.primary). */
  .ovw-foot .mini.ovw-fig-importer,.mini.ovw-fig-importer{height:24px;padding:0 var(--sp-10);border:1px solid var(--fg-bleu);border-radius:var(--radius-xs);
    background:var(--fg-bleu);color:var(--fg-barre-txt);font-size:var(--fs-xs);font-weight:var(--fw-medium);gap:var(--sp-4);box-shadow:none}
  .mini.ovw-fig-importer:hover{background:var(--fg-bleu);border-color:var(--fg-bleu);color:var(--fg-barre-txt);filter:brightness(1.08)}
  .mini.ovw-fig-importer svg.ic{width:13px;height:13px}
  .ovw-fig-thumb img{width:100%;height:56px;object-fit:cover;display:block;background:var(--bg2)}
  .ovw-fig-ph{height:56px;display:grid;place-items:center;color:var(--mut2);background:var(--bg2);font-size:var(--fs-lg)}
  .ovw-fig-name{font-size:var(--fs-2xs);color:var(--txt);padding:var(--sp-4) var(--sp-6) var(--sp-4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* Modal détail publication */
  .ovp-media{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:var(--sp-6);margin-bottom:var(--sp-10)}
  .ovp-media img{width:100%;border-radius:var(--radius);display:block}
  .ovp-text{font-size:var(--fs-md);line-height:1.6;color:var(--txt);white-space:pre-wrap;margin:0}
  .ovp-tags{display:flex;flex-wrap:wrap;gap:var(--sp-4);margin-top:var(--sp-8)}
  .ovp-tags span{font-size:var(--fs-xs);color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);padding:var(--sp-2) var(--sp-8);border-radius:var(--radius-pill)}
  .ovp-foot{margin-top:var(--sp-10);font-size:var(--fs-xs);color:var(--mut);font-variant-numeric:tabular-nums}
  /* Skeleton loader */
  .ovw-loading .ovw-body{justify-content:flex-start}   /* le squelette part du haut comme le contenu qui le remplace ; centré, il descendait d'une dizaine de pixels (le proprio, 2026-11-02) */
  /* Les cartes de compléments se glissent, dans l'ordre du panneau de gauche (2026-10-23). */
  [data-ov-cmp] > .ovw-card[draggable="true"]{cursor:grab}
  [data-ov-cmp].ovw-tri > .ovw-card{transition:transform .12s}
  .ovw-card.ovw-glisse{opacity:.45;outline:2px dashed var(--accent);outline-offset:-2px}
  .ovw-skel{height:10px;border-radius:var(--radius-sm);background:var(--line2);
    animation:ovw-pulse 1.4s ease-in-out infinite;width:80%}
  .ovw-skel-s{width:55%;margin-top:var(--sp-4)}
  @keyframes ovw-pulse{0%,100%{opacity:.35}50%{opacity:.8}}
  /* Widget content */
  .ovw-evlist{display:flex;flex-direction:column;gap:var(--sp-4)}
  .ovw-ev{display:flex;align-items:baseline;gap:var(--sp-4);font-size:var(--fs-sm)}
  .ovw-ev-d{font-size:var(--fs-2xs);font-weight:var(--fw-bold);color:var(--mut);flex:none;font-family:var(--font-mono)}
  .ovw-ev-ic{font-size:var(--fs-2xs);color:var(--mut2);flex:none}
  .ovw-ev-t{color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}
  .ovw-badge{font-size:var(--fs-2xs);font-weight:var(--fw-strong);padding:var(--sp-1) var(--sp-8);border-radius:var(--radius-modal);flex:none}
  .ovw-badge.ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 12%,transparent)}
  .ovw-badge.warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 12%,transparent)}
  .ovw-desc{font-size:var(--fs-sm);color:var(--mut);margin:0;line-height:var(--lh-normal)}
  .ovw-empty{font-size:var(--fs-sm);color:var(--mut2);font-style:italic;margin:0}
  .ovw-method{font-size:var(--fs-2xs);font-weight:var(--fw-bold);padding:var(--sp-1) var(--sp-6);border-radius:var(--radius-xs);font-family:var(--font-mono)}
  .ovw-method-get{background:color-mix(in srgb,var(--ok) 15%,transparent);color:var(--ok)}
  .ovw-method-post{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}
  .ovw-method-put,.ovw-method-patch{background:color-mix(in srgb,var(--warn) 15%,transparent);color:var(--warn)}
  .ovw-method-delete{background:color-mix(in srgb,var(--err) 15%,transparent);color:var(--err)}

  /* ── Vue d'ensemble : split view ── */
  /* `1fr` vaut minmax(auto,1fr) : une URL longue dans la barre d'aperçu
     imposait sa largeur minimale et poussait toute la colonne hors du canal.
     minmax(0,1fr) autorise la colonne à se réduire, l'ellipse fait le reste. */
  .ov-split{display:grid;grid-template-columns:minmax(0,500px) minmax(0,1fr);gap:var(--sp-20);min-height:0;align-items:start} .ov-split.sans-apercu{grid-template-columns:minmax(0,1fr)}   /* toute la largeur depuis le 2026-10-16 (proprio) */   /* 2026-10-15 : sans l'aperçu téléphone */
  @media(max-width:960px){.ov-split{grid-template-columns:1fr}}
  .ov-left{display:flex;flex-direction:column;gap:var(--sp-14);min-width:0}
  .ov-right{position:sticky;top:16px;min-width:0}
  .ov-sec{font-size:var(--fs-xs);font-weight:var(--fw-bold);color:var(--mut);text-transform:uppercase;letter-spacing:.05em;margin:0 0 var(--sp-8)}
  /* KPI cards */
  .ovk-row{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--sp-8)}
  .ovk-card{background:var(--card2);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-12) var(--sp-14);
    display:flex;flex-direction:column;gap:var(--sp-2);text-align:left;cursor:default;transition:border-color .12s}
  button.ovk-card{cursor:pointer} button.ovk-card:hover{border-color:var(--accent)}
  .ovk-val{font-size:var(--fs-lg);font-weight:var(--fw-bold);line-height:var(--lh-tight);color:var(--txt)}
  .ovk-val.accent{color:var(--accent)} .ovk-val.warn{color:var(--warn)} .ovk-val.muted{color:var(--mut)}
  .ovk-label{font-size:var(--fs-xs);color:var(--mut);font-weight:var(--fw-medium)}
  .ovk-sub{font-size:var(--fs-xs);color:var(--mut2);margin-top:var(--sp-1)}
  .ovk-score{font-size:var(--fs-lg);font-weight:var(--fw-bold);font-variant-numeric:tabular-nums}
  .ovk-score.ovk-ok{color:var(--ok)} .ovk-score.ovk-warn{color:var(--warn)} .ovk-score.ovk-err{color:var(--err)}
  /* Statut env explicite */
  .ovk-card-wide{grid-column:1/-1}
  .ovk-envst-list{display:flex;flex-direction:column;gap:var(--sp-4)}
  .ovk-envst-row{display:flex;align-items:center;gap:var(--sp-6)}
  .ovk-dot{width:7px;height:7px;border-radius:50%;flex:none}
  .ovk-dot-ok{background:var(--ok)} .ovk-dot-warn{background:var(--warn)} .ovk-dot-muted{background:var(--mut2)}
  .ovk-envst-name{font-weight:var(--fw-bold);font-size:var(--fs-md);flex:none}
  .ovk-envst-lbl{font-size:var(--fs-sm);font-weight:var(--fw-medium)}
  .ovk-envst-lbl.ok{color:var(--ok)} .ovk-envst-lbl.warn{color:var(--warn)} .ovk-envst-lbl.muted{color:var(--mut2)}
  /* Carte env+comp fusionnée */
  .ovk-merged-val{display:flex;align-items:baseline;gap:var(--sp-4);font-size:var(--fs-lg);font-weight:var(--fw-bold);line-height:var(--lh-tight);color:var(--txt)}
  .ovk-merged-sep{font-size:var(--fs-base);font-weight:var(--fw-regular);color:var(--mut2)}
  /* Compléments chips */
  .ov-plug-chips{display:flex;flex-wrap:wrap;gap:var(--sp-6)}
  .ov-plug-chip{display:inline-flex;align-items:center;gap:var(--sp-6);padding:var(--sp-4) var(--sp-12);border-radius:var(--radius-pill);
    font-size:var(--fs-sm);font-weight:var(--fw-strong);border:1px solid var(--line);background:var(--card2);cursor:pointer;
    color:var(--txt);transition:border-color .12s,background .12s}
  .ov-plug-chip:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--card2))}
  .ov-plug-chip svg.ic{width:14px;height:14px}
  /* Render iframe droite */
  .ovr-panel{background:var(--card2);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column}
  .ovr-topbar{background:var(--bg2);border-bottom:1px solid var(--line);padding:var(--sp-8) var(--sp-10);display:flex;flex-direction:column;gap:var(--sp-6)}
  .ovr-chromebar{display:flex;align-items:center;gap:var(--sp-6)}
  .ovr-addr{flex:1;font-size:var(--fs-2xs);font-family:var(--font-mono);color:var(--mut2);background:var(--bg);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
  .ovr-env-toggle{display:flex;gap:var(--sp-4);flex-wrap:wrap}
  .ovr-env-btn{font-size:var(--fs-xs);padding:var(--sp-2) var(--sp-10);border-radius:var(--radius-pill);border:1px solid var(--line);background:none;cursor:pointer;color:var(--mut);transition:all .12s}
  .ovr-env-btn.on{background:var(--accent);border-color:var(--accent);color:var(--on-solid);font-weight:var(--fw-strong)}
  .ovr-env-btn:hover:not(.on){border-color:var(--accent);color:var(--accent)}
  /* ── Aperçu mobile : un téléphone, coupé par le bas du poste ──────────
     Le poste laisse dépasser l'appareil : on le voit posé sur la page plutôt
     qu'enfermé dans une vignette. `overflow:hidden` fait la coupe, la hauteur
     du poste décide donc de ce qu'on montre. */
  .ovr-stage{position:relative;background:transparent;overflow:hidden;
    height:clamp(320px,58vh,560px);display:flex;justify-content:center;
    padding-inline:6px;container-type:inline-size}
  .ovr-phone{
    /* Points logiques d'un iPhone moderne : le rendu voit vraiment 393 px de
       large, comme un appareil réel, et l'échelle n'est qu'un zoom optique. */
    --sw:393px; --sh:852px; --bezel:10px;
    /* Jamais plus large que son poste. En unités de CONTENEUR, pas en `%` :
       `--pw` sert à calculer l'échelle (`--s`), et un pourcentage dans une
       division n'est pas résoluble - le facteur devenait invalide et le rendu
       tombait à 30 px de large. `cqw` est une longueur, elle se divise. */
    --pw:240px;
    --s:calc((var(--pw) - var(--bezel)*2)/var(--sw));
    position:relative;flex:none;width:var(--pw);
    height:calc(var(--sh)*var(--s) + var(--bezel)*2);
    /* Décalé : l'appareil n'est pas au garde-à-vous au centre. */
    margin-top:var(--sp-14);transform:translateX(4px) rotate(1.2deg);
    border-radius:calc(54px*var(--s) + var(--bezel));
    padding:var(--bezel);
    /* Châssis titane : deux dégradés croisés, une arête claire en haut à
       gauche, une ombre longue et basse comme un objet posé. */
    background:
      linear-gradient(147deg,#f0f1f3 0%,#a9adb4 14%,#5c6067 38%,#3d4046 52%,#6f747c 74%,#c9cdd3 92%,#8b9097 100%);
    box-shadow:
      0 2px 1px rgba(255,255,255,.42) inset,
      0 -2px 2px rgba(0,0,0,.30) inset,
      0 34px 60px -22px rgba(0,0,0,.62),
      0 8px 18px -8px rgba(0,0,0,.45)}
  /* Largeur réelle : bornée par le poste. Déclarée APRÈS le repli `--pw:240px`
     (même spécificité : c'est l'ordre qui tranche). */
  @supports (width:1cqw){ .ovr-phone{--pw:min(268px,100cqw)} }
  html[data-theme=light] .ovr-phone{box-shadow:
      0 2px 1px rgba(255,255,255,.5) inset,0 -2px 2px rgba(0,0,0,.22) inset,
      0 28px 48px -22px rgba(31,35,40,.38),0 6px 14px -8px rgba(31,35,40,.28)}
  /* Boutons latéraux : ils tiennent le volume de l'objet, sinon le cadre
     ressemble à un simple rectangle arrondi. */
  .ovr-phone>span[class^=ovr-btn]{position:absolute;background:
      linear-gradient(180deg,#9aa0a7,#5d6169 40%,#43464c);border-radius:var(--radius-xs)}
  .ovr-btn-silence{left:-2px;top:calc(96px*var(--s));width:3px;height:calc(30px*var(--s));}
  .ovr-btn-vol-up{left:-2px;top:calc(150px*var(--s));width:3px;height:calc(62px*var(--s));}
  .ovr-btn-vol-dn{left:-2px;top:calc(224px*var(--s));width:3px;height:calc(62px*var(--s));}
  .ovr-btn-power{right:-2px;top:calc(186px*var(--s));width:3px;height:calc(96px*var(--s));}
  /* L'écran : noir sous le rendu, pour que le blanc d'une page ne fuie pas
     dans le rayon des coins pendant le chargement. */
  .ovr-screen{position:relative;width:100%;height:100%;overflow:hidden;background:#000;
    border-radius:calc(54px*var(--s));
    box-shadow:0 0 0 1px rgba(0,0,0,.65),0 0 0 2px rgba(255,255,255,.06) inset}
  .ovr-island{position:absolute;z-index:3;top:calc(11px*var(--s));left:50%;transform:translateX(-50%);
    width:calc(124px*var(--s));height:calc(35px*var(--s));border-radius:var(--radius-pill);background:#000;
    box-shadow:0 0 0 .5px rgba(255,255,255,.10)}
  .ovr-home{position:absolute;z-index:3;bottom:calc(8px*var(--s));left:50%;transform:translateX(-50%);
    width:calc(140px*var(--s));height:calc(5px*var(--s));border-radius:var(--radius-pill);
    background:rgba(255,255,255,.55);mix-blend-mode:difference}
  .ovr-skel{position:absolute;inset:0;overflow:hidden;background:var(--bg2);
    display:flex;align-items:center;justify-content:center;pointer-events:none;
    transition:opacity .35s ease;opacity:1}
  .ovr-skel::after{content:'Chargement de l\2019 aper\E7 u\2026';color:var(--mut2);font-size:var(--fs-sm);font-weight:var(--fw-medium)}
  .ovr-skel-shine{position:absolute;inset:0;
    background:linear-gradient(105deg,transparent 30%,color-mix(in srgb,var(--line2) 60%,transparent) 50%,transparent 70%);
    transform:translateX(-100%);animation:ovr-shine 1.6s ease-in-out infinite}
  @keyframes ovr-shine{to{transform:translateX(100%)}}
  .ovr-iframe.loaded+.ovr-skel,.ovr-iframe.loaded~.ovr-skel{opacity:0}
  .ovr-iframe{position:absolute;z-index:1;top:0;left:0;border:none;display:block;background:transparent;
    width:var(--sw);height:var(--sh);transform-origin:top left;transform:scale(var(--s))}
  .ovr-iframe.loaded{background:var(--bg2)}
  .ovr-nourl{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:220px;gap:var(--sp-10);color:var(--mut);font-size:var(--fs-base)}
  .ovr-nourl-ic svg.ic{width:40px;height:40px;opacity:.3}
  /* Env row compact */
  .ov-env-row{display:flex;align-items:center;gap:var(--sp-8);background:var(--card2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-6) var(--sp-10);min-width:0;overflow:hidden}
  .ov-env-name{font-weight:var(--fw-strong);font-size:var(--fs-md);white-space:nowrap;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .ov-env-st{font-size:var(--fs-xs);font-weight:var(--fw-strong);white-space:nowrap;flex:none}
  .ov-env-st.ok{color:var(--ok)}.ov-env-st.warn{color:var(--warn)}.ov-env-st.muted{color:var(--mut2)}

  /* ── Onglet Utilisateurs (maquette collaboration) ── */
  .users{max-width:780px}
  .badge.soon{color:var(--accent);border-color:var(--accent);text-transform:uppercase;font-weight:var(--fw-bold);letter-spacing:.04em;flex:none}
  .usr-banner{display:flex;gap:var(--sp-10);align-items:flex-start;background:color-mix(in srgb,var(--accent) 7%,var(--card2));
    border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-10) var(--sp-12);font-size:var(--fs-md);color:var(--mut);line-height:var(--lh-normal);margin-bottom:var(--sp-16)}
  .usr-banner b{color:var(--txt);font-weight:var(--fw-strong)}
  .usr-head{display:flex;align-items:center;gap:var(--sp-8);margin-bottom:var(--sp-10)} .usr-head b{font-size:var(--fs-base)}
  .usr-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
  .usr-row{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-10) var(--sp-12)}
  .usr-row+.usr-row{border-top:1px solid var(--line2)}
  .usr-row.preview{opacity:.6}
  .usr-av{width:30px;height:30px;border-radius:50%;flex:none;display:grid;place-items:center;color:var(--on-solid);font-weight:var(--fw-bold);font-size:var(--fs-md)}
  .usr-id{display:flex;flex-direction:column;min-width:0;flex:1}
  .usr-name{font-weight:var(--fw-strong);font-size:var(--fs-md)}
  .usr-mail{font-size:var(--fs-xs);color:var(--mut);font-family:var(--font-mono)}
  .usr-role{font-size:var(--fs-xs);color:var(--mut);border:1px solid var(--line);border-radius:var(--radius-pill);padding:var(--sp-2) var(--sp-8);white-space:nowrap}
  .usr-envs{display:flex;gap:var(--sp-4);flex-wrap:wrap} .usr-envs .etag{font-size:var(--fs-2xs);padding:var(--sp-2) var(--sp-6)}
  .usr-soon{font-size:var(--fs-2xs);color:var(--accent);border:1px dashed var(--accent);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-6);white-space:nowrap}
  .usr-roles{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-8)}
  @media(max-width:620px){ .usr-roles{grid-template-columns:1fr} }
  .usr-role-card{background:var(--card2);border:1px solid var(--line2);border-radius:var(--radius-sm);padding:var(--sp-8) var(--sp-10)}
  .usr-role-n{display:block;font-weight:var(--fw-strong);font-size:var(--fs-sm);margin-bottom:var(--sp-2)}
  .usr-role-d{display:block;font-size:var(--fs-xs);color:var(--mut);line-height:1.45}

  /* Onglet Agents (profils d'agents) */
  .agt-row{align-items:center}
  .agt-mission{font-size:var(--fs-xs);color:var(--mut);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .agt-eng{display:inline-flex;align-items:center;gap:var(--sp-4)}
  .agt-eng-dot{width:7px;height:7px;border-radius:50%;flex:none}
  .agt-last{font-size:var(--fs-2xs);white-space:nowrap;font-variant-numeric:tabular-nums}
  .badge.b-ok{color:var(--ok);border-color:var(--ok)}
  .badge.b-na{color:var(--warn);border-color:var(--warn)}
  .badge.b-off{color:var(--mut);border-color:var(--line)}
  .agt-acts{display:flex;align-items:center;gap:var(--sp-4);flex:none}
  .agt-icon{display:grid;place-items:center;width:28px;height:28px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--card2);color:var(--mut);cursor:pointer}
  .agt-icon:hover{color:var(--txt);border-color:var(--mut)}
  .agt-icon.danger:hover{color:var(--err);border-color:var(--err)}
  .agt-icon svg{width:15px;height:15px}
  .agt-toggle{width:36px;height:20px;border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--card2);position:relative;cursor:pointer;flex:none;padding:0}
  .agt-toggle::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--mut);transition:all .15s}
  .agt-toggle.on{background:color-mix(in srgb,var(--accent) 30%,transparent);border-color:var(--accent)}
  .agt-toggle.on::after{left:18px;background:var(--accent)}
  /* Case « appliquer automatiquement » (modale d'agent) */
  .agt-auto{display:flex;gap:var(--sp-10);align-items:flex-start;margin-top:var(--sp-4);padding:var(--sp-10) var(--sp-12);border:1px solid var(--line);
    border-radius:var(--radius);background:var(--card2);cursor:pointer}
  .agt-auto input{margin-top:var(--sp-2);flex:none;width:16px;height:16px;accent-color:var(--accent);cursor:pointer}
  .agt-auto>span{display:flex;flex-direction:column;gap:var(--sp-2)}
  .agt-auto b{font-size:var(--fs-md)} .agt-auto .desc{font-size:var(--fs-xs);color:var(--mut);line-height:1.45;margin:0}
  /* Sélecteur d'autonomie (segmenté) */
  .agt-seg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-8)}
  .agt-seg-opt{display:flex;gap:var(--sp-8);align-items:flex-start;min-width:0;padding:var(--sp-10) var(--sp-10);border:1px solid var(--line);border-radius:var(--radius);
    background:var(--card2);cursor:pointer;transition:border-color .14s,background .14s}
  .agt-seg-opt:hover{border-color:var(--mut)}
  .agt-seg-opt.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--card2))}
  .agt-seg-opt input{margin-top:var(--sp-2);flex:none;width:auto;min-width:0;accent-color:var(--accent)}
  .agt-seg-opt>span{display:flex;flex-direction:column;gap:var(--sp-2);min-width:0}
  .agt-seg-opt b{font-size:var(--fs-sm)}
  .agt-seg-opt small{font-size:var(--fs-xs);color:var(--mut);line-height:1.4}
  .agt-seg-opt.dis{opacity:.55;cursor:not-allowed}
  .agt-seg-opt.dis:hover{border-color:var(--line)}
  @media (max-width:560px){ .agt-seg{grid-template-columns:1fr} }
  /* Puces de la ligne d'agent (autonome / web) */
  .agt-auto-chip{font-size:var(--fs-2xs);font-weight:var(--fw-strong);text-transform:uppercase;letter-spacing:.5px;padding:var(--sp-2) var(--sp-6);border-radius:var(--radius-pill);
    color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);
    background:color-mix(in srgb,var(--accent) 10%,transparent);white-space:nowrap;flex:none}
  .agt-auto-chip.web{color:#0ea5e9;border-color:color-mix(in srgb,#0ea5e9 40%,transparent);background:color-mix(in srgb,#0ea5e9 10%,transparent)}
  /* Configuration avancée (sources + outils) */
  .agt-adv{margin-top:var(--sp-6);border:1px solid var(--line);border-radius:var(--radius);background:var(--card2);overflow:hidden}
  .agt-adv>summary{cursor:pointer;padding:var(--sp-10) var(--sp-12);font-size:var(--fs-sm);font-weight:var(--fw-strong);color:var(--txt);list-style:none;user-select:none}
  .agt-adv>summary::-webkit-details-marker{display:none}
  .agt-adv>summary::before{content:"▸";display:inline-block;margin-right:var(--sp-6);color:var(--mut);transition:transform .15s}
  .agt-adv[open]>summary::before{transform:rotate(90deg)}
  .agt-adv-body{padding:var(--sp-4) var(--sp-12) var(--sp-12);display:flex;flex-direction:column;gap:var(--sp-12);border-top:1px solid var(--line2)}
  .agt-adv-body .agt-auto{background:var(--bg2)}
  .agt-src-row{margin-bottom:var(--sp-8);padding-bottom:var(--sp-8);border-bottom:1px dashed var(--line2)}
  .agt-src-row:last-of-type{border-bottom:0}
  .agt-src-main{display:flex;gap:var(--sp-6);align-items:center}
  .agt-src-main .agt-src-kind{flex:none;width:130px}
  .agt-src-main .agt-src-label{flex:0 1 110px;min-width:0}
  .agt-src-main .agt-src-value{flex:1 1 auto;min-width:0}
  .agt-src-row input,.agt-src-row select{padding:var(--sp-6) var(--sp-8);border:1px solid var(--line);border-radius:var(--radius);background:var(--bg2);color:var(--txt);font:12.5px inherit;outline:none}
  .agt-src-row input:focus,.agt-src-row select:focus{border-color:var(--accent)}
  .agt-src-test{flex:none}
  .agt-src-sub{display:flex;align-items:center;gap:var(--sp-10);margin-top:var(--sp-4);padding-left:var(--sp-2);min-height:16px}
  .agt-src-fetch{display:inline-flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-xs);color:var(--mut);cursor:pointer;flex:none}
  .agt-src-fetch input{width:auto;accent-color:var(--accent)}
  .agt-src-res{font-size:var(--fs-xs);color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .agt-src-res.ok{color:var(--ok)} .agt-src-res.err{color:var(--err)}
  /* Galerie de recettes d'agents */
  .agt-tpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:var(--sp-10)}
  .agt-tpl{display:flex;align-items:flex-start;gap:var(--sp-10);text-align:left;padding:var(--sp-12);border:1px solid var(--line);
    border-radius:var(--radius);background:var(--card2);color:var(--txt);cursor:pointer;transition:border-color .14s,transform .14s,box-shadow .14s;position:relative}
  .agt-tpl:hover{border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--elev-2)}
  .agt-tpl-ic{display:grid;place-items:center;width:36px;height:36px;border-radius:var(--radius);color:var(--on-solid);flex:none}
  .agt-tpl-ic svg{width:18px;height:18px}
  .agt-tpl-meta{display:flex;flex-direction:column;gap:var(--sp-2);min-width:0;flex:1}
  .agt-tpl-name{font-size:var(--fs-md);font-weight:var(--fw-strong);line-height:var(--lh-tight)}
  .agt-tpl-desc{font-size:var(--fs-xs);color:var(--mut);line-height:1.4}
  .agt-tpl-tags{display:flex;flex-wrap:wrap;gap:var(--sp-4);margin-top:var(--sp-2)}
  .agt-tpl-model,.agt-tpl-auto{font-size:var(--fs-2xs);padding:var(--sp-2) var(--sp-6);border-radius:var(--radius-pill);border:1px solid var(--line);color:var(--mut2);white-space:nowrap}
  .agt-tpl-auto{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
  .agt-tpl-go{font-size:var(--fs-xs);color:var(--accent);align-self:center;white-space:nowrap;opacity:0;transition:opacity .14s}
  .agt-tpl:hover .agt-tpl-go{opacity:1}
  /* Tiroir d'exécution d'un agent */
  .agt-back{position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:60;opacity:0;transition:opacity .18s}
  .agt-back.on{opacity:1}
  .agt-drawer{position:fixed;top:0;right:0;height:100%;width:min(660px,96vw);background:var(--bg);
    border-left:1px solid var(--line);z-index:61;display:flex;flex-direction:column;transform:translateX(102%);
    transition:transform .22s cubic-bezier(.4,0,.2,1);box-shadow:var(--elev-2)}
  .agt-drawer.on{transform:none}
  /* Header */
  .agt-drawer-head{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-12) var(--sp-14);border-bottom:1px solid var(--line2);flex-shrink:0}
  .agt-dh-badge{width:36px;height:36px;border-radius:var(--radius);display:grid;place-items:center;font-size:var(--fs-lg);flex-shrink:0}
  .agt-dh-info{flex:1;min-width:0}
  .agt-dh-info .name{font-size:var(--fs-base);font-weight:var(--fw-strong);line-height:var(--lh-tight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .agt-dh-info .sub{font-size:var(--fs-xs);color:var(--mut);display:flex;align-items:center;gap:var(--sp-4);margin-top:var(--sp-2)}
  .agt-dh-dot{width:6px;height:6px;border-radius:50%;background:var(--mut2);flex-shrink:0;transition:background .2s}
  .agt-dh-dot.run{background:var(--ok);animation:agt-pulse 1.3s infinite}
  @keyframes agt-pulse{0%,100%{opacity:1}50%{opacity:.22}}
  .agt-head-actions{display:flex;align-items:center;gap:var(--sp-4);flex-shrink:0}
  .agt-hbtn{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--radius);border:1px solid var(--line);
    background:var(--card2);color:var(--mut);cursor:pointer;transition:color .12s,border-color .12s}
  .agt-hbtn:hover{color:var(--txt);border-color:var(--mut)}
  .agt-hbtn.danger:hover{color:var(--err);border-color:var(--err)}
  .agt-hbtn:disabled{opacity:.35;pointer-events:none}
  .agt-hbtn svg{width:14px;height:14px}
  /* Mission (collapsible) */
  .agt-mission-wrap{overflow:hidden;max-height:0;transition:max-height .22s ease;border-bottom:0px solid var(--line2)}
  .agt-mission-wrap.open{max-height:220px;border-bottom-width:1px}
  .agt-run-mission{font-size:var(--fs-sm);color:var(--mut);padding:var(--sp-10) var(--sp-14) var(--sp-12);background:var(--card2);line-height:1.55;max-height:200px;overflow:auto}
  .agt-run-mission-meta{font-size:var(--fs-xs);color:var(--mut2);margin-bottom:var(--sp-6);padding-bottom:var(--sp-6);border-bottom:1px solid var(--line2)}
  /* Log */
  .agt-run-log{flex:1;overflow-y:auto;padding:var(--sp-14) var(--sp-16);display:flex;flex-direction:column;gap:var(--sp-10);background:var(--bg2)}
  /* Commandes (mode Exécution - Lot 4) */
  .agt-run-cmds{border-top:1px solid var(--line);padding:var(--sp-10) var(--sp-14);max-height:46%;overflow:auto;background:var(--card2)}
  .agt-cmd-l{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--txt);word-break:break-all;flex:1}
  .agt-cmd-out{margin:var(--sp-8) 0 0;padding:var(--sp-8) var(--sp-10);background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
    font:11.5px/1.5 ui-monospace,Menlo,monospace;color:var(--mut);max-height:160px;overflow:auto;white-space:pre-wrap}
  .agt-cmd-bar{display:flex;gap:var(--sp-8);margin-top:var(--sp-8)}
  .agt-run-props{border-top:1px solid var(--line);padding:var(--sp-10) var(--sp-14) var(--sp-12);max-height:44%;overflow:auto;background:var(--card2)}
  .agt-run-props-h{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.7px;color:var(--mut2);margin-bottom:var(--sp-8)}
  /* Zone saisie - même structure que le Pilote */
  .agt-run-inwrap{padding:var(--sp-10) var(--sp-12) var(--sp-12);border-top:1px solid var(--line);flex-shrink:0;background:var(--bg)}
  .agt-chat-wrap{border:1px solid var(--line);border-radius:var(--radius);background:var(--bg2);overflow:hidden;transition:border-color .12s,box-shadow .12s}
  .agt-chat-wrap:focus-within{border-color:var(--accent);box-shadow:var(--focus)}
  /* Chips PJ - dans le wrap */
  .agt-attach-strip{display:flex;flex-wrap:wrap;gap:var(--sp-6);padding:var(--sp-8) var(--sp-8) var(--sp-2)}
  .agt-attach-strip:empty{display:none;padding:0}
  .agt-attach-chip{display:inline-flex;align-items:center;gap:var(--sp-4);padding:var(--sp-4) var(--sp-8) var(--sp-4) var(--sp-6);border-radius:var(--radius);
    background:var(--card);border:1px solid var(--line);font-size:var(--fs-sm);color:var(--txt);max-width:210px}
  .agt-attach-chip .ch-ico{font-size:var(--fs-md);line-height:var(--lh-flat);flex-shrink:0}
  .agt-attach-chip .ch-nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .agt-attach-chip .ch-rm{cursor:pointer;background:transparent;border:0;color:var(--mut);flex-shrink:0;font-size:var(--fs-base);line-height:var(--lh-flat);padding:0 var(--sp-2)}
  .agt-attach-chip .ch-rm:hover{color:var(--txt)}
  #agt-run-input{display:block;width:100%;border:0;background:transparent;resize:none;color:var(--txt);
    font:14px/1.55 inherit;padding:var(--sp-10) var(--sp-12) var(--sp-2);min-height:26px;max-height:150px;overflow-y:auto}
  #agt-run-input::placeholder{font-family:inherit;color:var(--mut2)}
  #agt-run-input:focus{outline:none}
  .agt-chat-main{display:flex;align-items:center;gap:var(--sp-4);padding:0 var(--sp-6) var(--sp-6)}
  .agt-chat-btn{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--radius);
    border:1px solid transparent;background:transparent;color:var(--mut);cursor:pointer;flex-shrink:0}
  .agt-chat-btn:hover{background:var(--card2);color:var(--txt);border-color:var(--line)}
  .agt-chat-btn input{display:none}
  .agt-chat-btn svg{width:15px;height:15px;display:block}
  .agt-chat-send{margin-left:auto}
  #agt-run-send{width:30px;height:30px;display:flex;align-items:center;justify-content:center;padding:0;
    border-radius:var(--radius);border:0;cursor:pointer;background:var(--accent);color:var(--on-solid);flex-shrink:0}
  #agt-run-send:hover{background:var(--accent-h,var(--accent))}
  #agt-run-send:disabled{opacity:.5;cursor:default}
  #agt-run-send.is-empty{opacity:.35;pointer-events:none}
  #agt-run-send svg{width:17px;height:17px;display:block}
  .agt-build-bar{align-items:center} .agt-build-bar select{flex:1;min-width:0}
  .agt-fw-bar{flex-direction:column;align-items:stretch;gap:var(--sp-8)}
  .agt-fw-row{display:flex;align-items:center;gap:var(--sp-8)}
  .agt-fw-file{display:inline-flex;align-items:center;gap:var(--sp-6);flex:none;cursor:pointer;padding:var(--sp-8) var(--sp-10);border:1px dashed var(--line);border-radius:var(--radius);color:var(--mut);font-size:var(--fs-sm);white-space:nowrap}
  .agt-fw-file:hover{border-color:var(--accent);color:var(--txt)} .agt-fw-file input{display:none} .agt-fw-file svg{width:15px;height:15px}
  .agt-fw-count{font-size:var(--fs-xs);color:var(--accent);white-space:nowrap}
  .agt-fw-row #agt-fw-hint{flex:1;min-width:0}
  .agt-fw-bar #agt-run-gen{align-self:flex-end}

  /* Onglet Compléments (extensions / plug-ins) */
  .plugins{max-width:780px}
  #tabpane > .plugins{max-width:none}   /* la page « Compléments installés » prend toute la largeur (le proprio, 2026-10-18) ; les fenêtres qui réutilisent .plugins gardent la leur */
  .cmp-head{display:flex;align-items:center;gap:var(--sp-10);margin-bottom:var(--sp-10)} .cmp-head b{font-size:var(--fs-base)}
  .cmp-count{font-size:var(--fs-xs);color:var(--mut);border:1px solid var(--line);border-radius:var(--radius-pill);padding:var(--sp-2) var(--sp-8);white-space:nowrap}
  .cmp-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
  .cmp-card{display:flex;align-items:center;gap:var(--sp-12);padding:var(--sp-12) var(--sp-12)}
  .cmp-card+.cmp-card{border-top:1px solid var(--line2)}
  .cmp-card.off{opacity:.62}
  .cmp-ic{width:36px;height:36px;border-radius:var(--radius);flex:none;display:grid;place-items:center;font-size:var(--fs-lg);
    background:var(--card2);border:1px solid var(--line2)}
  .cmp-ic svg.ic{width:21px;height:21px}
  .cmp-meta{flex:1;min-width:0}
  .cmp-l1{display:flex;align-items:baseline;gap:var(--sp-8);flex-wrap:wrap}
  .cmp-name{font-weight:var(--fw-strong);font-size:var(--fs-md)}
  .cmp-ver{font-size:var(--fs-xs);color:var(--mut);font-family:var(--font-mono)}
  .cmp-by{font-size:var(--fs-xs);color:var(--mut2)}
  .cmp-desc{font-size:var(--fs-sm);color:var(--mut);line-height:1.45;margin-top:var(--sp-2)}
  .cmp-toggle{position:relative;flex:none;width:38px;height:22px;border-radius:var(--radius-pill);border:1px solid var(--line);
    background:var(--card2);cursor:pointer;padding:0;transition:background .15s,border-color .15s}
  .cmp-toggle.on{background:var(--accent);border-color:var(--accent)}
  .cmp-knob{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--on-solid);
    box-shadow:var(--elev-1);transition:transform .15s}
  .cmp-toggle.on .cmp-knob{transform:translateX(16px)}
  .cmp-cfg{flex:none}
  .cmp-rm{flex:none}
  .cmp-rm:hover{color:var(--err);border-color:var(--err)}
  .cmp-empty{display:flex;flex-direction:column;align-items:center;gap:var(--sp-12);text-align:center;
    border:1px dashed var(--line);border-radius:var(--radius-sm);padding:var(--sp-34) var(--sp-20);color:var(--mut);font-size:var(--fs-md)}
  .cmp-empty-ic svg{width:34px;height:34px;color:var(--mut2)}
  .cmp-loading{display:flex;align-items:center;justify-content:center;gap:var(--sp-10);padding:var(--sp-34) var(--sp-20);color:var(--mut);font-size:var(--fs-md)}
  .cmp-spin{width:16px;height:16px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:rvspin .7s linear infinite}
  /* A11.4 - mini tableau de bord dépense API (pane moteur Claude) */
  .cs-spend{border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-10) var(--sp-12);background:var(--card2,var(--bg2))}
  .cs-spend-row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-12);font-size:var(--fs-md);padding:var(--sp-2) 0}
  .cs-spend-row span{color:var(--mut)}
  .cs-spend-row strong{font-variant-numeric:tabular-nums}
  .cs-bar{height:6px;border-radius:var(--radius-pill);background:var(--line);overflow:hidden;margin:var(--sp-4) 0 var(--sp-6)}
  .cs-bar i{display:block;height:100%;background:var(--accent);border-radius:var(--radius-pill);transition:width .3s}


  /* ── Livrables d'agents (Lot 3) : liste dans la modale MX ── */
  .agt-rep-list{display:flex;flex-direction:column;gap:var(--sp-8)}
  .agt-rep{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-8) var(--sp-10);border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}
  .agt-rep-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--sp-2);text-align:left;background:none;border:0;padding:0;cursor:pointer;color:inherit}
  .agt-rep-main:hover .agt-rep-ttl{color:var(--accent)}
  .agt-rep-ttl{font-weight:var(--fw-strong);font-size:var(--fs-md)}
  .agt-rep-when{color:var(--mut);font-weight:var(--fw-regular)}
  .agt-rep-sub{font-size:var(--fs-sm);color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .agt-rep-st{font-size:var(--fs-xs);padding:var(--sp-2) var(--sp-8);border-radius:var(--radius-pill);background:var(--line);color:var(--mut);white-space:nowrap}
  .agt-rep-st.ok{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok)}
  .agt-rep-st.off{background:color-mix(in srgb,var(--mut) 18%,transparent);color:var(--mut)}
  .agt-rep-st.draft{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent)}
  .agt-rep-acts{display:flex;gap:var(--sp-4);flex-shrink:0}
  .agt-rep-view .mini{margin-bottom:var(--sp-10)}
  .agt-rep-doc{border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-14);max-height:60vh;overflow:auto;background:var(--bg)}
  .agt-rep-json{white-space:pre-wrap;word-break:break-word;font-family:var(--font-mono);font-size:var(--fs-sm);margin:0}

  /* ── Skills : bibliothèque & attache (S0) ── */
  .agt-skill-box{display:flex;flex-direction:column;gap:var(--sp-6);max-height:220px;overflow:auto;margin-top:var(--sp-4)}
  .agt-skill-pick{display:flex;align-items:flex-start;gap:var(--sp-8);padding:var(--sp-6) var(--sp-8);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer}
  .agt-skill-pick:hover{border-color:var(--accent)}
  .agt-skill-pick input{width:auto;margin-top:var(--sp-2);flex:none}
  .agt-skill-pick span{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}
  .agt-skill-pick small{color:var(--mut);font-size:var(--fs-sm)}
  .agt-skill-manage{float:right;margin-top:-2px}
  .agt-skill-tags{display:flex;flex-wrap:wrap;gap:var(--sp-4);justify-content:flex-end;max-width:40%}
  .agt-skill-tag{font-size:var(--fs-xs);padding:var(--sp-1) var(--sp-6);border-radius:var(--radius-pill);background:var(--line);color:var(--mut)}

  /* ── Skills : compteur d'usage (S4) ── */
  .agt-skill-uses{font-size:var(--fs-xs);color:var(--mut);white-space:nowrap;flex-shrink:0}

  /* ── Équipes : aperçu de l'ordre du pipeline (T2) ── */
  .agt-team-order{white-space:normal;line-height:1.7}

  /* ── Coquille unifiée Agents + Factory ── */
  .agt-fx-root{display:flex;flex-direction:column;min-height:0;height:100%}
  .agt-fx-bar{display:flex;gap:var(--sp-2);padding:var(--sp-10) var(--sp-16) 0;border-bottom:1px solid var(--line);background:var(--card2,var(--bg));flex:none}
  .agt-fx-tab{padding:var(--sp-6) var(--sp-16);border-radius:var(--radius) var(--radius) 0 0;border:1px solid transparent;border-bottom:none;font-size:var(--fs-md);font-weight:var(--fw-medium);color:var(--mut);background:none;cursor:pointer;display:flex;align-items:center;gap:var(--sp-6);transition:color .15s,background .15s}
  .agt-fx-tab svg{width:15px;height:15px;opacity:.7}
  .agt-fx-tab:hover{color:var(--txt);background:var(--line)}
  .agt-fx-tab.on{color:var(--txt);background:var(--bg,var(--card));border-color:var(--line);margin-bottom:-1px}
  .agt-fx-tab.on svg{opacity:1}
  #aft-agents,#aft-factory{flex:1;overflow:auto;min-height:0}

  /* ══ Agent Editor Drawer ══════════════════════════════════════════════════ */
  .agt-edit-overlay{position:fixed;inset:0;background:rgba(0,0,0,.38);z-index:1900}
  .agt-edit-drawer{position:fixed;right:0;top:0;height:100vh;width:680px;max-width:96vw;
    background:var(--bg,var(--card));border-left:1.5px solid var(--line);z-index:1901;
    display:flex;flex-direction:column;transform:translateX(100%);
    transition:transform .24s cubic-bezier(.22,1,.36,1);box-shadow:var(--elev-2)}
  .agt-edit-drawer.open{transform:translateX(0)}
  .agt-ed-head{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-14) var(--sp-18);
    border-bottom:1px solid var(--line);flex-shrink:0}
  .agt-ed-back{display:flex;align-items:center;gap:var(--sp-4);font-size:var(--fs-sm);color:var(--mut);
    background:none;border:none;cursor:pointer;padding:var(--sp-4) var(--sp-8);border-radius:var(--radius-sm)}
  .agt-ed-back:hover{background:var(--line);color:var(--txt)}
  .agt-ed-name{flex:1;font-size:var(--fs-base);font-weight:var(--fw-strong);background:none;border:none;
    color:var(--txt);padding:var(--sp-4) var(--sp-8);border-radius:var(--r,8px);outline:none;min-width:0}
  .agt-ed-name:focus{background:var(--line)}
  .agt-ed-body{flex:1;overflow-y:auto;padding:18px 20px 60px;display:flex;flex-direction:column;gap:var(--sp-20)}
  .agt-ed-sec{font-size:var(--fs-2xs);font-weight:var(--fw-bold);letter-spacing:var(--ls-wide);text-transform:uppercase;
    color:var(--mut);margin-bottom:var(--sp-10);display:flex;align-items:center;gap:var(--sp-8)}
  .agt-ed-sec::after{content:'';flex:1;height:1px;background:var(--line)}
  .agt-ed-foot{padding:var(--sp-12) var(--sp-18);border-top:1px solid var(--line);
    display:flex;gap:var(--sp-8);justify-content:flex-end;flex-shrink:0}

  /* Visual card pickers - type */
  .agt-type-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--sp-6)}
  .agt-type-card{display:flex;flex-direction:column;align-items:center;gap:var(--sp-4);padding:var(--sp-10) var(--sp-4) var(--sp-8);
    border:1.5px solid var(--line);border-radius:var(--r,8px);cursor:pointer;
    background:none;color:var(--txt);font-size:var(--fs-xs);line-height:var(--lh-tight);text-align:center;transition:all .13s}
  .agt-tc-icon{font-size:var(--fs-lg);line-height:var(--lh-flat)}
  .agt-type-card.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
  .agt-type-card:hover:not(.on){border-color:var(--mut)}

  /* Engine pills */
  .agt-eng-pills{display:flex;gap:var(--sp-6);flex-wrap:wrap}
  .agt-eng-pill{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-6) var(--sp-16);
    border:1.5px solid var(--line);border-radius:var(--radius-pill);cursor:pointer;
    background:none;color:var(--txt);font-size:var(--fs-md);font-weight:var(--fw-medium);transition:all .13s}
  .agt-eng-pill.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
  .agt-eng-pill:hover:not(.on){border-color:var(--mut)}

  /* Model cards */
  .agt-model-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--sp-6);margin-top:var(--sp-10)}
  .agt-model-card{display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);padding:var(--sp-10) var(--sp-4) var(--sp-8);
    border:1.5px solid var(--line);border-radius:var(--r,8px);cursor:pointer;
    background:none;color:var(--txt);text-align:center;transition:all .13s}
  .agt-mc-icon{font-size:var(--fs-lg);line-height:var(--lh-flat)}
  .agt-mc-icon svg.ic,.agt-oc-icon svg.ic,.agt-pc-icon svg.ic{width:20px;height:20px}   /* icônes du registre à la place des emojis (ICONES L7) */
  .agt-model-card b{font-size:var(--fs-xs)}
  .agt-model-card small{font-size:var(--fs-2xs);color:var(--mut);line-height:1.3}
  .agt-model-card.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
  .agt-model-card:hover:not(.on){border-color:var(--mut)}

  /* Output kind cards */
  .agt-out-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-8)}
  .agt-out-card{display:flex;flex-direction:column;gap:var(--sp-4);padding:var(--sp-12);
    border:1.5px solid var(--line);border-radius:var(--r,8px);cursor:pointer;
    background:none;color:var(--txt);text-align:left;transition:all .13s}
  .agt-oc-icon{font-size:var(--fs-lg);line-height:var(--lh-flat)}
  .agt-out-card b{font-size:var(--fs-md)}
  .agt-out-card small{font-size:var(--fs-xs);color:var(--mut);line-height:var(--lh-snug)}
  .agt-out-card.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
  .agt-out-card:hover:not(.on){border-color:var(--mut)}

  /* Perm cards */
  .agt-perm-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-8)}
  .agt-perm-card{display:flex;flex-direction:column;gap:var(--sp-4);padding:var(--sp-12);
    border:1.5px solid var(--line);border-radius:var(--r,8px);cursor:pointer;
    background:none;color:var(--txt);text-align:left;transition:all .13s}
  .agt-pc-icon{font-size:var(--fs-lg);line-height:var(--lh-flat)}
  .agt-perm-card b{font-size:var(--fs-md)}
  .agt-perm-card small{font-size:var(--fs-xs);color:var(--mut);line-height:var(--lh-snug)}
  .agt-perm-card.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
  .agt-perm-card:hover:not(.on){border-color:var(--mut)}

  /* Source rows v2 (chip strip) */
  #agt_sources{display:flex;flex-direction:column;gap:var(--sp-8)}
  .agt-src-row{border:1px solid var(--line);border-radius:var(--r,8px);padding:var(--sp-10) var(--sp-12);
    display:flex;flex-direction:column;gap:var(--sp-8);background:var(--bg1,var(--card))}
  .agt-src-head{display:flex;align-items:flex-start;gap:var(--sp-8)}
  .agt-src-kind-strip{display:flex;gap:var(--sp-4);flex-wrap:wrap;flex:1}
  .agt-src-kind-chip{padding:var(--sp-2) var(--sp-10);border:1px solid var(--line);border-radius:var(--radius-pill);font-size:var(--fs-xs);
    cursor:pointer;background:none;color:var(--mut);white-space:nowrap;transition:all .12s;line-height:1.6}
  .agt-src-kind-chip.on{background:var(--accent);color:var(--on-solid);border-color:var(--accent)}
  .agt-src-kind-chip:hover:not(.on){color:var(--txt);border-color:var(--txt)}
  .agt-src-inputs{display:flex;gap:var(--sp-8);align-items:flex-start}
  .agt-src-label-in{width:130px!important;flex:0 0 130px!important}
  .agt-src-val-wrap{flex:1;min-width:0}
  .agt-src-val-wrap input,.agt-src-val-wrap select{width:100%;box-sizing:border-box}
  .agt-src-footer{display:flex;align-items:center;gap:var(--sp-8)}
  .agt-src-footer .agt-src-fetch{flex:1;display:flex;align-items:center;gap:var(--sp-6);
    font-size:var(--fs-sm);color:var(--mut);cursor:pointer}
  .agt-src-footer .agt-src-fetch input{accent-color:var(--accent);width:auto}
  .agt-src-res{font-size:var(--fs-xs)}

  /* CRON box */
  .agt-cron-box{background:var(--bg1,var(--card));border:1px solid var(--line);
    border-radius:var(--r,8px);padding:var(--sp-12) var(--sp-14);display:flex;flex-direction:column;gap:var(--sp-10)}
  .agt-cron-row{display:flex;align-items:center;gap:var(--sp-10)}
  .agt-cron-label{font-size:var(--fs-md);font-weight:var(--fw-medium);flex:1}
  .agt-cron-intervals{display:flex;gap:var(--sp-4);flex-wrap:wrap;margin-top:var(--sp-2)}
  .agt-cron-chip{padding:var(--sp-4) var(--sp-12);border:1px solid var(--line);border-radius:var(--radius-pill);font-size:var(--fs-sm);
    cursor:pointer;background:none;color:var(--txt);transition:all .12s}
  .agt-cron-chip.on{background:var(--accent);color:var(--on-solid);border-color:var(--accent)}
  .agt-cron-chip:hover:not(.on){border-color:var(--mut)}

  /* Tool / capability toggle cards */
  .agt-tool-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-8)}
  .agt-tool-card{display:flex;align-items:center;gap:var(--sp-10);padding:var(--sp-10) var(--sp-12);
    border:1.5px solid var(--line);border-radius:var(--r,8px);cursor:pointer;
    background:none;color:var(--txt);text-align:left;transition:all .13s;width:100%}
  .agt-tool-tog{width:32px;height:18px;border-radius:var(--radius-pill);background:var(--line);flex-shrink:0;
    position:relative;transition:background .15s}
  .agt-tool-tog::after{content:'';position:absolute;left:2px;top:2px;width:14px;height:14px;
    background:var(--on-solid);border-radius:50%;transition:left .15s;box-shadow:var(--elev-1)}
  .agt-tool-card.on .agt-tool-tog{background:var(--accent)}
  .agt-tool-card.on .agt-tool-tog::after{left:16px}
  .agt-tool-card b{font-size:var(--fs-md)}
  .agt-tool-card small{font-size:var(--fs-xs);color:var(--mut);display:block}

  /* Skill grid inside drawer */
  .agt-skill-grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-6);max-height:160px;overflow-y:auto}

  /* Factory visual upgrades */
  .fx-rev-cards,.fx-exceed-cards{display:flex;gap:var(--sp-8);margin-top:var(--sp-4)}
  .fx-rev-card,.fx-exceed-card{flex:1;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-10) var(--sp-12);
    border:1.5px solid var(--line);border-radius:var(--r,8px);cursor:pointer;
    background:none;color:var(--txt);text-align:left;transition:all .13s}
  .fx-rev-card b,.fx-exceed-card b{font-size:var(--fs-sm)}
  .fx-rev-card small,.fx-exceed-card small{font-size:var(--fs-2xs);color:var(--mut)}
  .fx-rev-card.on,.fx-exceed-card.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
  .fx-rev-card:hover:not(.on),.fx-exceed-card:hover:not(.on){border-color:var(--mut)}
  .fx-budget-row{display:flex;align-items:center;gap:var(--sp-12);margin-top:var(--sp-4)}
  .fx-budget-row input[type=range]{flex:1;accent-color:var(--accent)}
  .fx-budget-val{font-weight:var(--fw-bold);font-size:var(--fs-base);min-width:56px;text-align:right;color:var(--accent)}
  .fx-trig-chips{display:flex;gap:var(--sp-4);flex-wrap:wrap;margin-top:var(--sp-6)}
  .fx-cron-custom{margin-top:var(--sp-6)}

  /* L'éditeur de texte riche d'avant (.etx-*) est remplacé par le Document du Studio, qui a sa feuille :
     21d-edition-document.css (CDC_DOCUMENT_WORD W1, 2026-10-23). */

}
