/* =====================================================================
   Utilitários
   ===================================================================== */
.sr-only {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
.num { font-variant-numeric: tabular-nums; }
.texto-2 { color: var(--texto-2); }
.texto-3 { color: var(--texto-3); }
.texto-receita { color: var(--receita-texto); }
.texto-despesa { color: var(--despesa-texto); }
.texto-alerta { color: var(--alerta-texto); }
.pequeno { font-size: var(--tamanho-sm); }
.mini { font-size: var(--tamanho-xs); }
.negrito { font-weight: var(--peso-semibold); }
.centro { text-align: center; }
.direita { text-align: right; }
.sem-quebra { white-space: nowrap; }
.truncar { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.linha { display: flex; align-items: center; gap: var(--espaco-2); }
.sem-espaco { gap: 0; }
.linha-entre { display: flex; align-items: center; justify-content: space-between; gap: var(--espaco-3); }
.linha-wrap { flex-wrap: wrap; }
.coluna { display: flex; flex-direction: column; gap: var(--espaco-2); }
/* Rails: campos ocultos do formulário (token de segurança) não contam como primeiro item da pilha */
.pilha > :where(:not(input[type="hidden"])) ~ * { margin-top: var(--espaco-4); }
.pilha-sm > :where(:not(input[type="hidden"])) ~ * { margin-top: var(--espaco-2); }
.oculto { display: none !important; }
.mt-8 { margin-top: var(--espaco-2); }
.mt-16 { margin-top: var(--espaco-4); }
.mt-24 { margin-top: var(--espaco-6); }
.mb-8 { margin-bottom: var(--espaco-2); }
.flex-1 { flex: 1; min-width: 0; }
.cursor-ponteiro { cursor: pointer; }
/* Lista com marcadores (no mockup, style="list-style:disc;padding-left:20px") */
.lista-marcadores { list-style: disc; padding-left: 20px; }

/* Rails: o <form> gerado por button_to não deve alterar o layout do botão */
.form-contents { display: contents; }
