/* ============================================================
   Utilitaires et petites helpers.
   ============================================================ */

.stack > * + * { margin-top: 1rem; }
.stack-sm > * + * { margin-top: 0.6rem; }

.text-center { text-align: center; }
.muted { color: var(--text-muted); }
.faint { color: var(--text-faint); }

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.mt-0 { margin-top: 0 !important; }
.mb-0 { margin-bottom: 0 !important; }
.mt-1 { margin-top: 1rem; }

.row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.75rem;
}
.between { justify-content: space-between; }

/* Icônes */
.icon { width: 20px; height: 20px; flex-shrink: 0; }

/* Motif discret pour la section héros */
.hero-sub {
  color: var(--text-muted);
  max-width: 560px;
  margin: 0.2rem 0 1.6rem;
  font-size: 1.05rem;
}

/* Héros de la page d'accueil */
.hero {
  display: grid;
  gap: 1.75rem;
  align-items: center;
  margin-bottom: 1.5rem;
}
.hero__media { max-width: 320px; margin-inline: auto; }
.hero__media img {
  width: 100%;
  height: auto;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow);
}
@media (min-width: 760px) {
  .hero { grid-template-columns: 1.15fr 0.85fr; }
  .hero__media { max-width: none; margin: 0; }
}

.hr { border: 0; border-top: 1px solid var(--border); margin: 1.25rem 0; }

/* Animation d'apparition */
.fade-in { animation: fadeIn var(--track) both; }
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
}