/* ============================================================
   GEVA Suite — CSS des composants (production).
   Ne dépend QUE des tokens de styles.css. À @import après styles.css :
     @import url('./styles.css');
     @import url('./components.css');
   ============================================================ */

/* ---- Icône ---- */
.geva-icon{display:inline-block;vertical-align:middle;color:inherit;flex:none;}
.geva-icon.is-active{color:var(--geva-blue);}

/* ---- Bouton ---- */
/* Bouton — CSS REPRIS À L'IDENTIQUE de la maquette « Claude design » (`.btn`/`.btn-primary` du
   dashboard) : height 42, padding 0 18, gap 8, font 14.5/semibold, radius-md, transition douce,
   appui translateY(.5px). On garde `border:1px solid transparent` (≡ `border:none` pour le primaire,
   mais permet aux variantes secondary/ghost de poser leur bordure) + focus/disabled accessibles. */
.geva-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  height:42px;padding:0 18px;font-family:var(--font-sans);font-weight:var(--weight-semibold);
  font-size:14.5px;line-height:1;border-radius:var(--radius-md);border:1px solid transparent;
  cursor:pointer;text-decoration:none;letter-spacing:-.01em;white-space:nowrap;
  transition:box-shadow .15s,background .15s,border-color .15s,transform .08s;}
.geva-btn:active{transform:translateY(.5px);}
.geva-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-focus-ring);}
.geva-btn[disabled]{opacity:.5;pointer-events:none;}
.geva-btn svg{width:18px;height:18px;}
.geva-btn--sm{height:36px;padding:0 14px;font-size:14px;}
.geva-btn--lg{height:52px;padding:0 24px;font-size:16px;}
/* Variantes = COULEUR uniquement. La géométrie (hauteur, padding, radius, taille) vient de `.geva-btn`
   et `.geva-btn--sm/--lg` ci-dessus, pour tous. Depuis le retrait des règles `.geva-btn` de la feuille
   module `geva.css` (qui, chargée après, écrasait tout), plus besoin de doubler la spécificité ni de
   re-poser la géométrie : une seule classe suffit. */
/* CTA principal — `.btn-primary` de la maquette : dégradé GEVA, texte blanc, `--shadow-sm` au repos,
   `--shadow-blue` au survol (pas de lift). */
