:root {
  --bg-top: #030812;
  --bg-mid: #102743;
  --bg-bottom: #2b1838;
  --star-color: #fff0b7;
  --meteor-color: #ffd86a;
  --glow-color: #5de8ff;
  --star-rgb: 255, 240, 183;
  --meteor-rgb: 255, 216, 106;
  --glow-rgb: 93, 232, 255;
  --cycle-one-rgb: 53, 247, 210;
  --cycle-two-rgb: 161, 93, 255;
  --cycle-three-rgb: 255, 207, 112;
  --scene-hue: 0deg;
  --scene-saturation: 1;
  --scene-brightness: 1;
  --scene-contrast: 1;
  --twinkle-strength: 0.65;
  --cloud-opacity: 0.45;
  --aurora-opacity: 0.55;
  --aurora-cycle-opacity: 0.4;
  --aurora-cycle-duration: 44s;
  --horizon-opacity: 0.55;
  --vignette-opacity: 0.72;
  --trail-length: 130px;
}

* {
  box-sizing: border-box;
}

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  overflow: hidden;
  background: var(--bg-top);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

button,
input {
  font: inherit;
}

.wallpaper {
  position: fixed;
  inset: 0;
  overflow: hidden;
  isolation: isolate;
  background:
    linear-gradient(180deg, var(--bg-top) 0%, var(--bg-mid) 52%, var(--bg-bottom) 100%);
  filter:
    hue-rotate(var(--scene-hue))
    saturate(var(--scene-saturation))
    brightness(var(--scene-brightness))
    contrast(var(--scene-contrast));
  transition: filter 900ms cubic-bezier(0.22, 0.61, 0.36, 1);
}

.sky-layer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  transition:
    opacity 900ms cubic-bezier(0.22, 0.61, 0.36, 1),
    background 900ms cubic-bezier(0.22, 0.61, 0.36, 1),
    filter 900ms cubic-bezier(0.22, 0.61, 0.36, 1);
}

.sky-base {
  z-index: 0;
  background:
    linear-gradient(115deg, rgba(17, 80, 95, 0.18), transparent 34%),
    linear-gradient(245deg, rgba(98, 32, 88, 0.25), transparent 46%),
    linear-gradient(0deg, rgba(249, 186, 87, 0.14), transparent 34%);
  mix-blend-mode: screen;
}

.sky-cycle {
  z-index: 1;
  opacity: var(--aurora-cycle-opacity);
  background:
    radial-gradient(ellipse at 18% 18%, rgba(var(--cycle-one-rgb), 0.34), transparent 38%),
    radial-gradient(ellipse at 78% 30%, rgba(var(--cycle-two-rgb), 0.3), transparent 42%),
    radial-gradient(ellipse at 50% 88%, rgba(var(--cycle-three-rgb), 0.22), transparent 48%);
  background:
    conic-gradient(
      from 0deg at 52% 48%,
      rgba(var(--cycle-one-rgb), 0) 0deg,
      rgba(var(--cycle-one-rgb), 0.32) 62deg,
      rgba(var(--cycle-two-rgb), 0.28) 142deg,
      rgba(var(--cycle-three-rgb), 0.26) 224deg,
      rgba(var(--cycle-one-rgb), 0.32) 302deg,
      rgba(var(--cycle-one-rgb), 0) 360deg
    ),
    radial-gradient(ellipse at 18% 18%, rgba(var(--cycle-one-rgb), 0.34), transparent 38%),
    radial-gradient(ellipse at 78% 30%, rgba(var(--cycle-two-rgb), 0.3), transparent 42%),
    radial-gradient(ellipse at 50% 88%, rgba(var(--cycle-three-rgb), 0.22), transparent 48%);
  filter: blur(36px) saturate(1.42) hue-rotate(0deg);
  mix-blend-mode: screen;
  transform: scale(1.24) rotate(0deg);
  animation: aurora-color-cycle var(--aurora-cycle-duration) linear infinite;
  will-change: transform, filter, opacity;
}

