/* ============================================================
   dashboard-progress.css (rx-core) — barra de progresso partilhada
   Acompanha dashboard-progress.js. Extraído dos dashboard.css do
   ImóvelRX e do CommunityRX (Aug 2026) — idêntico ao byte nos dois,
   incluindo uma correcção (o brilho a deslizar mesmo sem progresso
   novo) que tinha sido aplicada nos dois sítios em separado antes de
   isto ser unificado. Usa só tokens de cor já partilhados
   (--amber, --wire-2, --text-3) — nenhuma cor específica de produto.
   ============================================================ */
.analysis-progress { margin-top: 0.625rem; width: 100%; }

.analysis-progress-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 0.375rem;
}

.analysis-progress-label { font-size: 0.6875rem; color: var(--text-3); }

.analysis-progress-pct {
  font-size: 0.6875rem;
  color: var(--amber);
  font-family: 'DM Mono', monospace;
  font-weight: 500;
  flex-shrink: 0;
}

.analysis-progress-bar {
  height: 3px;
  background: var(--wire-2);
  border-radius: 99px;
  overflow: hidden;
}

.analysis-progress-fill {
  height: 100%;
  background: var(--amber);
  border-radius: 99px;
  transition: width 0.8s ease;
  position: relative;
  overflow: hidden;
}
/* Barra com % conhecido: continua a "respirar" com um brilho a deslizar,
   mesmo entre pulsações de progresso — sem isto, nos troços mais lentos
   a barra ficava visualmente estática durante segundos, dando sensação
   de app pendurada mesmo estando a trabalhar. */
.analysis-progress-fill:not(.indeterminate)::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.45), transparent);
  background-size: 50% 100%;
  background-repeat: no-repeat;
  animation: progress-shimmer 1.6s linear infinite;
}
@keyframes progress-shimmer {
  0%   { background-position: -60% 0; }
  100% { background-position: 160% 0; }
}
/* Sem dados reais ainda (ex.: logo após F5, antes do 1º evento SSE chegar):
   barra a pulsar em vez de mostrar um número/largura que pode estar errado
   e saltar visivelmente quando o valor real chegar. */
.analysis-progress-fill.indeterminate {
  width: 35% !important;
  animation: progress-indeterminate 1.4s ease-in-out infinite;
}
@keyframes progress-indeterminate {
  0%   { transform: translateX(-100%); opacity: 0.5; }
  50%  { opacity: 1; }
  100% { transform: translateX(220%); opacity: 0.5; }
}