/* Holiday atmosphere — background mesh + floating particles */

.theme-decor {
  pointer-events: none;
  position: fixed;
  inset: 0;
  z-index: 0;
  overflow: hidden;
}

.theme-decor__bg {
  position: absolute;
  inset: -10%;
  background-image: var(--theme-bg-image, none);
  background-size: var(--theme-bg-size, 500px 500px);
  background-repeat: repeat;
  background-position: center;
  opacity: var(--theme-decor-bg-opacity, 0.45);
  animation: theme-bg-shift 24s ease-in-out infinite alternate;
}

@keyframes theme-bg-shift {
  0% { transform: translate(0, 0) scale(1); }
  100% { transform: translate(-2%, 1%) scale(1.03); }
}

body > *:not(.theme-decor):not(.contact-modal) {
  position: relative;
  z-index: 1;
}

body > .contact-modal {
  position: fixed;
  inset: 0;
  z-index: 1000;
}

.theme-decor__particle {
  position: absolute;
  opacity: var(--theme-particle-opacity, 0.16);
  animation: theme-float 14s ease-in-out infinite;
  font-size: 1.4rem;
  user-select: none;
  filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.06));
}

.theme-decor--snow .theme-decor__particle {
  color: #94a3b8;
  font-size: 1.1rem;
  opacity: 0.22;
  animation-name: theme-snow;
}

.theme-decor--hearts .theme-decor__particle {
  color: #e11d48;
  opacity: 0.18;
}

.theme-decor--flowers .theme-decor__particle {
  color: #10b981;
  opacity: 0.2;
}

.theme-decor--confetti .theme-decor__particle {
  opacity: 0.22;
  font-size: 1.2rem;
  animation-name: theme-confetti;
}

.theme-decor--rings .theme-decor__particle {
  color: #db7093;
  opacity: 0.14;
  font-size: 1.3rem;
}

@keyframes theme-float {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-16px) rotate(10deg); }
}

@keyframes theme-snow {
  0% { transform: translateY(-10px) rotate(0deg); opacity: 0.1; }
  50% { transform: translateY(12px) rotate(180deg); opacity: 0.28; }
  100% { transform: translateY(-10px) rotate(360deg); opacity: 0.1; }
}

@keyframes theme-confetti {
  0%, 100% { transform: translateY(0) rotate(0deg) scale(1); }
  33% { transform: translateY(-8px) rotate(-12deg) scale(1.1); }
  66% { transform: translateY(6px) rotate(12deg) scale(0.95); }
}

.theme-decor__particle:nth-child(2) { top: 6%; left: 8%; animation-delay: 0s; font-size: 1.1rem; }
.theme-decor__particle:nth-child(3) { top: 14%; right: 12%; animation-delay: 1.2s; }
.theme-decor__particle:nth-child(4) { top: 32%; left: 5%; animation-delay: 2.8s; font-size: 1.6rem; }
.theme-decor__particle:nth-child(5) { top: 48%; right: 8%; animation-delay: 0.6s; }
.theme-decor__particle:nth-child(6) { top: 62%; left: 15%; animation-delay: 3.5s; font-size: 1rem; }
.theme-decor__particle:nth-child(7) { top: 78%; right: 18%; animation-delay: 1.8s; }
.theme-decor__particle:nth-child(8) { top: 88%; left: 35%; animation-delay: 4.2s; }
.theme-decor__particle:nth-child(9) { top: 22%; left: 42%; animation-delay: 2.2s; font-size: 1.8rem; }
.theme-decor__particle:nth-child(10) { top: 55%; right: 38%; animation-delay: 0.9s; }
.theme-decor__particle:nth-child(11) { top: 38%; right: 5%; animation-delay: 3.1s; font-size: 1.2rem; }
.theme-decor__particle:nth-child(12) { top: 72%; left: 55%; animation-delay: 1.5s; }
.theme-decor__particle:nth-child(13) { top: 8%; left: 55%; animation-delay: 4.8s; font-size: 0.95rem; }

/* Per-theme decor intensity */
body[data-theme="new-year"] { --theme-decor-bg-opacity: 0.5; }
body[data-theme="valentine"] { --theme-decor-bg-opacity: 0.48; }
body[data-theme="march8"] { --theme-decor-bg-opacity: 0.5; }
body[data-theme="graduation"] { --theme-decor-bg-opacity: 0.48; }
body[data-theme="wedding"] { --theme-decor-bg-opacity: 0.42; }
body[data-theme="birthday"] { --theme-decor-bg-opacity: 0.52; }

/* remove old per-theme decor bg gradients */

@media (max-width: 700px) {
  .theme-decor__particle { font-size: 1rem; opacity: 0.1; }
  .theme-decor__bg { opacity: 0.4; }
}

@media (prefers-reduced-motion: reduce) {
  .theme-decor__bg,
  .theme-decor__particle { animation: none; }
}
