/* =========================================================================
 * adns-ui.css — classes maison du back-office ADNS, sans Bootstrap (v0)
 *
 * [2026-10-20] AJOUT - Trois familles : disposition, bouton à 4 rôles, statut
 *
 * CONTEXTE : passe P1 du chantier d'uniformisation des back-offices (dev_wo/docs/modules/inter-module/
 *            uniformisation-back-office/PLAN_PASSES.md ; vocabulaire : socle/CHARTE_CIBLE.md §4). Remplace,
 *            composant par composant, row, col-*, d-flex, gap-*, mb-* (disposition), btn btn-* (bouton) et
 *            badge/bg-* (statut). Valeurs : DESIGN.md « Univers v2 », via adns-tokens.css.
 * RÈGLES   : - uniquement des sélecteurs .adns-*, spécificité de (0,1,0) à (0,2,0), aucune règle sur une classe
 *              Bootstrap (critère grep de la passe) ;
 *            - REMPLACER, ne pas ajouter : un élément qui porte adns-btn ne porte plus btn ni btn-* ;
 *            - états par attributs (aria-current, aria-disabled, aria-pressed, [disabled], data-state), jamais
 *              par .active/.show/.disabled ;
 *            - aucune couleur en dur : tout vient des jetons ; accent de module interdit ici (CHARTE_CIBLE §3.2).
 * RÉGIME   : régime-neutre. Hors couche CSS, chargé en DERNIER (après la peau Éditeur A et la feuille gipco) ;
 *            la règle « une règle hors couche bat une règle en @layer » interdit @layer tant que le thème Front
 *            est servi (CHARTE_CIBLE §4.4, étape 5).
 * DÉPENDANCES : adns-tokens.css (chargé avant). Chargé par aucune page en v0.
 * AUTEUR : Antoine LAGIER / Claude Code
 * RÉFÉRENCE : Conversation Claude Code du 2026-10-20 (ticket d'épic à créer avant tout commit)
 * ========================================================================= */


/* =========================================================================
 * 1. Disposition — remplace container-fluid, row/col-*, d-flex, gap-*, mb-*
 *    Espacement réglé par data-gap="1|2|3|4|6|8|10" (pas de 4 px), jamais par mb-* / mt-*.
 * ========================================================================= */

.adns-page {
  box-sizing: border-box;
  width: 100%;
  max-width: var(--adns-w-content-max);
  margin-inline: auto;
  padding-inline: var(--adns-gutter);
}

/* Pile : colonne verticale, écart uniforme entre enfants */
.adns-pile {
  display: flex;
  flex-direction: column;
  gap: var(--adns-gap, var(--adns-sp-4));
  min-width: 0;
}

/* Cluster : rangée qui passe à la ligne, alignée au centre (boutons, puces, méta) */
.adns-cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--adns-gap, var(--adns-sp-2));
  min-width: 0;
}
.adns-cluster--fin { justify-content: flex-end; }
.adns-cluster--entre { justify-content: space-between; }

/* Grille auto : colonnes d'au moins --adns-col-min ; --2 et --3 plafonnent le nombre de colonnes */
.adns-grille {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(var(--adns-col-min, 16rem), 100%), 1fr));
  gap: var(--adns-gap, var(--adns-sp-4));
}
.adns-grille--2 { grid-template-columns: repeat(auto-fit, minmax(max(var(--adns-col-min, 16rem), calc((100% - var(--adns-gap, var(--adns-sp-4))) / 2)), 1fr)); }
.adns-grille--3 { grid-template-columns: repeat(auto-fit, minmax(max(var(--adns-col-min, 14rem), calc((100% - 2 * var(--adns-gap, var(--adns-sp-4))) / 3)), 1fr)); }

/* Barre de vue / d'outils : 40 px, titre à gauche, actions à droite (la décisive en dernier) */
.adns-barre {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--adns-sp-2) var(--adns-sp-4);
  min-height: var(--adns-h-bar);
}
.adns-barre-titre {
  margin: 0;
  margin-inline-end: auto;
  min-width: 0;
  font-size: var(--adns-fs-section);
  font-weight: 600;
  line-height: 1.25;
  color: var(--adns-color-text-default);
}
.adns-barre-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--adns-sp-2);
}