.geva-btn--primary{background:var(--geva-gradient);color:#fff;box-shadow:var(--shadow-sm);border:none;}
.geva-btn--primary:hover{box-shadow:var(--shadow-blue);}
.geva-btn--solid{background:var(--geva-blue);color:#fff;border:none;}
.geva-btn--solid:hover{background:var(--color-action-hover);}
.geva-btn--secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border);box-shadow:var(--shadow-xs);}
.geva-btn--secondary:hover{background:var(--geva-slate-25);border-color:var(--color-border-strong);}
.geva-btn--ghost{background:transparent;color:var(--geva-blue);border:none;}
.geva-btn--ghost:hover{background:var(--geva-blue-soft);}
.geva-btn--danger{background:var(--geva-danger);color:#fff;border:none;}
.geva-btn--danger:hover{filter:brightness(.94);}

/* ---- Bouton icône seule ---- */
.geva-iconbtn{display:inline-flex;align-items:center;justify-content:center;
  width:40px;height:40px;border-radius:var(--radius-md);border:1px solid transparent;
  background:transparent;color:var(--color-icon);cursor:pointer;
  transition:background .16s,color .16s,border-color .16s,transform .08s;}
.geva-iconbtn:active{transform:scale(.94);}
.geva-iconbtn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-focus-ring);}
.geva-iconbtn svg{width:20px;height:20px;}
.geva-iconbtn--round{border-radius:var(--radius-pill);}
.geva-iconbtn--ghost:hover{background:var(--geva-slate-50);color:var(--color-text);}
.geva-iconbtn--soft{background:var(--geva-blue-soft);color:var(--geva-blue);}
.geva-iconbtn--solid{background:var(--geva-blue);color:#fff;}
.geva-iconbtn--solid:hover{background:var(--color-action-hover);}
.geva-iconbtn--outline{border-color:var(--color-border);background:var(--color-surface);}
.geva-iconbtn--outline:hover{background:var(--geva-slate-25);border-color:var(--color-border-strong);}
.geva-iconbtn--danger:hover{background:var(--geva-danger-soft);color:var(--geva-danger);}

/* ---- Champ texte ---- */
.geva-field{display:flex;flex-direction:column;gap:7px;}
.geva-field__label{font-family:var(--font-sans);font-size:13px;font-weight:var(--weight-semibold);color:var(--color-text);}
.geva-field__hint{font-family:var(--font-sans);font-size:12px;color:var(--color-text-muted);}
.geva-input{display:flex;align-items:center;gap:9px;height:44px;padding:0 14px;background:var(--color-surface);
  border:1px solid var(--color-border);border-radius:var(--radius-md);
  transition:border-color .16s,box-shadow .16s;}
.geva-input:focus-within{border-color:var(--geva-blue);box-shadow:0 0 0 3px var(--color-focus-ring);}
.geva-input svg{color:var(--color-text-subtle);}
.geva-input input{flex:1;min-width:0;border:none;outline:none;background:transparent;
  font-family:var(--font-sans);font-size:15px;color:var(--color-text);}
.geva-input input::placeholder{color:var(--color-text-subtle);}

/* ---- Badge statut ---- */
.geva-badge{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;
  font-family:var(--font-sans);font-size:12.5px;font-weight:var(--weight-semibold);
  line-height:1;border-radius:var(--radius-pill);white-space:nowrap;}
.geva-badge svg{width:14px;height:14px;}
.geva-badge--neutral{background:var(--geva-slate-100);color:var(--geva-slate-600);}
.geva-badge--blue{background:var(--geva-blue-soft);color:var(--geva-blue);}
.geva-badge--success{background:var(--geva-success-soft);color:var(--geva-success);}
.geva-badge--warning{background:var(--geva-warning-soft);color:var(--geva-warning);}
.geva-badge--danger{background:var(--geva-danger-soft);color:var(--geva-danger);}

/* ---- Bandeau / notice (message pleine largeur) ----
   À NE PAS confondre avec `.geva-badge` (pilule de statut EN LIGNE, 24px, texte tronqué). Le bandeau
   est un message d'information/confirmation/erreur pleine largeur qui va à la ligne. Reprend les mêmes
   couleurs SOFT que les badges → aucune régression visuelle en remplaçant l'ancien détournement
   `geva-badge … style="height:auto;padding…"`. Ajoutez votre marge via un style inline si besoin. */
.geva-notice{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--radius-md);
  font-family:var(--font-sans);font-size:13px;font-weight:var(--weight-medium);line-height:1.45;}
.geva-notice svg{width:16px;height:16px;flex:none;}
.geva-notice--success{background:var(--geva-success-soft);color:var(--geva-success);}
.geva-notice--warning{background:var(--geva-warning-soft);color:var(--geva-warning);}
.geva-notice--danger{background:var(--geva-danger-soft);color:var(--geva-danger);}
.geva-notice--info{background:var(--geva-blue-soft);color:var(--geva-blue);}
.geva-notice--neutral{background:var(--geva-slate-100);color:var(--geva-slate-600);}

/* ---- Carte ---- */
.geva-card{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-sm);padding:var(--space-6);}
.geva-card--hover{transition:box-shadow .18s,transform .18s,border-color .18s;}
.geva-card--hover:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px);border-color:var(--color-border);}

/* ---- Badge module ---- */
.geva-module-badge{border-radius:13px;box-shadow:var(--shadow-sm);display:inline-block;}

/* ---- Carte assistant ---- */
.geva-modcard{display:flex;flex-direction:column;gap:13px;text-decoration:none;color:inherit;padding:18px;}
.geva-modcard__title{font-size:15.5px;font-weight:var(--weight-bold);letter-spacing:-.01em;color:var(--color-text);}
.geva-modcard__desc{font-size:13px;color:var(--color-text-muted);line-height:1.4;}
.geva-modcard__foot{display:flex;align-items:center;justify-content:space-between;margin-top:auto;color:var(--accent,var(--geva-blue));}
.geva-modcard__stat{font-size:13px;color:var(--color-text-muted);}
.geva-modcard__stat b{color:var(--color-text);}

