/* =====================================================================
   Ortak form validation UI — R3-03
   Sadece global tasarım token'larını kullanır (tx-theme.css / tx-typography.css).
   Tasarım dilini değiştirmez; yalnızca hata/durum görünümü ekler.
   ===================================================================== */

/* Alan altı hata mesajı */
.ts-field-error {
    display: none;
    margin-top: 0.35rem;
    color: var(--tx-error);
    font-size: var(--tx-text-xs);
    font-weight: var(--tx-font-medium);
    font-family: var(--tx-font-sans);
    line-height: 1.4;
}

.ts-field-error.is-visible {
    display: block;
}

/* Geçersiz alan vurgusu */
[aria-invalid="true"],
.is-invalid {
    border-color: var(--tx-error) !important;
}

[aria-invalid="true"]:focus,
.is-invalid:focus {
    box-shadow: 0 0 0 0.15rem rgba(220, 38, 38, 0.18);
}

/* Form seviyesi ortak mesaj (opsiyonel; mevcut .error-message/.sent-message korunur) */
.ts-form-message {
    font-size: var(--tx-text-sm);
    font-family: var(--tx-font-sans);
    line-height: 1.5;
}

.ts-form-message--error {
    color: var(--tx-error);
}

.ts-form-message--success {
    color: var(--tx-success);
}

/* Gönderim sürerken buton durumu (çift tıklama engeli ile birlikte) */
[type="submit"].is-submitting,
button.is-submitting {
    opacity: 0.7;
    cursor: progress;
}

/* Honeypot: kullanıcıdan ve ekran okuyucudan gizli; bot doldurursa backend reddeder.
   display:none yerine offscreen kullanılır (bazı botlar display:none alanları atlar). */
.ts-honeypot {
    position: absolute !important;
    left: -9999px !important;
    top: auto !important;
    width: 1px !important;
    height: 1px !important;
    overflow: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
}