/* Section : titre 16/600 et contenu. L'écart de 32 px ENTRE sections est porté par le parent
 * (adns-pile data-gap="8"), jamais par une marge : une marge s'ajouterait à l'écart du parent (doublé à 64 px). */
.adns-section {
  display: flex;
  flex-direction: column;
  gap: var(--adns-gap, var(--adns-sp-4));
}
.adns-section-titre {
  margin: 0;
  font-size: var(--adns-fs-section);
  font-weight: 600;
  line-height: 1.25;
  color: var(--adns-color-text-default);
}

/* Grille de champs : étiquette au-dessus, 16 px entre champs ; --2 pour deux colonnes au-delà de 992 px */
.adns-champs {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--adns-gap, var(--adns-sp-4));
}
@media (min-width: 992px) {
  .adns-champs--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Réglage de l'écart (sur adns-pile, adns-cluster, adns-grille, adns-section, adns-champs) */
[data-gap="1"]  { --adns-gap: var(--adns-sp-1); }
[data-gap="2"]  { --adns-gap: var(--adns-sp-2); }
[data-gap="3"]  { --adns-gap: var(--adns-sp-3); }
[data-gap="4"]  { --adns-gap: var(--adns-sp-4); }
[data-gap="6"]  { --adns-gap: var(--adns-sp-6); }
[data-gap="8"]  { --adns-gap: var(--adns-sp-8); }
[data-gap="10"] { --adns-gap: var(--adns-sp-10); }


/* =========================================================================
 * 2. Bouton — remplace btn btn-primary|success|outline-*|ghost-*|danger, btn-sm, btn-icon
 *    Quatre rôles : décisif (teinte du module, au plus un par zone d'action), secondaire (blanc bordé),
 *    fantôme (actions de ligne, menu ⋯), destructif (blanc bordé, texte rouge ; jamais d'aplat rouge).
 *    Tailles : 36 px par défaut, --barre 32 px, --icone carré ; 44 px sous 992 px pour --decisif.
 *    <button type="button"> ou <a href> ; un bouton à icône seule porte aria-label et title.
 * ========================================================================= */

.adns-btn {
  --adns-btn-bg: var(--adns-color-bg-surface);
  --adns-btn-fg: var(--adns-color-text-default);
  --adns-btn-bord: var(--adns-color-border-control);
  --adns-btn-bg-survol: var(--ad-c-brume);
  --adns-btn-bord-survol: var(--ad-c-acier);

  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--adns-sp-2);
  min-height: var(--adns-h-control);
  padding: 0 var(--adns-sp-4);
  margin: 0;
  border: 1px solid var(--adns-btn-bord);
  border-radius: var(--adns-radius-control);
  background: var(--adns-btn-bg);
  color: var(--adns-btn-fg);
  font-family: var(--adns-font-sans);
  font-size: var(--adns-fs-body);
  font-weight: 600;
  line-height: var(--adns-lh-body);
  text-decoration: none;
  white-space: nowrap;
  vertical-align: middle;
  cursor: pointer;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition: background-color var(--adns-dur-mid) var(--adns-ease),
              border-color var(--adns-dur-mid) var(--adns-ease),
              color var(--adns-dur-mid) var(--adns-ease);
}
.adns-btn:hover {
  background: var(--adns-btn-bg-survol);
  border-color: var(--adns-btn-bord-survol);
  color: var(--adns-btn-fg);
  text-decoration: none;
}
.adns-btn:focus { outline: none; }
.adns-btn:focus-visible {
  outline: var(--adns-focus-ring);
  outline-offset: 2px;
}
.adns-btn > i,
.adns-btn > svg {
  flex: none;
  font-size: 16px;
  width: 1em;
  text-align: center;
}

