/* Effects animate only an inset artwork wrapper. The fixed outer container and close button never move. */
.banner-effect{--fx-color:#ffb86b;--fx-level:.6;--fx-speed:6s;isolation:isolate}.banner-effect .banner-motion{position:absolute;inset:8px;border-radius:inherit;transform-origin:50% 50%;will-change:auto}.banner-effect[data-banner-preset=none] .banner-motion{inset:0}.banner-effect .site-banner{position:relative;border-radius:inherit}.banner-effect .banner-motion::before{content:'';position:absolute;z-index:3;inset:0;border:1px solid var(--fx-color);border-radius:inherit;box-shadow:0 0 8px color-mix(in srgb,var(--fx-color) 70%,transparent),0 0 18px color-mix(in srgb,var(--fx-color) 40%,transparent),inset 0 0 9px color-mix(in srgb,var(--fx-color) 30%,transparent);opacity:var(--fx-level);pointer-events:none}.banner-effect[data-banner-preset=none] .banner-motion::before,.banner-effect[data-banner-preset=float] .banner-motion::before{display:none}.banner-effect[data-banner-preset=neon] .banner-motion::before,.banner-effect[data-banner-preset=full] .banner-motion::before{animation:banner-neon-breathe var(--fx-speed) ease-in-out infinite}.banner-effect[data-banner-preset=float] .banner-motion,.banner-effect[data-banner-preset=full] .banner-motion{animation:banner-soft-float var(--fx-speed) ease-in-out infinite;will-change:transform}.banner-effect .banner-fx-layer{position:absolute;z-index:4;inset:0;overflow:hidden;border-radius:inherit;pointer-events:none;opacity:var(--fx-level)}.banner-effect .banner-fx-sheen{position:absolute;inset:-35% -90%;background:linear-gradient(112deg,transparent 40%,#fff8df00 45%,#fff8df50 49%,#ffffff75 50%,#fff8df00 56%,transparent 62%);transform:translateX(-70%);opacity:0;animation:banner-sheen-pass calc(var(--fx-speed) * 1.6) ease-in-out infinite}.banner-effect .banner-fx-spark{position:absolute;width:3px;height:3px;border-radius:50%;left:calc(9% + var(--spark-i) * 18%);bottom:calc(8% + var(--spark-i) * 3%);background:var(--fx-color);box-shadow:0 0 5px var(--fx-color);opacity:0;animation:banner-spark-rise calc(var(--fx-speed) * 1.3) ease-in-out infinite;animation-delay:calc(var(--spark-i) * var(--fx-speed) * -.19)}.banner-effect:not([data-banner-preset=full]) .banner-fx-layer{display:none}.banner-effect .banner-close{z-index:10}.banner-effect .banner-fx-layer *{pointer-events:none}.fx-paused .banner-motion,.fx-paused .banner-motion::before,.fx-paused .banner-fx-sheen,.fx-paused .banner-fx-spark,.banner-effect:hover .banner-motion,.banner-effect:hover .banner-motion::before,.banner-effect:hover .banner-fx-sheen,.banner-effect:hover .banner-fx-spark,.banner-effect:focus-within .banner-motion,.banner-effect:focus-within .banner-motion::before,.banner-effect:focus-within .banner-fx-sheen,.banner-effect:focus-within .banner-fx-spark{animation-play-state:paused}
@keyframes banner-neon-breathe{0%,100%{opacity:calc(var(--fx-level) * .55)}50%{opacity:var(--fx-level)}}
@keyframes banner-soft-float{0%,100%{transform:translateY(calc(var(--fx-level) * 3px)) rotate(calc(var(--fx-level) * -.35deg))}50%{transform:translateY(calc(var(--fx-level) * -3px)) rotate(calc(var(--fx-level) * .35deg))}}
@keyframes banner-sheen-pass{0%,44%{transform:translateX(-70%);opacity:0}53%{opacity:.46}68%{transform:translateX(70%);opacity:0}100%{transform:translateX(70%);opacity:0}}
@keyframes banner-spark-rise{0%,12%{opacity:0;transform:translate(0,0) scale(.5)}28%{opacity:.7}78%{opacity:.18}95%,100%{opacity:0;transform:translate(calc(var(--spark-i) * 2px - 4px),-50px) scale(.25)}}
/* Admin uses the exact same motion layers for a faithful live preview. */
.admin-banner-preview.banner-effect{overflow:visible;display:block}.admin-banner-preview.banner-effect .banner-motion{background:#08110d;overflow:visible}.admin-banner-preview.banner-effect .site-banner{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;background:#08110d}.admin-banner-preview.banner-effect .banner-motion img{position:static;display:block;width:100%;height:100%;margin:0;filter:none}.admin-banner-preview.banner-effect .banner-motion img[hidden]{display:none}.admin-banner-preview.banner-effect[data-banner-preset=none]{overflow:hidden}.admin-banner-preview.banner-effect .banner-preview-text{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;pointer-events:none;color:#a3ad9e;font-size:12px}.banner-effects-note{font-size:12px;color:#b8c7bc;line-height:1.6}
@media(prefers-reduced-motion:reduce){.banner-effect .banner-motion,.banner-effect .banner-motion::before,.banner-effect .banner-fx-sheen,.banner-effect .banner-fx-spark{animation:none!important;transform:none!important;will-change:auto}.banner-effect .banner-fx-sheen,.banner-effect .banner-fx-spark{display:none}.banner-effect .banner-motion::before{opacity:var(--fx-level)}}