/* ---- Tabs ---- */
.geva-tabs{display:flex;gap:4px;border-bottom:1px solid var(--color-divider);}
.geva-tab{padding:10px 14px;font-family:var(--font-sans);font-size:14px;font-weight:var(--weight-semibold);
  color:var(--color-text-muted);background:none;border:none;border-bottom:2px solid transparent;
  cursor:pointer;margin-bottom:-1px;display:inline-flex;align-items:center;gap:7px;transition:color .15s,border-color .15s;}
.geva-tab:hover{color:var(--color-text);}
.geva-tab[aria-selected="true"]{color:var(--geva-blue);border-bottom-color:var(--geva-blue);}
.geva-tab__pill{font-size:11.5px;font-weight:var(--weight-bold);background:var(--geva-slate-100);color:var(--geva-slate-500);border-radius:var(--radius-pill);padding:1px 7px;}
.geva-tab[aria-selected="true"] .geva-tab__pill{background:var(--geva-blue-soft);color:var(--geva-blue);}

/* ---- Switch ---- */
.geva-switch{position:relative;display:inline-flex;align-items:center;gap:10px;cursor:pointer;}
.geva-switch input{position:absolute;opacity:0;width:0;height:0;}
.geva-switch__track{width:42px;height:24px;border-radius:var(--radius-pill);background:var(--geva-slate-200);position:relative;flex:none;transition:background .18s;}
.geva-switch__track::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:var(--shadow-xs);transition:left .18s;}
.geva-switch input:checked + .geva-switch__track{background:var(--geva-blue);}
.geva-switch input:checked + .geva-switch__track::after{left:20px;}
.geva-switch input:focus-visible + .geva-switch__track{box-shadow:0 0 0 3px var(--color-focus-ring);}
.geva-switch--sm .geva-switch__track{width:34px;height:20px;}
.geva-switch--sm .geva-switch__track::after{width:16px;height:16px;}
.geva-switch--sm input:checked + .geva-switch__track::after{left:16px;}
.geva-switch__label{font-size:14px;font-weight:var(--weight-medium);color:var(--color-text);}

/* ---- Stepper (indicateur d'étapes horizontal) — repris du composant navigation/Stepper ---- */
.geva-stepper{display:flex;align-items:center;gap:8px;}
.geva-step{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:var(--weight-semibold);color:var(--color-text-subtle);}
.geva-step__n{width:26px;height:26px;border-radius:50%;background:var(--geva-slate-100);color:var(--color-text-muted);
  display:flex;align-items:center;justify-content:center;font-size:13px;flex:none;}