/* Rôles */
.adns-btn--decisif {
  /* [2026-10-21] MODIFICATION - Direction B d'Antoine (« teinte du module ») : le bouton décisif prend l'accent du
   * module (gipco bleu nuit, mail sarcelle, web violet, lead prune, socle encre), texte blanc (de 7,10:1 à 18,87:1) ;
   * survol éclairci (accent 86 % + blanc : 6,99 / 5,62 / 5,43 / 6,17 / 12,81:1), le même calcul pour tous les modules,
   * y compris le noir de socle. Remplace le soleil d'Univers. Les jetons --adns-decisif-fond|texte|survol
   * permettent une exception locale. */
  --adns-btn-bg: var(--adns-decisif-fond, var(--adns-accent));
  --adns-btn-fg: var(--adns-decisif-texte, var(--adns-accent-on));
  --adns-btn-bord: var(--adns-btn-bg);
  --adns-btn-bg-survol: var(--adns-decisif-survol, color-mix(in srgb, var(--adns-accent) 86%, #fff));
  --adns-btn-bord-survol: var(--adns-btn-bg-survol);
}
.adns-btn--decisif:active { background: var(--adns-btn-bg-survol); }

.adns-btn--secondaire { /* valeurs par défaut de .adns-btn : blanc bordé filet fort, survol brume + acier */ }

.adns-btn--fantome {
  --adns-btn-bg: transparent;
  --adns-btn-fg: var(--adns-color-text-muted);
  --adns-btn-bord: transparent;
  --adns-btn-bg-survol: var(--ad-c-brume);
  --adns-btn-bord-survol: transparent;
  min-height: var(--adns-h-control-bar);
  padding: 0 var(--adns-sp-3);
}
.adns-btn--fantome:hover,
.adns-btn--fantome[aria-expanded="true"],
.adns-btn--fantome[aria-pressed="true"] {
  background: var(--ad-c-brume);
  color: var(--adns-color-text-default);
}

.adns-btn--destructif {
  --adns-btn-fg: var(--adns-color-status-danger-fg);
  --adns-btn-bg-survol: var(--adns-color-status-danger-bg);
  --adns-btn-bord-survol: var(--adns-color-status-danger-fg);
}

/* Tailles */
.adns-btn--barre {
  min-height: var(--adns-h-control-bar);
  padding: 0 var(--adns-sp-3);
}
.adns-btn--icone {
  width: var(--adns-h-control);
  padding: 0;
}
.adns-btn--icone.adns-btn--barre,
.adns-btn--icone.adns-btn--fantome { width: var(--adns-h-control-bar); }

@media (max-width: 991.98px) {
  .adns-btn--decisif { min-height: var(--adns-h-touch); }
}

/* Désactivé : perd sa couleur (une teinte délavée se lit comme une sélection) ; la raison s'écrit à côté
 * (.adns-raison), jamais au seul survol. aria-disabled garde le bouton focalisable pour lire la raison. */
.adns-btn:disabled,
.adns-btn[aria-disabled="true"] {
  background: var(--adns-color-bg-disabled);
  border-color: var(--adns-color-border-subtle);
  color: var(--adns-color-text-disabled);
  cursor: not-allowed;
}
.adns-btn--fantome:disabled,
.adns-btn--fantome[aria-disabled="true"] {
  background: transparent;
  border-color: transparent;
}
.adns-raison {
  font-size: var(--adns-fs-label);
  line-height: var(--adns-lh-body);
  color: var(--adns-color-text-subtle);
}

/* Envoi en cours : libellé au participe (« Enregistrement… ») posé par le composant, bouton neutralisé */
.adns-btn[data-state="envoi"] {
  cursor: progress;
  pointer-events: none;
}


/* =========================================================================
 * 3. Statut — remplace badge, bg-*, label-* (BS3), text-bg-*
 *    Pilule 22 px, 12/500, icône + mot TOUJOURS (la couleur n'est jamais seule).
 *    Cinq variantes : neutre, succès, attention, danger (erreur seulement), en cours.
 *    Icône : Font Awesome Pro fa-regular 12 px, aria-hidden="true".
 * ========================================================================= */

.adns-statut {
  --adns-statut-bg: var(--adns-color-status-neutral-bg);
  --adns-statut-fg: var(--adns-color-status-neutral-fg);
  --adns-statut-bord: transparent;

  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  gap: var(--adns-sp-1);
  height: var(--adns-h-status);
  max-width: 100%;
  padding: 0 var(--adns-sp-2) 0 6px; /* 6 px côté icône : exception optique d'Univers */
  border: 1px solid var(--adns-statut-bord);
  border-radius: var(--adns-radius-pill);
  background: var(--adns-statut-bg);
  color: var(--adns-statut-fg);
  font-family: var(--adns-font-sans);
  font-size: var(--adns-fs-group);
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  vertical-align: middle;
}
.adns-statut > i,
.adns-statut > svg {
  flex: none;
  font-size: 12px;
  width: 1em;
  text-align: center;
}
.adns-statut-texte {
  overflow: hidden;
  text-overflow: ellipsis;
}

.adns-statut--succes {
  --adns-statut-bg: var(--adns-color-status-success-bg);
  --adns-statut-fg: var(--adns-color-status-success-fg);
}
.adns-statut--attention {
  --adns-statut-bg: var(--adns-color-status-warning-bg);
  --adns-statut-fg: var(--adns-color-status-warning-fg);
}
.adns-statut--danger {
  --adns-statut-bg: var(--adns-color-status-danger-bg);
  --adns-statut-fg: var(--adns-color-status-danger-fg);
}
.adns-statut--neutre { /* valeurs par défaut */ }
.adns-statut--encours {
  --adns-statut-bg: var(--adns-color-bg-surface);
  --adns-statut-fg: var(--adns-color-text-default);
  --adns-statut-bord: var(--adns-color-border-control);
}

/* Compteur (onglet, menu) : chiffres tabulaires, graphite */
.adns-compteur {
  display: inline-block;
  min-width: 1.5em;
  padding: 0 6px;
  border-radius: var(--adns-radius-pill);
  background: var(--ad-c-brume);
  color: var(--adns-color-text-subtle);
  font-size: var(--adns-fs-group);
  font-weight: 500;
  line-height: 20px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}


/* =========================================================================
 * 4. État vide — remplace les messages « Aucun... » écrits à la main (composant WO AdnsEtatVide)
 *    Bloc aligné à gauche, 480 px au plus, titre 16/600, texte de 65 caractères au plus, une seule action.
 *    [2026-10-21] AJOUT - GIPAD-9331
 * ========================================================================= */

.adns-vide {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--adns-sp-3);
  box-sizing: border-box;
  max-width: 480px;
  padding: var(--adns-sp-6) 0;
}
.adns-vide > i {
  font-size: var(--adns-fs-figure);
  color: var(--adns-color-text-subtle);
}
.adns-vide-titre {
  margin: 0;
  font-size: var(--adns-fs-section);
  font-weight: 600;
  line-height: 1.25;
  color: var(--adns-color-text-default);
}
.adns-vide-texte {
  margin: 0;
  max-width: 65ch;
  font-size: var(--adns-fs-body);
  line-height: var(--adns-lh-body);
  color: var(--adns-color-text-muted);
}


/* =========================================================================
 * 5. En-tête de page — composant WO AdnsPageHeader
 *    Titre 24/600, sous-titre, pastille d'état, lien de retour, zone d'actions (la décisive en dernier).
 *    [2026-10-21] AJOUT - GIPAD-9331
 * ========================================================================= */

.adns-entete {
  display: flex;
  flex-direction: column;
  gap: var(--adns-sp-2);
  box-sizing: border-box;
  padding-bottom: var(--adns-sp-4);
}
.adns-entete-retour {
  display: inline-flex;
  align-items: center;
  gap: var(--adns-sp-2);
  align-self: flex-start;
  font-size: var(--adns-fs-label);
  color: var(--adns-color-text-muted);
  text-decoration: none;
}
.adns-entete-retour:hover { color: var(--adns-color-text-default); text-decoration: underline; }
.adns-entete-retour:focus-visible { outline: var(--adns-focus-ring); outline-offset: 2px; }
.adns-entete-ligne {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--adns-sp-3) var(--adns-sp-6);
}
.adns-entete-texte {
  display: flex;
  flex-direction: column;
  gap: var(--adns-sp-1);
  min-width: 0;
}
.adns-entete-titre {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--adns-sp-3);
  margin: 0;
  font-size: var(--adns-fs-page);
  font-weight: 600;
  letter-spacing: -.01em;
  line-height: var(--adns-lh-title);
  color: var(--adns-color-text-default);
}
.adns-entete-sous {
  margin: 0;
  font-size: var(--adns-fs-body);
  line-height: var(--adns-lh-body);
  color: var(--adns-color-text-muted);
}
.adns-entete-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--adns-sp-2);
}
.adns-entete-actions:empty { display: none; }