.sky-aurora {
  z-index: 2;
  opacity: var(--aurora-opacity);
  background:
    linear-gradient(104deg, transparent 0 18%, rgba(68, 226, 187, 0.13) 24%, transparent 37%),
    linear-gradient(112deg, transparent 0 30%, rgba(137, 91, 240, 0.12) 39%, transparent 53%),
    linear-gradient(96deg, transparent 0 47%, rgba(99, 213, 255, 0.11) 55%, transparent 68%);
  filter: blur(20px) saturate(1.3);
  transform: scale(1.08);
  animation: aurora-drift 18s ease-in-out infinite alternate;
  will-change: transform, opacity;
}

.sky-clouds {
  z-index: 2;
  opacity: var(--cloud-opacity);
  background:
    repeating-linear-gradient(18deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 42px),
    linear-gradient(162deg, transparent 0 25%, rgba(80, 196, 210, 0.08) 35%, transparent 55%),
    linear-gradient(20deg, transparent 0 40%, rgba(252, 185, 91, 0.075) 55%, transparent 75%);
  filter: blur(6px);
  animation: cloud-drift 28s linear infinite;
  will-change: transform, opacity;
}

.star-field,
.meteor-field {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

.star-field {
  z-index: 3;
}

.meteor-field {
  z-index: 4;
}

.star {
  position: absolute;
  left: calc(var(--x) * 1%);
  top: calc(var(--y) * 1%);
  width: calc(var(--size) * 1px);
  height: calc(var(--size) * 1px);
  border-radius: 999px;
  background: var(--star-color);
  opacity: var(--opacity);
  box-shadow:
    0 0 calc(var(--size) * 3px) rgba(var(--star-rgb), 0.72),
    0 0 calc(var(--size) * 8px) rgba(var(--glow-rgb), 0.24);
  animation: twinkle var(--duration) ease-in-out infinite;
  animation-delay: var(--delay);
  transform: translateZ(0);
  will-change: transform, opacity;
  backface-visibility: hidden;
}

.star.bright::before,
.star.bright::after {
  content: "";
  position: absolute;
  inset: 50% auto auto 50%;
  width: calc(var(--size) * 5px);
  height: 1px;
  border-radius: 999px;
  background: linear-gradient(90deg, transparent, rgba(var(--star-rgb), 0.8), transparent);
  opacity: 0.55;
  transform: translate(-50%, -50%);
}

.star.bright::after {
  width: 1px;
  height: calc(var(--size) * 5px);
  background: linear-gradient(180deg, transparent, rgba(var(--star-rgb), 0.8), transparent);
}

.meteor {
  position: absolute;
  left: calc(var(--start-x) * 1vw);
  top: calc(var(--start-y) * 1vh);
  width: calc(var(--trail-scale) * var(--trail-length));
  height: max(2px, calc(var(--size) * 1px));
  border-radius: 999px;
  opacity: 0;
  transform-origin: right center;
  background:
    linear-gradient(
      90deg,
      transparent 0%,
      rgba(var(--glow-rgb), 0.34) 34%,
      rgba(var(--meteor-rgb), 0.72) 70%,
      var(--meteor-color) 100%
    );
  box-shadow:
    0 0 10px rgba(var(--meteor-rgb), 0.58),
    0 0 24px rgba(var(--glow-rgb), 0.36);
  animation: meteor-fall var(--duration) linear infinite;
  animation-delay: var(--delay);
  backface-visibility: hidden;
  will-change: transform, opacity;
}

.meteor::after {
  content: "";
  position: absolute;
  right: -3px;
  top: 50%;
  width: calc(var(--size) * 4px);
  height: calc(var(--size) * 4px);
  border-radius: 999px;
  background: #ffffff;
  box-shadow:
    0 0 10px var(--meteor-color),
    0 0 24px var(--glow-color);
  transform: translateY(-50%);
}

.horizon-glow {
  z-index: 5;
  opacity: var(--horizon-opacity);
  background:
    linear-gradient(0deg, rgba(255, 210, 134, 0.22), transparent 28%),
    linear-gradient(0deg, rgba(75, 226, 216, 0.12), transparent 18%);
}

.grain {
  z-index: 6;
  opacity: 0.1;
  background:
    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 3px),
    repeating-linear-gradient(90deg, rgba(0, 0, 0, 0.045) 0 1px, transparent 1px 4px);
  mix-blend-mode: overlay;
}

