/* A fine perimeter trace acknowledges a real request; success is server-confirmed. */
.ff-login-page #submit.ff-login-pending {
  isolation: isolate;
  overflow: hidden;
  opacity: 1;
  cursor: wait;
  color: #fff;
  box-shadow: none;
}
.ff-login-button-label, .ff-login-success-content {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  color: #fff;
  font-size: 14px;
  font-weight: 550;
  line-height: 1;
  pointer-events: none;
  transition: opacity .15s ease, transform .22s cubic-bezier(.2,.65,.3,1);
}
.ff-login-button-label { opacity: .96; }
.ff-login-progress { position: absolute; inset: 1px; width: calc(100% - 2px); height: calc(100% - 2px); pointer-events: none; transition: opacity .15s; }
.ff-login-progress rect {
  x: 1px; y: 1px; width: calc(100% - 2px); height: calc(100% - 2px); rx: 7px; ry: 7px;
  fill: none;
  stroke: #b4e8f5;
  stroke-width: 1.5;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
  stroke-dasharray: 22 78;
  animation: ff-login-edge-flow 1.6s linear infinite;
}
.ff-login-success-content { opacity: 0; transform: translateY(4px); }
.ff-login-success-content svg { width: 22px; height: 22px; fill: none; flex: 0 0 22px; }
.ff-login-check { fill: none; stroke: #bceef6; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 1; }
.ff-login-success .ff-login-button-label { opacity: 0; transform: translateY(-4px); }
.ff-login-success .ff-login-success-content { opacity: 1; transform: translateY(0); }
.ff-login-success .ff-login-progress { opacity: 0; }
.ff-login-success .ff-login-progress rect { animation-play-state: paused; }
.ff-login-success .ff-login-check { animation: ff-login-check-draw .24s .04s ease-out forwards; }
.ff-login-status { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
@keyframes ff-login-edge-flow { to { stroke-dashoffset: -100; } }
@keyframes ff-login-check-draw { to { stroke-dashoffset: 0; } }
@media (prefers-reduced-motion: reduce) {
  .ff-login-button-label, .ff-login-success-content, .ff-login-progress { transition: none; }
  .ff-login-progress rect, .ff-login-check { animation: none !important; }
  .ff-login-progress { opacity: 0; }
  .ff-login-success .ff-login-check { stroke-dashoffset: 0; }
}
