@charset "UTF-8";
/**
 * Seasonal effects — enqueued only while an effect is active.
 */
.spektrix-seasonal-effects {
  pointer-events: none;
  position: absolute;
  inset: 0;
  overflow: hidden;
  z-index: 5;
}

.spektrix-seasonal-effects--snow .spektrix-seasonal-effects__flake {
  position: absolute;
  top: -12px;
  border-radius: 50%;
  background: #fff;
  /* Soft dark rim so flakes still read on white/light headers. */
  box-shadow: 0 0 0 1px rgba(40, 55, 75, 0.22), 0 0 2px rgba(40, 55, 75, 0.18), 0 0 3px rgba(255, 255, 255, 0.45);
  opacity: var(--flake-opacity, 0.7);
  /*
   * Mild ease-in-out (control points close to the diagonal) so sway still
   * breathes without a long decelerate at every keyframe.
   */
  animation-timing-function: cubic-bezier(0.4, 0.18, 0.6, 0.82);
  animation-iteration-count: 1;
  animation-fill-mode: forwards;
  will-change: transform;
}
.spektrix-seasonal-effects--snow .spektrix-seasonal-effects__flake--drift-a {
  animation-name: spektrix-seasonal-snowfall-a;
}
.spektrix-seasonal-effects--snow .spektrix-seasonal-effects__flake--drift-b {
  animation-name: spektrix-seasonal-snowfall-b;
}
.spektrix-seasonal-effects--snow .spektrix-seasonal-effects__flake--drift-c {
  animation-name: spektrix-seasonal-snowfall-c;
}

.spektrix-seasonal-effects__cobweb {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1090;
  width: 76px;
  height: 76px;
  pointer-events: none;
  color: rgba(255, 255, 255, 0.32);
  opacity: 0.9;
  filter: drop-shadow(0 0 0.5px rgba(0, 0, 0, 0.35));
}
.spektrix-seasonal-effects__cobweb .spektrix-seasonal-effects__cobweb-svg {
  display: block;
  width: 100%;
  height: 100%;
}

@media screen and (max-width: 781px) {
  .spektrix-seasonal-effects__cobweb {
    width: 56px;
    height: 56px;
  }
}
/* Icicles — winter corner accent (pairs with snow). */
.spektrix-seasonal-effects__icicles {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1090;
  width: 90px;
  height: 60px;
  pointer-events: none;
  color: #f2f7fc;
  opacity: 0.9;
  filter: drop-shadow(0 1px 1px rgba(40, 55, 75, 0.14));
}
.spektrix-seasonal-effects__icicles .spektrix-seasonal-effects__icicles-svg {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}

@media screen and (max-width: 781px) {
  .spektrix-seasonal-effects__icicles {
    width: 68px;
    height: 46px;
  }
}
/* Soft cool rim so icicles still read on light headers. */
body:has(#masthead.header-light) .spektrix-seasonal-effects__icicles {
  color: #dfe8f2;
  opacity: 0.82;
  filter: drop-shadow(0 0 0.75px rgba(40, 55, 75, 0.28));
}

.admin-bar .spektrix-seasonal-effects__cobweb,
.admin-bar .spektrix-seasonal-effects__icicles {
  top: 32px;
}

@media screen and (max-width: 782px) {
  .admin-bar .spektrix-seasonal-effects__cobweb,
  .admin-bar .spektrix-seasonal-effects__icicles {
    top: 46px;
  }
}
/* Stronger on light headers so the web still reads. */
body:has(#masthead.header-light) .spektrix-seasonal-effects__cobweb {
  color: rgba(30, 30, 30, 0.18);
}

.spektrix-seasonal-effects--bats {
  position: fixed;
  inset: 0;
  /* Above .site-header (z-index: 1001) so bats fly over the nav. */
  z-index: 1100;
  overflow: hidden;
}
.spektrix-seasonal-effects--bats .spektrix-seasonal-effects__bat {
  position: absolute;
  left: -70px;
  animation-name: spektrix-seasonal-bat-fly;
  /* Nearly constant speed across. */
  animation-timing-function: cubic-bezier(0.03, 0.01, 0.97, 0.99);
  animation-fill-mode: forwards;
  will-change: transform;
}
.spektrix-seasonal-effects--bats .spektrix-seasonal-effects__flyer-img {
  display: block;
  height: auto;
  user-select: none;
  pointer-events: none;
}
.spektrix-seasonal-effects--bats .spektrix-seasonal-effects__flyer-img--bat {
  width: 32px;
  filter: brightness(0);
}
.spektrix-seasonal-effects--bats .spektrix-seasonal-effects__flyer-img--ghost {
  width: 26px;
  transform: rotate(20deg);
  opacity: 0.8;
  filter: brightness(0.92) drop-shadow(0 0 0.75px rgba(0, 0, 0, 0.85)) drop-shadow(0 0 1.25px rgba(0, 0, 0, 0.45)) drop-shadow(0 0 1px rgba(255, 255, 255, 0.65));
}

/* Fall through the header with side sway; clipped by overflow. */
@keyframes spektrix-seasonal-snowfall-a {
  0% {
    transform: translate3d(0, 0, 0);
  }
  32% {
    transform: translate3d(12px, 40px, 0);
  }
  64% {
    transform: translate3d(-10px, 85px, 0);
  }
  100% {
    transform: translate3d(5px, 130px, 0);
  }
}
@keyframes spektrix-seasonal-snowfall-b {
  0% {
    transform: translate3d(0, 0, 0);
  }
  32% {
    transform: translate3d(-14px, 42px, 0);
  }
  64% {
    transform: translate3d(11px, 86px, 0);
  }
  100% {
    transform: translate3d(-4px, 130px, 0);
  }
}
@keyframes spektrix-seasonal-snowfall-c {
  0% {
    transform: translate3d(0, 0, 0);
  }
  32% {
    transform: translate3d(10px, 38px, 0);
  }
  64% {
    transform: translate3d(-9px, 84px, 0);
  }
  100% {
    transform: translate3d(4px, 130px, 0);
  }
}
@keyframes spektrix-seasonal-bat-fly {
  0% {
    transform: translate3d(0, 0, 0) rotate(-4deg);
  }
  25% {
    transform: translate3d(28vw, -5vh, 0) rotate(-5deg);
  }
  50% {
    transform: translate3d(56vw, -9vh, 0) rotate(-6deg);
  }
  75% {
    transform: translate3d(84vw, -12vh, 0) rotate(-7deg);
  }
  100% {
    transform: translate3d(118vw, -15vh, 0) rotate(-8deg);
  }
}
@media (prefers-reduced-motion: reduce) {
  .spektrix-seasonal-effects,
  .spektrix-seasonal-effects__cobweb,
  .spektrix-seasonal-effects__icicles {
    display: none !important;
  }
}

/*# sourceMappingURL=seasonal-effects.css.map */
