/* ------------------------------------------------------------
   states.css — génération en cours, erreur, vide (lot 01)
   Référence : handoffs/01-composants/screenshots/07-etats-systeme.png
   ------------------------------------------------------------ */

.state-generating {
  aspect-ratio: 16 / 10;
  border-radius: var(--r-md);
  background: var(--tint);
  display: grid;
  place-items: center;
  text-align: center;
  padding: var(--sp-4);
  gap: var(--sp-2);
}
.state-generating__spinner {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 3px solid var(--accent);
  border-top-color: transparent;
  animation: state-spin .9s linear infinite;
}
.state-generating h3 { font-family: var(--font-display); font-size: 19px; }
.state-generating__eta { font-size: 14px; color: var(--ink); }

.state-generating__help {
  font-size: 13px;
  color: var(--muted);
  max-width: 34em;
  margin: var(--sp-2) auto 0;
}
.state-generating__recap {
  font-size: 13px;
  color: var(--muted);
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  justify-content: center;
  margin-top: var(--sp-2);
}

/* Posé dans une bulle de fil ou une scène (lot 07) : pas de cadre 16:10,
   padding réduit, titre plus discret. */
.state-generating--inline { aspect-ratio: auto; padding: var(--sp-3); }
.state-generating--inline h3 { font-size: 16px; }

@keyframes state-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .state-generating__spinner { animation-duration: .001ms; }
}

/* ---------- Erreur de génération ---------- */
.state-error { display: grid; gap: var(--sp-2); text-align: center; padding: var(--sp-4); }
.state-error .icon { width: 28px; height: 28px; color: var(--error); margin: 0 auto; }
.state-error h3 { color: var(--error); font-size: 17px; font-weight: 600; }
.state-error__cause { font-size: 14px; color: var(--ink); }
.state-error__code {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 11px;
  color: var(--muted);
}
.state-error__actions {
  display: flex;
  gap: var(--sp-2);
  justify-content: center;
  flex-wrap: wrap;
  margin-top: var(--sp-2);
}

/* Posé dans une bulle de fil ou une scène (lot 07). */
.state-error--inline { padding: var(--sp-3); }

/* ---------- Vide ---------- */
.state-empty {
  display: grid;
  justify-items: center;
  gap: var(--sp-2);
  text-align: center;
  padding: var(--sp-6) var(--sp-4);
}
.state-empty__icon {
  width: 48px;
  height: 48px;
  border-radius: var(--r-sm);
  background: var(--tint);
  color: var(--ink);
  display: grid;
  place-items: center;
}
.state-empty h3 { font-family: var(--font-display); font-size: 21px; }
.state-empty p { font-size: 14px; color: var(--muted); max-width: 30em; }

/* ---------- Bandeau d'erreur global (contenu en cache conservé dessous) ---------- */
.banner-error {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 14px 4px;
  border-radius: var(--r-md);
  background: var(--error-bg);
}
.banner-error .icon { width: 20px; height: 20px; flex: none; color: var(--error); margin-top: 1px; }
.banner-error__body { flex: 1; padding-bottom: 12px; display: grid; gap: 4px; }
.banner-error__title { font-size: 14px; font-weight: 600; color: var(--error); }
.banner-error__detail { font-size: 13px; color: var(--ink); }
.banner-error__retry {
  height: 44px;
  margin: -10px -8px 0 0;
  padding: 0 8px;
  background: transparent;
  border: 0;
  color: var(--accent);
  font-family: var(--font-text);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}
.state-empty .btn { margin-top: var(--sp-2); }
