/* ============================================================================
   Client-side validation visual feedback (2026)
   Paired with wwwroot/js/validation.js
   ============================================================================ */

/* Inline field error message */
.field-error-inline {
    display: none;
    color: var(--danger-600);
    font-size: 0.75rem;
    line-height: 1.25;
    margin-top: 0.25rem;
    padding: 0.25rem 0.5rem;
    background: var(--danger-50);
    border-left: 3px solid var(--danger-500);
    border-radius: 4px;
    animation: emsFieldErrorFade 0.15s ease-out;
}

.field-error-inline.show {
    display: block;
}

@keyframes emsFieldErrorFade {
    from { opacity: 0; transform: translateY(-2px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* Invalid field (red ring) */
.form-input.is-invalid,
.form-select.is-invalid,
.form-textarea.is-invalid {
    border-color: var(--danger-500);
    background-color: var(--danger-50);
    box-shadow: 0 0 0 3px rgba(225, 29, 72, 0.08);
}

.form-input.is-invalid:focus,
.form-select.is-invalid:focus,
.form-textarea.is-invalid:focus {
    box-shadow: 0 0 0 3px rgba(225, 29, 72, 0.15);
    outline: none;
}

/* Valid field (green subtle ring, only when user has typed) */
.form-input.is-valid,
.form-select.is-valid,
.form-textarea.is-valid {
    border-color: var(--success-500);
}

.form-input.is-valid:focus,
.form-select.is-valid:focus {
    box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.15);
    outline: none;
}

/* Inline helper hint (always visible below certain fields) */
.field-hint {
    font-size: 0.7rem;
    color: var(--text-tertiary);
    margin-top: 0.2rem;
    font-style: italic;
}

/* Readonly auto-generated code field */
.form-input[readonly] {
    background: var(--bg-sunken);
    color: var(--primary-700);
    font-weight: 600;
    cursor: not-allowed;
}

/* Required asterisk (apply via .required span in views) */
span.required {
    color: var(--danger-500);
    font-weight: 700;
    margin-left: 2px;
}
