/* Camada premium partilhada. Só atua quando o JS a liga (classe .fx) e nunca com "reduzir movimento". */
.fx-prog{position:fixed;left:0;top:0;height:3px;width:100%;background:var(--fxa,#ef2b2b);transform-origin:left;transform:scaleX(0);z-index:9998;pointer-events:none}

.fx .btn,.fx .nav-cta{position:relative;overflow:hidden;will-change:translate}
.fx .btn::after,.fx .nav-cta::after{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.38) 50%,transparent 65%);transform:translateX(-130%);transition:transform .8s cubic-bezier(.16,1,.3,1);pointer-events:none}
.fx .btn:hover::after,.fx .nav-cta:hover::after{transform:translateX(130%)}

.fx-sheen{position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s;background:radial-gradient(380px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.16),transparent 60%);mix-blend-mode:soft-light}
.fx-tilting>.fx-sheen,.fx-tilting .fx-sheen{opacity:1}

.fx .fxw{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.14em;margin-bottom:-.14em}
.fx .fxw>span{display:inline-block;transform:translateY(108%);transition:transform .95s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--w,0)*.045s)}
.fx .fx-in .fxw>span,.fx .fxw.fx-in>span{transform:none}

.fx .fig,.fx .board{translate:calc(var(--px,0)*16px) calc(var(--py,0)*12px);transition:translate .5s cubic-bezier(.16,1,.3,1)}

@media (prefers-reduced-motion:reduce){.fx-prog{display:none}}
