/* ==========================================================================
   Boutons Transport Flexible — un seul système pour le CRM, l’espace client,
   le site public, les documents et les modales.

   Sémantique (contrastes texte/fond conformes WCAG AA, ≥ 4,5:1) :
   .btn-primary            action principale     blanc sur bleu #004aad  (≈ 8,9:1)
   .btn-outline-primary    action secondaire     bleu sur blanc          (≈ 8,9:1)
   .btn-success            confirmation          blanc sur vert #2a7a1c  (≈ 5,4:1)
   .btn-danger             suppression           blanc sur rouge #c0362c (≈ 5,6:1)
   .btn-outline-secondary  action neutre         encre sur blanc, bordure grise
   .btn-link               action texte / retour
   Le vert clair #7ed957 reste un accent : jamais de texte blanc dessus.

   Les anciennes variantes Bootstrap encore présentes dans des vues (info,
   warning, light, dark) sont ramenées sur ces rôles au lieu d’introduire
   d’autres couleurs. Dépend de tf-palette.css.
   ========================================================================== */

.btn {
  --tf-btn-h: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  min-height: var(--tf-btn-h);
  padding: 0.45rem 1rem;
  border-width: 1px;
  border-radius: var(--tf-radius-sm, 6px);
  font-family: inherit;
  font-size: 0.95rem;
  font-weight: 600;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.15s, border-color 0.15s, color 0.15s, box-shadow 0.15s;
}
.btn-sm { --tf-btn-h: 32px; padding: 0.3rem 0.7rem; font-size: 0.85rem; }
.btn-lg { --tf-btn-h: 48px; padding: 0.6rem 1.3rem; font-size: 1.05rem; }
.btn > .bi, .btn > i { line-height: 1; }
.btn .me-1, .btn .ms-1 { margin: 0 !important; }

.btn:focus-visible {
  outline: 3px solid rgba(0, 74, 173, 0.45);
  outline-offset: 2px;
  box-shadow: none;
}
.btn-danger:focus-visible, .btn-outline-danger:focus-visible { outline-color: rgba(192, 54, 44, 0.5); }

.btn:disabled, .btn.disabled, fieldset:disabled .btn {
  opacity: 0.55;
  cursor: not-allowed;
  pointer-events: none;
}

/* État chargement : le libellé reste lisible, un indicateur tourne avant lui. */
.btn.is-loading { pointer-events: none; cursor: progress; opacity: 0.85; }
.btn.is-loading::before {
  content: "";
  width: 1em;
  height: 1em;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
  animation: tf-btn-spin 0.7s linear infinite;
}
@keyframes tf-btn-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .btn.is-loading::before { animation-duration: 2s; } }

/* ---- Action principale --------------------------------------------------- */
.btn-primary {
  --bs-btn-color: #fff; --bs-btn-bg: var(--tf-blue); --bs-btn-border-color: var(--tf-blue);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: var(--tf-blue-dark); --bs-btn-hover-border-color: var(--tf-blue-dark);
  --bs-btn-active-color: #fff; --bs-btn-active-bg: var(--tf-blue-dark); --bs-btn-active-border-color: var(--tf-blue-dark);
  --bs-btn-disabled-color: #fff; --bs-btn-disabled-bg: var(--tf-blue); --bs-btn-disabled-border-color: var(--tf-blue);
}

/* ---- Action secondaire (et anciennes variantes info / warning) ------------ */
.btn-outline-primary, .btn-info, .btn-warning, .btn-outline-info, .btn-outline-warning {
  --bs-btn-color: var(--tf-blue); --bs-btn-bg: #fff; --bs-btn-border-color: var(--tf-blue);
  --bs-btn-hover-color: var(--tf-blue-dark); --bs-btn-hover-bg: var(--tf-blue-soft); --bs-btn-hover-border-color: var(--tf-blue-dark);
  --bs-btn-active-color: var(--tf-blue-dark); --bs-btn-active-bg: var(--tf-blue-soft); --bs-btn-active-border-color: var(--tf-blue-dark);
  --bs-btn-disabled-color: var(--tf-blue); --bs-btn-disabled-bg: #fff; --bs-btn-disabled-border-color: var(--tf-blue);
}

