/* css/18-panel-standard.css — primitivas de padronizacao de painel (aditivas, tokenizadas).
   Base da auditoria UX/UI (30 agentes, 2026-07-19): estados unicos + utilitarios de tabela.
   ADITIVO: nao altera nada existente; painel passa a usar estas classes na migracao. */

/* Estados unicos: vazio / carregando / erro — substituem os ad-hoc por painel. */
.ds-empty, .ds-loading, .ds-error{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; padding:28px 20px; text-align:center; font-size:.9rem; border-radius:12px;
}
.ds-empty{ color:var(--ds-t-soft); background:var(--ds-neu-bg); border:1px dashed var(--ds-neu-bd); }
.ds-loading{ color:var(--ds-t-soft); }
.ds-loading::before{
  content:""; width:22px; height:22px; border:2.5px solid var(--ds-bd-card);
  border-top-color:var(--ds-primary); border-radius:50%; animation:ds-spin .7s linear infinite;
}
@keyframes ds-spin{ to{ transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce){ .ds-loading::before{ animation:none; } }
.ds-error{ color:var(--ds-err-fg); background:var(--ds-err-bg); border:1px solid var(--ds-err-bd); }

/* Utilitario: rolagem horizontal isolada de tabela larga (evita corpo rolar de lado). */
.ds-table-scroll{ overflow-x:auto; }
