@font-face {
  font-family: "Outfit";
  src: url("/assets/assets/google_fonts/Outfit-Bold.ttf") format("truetype");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

:root {
  --primary: #ec4899;
  --secondary: #8b5cf6;
  --bg: #020617;
  --app-vh: 1vh;
  --shell-font:
    "Segoe UI", Roboto, -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --shell-display-font:
    "Outfit", "Segoe UI", Roboto, -apple-system, BlinkMacSystemFont, system-ui,
    sans-serif;
}

* {
  box-sizing: border-box;
}

body {
  background-color: var(--bg);
  margin: 0;
  padding: 0;
  font-family: var(--shell-font);
  color: white;
  overflow: hidden;
  min-height: calc(var(--app-vh) * 100);
  min-width: 100vw;
}

#loading {
  position: fixed;
  inset: 0;
  z-index: 999;
  background: #080814;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100vw;
  height: calc(var(--app-vh) * 100);
}

.bg-glow {
  position: fixed;
  inset: 0;
  background:
    radial-gradient(
      ellipse 600px 400px at 50% 40%,
      rgba(255, 45, 120, 0.06) 0%,
      transparent 70%
    ),
    radial-gradient(
      ellipse 400px 300px at 30% 70%,
      rgba(123, 47, 190, 0.05) 0%,
      transparent 60%
    );
  animation: breathe 4s ease-in-out infinite;
}

.loader-shell {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(24px, 4vmin, 32px);
  padding: 24px;
}

.loader-container {
  position: relative;
  width: clamp(140px, 26vmin, 190px);
  height: clamp(140px, 26vmin, 190px);
  display: flex;
  align-items: center;
  justify-content: center;
}

.icon-wrap {
  position: relative;
  width: clamp(120px, 24vmin, 150px);
  height: clamp(120px, 24vmin, 150px);
}

.orbit {
  position: absolute;
  inset: 50% auto auto 50%;
  width: clamp(132px, 27vmin, 162px);
  height: clamp(132px, 27vmin, 162px);
  transform: translate(-50%, -50%);
  animation: orbitSpin 4s linear infinite;
  pointer-events: none;
}

.orbit-dot {
  position: absolute;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--primary);
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  opacity: 0.6;
}

.orbit-dot:nth-child(2) {
  background: rgba(255, 45, 120, 0.3);
  width: 3px;
  height: 3px;
  top: 15%;
  left: 85%;
  animation: dotPulse 4s linear infinite 1.3s;
}

.orbit-dot:nth-child(3) {
  background: rgba(255, 45, 120, 0.15);
  width: 2px;
  height: 2px;
  top: 80%;
  left: 78%;
}

.loader-app-icon {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 28%;
  filter: drop-shadow(0 8px 24px rgba(255, 45, 120, 0.3));
}

.sparkle {
  position: absolute;
  animation: sparkleAnim 2s ease-in-out infinite;
}

.sparkle svg {
  display: block;
}

.sp1 {
  top: -8px;
  right: 2px;
  animation-delay: 0s;
  animation-duration: 2.2s;
}

.sp2 {
  left: -4px;
  top: 40%;
  animation-delay: 0.7s;
  animation-duration: 1.8s;
}

.sp3 {
  bottom: 4px;
  right: 8px;
  animation-delay: 1.2s;
  animation-duration: 2.5s;
}

.wordmark {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  animation: fadeIn 0.8s ease-out forwards;
}

.wordmark-text {
  font-family: var(--shell-display-font);
  font-size: clamp(28px, 6vmin, 36px);
  font-weight: 700;
  letter-spacing: -0.5px;
  color: #fff;
}

.dot-city {
  color: var(--primary);
}

.wordmark-sub {
  font-size: 10px;
  font-weight: 400;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.3);
}

.progress-wrapper {
  width: clamp(200px, 42vmin, 320px);
  text-align: center;
}

.status-label {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 3px;
  color: rgba(255, 255, 255, 0.25);
  margin-bottom: 10px;
  display: block;
  animation: textCycle 6s ease-in-out infinite;
}

.bar-bg {
  height: 2px;
  width: 100%;
  background: rgba(255, 255, 255, 0.08);
  border-radius: 2px;
  overflow: hidden;
  position: relative;
}

.bar-fill {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, var(--primary), var(--secondary));
  box-shadow: 0 0 20px rgba(236, 72, 153, 0.5);
  transition: width 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
}

@keyframes breathe {
  0%,
  100% {
    opacity: 0.6;
  }
  50% {
    opacity: 1;
  }
}

@keyframes float {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-8px);
  }
}

@keyframes planePulse {
  0%,
  100% {
    filter: drop-shadow(0 8px 24px rgba(255, 45, 120, 0.3));
  }
  50% {
    filter: drop-shadow(0 12px 32px rgba(255, 45, 120, 0.5));
  }
}

@keyframes sparkleAnim {
  0%,
  100% {
    opacity: 0.3;
    transform: scale(0.7) rotate(0deg);
  }
  50% {
    opacity: 1;
    transform: scale(1) rotate(15deg);
  }
}

#loading.init_done {
  opacity: 0;
  transform: scale(1.1);
  filter: blur(20px);
  transition: all 0.9s cubic-bezier(0.4, 0, 0.2, 1);
  pointer-events: none;
}

#loading.main_done .bar-fill {
  width: 50%;
}

#loading.init_done .bar-fill {
  width: 100%;
}

@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes textCycle {
  0%,
  30% {
    opacity: 0.25;
  }
  15% {
    opacity: 0.5;
  }
  50%,
  80% {
    opacity: 0.25;
  }
  65% {
    opacity: 0.5;
  }
  100% {
    opacity: 0.25;
  }
}

@keyframes orbitSpin {
  from {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  to {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

@keyframes dotPulse {
  0%,
  100% {
    opacity: 0.2;
  }
  50% {
    opacity: 0.6;
  }
}

.cookie-notice {
  display: none;
  position: fixed;
  left: 50%;
  bottom: max(16px, 4vmin);
  transform: translateX(-50%);
  max-width: 95vw;
  width: min(420px, 95vw);
  background: rgba(15, 23, 42, 0.95);
  backdrop-filter: blur(15px);
  padding: clamp(16px, 2vw, 22px) clamp(18px, 4vw, 28px);
  border-radius: 24px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  z-index: 1000;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  color: white;
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
}

.cookie-notice__text {
  font-size: clamp(12px, 3vw, 16px);
}

.cookie-notice__button {
  background: white;
  color: black;
  border: none;
  padding: 0.5em 2em;
  border-radius: 12px;
  font-weight: 600;
  cursor: pointer;
  font-size: clamp(13px, 3vw, 16px);
}
