*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.5;
  -webkit-font-smoothing:antialiased;transition:background .3s ease,color .3s ease}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:14px}
a{color:var(--accent);text-decoration:none}
::selection{background:var(--accent);color:#fff}
.tnum{font-variant-numeric:tabular-nums}
.hidden{display:none}
.muted{color:var(--ink-3)}
/* alternância desktop/mobile de um mesmo bloco (ex.: tabela vs. cards de lançamento) —
   despachada pela media query em mobile.css, igual ao padrão já usado pela bottom-nav. */
.mobile-only{display:none}
/* O atributo hidden precisa vencer regras de display de componentes (.fg{display:flex},
   .topbar-mes{display:flex}, etc.) — sem isto, elementos "escondidos" continuavam visíveis. */
[hidden]{display:none!important}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
@keyframes slideUp{from{transform:translateY(24px);opacity:.4}to{transform:none;opacity:1}}
