/* Franco · estados visuais de validação de formulário (compartilhado).
 * Extraído de checkout.php pra reuso em checkout + piloto + modal de contato (LP).
 * Depende dos design tokens Franco (--erro/--verde/--atencao/--border-dark-strong),
 * presentes em todas as 3 páginas. Pareia com /cadastro/assets/form-valida.js.
 * Requer que cada campo esteja dentro de um .form-row. */

.form-row.has-error input,
.form-row.has-error select { border-color: var(--erro); }
.form-row.has-success input,
.form-row.has-success select { border-color: var(--verde); }

.field-error { display: none; font-size: 11.5px; color: #FCA5A5; margin-top: 5px; }
.form-row.has-error .field-error { display: block; }

.field-icon { float: right; margin-top: -28px; margin-right: 12px; pointer-events: none; font-size: 14px; }
.form-row.has-error .field-icon::after { content: '✗'; color: var(--erro); }
.form-row.has-success .field-icon::after { content: '✓'; color: var(--verde); }

/* Indicador de força de senha */
.pw-strength { display: flex; gap: 4px; margin-top: 8px; height: 4px; }
.pw-strength span { flex: 1; background: var(--border-dark-strong); border-radius: 2px; transition: background 0.2s; }
.pw-strength.s1 span:nth-child(-n+1),
.pw-strength.s2 span:nth-child(-n+2),
.pw-strength.s3 span:nth-child(-n+3),
.pw-strength.s4 span:nth-child(-n+4) { background: var(--verde); }
.pw-strength.s1 span:nth-child(-n+1) { background: var(--erro); }
.pw-strength.s2 span:nth-child(-n+2) { background: var(--atencao); }
.pw-label { font-size: 11px; color: var(--cinza); margin-top: 5px; }

/* Flash de campo obrigatório (ex.: caixa LGPD não marcada no submit) */
.required-flash { animation: flash-required 0.4s; }
@keyframes flash-required {
  0%, 100% { border-color: var(--border-dark-strong); }
  50% { border-color: var(--erro); }
}