/* =========================================================================
 * 6. Toast — retour bref d'une action réussie (composant WO AdnsToast, script adns-toast.js)
 *    Pile fixe en bas à gauche ; ton par l'icône ET la couleur (jamais la couleur seule) ; croix toujours présente.
 *    Avant que le script ne l'ait déplacé dans la pile, un toast reste masqué (pas de saut de mise en page).
 *    [2026-10-21] AJOUT - GIPAD-9331
 * ========================================================================= */

.adns-toast:not(.adns-toasts .adns-toast) { display: none; }
.adns-toasts {
  position: fixed;
  left: var(--adns-sp-4);
  bottom: var(--adns-sp-4);
  z-index: 2100;
  display: flex;
  flex-direction: column;
  gap: var(--adns-sp-2);
  width: min(420px, calc(100vw - 2 * var(--adns-sp-4)));
  pointer-events: none;
}
.adns-toast {
  --adns-toast-fg: var(--adns-color-status-success-fg);
  box-sizing: border-box;
  display: flex;
  align-items: center;
  gap: var(--adns-sp-3);
  min-height: var(--adns-h-control);
  padding: var(--adns-sp-2) var(--adns-sp-2) var(--adns-sp-2) var(--adns-sp-4);
  border: 1px solid var(--adns-color-border-subtle);
  border-radius: var(--adns-radius-container);
  background: var(--adns-color-bg-surface);
  box-shadow: var(--adns-shadow-surcouche);
  color: var(--adns-color-text-default);
  font-family: var(--adns-font-sans);
  font-size: var(--adns-fs-body);
  line-height: var(--adns-lh-body);
  pointer-events: auto;
  animation: adns-toast-entree var(--adns-dur-long) var(--adns-ease);
  transition: opacity var(--adns-dur-short) linear, transform var(--adns-dur-short) linear;
}
.adns-toast > i:first-child {
  flex: none;
  font-size: 16px;
  color: var(--adns-toast-fg);
}
.adns-toast-texte { flex: 1; min-width: 0; }
.adns-toast--info { --adns-toast-fg: var(--adns-color-status-info-fg); }
.adns-toast--attention { --adns-toast-fg: var(--adns-color-status-warning-fg); }
.adns-toast--danger { --adns-toast-fg: var(--adns-color-status-danger-fg); border-color: var(--adns-toast-fg); }
.adns-toast--sortie { opacity: 0; transform: translateY(4px); }
@keyframes adns-toast-entree {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .adns-toast { animation: none; transition: none; }
}


