COMPOSANTS

Boutons

Variantes

Cinq variantes couvrent tous les cas. Ne jamais créer de nouvelle variante sans raison forte.

<!-- CTA principal — max 1 par vue -->
<button class="btn btn-primary">Créer une commande</button>

<!-- Action secondaire (outline vert) -->
<button class="btn btn-outline btn-primary">Modifier le devis</button>

<!-- Action tertiaire, navigation, annulation -->
<button class="btn btn-ghost">Annuler</button>

<!-- Action destructive uniquement — toujours avec modal de confirmation -->
<button class="btn btn-error">Supprimer</button>

<!-- Fond foncé (navy) — exports, actions neutres -->
<button class="btn btn-neutral">Exporter</button>
Maximum 1 btn-primary par vue — le CTA doit ressortir seul.
Ne jamais utiliser btn-error sans modal de confirmation.

btn-secondary

Bouton secondaire à bordure navy, utilisé dans les interfaces admin quand le vert primaire serait trop présent. Fond blanc, bordure 1.5px solid navy, texte navy. Hover : fond navy-50.

<button class="btn btn-secondary">Modifier</button>
Utiliser dans les apps admin où le vert primary serait trop prominent pour des actions secondaires.

Tailles

La taille par défaut couvre presque tous les cas. btn-sm pour les tableaux. btn-lg uniquement dans les sections héros.

btn-lg
btn (défaut)
btn-sm
btn-xs
<button class="btn btn-primary btn-lg">Découvrir le catalogue</button>   <!-- héros uniquement -->
<button class="btn btn-primary">Créer un dossier</button>               <!-- défaut -->
<button class="btn btn-primary btn-sm">Traiter</button>                 <!-- tableaux, layouts denses -->
<button class="btn btn-outline btn-primary btn-xs">Voir détail</button> <!-- tableaux compacts -->

États

Les états désactivé et chargement sont obtenus par l'attribut disabled. L'état focus est géré automatiquement par le navigateur.

Normal
Désactivé
Chargement
Focus (auto)
<!-- Normal -->
<button class="btn btn-primary">Enregistrer</button>

<!-- Désactivé (champ manquant, permissions insuffisantes) -->
<button class="btn btn-primary" disabled>Enregistrer</button>

<!-- Chargement — toujours désactiver pendant la requête -->
<button class="btn btn-primary" disabled>
  <span class="loading loading-spinner loading-sm"></span>
  Enregistrement...
</button>

Avec icône

L'icône précède toujours le texte. Pour les boutons icon-only, ajouter un attribut title pour l'accessibilité.

<!-- Bouton avec icône avant le texte -->
<button class="btn btn-primary">
  <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
  </svg>
  Ajouter
</button>

<!-- Icon-only (ghost, p-2 pour padding carré, title obligatoire) -->
<button class="btn btn-ghost btn-sm p-2" title="Options">
  <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 5v.01M12 12v.01M12 19v.01"/>
  </svg>
</button>
Libellé : verbe + nom. "Créer un dossier", "Supprimer la commande", "Exporter le rapport".
Jamais "Soumettre", "Valider", "OK", "Confirmer" seuls — toujours un libellé explicite.
Jamais <button> pour la navigation — utiliser <a>.