/* ---- Confirmation -------------------------------------------------------- */
.btn-success {
  --bs-btn-color: #fff; --bs-btn-bg: var(--tf-green-dark); --bs-btn-border-color: var(--tf-green-dark);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: #1f5c15; --bs-btn-hover-border-color: #1f5c15;
  --bs-btn-active-color: #fff; --bs-btn-active-bg: #1f5c15; --bs-btn-active-border-color: #1f5c15;
  --bs-btn-disabled-color: #fff; --bs-btn-disabled-bg: var(--tf-green-dark); --bs-btn-disabled-border-color: var(--tf-green-dark);
}
.btn-outline-success {
  --bs-btn-color: var(--tf-green-dark); --bs-btn-bg: #fff; --bs-btn-border-color: var(--tf-green-dark);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: var(--tf-green-dark); --bs-btn-hover-border-color: var(--tf-green-dark);
  --bs-btn-active-color: #fff; --bs-btn-active-bg: #1f5c15; --bs-btn-active-border-color: #1f5c15;
}

/* ---- Suppression --------------------------------------------------------- */
.btn-danger {
  --bs-btn-color: #fff; --bs-btn-bg: var(--tf-danger); --bs-btn-border-color: var(--tf-danger);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: #9f2b22; --bs-btn-hover-border-color: #9f2b22;
  --bs-btn-active-color: #fff; --bs-btn-active-bg: #9f2b22; --bs-btn-active-border-color: #9f2b22;
  --bs-btn-disabled-color: #fff; --bs-btn-disabled-bg: var(--tf-danger); --bs-btn-disabled-border-color: var(--tf-danger);
}
.btn-outline-danger {
  --bs-btn-color: var(--tf-danger); --bs-btn-bg: #fff; --bs-btn-border-color: var(--tf-danger);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: var(--tf-danger); --bs-btn-hover-border-color: var(--tf-danger);
  --bs-btn-active-color: #fff; --bs-btn-active-bg: #9f2b22; --bs-btn-active-border-color: #9f2b22;
}

/* ---- Action neutre (et anciennes variantes light / dark) ----------------- */
.btn-outline-secondary, .btn-light, .btn-outline-dark, .btn-outline-light {
  --bs-btn-color: var(--tf-ink); --bs-btn-bg: #fff; --bs-btn-border-color: #b9c3d3;
  --bs-btn-hover-color: var(--tf-ink); --bs-btn-hover-bg: var(--tf-neutral-soft); --bs-btn-hover-border-color: #9aa6b8;
  --bs-btn-active-color: var(--tf-ink); --bs-btn-active-bg: var(--tf-neutral-soft); --bs-btn-active-border-color: #9aa6b8;
  --bs-btn-disabled-color: var(--tf-ink); --bs-btn-disabled-bg: #fff; --bs-btn-disabled-border-color: #b9c3d3;
}
.btn-secondary, .btn-dark {
  --bs-btn-color: #fff; --bs-btn-bg: #4a5568; --bs-btn-border-color: #4a5568;
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: #343d4d; --bs-btn-hover-border-color: #343d4d;
  --bs-btn-active-color: #fff; --bs-btn-active-bg: #343d4d; --bs-btn-active-border-color: #343d4d;
}

/* ---- Action texte / retour ----------------------------------------------- */
.btn-link {
  --bs-btn-color: var(--tf-blue); --bs-btn-hover-color: var(--tf-blue-dark); --bs-btn-active-color: var(--tf-blue-dark);
  min-height: 0; padding-left: 0.25rem; padding-right: 0.25rem; font-weight: 600; text-decoration: none;
}
.btn-link:hover { text-decoration: underline; }

/* ---- Liens du site public ayant l’apparence d’un bouton ------------------ */
#navbar .get-a-quote, .navbar .get-a-quote, .navbar .get-a-quote:focus {
  background: var(--tf-blue) !important; color: #fff !important; border-radius: var(--tf-radius-sm, 6px) !important; font-weight: 600;
}
#navbar .get-a-quote:hover, .navbar .get-a-quote:hover { background: var(--tf-blue-dark) !important; }
#navbar .cta-btn, .call-to-action .cta-btn { border-radius: var(--tf-radius-sm, 6px) !important; font-weight: 600; }
.call-to-action .cta-btn:hover { background: var(--tf-blue) !important; border-color: var(--tf-blue) !important; }
.hero .form-search .btn { min-height: 48px; padding-left: 1.3rem; padding-right: 1.3rem; }

/* ---- Modales SweetAlert2 ------------------------------------------------- */
.swal2-styled { border-radius: var(--tf-radius-sm, 6px) !important; font-weight: 600 !important; min-height: 40px; }
.swal2-styled:focus-visible { outline: 3px solid rgba(0, 74, 173, 0.45) !important; outline-offset: 2px; box-shadow: none !important; }

/* ---- Tactile : cibles de 44 px minimum ----------------------------------- */
@media (max-width: 575.98px), (pointer: coarse) {
  .btn { --tf-btn-h: 44px; }
  .btn-sm { --tf-btn-h: 38px; }
}

@media print {
  .btn { display: none !important; }
}
