#page-loader {
  position: fixed; inset: 0; z-index: 9000;
  background: var(--bg);
  display: flex; align-items: center; justify-content: center;
  flex-direction: column; gap: 24px;
  transition: opacity 0.45s var(--ease), visibility 0.45s var(--ease);
}
#page-loader.hidden { opacity: 0; visibility: hidden; pointer-events: none; }

.loader-inner {
  display: flex; flex-direction: column; align-items: center;
  gap: 18px; width: min(320px, 100% - 48px);
}
.loader-wordmark {
  font-family: 'Instrument Serif', serif;
  font-size: 1.4rem; font-weight: 400;
  color: var(--text); letter-spacing: -0.01em;
}
.loader-track {
  width: 100%; height: 1px;
  background: var(--border);
  position: relative; overflow: hidden;
}
.loader-bar {
  height: 100%; width: 0%;
  background: var(--red);
  transition: width 0.4s var(--ease);
  position: relative;
}
.loader-bar::after {
  content: '';
  position: absolute; right: 0; top: 50%;
  transform: translateY(-50%);
  width: 4px; height: 4px; border-radius: 50%;
  background: var(--red); box-shadow: 0 0 6px var(--red);
}
.loader-status {
  font-family: 'Geist Mono', monospace;
  font-size: 0.68rem; color: var(--text-dim);
  text-align: center; min-height: 1.2em;
  letter-spacing: 0.04em;
  transition: opacity 0.22s;
}
.loader-status.fade { opacity: 0; }
.loader-pct { font-family: 'Geist Mono', monospace; font-size: 0.65rem; color: var(--red); letter-spacing: 0.06em; }
.loader-steps { display: flex; gap: 5px; align-items: center; }
.loader-step-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--border); transition: background 0.28s, transform 0.28s; }
.loader-step-dot.active { background: var(--red); transform: scale(1.4); }
.loader-step-dot.done { background: var(--text-dim); }

/* Panel loader */
.panel-loader {
  display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: 12px; padding: 44px 24px; width: 100%;
}
.panel-loader-track {
  width: min(200px, 60%); height: 1px;
  background: var(--border); position: relative; overflow: hidden;
}
.panel-loader-bar {
  position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent 0%, var(--red) 40%, transparent 100%);
  background-size: 200% 100%;
  animation: panel-loader-slide 1.4s ease-in-out infinite;
}
@keyframes panel-loader-slide {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
.panel-loader-msg { font-family: 'Geist Mono', monospace; font-size: 0.68rem; color: var(--text-dim); letter-spacing: 0.04em; }

/* Strip loader */
.strip-loader { display: flex; align-items: center; gap: 10px; width: 100%; }
.strip-loader-track { flex: 0 0 120px; height: 1px; background: var(--border); position: relative; overflow: hidden; }
.strip-loader-bar {
  position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent 0%, var(--red) 40%, transparent 100%);
  background-size: 200% 100%;
  animation: panel-loader-slide 1.4s ease-in-out infinite;
}
.strip-loader-msg { font-family: 'Geist Mono', monospace; font-size: 0.68rem; color: var(--text-dim); letter-spacing: 0.03em; }
