* {
	box-sizing: border-box;
	position: absolute;
	transform-style: preserve-3d;
}

*:before, *:after {
	box-sizing: border-box;
	transform-style: preserve-3d;
	position: absolute;
	content: "";
}

body {
    margin: 0;
    background: linear-gradient(315deg, rgba(96, 96, 96, 1) 3%, rgba(96, 96, 96, 1) 38%, rgba(100, 101, 103, 1) 68%, rgba(64, 64, 65, 1) 98%);
    animation: gradient 15s ease infinite;
    background-size: 400% 400%;
    background-attachment: fixed;
    padding: 0;
    width: 100vw;
    height: 100vh;
    overflow: hidden;
    perspective: 50vmin;
    background-size: 100vw 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

.login-container {
    position: relative !important;
    z-index: 10;
    max-width: 800px;
    width: 100%;
    padding: 30px;
    background: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(10px);
    border-radius: 15px;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(255, 255, 255, 0.2);
}

.login-container * {
    position: static !important;
}

.login-container h2 {
    text-align: center;
    color: white;
    margin-bottom: 20px;
    font-weight: bold;
}

.login-container form {
    display: flex;
    flex-direction: column;
}

.login-container .input-group {
    margin-bottom: 15px;
}

.login-container .input-group-text {
    background: rgba(255, 255, 255, 0.2);
    color: white;
    border: none;
}

.login-container .form-control {
    background: rgba(255, 255, 255, 0.1);
    color: white;
    border: 1px solid rgba(255, 255, 255, 0.3);
}

.login-container .form-control::placeholder {
    color: rgba(255, 255, 255, 0.7);
}

.login-container .btn {
    margin-top: 10px;
    background: #28a745;
    border: none;
    padding: 12px;
    border-radius: 5px;
    font-weight: bold;
    font-size: 16px;
}

.login-container .btn:hover {
    background: #218838;
}

@keyframes gradient {
    0% {
        background-position: 0% 0%;
    }
    50% {
        background-position: 100% 100%;
    }
    100% {
        background-position: 0% 0%;
    }
}

.particles {
	position: absolute;
	width: 100vw;
	height: 100vh;
}

.particles:before, .particles:after {
	width: 200vw;
  height: 200vh;
  left: -50vw;
  top: -50vh;
  content: "";
  border-radius: 100%;
  opacity: 0;
  transform: translateZ(-50vmin);
  background-image: repeating-conic-gradient(#FFF8 0%, transparent .0002%, transparent .075%, transparent .65%), 
    repeating-conic-gradient(#FFF 0%, transparent .0004%, transparent 0.05%, transparent .495%);
  animation: particlesMovement 5s ease-in 0s infinite;
  z-index: 1;
}

.particles:after {
	animation-name: particlesMovement2;
	animation-delay: 1s;
}

.particles + .particles + .particles::before {
    animation-delay: 2s;
}

.particles + .particles + .particles::after {
    animation-delay: 3s;
}

@keyframes particlesMovement {
  0% { 
    transform: translateZ(-50vmin); 
    opacity: 0; 
  }
	30%, 70%, 90% { 
    opacity: 1; 
  }
	100% { 
    transform: translateZ(50vmin) rotate(15deg); 
    opacity: 0; 
  }
}

@keyframes particlesMovement2 {
  0% { 
    transform: translateZ(-50vmin) rotate(180deg); 
    opacity: 0; 
  }
	30%, 70%, 90% { 
     opacity: 1; 
  }
	100% { 
    transform: translateZ(50vmin) rotate(195deg); 
    opacity: 0; 
  }
}
.shake-top {
	-webkit-animation: shake-top 0.8s cubic-bezier(0.455, 0.030, 0.515, 0.955) both;
	        animation: shake-top 0.8s cubic-bezier(0.455, 0.030, 0.515, 0.955) both;
}
/* ----------------------------------------------
 * Generated by Animista on 2025-9-16 1:9:32
 * Licensed under FreeBSD License.
 * See http://animista.net/license for more info. 
 * w: http://animista.net, t: @cssanimista
 * ---------------------------------------------- */

/**
 * ----------------------------------------
 * animation shake-top
 * ----------------------------------------
 */
@-webkit-keyframes shake-top {
  0%,
  100% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
    -webkit-transform-origin: 50% 0;
            transform-origin: 50% 0;
  }
  10% {
    -webkit-transform: rotate(2deg);
            transform: rotate(2deg);
  }
  20%,
  40%,
  60% {
    -webkit-transform: rotate(-4deg);
            transform: rotate(-4deg);
  }
  30%,
  50%,
  70% {
    -webkit-transform: rotate(4deg);
            transform: rotate(4deg);
  }
  80% {
    -webkit-transform: rotate(-2deg);
            transform: rotate(-2deg);
  }
  90% {
    -webkit-transform: rotate(2deg);
            transform: rotate(2deg);
  }
}
@keyframes shake-top {
  0%,
  100% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
    -webkit-transform-origin: 50% 0;
            transform-origin: 50% 0;
  }
  10% {
    -webkit-transform: rotate(2deg);
            transform: rotate(2deg);
  }
  20%,
  40%,
  60% {
    -webkit-transform: rotate(-4deg);
            transform: rotate(-4deg);
  }
  30%,
  50%,
  70% {
    -webkit-transform: rotate(4deg);
            transform: rotate(4deg);
  }
  80% {
    -webkit-transform: rotate(-2deg);
            transform: rotate(-2deg);
  }
  90% {
    -webkit-transform: rotate(2deg);
            transform: rotate(2deg);
  }
}
