/* ---- FileUtils 通用进度遮罩样式 ---- */

.progress-overlay{
  position:fixed; inset:0; z-index:100;
  background:rgba(7,11,20,.82);
  backdrop-filter:blur(6px);
  display:flex; align-items:center; justify-content:center;
}
.progress-card{
  width:360px; max-width:90vw; padding:32px 28px;
  border-radius:var(--radius, 14px);
  border:1px solid var(--border, rgba(255,255,255,0.08));
  background:linear-gradient(180deg, rgba(28,37,64,.95), rgba(15,23,42,.98));
  box-shadow:var(--shadow, 0 10px 30px rgba(0,0,0,0.5));
  text-align:center;
}
.progress-title{
  font-size:16px; font-weight:600; margin-bottom:18px;
  color:var(--text, #e6f0ff);
}
.progress-track{
  height:8px; border-radius:4px;
  background:rgba(255,255,255,.08);
  overflow:hidden;
}
.progress-fill{
  height:100%; border-radius:4px;
  background:linear-gradient(90deg, var(--accent, #27e0ff), var(--accent-2, #8b5cf6));
  transition:width .25s ease;
}
/* 不确定态：进度条来回流光动画 */
.progress-fill.indeterminate{
  width:100% !important;
  background:linear-gradient(
    90deg,
    rgba(255,255,255,.04) 0%,
    var(--accent, #27e0ff) 30%,
    var(--accent-2, #8b5cf6) 50%,
    var(--accent, #27e0ff) 70%,
    rgba(255,255,255,.04) 100%
  );
  background-size:200% 100%;
  animation:indeterminate-flow 1.8s ease-in-out infinite;
}
@keyframes indeterminate-flow{
  0%  { background-position:100% 0; }
  100%{ background-position:-100% 0; }
}
.progress-info{
  margin-top:14px; font-size:13px;
  color:var(--muted, #8b9bb5);
  font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,Monaco,"Courier New",monospace;
}
.progress-elapsed{
  margin-top:8px; font-size:12px;
  color:var(--muted, #8b9bb5);
  opacity:.7;
  font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,Monaco,"Courier New",monospace;
}