.vignette {
  z-index: 7;
  opacity: var(--vignette-opacity);
  background:
    linear-gradient(90deg, rgba(0, 0, 0, 0.7), transparent 22%, transparent 78%, rgba(0, 0, 0, 0.62)),
    linear-gradient(180deg, rgba(0, 0, 0, 0.55), transparent 30%, rgba(0, 0, 0, 0.72));
}

.controls-shell {
  display: none;
}

body.controls-enabled .controls-shell {
  position: fixed;
  right: 18px;
  top: 18px;
  z-index: 20;
  display: block;
  color: #f7f3df;
}

.control-panel {
  position: absolute;
  right: 0;
  top: 0;
  width: min(340px, calc(100vw - 36px));
  max-height: calc(100vh - 78px);
  overflow: auto;
  padding: 16px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 8px;
  background: rgba(9, 14, 26, 0.82);
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.42);
  backdrop-filter: blur(18px);
  transform-origin: top right;
}

body:not(.panel-open) .control-panel {
  visibility: hidden;
  opacity: 0;
  transform: translateY(-6px) scale(0.98);
  pointer-events: none;
}

.panel-title {
  margin-bottom: 14px;
  font-size: 16px;
  font-weight: 700;
}

.control-row,
.control-stack,
.switch-row {
  display: flex;
  gap: 12px;
  align-items: center;
  justify-content: space-between;
  margin: 12px 0;
  font-size: 13px;
  color: rgba(247, 243, 223, 0.92);
}

.control-stack {
  display: grid;
  gap: 8px;
}

.switch-row {
  justify-content: flex-start;
}

.control-row input[type="color"] {
  width: 48px;
  height: 30px;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: transparent;
  cursor: pointer;
}

input[type="range"] {
  width: 100%;
  accent-color: #ffd86a;
}

input[type="checkbox"] {
  width: 18px;
  height: 18px;
  accent-color: #5de8ff;
}

output {
  min-width: 32px;
  display: inline-block;
  text-align: right;
  color: #ffd86a;
  font-variant-numeric: tabular-nums;
}

@keyframes meteor-fall {
  0% {
    opacity: 0;
    transform: translate3d(0, 0, 0) rotate(var(--rotation));
  }

  6% {
    opacity: var(--meteor-opacity);
  }

  78% {
    opacity: calc(var(--meteor-opacity) * 0.92);
  }

  100% {
    opacity: 0;
    transform: translate3d(var(--travel-x), 132vh, 0) rotate(var(--rotation));
  }
}

@keyframes twinkle {
  0%,
  100% {
    opacity: 0;
    transform: translate3d(0, 0, 0) scale(0.82);
  }

  16% {
    opacity: calc(var(--opacity) * (1 - var(--twinkle-strength) * 0.34));
    transform: translate3d(0, 0, 0) scale(0.92);
  }

  52% {
    opacity: var(--opacity);
    transform: translate3d(0, 0, 0) scale(calc(1 + var(--twinkle-strength) * 0.34));
  }

  84% {
    opacity: calc(var(--opacity) * (0.82 + var(--twinkle-strength) * 0.18));
    transform: translate3d(0, 0, 0) scale(calc(0.96 + var(--twinkle-strength) * 0.2));
  }
}

@keyframes aurora-drift {
  from {
    transform: translate3d(-2%, -1%, 0) scale(1.08);
  }

  to {
    transform: translate3d(2%, 1%, 0) scale(1.12);
  }
}

@keyframes aurora-color-cycle {
  0% {
    filter: blur(36px) saturate(1.42) hue-rotate(0deg);
    transform: scale(1.24) rotate(0deg) translate3d(-1%, -1%, 0);
  }

  50% {
    filter: blur(42px) saturate(1.7) hue-rotate(180deg);
    transform: scale(1.3) rotate(180deg) translate3d(1%, 1%, 0);
  }

  100% {
    filter: blur(36px) saturate(1.42) hue-rotate(360deg);
    transform: scale(1.24) rotate(360deg) translate3d(-1%, -1%, 0);
  }
}

@keyframes cloud-drift {
  from {
    transform: translate3d(-2%, 0, 0);
  }

  to {
    transform: translate3d(2%, 0, 0);
  }
}

@media (max-width: 640px) {
  body.controls-enabled .controls-shell {
    right: 12px;
    top: 12px;
  }

  .control-panel {
    padding: 14px;
  }
}
