/* ============================================
   Validation Feedback Styles
   Real-time form validation visual feedback
   ============================================ */

/* ============================================
   Validation Feedback Container
   ============================================ */
.validation-feedback {
    display: flex;
    align-items: center;
    gap: var(--spacing-1);
    margin-top: var(--spacing-1);
    font-size: var(--font-size-sm);
    line-height: var(--line-height-normal);
    min-height: 1.5em;
    opacity: 0;
    transform: translateY(-4px);
    animation: validationFadeIn var(--transition-base) forwards;
}

.validation-feedback.hidden {
    display: none;
}

/* ============================================
   Validation States
   ============================================ */

/* Success State - Green Checkmark */
.validation-success {
    color: var(--color-success);
}

.validation-success .validation-icon::before {
    content: "\F26B"; /* Bootstrap Icons check-circle-fill */
    font-family: 'bootstrap-icons';
    font-size: 0.875em;
}

/* Error State - Red X */
.validation-error {
    color: var(--color-danger);
}

.validation-error .validation-icon::before {
    content: "\F62A"; /* Bootstrap Icons x-circle-fill */
    font-family: 'bootstrap-icons';
    font-size: 0.875em;
}

/* Pending/Loading State */
.validation-pending {
    color: var(--text-muted);
}

.validation-pending .validation-icon {
    display: inline-block;
    width: 0.875em;
    height: 0.875em;
    border: 2px solid var(--color-gray-300);
    border-top-color: var(--color-primary);
    border-radius: 50%;
    animation: validationSpinner 0.75s linear infinite;
}

/* Warning State - Amber/Yellow */
.validation-warning {
    color: var(--color-warning-dark);
}

.validation-warning .validation-icon::before {
    content: "\F330"; /* Bootstrap Icons exclamation-triangle-fill */
    font-family: 'bootstrap-icons';
    font-size: 0.875em;
}

/* ============================================
   Input State Classes
   ============================================ */

/* Valid Input State */
.input-valid,
input.input-valid,
.form-control.input-valid {
    border-color: var(--color-success) !important;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%232d5016' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%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);
    padding-right: calc(1.5em + 0.75rem);
}

.input-valid:focus,
input.input-valid:focus,
.form-control.input-valid:focus {
    border-color: var(--color-success) !important;
    box-shadow: 0 0 0 3px rgba(45, 80, 22, 0.15);
}

/* Invalid Input State */
.input-invalid,
input.input-invalid,
.form-control.input-invalid {
    border-color: var(--color-danger) !important;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%238b0000'%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='%238b0000' 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);
    padding-right: calc(1.5em + 0.75rem);
}

.input-invalid:focus,
input.input-invalid:focus,
.form-control.input-invalid:focus {
    border-color: var(--color-danger) !important;
    box-shadow: 0 0 0 3px rgba(139, 0, 0, 0.15);
}

/* Validating/Pending Input State */
.input-validating,
input.input-validating,
.form-control.input-validating {
    border-color: var(--color-gray-400) !important;
}

.input-validating:focus,
input.input-validating:focus,
.form-control.input-validating:focus {
    border-color: var(--color-primary) !important;
    box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);
}

/* ============================================
   Validation Icon Container
   ============================================ */
.validation-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* ============================================
   Validation Message Text
   ============================================ */
.validation-text {
    flex: 1;
}

/* ============================================
   Input Group Integration
   For inputs with spinners inside input-group
   ============================================ */
.input-group .validation-spinner {
    display: flex;
    align-items: center;
    padding: var(--spacing-2) var(--spacing-3);
    background-color: var(--bg-primary);
    border: 1px solid var(--border-color);
    border-left: none;
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
}

.input-group .validation-spinner .spinner-border-sm {
    width: 1rem;
    height: 1rem;
    border-width: 0.15em;
}

/* ============================================
   Inline Validation Indicator
   Small icon that appears inside or after input
   ============================================ */
.validation-indicator {
    position: absolute;
    right: var(--spacing-3);
    top: 50%;
    transform: translateY(-50%);
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;
}

.validation-indicator-success {
    color: var(--color-success);
}

.validation-indicator-error {
    color: var(--color-danger);
}

.validation-indicator-pending {
    color: var(--text-muted);
}

/* ============================================
   Password Strength Indicator
   ============================================ */
