[data-fx] {
  --fx: var(--r);
  --fx-soft: color-mix(in oklab, var(--r) 45%, transparent);
  --fx-hot: color-mix(in oklab, var(--r) 55%, #fff);
}

.lm-card[data-fx],
.lm-sale[data-fx],
.lm-cmp__rank[data-fx],
.lm-upg__side[data-fx] {
  overflow: clip;
  overflow-clip-margin: 16px;
}

[data-fx] .lm-rframe-sheen {
  display: block;
  position: absolute;
  inset: -14px;
  z-index: 5;
  border-radius: calc(var(--lm-r) + 14px);
  pointer-events: none;
  overflow: visible;
  mask: none;
  -webkit-mask: none;
}
[data-fx] .lm-rframe-sheen::before,
[data-fx] .lm-rframe-sheen::after {
  content: "";
  position: absolute;
  inset: 14px;
  border-radius: var(--lm-r);
  pointer-events: none;
}

[data-fx="blackhole"] .lm-rframe-sheen::before {
  background:
    conic-gradient(from 0deg, transparent, var(--fx-soft) 22%, var(--fx-hot) 30%, transparent 46%, transparent),
    radial-gradient(closest-side at 50% 46%, var(--lm-ink) 26%, transparent 27%);
  mask: radial-gradient(closest-side at 50% 46%, transparent 24%, #000 26%, #000 60%, transparent 72%);
  animation: fx-spin 3.4s linear infinite;
}
[data-fx="blackhole"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side at 50% 46%, transparent 52%, color-mix(in oklab, var(--fx) 30%, transparent) 60%, transparent 74%);
  animation: fx-suck 2.6s var(--lm-ease-in-out) infinite;
}

[data-fx="singularity"] .lm-rframe-sheen::before {
  background:
    radial-gradient(circle at 50% 50%, var(--fx-hot) 0 1px, transparent 2px) 0 0 / 26px 26px repeat,
    radial-gradient(circle at 50% 50%, var(--fx-soft) 0 1px, transparent 2px) 9px 13px / 34px 34px repeat;
  mask: radial-gradient(closest-side at 50% 50%, transparent 18%, #000 62%, transparent 100%);
  animation: fx-implode 4.4s var(--lm-ease-in-out) infinite;
}
[data-fx="singularity"] .lm-rframe-sheen::after {
  inset: 40%;
  border-radius: 50%;
  background: radial-gradient(closest-side, var(--fx-hot), transparent 70%);
  animation: fx-pulse 4.4s var(--lm-ease-in-out) infinite;
}

[data-fx="universe"] .lm-rframe-sheen::before {
  background:
    radial-gradient(circle at 50% 50%, #fff 0 0.7px, transparent 1.4px) 0 0 / 17px 19px repeat,
    radial-gradient(circle at 50% 50%, var(--fx-hot) 0 0.9px, transparent 1.8px) 7px 11px / 23px 29px repeat,
    radial-gradient(circle at 50% 50%, var(--fx-soft) 0 1.2px, transparent 2.4px) 13px 5px / 37px 41px repeat,
    radial-gradient(circle at 50% 50%, #fff 0 0.6px, transparent 1.2px) 3px 17px / 13px 11px repeat;
  animation: fx-twinkle 3.8s steps(2, end) infinite, fx-drift 26s linear infinite;
}
[data-fx="universe"] .lm-rframe-sheen::after {
  inset: -4px 14px;
  background:
    radial-gradient(60% 40% at 22% 30%, color-mix(in oklab, var(--fx) 26%, transparent), transparent 70%),
    radial-gradient(50% 35% at 78% 70%, color-mix(in oklab, var(--fx-hot) 20%, transparent), transparent 72%);
  filter: blur(8px);
  animation: fx-breathe 9s var(--lm-ease-in-out) infinite;
}

[data-fx="nebula"] .lm-rframe-sheen::before {
  background:
    radial-gradient(45% 55% at 28% 34%, color-mix(in oklab, var(--fx) 55%, transparent), transparent 70%),
    radial-gradient(40% 50% at 72% 62%, color-mix(in oklab, var(--fx-hot) 40%, transparent), transparent 72%),
    radial-gradient(60% 40% at 50% 88%, color-mix(in oklab, var(--fx) 30%, transparent), transparent 76%);
  filter: blur(12px);
  animation: fx-churn 14s var(--lm-ease-in-out) infinite;
}
[data-fx="nebula"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 50%, #fff 0 0.8px, transparent 1.6px) 0 0 / 29px 31px repeat;
  opacity: 0.7;
  animation: fx-twinkle 5s steps(2, end) infinite;
}

[data-fx="starfield"] .lm-rframe-sheen::before {
  background:
    radial-gradient(circle at 50% 50%, #fff 0 1px, transparent 2px) 0 0 / 21px 23px repeat,
    radial-gradient(circle at 50% 50%, var(--fx-hot) 0 1.3px, transparent 2.6px) 11px 7px / 33px 37px repeat;
  animation: fx-twinkle 2.6s steps(2, end) infinite;
}
[data-fx="starfield"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 50%, var(--fx-soft) 0 2px, transparent 3px) 5px 15px / 61px 67px repeat;
  animation: fx-rise 11s linear infinite;
}

[data-fx="constellation"] .lm-rframe-sheen::before {
  background:
    linear-gradient(66deg, transparent 48.6%, var(--fx-soft) 49.4%, transparent 50.2%),
    linear-gradient(-38deg, transparent 61.6%, var(--fx-soft) 62.3%, transparent 63%),
    linear-gradient(14deg, transparent 33.6%, var(--fx-soft) 34.3%, transparent 35%);
  animation: fx-breathe 5.5s var(--lm-ease-in-out) infinite;
}
[data-fx="constellation"] .lm-rframe-sheen::after {
  background:
    radial-gradient(circle at 22% 26%, var(--fx-hot) 0 2px, transparent 3px),
    radial-gradient(circle at 64% 38%, #fff 0 2.4px, transparent 3.4px),
    radial-gradient(circle at 41% 71%, var(--fx-hot) 0 1.8px, transparent 2.8px),
    radial-gradient(circle at 82% 78%, #fff 0 2px, transparent 3px);
  animation: fx-twinkle 3.2s steps(2, end) infinite;
}

[data-fx="galaxy"] .lm-rframe-sheen::before,
[data-fx="vortex"] .lm-rframe-sheen::before {
  background: conic-gradient(from 0deg,
    transparent 0deg, var(--fx-soft) 40deg, transparent 90deg,
    transparent 180deg, var(--fx-soft) 220deg, transparent 270deg);
  mask: radial-gradient(closest-side, transparent 14%, #000 46%, transparent 88%);
  filter: blur(2px);
  animation: fx-spin 9s linear infinite;
}
[data-fx="galaxy"] .lm-rframe-sheen::after,
[data-fx="vortex"] .lm-rframe-sheen::after {
  background: conic-gradient(from 180deg, transparent, var(--fx-hot) 30deg, transparent 70deg, transparent 360deg);
  mask: radial-gradient(closest-side, transparent 34%, #000 60%, transparent 78%);
  opacity: 0.55;
  animation: fx-spin 5.5s linear infinite reverse;
}

[data-fx="supernova"] .lm-rframe-sheen::before {
  background: radial-gradient(closest-side, var(--fx-hot) 0%, color-mix(in oklab, var(--fx) 40%, transparent) 40%, transparent 68%);
  animation: fx-shock 2.8s var(--lm-ease) infinite;
}
[data-fx="supernova"] .lm-rframe-sheen::after {
  background:
    conic-gradient(from 0deg, transparent 0 8deg, var(--fx-hot) 9deg 10deg, transparent 11deg 30deg,
      var(--fx-soft) 31deg 32deg, transparent 33deg 60deg, var(--fx-hot) 61deg 62deg, transparent 63deg 90deg);
  mask: radial-gradient(closest-side, #000 10%, transparent 70%);
  animation: fx-shock 2.8s var(--lm-ease) infinite 0.15s;
}

[data-fx="quasar"] .lm-rframe-sheen::before {
  background: linear-gradient(90deg, transparent 44%, var(--fx-hot) 50%, transparent 56%);
  filter: blur(3px);
  animation: fx-beam 3.2s var(--lm-ease-in-out) infinite;
}
[data-fx="quasar"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side at 50% 50%, var(--fx-hot) 6%, var(--fx-soft) 22%, transparent 46%);
  animation: fx-pulse 3.2s var(--lm-ease-in-out) infinite;
}

[data-fx="comet"] .lm-rframe-sheen::before {
  inset: auto;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: radial-gradient(closest-side, #fff, var(--fx-hot) 45%, transparent 70%);
  offset-path: inset(14px round var(--lm-r));
  offset-distance: 0%;
  animation: fx-orbit 4.6s linear infinite;
}
[data-fx="comet"] .lm-rframe-sheen::after {
  padding: 2px;
  background: conic-gradient(from 0deg, var(--fx-hot), transparent 24deg, transparent 360deg);
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  animation: fx-spin 4.6s linear infinite;
}

[data-fx="meteor"] .lm-rframe-sheen::before {
  background:
    linear-gradient(58deg, transparent 0 42%, var(--fx-hot) 43% 44%, transparent 45% 100%),
    linear-gradient(58deg, transparent 0 68%, var(--fx-soft) 69% 70.5%, transparent 71% 100%),
    linear-gradient(58deg, transparent 0 18%, var(--fx-soft) 19% 20%, transparent 21% 100%);
  background-size: 180% 180%;
  animation: fx-streak 2.2s linear infinite;
}
[data-fx="meteor"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 50%, var(--fx-hot) 0 1.4px, transparent 2.4px) 0 0 / 43px 47px repeat;
  opacity: 0.6;
  animation: fx-streak 3.4s linear infinite;
}

[data-fx="stardust"] .lm-rframe-sheen::before {
  background:
    radial-gradient(circle at 50% 50%, var(--fx-hot) 0 1.6px, transparent 2.6px) 0 0 / 27px 31px repeat,
    radial-gradient(circle at 50% 50%, #fff 0 1px, transparent 2px) 13px 9px / 19px 23px repeat;
  animation: fx-rise 6.5s linear infinite;
}
[data-fx="stardust"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 50%, var(--fx-soft) 0 2.2px, transparent 3.4px) 7px 3px / 53px 59px repeat;
  opacity: 0.7;
  animation: fx-rise 9.5s linear infinite;
}

[data-fx="aurora"] .lm-rframe-sheen::before {
  background: linear-gradient(96deg,
    transparent 6%, color-mix(in oklab, var(--fx) 55%, transparent) 24%,
    var(--fx-hot) 38%, color-mix(in oklab, var(--fx) 40%, transparent) 54%, transparent 74%);
  background-size: 240% 100%;
  mask: linear-gradient(180deg, #000, transparent 62%);
  filter: blur(7px);
  animation: fx-wave 7.5s var(--lm-ease-in-out) infinite;
}
[data-fx="aurora"] .lm-rframe-sheen::after {
  background: linear-gradient(-84deg, transparent 20%, color-mix(in oklab, var(--fx-hot) 35%, transparent) 46%, transparent 72%);
  background-size: 200% 100%;
  mask: linear-gradient(0deg, #000, transparent 58%);
  filter: blur(9px);
  animation: fx-wave 11s var(--lm-ease-in-out) infinite reverse;
}

[data-fx="fog"] .lm-rframe-sheen::before,
[data-fx="smoke"] .lm-rframe-sheen::before {
  background:
    radial-gradient(50% 40% at 24% 78%, color-mix(in oklab, var(--fx) 40%, transparent), transparent 72%),
    radial-gradient(46% 36% at 68% 84%, color-mix(in oklab, var(--fx-hot) 30%, transparent), transparent 74%);
  filter: blur(11px);
  animation: fx-churn 9s var(--lm-ease-in-out) infinite;
}
[data-fx="fog"] .lm-rframe-sheen::after,
[data-fx="smoke"] .lm-rframe-sheen::after {
  background: radial-gradient(40% 60% at 50% 100%, color-mix(in oklab, var(--fx) 34%, transparent), transparent 78%);
  filter: blur(14px);
  animation: fx-rise 8s linear infinite;
}

[data-fx="fire"] .lm-rframe-sheen::before {
  background:
    radial-gradient(38% 46% at 22% 96%, var(--fx-hot), transparent 70%),
    radial-gradient(34% 52% at 50% 100%, var(--fx-hot), transparent 68%),
    radial-gradient(36% 44% at 78% 96%, var(--fx-hot), transparent 70%);
  filter: blur(6px);
  animation: fx-flicker 1.1s var(--lm-ease-in-out) infinite;
}
[data-fx="fire"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 50%, var(--fx-hot) 0 1.6px, transparent 2.6px) 0 0 / 23px 37px repeat;
  mask: linear-gradient(0deg, #000, transparent 70%);
  animation: fx-rise 3.4s linear infinite;
}

[data-fx="lightning"] .lm-rframe-sheen::before,
[data-fx="plasma"] .lm-rframe-sheen::before {
  background:
    linear-gradient(74deg, transparent 47.4%, var(--fx-hot) 48.4%, transparent 49.4%),
    linear-gradient(-66deg, transparent 62.4%, var(--fx-hot) 63.2%, transparent 64%),
    linear-gradient(88deg, transparent 29.4%, var(--fx-soft) 30.2%, transparent 31%);
  filter: blur(0.4px) drop-shadow(0 0 6px var(--fx));
  animation: fx-strike 2.6s steps(1, end) infinite;
}
[data-fx="lightning"] .lm-rframe-sheen::after,
[data-fx="plasma"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side, color-mix(in oklab, var(--fx) 30%, transparent), transparent 72%);
  animation: fx-strike 2.6s steps(1, end) infinite 0.08s;
}

[data-fx="runes"] .lm-rframe-sheen::before {
  background:
    linear-gradient(0deg, transparent 46%, var(--fx-soft) 47% 48%, transparent 49%) 0 0 / 26px 26px,
    linear-gradient(90deg, transparent 46%, var(--fx-soft) 47% 48%, transparent 49%) 0 0 / 26px 26px;
  mask: radial-gradient(closest-side, #000 30%, transparent 78%);
  animation: fx-breathe 4s var(--lm-ease-in-out) infinite;
}
[data-fx="runes"] .lm-rframe-sheen::after {
  padding: 2px;
  background: conic-gradient(from 0deg, transparent 0 84deg, var(--fx-hot) 88deg 92deg, transparent 96deg 360deg);
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  animation: fx-spin 12s steps(8, end) infinite;
}

[data-fx="cracks"] .lm-rframe-sheen::before {
  background:
    linear-gradient(102deg, transparent 49.2%, var(--fx-hot) 49.8%, transparent 50.4%),
    linear-gradient(-124deg, transparent 39.2%, var(--fx-soft) 39.8%, transparent 40.4%),
    linear-gradient(148deg, transparent 66.2%, var(--fx-soft) 66.8%, transparent 67.4%),
    linear-gradient(-16deg, transparent 74.2%, var(--fx-hot) 74.7%, transparent 75.2%);
  filter: drop-shadow(0 0 4px var(--fx));
  animation: fx-crack 5s steps(1, end) infinite;
}
[data-fx="cracks"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side at 62% 38%, color-mix(in oklab, var(--fx) 34%, transparent), transparent 62%);
  animation: fx-crack 5s steps(1, end) infinite 0.1s;
}

[data-fx="sparks"] .lm-rframe-sheen::before {
  background:
    radial-gradient(circle at 50% 50%, #fff 0 1.2px, transparent 2px) 0 0 / 31px 29px repeat,
    radial-gradient(circle at 50% 50%, var(--fx-hot) 0 1.6px, transparent 2.6px) 15px 11px / 41px 39px repeat;
  filter: drop-shadow(0 0 4px var(--fx));
  animation: fx-scatter 1.9s steps(3, end) infinite;
}
[data-fx="sparks"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 50%, var(--fx-hot) 0 2px, transparent 3px) 7px 21px / 67px 61px repeat;
  animation: fx-scatter 2.7s steps(3, end) infinite reverse;
}

[data-fx="crystal"] .lm-rframe-sheen::before {
  background:
    linear-gradient(120deg, transparent 42%, color-mix(in oklab, var(--fx-hot) 55%, transparent) 50%, transparent 58%),
    linear-gradient(-120deg, transparent 46%, color-mix(in oklab, var(--fx) 45%, transparent) 52%, transparent 58%);
  background-size: 190% 190%;
  animation: fx-facet 5.5s var(--lm-ease-in-out) infinite;
}
[data-fx="crystal"] .lm-rframe-sheen::after {
  border: 1px solid color-mix(in oklab, var(--fx-hot) 45%, transparent);
  background: linear-gradient(160deg, color-mix(in oklab, var(--fx) 12%, transparent), transparent 60%);
  clip-path: polygon(0 12%, 12% 0, 88% 0, 100% 12%, 100% 88%, 88% 100%, 12% 100%, 0 88%);
  animation: fx-breathe 5.5s var(--lm-ease-in-out) infinite;
}

[data-fx="prism"] .lm-rframe-sheen::before {
  background: conic-gradient(from 200deg at 50% 120%,
    transparent 0deg,
    color-mix(in oklab, var(--fx) 60%, transparent) 18deg,
    var(--fx-hot) 28deg,
    color-mix(in oklab, var(--fx) 60%, transparent) 38deg,
    transparent 56deg,
    transparent 360deg);
  filter: blur(5px);
  animation: fx-fan 6s var(--lm-ease-in-out) infinite;
}
[data-fx="prism"] .lm-rframe-sheen::after {
  background: linear-gradient(180deg, transparent 55%, color-mix(in oklab, var(--fx-hot) 26%, transparent));
  animation: fx-breathe 6s var(--lm-ease-in-out) infinite;
}

[data-fx="shards"] .lm-rframe-sheen::before {
  background:
    linear-gradient(45deg, var(--fx-hot) 0 4px, transparent 5px) 12% 18% / 14px 14px no-repeat,
    linear-gradient(-30deg, var(--fx-soft) 0 5px, transparent 6px) 78% 30% / 16px 16px no-repeat,
    linear-gradient(70deg, var(--fx-hot) 0 3px, transparent 4px) 34% 74% / 12px 12px no-repeat,
    linear-gradient(-58deg, var(--fx-soft) 0 4px, transparent 5px) 66% 84% / 15px 15px no-repeat;
  animation: fx-hover 5.2s var(--lm-ease-in-out) infinite;
}
[data-fx="shards"] .lm-rframe-sheen::after {
  background:
    linear-gradient(20deg, var(--fx-soft) 0 3px, transparent 4px) 50% 12% / 11px 11px no-repeat,
    linear-gradient(-70deg, var(--fx-hot) 0 4px, transparent 5px) 22% 56% / 13px 13px no-repeat;
  animation: fx-hover 7.4s var(--lm-ease-in-out) infinite reverse;
}

[data-fx="eclipse"] .lm-rframe-sheen::before {
  background: radial-gradient(closest-side at 50% 50%, transparent 44%, var(--fx-hot) 47%, transparent 58%);
  animation: fx-breathe 5s var(--lm-ease-in-out) infinite;
}
[data-fx="eclipse"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side at 50% 50%, var(--lm-ink) 45%, transparent 46%);
  animation: fx-slide 8s var(--lm-ease-in-out) infinite;
}

[data-fx="ringworld"] .lm-rframe-sheen::before {
  inset: 22%;
  border: 2px solid color-mix(in oklab, var(--fx) 55%, transparent);
  border-radius: 50%;
  rotate: x 68deg;
  animation: fx-spin 7s linear infinite;
}
[data-fx="ringworld"] .lm-rframe-sheen::after {
  inset: 12%;
  border: 1px dashed color-mix(in oklab, var(--fx-hot) 60%, transparent);
  border-radius: 50%;
  rotate: x 74deg;
  animation: fx-spin 11s linear infinite reverse;
}

[data-fx="bomb"] .lm-rframe-sheen::before {
  padding: 2px;
  background: conic-gradient(from 0deg, var(--fx-hot) 0 6deg, transparent 7deg 360deg);
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  filter: drop-shadow(0 0 5px var(--fx));
  animation: fx-fuse 3.6s linear infinite;
}
[data-fx="bomb"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side, var(--fx-hot), color-mix(in oklab, var(--fx) 40%, transparent) 45%, transparent 70%);
  animation: fx-blast 3.6s var(--lm-ease) infinite;
}

[data-fx="fireworks"] .lm-rframe-sheen::before {
  background:
    radial-gradient(circle at 28% 30%, var(--fx-hot) 0 1.6px, transparent 2.4px) 0 0 / 9px 9px,
    radial-gradient(circle at 72% 26%, #fff 0 1.4px, transparent 2.2px) 0 0 / 11px 11px;
  mask: radial-gradient(closest-side at 28% 30%, #000 40%, transparent 70%),
        radial-gradient(closest-side at 72% 26%, #000 40%, transparent 70%);
  animation: fx-burst 3.2s var(--lm-ease) infinite;
}
[data-fx="fireworks"] .lm-rframe-sheen::after {
  background: radial-gradient(circle at 50% 74%, var(--fx-hot) 0 1.8px, transparent 2.6px) 0 0 / 10px 10px;
  mask: radial-gradient(closest-side at 50% 74%, #000 40%, transparent 72%);
  animation: fx-burst 3.2s var(--lm-ease) infinite 1.1s;
}

[data-fx="pulse"] .lm-rframe-sheen::before {
  border: 2px solid color-mix(in oklab, var(--fx) 60%, transparent);
  animation: fx-ripple 2.4s var(--lm-ease) infinite;
}
[data-fx="pulse"] .lm-rframe-sheen::after {
  border: 2px solid color-mix(in oklab, var(--fx) 45%, transparent);
  animation: fx-ripple 2.4s var(--lm-ease) infinite 1.2s;
}

[data-fx="energy"] .lm-rframe-sheen::before {
  background: repeating-linear-gradient(72deg,
    transparent 0 7px,
    color-mix(in oklab, var(--fx) 35%, transparent) 7px 8px,
    transparent 8px 15px);
  animation: fx-flow 2.4s linear infinite;
}
[data-fx="energy"] .lm-rframe-sheen::after {
  background: radial-gradient(closest-side, transparent 55%, color-mix(in oklab, var(--fx-hot) 30%, transparent) 90%);
  animation: fx-pulse 2.4s var(--lm-ease-in-out) infinite;
}

@keyframes fx-spin { to { rotate: 360deg; } }
@keyframes fx-pulse { 0%, 100% { opacity: 0.35; scale: 0.96; } 50% { opacity: 1; scale: 1.04; } }
@keyframes fx-breathe { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }
@keyframes fx-twinkle { 0%, 100% { opacity: 0.35; } 50% { opacity: 1; } }
@keyframes fx-drift { to { background-position: 170px -210px, -190px 160px, 220px 180px, -140px -170px; } }
@keyframes fx-rise { to { background-position: 0 -260px, 0 -340px; } }
@keyframes fx-suck { 0%, 100% { scale: 1; opacity: 0.5; } 50% { scale: 0.86; opacity: 1; } }
@keyframes fx-implode { 0% { scale: 1.25; opacity: 0; } 40% { opacity: 1; } 100% { scale: 0.7; opacity: 0; } }
@keyframes fx-churn {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(6%, -4%) scale(1.08); }
  66% { transform: translate(-5%, 5%) scale(0.95); }
}
@keyframes fx-shock { 0% { scale: 0.2; opacity: 1; } 70% { opacity: 0.35; } 100% { scale: 1.5; opacity: 0; } }
@keyframes fx-beam { 0%, 100% { opacity: 0.2; rotate: -14deg; } 50% { opacity: 1; rotate: 14deg; } }
@keyframes fx-orbit { to { offset-distance: 100%; } }
@keyframes fx-streak { to { background-position: -180% 180%; } }
@keyframes fx-wave { 0%, 100% { background-position: 0% 0; } 50% { background-position: 100% 0; } }
@keyframes fx-flicker {
  0%, 100% { opacity: 0.7; transform: scaleY(1); }
  25% { opacity: 1; transform: scaleY(1.12); }
  60% { opacity: 0.55; transform: scaleY(0.94); }
}
@keyframes fx-strike {
  0%, 82%, 100% { opacity: 0; }
  84%, 88% { opacity: 1; }
  86% { opacity: 0.2; }
}
@keyframes fx-crack { 0%, 74%, 100% { opacity: 0.25; } 78%, 86% { opacity: 1; } }
@keyframes fx-scatter {
  0%, 100% { opacity: 0.2; transform: translate(0, 0); }
  50% { opacity: 1; transform: translate(3px, -5px); }
}
@keyframes fx-facet { 0%, 100% { background-position: 0% 0%; } 50% { background-position: 100% 100%; } }
@keyframes fx-fan { 0%, 100% { rotate: -10deg; opacity: 0.45; } 50% { rotate: 10deg; opacity: 1; } }
@keyframes fx-hover {
  0%, 100% { transform: translateY(3px) rotate(-2deg); opacity: 0.55; }
  50% { transform: translateY(-6px) rotate(3deg); opacity: 1; }
}
@keyframes fx-slide { 0%, 100% { transform: translateX(-38%); } 50% { transform: translateX(38%); } }
@keyframes fx-fuse { to { rotate: 360deg; } }
@keyframes fx-blast { 0%, 78% { scale: 0.3; opacity: 0; } 86% { scale: 1.2; opacity: 1; } 100% { scale: 1.6; opacity: 0; } }
@keyframes fx-burst { 0% { scale: 0.2; opacity: 0; } 18% { opacity: 1; } 60%, 100% { scale: 1.5; opacity: 0; } }
@keyframes fx-ripple { 0% { scale: 0.82; opacity: 0.9; } 100% { scale: 1.12; opacity: 0; } }
@keyframes fx-flow { to { background-position: 60px 0; } }

@media (prefers-reduced-motion: reduce) {
  [data-fx] .lm-rframe-sheen,
  [data-fx] .lm-rframe-sheen::before,
  [data-fx] .lm-rframe-sheen::after { animation: none !important; }
}
