/* Form validation error styling */
.invalid-feedback {
  display: none;
  width: 100%;
  margin-top: 0.25rem;
  font-size: 0.875em;
  color: #dc3545;
}

/* Make invalid-feedback visible when sibling has is-invalid class */
.is-invalid + .invalid-feedback,
.is-invalid ~ .invalid-feedback {
  display: block !important;
}

.form-control.is-invalid,
.was-validated .form-control:invalid {
  border-color: #dc3545;
  padding-right: calc(1.5em + 0.75rem);
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: right calc(0.375em + 0.1875rem) center;
  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}

.form-control.is-invalid:focus, 
.was-validated .form-control:invalid:focus {
  border-color: #dc3545;
  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
}

.form-check-input.is-invalid,
.was-validated .form-check-input:invalid {
  border-color: #dc3545;
}

.form-check-input.is-invalid:focus,
.was-validated .form-check-input:invalid:focus {
  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
}

.form-check-input.is-invalid ~ .form-check-label,
.was-validated .form-check-input:invalid ~ .form-check-label {
  color: #dc3545;
}

.form-check-group.is-invalid {
  color: #dc3545;
}

.form-select.is-invalid,
.was-validated .form-select:invalid {
  border-color: #dc3545;
}

/* For RTL support */
html[dir="rtl"] .form-control.is-invalid,
html[dir="rtl"] .was-validated .form-control:invalid {
  padding-right: 0.75rem;
  padding-left: calc(1.5em + 0.75rem);
  background-position: left calc(0.375em + 0.1875rem) center;
}

/* RTL Form Validation */
html[dir="rtl"] .form-check-input {
  margin-left: 0;
  margin-right: -1.25rem;
}

html[dir="rtl"] .form-check {
  padding-left: 0;
  padding-right: 1.25rem;
}

html[dir="rtl"] .has-validation-error {
  border-left: none;
  border-right: 3px solid #dc3545;
  padding-left: 0;
  padding-right: 10px;
}

.field-error-highlight {
  animation: highlight-error 1s ease-in-out;
}

@keyframes highlight-error {
  0% { background-color: rgba(220, 53, 69, 0.2); }
  100% { background-color: transparent; }
}

/* Checkbox group validation */
.has-validation-error {
  padding: 5px 10px;
  border-radius: 4px;
  border-left: 3px solid #dc3545;
  background-color: rgba(220, 53, 69, 0.05);
}

/* Error shake animation */
.form-control.is-invalid,
.form-check-input.is-invalid,
.custom-file-input.is-invalid,
.was-validated .form-control:invalid,
.was-validated .form-check-input:invalid,
.was-validated .custom-file-input:invalid {
  animation: shake 0.5s;
  border-color: #dc3545 !important;
}

/* Force display of feedback */
.form-control.is-invalid + .invalid-feedback,
.form-control.is-invalid ~ .invalid-feedback,
input.is-invalid + .invalid-feedback,
input.is-invalid ~ .invalid-feedback,
select.is-invalid + .invalid-feedback,
select.is-invalid ~ .invalid-feedback,
textarea.is-invalid + .invalid-feedback,
textarea.is-invalid ~ .invalid-feedback {
  display: block !important;
}

/* Error shake animation */
@keyframes shake {
  0% { margin-left: 0; }
  25% { margin-left: 5px; }
  50% { margin-left: 0; }
  75% { margin-left: -5px; }
  100% { margin-left: 0; }
}

/* RTL shake animation */
.rtl .form-control.is-invalid,
.rtl .form-check-input.is-invalid,
.rtl .custom-file-input.is-invalid,
[dir="rtl"] .form-control.is-invalid,
[dir="rtl"] .form-check-input.is-invalid,
[dir="rtl"] .custom-file-input.is-invalid {
  animation: shakeRtl 0.5s;
}

@keyframes shakeRtl {
  0% { margin-right: 0; }
  25% { margin-right: 5px; }
  50% { margin-right: 0; }
  75% { margin-right: -5px; }
  100% { margin-right: 0; }
}