/* =========================================================================
 * 7. Barre de filtres, champ et puce — composant WO AdnsBarreFiltres
 *    Cadre : zone des filtres à gauche (qui passe à la ligne), compteur, « Réinitialiser » et actions à droite.
 *    Champ : 36 px (32 en barre), bordure acier, rayon 8 ; état par :focus-visible, [aria-invalid], [disabled].
 *    Puce : filtre actif/inactif par aria-pressed, 28 px, pilule.
 *    [2026-10-21] AJOUT - GIPAD-9331
 * ========================================================================= */

.adns-filtres {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--adns-sp-2) var(--adns-sp-4);
  box-sizing: border-box;
  min-height: var(--adns-h-bar);
}
.adns-filtres-champs {
  display: flex;
  flex-wrap: wrap;
  flex: 1 1 24rem;
  align-items: center;
  gap: var(--adns-sp-2);
  min-width: 0;
}
.adns-filtres-fin {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--adns-sp-2);
}
.adns-filtres-compteur {
  font-size: var(--adns-fs-label);
  color: var(--adns-color-text-subtle);
  font-variant-numeric: tabular-nums;
}

.adns-champ {
  box-sizing: border-box;
  height: var(--adns-h-control);
  min-width: 0;
  padding: 0 var(--adns-sp-3);
  border: 1px solid var(--adns-color-border-input);
  border-radius: var(--adns-radius-control);
  background: var(--adns-color-bg-field);
  color: var(--adns-color-text-default);
  font-family: var(--adns-font-sans);
  font-size: var(--adns-fs-body);
  line-height: var(--adns-lh-body);
}
.adns-champ::placeholder { color: var(--adns-color-text-subtle); }
.adns-champ:focus { outline: none; }
.adns-champ:focus-visible {
  border-color: var(--ad-c-encre);
  box-shadow: 0 0 0 1px var(--ad-c-encre);
}
.adns-champ[aria-invalid="true"] {
  border-color: var(--adns-color-status-danger-fg);
}
.adns-champ:disabled {
  background: var(--adns-color-bg-disabled);
  color: var(--adns-color-text-disabled);
  cursor: not-allowed;
}
.adns-champ--recherche { flex: 1 1 14rem; max-width: 24rem; }
.adns-filtres .adns-champ { height: var(--adns-h-control-bar); }

