:root {
  --nm-motion-fast: 120ms;
  --nm-motion-standard: 180ms;
  --nm-motion-large: 220ms;
  --nm-motion-exit-fast: 100ms;
  --nm-motion-exit-standard: 140ms;
  --nm-motion-entrance: cubic-bezier(0, 0, 0.38, 0.9);
  --nm-motion-standard-easing: cubic-bezier(0.2, 0, 0.38, 0.9);
  --nm-motion-exit: cubic-bezier(0.2, 0, 1, 0.9);
  --nm-loading-spinner-size: 48px;
  --nm-loading-spinner-border-width: 4px;
}

.nm-motion-modal {
  opacity: 1;
  visibility: visible;
  transition: opacity var(--nm-motion-large) var(--nm-motion-entrance), visibility 0s linear 0s;
}
.nm-motion-modal > .nm-motion-surface {
  opacity: 1;
  transform: translateY(0) scale(1);
  transition: opacity var(--nm-motion-large) var(--nm-motion-entrance), transform var(--nm-motion-large) var(--nm-motion-entrance);
}
.nm-motion-modal.nm-motion-closing {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity var(--nm-motion-exit-standard) var(--nm-motion-exit), visibility 0s linear var(--nm-motion-exit-standard);
}
.nm-motion-modal.nm-motion-closing > .nm-motion-surface {
  opacity: 0;
  transform: translateY(6px) scale(0.98);
  transition: opacity var(--nm-motion-exit-standard) var(--nm-motion-exit), transform var(--nm-motion-exit-standard) var(--nm-motion-exit);
}
.nm-motion-popover {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transform-origin: top right;
  transition: opacity var(--nm-motion-fast) var(--nm-motion-entrance), transform var(--nm-motion-fast) var(--nm-motion-entrance), visibility 0s linear 0s;
}
.nm-motion-popover.nm-motion-closing {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-4px);
  transition: opacity var(--nm-motion-exit-fast) var(--nm-motion-exit), transform var(--nm-motion-exit-fast) var(--nm-motion-exit), visibility 0s linear var(--nm-motion-exit-fast);
}
.nm-motion-list-item {
  opacity: 1;
  transform: translateY(0);
  transition: opacity var(--nm-motion-fast) var(--nm-motion-entrance), transform var(--nm-motion-fast) var(--nm-motion-entrance);
}
.nm-motion-list-item.nm-motion-list-enter,
.nm-motion-list-item.nm-motion-list-exit {
  opacity: 0;
  transform: translateY(-4px);
}

.nm-global-loading-overlay {
  position: fixed;
  inset: 0;
  z-index: 12000;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  background: rgba(15, 23, 42, 0.46);
  transition:
    opacity var(--nm-motion-fast) var(--nm-motion-entrance),
    visibility 0s linear var(--nm-motion-fast);
}
.nm-global-loading-overlay.nm-global-loading-overlay--active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0s;
}
.nm-global-loading-status {
  position: absolute;
  right: max(18px, env(safe-area-inset-right));
  bottom: max(18px, env(safe-area-inset-bottom));
  display: flex;
  align-items: center;
  gap: 10px;
  color: #ffffff;
  font-size: 13px;
  font-weight: 500;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}
.nm-global-loading-spinner {
  width: 28px;
  height: 28px;
  flex: 0 0 28px;
  border-radius: 9999px;
  border: 3px solid rgba(255, 255, 255, 0.38);
  border-top-color: #ffffff;
  animation: nm-global-loading-spin 0.8s linear infinite;
}

.nm-navigation-loading {
  position: fixed;
  inset: 0;
  z-index: 13000;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  color: #374151;
  background: #ffffff;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition:
    opacity 100ms var(--nm-motion-entrance),
    visibility 0s linear 100ms;
}
.nm-navigation-loading.nm-navigation-loading--active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0s;
}
.nm-standard-loading-spinner,
.nm-navigation-loading-spinner {
  width: var(--nm-loading-spinner-size);
  height: var(--nm-loading-spinner-size);
  flex: 0 0 var(--nm-loading-spinner-size);
  border: var(--nm-loading-spinner-border-width) solid #e5e7eb;
  border-top-color: #3b82f6;
  border-radius: 9999px;
  animation: nm-global-loading-spin 0.9s linear infinite;
}
.nm-navigation-loading-message {
  font-size: 14px;
  font-weight: 500;
}
html.dark .nm-navigation-loading {
  color: #e2e8f0;
  background: #0b1220;
}
html.dark .nm-standard-loading-spinner,
html.dark .nm-navigation-loading-spinner {
  border-color: #1f2937;
  border-top-color: #60a5fa;
}
@keyframes nm-global-loading-spin {
  to { transform: rotate(360deg); }
}
html.dark .nm-global-loading-overlay {
  background: rgba(0, 0, 0, 0.56);
}
@media (prefers-reduced-motion: reduce) {
  :root {
    --nm-motion-fast: 1ms;
    --nm-motion-standard: 1ms;
    --nm-motion-large: 1ms;
    --nm-motion-exit-fast: 1ms;
    --nm-motion-exit-standard: 1ms;
  }
  .nm-motion-modal > .nm-motion-surface,
  .nm-motion-popover,
  .nm-motion-list-item { transform: none !important; }
  .nm-global-loading-overlay { transition-duration: 1ms; }
  .nm-navigation-loading { transition-duration: 1ms; }
}
