/* Seasonal decorations base (seasons/season.js). Season files style .ss-* under html.season-<key>. */
.ss-host { position: relative; }
.ss-edge, .ss-string, .ss-amb { position: absolute; pointer-events: none; z-index: 2; user-select: none; }
.ss-edge *, .ss-string *, .ss-amb * { pointer-events: none; }
.ss-edge svg, .ss-string svg { display: block; overflow: visible; }
.ss-amb { inset: 0; overflow: hidden; z-index: 1; }
/* strands hang in the gap under the header row; above its wrappers so nothing hides them (dropdowns stay higher) */
.ss-string { z-index: 30; }
/* edges above the host's own content (slider progress bar, card borders); dropdown menus stay higher */
.ss-edge { z-index: 20; }
.ss-amb > i { position: absolute; display: block; font-style: normal; will-change: transform, opacity; }

@keyframes ss-fall { from { transform: translate3d(0, -40px, 0); } to { transform: translate3d(24px, 700px, 0); } }
@keyframes ss-sway { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(5deg); } }
@keyframes ss-float { 0%, 100% { transform: translate3d(0, 0, 0) rotate(0); } 50% { transform: translate3d(14px, -18px, 0) rotate(20deg); } }
@keyframes ss-glow { 0%, 100% { opacity: .15; } 50% { opacity: .95; } }
@keyframes ss-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(10px); } }

@media (prefers-reduced-motion: reduce) {
	.ss-edge *, .ss-string *, .ss-edge, .ss-string { animation: none !important; }
	.ss-amb { display: none; }
}

@media print {
	.ss-edge, .ss-string, .ss-amb { display: none !important; }
}