.adns-puce {
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  gap: var(--adns-sp-1);
  height: 28px;
  padding: 0 var(--adns-sp-3);
  border: 1px solid var(--adns-color-border-control);
  border-radius: var(--adns-radius-pill);
  background: var(--adns-color-bg-surface);
  color: var(--adns-color-text-default);
  font-family: var(--adns-font-sans);
  font-size: var(--adns-fs-label);
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--adns-dur-mid) var(--adns-ease), border-color var(--adns-dur-mid) var(--adns-ease);
}
.adns-puce:hover { background: var(--ad-c-brume); border-color: var(--ad-c-acier); }
.adns-puce:focus { outline: none; }
.adns-puce:focus-visible { outline: var(--adns-focus-ring); outline-offset: 2px; }
.adns-puce[aria-pressed="true"] {
  background: var(--adns-color-bg-selected);
  border-color: var(--adns-color-text-default);
  font-weight: 600;
}


/* =========================================================================
 * 8. Menu de ligne « ... » — composant WO AdnsMenuLigne, script adns-menu.js
 *    details/summary natifs ; liste 200 px au moins, entrées de 40 px, rayon 8, ombre de surcouche (la seule ombre
 *    du système) ; destructif en rouge sans aplat ; fermeture et clavier par adns-menu.js.
 *    [2026-10-21] AJOUT - GIPAD-9331
 * ========================================================================= */

.adns-menu { position: relative; display: inline-block; }
.adns-menu > summary { list-style: none; }
.adns-menu > summary::-webkit-details-marker { display: none; }
.adns-menu > summary::marker { content: ""; }
.adns-menu-liste {
  position: absolute;
  top: calc(100% + var(--adns-sp-1));
  right: 0;
  z-index: 1500;
  box-sizing: border-box;
  min-width: 200px;
  padding: var(--adns-sp-1);
  border: 1px solid var(--adns-color-border-subtle);
  border-radius: var(--adns-radius-menu);
  background: var(--adns-color-bg-surface);
  box-shadow: var(--adns-shadow-surcouche);
}
.adns-menu--debut .adns-menu-liste { right: auto; left: 0; }
.adns-menu-item {
  box-sizing: border-box;
  display: flex;
  align-items: center;
  gap: var(--adns-sp-2);
  width: 100%;
  min-height: 40px;
  padding: 0 var(--adns-sp-3);
  border: 0;
  border-radius: var(--adns-radius-inner);
  background: transparent;
  color: var(--adns-color-text-default);
  font-family: var(--adns-font-sans);
  font-size: var(--adns-fs-body);
  line-height: var(--adns-lh-body);
  text-align: left;
  text-decoration: none;
  cursor: pointer;
}
.adns-menu-item:hover { background: var(--adns-color-bg-hover); color: var(--adns-color-text-default); text-decoration: none; }
.adns-menu-item:focus { outline: none; }
.adns-menu-item:focus-visible { outline: var(--adns-focus-ring); outline-offset: -2px; background: var(--adns-color-bg-hover); }
.adns-menu-item > i { flex: none; width: 1em; text-align: center; color: var(--adns-color-text-muted); }
.adns-menu-item--destructif,
.adns-menu-item--destructif > i { color: var(--adns-color-status-danger-fg); }
.adns-menu-item--destructif:hover { background: var(--adns-color-status-danger-bg); }
.adns-menu-item[aria-disabled="true"],
.adns-menu-item:disabled { color: var(--adns-color-text-disabled); cursor: not-allowed; }
.adns-menu-sep { height: 1px; margin: var(--adns-sp-1) 0; background: var(--adns-color-border-row); }
