/* Login decorations only. Animate transforms and opacity; never cover the form. */
html[data-festival] .auth-bg > .flex-root { position: relative; z-index: 1; }
.festival-login-scene { width: min(340px, 100%); margin-top: 2.25rem; pointer-events: none; }
.festival-login-scene svg { display: block; width: 100%; height: auto; overflow: visible; }
.festival-login-particles { position: fixed; inset: 0; overflow: hidden; pointer-events: none; z-index: 0; }
.festival-login-particles span {
    position: absolute; left: var(--x); top: -12px;
    width: var(--size); height: var(--size); border-radius: 50%;
    background: var(--bs-primary); opacity: 0;
    animation: festival-drift var(--duration) linear var(--delay) infinite;
}
html[data-festival="christmas"] .festival-login-particles span { background: #b8846a; }
html[data-festival="deepavali"] .festival-login-particles span { top: auto; bottom: -12px; animation-name: festival-rise; }
html[data-festival="halloween"] .festival-login-particles span { top: auto; bottom: -12px; animation-name: festival-rise; opacity: .25; }
.festival-motion-toggle {
    position: fixed; bottom: 18px; left: 20px; z-index: 2;
    color: var(--bs-link-color); background: var(--portal-sidebar-bg);
    border: 1px solid var(--portal-border); border-radius: 20px;
    padding: 7px 13px; font: inherit; font-size: 11px; cursor: pointer;
}
.festival-motion-toggle:focus-visible { outline: 2px solid var(--bs-primary); outline-offset: 3px; }
.festival-glow { animation: festival-glow 4s ease-in-out infinite alternate; transform-origin: center; }
.halloween-bat { transform-box: fill-box; transform-origin: center; animation: bat-hover 6s ease-in-out infinite; }
.bat-two { animation-delay: -3s; animation-duration: 7.5s; }
.pumpkin-face { animation: pumpkin-warmth 4s ease-in-out infinite alternate; }
.diya-flame { transform-box: fill-box; transform-origin: center bottom; animation: diya-flicker 2.7s ease-in-out infinite alternate; }
.diya-small { opacity: .8; }
.festival-spark { animation: festival-twinkle 4s ease-in-out infinite; }
.spark-two { animation-delay: -1.4s; }
.spark-three { animation-delay: -2.8s; }
.christmas-ornament { transform-origin: 82px 24px; animation: ornament-sway 6s ease-in-out infinite alternate; }
.ornament-two { transform-origin: 281px 24px; animation-duration: 7s; animation-delay: -3s; }
html[data-festival-motion="paused"] .festival-login-scene *,
html[data-festival-motion="paused"] .festival-login-particles span,
html[data-festival-page-hidden] .festival-login-scene *,
html[data-festival-page-hidden] .festival-login-particles span { animation-play-state: paused !important; }
@keyframes festival-drift {
    0% { opacity: 0; transform: translate3d(0, -10px, 0); }
    12%, 80% { opacity: .45; }
    100% { opacity: 0; transform: translate3d(45px, 102vh, 0); }
}
@keyframes festival-rise {
    0% { opacity: 0; transform: translate3d(0, 10px, 0); }
    15%, 75% { opacity: .35; }
    100% { opacity: 0; transform: translate3d(-35px, -102vh, 0); }
}
@keyframes festival-glow { from { opacity: .55; } to { opacity: 1; } }
@keyframes pumpkin-warmth { from { opacity: .65; } to { opacity: 1; } }
@keyframes bat-hover { 0%, 100% { transform: translate(0, 0) rotate(-3deg); } 50% { transform: translate(12px, -8px) rotate(4deg); } }
@keyframes diya-flicker { 0%, 100% { transform: scale(.95, 1) rotate(-2deg); opacity: .85; } 50% { transform: scale(1.03, .94) rotate(2deg); opacity: 1; } }
@keyframes festival-twinkle { 0%, 100% { opacity: .45; } 50% { opacity: 1; } }
@keyframes ornament-sway { from { transform: rotate(-5deg); } to { transform: rotate(5deg); } }
@media (max-width: 991.98px) {
    .festival-login-scene { width: 210px; margin: 1rem auto 0; }
    .festival-motion-toggle { bottom: 10px; left: 10px; }
}
@media (prefers-reduced-motion: reduce) {
    .festival-login-scene * { animation: none !important; }
    .festival-login-particles, .festival-motion-toggle { display: none !important; }
}
