/* ==========================================================================
   Shared Modal Foundation
   --------------------------------------------------------------------------
   This file contains only styles that are truly identical across login,
   register, download, and server modals. Module-specific geometry and artwork stay
   in each modal file to avoid cascade risk.
   ========================================================================== */

   
/* Hidden-state gate used by modal roots */
.login-modal[hidden],
.register-modal[hidden],
.download-modal[hidden],
.server-modal[hidden],
.member-modal[hidden] {
  display: none !important;
}

/* Full-screen modal shell and fade transition */
.login-modal,
.register-modal,
.download-modal,
.server-modal,
.member-modal {
  position: fixed;
  inset: 0;
  display: grid;
  place-items: center;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  opacity: 0;
  pointer-events: none;
  transition: opacity 240ms ease;
}
@supports not (inset: 0) {
  .login-modal,
.register-modal,
.download-modal,
.server-modal,
.member-modal {
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
  }
}

/* Open state gates interaction only when fade-in class is active */
.login-modal.is-open,
.register-modal.is-open,
.download-modal.is-open,
.server-modal.is-open,
.member-modal.is-open {
  opacity: 1;
  pointer-events: auto;
}

/* Shared modal backdrop style */
.login-modal-backdrop,
.register-modal-backdrop,
.download-modal-backdrop,
.server-modal-backdrop,
.member-modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(12, 16, 33, 0.74);
  backdrop-filter: blur(1.5px);
}
@supports not (inset: 0) {
  .login-modal-backdrop,
.register-modal-backdrop,
.download-modal-backdrop,
.server-modal-backdrop,
.member-modal-backdrop {
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
  }
}

/* Stage entrance animation baseline */
.login-modal-stage,
.register-modal-stage,
.download-modal-stage,
.server-modal-stage,
.member-modal-stage {
  transform: translateY(18px) scale(0.965);
  transition: transform 240ms ease;
}

.login-modal.is-open .login-modal-stage,
.register-modal.is-open .register-modal-stage,
.download-modal.is-open .download-modal-stage,
.server-modal.is-open .server-modal-stage,
.member-modal.is-open .member-modal-stage {
  transform: translateY(0) scale(1);
}

/* Shared close-control interaction polish */
.login-modal-close:hover,
.login-modal-close:focus-visible,
.register-modal-close:hover,
.register-modal-close:focus-visible,
.download-modal-close:hover,
.download-modal-close:focus-visible,
.server-modal-close:hover,
.server-modal-close:focus-visible {
  transform: scale(1.08);
  filter: drop-shadow(0 6px 10px rgba(73, 5, 5, 0.25));
  outline: none;
}

/* Lock body scroll while a member modal is open */
body.member-modal-open {
  overflow: hidden;
}

/* Respect reduced-motion preference for all modal systems */
@media (prefers-reduced-motion: reduce) {
  .login-modal,
  .login-modal-stage,
  .register-modal,
  .register-modal-stage,
  .download-modal,
  .download-modal-stage,
  .server-modal,
  .server-modal-stage,
  .member-modal,
  .member-modal-stage {
    transition: none !important;
  }
}
