/* Décorations saisonnières — voir inc/decorations.php */
.oz-deco,.oz-deco *{pointer-events:none!important;box-sizing:border-box}
.oz-deco-layer{position:absolute;left:0;width:100%;overflow:hidden}
.oz-deco-fixed{position:fixed;top:0;height:100%}
.oz-deco-page{top:0;height:100vh}
.oz-deco{position:static}
.oz-deco-layer{z-index:var(--ozz,900)}

/* ── Images perso ── */
.oz-deco-item{position:absolute;opacity:var(--ozo,1);transform:var(--ozb,none)}
.oz-deco-item img{display:block;width:100%;height:auto;transform:rotate(var(--ozr,0deg));animation-duration:var(--ozd,6s);animation-delay:var(--ozdl,0s);animation-iteration-count:infinite;animation-timing-function:ease-in-out}
.oz-a-float img{animation-name:ozd-float}
.oz-a-swing img{animation-name:ozd-swing;transform-origin:50% 0}
.oz-a-pulse img{animation-name:ozd-pulse}
.oz-a-glow img{animation-name:ozd-glow;animation-direction:alternate}
.oz-a-flicker img{animation-name:ozd-flicker;animation-timing-function:steps(1,end)}
.oz-a-fall img{animation-name:ozd-fall;animation-timing-function:linear}
.oz-a-cross_r img{animation-name:ozd-cross-r;animation-timing-function:linear}
.oz-a-cross_l img{animation-name:ozd-cross-l;animation-timing-function:linear}
@keyframes ozd-float{0%,100%{transform:rotate(var(--ozr,0deg)) translateY(0)}50%{transform:rotate(var(--ozr,0deg)) translateY(-2.2vh)}}
@keyframes ozd-swing{0%,100%{transform:rotate(calc(var(--ozr,0deg) - 5deg))}50%{transform:rotate(calc(var(--ozr,0deg) + 5deg))}}
@keyframes ozd-pulse{0%,100%{transform:rotate(var(--ozr,0deg)) scale(1)}50%{transform:rotate(var(--ozr,0deg)) scale(1.07)}}
@keyframes ozd-glow{from{filter:drop-shadow(0 0 4px rgba(255,170,0,.4)) brightness(1)}to{filter:drop-shadow(0 0 22px rgba(255,190,40,.95)) brightness(1.18)}}
@keyframes ozd-flicker{0%{opacity:1}12%{opacity:.55}20%{opacity:1}47%{opacity:.8}55%{opacity:.4}62%{opacity:1}100%{opacity:1}}
@keyframes ozd-fall{from{transform:translate3d(0,-30vh,0) rotate(var(--ozr,0deg))}to{transform:translate3d(3vw,125vh,0) rotate(calc(var(--ozr,0deg) + 40deg))}}
@keyframes ozd-cross-r{from{transform:translateX(-130%) rotate(var(--ozr,0deg))}to{transform:translateX(calc(100vw + 30%)) rotate(var(--ozr,0deg))}}
@keyframes ozd-cross-l{from{transform:translateX(130%) rotate(var(--ozr,0deg))}to{transform:translateX(calc(-100vw - 30%)) rotate(var(--ozr,0deg))}}

/* ── Éléments intégrés ── */
.ozd-top,.ozd-bottom{position:absolute;left:0}
.ozd-top{top:0;transform-origin:0 0}
.ozd-bottom{bottom:0;height:560px;transform-origin:0 100%}
.ozd-top *,.ozd-bottom *{pointer-events:none}

.ozd-web{position:absolute;top:0;width:560px;height:560px;filter:drop-shadow(0 0 1.5px rgba(0,0,0,.55))}
.ozd-web.l{left:0}.ozd-web.r{right:0;transform:scaleX(-1)}
.ozd-web path{fill:none;stroke:rgba(255,255,255,.7);stroke-width:1.8;stroke-linecap:round}

.ozd-spider{overflow:visible;filter:drop-shadow(0 0 3px rgba(255,255,255,.4))}
.ozd-spider .legsA{animation:ozd-legs .28s ease-in-out alternate infinite;transform-origin:50px 50px}
.ozd-spider .legsB{animation:ozd-legs .28s ease-in-out alternate-reverse infinite;transform-origin:50px 50px}
@keyframes ozd-legs{from{transform:rotate(-6deg)}to{transform:rotate(6deg)}}

.ozd-hang{position:absolute;display:flex;flex-direction:column;align-items:center;animation:ozd-drop ease-in-out alternate infinite}
.ozd-hang .thread{width:2px;background:rgba(255,255,255,.8);box-shadow:0 0 2px rgba(0,0,0,.5)}
.ozd-hang .swing{display:flex;flex-direction:column;align-items:center;transform-origin:50% 0;animation:ozd-swing 3.2s ease-in-out alternate infinite}
.ozd-hang .ozd-spider{margin-top:-16px;transform:rotate(180deg)}
@keyframes ozd-drop{from{transform:translateY(0)}to{transform:translateY(var(--d))}}
@keyframes ozd-swing{from{transform:rotate(-3deg)}to{transform:rotate(3deg)}}

.ozd-walk{position:absolute;left:0;width:150px;height:150px}
.ozd-walk.go{animation:ozd-goR 26s linear infinite}
.ozd-walk.back{animation:ozd-goL 34s linear infinite}
.ozd-walk.go .ozd-spider{transform:rotate(90deg)}
.ozd-walk.back .ozd-spider{transform:rotate(-90deg)}
@keyframes ozd-goR{from{transform:translateX(-220px)}to{transform:translateX(calc(var(--W) + 220px))}}
@keyframes ozd-goL{from{transform:translateX(calc(var(--W) + 220px))}to{transform:translateX(-220px)}}