.password-requirements {
    margin-top: var(--spacing-2);
    padding: var(--spacing-2) var(--spacing-3);
    background-color: var(--bg-tertiary);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
}

.password-requirement {
    display: flex;
    align-items: center;
    gap: var(--spacing-2);
    padding: var(--spacing-1) 0;
    color: var(--text-muted);
    transition: color var(--transition-fast);
}

.password-requirement.met {
    color: var(--color-success);
}

.password-requirement-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1em;
    height: 1em;
    flex-shrink: 0;
}

.password-requirement-icon::before {
    content: "\F284"; /* Bootstrap Icons circle */
    font-family: 'bootstrap-icons';
    font-size: 0.5em;
}

.password-requirement.met .password-requirement-icon::before {
    content: "\F26B"; /* Bootstrap Icons check-circle-fill */
    font-size: 0.875em;
}

/* Password Strength Bar */
.password-strength-bar {
    height: 4px;
    background-color: var(--bg-tertiary);
    border-radius: var(--radius-full);
    overflow: hidden;
    margin-top: var(--spacing-2);
}

.password-strength-fill {
    height: 100%;
    border-radius: var(--radius-full);
    transition: width var(--transition-base), background-color var(--transition-base);
}

.password-strength-fill.weak {
    width: 25%;
    background-color: var(--color-danger);
}

.password-strength-fill.fair {
    width: 50%;
    background-color: var(--color-warning);
}

.password-strength-fill.good {
    width: 75%;
    background-color: var(--color-info);
}

.password-strength-fill.strong {
    width: 100%;
    background-color: var(--color-success);
}

/* ============================================
   Character Counter
   ============================================ */
.char-counter {
    font-size: var(--font-size-xs);
    color: var(--text-muted);
    text-align: right;
    margin-top: var(--spacing-1);
}

.char-counter.warning {
    color: var(--color-warning-dark);
}

.char-counter.danger {
    color: var(--color-danger);
}

/* ============================================
   Field Wrapper with Validation
   ============================================ */
.validated-field {
    position: relative;
}

.validated-field .form-control {
    transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

/* ============================================
   Animations
   ============================================ */

/* Fade In Animation */
@keyframes validationFadeIn {
    from {
        opacity: 0;
        transform: translateY(-4px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Fade Out Animation */
@keyframes validationFadeOut {
    from {
        opacity: 1;
        transform: translateY(0);
    }
    to {
        opacity: 0;
        transform: translateY(-4px);
    }
}

/* Spinner Animation */
@keyframes validationSpinner {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

/* Shake Animation for Invalid Input */
@keyframes validationShake {
    0%, 100% {
        transform: translateX(0);
    }
    10%, 30%, 50%, 70%, 90% {
        transform: translateX(-4px);
    }
    20%, 40%, 60%, 80% {
        transform: translateX(4px);
    }
}

.input-shake {
    animation: validationShake 0.5s ease-in-out;
}

/* Pulse Animation for Success */
@keyframes validationPulse {
    0% {
        transform: scale(1);
    }
    50% {
        transform: scale(1.05);
    }
    100% {
        transform: scale(1);
    }
}

.validation-success .validation-icon {
    animation: validationPulse 0.3s ease-in-out;
}

/* ============================================
   Form Group with Validation Styling
   ============================================ */
.form-group-validated {
    position: relative;
    margin-bottom: var(--spacing-4);
}

.form-group-validated .form-label {
    display: flex;
    align-items: center;
    gap: var(--spacing-2);
}

.form-group-validated .required-indicator {
    color: var(--color-danger);
    font-weight: var(--font-weight-normal);
}

/* ============================================
   Accessibility - Reduced Motion
   ============================================ */
@media (prefers-reduced-motion: reduce) {
    .validation-feedback {
        animation: none;
        opacity: 1;
        transform: none;
    }

    .validation-pending .validation-icon {
        animation: none;
    }

    .input-shake {
        animation: none;
    }

    .validation-success .validation-icon {
        animation: none;
    }

    .password-strength-fill {
        transition: none;
    }
}

/* ============================================
   Mobile Responsive Adjustments
   ============================================ */
@media (max-width: 576px) {
    .validation-feedback {
        font-size: var(--font-size-xs);
    }

    .password-requirements {
        padding: var(--spacing-2);
    }

    .password-requirement {
        font-size: var(--font-size-xs);
    }
}
