/* ============================================================
   The enchantment layer - idle life for Wolfert, sparkle &
   glow for the page. Pure CSS, animates transform/opacity only.
   Everything in here dies under prefers-reduced-motion.
   ============================================================ */

/* --- Wolfert's idle life --- */
@keyframes wiz-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes wiz-blink{0%,93%,100%{transform:scaleY(1)}95.5%{transform:scaleY(.08)}}
@keyframes wiz-twinkle{0%,100%{opacity:.25;transform:scale(.85)}50%{opacity:1;transform:scale(1.18)}}
@keyframes wiz-glowpulse{0%,100%{opacity:.5}50%{opacity:.95}}
@keyframes wiz-bubrise{0%{transform:translateY(7px);opacity:0}30%{opacity:.9}100%{transform:translateY(-15px);opacity:0}}
@keyframes wiz-wave{0%,100%{transform:rotate(0)}40%{transform:rotate(9deg)}70%{transform:rotate(-4deg)}}

.wiz-anim{animation:wiz-float 5.5s ease-in-out infinite}
.wiz-anim .wiz-eyes{animation:wiz-blink 4.6s linear infinite;transform-box:fill-box;transform-origin:center}
.wiz-spark{animation:wiz-twinkle 2.2s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.wiz-spark2{animation-delay:.7s}
.wiz-spark3{animation-delay:1.3s}
.wiz-glow{animation:wiz-glowpulse 2.8s ease-in-out infinite}
.wiz-bub{animation:wiz-bubrise 2.6s ease-in infinite;transform-box:fill-box;transform-origin:center}
.wiz-bub2{animation-delay:.9s}
.wiz-bub3{animation-delay:1.7s}
.wiz-anim .wiz-wavearm{animation:wiz-wave 1.9s ease-in-out infinite;transform-box:fill-box;transform-origin:15% 95%}

/* --- ambient sparkles (the ✦ spans) --- */
.spk{animation:wiz-twinkle 3.2s ease-in-out infinite}
.spk:nth-of-type(2n){animation-delay:1.1s}
.spk:nth-of-type(3n){animation-delay:2s}

/* --- button sheen sweep --- */
@keyframes btn-sheen{0%,55%{transform:translateX(-130%) skewX(-18deg)}100%{transform:translateX(340%) skewX(-18deg)}}
.btn-magic::after{content:"";position:absolute;top:0;left:0;width:45%;height:100%;
  background:linear-gradient(105deg,transparent,rgba(255,255,255,.32),transparent);
  transform:translateX(-130%) skewX(-18deg);animation:btn-sheen 3.8s ease-in-out infinite;pointer-events:none}

/* --- starfields drifting over the dark panels --- */
@keyframes star-drift{from{transform:translateY(0)}to{transform:translateY(-22px)}}
.panel-ink::before,.final::before{content:"";position:absolute;inset:-40px;pointer-events:none;opacity:.45;
  background-image:
    radial-gradient(circle, rgba(156,143,255,.8) 1px, transparent 1.6px),
    radial-gradient(circle, rgba(231,198,106,.7) 1px, transparent 1.6px);
  background-size:150px 150px, 230px 230px;
  background-position:18px 32px, 95px 120px;
  animation:star-drift 22s ease-in-out infinite alternate}

/* --- gold glow on the magic words in dark headings --- */
.h-em-dark{text-shadow:var(--glow-gold)}

/* --- calm for those who ask for it --- */
@media (prefers-reduced-motion: reduce){
  .wiz-anim,
  .wiz-anim .wiz-eyes,
  .wiz-anim .wiz-wavearm,
  .wiz-spark,
  .wiz-glow,
  .wiz-bub,
  .spk,
  .btn-magic::after,
  .panel-ink::before,
  .final::before{animation:none !important}
  html{scroll-behavior:auto}
}
