/**
 * Styles pour la validation des formulaires
 * Version: 2.0.0
 */

/* Champs en erreur */
.form-group input.error,
.form-group select.error,
.form-group textarea.error {
  border-color: var(--color-danger, #dc3545);
  background-color: var(--color-danger-bg, #f8d7da);
  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
}

.form-group input.error:focus,
.form-group select.error:focus,
.form-group textarea.error:focus {
  border-color: var(--color-danger, #dc3545);
  box-shadow: 0 0 0 0.3rem rgba(220, 53, 69, 0.25);
}

/* Messages d'erreur */
.error-message {
  color: var(--color-danger, #dc3545);
  font-size: 0.85em;
  margin-top: 4px;
  display: block;
  font-weight: 500;
}

.error-message::before {
  content: "⚠ ";
}

/* Animation d'erreur (shake) */
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}

.form-group.shake {
  animation: shake 0.5s ease-in-out;
}

/* Champs valides (optionnel) */
.form-group input.valid,
.form-group select.valid,
.form-group textarea.valid {
  border-color: var(--color-success, #28a745);
}

.form-group input.valid:focus,
.form-group select.valid:focus,
.form-group textarea.valid:focus {
  border-color: var(--color-success, #28a745);
  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
}

/* Indicateur de champ requis */
.form-group label.required::after {
  content: " *";
  color: var(--color-danger, #dc3545);
  font-weight: bold;
}

/* Tooltip d'aide */
.form-help {
  display: block;
  font-size: 0.85em;
  color: var(--color-text-secondary, #6c757d);
  margin-top: 4px;
}

/* État de chargement du formulaire */
.form.loading {
  opacity: 0.6;
  pointer-events: none;
}

.form.loading::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 40px;
  height: 40px;
  margin: -20px 0 0 -20px;
  border: 4px solid var(--color-border-primary, #dee2e6);
  border-top-color: var(--color-primary, #007bff);
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* Résumé des erreurs (en haut du formulaire) */
.form-errors-summary {
  background-color: var(--color-danger-bg, #f8d7da);
  border: 1px solid var(--color-danger, #dc3545);
  border-radius: var(--border-radius, 4px);
  padding: var(--spacing-md, 16px);
  margin-bottom: var(--spacing-md, 16px);
}

.form-errors-summary h4 {
  color: var(--color-danger, #dc3545);
  margin: 0 0 8px 0;
  font-size: 1em;
}

.form-errors-summary ul {
  margin: 0;
  padding-left: 20px;
}

.form-errors-summary li {
  color: var(--color-danger, #dc3545);
  margin-bottom: 4px;
}

/* Succès de validation */
.form-success-message {
  background-color: var(--color-success-bg, #d4edda);
  border: 1px solid var(--color-success, #28a745);
  border-radius: var(--border-radius, 4px);
  padding: var(--spacing-md, 16px);
  margin-bottom: var(--spacing-md, 16px);
  color: var(--color-success, #28a745);
}

.form-success-message::before {
  content: "✓ ";
  font-weight: bold;
}

/* Responsive */
@media (max-width: 768px) {
  .error-message {
    font-size: 0.8em;
  }
  
  .form-errors-summary {
    padding: var(--spacing-sm, 8px);
  }
}

/* Accessibilité */
.form-group input[aria-invalid="true"],
.form-group select[aria-invalid="true"],
.form-group textarea[aria-invalid="true"] {
  border-color: var(--color-danger, #dc3545);
}

/* Focus visible pour l'accessibilité */
.form-group input:focus-visible,
.form-group select:focus-visible,
.form-group textarea:focus-visible {
  outline: 2px solid var(--color-primary, #007bff);
  outline-offset: 2px;
}
