
/* CompX visual Library cards — loaded after style.css */

#shakeList.motion-card-grid,#expressionList.motion-card-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important;padding:1px!important;background:transparent!important;align-items:stretch!important;}
.fxlib-cattabs{display:flex!important;gap:5px!important;overflow-x:auto!important;white-space:nowrap!important;margin:7px 0!important;padding:1px 0 4px!important;}
.fxlib-cattabs button{flex:0 0 auto!important;border:1px solid rgba(133,156,194,.24)!important;background:#111827!important;color:#afbdd5!important;border-radius:6px!important;padding:5px 8px!important;font:700 8px/1.2 Arial,sans-serif!important;letter-spacing:.04em!important;cursor:pointer!important;}
.fxlib-cattabs button em{font-style:normal!important;margin-left:4px!important;color:#ffbd45!important;}
.fxlib-cattabs button.active{color:#07101a!important;border-color:#ffbd45!important;background:linear-gradient(135deg,#ffbd45,#ff8b35)!important;box-shadow:0 0 12px rgba(255,173,52,.2)!important;}
.fxlib-cattabs button.active em{color:#07101a!important;}
.fxlib-search{display:block!important;box-sizing:border-box!important;width:100%!important;height:28px!important;margin:0 0 8px!important;padding:0 9px!important;border:1px solid rgba(133,156,194,.25)!important;border-radius:6px!important;outline:none!important;background:#090f1c!important;color:#e7efff!important;font-size:9px!important;}
.fxlib-search:focus{border-color:#ffbd45!important;box-shadow:0 0 0 2px rgba(255,189,69,.08)!important;}
.fxlib-card{position:relative!important;display:flex!important;min-width:0!important;min-height:174px!important;box-sizing:border-box!important;flex-direction:column!important;overflow:hidden!important;border:1px solid rgba(111,137,180,.22)!important;border-radius:9px!important;background:linear-gradient(155deg,#131c2d,#090e19)!important;box-shadow:0 5px 15px rgba(0,0,0,.28)!important;transition:transform .15s ease,border-color .15s ease!important;}
.fxlib-card:hover{transform:translateY(-2px)!important;border-color:rgba(255,189,69,.6)!important;}
.fxlib-thumb{position:relative!important;display:block!important;width:100%!important;height:78px!important;min-height:78px!important;overflow:hidden!important;border-bottom:1px solid rgba(120,148,194,.18)!important;background:radial-gradient(circle at 50% 44%,rgba(65,104,164,.26),transparent 54%),linear-gradient(145deg,#14243b,#090f1c)!important;}
.fxlib-preview-badge{position:absolute!important;z-index:8!important;left:6px!important;top:6px!important;padding:2px 4px!important;border:1px solid rgba(255,189,69,.34)!important;border-radius:3px!important;background:rgba(5,10,18,.75)!important;color:#ffc45a!important;font:800 6px/1 Arial,sans-serif!important;letter-spacing:.12em!important;}
.fxlib-cardmeta{display:flex!important;flex:1 1 auto!important;min-height:50px!important;box-sizing:border-box!important;flex-direction:column!important;gap:3px!important;padding:7px 7px 4px!important;}
.fxlib-cardmeta strong{display:block!important;overflow:hidden!important;color:#eef4ff!important;font:700 10px/1.2 Arial,sans-serif!important;text-overflow:ellipsis!important;white-space:nowrap!important;}
.fxlib-cardmeta span{display:-webkit-box!important;overflow:hidden!important;color:#8190aa!important;font:400 8px/1.3 Arial,sans-serif!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;}
.fxlib-apply{display:block;width:calc(100% - 14px);height:25px;min-height:25px;margin:0 7px 7px;padding:0;border:1px solid rgba(255,189,69,.52);border-radius:5px;background:linear-gradient(135deg,rgba(255,189,69,.18),rgba(255,128,40,.12));color:#ffd37a;font:800 8px/23px Arial,sans-serif;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;}
.fxlib-apply:hover{background:linear-gradient(135deg,#ffc34e,#ff8a36);color:#08111c;}
/* Shake thumbnails */
.fxlib-anim .fxlib-orb{position:absolute!important;z-index:5!important;width:12px!important;height:12px!important;border-radius:50%!important;background:#ffbf48!important;box-shadow:0 0 5px #ffac32,0 0 14px rgba(255,160,35,.6)!important;left:calc(50% - 6px)!important;top:calc(54% - 6px)!important;}
.fxlib-anim .fxlib-orb.b{width:8px!important;height:8px!important;background:#62d9ff!important;opacity:.68!important;}
.fxlib-anim .fxlib-orb.c{width:5px!important;height:5px!important;background:#fff!important;opacity:.4!important;}
.fxlib-trail{position:absolute!important;left:18%!important;right:18%!important;top:54%!important;height:1px!important;background:linear-gradient(90deg,transparent,#4f88bf,transparent)!important;opacity:.55!important;}
.fxlib-trail.t2{transform:rotate(-16deg)!important;opacity:.28!important;}
.fxlib-wave{position:absolute!important;right:7px!important;bottom:4px!important;color:rgba(100,215,255,.45)!important;font-size:18px!important;}
.fxlib-anim-pos .fxlib-orb{animation:cxShakePos .65s ease-in-out infinite!important}.fxlib-anim-pos .b{animation-delay:.10s!important}.fxlib-anim-pos .c{animation-delay:.2s!important}
.fxlib-anim-wave .fxlib-orb{animation:cxShakeWave 1.25s ease-in-out infinite!important}.fxlib-anim-wave .b{animation-delay:.16s!important}.fxlib-anim-wave .c{animation-delay:.3s!important}
.fxlib-anim-scale .fxlib-orb{animation:cxShakeScale .9s ease-in-out infinite!important}.fxlib-anim-scale .b{animation-delay:.12s!important}.fxlib-anim-scale .c{animation-delay:.24s!important}
.fxlib-anim-flick .fxlib-orb{animation:cxShakeFlick .42s steps(2) infinite!important}.fxlib-anim-flick .b{animation-delay:.08s!important}.fxlib-anim-flick .c{animation-delay:.16s!important}
@keyframes cxShakePos{0%,100%{transform:translate(-13px,4px) rotate(-8deg)}25%{transform:translate(10px,-7px) rotate(7deg)}50%{transform:translate(-4px,-3px)}75%{transform:translate(8px,6px)}}
@keyframes cxShakeWave{0%,100%{transform:translate(-23px,6px)}50%{transform:translate(23px,-8px)}}
@keyframes cxShakeScale{0%,100%{transform:scale(.52)}50%{transform:scale(1.55)}}
@keyframes cxShakeFlick{0%,100%{opacity:.08;transform:scale(.7)}50%{opacity:1;transform:scale(1.25)}}
/* Expression thumbnail shared elements */
.fxlib-exprthumb .expr-gridline{position:absolute!important;background:rgba(104,150,204,.14)!important}.expr-gridline.gx{left:0!important;right:0!important;top:55%!important;height:1px!important}.expr-gridline.gy{top:0!important;bottom:0!important;left:50%!important;width:1px!important}
.expr-word{position:absolute!important;z-index:4!important;inset:26px 4px auto!important;text-align:center!important}.expr-word i{display:inline-block!important;color:#eff6ff!important;font:900 15px/1 Arial,sans-serif!important;letter-spacing:.04em!important;font-style:normal!important;text-shadow:0 0 12px rgba(95,196,255,.4)!important}.expr-cursor{display:inline-block!important;width:1px!important;height:15px!important;margin-left:2px!important;background:#ffc14b!important;vertical-align:-2px!important;animation:cxBlink .7s steps(1) infinite!important}
.expr-shape,.expr-ball,.expr-ground,.expr-ring,.expr-rgb,.expr-path{display:none!important}
/* Text / text animator */
.expr-textanimator .expr-word i{animation:cxTextPop 1.3s cubic-bezier(.2,.8,.2,1) infinite!important}.expr-text .expr-word{overflow:hidden!important;white-space:nowrap!important;animation:cxType 1.8s steps(8) infinite!important}
/* Motion */
.expr-motion .expr-word{display:none!important}.expr-motion .expr-path{display:block!important;position:absolute!important;inset:17px 6px 4px!important;width:calc(100% - 12px)!important;height:55px!important}.expr-motion .expr-path path{fill:none!important;stroke:#58d7ff!important;stroke-width:2!important;stroke-dasharray:5 4!important;animation:cxDash 1.1s linear infinite!important}.expr-motion .expr-path circle{fill:#ffc14b!important;filter:drop-shadow(0 0 4px #ffad31)!important;animation:cxPulse 1s ease-in-out infinite!important}
/* Physics */
.expr-physics .expr-word{display:none!important}.expr-physics .expr-ball{display:block!important;position:absolute!important;z-index:4!important;width:15px!important;height:15px!important;left:calc(50% - 7px)!important;bottom:14px!important;border-radius:50%!important;background:#ffc14b!important;box-shadow:0 0 12px rgba(255,177,51,.7)!important;animation:cxBall 1.1s cubic-bezier(.3,.75,.5,1) infinite!important}.expr-physics .expr-ground{display:block!important;position:absolute!important;left:24%!important;right:24%!important;bottom:12px!important;height:1px!important;background:#5ccfff!important}
/* Transform */
.expr-transform .expr-word{display:none!important}.expr-transform .expr-shape{display:block!important;position:absolute!important;left:calc(50% - 17px)!important;top:27px!important;width:34px!important;height:27px!important;border:1px solid #62d9ff!important;box-shadow:0 0 12px rgba(78,193,245,.3)!important;animation:cxTransform 1.45s ease-in-out infinite!important}.expr-transform .expr-shape span{position:absolute!important;inset:6px!important;background:rgba(255,188,69,.55)!important}
/* Effects */
.expr-effects .expr-word i{color:#fff4cc!important;text-shadow:0 0 5px #ffd269,0 0 14px #ff9c35!important;animation:cxGlow 1.25s ease-in-out infinite!important}.expr-effects .expr-ring{display:block!important;position:absolute!important;left:50%!important;top:52%!important;border:1px solid rgba(255,191,69,.52)!important;border-radius:50%!important;transform:translate(-50%,-50%)!important;animation:cxRing 1.4s ease-out infinite!important}.expr-effects .r2{animation-delay:.35s!important}
/* Glitch */
.expr-glitch .expr-word{display:none!important}.expr-glitch .expr-rgb{display:block!important;position:absolute!important;left:0!important;right:0!important;top:31px!important;text-align:center!important;font:900 14px/1 Arial,sans-serif!important;letter-spacing:.05em!important}.expr-glitch .red{color:#ff3e65!important;transform:translateX(-2px)!important;animation:cxGlitchR .55s steps(2) infinite!important}.expr-glitch .cyan{color:#43e8ff!important;mix-blend-mode:screen!important;transform:translateX(2px)!important;animation:cxGlitchC .48s steps(2) infinite!important}
@keyframes cxBlink{50%{opacity:0}}@keyframes cxTextPop{0%,100%{opacity:.3;transform:translateY(9px) scale(.75)}45%,70%{opacity:1;transform:none}}@keyframes cxType{0%{clip-path:inset(0 100% 0 0)}70%,100%{clip-path:inset(0 0 0 0)}}@keyframes cxDash{to{stroke-dashoffset:-18}}@keyframes cxPulse{50%{r:5}}@keyframes cxBall{0%,100%{transform:translateY(0) scale(1.15,.8)}50%{transform:translateY(-35px) scale(.88,1.12)}}@keyframes cxTransform{0%,100%{transform:rotate(-8deg) scale(.78)}50%{transform:rotate(12deg) scale(1.18)}}@keyframes cxGlow{50%{transform:scale(1.08);filter:brightness(1.5)}}@keyframes cxRing{0%{width:8px;height:8px;opacity:1}100%{width:66px;height:66px;opacity:0}}@keyframes cxGlitchR{25%{transform:translate(4px,-2px);clip-path:inset(10% 0 55%)}75%{transform:translate(-4px,2px);clip-path:inset(58% 0 10%)}}@keyframes cxGlitchC{30%{transform:translate(-3px,2px)}70%{transform:translate(5px,-2px)}}
@media(max-width:255px){#shakeList.motion-card-grid,#expressionList.motion-card-grid{grid-template-columns:1fr!important}.fxlib-card{min-height:166px!important}}

/* v2.2.5 — wheel-scroll shelf views */
#panel-sfx{overflow:hidden!important;}
#panel-sfx>#textAnimView{flex:1 1 0!important;min-height:0!important;height:auto!important;overflow-x:hidden!important;overflow-y:auto!important;overscroll-behavior:contain!important;-webkit-overflow-scrolling:touch!important;padding-bottom:18px!important;box-sizing:border-box!important;}
#textAnimView .tanim-mogrt-shell,#textAnimView .preview-library-shell,#ffxPresetView .preview-library-shell{overflow:visible!important;min-height:max-content!important;}
#shakeList,#expressionList{overflow:visible!important;max-height:none!important;}

/* Every shake preset gets its own useful motion thumbnail. */
.fxlib-shake-basicshake .fxlib-orb{animation:shBasic 1.1s ease-in-out infinite}
.fxlib-shake-quickshake .fxlib-orb{animation:shQuick .28s steps(2) infinite}
.fxlib-shake-waveshakev1 .fxlib-orb{animation:shWave1 1.45s ease-in-out infinite}
.fxlib-shake-waveshakev2 .fxlib-orb{animation:shWave2 1.15s linear infinite}
.fxlib-shake-bounceshakev1 .fxlib-orb{animation:shBounce1 1.05s cubic-bezier(.3,.75,.45,1) infinite}
.fxlib-shake-bounceshakev2 .fxlib-orb{animation:shBounce2 .82s cubic-bezier(.25,.8,.4,1) infinite}
.fxlib-shake-squeezev1shake .fxlib-orb{animation:shSqueeze1 1.05s ease-in-out infinite}
.fxlib-shake-squeezev2shake .fxlib-orb{animation:shSqueeze2 .86s ease-in-out infinite}
.fxlib-shake-warpshake .fxlib-orb{border-radius:35% 65% 60% 40%;animation:shWarp .72s ease-in-out infinite}
.fxlib-shake-lensshake .fxlib-orb{animation:shLens 1.15s ease-in-out infinite}.fxlib-shake-lensshake:after{content:"";position:absolute;left:50%;top:54%;width:18px;height:18px;border:1px solid #62d9ff;border-radius:50%;transform:translate(-50%,-50%);animation:shLensRing 1.15s ease-out infinite}
.fxlib-shake-invertshake{animation:shInvertBg .82s steps(2) infinite}.fxlib-shake-invertshake .fxlib-orb{animation:shInvert .82s ease-in-out infinite}
.fxlib-shake-invertpixleshake .fxlib-orb{border-radius:1px;animation:shPixel .38s steps(4) infinite}.fxlib-shake-invertpixleshake .fxlib-trail{height:4px;image-rendering:pixelated}
.fxlib-shake-darkflickershake:after,.fxlib-shake-whiteflickershake:after{content:"";position:absolute;inset:0;z-index:4;pointer-events:none}
.fxlib-shake-darkflickershake:after{background:#000;animation:shDark .52s steps(3) infinite}
.fxlib-shake-whiteflickershake:after{background:#fff;animation:shWhite .48s steps(3) infinite}
.fxlib-shake-darkflickershake .fxlib-orb,.fxlib-shake-whiteflickershake .fxlib-orb{animation:none}
@keyframes shBasic{0%,100%{transform:translate(-5px,2px)}25%{transform:translate(5px,-3px)}50%{transform:translate(-3px,-2px)}75%{transform:translate(4px,3px)}}
@keyframes shQuick{0%{transform:translate(-9px,-4px)}50%{transform:translate(9px,4px)}100%{transform:translate(-4px,6px)}}
@keyframes shWave1{0%,100%{transform:translate(-25px,0)}50%{transform:translate(25px,-7px)}}
@keyframes shWave2{0%{transform:translate(-20px,0)}25%{transform:translate(0,-13px)}50%{transform:translate(20px,0)}75%{transform:translate(0,13px)}100%{transform:translate(-20px,0)}}
@keyframes shBounce1{0%,100%{transform:translateY(9px) scale(1.1,.85)}50%{transform:translateY(-25px) scale(.9,1.12)}}
@keyframes shBounce2{0%,100%{transform:translateY(11px) scale(1.3,.65)}45%{transform:translateY(-32px) scale(.75,1.3)}}
@keyframes shSqueeze1{0%,100%{transform:scale(1.45,.55)}50%{transform:scale(.65,1.35)}}
@keyframes shSqueeze2{0%,100%{transform:scale(.55,1.5) rotate(-8deg)}50%{transform:scale(1.55,.55) rotate(8deg)}}
@keyframes shWarp{0%,100%{transform:skewX(-24deg) scale(.7,1.35) translateX(-8px);filter:blur(.2px)}50%{transform:skewX(24deg) scale(1.45,.7) translateX(8px);filter:blur(2px)}}
@keyframes shLens{0%,100%{transform:scale(.55);filter:blur(1px)}50%{transform:scale(1.65);filter:blur(0)}}@keyframes shLensRing{0%{width:12px;height:12px;opacity:1}100%{width:64px;height:64px;opacity:0}}
@keyframes shInvert{0%,100%{transform:translateX(-14px) rotate(-20deg)}50%{transform:translateX(14px) rotate(200deg)}}@keyframes shInvertBg{50%{filter:invert(1) hue-rotate(180deg)}}
@keyframes shPixel{0%{transform:translate(-18px,-8px)}25%{transform:translate(12px,-8px)}50%{transform:translate(12px,10px)}75%{transform:translate(-10px,10px)}100%{transform:translate(-18px,-8px)}}
@keyframes shDark{0%,35%,100%{opacity:0}36%,58%{opacity:.78}59%,70%{opacity:.22}}@keyframes shWhite{0%,42%,100%{opacity:0}43%,57%{opacity:.82}58%,70%{opacity:.2}}

/* Expression previews chosen by name/behavior, not only category. */
.expr-k-type .expr-word{display:block!important;overflow:hidden!important;white-space:nowrap!important;animation:pvType 1.8s steps(8) infinite!important}.expr-k-type .expr-cursor{display:inline-block!important}
.expr-k-counter .expr-word{display:block!important}.expr-k-counter .expr-word i{font-family:monospace!important;font-size:18px!important;animation:pvCounter 1.2s steps(4) infinite!important}.expr-k-counter .expr-cursor{display:none!important}
.expr-k-bounce .expr-word,.expr-k-bounce .expr-shape{display:none!important}.expr-k-bounce .expr-ball{display:block!important;position:absolute!important;z-index:4!important;width:15px!important;height:15px!important;left:calc(50% - 7px)!important;bottom:14px!important;border-radius:50%!important;background:#ffc14b!important;box-shadow:0 0 12px rgba(255,177,51,.7)!important;animation:cxBall 1.05s cubic-bezier(.3,.75,.5,1) infinite!important}.expr-k-bounce .expr-ground{display:block!important;position:absolute!important;left:24%!important;right:24%!important;bottom:12px!important;height:1px!important;background:#5ccfff!important}
.expr-k-rotate .expr-word{display:none!important}.expr-k-rotate .expr-shape{display:block!important;position:absolute!important;left:calc(50% - 17px)!important;top:27px!important;width:34px!important;height:27px!important;border:1px solid #62d9ff!important;animation:pvRotate 1.25s ease-in-out infinite!important}.expr-k-rotate .expr-shape span{position:absolute!important;inset:6px!important;background:rgba(255,188,69,.55)!important}
.expr-k-tracking .expr-word{display:block!important}.expr-k-tracking .expr-word i{animation:pvTracking 1.5s ease-in-out infinite!important}.expr-k-tracking .expr-cursor{display:none!important}
.expr-k-scale .expr-word{display:block!important}.expr-k-scale .expr-word i{animation:pvScale 1.05s ease-in-out infinite!important}.expr-k-scale .expr-cursor{display:none!important}
.expr-k-wiggle .expr-word{display:block!important}.expr-k-wiggle .expr-word i{animation:pvWiggle .42s linear infinite!important}.expr-k-wiggle .expr-cursor{display:none!important}
.expr-k-loop .expr-word{display:none!important}.expr-k-loop .expr-path,.expr-k-path .expr-path,.expr-k-wave .expr-path{display:block!important;position:absolute!important;inset:17px 6px 4px!important;width:calc(100% - 12px)!important;height:55px!important}.expr-k-loop .expr-path path,.expr-k-path .expr-path path,.expr-k-wave .expr-path path{fill:none!important;stroke:#58d7ff!important;stroke-width:2!important;stroke-dasharray:5 4!important;animation:cxDash 1.1s linear infinite!important}.expr-k-loop .expr-path circle,.expr-k-path .expr-path circle,.expr-k-wave .expr-path circle{fill:#ffc14b!important}.expr-k-loop .expr-path{animation:pvLoop 1.8s linear infinite!important}.expr-k-wave .expr-path{animation:pvWave 1s ease-in-out infinite!important}
.expr-k-slide-x .expr-word i{animation:pvSlideX 1.25s ease-in-out infinite!important}.expr-k-slide-y .expr-word i{animation:pvSlideY 1.25s ease-in-out infinite!important}
.expr-k-flicker .expr-word i{animation:pvFlicker .48s steps(3) infinite!important}.expr-k-fade .expr-word i{animation:pvFade 1.35s ease-in-out infinite!important}
.expr-k-color .expr-word i{color:transparent!important;background:linear-gradient(90deg,#ff4365,#ffc84b,#48dcff,#8f72ff,#ff4365)!important;background-size:240% 100%!important;-webkit-background-clip:text!important;background-clip:text!important;animation:pvColor 1.6s linear infinite!important}.expr-k-color .expr-cursor{display:none!important}
.expr-k-glow .expr-word i{color:#fff4cc!important;animation:cxGlow 1.15s ease-in-out infinite!important}.expr-k-glow .expr-ring{display:block!important;position:absolute!important;left:50%!important;top:52%!important;border:1px solid rgba(255,191,69,.52)!important;border-radius:50%!important;transform:translate(-50%,-50%)!important;animation:cxRing 1.4s ease-out infinite!important}.expr-k-glow .r2{animation-delay:.35s!important}
.expr-k-glitch .expr-word{display:none!important}.expr-k-glitch .expr-rgb{display:block!important;position:absolute!important;left:0!important;right:0!important;top:31px!important;text-align:center!important;font:900 14px/1 Arial,sans-serif!important;letter-spacing:.05em!important}.expr-k-glitch .red{color:#ff3e65!important;animation:cxGlitchR .55s steps(2) infinite!important}.expr-k-glitch .cyan{color:#43e8ff!important;mix-blend-mode:screen!important;animation:cxGlitchC .48s steps(2) infinite!important}
@keyframes pvType{0%{clip-path:inset(0 100% 0 0)}75%,100%{clip-path:inset(0 0 0 0)}}@keyframes pvCounter{0%{transform:translateY(8px);opacity:.25}50%{transform:translateY(-4px);opacity:1}100%{transform:none}}@keyframes pvRotate{to{transform:rotate(360deg) scale(.9)}}@keyframes pvTracking{0%,100%{letter-spacing:.02em;transform:scale(.8)}50%{letter-spacing:.28em;transform:scale(1)}}@keyframes pvScale{0%,100%{transform:scale(.55)}50%{transform:scale(1.25)}}@keyframes pvWiggle{25%{transform:translate(4px,-2px) rotate(4deg)}75%{transform:translate(-4px,2px) rotate(-4deg)}}@keyframes pvLoop{to{transform:rotateY(360deg)}}@keyframes pvWave{50%{transform:translateY(-7px) skewY(8deg)}}@keyframes pvSlideX{0%,100%{opacity:.2;transform:translateX(-24px)}50%{opacity:1;transform:translateX(20px)}}@keyframes pvSlideY{0%,100%{opacity:.2;transform:translateY(18px)}50%{opacity:1;transform:translateY(-12px)}}@keyframes pvFlicker{0%,100%{opacity:.15}35%{opacity:1}55%{opacity:.3}75%{opacity:.9}}@keyframes pvFade{0%,100%{opacity:.12;filter:blur(3px)}50%{opacity:1;filter:blur(0)}}@keyframes pvColor{to{background-position:200% 50%}}

/* Fine-grained expression behavior previews */
.expr-k-rgb .expr-word{display:none!important}.expr-k-rgb .expr-rgb{display:block!important;position:absolute!important;left:0!important;right:0!important;top:31px!important;text-align:center!important;font:900 14px/1 Arial,sans-serif!important}.expr-k-rgb .red{color:#ff315b!important;animation:cxGlitchR .42s steps(2) infinite!important}.expr-k-rgb .cyan{color:#35eaff!important;mix-blend-mode:screen!important;animation:cxGlitchC .37s steps(2) infinite!important}
.expr-k-bounce-x .expr-word i{animation:pvBounceX 1s cubic-bezier(.3,.8,.45,1) infinite!important}.expr-k-bounce-y .expr-word i{animation:pvBounceY 1s cubic-bezier(.3,.8,.45,1) infinite!important}.expr-k-bounce-rotate .expr-word i{animation:pvBounceRotate 1.05s cubic-bezier(.25,.8,.4,1) infinite!important}.expr-k-bounce-scale .expr-word i{animation:pvBounceScale 1.05s cubic-bezier(.25,.8,.4,1) infinite!important}
.expr-k-skew .expr-word i{animation:pvSkew 1s ease-in-out infinite!important}.expr-k-scatter .expr-word i{animation:pvScatter .9s steps(3) infinite!important}
.expr-k-spiral .expr-word i{animation:pvSpiral 1.3s cubic-bezier(.2,.75,.3,1) infinite!important}.expr-k-magnet .expr-word i{animation:pvMagnet 1.3s ease-in-out infinite!important}.expr-k-stretch .expr-word i{animation:pvStretch 1s ease-in-out infinite!important}.expr-k-elastic .expr-word i{animation:pvElastic 1.1s cubic-bezier(.2,.9,.25,1) infinite!important}.expr-k-overshoot .expr-word i{animation:pvOvershoot 1.2s cubic-bezier(.2,.9,.25,1) infinite!important}
.expr-k-slot .expr-word i{font-family:monospace!important;animation:pvSlot .75s steps(4) infinite!important}.expr-k-reveal .expr-word{overflow:hidden!important}.expr-k-reveal .expr-word i{animation:pvReveal 1.45s ease-in-out infinite!important}
.expr-k-swing .expr-word i{transform-origin:50% 0!important;animation:pvSwing 1.25s ease-in-out infinite!important}.expr-k-orbit .expr-word i{animation:pvOrbit 1.5s linear infinite!important}.expr-k-lookat .expr-word i{animation:pvLook 1.3s ease-in-out infinite!important}.expr-k-zoom .expr-word i{animation:pvZoom 1.25s ease-in-out infinite!important}
.expr-k-wiggle-x .expr-word i{animation:pvWiggleX .65s ease-in-out infinite!important}.expr-k-wiggle-y .expr-word i{animation:pvWiggleY .65s ease-in-out infinite!important}.expr-k-wiggle-xy .expr-word i{animation:pvWiggleXY .7s ease-in-out infinite!important}.expr-k-step .expr-word i{animation:pvStep .85s steps(4) infinite!important}.expr-k-decay .expr-word i{animation:pvDecay 1.6s ease-out infinite!important}.expr-k-drift .expr-word i{animation:pvDrift 2s ease-in-out infinite!important}
.expr-k-mirror .expr-word:after{content:"";display:block;width:55%;height:1px;margin:5px auto 0;background:#55d7ff}.expr-k-mirror .expr-word i{animation:pvMirror 1.3s ease-in-out infinite!important}.expr-k-follow .expr-word i{animation:pvFollow 1.4s ease-in-out infinite!important}.expr-k-impact .expr-word i{animation:pvImpact 1s cubic-bezier(.2,.85,.35,1) infinite!important}.expr-k-pop .expr-word i{animation:pvPop 1s cubic-bezier(.2,.9,.25,1) infinite!important}
@keyframes pvBounceX{0%,100%{transform:translateX(-25px) scale(.85)}50%{transform:translateX(23px) scale(1.08)}}@keyframes pvBounceY{0%,100%{transform:translateY(14px) scale(1.1,.8)}50%{transform:translateY(-18px) scale(.9,1.12)}}@keyframes pvBounceRotate{0%,100%{transform:translateY(10px) rotate(-25deg)}50%{transform:translateY(-16px) rotate(22deg)}}@keyframes pvBounceScale{0%,100%{transform:scale(.55)}55%{transform:scale(1.25)}75%{transform:scale(.92)}}
@keyframes pvSkew{0%,100%{transform:skew(-22deg) translateX(-8px)}50%{transform:skew(22deg) translateX(8px)}}@keyframes pvScatter{0%{transform:translate(-12px,7px) rotate(-8deg)}33%{transform:translate(13px,-6px) rotate(8deg)}66%{transform:translate(-4px,-10px)}100%{transform:none}}@keyframes pvSpiral{0%{opacity:.1;transform:rotate(-180deg) scale(.25)}100%{opacity:1;transform:none}}@keyframes pvMagnet{0%,100%{letter-spacing:.35em;transform:scale(.75)}50%{letter-spacing:-.04em;transform:scale(1.08)}}@keyframes pvStretch{0%,100%{transform:scale(.55,1.4)}50%{transform:scale(1.4,.55)}}@keyframes pvElastic{0%{transform:scale(.3)}55%{transform:scale(1.3)}72%{transform:scale(.85)}100%{transform:scale(1)}}@keyframes pvOvershoot{0%{transform:translateX(-25px)}60%{transform:translateX(8px)}78%{transform:translateX(-4px)}100%{transform:none}}
@keyframes pvSlot{0%{transform:translateY(-12px);filter:blur(1px)}100%{transform:translateY(12px)}}@keyframes pvReveal{0%{opacity:0;filter:blur(7px);letter-spacing:.25em}100%{opacity:1;filter:none;letter-spacing:.03em}}@keyframes pvSwing{0%,100%{transform:rotate(-20deg)}50%{transform:rotate(20deg)}}@keyframes pvOrbit{0%{transform:rotate(0) translateX(17px) rotate(0)}100%{transform:rotate(360deg) translateX(17px) rotate(-360deg)}}@keyframes pvLook{0%,100%{transform:perspective(80px) rotateY(-35deg)}50%{transform:perspective(80px) rotateY(35deg)}}@keyframes pvZoom{0%,100%{transform:scale(.35);filter:blur(2px)}50%{transform:scale(1.25);filter:none}}
@keyframes pvWiggleX{0%,100%{transform:translateX(-10px)}50%{transform:translateX(10px)}}@keyframes pvWiggleY{0%,100%{transform:translateY(-8px)}50%{transform:translateY(8px)}}@keyframes pvWiggleXY{0%,100%{transform:translate(-8px,6px)}25%{transform:translate(7px,-7px)}50%{transform:translate(9px,5px)}75%{transform:translate(-6px,-5px)}}@keyframes pvStep{0%{transform:translate(-15px,7px)}25%{transform:translate(-5px,-7px)}50%{transform:translate(7px,5px)}75%,100%{transform:translate(15px,-4px)}}@keyframes pvDecay{0%{transform:translateX(-28px)}45%{transform:translateX(13px)}70%{transform:translateX(-5px)}100%{transform:none}}@keyframes pvDrift{0%,100%{transform:translate(-13px,6px) rotate(-4deg)}50%{transform:translate(13px,-7px) rotate(4deg)}}

/* Flex-style shake preview studio */
.cx-shake-studio{margin:8px!important;padding:10px!important;border:1px solid rgba(34,255,111,.18)!important;border-radius:12px!important;background:linear-gradient(165deg,rgba(10,16,28,.96),rgba(5,9,18,.98))!important;box-shadow:0 10px 28px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.04)!important;}
.cx-shake-preview-panel{position:relative!important;width:100%!important;height:140px!important;margin:0 0 10px!important;border-radius:10px!important;overflow:hidden!important;border:1px solid rgba(255,255,255,.08)!important;background:#000!important;box-shadow:inset 0 0 40px rgba(34,255,111,.06)!important;}
.cx-shake-preview-fallback{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;object-fit:cover!important;}
.cx-shake-preview-fallback{display:flex!important;align-items:center!important;justify-content:center!important;background:radial-gradient(circle at 50% 62%,rgba(34,255,111,.12),transparent 58%),linear-gradient(180deg,#0a1018,#03060c)!important;overflow:hidden!important;}
.cx-shake-preview-fallback.is-hidden{display:none!important;}
/* Motion-scope preview: an abstract oscilloscope (grid + crosshair dot + wave)
   that visualises each shake preset's frequency/amplitude pattern instead of
   showing a car clip — keeps the library original and motion-accurate. */
.cx-shake-scope{position:relative;}
.cx-shake-scope-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(34,255,111,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(34,255,111,.07) 1px,transparent 1px);background-size:26px 26px;mask-image:radial-gradient(ellipse at center,rgba(0,0,0,.85),transparent 88%);-webkit-mask-image:radial-gradient(ellipse at center,rgba(0,0,0,.85),transparent 88%);}
.cx-shake-scope-crosshair{position:absolute;top:50%;left:50%;width:0;height:0;z-index:2;}
.cx-shake-scope-x,.cx-shake-scope-y{position:absolute;background:rgba(34,255,111,.35);box-shadow:0 0 8px rgba(34,255,111,.4);}
.cx-shake-scope-x{left:-38px;top:-1px;width:76px;height:2px;}
.cx-shake-scope-y{left:-1px;top:-38px;width:2px;height:76px;}
.cx-shake-scope-dot{position:absolute;left:-5px;top:-5px;width:10px;height:10px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#d9ffe9,#22ff6f 60%,#0a8f4d);box-shadow:0 0 14px rgba(34,255,111,.9),0 0 30px rgba(34,255,111,.4);}
.cx-shake-scope-wave{position:absolute;left:8%;right:8%;bottom:10px;height:22px;display:flex;align-items:center;justify-content:space-between;gap:3px;z-index:1;opacity:.9;}
.cx-shake-scope-wave i{flex:1;height:3px;border-radius:2px;background:linear-gradient(180deg,rgba(34,255,111,.9),rgba(0,200,143,.5));box-shadow:0 0 6px rgba(34,255,111,.5);transform-origin:center;}
.cx-shake-scope-hud{position:absolute;right:8px;top:8px;z-index:3;display:flex;flex-direction:column;align-items:flex-end;gap:2px;font:800 7.5px/1.2 Arial,sans-serif;letter-spacing:.08em;}
.cx-shake-scope-hud b{color:#8ff5d2;text-shadow:0 0 8px rgba(34,255,111,.5);}
.cx-shake-scope-hud span{color:rgba(143,160,201,.65);}
.cx-shake-scope-hud{opacity:0;transition:opacity .15s;}
.cx-shake-scope:hover .cx-shake-scope-hud{opacity:1;}
.cx-shake-preview-label{position:absolute!important;left:8px!important;bottom:8px!important;z-index:3!important;padding:3px 7px!important;border-radius:5px!important;background:rgba(5,10,18,.72)!important;border:1px solid rgba(34,255,111,.28)!important;color:#8ff5d2!important;font:800 8px/1.2 Arial,sans-serif!important;letter-spacing:.08em!important;text-transform:uppercase!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;}
.cx-shake-settings{display:flex!important;flex-direction:column!important;gap:8px!important;margin:0 0 8px!important;padding:10px!important;border-radius:9px!important;border:1px solid rgba(255,255,255,.06)!important;background:rgba(255,255,255,.025)!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;}
.cx-shake-setting-row{display:flex!important;flex-direction:column!important;gap:4px!important;color:#8fa0c9!important;font:700 9px/1.2 Arial,sans-serif!important;letter-spacing:.04em!important;text-transform:uppercase!important;}
.cx-shake-setting-row input[type=range]{width:100%!important;margin:0!important;}
.cx-shake-toggle{display:flex!important;align-items:center!important;gap:6px!important;color:#8fa0c9!important;font-size:9px!important;cursor:pointer!important;}
#shakeList .fxlib-card.is-preview-active{border-color:rgba(34,255,111,.72)!important;box-shadow:0 0 18px rgba(34,255,111,.16)!important;}
/* Each preset drives BOTH the crosshair dot (the shake itself) and the wave
   bars (the frequency signature) — an abstract scope, not a footage clip. */
.cx-shake-preview-fallback .cx-shake-scope-crosshair{transition:transform .12s ease-out;}
.fxlib-shake-basicshake .cx-shake-scope-dot{animation:shBasic .8s ease-in-out infinite}
.fxlib-shake-basicshake .cx-shake-scope-wave i:nth-child(1){animation:shBar .8s ease-in-out infinite}
.fxlib-shake-basicshake .cx-shake-scope-wave i:nth-child(2){animation:shBar .8s .08s ease-in-out infinite}
.fxlib-shake-basicshake .cx-shake-scope-wave i:nth-child(3){animation:shBar .8s .16s ease-in-out infinite}
.fxlib-shake-quickshake .cx-shake-scope-dot{animation:shQuick .24s steps(2) infinite}
.fxlib-shake-quickshake .cx-shake-scope-wave i:nth-child(1){animation:shBar .24s steps(2) infinite}
.fxlib-shake-quickshake .cx-shake-scope-wave i:nth-child(2){animation:shBar .24s .05s steps(2) infinite}
.fxlib-shake-quickshake .cx-shake-scope-wave i:nth-child(3){animation:shBar .24s .1s steps(2) infinite}
.fxlib-shake-waveshakev1 .cx-shake-scope-dot{animation:shWave1 1.2s ease-in-out infinite}
.fxlib-shake-waveshakev1 .cx-shake-scope-wave i:nth-child(1){animation:shBar 1.2s ease-in-out infinite}
.fxlib-shake-waveshakev1 .cx-shake-scope-wave i:nth-child(2){animation:shBar 1.2s .12s ease-in-out infinite}
.fxlib-shake-waveshakev1 .cx-shake-scope-wave i:nth-child(3){animation:shBar 1.2s .24s ease-in-out infinite}
.fxlib-shake-waveshakev2 .cx-shake-scope-dot{animation:shWave2 1s linear infinite}
.fxlib-shake-waveshakev2 .cx-shake-scope-wave i:nth-child(1){animation:shBar 1s linear infinite}
.fxlib-shake-waveshakev2 .cx-shake-scope-wave i:nth-child(2){animation:shBar 1s .1s linear infinite}
.fxlib-shake-waveshakev2 .cx-shake-scope-wave i:nth-child(3){animation:shBar 1s .2s linear infinite}
.fxlib-shake-bounceshakev1 .cx-shake-scope-dot{animation:shBounce1 .9s cubic-bezier(.3,.75,.45,1) infinite}
.fxlib-shake-bounceshakev1 .cx-shake-scope-wave i:nth-child(1){animation:shBar .9s cubic-bezier(.3,.75,.45,1) infinite}
.fxlib-shake-bounceshakev1 .cx-shake-scope-wave i:nth-child(2){animation:shBar .9s .09s cubic-bezier(.3,.75,.45,1) infinite}
.fxlib-shake-bounceshakev2 .cx-shake-scope-dot{animation:shBounce2 .72s cubic-bezier(.25,.8,.4,1) infinite}
.fxlib-shake-bounceshakev2 .cx-shake-scope-wave i:nth-child(1){animation:shBar .72s cubic-bezier(.25,.8,.4,1) infinite}
.fxlib-shake-bounceshakev2 .cx-shake-scope-wave i:nth-child(2){animation:shBar .72s .07s cubic-bezier(.25,.8,.4,1) infinite}
.fxlib-shake-squeezev1shake .cx-shake-scope-dot{animation:shSqueeze1 .9s ease-in-out infinite}
.fxlib-shake-squeezev1shake .cx-shake-scope-wave i:nth-child(1){animation:shBar .9s ease-in-out infinite}
.fxlib-shake-squeezev1shake .cx-shake-scope-wave i:nth-child(2){animation:shBar .9s .09s ease-in-out infinite}
.fxlib-shake-squeezev2shake .cx-shake-scope-dot{animation:shSqueeze2 .76s ease-in-out infinite}
.fxlib-shake-squeezev2shake .cx-shake-scope-wave i:nth-child(1){animation:shBar .76s ease-in-out infinite}
.fxlib-shake-squeezev2shake .cx-shake-scope-wave i:nth-child(2){animation:shBar .76s .08s ease-in-out infinite}
.fxlib-shake-warpshake .cx-shake-scope-dot{animation:shWarp .64s ease-in-out infinite}
.fxlib-shake-warpshake .cx-shake-scope-wave i:nth-child(1){animation:shBar .64s ease-in-out infinite}
.fxlib-shake-warpshake .cx-shake-scope-wave i:nth-child(2){animation:shBar .64s .06s ease-in-out infinite}
.fxlib-shake-lensshake .cx-shake-scope-dot{animation:shLens 1s ease-in-out infinite}
.fxlib-shake-lensshake .cx-shake-scope-wave i:nth-child(1){animation:shBar 1s ease-in-out infinite}
.fxlib-shake-lensshake .cx-shake-scope-wave i:nth-child(2){animation:shBar 1s .1s ease-in-out infinite}
.fxlib-shake-invertshake{animation:shInvertBg .8s steps(2) infinite}
.fxlib-shake-invertshake .cx-shake-scope-dot{animation:shInvert .8s ease-in-out infinite}
.fxlib-shake-invertshake .cx-shake-scope-wave i:nth-child(1){animation:shBar .8s ease-in-out infinite}
.fxlib-shake-invertshake .cx-shake-scope-wave i:nth-child(2){animation:shBar .8s .08s ease-in-out infinite}
.fxlib-shake-invertpixleshake .cx-shake-scope-dot{animation:shPixel .32s steps(4) infinite}
.fxlib-shake-invertpixleshake .cx-shake-scope-wave i:nth-child(1){animation:shBar .32s steps(4) infinite}
.fxlib-shake-invertpixleshake .cx-shake-scope-wave i:nth-child(2){animation:shBar .32s .04s steps(4) infinite}
.fxlib-shake-darkflickershake:after,.cx-shake-preview-fallback.fxlib-shake-whiteflickershake:after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none}
.fxlib-shake-darkflickershake:after{background:#000;animation:shDark .52s steps(3) infinite}
.fxlib-shake-whiteflickershake:after{background:#fff;animation:shWhite .48s steps(3) infinite}
.fxlib-shake-darkflickershake .cx-shake-scope-dot{animation:shDark .52s steps(3) infinite}
.fxlib-shake-whiteflickershake .cx-shake-scope-dot{animation:shWhite .48s steps(3) infinite}
@keyframes shBar{0%,100%{transform:scaleY(.25)}50%{transform:scaleY(1)}}

/* Mark Audio Beats glass modal */
.modal-backdrop.cx-glass-modal{background:rgba(0,0,0,.82)!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;}
.cx-beat-modal-box{max-width:320px!important;background:linear-gradient(155deg,rgba(13,20,36,.94),rgba(8,12,24,.92))!important;border:1px solid rgba(34,255,111,.14)!important;box-shadow:0 20px 50px rgba(0,0,0,.65),0 0 30px rgba(34,255,111,.06)!important;backdrop-filter:blur(24px) saturate(170%)!important;-webkit-backdrop-filter:blur(24px) saturate(170%)!important;}
.cx-beat-modal-body{display:flex!important;flex-direction:column!important;gap:10px!important;}
.cx-beat-glass-section{padding:10px!important;border-radius:8px!important;border:1px solid rgba(255,255,255,.07)!important;background:rgba(255,255,255,.03)!important;}
.cx-beat-section-label{margin-bottom:8px!important;padding-bottom:4px!important;border-bottom:1px solid rgba(255,255,255,.08)!important;color:#8fa0c9!important;font:800 9px/1.2 Arial,sans-serif!important;letter-spacing:.08em!important;text-transform:uppercase!important;}
.cx-beat-source-row{display:flex!important;align-items:center!important;gap:6px!important;}
.cx-beat-source-name{flex:1!important;min-width:0!important;color:#eef4ff!important;font:600 11px/1.3 Arial,sans-serif!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;}
.cx-beat-detect-btn{background:rgba(34,255,111,.12)!important;border-color:rgba(34,255,111,.45)!important;color:#8ff5d2!important;}
.cx-beat-setting-row{display:flex!important;flex-direction:column!important;gap:4px!important;margin-bottom:8px!important;color:#8fa0c9!important;font:700 9px/1.2 Arial,sans-serif!important;text-transform:uppercase!important;}
.cx-beat-setting-row input[type=range]{width:100%!important;}
.cx-beat-setting-inline{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:8px!important;color:#8fa0c9!important;font:700 9px/1.2 Arial,sans-serif!important;text-transform:uppercase!important;}
.cx-beat-setting-inline input[type=number]{width:64px!important;padding:4px!important;border-radius:5px!important;border:1px solid rgba(255,255,255,.1)!important;background:rgba(255,255,255,.05)!important;color:#fff!important;font-size:10px!important;text-align:center!important;}
.cx-beat-generate-btn{letter-spacing:.06em!important;text-transform:uppercase!important;}
@keyframes pvMirror{0%,100%{transform:scaleX(-1) translateX(-6px)}50%{transform:scaleX(1) translateX(6px)}}@keyframes pvFollow{0%,100%{letter-spacing:.02em;transform:translateX(-14px)}50%{letter-spacing:.18em;transform:translateX(14px)}}@keyframes pvImpact{0%,45%{transform:translateX(-25px) scale(.7)}55%{transform:translateX(8px) scale(1.3)}70%{transform:translateX(-3px) scale(.95)}100%{transform:none}}@keyframes pvPop{0%{opacity:.15;transform:scale(.25)}60%{opacity:1;transform:scale(1.3)}100%{transform:scale(1)}}
