/* SM Animation Addons — generated stylesheet. Edit gen_css.py, not this file. */
.sah-widget{width:100%}
.sah-heading{margin:0;line-height:1.3}
:where(.elementor-element){--sah-dur:initial;--sah-delay:initial;--sah-ease:initial;--sah-dist:initial;--sah-lp-dur:initial;--sah-stagger:initial;--sah-si:initial;--sah-mi:initial;--sah-hv-t:initial;--sah-a-in:initial;--sah-a-lp:initial;--sah-a-hv:initial}
.sah-lp,[class*="sahx-lp-"],[class*="sahx-in-"],[class*="sahx-hv-a-"]{animation:var(--sah-a-in,none),var(--sah-a-lp,none),var(--sah-a-hv,none)}
.sah-lp{display:inline-block}
/* ===== Reveal / entrance ===== */
@keyframes sah-in-fade{from{opacity:0}}
@keyframes sah-in-up{from{opacity:0;transform:translate3d(0,var(--sah-dist,40px),0)}}
@keyframes sah-in-down{from{opacity:0;transform:translate3d(0,calc(var(--sah-dist,40px)*-1),0)}}
@keyframes sah-in-left{from{opacity:0;transform:translate3d(calc(var(--sah-dist,60px)*-1),0,0)}}
@keyframes sah-in-right{from{opacity:0;transform:translate3d(var(--sah-dist,60px),0,0)}}
@keyframes sah-in-zoom-in{from{opacity:0;transform:scale(.6)}}
@keyframes sah-in-zoom-out{from{opacity:0;transform:scale(1.5)}}
@keyframes sah-in-zoom-rotate{from{opacity:0;transform:scale(.4) rotate(-25deg)}}
@keyframes sah-in-flip-x{from{opacity:0;transform:perspective(700px) rotateX(-90deg)}}
@keyframes sah-in-flip-y{from{opacity:0;transform:perspective(700px) rotateY(-90deg)}}
@keyframes sah-in-rotate{from{opacity:0;transform:rotate(-45deg);transform-origin:left bottom}}
@keyframes sah-in-spin{from{opacity:0;transform:rotate(-540deg) scale(.2)}}
@keyframes sah-in-skew{from{opacity:0;transform:translateX(-40px) skewX(30deg)}}
@keyframes sah-in-blur{from{opacity:0;filter:blur(14px)}}
@keyframes sah-in-blur-up{from{opacity:0;filter:blur(12px);transform:translate3d(0,var(--sah-dist,30px),0)}}
@keyframes sah-in-bounce{0%{opacity:0;transform:scale(.3)}20%{transform:scale(1.1)}40%{opacity:1;transform:scale(.9)}60%{transform:scale(1.03)}80%{transform:scale(.97)}100%{opacity:1;transform:scale(1)}}
@keyframes sah-in-elastic{0%{opacity:0;transform:scale(0)}40%{opacity:1;transform:scale(1.25)}60%{transform:scale(.88)}78%{transform:scale(1.07)}90%{transform:scale(.97)}100%{opacity:1;transform:scale(1)}}
@keyframes sah-in-drop{0%{opacity:0;transform:translateY(-140px)}55%{opacity:1;transform:translateY(0)}70%{transform:translateY(-22px)}82%{transform:translateY(0)}91%{transform:translateY(-8px)}100%{transform:translateY(0)}}
@keyframes sah-in-swing{0%{opacity:0;transform:perspective(600px) rotateX(-90deg);transform-origin:top center}40%{opacity:1;transform:perspective(600px) rotateX(25deg)}70%{transform:perspective(600px) rotateX(-12deg)}100%{transform:perspective(600px) rotateX(0);transform-origin:top center}}
@keyframes sah-in-roll{from{opacity:0;transform:translateX(-120px) rotate(-360deg)}}
@keyframes sah-in-pop{0%{opacity:0;transform:translateY(16px) scale(.8)}100%{opacity:1;transform:none}}
@keyframes sah-in-light-speed{0%{opacity:0;transform:translateX(100%) skewX(-30deg)}60%{opacity:1;transform:skewX(20deg)}80%{transform:skewX(-5deg)}100%{transform:none}}
@keyframes sah-in-stretch{from{opacity:0;transform:scale(1.8,.2)}}
@keyframes sah-in-wipe-left{from{clip-path:inset(0 100% 0 0)}}
@keyframes sah-in-wipe-right{from{clip-path:inset(0 0 0 100%)}}
@keyframes sah-in-wipe-up{from{clip-path:inset(100% 0 0 0)}}
@keyframes sah-in-wipe-down{from{clip-path:inset(0 0 100% 0)}}
@keyframes sah-in-curtain-h{from{clip-path:inset(0 50% 0 50%)}}
@keyframes sah-in-curtain-v{from{clip-path:inset(50% 0 50% 0)}}
@keyframes sah-in-circle{from{clip-path:circle(0% at 50% 50%)}to{clip-path:circle(75% at 50% 50%)}}
@keyframes sah-in-diamond{from{clip-path:polygon(50% 50%,50% 50%,50% 50%,50% 50%)}to{clip-path:polygon(50% -50%,150% 50%,50% 150%,-50% 50%)}}
.sah-live-js .sah-reveal:not(.sah-play) .sah-u,.sah-live-js [class*="sahx-in-"]:not(.sah-play){opacity:0}
.sah-reveal.sah-play .sah-u{animation-fill-mode:backwards;animation-duration:var(--sah-dur,.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1));animation-delay:calc(var(--sah-delay,0ms) + var(--i,0)*var(--sah-stagger,0ms))}
.sah-reveal.sah-mode-letters.sah-play .sah-u{animation-delay:calc(var(--sah-delay,0ms) + var(--i,0)*var(--sah-stagger,45ms))}
.sah-reveal.sah-mode-words.sah-play .sah-u{animation-delay:calc(var(--sah-delay,0ms) + var(--i,0)*var(--sah-stagger,140ms))}
.sah-reveal.sah-mode-items.sah-play .sah-u{animation-delay:calc(var(--sah-delay,0ms) + var(--i,0)*var(--sah-stagger,120ms))}
.sah-letter,.sah-word{display:inline-block}
.sah-wg{display:inline-block;white-space:nowrap}
.sah-heading .sah-blk{display:inline-block;max-width:100%}
.sah-reveal.sah-kf-fade.sah-play .sah-u{animation-name:sah-in-fade;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-up.sah-play .sah-u{animation-name:sah-in-up;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-down.sah-play .sah-u{animation-name:sah-in-down;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-left.sah-play .sah-u{animation-name:sah-in-left;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-right.sah-play .sah-u{animation-name:sah-in-right;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-zoom-in.sah-play .sah-u{animation-name:sah-in-zoom-in;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-zoom-out.sah-play .sah-u{animation-name:sah-in-zoom-out;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-zoom-rotate.sah-play .sah-u{animation-name:sah-in-zoom-rotate;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-flip-x.sah-play .sah-u{animation-name:sah-in-flip-x;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-flip-y.sah-play .sah-u{animation-name:sah-in-flip-y;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-rotate.sah-play .sah-u{animation-name:sah-in-rotate;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-spin.sah-play .sah-u{animation-name:sah-in-spin;animation-duration:var(--sah-dur,1s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-skew.sah-play .sah-u{animation-name:sah-in-skew;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-blur.sah-play .sah-u{animation-name:sah-in-blur;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-blur-up.sah-play .sah-u{animation-name:sah-in-blur-up;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-bounce.sah-play .sah-u{animation-name:sah-in-bounce;animation-duration:var(--sah-dur,1.1s);animation-timing-function:var(--sah-ease,ease-out)}
.sah-reveal.sah-kf-elastic.sah-play .sah-u{animation-name:sah-in-elastic;animation-duration:var(--sah-dur,1.1s);animation-timing-function:var(--sah-ease,ease-out)}
.sah-reveal.sah-kf-drop.sah-play .sah-u{animation-name:sah-in-drop;animation-duration:var(--sah-dur,1.2s);animation-timing-function:var(--sah-ease,ease-in)}
.sah-reveal.sah-kf-swing.sah-play .sah-u{animation-name:sah-in-swing;animation-duration:var(--sah-dur,1.1s);animation-timing-function:var(--sah-ease,ease-out)}
.sah-reveal.sah-kf-roll.sah-play .sah-u{animation-name:sah-in-roll;animation-duration:var(--sah-dur,1s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-pop.sah-play .sah-u{animation-name:sah-in-pop;animation-duration:var(--sah-dur,0.5s);animation-timing-function:var(--sah-ease,ease)}
.sah-reveal.sah-kf-light-speed.sah-play .sah-u{animation-name:sah-in-light-speed;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,ease-out)}
.sah-reveal.sah-kf-stretch.sah-play .sah-u{animation-name:sah-in-stretch;animation-duration:var(--sah-dur,0.8s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-wipe-left.sah-play .sah-u{animation-name:sah-in-wipe-left;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-wipe-right.sah-play .sah-u{animation-name:sah-in-wipe-right;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-wipe-up.sah-play .sah-u{animation-name:sah-in-wipe-up;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-wipe-down.sah-play .sah-u{animation-name:sah-in-wipe-down;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-curtain-h.sah-play .sah-u{animation-name:sah-in-curtain-h;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-curtain-v.sah-play .sah-u{animation-name:sah-in-curtain-v;animation-duration:var(--sah-dur,0.9s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-circle.sah-play .sah-u{animation-name:sah-in-circle;animation-duration:var(--sah-dur,1s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sah-reveal.sah-kf-diamond.sah-play .sah-u{animation-name:sah-in-diamond;animation-duration:var(--sah-dur,1s);animation-timing-function:var(--sah-ease,cubic-bezier(.22,1,.36,1))}
.sahx-in-fade.sah-play{--sah-a-in:sah-in-fade var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-up.sah-play{--sah-a-in:sah-in-up var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-down.sah-play{--sah-a-in:sah-in-down var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-left.sah-play{--sah-a-in:sah-in-left var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-right.sah-play{--sah-a-in:sah-in-right var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-zoom-in.sah-play{--sah-a-in:sah-in-zoom-in var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-zoom-out.sah-play{--sah-a-in:sah-in-zoom-out var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-zoom-rotate.sah-play{--sah-a-in:sah-in-zoom-rotate var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-flip-x.sah-play{--sah-a-in:sah-in-flip-x var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-flip-y.sah-play{--sah-a-in:sah-in-flip-y var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-rotate.sah-play{--sah-a-in:sah-in-rotate var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-spin.sah-play{--sah-a-in:sah-in-spin var(--sah-dur,1s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-skew.sah-play{--sah-a-in:sah-in-skew var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-blur.sah-play{--sah-a-in:sah-in-blur var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-blur-up.sah-play{--sah-a-in:sah-in-blur-up var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-bounce.sah-play{--sah-a-in:sah-in-bounce var(--sah-dur,1.1s) var(--sah-ease,ease-out) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-elastic.sah-play{--sah-a-in:sah-in-elastic var(--sah-dur,1.1s) var(--sah-ease,ease-out) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-drop.sah-play{--sah-a-in:sah-in-drop var(--sah-dur,1.2s) var(--sah-ease,ease-in) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-swing.sah-play{--sah-a-in:sah-in-swing var(--sah-dur,1.1s) var(--sah-ease,ease-out) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-roll.sah-play{--sah-a-in:sah-in-roll var(--sah-dur,1s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-pop.sah-play{--sah-a-in:sah-in-pop var(--sah-dur,0.5s) var(--sah-ease,ease) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-light-speed.sah-play{--sah-a-in:sah-in-light-speed var(--sah-dur,0.9s) var(--sah-ease,ease-out) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-stretch.sah-play{--sah-a-in:sah-in-stretch var(--sah-dur,0.8s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-wipe-left.sah-play{--sah-a-in:sah-in-wipe-left var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-wipe-right.sah-play{--sah-a-in:sah-in-wipe-right var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-wipe-up.sah-play{--sah-a-in:sah-in-wipe-up var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-wipe-down.sah-play{--sah-a-in:sah-in-wipe-down var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-curtain-h.sah-play{--sah-a-in:sah-in-curtain-h var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-curtain-v.sah-play{--sah-a-in:sah-in-curtain-v var(--sah-dur,0.9s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-circle.sah-play{--sah-a-in:sah-in-circle var(--sah-dur,1s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
.sahx-in-diamond.sah-play{--sah-a-in:sah-in-diamond var(--sah-dur,1s) var(--sah-ease,cubic-bezier(.22,1,.36,1)) var(--sah-delay,0ms) 1 normal backwards}
/* ===== Continuous loops ===== */
@keyframes sah-lp-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
@keyframes sah-hv-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
@keyframes sah-lp-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes sah-hv-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes sah-lp-levitate{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-10px) rotate(1.5deg)}50%{transform:translateY(-16px) rotate(0)}75%{transform:translateY(-8px) rotate(-1.5deg)}}
@keyframes sah-hv-levitate{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-10px) rotate(1.5deg)}50%{transform:translateY(-16px) rotate(0)}75%{transform:translateY(-8px) rotate(-1.5deg)}}
@keyframes sah-lp-shake{0%{transform:translateX(0)}8.25%{transform:translateX(-8px)}16.5%{transform:translateX(7px)}24.75%{transform:translateX(-6px)}33%{transform:translateX(5px)}41.25%{transform:translateX(-3px)}49.5%{transform:translateX(2px)}55%,100%{transform:translateX(0)}}
@keyframes sah-hv-shake{0%,100%{transform:translateX(0)}15%{transform:translateX(-8px)}30%{transform:translateX(7px)}45%{transform:translateX(-6px)}60%{transform:translateX(5px)}75%{transform:translateX(-3px)}90%{transform:translateX(2px)}}
@keyframes sah-lp-wobble{0%{transform:none}9%{transform:translateX(-25%) rotate(-5deg)}18%{transform:translateX(20%) rotate(3deg)}27%{transform:translateX(-15%) rotate(-3deg)}36%{transform:translateX(10%) rotate(2deg)}45%{transform:translateX(-5%) rotate(-1deg)}60%,100%{transform:none}}
@keyframes sah-hv-wobble{0%,100%{transform:none}15%{transform:translateX(-25%) rotate(-5deg)}30%{transform:translateX(20%) rotate(3deg)}45%{transform:translateX(-15%) rotate(-3deg)}60%{transform:translateX(10%) rotate(2deg)}75%{transform:translateX(-5%) rotate(-1deg)}}
@keyframes sah-lp-jello{0%{transform:none}13.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}19.8%{transform:skewX(6.25deg) skewY(6.25deg)}26.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}33%{transform:skewX(1.5625deg) skewY(1.5625deg)}39.6%{transform:skewX(-.78deg) skewY(-.78deg)}46.2%{transform:skewX(.39deg) skewY(.39deg)}52.8%{transform:skewX(-.2deg) skewY(-.2deg)}60%,100%{transform:none}}
@keyframes sah-hv-jello{0%,100%{transform:none}22%{transform:skewX(-12.5deg) skewY(-12.5deg)}33%{transform:skewX(6.25deg) skewY(6.25deg)}44%{transform:skewX(-3.125deg) skewY(-3.125deg)}55%{transform:skewX(1.5625deg) skewY(1.5625deg)}66%{transform:skewX(-.78deg) skewY(-.78deg)}77%{transform:skewX(.39deg) skewY(.39deg)}88%{transform:skewX(-.2deg) skewY(-.2deg)}}
@keyframes sah-lp-heartbeat{0%,100%{transform:scale(1)}14%{transform:scale(1.3)}28%{transform:scale(1)}42%{transform:scale(1.3)}70%{transform:scale(1)}}
@keyframes sah-hv-heartbeat{0%,100%{transform:scale(1)}14%{transform:scale(1.3)}28%{transform:scale(1)}42%{transform:scale(1.3)}70%{transform:scale(1)}}
@keyframes sah-lp-tada{0%{transform:scale(1) rotate(0)}5%,10%{transform:scale(.9) rotate(-3deg)}15%,25%,35%,45%{transform:scale(1.1) rotate(3deg)}20%,30%,40%{transform:scale(1.1) rotate(-3deg)}50%,100%{transform:scale(1) rotate(0)}}
@keyframes sah-hv-tada{0%,100%{transform:scale(1) rotate(0)}10%,20%{transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}}
@keyframes sah-lp-swing{0%{transform:rotate(0)}14%{transform:rotate(15deg)}28%{transform:rotate(-10deg)}42%{transform:rotate(5deg)}56%{transform:rotate(-5deg)}70%,100%{transform:rotate(0)}}
@keyframes sah-hv-swing{0%,100%{transform:rotate(0)}20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}}
@keyframes sah-lp-flicker{0%,19%,21%,23%,25%,54%,56%,100%{opacity:1}20%,24%,55%{opacity:.25}}
@keyframes sah-hv-flicker{0%,19%,21%,23%,25%,54%,56%,100%{opacity:1}20%,24%,55%{opacity:.25}}
@keyframes sah-lp-rubber-band{0%{transform:scale(1,1)}16.5%{transform:scale(1.25,.75)}22%{transform:scale(.75,1.25)}27.5%{transform:scale(1.15,.85)}35.75%{transform:scale(.95,1.05)}41.25%{transform:scale(1.05,.95)}55%,100%{transform:scale(1,1)}}
@keyframes sah-hv-rubber-band{0%,100%{transform:scale(1,1)}30%{transform:scale(1.25,.75)}40%{transform:scale(.75,1.25)}50%{transform:scale(1.15,.85)}65%{transform:scale(.95,1.05)}75%{transform:scale(1.05,.95)}}
@keyframes sah-lp-bounce{0%,14%,37.1%{transform:translateY(0)}28%,30.1%{transform:translateY(-26px)}49%{transform:translateY(-12px)}63%{transform:translateY(-4px)}70%,100%{transform:translateY(0)}}
@keyframes sah-hv-bounce{0%,20%,53%,100%{transform:translateY(0)}40%,43%{transform:translateY(-26px)}70%{transform:translateY(-12px)}90%{transform:translateY(-4px)}}
@keyframes sah-lp-flip{0%{transform:perspective(500px) rotateY(0)}45%,100%{transform:perspective(500px) rotateY(360deg)}}
@keyframes sah-hv-flip{0%{transform:perspective(500px) rotateY(0)}100%{transform:perspective(500px) rotateY(360deg)}}
@keyframes sah-lp-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
@keyframes sah-hv-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
@keyframes sah-lp-breathe{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.04);opacity:.85}}
@keyframes sah-hv-breathe{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.04);opacity:.85}}
@keyframes sah-lp-tilt{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}
@keyframes sah-hv-tilt{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}
@keyframes sah-lp-sway{0%,100%{transform:translateX(-8px) rotate(-2deg)}50%{transform:translateX(8px) rotate(2deg)}}
@keyframes sah-hv-sway{0%,100%{transform:translateX(-8px) rotate(-2deg)}50%{transform:translateX(8px) rotate(2deg)}}
@keyframes sah-lp-blink{0%,45%{opacity:1}50%,95%{opacity:0}100%{opacity:1}}
@keyframes sah-hv-blink{0%,45%{opacity:1}50%,95%{opacity:0}100%{opacity:1}}
@keyframes sah-lp-jitter{0%,100%{transform:translate(0,0)}10%{transform:translate(-1px,1px)}20%{transform:translate(1px,-1px)}30%{transform:translate(-1px,-1px)}40%{transform:translate(1px,1px)}50%{transform:translate(-2px,0)}60%{transform:translate(2px,1px)}70%{transform:translate(0,-2px)}80%{transform:translate(-1px,2px)}90%{transform:translate(1px,-1px)}}
@keyframes sah-hv-jitter{0%,100%{transform:translate(0,0)}10%{transform:translate(-1px,1px)}20%{transform:translate(1px,-1px)}30%{transform:translate(-1px,-1px)}40%{transform:translate(1px,1px)}50%{transform:translate(-2px,0)}60%{transform:translate(2px,1px)}70%{transform:translate(0,-2px)}80%{transform:translate(-1px,2px)}90%{transform:translate(1px,-1px)}}
@keyframes sah-lp-orbit{0%{transform:rotate(0) translateX(10px) rotate(0)}100%{transform:rotate(360deg) translateX(10px) rotate(-360deg)}}
@keyframes sah-hv-orbit{0%{transform:rotate(0) translateX(10px) rotate(0)}100%{transform:rotate(360deg) translateX(10px) rotate(-360deg)}}
@keyframes sah-lp-zigzag{0%,100%{transform:translate(0,0)}20%{transform:translate(10px,-6px)}40%{transform:translate(-10px,-12px)}60%{transform:translate(10px,-6px)}80%{transform:translate(-10px,0)}}
@keyframes sah-hv-zigzag{0%,100%{transform:translate(0,0)}20%{transform:translate(10px,-6px)}40%{transform:translate(-10px,-12px)}60%{transform:translate(10px,-6px)}80%{transform:translate(-10px,0)}}
@keyframes sah-lp-wiggle{0%{transform:rotate(0)}12%{transform:rotate(-6deg)}24%{transform:rotate(6deg)}36%{transform:rotate(-4deg)}48%{transform:rotate(4deg)}60%,100%{transform:rotate(0)}}
@keyframes sah-hv-wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-6deg)}40%{transform:rotate(6deg)}60%{transform:rotate(-4deg)}80%{transform:rotate(4deg)}}
@keyframes sah-lp-flash{0%,25%{opacity:1}12.5%,37.5%{opacity:0}50%,100%{opacity:1}}
@keyframes sah-hv-flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}
@keyframes sah-lp-hue{0%{filter:hue-rotate(0)}100%{filter:hue-rotate(360deg)}}
@keyframes sah-hv-hue{0%{filter:hue-rotate(0)}100%{filter:hue-rotate(360deg)}}
@keyframes sah-lp-glow{0%,100%{filter:drop-shadow(0 0 2px var(--sah-accent,#5b2ee8))}50%{filter:drop-shadow(0 0 14px var(--sah-accent,#5b2ee8))}}
@keyframes sah-hv-glow{0%,100%{filter:drop-shadow(0 0 2px var(--sah-accent,#5b2ee8))}50%{filter:drop-shadow(0 0 14px var(--sah-accent,#5b2ee8))}}
.sah-lp-pulse,.sahx-lp-pulse{--sah-a-lp:sah-lp-pulse var(--sah-lp-dur,1.6s) ease-in-out infinite}
.sah-lp-float,.sahx-lp-float{--sah-a-lp:sah-lp-float var(--sah-lp-dur,3s) ease-in-out infinite}
.sah-lp-levitate,.sahx-lp-levitate{--sah-a-lp:sah-lp-levitate var(--sah-lp-dur,5s) ease-in-out infinite}
.sah-lp-shake,.sahx-lp-shake{--sah-a-lp:sah-lp-shake var(--sah-lp-dur,1.6s) ease-in-out infinite}
.sah-lp-wobble,.sahx-lp-wobble{--sah-a-lp:sah-lp-wobble var(--sah-lp-dur,2s) ease-in-out infinite}
.sah-lp-jello,.sahx-lp-jello{--sah-a-lp:sah-lp-jello var(--sah-lp-dur,2s) ease infinite}
.sah-lp-heartbeat,.sahx-lp-heartbeat{--sah-a-lp:sah-lp-heartbeat var(--sah-lp-dur,1.6s) ease-in-out infinite}
.sah-lp-tada,.sahx-lp-tada{--sah-a-lp:sah-lp-tada var(--sah-lp-dur,2.2s) ease-in-out infinite}
.sah-lp-swing,.sahx-lp-swing{transform-origin:top center;--sah-a-lp:sah-lp-swing var(--sah-lp-dur,2s) ease-in-out infinite}
.sah-lp-flicker,.sahx-lp-flicker{--sah-a-lp:sah-lp-flicker var(--sah-lp-dur,3s) linear infinite}
.sah-lp-rubber-band,.sahx-lp-rubber-band{--sah-a-lp:sah-lp-rubber-band var(--sah-lp-dur,2s) ease-in-out infinite}
.sah-lp-bounce,.sahx-lp-bounce{transform-origin:center bottom;--sah-a-lp:sah-lp-bounce var(--sah-lp-dur,1.6s) ease-out infinite}
.sah-lp-flip,.sahx-lp-flip{--sah-a-lp:sah-lp-flip var(--sah-lp-dur,3s) ease-in-out infinite}
.sah-lp-spin,.sahx-lp-spin{--sah-a-lp:sah-lp-spin var(--sah-lp-dur,3s) linear infinite}
.sah-lp-breathe,.sahx-lp-breathe{--sah-a-lp:sah-lp-breathe var(--sah-lp-dur,4s) ease-in-out infinite}
.sah-lp-tilt,.sahx-lp-tilt{--sah-a-lp:sah-lp-tilt var(--sah-lp-dur,2.5s) ease-in-out infinite}
.sah-lp-sway,.sahx-lp-sway{--sah-a-lp:sah-lp-sway var(--sah-lp-dur,3.5s) ease-in-out infinite}
.sah-lp-blink,.sahx-lp-blink{--sah-a-lp:sah-lp-blink var(--sah-lp-dur,1.2s) linear infinite}
.sah-lp-jitter,.sahx-lp-jitter{--sah-a-lp:sah-lp-jitter var(--sah-lp-dur,0.6s) linear infinite}
.sah-lp-orbit,.sahx-lp-orbit{--sah-a-lp:sah-lp-orbit var(--sah-lp-dur,4s) linear infinite}
.sah-lp-zigzag,.sahx-lp-zigzag{--sah-a-lp:sah-lp-zigzag var(--sah-lp-dur,2.4s) ease-in-out infinite}
.sah-lp-wiggle,.sahx-lp-wiggle{--sah-a-lp:sah-lp-wiggle var(--sah-lp-dur,1.4s) ease-in-out infinite}
.sah-lp-flash,.sahx-lp-flash{--sah-a-lp:sah-lp-flash var(--sah-lp-dur,2s) linear infinite}
.sah-lp-hue,.sahx-lp-hue{--sah-a-lp:sah-lp-hue var(--sah-lp-dur,6s) linear infinite}
.sah-lp-glow,.sahx-lp-glow{--sah-a-lp:sah-lp-glow var(--sah-lp-dur,2.2s) ease-in-out infinite}
/* ===== Text-style loops ===== */
@keyframes sah-lp-gradient{from{background-position:0% 50%}to{background-position:300% 50%}}
@keyframes sah-lp-rainbow{0%,100%{color:hsl(0 90% 60%)}17%{color:hsl(60 90% 55%)}33%{color:hsl(120 80% 50%)}50%{color:hsl(180 85% 50%)}67%{color:hsl(240 90% 65%)}83%{color:hsl(300 85% 60%)}}
@keyframes sah-lp-shimmer{from{background-position:100% 0}to{background-position:0% 0}}
@keyframes sah-lp-neon{0%,19%,22%,62%,64%,100%{text-shadow:0 0 4px var(--sah-accent,#5b2ee8),0 0 10px var(--sah-accent,#5b2ee8),0 0 22px var(--sah-accent,#5b2ee8),0 0 44px var(--sah-accent,#5b2ee8)}20%,21%,63%{text-shadow:none}50%{text-shadow:0 0 2px var(--sah-accent,#5b2ee8),0 0 5px var(--sah-accent,#5b2ee8),0 0 11px var(--sah-accent,#5b2ee8),0 0 22px var(--sah-accent,#5b2ee8)}}
@keyframes sah-lp-glitch{0%,92%,100%{transform:none}93%{transform:translateX(2px) skewX(-6deg)}95%{transform:translateX(-2px) skewX(4deg)}97%{transform:translateX(1px)}}
@keyframes sah-lp-outline{0%,100%{-webkit-text-fill-color:transparent}50%{-webkit-text-fill-color:currentColor}}
@keyframes sah-lp-underline{0%{background-size:0 .12em;background-position:0 100%}45%,55%{background-size:100% .12em;background-position:0 100%}100%{background-size:0 .12em;background-position:100% 100%}}
@keyframes sah-lp-highlight{0%{background-size:0 45%;background-position:0 88%}40%,70%{background-size:100% 45%;background-position:0 88%}100%{background-size:0 45%;background-position:100% 88%}}
@keyframes sah-lp-blur-focus{0%,100%{filter:blur(0);opacity:1}50%{filter:blur(6px);opacity:.7}}
@keyframes sah-lp-text-3d{0%,100%{text-shadow:1px 1px 0 var(--sah-accent,#5b2ee8),2px 2px 0 var(--sah-accent,#5b2ee8),3px 3px 0 var(--sah-accent,#5b2ee8),4px 4px 0 var(--sah-accent,#5b2ee8),5px 5px 0 var(--sah-accent,#5b2ee8)}50%{text-shadow:-1px 1px 0 var(--sah-accent,#5b2ee8),-2px 2px 0 var(--sah-accent,#5b2ee8),-3px 3px 0 var(--sah-accent,#5b2ee8),-4px 4px 0 var(--sah-accent,#5b2ee8),-5px 5px 0 var(--sah-accent,#5b2ee8)}}
@keyframes sah-lp-color-pulse{50%{color:var(--sah-accent,#ff4d6d)}}
@keyframes sah-lp-wave-skew{0%,100%{transform:skewX(-10deg)}50%{transform:skewX(10deg)}}
.sah-lp-gradient{display:inline-block;background-image:linear-gradient(90deg,var(--sah-grad-1,#5b2ee8),var(--sah-grad-2,#00b8a9),var(--sah-grad-3,#ff6b6b),var(--sah-grad-1,#5b2ee8));background-size:300% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;--sah-a-lp:sah-lp-gradient var(--sah-lp-dur,6s) linear infinite}
.sah-lp-rainbow{--sah-a-lp:sah-lp-rainbow var(--sah-lp-dur,4s) linear infinite}
.sah-lp-shimmer{background-image:linear-gradient(110deg,currentColor 40%,var(--sah-accent,#fff) 50%,currentColor 60%);background-size:250% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;--sah-a-lp:sah-lp-shimmer var(--sah-lp-dur,3s) linear infinite}
.sah-lp-neon{--sah-a-lp:sah-lp-neon var(--sah-lp-dur,3s) linear infinite}
.sah-lp-glitch{position:relative;--sah-a-lp:sah-lp-glitch var(--sah-lp-dur,3s) steps(1) infinite}
.sah-lp-outline{-webkit-text-stroke:1.5px var(--sah-accent,currentColor);--sah-a-lp:sah-lp-outline var(--sah-lp-dur,3s) ease-in-out infinite}
.sah-lp-underline{display:inline;background-image:linear-gradient(var(--sah-accent,#ff4d6d),var(--sah-accent,#ff4d6d));background-repeat:no-repeat;background-position:0 100%;background-size:0 .12em;padding-bottom:.1em;-webkit-box-decoration-break:clone;box-decoration-break:clone;--sah-a-lp:sah-lp-underline var(--sah-lp-dur,2.4s) ease-in-out infinite}
.sah-lp-highlight{display:inline;background-image:linear-gradient(color-mix(in srgb,var(--sah-accent,#ffd84d) 70%,transparent),color-mix(in srgb,var(--sah-accent,#ffd84d) 70%,transparent));background-repeat:no-repeat;background-position:0 88%;background-size:0 45%;-webkit-box-decoration-break:clone;box-decoration-break:clone;--sah-a-lp:sah-lp-highlight var(--sah-lp-dur,3s) ease-in-out infinite}
.sah-lp-blur-focus{--sah-a-lp:sah-lp-blur-focus var(--sah-lp-dur,3s) ease-in-out infinite}
.sah-lp-text-3d{--sah-a-lp:sah-lp-text-3d var(--sah-lp-dur,3s) ease-in-out infinite}
.sah-lp-color-pulse{--sah-a-lp:sah-lp-color-pulse var(--sah-lp-dur,2s) ease-in-out infinite}
.sah-lp-wave-skew{--sah-a-lp:sah-lp-wave-skew var(--sah-lp-dur,2.4s) ease-in-out infinite}
@keyframes sah-glitch-a{0%,100%{clip-path:inset(0 0 100% 0);transform:translateX(0)}10%{clip-path:inset(10% 0 60% 0);transform:translateX(-4px)}30%{clip-path:inset(50% 0 20% 0);transform:translateX(4px)}50%{clip-path:inset(80% 0 5% 0);transform:translateX(-3px)}70%{clip-path:inset(30% 0 50% 0);transform:translateX(3px)}90%{clip-path:inset(0 0 90% 0);transform:translateX(-2px)}}
@keyframes sah-glitch-b{0%,100%{clip-path:inset(100% 0 0 0);transform:translateX(0)}15%{clip-path:inset(60% 0 10% 0);transform:translateX(4px)}35%{clip-path:inset(5% 0 80% 0);transform:translateX(-4px)}55%{clip-path:inset(40% 0 40% 0);transform:translateX(3px)}75%{clip-path:inset(75% 0 8% 0);transform:translateX(-3px)}95%{clip-path:inset(20% 0 60% 0);transform:translateX(2px)}}
.sah-lp-glitch::before,.sah-lp-glitch::after{content:attr(data-text);position:absolute;left:0;top:0;width:100%;height:100%;white-space:pre-wrap;pointer-events:none;-webkit-text-fill-color:currentColor}
.sah-lp-glitch::before{color:var(--sah-accent,#ff2bd6);animation:sah-glitch-a 2.6s steps(1) infinite}
.sah-lp-glitch::after{color:#00e5ff;animation:sah-glitch-b 2.2s steps(1) infinite}
/* ===== Per-letter loops ===== */
@keyframes sah-ll-wave{0%,100%{transform:translateY(0)}50%{transform:translateY(-.35em)}}
@keyframes sah-ll-jump{0%,50%,100%{transform:translateY(0)}25%{transform:translateY(-.55em)}}
@keyframes sah-ll-bounce{0%,20%,50%,80%,100%{transform:translateY(0)}40%{transform:translateY(-.5em)}60%{transform:translateY(-.25em)}}
@keyframes sah-ll-color{50%{color:var(--sah-accent,#ff4d6d)}}
@keyframes sah-ll-flip{0%{transform:perspective(400px) rotateY(0)}40%,100%{transform:perspective(400px) rotateY(360deg)}}
@keyframes sah-ll-rotate{0%{transform:rotate(0)}40%,100%{transform:rotate(360deg)}}
@keyframes sah-ll-blink{0%,100%{opacity:1}50%{opacity:.1}}
@keyframes sah-ll-glow{0%,100%{text-shadow:none}50%{text-shadow:0 0 .35em var(--sah-accent,#5b2ee8),0 0 .8em var(--sah-accent,#5b2ee8)}}
@keyframes sah-ll-shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-.08em)}40%{transform:translateX(.08em)}60%{transform:translateX(-.06em)}80%{transform:translateX(.06em)}}
@keyframes sah-ll-zoom{0%,100%{transform:scale(1)}50%{transform:scale(1.5)}}
@keyframes sah-ll-rainbow{0%,100%{color:hsl(0 90% 60%)}17%{color:hsl(60 90% 55%)}33%{color:hsl(120 80% 50%)}50%{color:hsl(180 85% 50%)}67%{color:hsl(240 90% 65%)}83%{color:hsl(300 85% 60%)}}
@keyframes sah-ll-skew{0%,100%{transform:skewX(0)}25%{transform:skewX(-20deg)}75%{transform:skewX(20deg)}}
@keyframes sah-ll-swing{0%,100%{transform:rotate(0)}25%{transform:rotate(15deg)}75%{transform:rotate(-15deg)}}
@keyframes sah-ll-fade{0%,100%{opacity:1}50%{opacity:.15}}
.sah-ll .sah-letter{animation-duration:var(--sah-lp-dur,1.6s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-delay:calc(var(--i,0)*var(--sah-stagger,90ms))}
.sah-ll-wave .sah-letter{animation-name:sah-ll-wave;animation-duration:var(--sah-lp-dur,1.6s)}
.sah-ll-jump .sah-letter{animation-name:sah-ll-jump;animation-duration:var(--sah-lp-dur,1.6s)}
.sah-ll-bounce .sah-letter{animation-name:sah-ll-bounce;animation-duration:var(--sah-lp-dur,1.8s)}
.sah-ll-color .sah-letter{animation-name:sah-ll-color;animation-duration:var(--sah-lp-dur,1.8s)}
.sah-ll-flip .sah-letter{animation-name:sah-ll-flip;animation-duration:var(--sah-lp-dur,2.4s)}
.sah-ll-rotate .sah-letter{animation-name:sah-ll-rotate;animation-duration:var(--sah-lp-dur,2.4s)}
.sah-ll-blink .sah-letter{animation-name:sah-ll-blink;animation-duration:var(--sah-lp-dur,1.4s)}
.sah-ll-glow .sah-letter{animation-name:sah-ll-glow;animation-duration:var(--sah-lp-dur,1.8s)}
.sah-ll-shake .sah-letter{animation-name:sah-ll-shake;animation-duration:var(--sah-lp-dur,0.5s)}
.sah-ll-zoom .sah-letter{animation-name:sah-ll-zoom;animation-duration:var(--sah-lp-dur,1.6s)}
.sah-ll-rainbow .sah-letter{animation-name:sah-ll-rainbow;animation-duration:var(--sah-lp-dur,3s)}
.sah-ll-skew .sah-letter{animation-name:sah-ll-skew;animation-duration:var(--sah-lp-dur,1.8s)}
.sah-ll-swing .sah-letter{transform-origin:top center;animation-name:sah-ll-swing;animation-duration:var(--sah-lp-dur,2s)}
.sah-ll-fade .sah-letter{animation-name:sah-ll-fade;animation-duration:var(--sah-lp-dur,1.8s)}
/* ===== Typewriter / scramble / rotating words ===== */
.sah-anim-typing,.sah-anim-scramble{white-space:pre-wrap}
.sah-cursor{display:inline-block;width:3px;height:1em;margin-left:3px;animation:sah-blink 0.9s step-end infinite;vertical-align:middle}
@keyframes sah-blink{0%,49%{opacity:1}50%,100%{opacity:0}}
.sah-live-js .sah-anim-scramble:not(.sah-started){visibility:hidden}
.sah-rot{display:inline-grid;vertical-align:bottom;text-align:left}
.sah-rot-item{grid-area:1/1;opacity:0;visibility:hidden;white-space:nowrap}
.sah-rot-item.is-active{opacity:1;visibility:visible;animation:var(--rin,sah-rin-fade) .6s both}
.sah-rot-item.is-leaving{visibility:visible;animation:var(--rout,sah-rout-fade) .6s both}
[data-effect^="slide"] .sah-rot{overflow:hidden}
@keyframes sah-rin-fade{from{opacity:0}}
@keyframes sah-rout-fade{to{opacity:0}}
[data-effect="fade"]{--rin:sah-rin-fade;--rout:sah-rout-fade}
@keyframes sah-rin-slide-up{from{opacity:0;transform:translateY(100%)}}
@keyframes sah-rout-slide-up{to{opacity:0;transform:translateY(-100%)}}
[data-effect="slide-up"]{--rin:sah-rin-slide-up;--rout:sah-rout-slide-up}
@keyframes sah-rin-slide-down{from{opacity:0;transform:translateY(-100%)}}
@keyframes sah-rout-slide-down{to{opacity:0;transform:translateY(100%)}}
[data-effect="slide-down"]{--rin:sah-rin-slide-down;--rout:sah-rout-slide-down}
@keyframes sah-rin-slide-left{from{opacity:0;transform:translateX(60%)}}
@keyframes sah-rout-slide-left{to{opacity:0;transform:translateX(-60%)}}
[data-effect="slide-left"]{--rin:sah-rin-slide-left;--rout:sah-rout-slide-left}
@keyframes sah-rin-slide-right{from{opacity:0;transform:translateX(-60%)}}
@keyframes sah-rout-slide-right{to{opacity:0;transform:translateX(60%)}}
[data-effect="slide-right"]{--rin:sah-rin-slide-right;--rout:sah-rout-slide-right}
@keyframes sah-rin-zoom{from{opacity:0;transform:scale(.4)}}
@keyframes sah-rout-zoom{to{opacity:0;transform:scale(1.6)}}
[data-effect="zoom"]{--rin:sah-rin-zoom;--rout:sah-rout-zoom}
@keyframes sah-rin-flip-x{from{opacity:0;transform:perspective(400px) rotateX(-90deg)}}
@keyframes sah-rout-flip-x{to{opacity:0;transform:perspective(400px) rotateX(90deg)}}
[data-effect="flip-x"]{--rin:sah-rin-flip-x;--rout:sah-rout-flip-x}
@keyframes sah-rin-flip-y{from{opacity:0;transform:perspective(400px) rotateY(-90deg)}}
@keyframes sah-rout-flip-y{to{opacity:0;transform:perspective(400px) rotateY(90deg)}}
[data-effect="flip-y"]{--rin:sah-rin-flip-y;--rout:sah-rout-flip-y}
@keyframes sah-rin-blur{from{opacity:0;filter:blur(10px)}}
@keyframes sah-rout-blur{to{opacity:0;filter:blur(10px)}}
[data-effect="blur"]{--rin:sah-rin-blur;--rout:sah-rout-blur}
@keyframes sah-rin-rotate{from{opacity:0;transform:rotate(-90deg) scale(.5)}}
@keyframes sah-rout-rotate{to{opacity:0;transform:rotate(90deg) scale(.5)}}
[data-effect="rotate"]{--rin:sah-rin-rotate;--rout:sah-rout-rotate}
@keyframes sah-rin-skew{from{opacity:0;transform:translateX(-40%) skewX(30deg)}}
@keyframes sah-rout-skew{to{opacity:0;transform:translateX(40%) skewX(-30deg)}}
[data-effect="skew"]{--rin:sah-rin-skew;--rout:sah-rout-skew}
@keyframes sah-rin-bounce{0%{opacity:0;transform:translateY(-60%)}50%{opacity:1;transform:translateY(8%)}75%{transform:translateY(-4%)}100%{transform:none}}
@keyframes sah-rout-bounce{to{opacity:0;transform:translateY(40%)}}
[data-effect="bounce"]{--rin:sah-rin-bounce;--rout:sah-rout-bounce}
@keyframes sah-rin-drop{0%{opacity:0;transform:translateY(-120%)}60%{opacity:1;transform:translateY(10%)}80%{transform:translateY(-5%)}100%{transform:none}}
@keyframes sah-rout-drop{to{opacity:0;transform:scale(.8)}}
[data-effect="drop"]{--rin:sah-rin-drop;--rout:sah-rout-drop}
/* ===== Hover (Advanced tab) ===== */
[class*="sahx-hv-"]{transition:translate var(--sah-hv-t,.3s) ease,scale var(--sah-hv-t,.3s) ease,rotate var(--sah-hv-t,.3s) ease,filter var(--sah-hv-t,.3s) ease,box-shadow var(--sah-hv-t,.3s) ease,opacity var(--sah-hv-t,.3s) ease,outline-color var(--sah-hv-t,.3s) ease,outline-offset var(--sah-hv-t,.3s) ease,background-color var(--sah-hv-t,.3s) ease}
.sahx-hv-grow:hover{scale:1.08}
.sahx-hv-grow-more:hover{scale:1.2}
.sahx-hv-shrink:hover{scale:.92}
.sahx-hv-rotate-right:hover{rotate:5deg}
.sahx-hv-rotate-left:hover{rotate:-5deg}
.sahx-hv-grow-rotate:hover{scale:1.1;rotate:4deg}
.sahx-hv-float-up:hover{translate:0 -8px}
.sahx-hv-sink:hover{translate:0 6px}
.sahx-hv-move-right:hover{translate:10px 0}
.sahx-hv-move-left:hover{translate:-10px 0}
.sahx-hv-lift:hover{translate:0 -6px;box-shadow:0 14px 28px rgba(0,0,0,.22)}
.sahx-hv-shadow:hover{box-shadow:0 10px 30px rgba(0,0,0,.2)}
.sahx-hv-glow:hover{box-shadow:0 0 26px var(--sah-accent,#5b2ee8)}
.sahx-hv-brighten:hover{filter:brightness(1.15)}
.sahx-hv-darken:hover{filter:brightness(.82)}
.sahx-hv-sepia:hover{filter:sepia(1)}
.sahx-hv-hue:hover{filter:hue-rotate(90deg)}
.sahx-hv-saturate:hover{filter:saturate(1.8)}
.sahx-hv-contrast:hover{filter:contrast(1.3)}
.sahx-hv-invert:hover{filter:invert(1)}
.sahx-hv-fade-in:hover{opacity:1}
.sahx-hv-fade-out:hover{opacity:.6}
.sahx-hv-tint:hover{background-color:color-mix(in srgb,var(--sah-accent,#5b2ee8) 18%,transparent)}
.sahx-hv-outline{outline:2px solid transparent;outline-offset:0}
.sahx-hv-outline:hover{outline-color:var(--sah-accent,#5b2ee8);outline-offset:6px}
.sahx-hv-grayscale{filter:grayscale(1)}.sahx-hv-grayscale:hover{filter:none}
.sahx-hv-gray-out:hover{filter:grayscale(1)}
.sahx-hv-blur-clear{filter:blur(4px)}.sahx-hv-blur-clear:hover{filter:none}
.sahx-hv-blur-in:hover{filter:blur(4px)}
.sahx-hv-fade-in{opacity:.6}
.sahx-hv-a-shake:hover{--sah-a-hv:sah-hv-shake calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-shake:hover{animation:sah-hv-shake var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-shake:hover{animation:sah-hv-shake .9s ease-in-out both}
.sahx-hv-a-wobble:hover{--sah-a-hv:sah-hv-wobble calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-wobble:hover{animation:sah-hv-wobble var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-wobble:hover{animation:sah-hv-wobble .9s ease-in-out both}
.sahx-hv-a-jello:hover{--sah-a-hv:sah-hv-jello calc(var(--sah-hv-t,.3s)*3) ease 1 normal both}
.sai-hover-hv-jello:hover{animation:sah-hv-jello var(--sai-hv-dur,.9s) ease both}
.sab-anim-hv-jello:hover{animation:sah-hv-jello .9s ease both}
.sahx-hv-a-heartbeat:hover{--sah-a-hv:sah-hv-heartbeat calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-heartbeat:hover{animation:sah-hv-heartbeat var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-heartbeat:hover{animation:sah-hv-heartbeat .9s ease-in-out both}
.sahx-hv-a-tada:hover{--sah-a-hv:sah-hv-tada calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-tada:hover{animation:sah-hv-tada var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-tada:hover{animation:sah-hv-tada .9s ease-in-out both}
.sahx-hv-a-swing:hover{--sah-a-hv:sah-hv-swing calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-swing:hover{animation:sah-hv-swing var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-swing:hover{animation:sah-hv-swing .9s ease-in-out both}
.sahx-hv-a-rubber-band:hover{--sah-a-hv:sah-hv-rubber-band calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-rubber-band:hover{animation:sah-hv-rubber-band var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-rubber-band:hover{animation:sah-hv-rubber-band .9s ease-in-out both}
.sahx-hv-a-bounce:hover{--sah-a-hv:sah-hv-bounce calc(var(--sah-hv-t,.3s)*3) ease-out 1 normal both}
.sai-hover-hv-bounce:hover{animation:sah-hv-bounce var(--sai-hv-dur,.9s) ease-out both}
.sab-anim-hv-bounce:hover{animation:sah-hv-bounce .9s ease-out both}
.sahx-hv-a-flip:hover{--sah-a-hv:sah-hv-flip calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-flip:hover{animation:sah-hv-flip var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-flip:hover{animation:sah-hv-flip .9s ease-in-out both}
.sahx-hv-a-pulse:hover{--sah-a-hv:sah-hv-pulse calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-pulse:hover{animation:sah-hv-pulse var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-pulse:hover{animation:sah-hv-pulse .9s ease-in-out both}
.sahx-hv-a-float:hover{--sah-a-hv:sah-hv-float calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-float:hover{animation:sah-hv-float var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-float:hover{animation:sah-hv-float .9s ease-in-out both}
.sahx-hv-a-wiggle:hover{--sah-a-hv:sah-hv-wiggle calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-wiggle:hover{animation:sah-hv-wiggle var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-wiggle:hover{animation:sah-hv-wiggle .9s ease-in-out both}
.sahx-hv-a-spin:hover{--sah-a-hv:sah-hv-spin calc(var(--sah-hv-t,.3s)*3) linear 1 normal both}
.sai-hover-hv-spin:hover{animation:sah-hv-spin var(--sai-hv-dur,.9s) linear both}
.sab-anim-hv-spin:hover{animation:sah-hv-spin .9s linear both}
.sahx-hv-a-flash:hover{--sah-a-hv:sah-hv-flash calc(var(--sah-hv-t,.3s)*3) linear 1 normal both}
.sai-hover-hv-flash:hover{animation:sah-hv-flash var(--sai-hv-dur,.9s) linear both}
.sab-anim-hv-flash:hover{animation:sah-hv-flash .9s linear both}
.sahx-hv-a-jitter:hover{--sah-a-hv:sah-hv-jitter calc(var(--sah-hv-t,.3s)*3) linear 1 normal both}
.sai-hover-hv-jitter:hover{animation:sah-hv-jitter var(--sai-hv-dur,.9s) linear both}
.sab-anim-hv-jitter:hover{animation:sah-hv-jitter .9s linear both}
.sahx-hv-a-tilt:hover{--sah-a-hv:sah-hv-tilt calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-tilt:hover{animation:sah-hv-tilt var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-tilt:hover{animation:sah-hv-tilt .9s ease-in-out both}
.sahx-hv-a-zigzag:hover{--sah-a-hv:sah-hv-zigzag calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-zigzag:hover{animation:sah-hv-zigzag var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-zigzag:hover{animation:sah-hv-zigzag .9s ease-in-out both}
.sahx-hv-a-breathe:hover{--sah-a-hv:sah-hv-breathe calc(var(--sah-hv-t,.3s)*3) ease-in-out 1 normal both}
.sai-hover-hv-breathe:hover{animation:sah-hv-breathe var(--sai-hv-dur,.9s) ease-in-out both}
.sab-anim-hv-breathe:hover{animation:sah-hv-breathe .9s ease-in-out both}
/* ===== Scroll & mouse helpers (values written by widget.js) ===== */
.sah-glare{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;opacity:0;z-index:6;border-radius:inherit;background:radial-gradient(circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,.5),rgba(255,255,255,0) 55%);transition:opacity .3s ease}
.sahx-ms-glare:hover>.sah-glare,.sah-glare.on{opacity:1}
.sahx-ms-glare{position:relative}

/* ==================== Animated Button ==================== */
.sab-l1,.sab-l2{display:inline-block;max-width:100%}
.sab-wrap .sab-button{
  display:inline-flex;align-items:center;justify-content:center;position:relative;overflow:hidden;isolation:isolate;
  padding:14px 32px;text-decoration:none;font-weight:700;
  background-color:var(--sab-bg,#5b2ee8);color:var(--sab-text,#fff);
  transition:transform .25s ease,box-shadow .25s ease,background-color .25s ease,color .25s ease,outline-offset .3s ease,outline-color .3s ease,background-position .45s ease;
}
.sab-wrap .sab-button:hover,.sab-wrap .sab-button:focus{color:var(--sab-hover-text,var(--sab-text,#fff))}
.sab-wrap .sab-button:active{transform:scale(.97)}
.sab-label{position:relative;z-index:2;display:inline-block}
.sab-shine{position:absolute;top:0;left:-60%;width:40%;height:100%;z-index:1;background:linear-gradient(120deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-20deg);pointer-events:none}
.sab-anim-shine:hover .sab-shine{animation:sab-shine-sweep .9s ease}
.sab-anim-shimmer-loop .sab-shine{animation:sab-shine-sweep 2.4s ease-in-out infinite}
@keyframes sab-shine-sweep{0%{left:-60%}100%{left:130%}}

/* legacy */
.sab-anim-shine:hover,.sab-anim-pulse:hover,.sab-anim-bounce:hover,.sab-anim-gradient-bg:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(0,0,0,.18)}
.sab-anim-pulse{animation:sab-pulse 1.8s ease-in-out infinite}
@keyframes sab-pulse{
  0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--sab-bg,#5b2ee8) 55%,transparent)}
  50%{box-shadow:0 0 0 14px color-mix(in srgb,var(--sab-bg,#5b2ee8) 0%,transparent)}
}
.sab-anim-bounce:hover{animation:sab-bounce-hover .5s ease}
@keyframes sab-bounce-hover{0%,100%{transform:translateY(0)}30%{transform:translateY(-8px)}60%{transform:translateY(0)}80%{transform:translateY(-3px)}}
.sab-anim-gradient-bg{background-image:linear-gradient(90deg,var(--sab-grad-1,#5b2ee8),var(--sab-grad-2,#00b8a9),var(--sab-grad-1,#5b2ee8));background-size:250% 100%;animation:sab-gradient-move 4s linear infinite}
@keyframes sab-gradient-move{0%{background-position:0% 50%}100%{background-position:250% 50%}}

/* fills */
[class*="sab-anim-fill-"]::before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:var(--sab-fill,#00b8a9);transition:transform .45s cubic-bezier(.22,1,.36,1),clip-path .45s cubic-bezier(.22,1,.36,1);pointer-events:none}
.sab-anim-fill-left::before{transform:translateX(-101%)}
.sab-anim-fill-right::before{transform:translateX(101%)}
.sab-anim-fill-up::before{transform:translateY(101%)}
.sab-anim-fill-down::before{transform:translateY(-101%)}
.sab-anim-fill-center::before{transform:scaleX(0)}
.sab-anim-fill-circle::before{clip-path:circle(0% at 50% 50%)}
.sab-anim-fill-diagonal::before{left:-30px;width:calc(100% + 60px);transform:translateX(-110%) skewX(-25deg)}
[class*="sab-anim-fill-"]:hover::before,[class*="sab-anim-fill-"]:focus::before{transform:none}
.sab-anim-fill-circle:hover::before{clip-path:circle(75% at 50% 50%)}
.sab-anim-fill-diagonal:hover::before{transform:translateX(0) skewX(-25deg)}

/* borders / lines */
.sab-anim-border-grow{outline:2px solid transparent;outline-offset:0}
.sab-anim-border-grow:hover{outline-color:var(--sah-accent,#00b8a9);outline-offset:6px}
.sab-anim-double-border:hover{box-shadow:0 0 0 3px var(--sab-bg,#5b2ee8),0 0 0 5px var(--sah-accent,#00b8a9)}
.sab-anim-corners::before,.sab-anim-corners::after{content:"";position:absolute;z-index:3;width:0;height:0;opacity:0;pointer-events:none;transition:width .3s ease,height .3s ease,opacity .2s ease}
.sab-anim-corners::before{top:0;left:0;border-top:2px solid var(--sah-accent,#00b8a9);border-left:2px solid var(--sah-accent,#00b8a9)}
.sab-anim-corners::after{bottom:0;right:0;border-bottom:2px solid var(--sah-accent,#00b8a9);border-right:2px solid var(--sah-accent,#00b8a9)}
.sab-anim-corners:hover::before,.sab-anim-corners:hover::after{width:45%;height:65%;opacity:1}
.sab-anim-underline .sab-label::after{content:"";position:absolute;left:0;bottom:-3px;width:100%;height:2px;background:currentColor;transform:scaleX(0);transform-origin:right center;transition:transform .35s ease}
.sab-anim-underline:hover .sab-label::after{transform:scaleX(1);transform-origin:left center}

/* motion */
.sab-anim-grow:hover{transform:scale(1.08)}
.sab-anim-shrink:hover{transform:scale(.94)}
.sab-anim-lift:hover{transform:translateY(-5px);box-shadow:0 12px 24px rgba(0,0,0,.22)}
.sab-anim-press:hover{transform:scale(.95)}
.sab-anim-rotate:hover{transform:rotate(-3deg) scale(1.04)}
.sab-anim-skew:hover{transform:skewX(-10deg)}

/* glow / shadow */
.sab-anim-glow:hover{box-shadow:0 0 22px var(--sah-accent,#00b8a9)}
.sab-anim-neon:hover{box-shadow:0 0 6px var(--sah-accent,#00b8a9),0 0 18px var(--sah-accent,#00b8a9),0 0 36px var(--sah-accent,#00b8a9);text-shadow:0 0 8px currentColor}
.sab-anim-shadow-grow:hover{box-shadow:0 14px 28px rgba(0,0,0,.28);transform:translateY(-3px)}
.sab-anim-retro{box-shadow:5px 5px 0 var(--sah-accent,#00b8a9)}
.sab-anim-retro:hover{box-shadow:0 0 0 var(--sah-accent,#00b8a9);transform:translate(5px,5px)}

/* continuous */
.sab-anim-pulse-ring{animation:sab-ring 2s ease-out infinite}
@keyframes sab-ring{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--sah-accent,#00b8a9) 60%,transparent),0 0 0 0 color-mix(in srgb,var(--sah-accent,#00b8a9) 35%,transparent)}
  100%{box-shadow:0 0 0 14px color-mix(in srgb,var(--sah-accent,#00b8a9) 0%,transparent),0 0 0 28px color-mix(in srgb,var(--sah-accent,#00b8a9) 0%,transparent)}
}
.sab-anim-glow-pulse{animation:sab-glow-pulse 2s ease-in-out infinite}
@keyframes sab-glow-pulse{0%,100%{box-shadow:0 0 6px var(--sah-accent,#00b8a9)}50%{box-shadow:0 0 26px var(--sah-accent,#00b8a9),0 0 44px var(--sah-accent,#00b8a9)}}
@property --sab-ang{syntax:"<angle>";initial-value:0deg;inherits:false}
.sab-anim-border-run{border:2px solid transparent;background:linear-gradient(var(--sab-bg,#5b2ee8),var(--sab-bg,#5b2ee8)) padding-box,conic-gradient(from var(--sab-ang),transparent 0 55%,var(--sah-accent,#00b8a9)) border-box;animation:sab-ang 3s linear infinite}
@keyframes sab-ang{to{--sab-ang:360deg}}

/* gradient that slides on hover */
.sab-anim-gradient-shift{background-image:linear-gradient(90deg,var(--sab-bg,#5b2ee8) 0%,var(--sab-bg,#5b2ee8) 50%,var(--sah-accent,#00b8a9) 50%,var(--sah-accent,#00b8a9) 100%);background-size:200% 100%;background-position:0 0}
.sab-anim-gradient-shift:hover{background-position:-100% 0}

/* text effects */
.sab-anim-text-spread .sab-label{transition:letter-spacing .35s ease}
.sab-anim-text-spread:hover .sab-label{letter-spacing:.14em}
.sab-anim-arrow .sab-label::after{content:"\2192";display:inline-block;width:0;margin-left:0;opacity:0;overflow:hidden;vertical-align:bottom;transform:translateX(-8px);transition:width .3s ease,margin-left .3s ease,opacity .3s ease,transform .3s ease}
.sab-anim-arrow:hover .sab-label::after{width:1em;margin-left:8px;opacity:1;transform:none}
.sab-anim-text-slide .sab-label{overflow:hidden}
.sab-anim-text-slide .sab-label-in{display:block}
.sab-label-in{display:inline-block;position:relative;transition:transform .35s cubic-bezier(.22,1,.36,1)}
.sab-anim-text-slide .sab-label-in::after{content:attr(data-label);position:absolute;left:0;top:100%;width:100%;text-align:center}
.sab-anim-text-slide:hover .sab-label-in{transform:translateY(-100%)}

/* click ripple */
.sab-ripple{position:absolute;z-index:1;border-radius:50%;background:rgba(255,255,255,.45);transform:scale(0);animation:sab-ripple .65s ease-out forwards;pointer-events:none}
@keyframes sab-ripple{to{transform:scale(1);opacity:0}}

/* ==================== Animated Counter ==================== */
.sac-wrap{padding:10px}
.sac-l1{display:inline-block;max-width:100%}
.sac-number{font-size:42px;font-weight:800;line-height:1}
.sac-label{margin-top:8px;font-size:15px;font-weight:600}
.sac-pop{display:inline-block;position:relative}
.sac-num-inner{display:inline-block;white-space:nowrap}
.sac-ch{display:inline-block;white-space:pre}
.sac-ch.sac-off{visibility:hidden}
.sac-fx-fade .sac-ch.on{animation:sac-fade .55s ease both}
.sac-fx-drop .sac-ch.on{animation:sac-drop .65s cubic-bezier(.34,1.56,.64,1) both}
@keyframes sac-fade{from{opacity:0}to{opacity:1}}
@keyframes sac-drop{from{opacity:0;transform:translateY(-1.1em)}to{opacity:1;transform:none}}
.sac-od{display:inline-block;height:1.2em;line-height:1.2;overflow:hidden;vertical-align:top;position:relative}
.sac-od-strip{display:flex;flex-direction:column;will-change:transform}
.sac-od-strip span{display:block;height:1.2em;line-height:1.2}
.sac-sep{display:inline-block;line-height:1.2;white-space:pre}
.sac-done-pop{animation:sac-pop .55s cubic-bezier(.34,1.56,.64,1)}
@keyframes sac-pop{0%{transform:scale(1)}45%{transform:scale(1.28)}100%{transform:scale(1)}}
.sac-done-pulse{animation:sah-hv-pulse .8s ease-in-out}
.sac-done-bounce{animation:sah-hv-bounce .9s ease-out;transform-origin:center bottom}
.sac-done-tada{animation:sah-hv-tada .9s ease-in-out}
.sac-done-heartbeat{animation:sah-hv-heartbeat .9s ease-in-out}
.sac-done-rubber-band{animation:sah-hv-rubber-band .9s ease-in-out}
.sac-done-jello{animation:sah-hv-jello .9s ease}
.sac-done-shake{animation:sah-hv-shake .7s ease-in-out}
.sac-done-wobble{animation:sah-hv-wobble .9s ease-in-out}
.sac-done-swing{animation:sah-hv-swing .9s ease-in-out;transform-origin:top center}
.sac-done-flash{animation:sah-hv-flash .9s linear}
.sac-done-spin{animation:sah-hv-spin .8s ease-in-out}
.sac-done-flip{animation:sah-hv-flip .9s ease-in-out}
.sac-spark{position:absolute;left:50%;top:50%;width:7px;height:7px;margin:-3px 0 0 -3px;border-radius:50%;background:var(--sah-accent,#00b8a9);pointer-events:none;animation:sac-spark .85s ease-out forwards}
@keyframes sac-spark{from{transform:translate(0,0) scale(1);opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(0);opacity:0}}

/* ==================== Animated Image ==================== */
.sai-l1,.sai-l2{display:inline-block;max-width:100%}
.sai-img{display:inline-block;overflow:hidden;position:relative;max-width:100%;transition:transform var(--sai-t,.4s) ease,box-shadow var(--sai-t,.4s) ease,outline-color var(--sai-t,.4s) ease,outline-offset var(--sai-t,.4s) ease}
.sai-img img{display:block;width:100%;height:auto;transition:transform var(--sai-t,.4s) ease,filter var(--sai-t,.4s) ease}
.sai-hover-zoom:hover img{transform:scale(1.1)}
.sai-hover-zoom-out img{transform:scale(1.2)}
.sai-hover-zoom-out:hover img{transform:scale(1)}
.sai-hover-grayscale img{filter:grayscale(100%)}
.sai-hover-grayscale:hover img{filter:grayscale(0%)}
.sai-hover-gray-out:hover img{filter:grayscale(100%)}
.sai-hover-tilt:hover img{transform:rotate(-2deg) scale(1.06)}
.sai-hover-rotate-zoom:hover img{transform:rotate(5deg) scale(1.2)}
.sai-hover-blur-clear img{filter:blur(5px)}
.sai-hover-blur-clear:hover img{filter:blur(0)}
.sai-hover-blur-in:hover img{filter:blur(5px)}
.sai-hover-brighten:hover img{filter:brightness(1.22)}
.sai-hover-darken:hover img{filter:brightness(.7)}
.sai-hover-sepia:hover img{filter:sepia(1)}
.sai-hover-saturate:hover img{filter:saturate(1.9)}
.sai-hover-contrast:hover img{filter:contrast(1.4)}
.sai-hover-hue:hover img{filter:hue-rotate(90deg)}
.sai-hover-invert:hover img{filter:invert(1)}
.sai-hover-pan-up img{transform:scale(1.25) translateY(7%)}
.sai-hover-pan-up:hover img{transform:scale(1.25) translateY(-7%)}
.sai-hover-pan-left img{transform:scale(1.25) translateX(7%)}
.sai-hover-pan-left:hover img{transform:scale(1.25) translateX(-7%)}
.sai-hover-pan-right img{transform:scale(1.25) translateX(-7%)}
.sai-hover-pan-right:hover img{transform:scale(1.25) translateX(7%)}
.sai-hover-ken-burns img{transition-duration:calc(var(--sai-t,.4s)*10);transition-timing-function:linear}
.sai-hover-ken-burns:hover img{transform:scale(1.3) translate(-3%,-2%)}
.sai-hover-skew:hover{transform:skewX(-4deg) scale(1.03)}
.sai-hover-lift:hover{transform:translateY(-8px);box-shadow:0 18px 30px rgba(0,0,0,.25)}
.sai-hover-glow:hover{box-shadow:0 0 28px var(--sah-accent,#5b2ee8)}
.sai-hover-shadow:hover{box-shadow:0 14px 34px rgba(0,0,0,.32)}
.sai-hover-outline{outline:2px solid transparent;outline-offset:0}
.sai-hover-outline:hover{outline-color:var(--sah-accent,#5b2ee8);outline-offset:6px}
[class*="sai-hover-inset-border"]::after,[class*="sai-hover-vignette"]::after,[class*="sai-hover-shine"]::after,[class*="sai-hover-overlay-"]::after{content:"";position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;border-radius:inherit}
.sai-hover-inset-border::after{box-shadow:inset 0 0 0 0 var(--sah-accent,#fff);transition:box-shadow var(--sai-t,.4s) ease}
.sai-hover-inset-border:hover::after{box-shadow:inset 0 0 0 10px var(--sah-accent,#fff)}
.sai-hover-vignette::after{background:radial-gradient(circle,transparent 45%,rgba(0,0,0,.7));opacity:0;transition:opacity var(--sai-t,.4s) ease}
.sai-hover-vignette:hover::after{opacity:1}
.sai-hover-shine::after{background:linear-gradient(120deg,transparent 30%,rgba(255,255,255,.6) 50%,transparent 70%);transform:translateX(-120%)}
.sai-hover-shine:hover::after{transform:translateX(120%);transition:transform calc(var(--sai-t,.4s)*2) ease}
.sai-hover-overlay-fade::after{background:var(--sai-overlay,rgba(91,46,232,.55));opacity:0;transition:opacity var(--sai-t,.4s) ease}
.sai-hover-overlay-fade:hover::after{opacity:1}
.sai-hover-overlay-up::after{background:var(--sai-overlay,rgba(91,46,232,.55));transform:translateY(101%);transition:transform var(--sai-t,.4s) ease}
.sai-hover-overlay-up:hover::after{transform:none}
.sai-hover-overlay-circle::after{background:var(--sai-overlay,rgba(91,46,232,.55));clip-path:circle(0% at 50% 50%);transition:clip-path var(--sai-t,.5s) ease}
.sai-hover-overlay-circle:hover::after{clip-path:circle(75% at 50% 50%)}
/* continuous (frame level) */
.sai-lp-morph{animation:sai-morph var(--sah-lp-dur,8s) ease-in-out infinite}
@keyframes sai-morph{0%,100%{border-radius:60% 40% 30% 70%/60% 30% 70% 40%}50%{border-radius:30% 60% 70% 40%/50% 60% 30% 60%}}
.sai-lp-kenburns img{animation:sai-kb var(--sah-lp-dur,14s) ease-in-out infinite alternate}
@keyframes sai-kb{from{transform:scale(1) translate(0,0)}to{transform:scale(1.22) translate(-3%,-2%)}}
.sai-lp-shine::before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;z-index:2;pointer-events:none;background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,.55) 50%,transparent 65%);transform:translateX(-120%);animation:sai-shine var(--sah-lp-dur,3s) ease-in-out infinite}
@keyframes sai-shine{0%{transform:translateX(-120%)}60%,100%{transform:translateX(120%)}}
.sai-lp-ring{animation:sai-ring var(--sah-lp-dur,2.2s) ease-out infinite}
@keyframes sai-ring{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--sah-accent,#5b2ee8) 60%,transparent)}100%{box-shadow:0 0 0 24px color-mix(in srgb,var(--sah-accent,#5b2ee8) 0%,transparent)}}
.sai-lp-sway3d{animation:sai-sway var(--sah-lp-dur,6s) ease-in-out infinite}
@keyframes sai-sway{0%,100%{transform:perspective(900px) rotateY(-12deg) rotateX(4deg)}50%{transform:perspective(900px) rotateY(12deg) rotateX(-4deg)}}
.sai-ms-zoom{cursor:zoom-in}

/* ==================== Image Marquee ==================== */
.sim-wrap{--sim-gap:60px;--sim-rowgap:20px;position:relative;width:100%;overflow:hidden;display:flex;flex-direction:column;gap:var(--sim-rowgap)}
.sim-scroller{display:flex;width:100%;overflow:hidden}
.sim-track{display:flex;align-items:center;flex-shrink:0;min-width:100%;gap:var(--sim-gap);padding-right:var(--sim-gap);animation-name:sim-scroll-x;animation-timing-function:linear;animation-iteration-count:infinite}
@keyframes sim-scroll-x{from{transform:translateX(0)}to{transform:translateX(-100%)}}
@keyframes sim-scroll-y{from{transform:translateY(0)}to{transform:translateY(-100%)}}
.sim-vertical{flex-direction:row;gap:var(--sim-rowgap)}
.sim-vertical .sim-scroller{flex-direction:column;flex:1 1 0;min-width:0;width:auto;height:360px}
.sim-vertical .sim-track{flex-direction:column;min-width:0;min-height:100%;padding-right:0;padding-bottom:var(--sim-gap);animation-name:sim-scroll-y}
.sim-pause-hover:hover .sim-track{animation-play-state:paused}
.sim-item{display:inline-flex;align-items:center;flex-shrink:0;transition:opacity .35s ease,filter .35s ease}
.sim-card{display:inline-flex;align-items:center;justify-content:center}
.sim-card.sah-lp{display:inline-flex;animation-delay:calc(var(--i,0)*-.43s)}
.sim-item img{display:block;object-fit:contain;transition:filter .3s ease,transform .3s ease,opacity .3s ease}
.sim-grayscale .sim-item img{filter:grayscale(100%);opacity:.75}
.sim-grayscale .sim-item:hover img{filter:grayscale(0%);opacity:1}
.sim-fade-edges::before,.sim-fade-edges::after{content:'';position:absolute;z-index:2;pointer-events:none}
.sim-fade-edges:not(.sim-vertical)::before,.sim-fade-edges:not(.sim-vertical)::after{top:0;bottom:0;width:80px}
.sim-fade-edges:not(.sim-vertical)::before{left:0;background:linear-gradient(90deg,var(--sim-fade-color,#fff),transparent)}
.sim-fade-edges:not(.sim-vertical)::after{right:0;background:linear-gradient(-90deg,var(--sim-fade-color,#fff),transparent)}
.sim-fade-edges.sim-vertical::before,.sim-fade-edges.sim-vertical::after{left:0;right:0;height:70px}
.sim-fade-edges.sim-vertical::before{top:0;background:linear-gradient(180deg,var(--sim-fade-color,#fff),transparent)}
.sim-fade-edges.sim-vertical::after{bottom:0;background:linear-gradient(0deg,var(--sim-fade-color,#fff),transparent)}
/* per-image hover */
.sim-ih-zoom .sim-item:hover img{transform:scale(1.08)}
.sim-ih-zoom-big .sim-item:hover img{transform:scale(1.28)}
.sim-ih-lift .sim-item:hover img{transform:translateY(-8px)}
.sim-ih-rotate .sim-item:hover img{transform:rotate(8deg) scale(1.08)}
.sim-ih-tilt .sim-item:hover img{transform:rotate(-5deg) scale(1.05)}
.sim-ih-pop .sim-item:hover img{transform:scale(1.14);filter:drop-shadow(0 12px 14px rgba(0,0,0,.28))}
.sim-ih-glow .sim-item:hover img{filter:drop-shadow(0 0 12px var(--sah-accent,#5b2ee8))}
.sim-ih-focus:hover .sim-item:not(:hover){opacity:.3}
.sim-ih-blur-others:hover .sim-item:not(:hover){opacity:.55;filter:blur(3px)}
.sim-ih-jello .sim-item:hover img{animation:sah-hv-jello .9s both}
.sim-ih-wobble .sim-item:hover img{animation:sah-hv-wobble .9s both}
.sim-ih-tada .sim-item:hover img{animation:sah-hv-tada .9s both}
.sim-ih-rubber-band .sim-item:hover img{animation:sah-hv-rubber-band .9s both}
.sim-ih-bounce .sim-item:hover img{animation:sah-hv-bounce .9s both}
.sim-ih-swing .sim-item:hover img{animation:sah-hv-swing .9s both;transform-origin:top center}

/* ==================== Accessibility ==================== */
@media (prefers-reduced-motion:reduce){
  .sah-lp,[class*="sahx-lp-"],[class*="sahx-in-"],[class*="sahx-hv-a-"],.sah-ll .sah-letter,.sah-reveal .sah-u,
  .sai-lp-morph,.sai-lp-kenburns img,.sai-lp-shine::before,.sai-lp-ring,.sai-lp-sway3d,
  .sab-anim-pulse,.sab-anim-pulse-ring,.sab-anim-glow-pulse,.sab-anim-border-run,.sab-anim-gradient-bg{animation:none!important}
  .sah-live-js .sah-reveal .sah-u,.sah-live-js [class*="sahx-in-"]{opacity:1!important}
  .sah-live-js .sah-anim-scramble{visibility:visible!important}
}