.geva-step__n svg{width:15px;height:15px;}
.geva-step--active{color:var(--geva-blue);}
.geva-step--active .geva-step__n{background:var(--geva-blue);color:#fff;}
.geva-step--done{color:var(--color-text);}
.geva-step--done .geva-step__n{background:var(--geva-success);color:#fff;}
.geva-stepper__seg{flex:1;min-width:20px;height:2px;background:var(--color-divider);border-radius:2px;}
.geva-stepper__seg--done{background:var(--geva-success);}

/* ---- Pagination (liens page précédente/suivante + numéros) — composant navigation/Pagination.
   Version liens (rendu serveur) : styles partagés entre <a> et <button>. ---- */
.geva-pager{display:inline-flex;align-items:center;gap:4px;}
.geva-pager a,.geva-pager button,.geva-pager .gap{min-width:36px;height:36px;padding:0 8px;
  border-radius:var(--radius-sm);font-size:14px;font-weight:var(--weight-semibold);
  display:inline-flex;align-items:center;justify-content:center;text-decoration:none;}
.geva-pager a,.geva-pager button{border:1px solid var(--color-border);background:var(--color-surface);
  color:var(--color-text);cursor:pointer;transition:background .14s,border-color .14s,color .14s;}
.geva-pager a:hover,.geva-pager button:hover:not(:disabled){background:var(--geva-slate-25);border-color:var(--color-border-strong);}
.geva-pager a[aria-current="true"]{background:var(--geva-blue);border-color:var(--geva-blue);color:#fff;}
.geva-pager a[aria-disabled="true"],.geva-pager button:disabled{opacity:.45;pointer-events:none;}
.geva-pager svg{width:18px;height:18px;}
.geva-pager .gap{border:0;color:var(--color-text-subtle);min-width:24px;}

/* ---- Select natif stylé ---- */
.geva-nativeselect{position:relative;display:inline-block;min-width:200px;}
.geva-nativeselect select{appearance:none;-webkit-appearance:none;width:100%;height:44px;padding:0 38px 0 14px;
  background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);
  font-family:var(--font-sans);font-size:15px;color:var(--color-text);cursor:pointer;transition:border-color .15s,box-shadow .15s;}
.geva-nativeselect select:hover{border-color:var(--color-border-strong);}
.geva-nativeselect select:focus{outline:none;border-color:var(--geva-blue);box-shadow:0 0 0 3px var(--color-focus-ring);}
.geva-nativeselect__chev{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--color-text-subtle);pointer-events:none;}

/* ---- Modal ---- */
.geva-modal__scrim{position:fixed;inset:0;z-index:80;background:rgba(7,26,61,0.42);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;padding:24px;}
.geva-modal__scrim[hidden]{display:none;}
.geva-modal{background:var(--color-surface);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);width:100%;max-width:480px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;}
.geva-modal__head{display:flex;align-items:flex-start;gap:12px;padding:20px 22px 0;}
.geva-modal__title{font-size:18px;font-weight:var(--weight-bold);letter-spacing:-.01em;color:var(--color-text);}
.geva-modal__desc{font-size:14px;color:var(--color-text-muted);margin-top:3px;}
.geva-modal__x{margin-left:auto;width:34px;height:34px;border:none;background:none;border-radius:var(--radius-sm);color:var(--geva-slate-500);cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;}
.geva-modal__x:hover{background:var(--geva-slate-100);color:var(--color-text);}
.geva-modal__body{padding:14px 22px;font-size:14.5px;color:var(--geva-slate-700);line-height:1.5;overflow:auto;}
.geva-modal__foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 22px 22px;}

/* ---- Tooltip ---- */
.geva-tip{position:relative;display:inline-flex;}
.geva-tip__bubble{position:absolute;z-index:70;left:50%;transform:translateX(-50%) translateY(4px);background:var(--color-inverse);color:var(--color-on-inverse);font-size:12.5px;font-weight:var(--weight-medium);line-height:1.3;padding:6px 9px;border-radius:var(--radius-sm);white-space:nowrap;box-shadow:var(--shadow-md);opacity:0;pointer-events:none;transition:opacity .14s,transform .14s;}
.geva-tip__bubble::after{content:"";position:absolute;left:50%;width:8px;height:8px;background:var(--color-inverse);transform:translateX(-50%) rotate(45deg);}
.geva-tip--top .geva-tip__bubble{bottom:calc(100% + 8px);}
.geva-tip--top .geva-tip__bubble::after{top:100%;margin-top:-4px;}
.geva-tip--bottom .geva-tip__bubble{top:calc(100% + 8px);}
.geva-tip--bottom .geva-tip__bubble::after{bottom:100%;margin-bottom:-4px;}
.geva-tip:hover .geva-tip__bubble,.geva-tip:focus-within .geva-tip__bubble{opacity:1;transform:translateX(-50%) translateY(0);}

/* ---- Toast ---- */
.geva-toaster{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:90;display:flex;flex-direction:column;gap:10px;align-items:center;pointer-events:none;}
.geva-toast{display:flex;align-items:center;gap:10px;min-width:240px;max-width:420px;padding:12px 16px;border-radius:var(--radius-md);background:var(--color-inverse);color:var(--color-on-inverse);font-size:14px;font-weight:var(--weight-medium);box-shadow:var(--shadow-xl);pointer-events:auto;}
.geva-toast svg{width:18px;height:18px;flex:none;}
.geva-toast--success svg{color:var(--geva-success);}
.geva-toast--danger svg{color:#FF8B8B;}
.geva-toast--info svg{color:var(--geva-blue-vivid);}
.geva-toast__msg{flex:1;}
