/* Feedback de carregamento global — barra no topo e véu embaçado.

   Por que existe: telas que montam listas levam algum tempo. Sem sinal nenhum,
   quem clica acha que o clique não pegou e clica de novo. A barra aparece no
   primeiro instante; o véu com "Carregando" só entra se a espera passar de meio
   segundo, para não piscar nas telas rápidas. */
#navprogress { position: fixed; top: 0; left: 0; height: 3px; width: 0;
  background: linear-gradient(90deg, #1db863, #7fd6a5); z-index: 20000;
  box-shadow: 0 0 10px rgba(29, 184, 99, .6); opacity: 0;
  transition: width .2s ease, opacity .3s ease; pointer-events: none; }
#navprogress.on { opacity: 1; }

#navspinner { position: fixed; inset: 0; z-index: 19999; display: none;
  align-items: center; justify-content: center; flex-direction: column; gap: .85rem;
  background: rgba(255, 255, 255, .45);
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
#navspinner.on { display: flex; }
#navspinner .spin { width: 46px; height: 46px; border-radius: 50%;
  border: 4px solid rgba(29, 184, 99, .25); border-top-color: #1db863;
  animation: navspin .7s linear infinite; }
#navspinner .txt { font-weight: 600; color: #0d7a3f;
  text-shadow: 0 1px 2px rgba(255, 255, 255, .8); }
@keyframes navspin { to { transform: rotate(360deg); } }

/* Tema escuro do sistema: o véu claro cegaria. */
@media (prefers-color-scheme: dark) {
  #navspinner { background: rgba(10, 25, 17, .5); }
  #navspinner .txt { color: #7fd6a5; text-shadow: 0 1px 2px rgba(0, 0, 0, .8); }
}
/* Quem pediu menos animação no sistema recebe menos animação. */
@media (prefers-reduced-motion: reduce) {
  #navspinner .spin { animation-duration: 2s; }
  #navprogress { transition: opacity .3s ease; }
}

/* O clique responde na hora, antes mesmo de a página trocar. */
a:active, button:active, .btn:active { transform: scale(.97); }
.is-loading { opacity: .65; pointer-events: none; position: relative; }
.is-loading::after { content: ""; display: inline-block; width: .9em; height: .9em;
  margin-left: .5em; vertical-align: -.1em; border: 2px solid currentColor;
  border-right-color: transparent; border-radius: 50%;
  animation: navspin .6s linear infinite; }