.ozd-pk{position:absolute;animation:ozd-pkglow 1.4s ease-in-out infinite alternate}
.ozd-pk svg{display:block;width:100%;height:auto;overflow:visible}
@keyframes ozd-pkglow{
 0%{filter:drop-shadow(0 0 20px rgba(255,130,0,.55))}
 35%{filter:drop-shadow(0 0 36px rgba(255,170,0,.9))}
 65%{filter:drop-shadow(0 0 26px rgba(255,140,0,.65))}
 100%{filter:drop-shadow(0 0 40px rgba(255,185,20,.95))}}
.ozd-fl{transform-box:fill-box;transform-origin:50% 100%;animation:ozd-flick .7s ease-in-out alternate infinite}
@keyframes ozd-flick{
 0%{transform:scale(1,1) skewX(0)}
 25%{transform:scale(.88,1.14) skewX(5deg)}
 50%{transform:scale(1.1,.9) skewX(-5deg)}
 75%{transform:scale(.94,1.12) skewX(3deg)}
 100%{transform:scale(1.02,.96) skewX(-2deg)}}

/* Noël */
.ozd-snow{position:absolute;top:-12px;border-radius:50%;background:radial-gradient(circle,#fff 0,rgba(255,255,255,.85) 45%,rgba(255,255,255,0) 72%);animation:ozd-snowfall linear infinite;will-change:transform}
@keyframes ozd-snowfall{
 from{transform:translate3d(0,-5vh,0)}
 50%{transform:translate3d(var(--dx),55vh,0)}
 to{transform:translate3d(calc(var(--dx) * -.4),110vh,0)}}
.ozd-garland{position:absolute;top:0;left:0;width:100%;height:90px}
.ozd-garland .wire{fill:none;stroke:#4a6650;stroke-width:2}
.ozd-bulb{animation:ozd-twinkle 1.6s ease-in-out infinite alternate}
@keyframes ozd-twinkle{from{opacity:.35}to{opacity:1}}

/* Halloween : nouveautés */
.ozd-spider.cute .legsA,.ozd-spider.cute .legsB{stroke:#3a2d52;stroke-width:4.5}
.ozd-bob{animation:ozd-bob 1.1s ease-in-out infinite alternate}
@keyframes ozd-bob{from{transform:translateY(-14px)}to{transform:translateY(14px)}}
.ozd-bat{position:absolute;left:0}
.ozd-bat .wl{animation:ozd-wl .22s ease-in-out infinite alternate;transform-origin:30px 16px}
.ozd-bat .wr{animation:ozd-wr .22s ease-in-out infinite alternate;transform-origin:30px 16px}
@keyframes ozd-wl{from{transform:rotate(-28deg)}to{transform:rotate(22deg)}}
@keyframes ozd-wr{from{transform:rotate(28deg)}to{transform:rotate(-22deg)}}
.ozd-witch{position:absolute;left:0;animation:ozd-witch 48s linear infinite}
.ozd-witch .ozd-bob{animation-duration:2.6s}
.ozd-witch svg,.ozd-bat svg{filter:drop-shadow(0 0 5px rgba(196,170,255,.75)) drop-shadow(0 0 1px rgba(255,255,255,.6))}
@keyframes ozd-witch{0%{transform:translateX(calc(var(--W) + 300px))}34%,100%{transform:translateX(-520px)}}
.ozd-ghost{position:absolute;opacity:.88;filter:drop-shadow(0 0 14px rgba(200,220,255,.55))}
.ozd-ghost .ozd-bob{animation-duration:3.4s}
.ozd-moon{position:absolute;border-radius:50%;background:radial-gradient(circle at 38% 36%,#fffbe0 0,#fbeeb0 55%,#e9d98a 100%);box-shadow:0 0 70px 24px rgba(255,240,170,.45);opacity:.92}
.ozd-moon i{position:absolute;border-radius:50%;background:rgba(190,170,90,.28)}

/* Noël : nouveautés */
.ozd-sporadic{position:absolute;top:-60px;opacity:0;animation:ozd-spor linear infinite;will-change:transform}
@keyframes ozd-spor{
 0%{opacity:1;transform:translate3d(0,-8vh,0) rotate(0)}
 40%{opacity:1;transform:translate3d(var(--dx),112vh,0) rotate(540deg)}
 40.01%,100%{opacity:0;transform:translate3d(0,-8vh,0)}}
.ozd-shoot{position:absolute;opacity:0;animation:ozd-shoot 1.3s ease-in forwards}
.ozd-shoot i{display:block;width:150px;height:2px;border-radius:2px;transform:rotate(-27deg);transform-origin:0 50%;
 background:linear-gradient(90deg,#fff 0,rgba(255,255,255,.6) 20%,rgba(255,255,255,0));filter:drop-shadow(0 0 5px #fff)}
@keyframes ozd-shoot{0%{opacity:0;transform:translate(0,0)}12%{opacity:1}100%{opacity:0;transform:translate(-520px,265px)}}
.ozd-tree{position:absolute;bottom:0}
.ozd-tree svg{display:block;width:100%;height:auto;overflow:visible}

@media (max-width:768px){
  .oz-builtin-nomobile #oz-deco-builtin{display:none}
  .oz-nomobile{display:none}
}
@media (prefers-reduced-motion:reduce){
  .oz-deco *{animation:none!important}
  .ozd-snow{display:none}
}
