/* Holiday modes (Admin → Site modes): very discreet. A handful of small, faint particles drifting
   behind the content — no glow, no message. Works with every style (loaded by landing.php). */
.season-fx{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.season-fx::before{display:none}
.season-fx .p{position:absolute;top:-6vh;opacity:.32;will-change:transform}
.season-fx .k-fall{animation:fxFall var(--dur) linear var(--delay) infinite}
.season-fx .k-rise{top:auto;bottom:-6vh;animation:fxRise var(--dur) ease-in var(--delay) infinite}
.season-fx .k-fly{left:0;animation:fxFly var(--dur) linear var(--delay) infinite}
.season-fx .k-twinkle{animation:fxTwinkle var(--dur) ease-in-out var(--delay) infinite}
.season-fx .snow{border-radius:50%;background:#9fb3cc}
html[data-theme="dark"] .season-fx .snow{background:#e9eef5}
.season-fx .confetti{width:4px;height:8px;border-radius:1px}
.season-fx .petal{width:6px;height:8px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%}
.season-fx .glyph{line-height:1}
.season-fx .star{color:#c9a13f}
.season-fx .bat svg{display:block;width:100%;fill:currentColor;color:#3b2a4a;animation:fxFlap .26s ease-in-out infinite alternate;transform-origin:center}
html[data-theme="dark"] .season-fx .bat svg{color:#9d8bb5}
@keyframes fxFall{from{transform:translate3d(0,0,0) rotate(0)}to{transform:translate3d(var(--drift),114vh,0) rotate(var(--spin))}}
@keyframes fxRise{0%{transform:translate3d(0,0,0);opacity:0}20%{opacity:.32}100%{transform:translate3d(var(--drift),-114vh,0);opacity:0}}
@keyframes fxFly{0%{transform:translate3d(-8vw,0,0)}50%{transform:translate3d(50vw,var(--bob),0)}100%{transform:translate3d(110vw,0,0)}}
@keyframes fxFlap{from{transform:scaleY(1)}to{transform:scaleY(.5)}}
@keyframes fxTwinkle{0%,100%{opacity:0;transform:scale(.7)}50%{opacity:.35;transform:scale(1)}}
/* the page content stays above the particles */
:where(body>header,body>main,body>footer,body>section){position:relative;z-index:1}
/* holiday logos: only a hint of colour */
.logo-mark.season{filter:saturate(.28) contrast(.96)}
