/* ============ 加载页 · 终端风格 ============ */
.loader-screen {
  position: fixed;
  inset: 0;
  background: #000000;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 0.7s ease-out, visibility 0.7s ease-out;
}

.loader-screen.hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.loader-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: min(340px, 82vw);
}

.loader-logo {
  width: 96px;
  height: auto;
  margin-bottom: 34px;
  user-select: none;
  -webkit-user-drag: none;
  opacity: 0;
  animation: logoIn 0.7s ease-out forwards;
}

@keyframes logoIn {
  from { opacity: 0; transform: scale(0.92); }
  to   { opacity: 1; transform: none; }
}

.loader-terminal {
  width: 100%;
  font-family: "SF Mono", "Menlo", "Consolas", "Courier New", monospace;
  font-size: 12px;
  line-height: 1.95;
  color: #b8b8b8;
  letter-spacing: 0.3px;
  text-align: left;
}

.loader-line {
  opacity: 0;
  animation: lineIn 0.55s ease-out forwards;
  white-space: nowrap;
  overflow: hidden;
}

@keyframes lineIn {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: none; }
}

.loader-terminal .ok {
  color: #4ade80;
}
.loader-terminal .warn {
  color: #fbbf24;
}

.loader-terminal .cursor {
  display: inline-block;
  margin-left: 1px;
  animation: blink 0.9s step-end infinite;
}

@keyframes blink {
  50% { opacity: 0; }
}

.loader-bar-track {
  width: 100%;
  height: 2px;
  background: rgba(255, 255, 255, 0.08);
  border-radius: 2px;
  overflow: hidden;
  margin-top: 22px;
  opacity: 0;
  animation: fadeUp 0.5s ease-out 0.3s forwards;
}

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: none; }
}

.loader-bar-fill {
  width: 0%;
  height: 100%;
  background: #ffffff;
  border-radius: 2px;
  animation: barGrow 4.5s linear 0.5s forwards;
}

@keyframes barGrow {
  0%    { width: 0%; }
  15%   { width: 14%; }
  30%   { width: 28%; }
  45%   { width: 42%; }
  60%   { width: 56%; }
  72%   { width: 68%; }
  85%   { width: 82%; }
  95%   { width: 93%; }
  100%  { width: 100%; }
}
