/* Individual transforms preserve the existing scene transitions and pointer parallax. */
.motes i{width:3px;height:3px;background:#fff1ba;box-shadow:0 0 8px 2px #ffda8d8c,0 0 19px #ffe7a466}
.motes .mote-large{width:6px;height:6px;background:#fff8df;box-shadow:0 0 12px 3px #ffdf94a8,0 0 26px #ffe5a180}
.motes .mote-large:before,.motes .mote-large:after{content:'';position:absolute;left:50%;top:50%;background:#fff4cd;border-radius:100%;transform:translate(-50%,-50%)}
.motes .mote-large:before{width:16px;height:1px}.motes .mote-large:after{width:1px;height:16px}
.motes .mote-soft{width:2px;height:2px;background:#d8f5df;box-shadow:0 0 10px 2px #bfe8d182}
.stage.discovery-active .motes{right:46%;z-index:3}
footer .motion-switch{margin-left:auto;display:inline-flex;align-items:center;gap:10px;padding:5px 0;color:#fff7df;font:800 12px 'Nunito','Trebuchet MS',sans-serif;letter-spacing:.03em}
.motion-switch__track{position:relative;display:block;width:59px;height:30px;border:1px solid #f6e6a7a6;border-radius:99px;background:linear-gradient(110deg,#518774,#275966);box-shadow:inset 0 2px 5px #092b3199,0 0 10px #cbe7ad54;transition:background .35s,box-shadow .35s}
.motion-switch__thumb{position:absolute;left:31px;top:3px;width:22px;height:22px;border-radius:50%;background:linear-gradient(145deg,#fff8d7,#e1bd70);box-shadow:0 2px 5px #041e2699,inset 0 1px #fff;transition:transform .38s cubic-bezier(.2,1.3,.35,1),background .3s}
.motion-switch__spark{position:absolute;left:12px;top:4px;color:#fff0b6;font-size:15px;line-height:1;text-shadow:0 0 8px #fff3b6;transform-origin:center;animation:motion-sparkle 2.4s ease-in-out infinite}
.motion-switch[data-motion=off] .motion-switch__track{background:linear-gradient(110deg,#243d49,#355362);box-shadow:inset 0 2px 5px #071e2eb3}
.motion-switch[data-motion=off] .motion-switch__thumb{transform:translateX(-27px);background:linear-gradient(145deg,#e9ece4,#9baeb4)}
.motion-switch[data-motion=off] .motion-switch__spark{opacity:0;animation:none}
.motion-switch:hover .motion-switch__track{box-shadow:inset 0 2px 5px #092b3199,0 0 15px #ffebad8a}
@keyframes motion-sparkle{50%{transform:rotate(35deg) scale(1.25);opacity:.65}}
@media(prefers-reduced-motion:reduce){.motion-switch__track,.motion-switch__thumb{transition:none}.motion-switch__spark{animation:none}}
@keyframes village-levitate {
  0%,100% { translate: 0 0; }
  50% { translate: 3px -7px; }
}
/* Overscan covers both pointer travel and the independent idle drift. */
@keyframes lamia-side-drift {
  0%,100% { translate: -4px 0; }
  50% { translate: 4px 0; }
}
.stage.showcase .scene-art{inset:-32px}
@media(prefers-reduced-motion:no-preference){
  body:has(#motion-toggle[aria-pressed="false"]) .stage.showcase .scene-art{
    animation:village-levitate 8s ease-in-out infinite;
  }
  body:has(#motion-toggle[aria-pressed="false"]) .py-character-float{
    animation:village-levitate 6s ease-in-out infinite;
  }
  body:has(#motion-toggle[aria-pressed="false"]) .py-character-float[data-character=keeper]{
    animation:lamia-side-drift 6s ease-in-out infinite;
  }
}
@keyframes love-sway {
  from { translate: -2px 5px; rotate: -12deg; }
  to { translate: 2px -6px; rotate: 12deg; }
}
@media (prefers-reduced-motion: no-preference) {
  body:has(#motion-toggle[aria-pressed="false"]) .relationship-picture > .relationship-image,
  body:has(#motion-toggle[aria-pressed="false"]) .dev-cover > img {
    translate: var(--banner-x, 0px) var(--banner-y, 0px);
    scale: 1.055;
    transition: translate .7s ease-out;
  }
  body:has(#motion-toggle[aria-pressed="false"]) .adult-love-border > svg {
    animation: love-sway 3.8s ease-in-out infinite alternate;
    transform-origin: center;
  }
  body:has(#motion-toggle[aria-pressed="false"]) .adult-love-border > svg:nth-child(2n) {
    animation-duration: 4.6s;
    animation-delay: -2.1s;
  }
  body:has(#motion-toggle[aria-pressed="false"]) .adult-love-border > svg:nth-child(3n) {
    animation-duration: 5.2s;
    animation-delay: -3.4s;
  }
}
