/* 通用翻牌卡（js/reveal.js）：扣牌 → 轻触 / 上滑咪牌 → 全息闪卡。稀有度 = 尺度 */
.rv-stage { --lc: var(--gold); --rv-fo: 0; --rv-dk: 0; --rv-gx: -20%; --mx: 50%; --my: 50%; --hyp: 0;
  position: relative; perspective: 1100px; -webkit-tap-highlight-color: transparent; outline: none; }
.rv-stage.lv1 { --lc: var(--l1); } .rv-stage.lv2 { --lc: var(--l2); } .rv-stage.lv3 { --lc: var(--l3); --rv-fo: .8; }
.rv-stage.lv4 { --lc: var(--l4); --rv-fo: .85; } .rv-stage.lv5 { --lc: #e7c27a; --rv-fo: .42; }
.rv-stage.lv2 { --rv-fo: .22; }
.rv-tilt, .rv-flip { position: relative; transform-style: preserve-3d; }
.rv-tilt { transition: transform .7s var(--ease); will-change: transform; }
.rv-stage.rv-tilting .rv-tilt { transition: transform .12s linear; }
.rv-edge { position: absolute; inset: 1px; border-radius: 22px; background: linear-gradient(170deg, #f7e3b6, #b88a45 55%, #6e4a1f); transform: translateZ(.6px); }
.rv-edge.e2 { transform: translateZ(-.6px); }
.rv-front { position: relative; backface-visibility: hidden; -webkit-backface-visibility: hidden; transform: rotateY(180deg) translateZ(1.5px); border-radius: 22px; }
.rv-stage.rv-ax-x .rv-front { transform: rotateX(180deg) translateZ(1.5px); }
.rv-stage:not(.rv-up) .rv-front { pointer-events: none; }
.rv-stage .card.task { animation: none; min-height: clamp(270px, 44vh, 400px); padding-bottom: 36px; }
.rv-stage:not(.rv-up) .card.task::after, .rv-stage.rv-still .card.task::after { animation: none; }
.rv-stage.rv-up:not(.rv-still) .card.task::after { animation: sheen 1.3s .05s var(--ease) forwards; }

/* —— 牌背：酒红漆面 + 金箔框 + 月下面具 —— */
.rv-back { position: absolute; inset: 0; border-radius: 22px; overflow: hidden; backface-visibility: hidden; -webkit-backface-visibility: hidden;
  transform: translateZ(1.5px); user-select: none; -webkit-user-select: none;
  background:
    radial-gradient(120% 65% at 50% -5%, #8a2244 0%, transparent 62%),
    radial-gradient(90% 55% at 50% 108%, color-mix(in srgb, var(--lc) 30%, #2a0613) 0%, transparent 70%),
    repeating-conic-gradient(from 0deg at 50% 46%, #e7c27a0c 0deg 1.4deg, transparent 1.4deg 5deg),
    repeating-linear-gradient(45deg, #ffffff05 0 1px, transparent 1px 9px),
    linear-gradient(165deg, #50122a 0%, #2c0815 55%, #1a040c 100%);
  border: 1px solid #d9b26fa0;
  box-shadow: 0 34px 60px -26px #000, 0 0 0 1px #000a, inset 0 1px 0 #ffffff2a, inset 0 0 40px #00000080; }
/* 漆面高光 + 翻动时的明暗 / 掠光 */
.rv-back::before { content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 3;
  background: linear-gradient(150deg, #ffffff1c 0%, transparent 32%, transparent 70%, #ffffff0a 100%); }
.rv-back::after, .rv-front::after { content: ""; position: absolute; inset: 0; border-radius: 22px; pointer-events: none; z-index: 6;
  background: linear-gradient(105deg, transparent calc(var(--rv-gx) - 18%), #fff6e033 var(--rv-gx), transparent calc(var(--rv-gx) + 18%)),
    linear-gradient(rgb(0 0 0 / var(--rv-dk)), rgb(0 0 0 / var(--rv-dk))); }
.rv-stage.rv-up .rv-front::after { display: none; }
.rv-bk-in { position: absolute; inset: 10px; border-radius: 15px; border: 1px solid #d9b26f88; z-index: 2;
  box-shadow: inset 0 0 0 4px #00000033, inset 0 0 0 5px #d9b26f2a;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 14px 10px 40px; }
.rv-bk-in::before, .rv-bk-in::after { content: ""; position: absolute; width: 9px; height: 9px; left: 50%; margin-left: -4.5px; transform: rotate(45deg);
  background: var(--goldg); box-shadow: 0 0 10px #d9b26f88; }
.rv-bk-in::before { top: -5px; } .rv-bk-in::after { bottom: -5px; }
.rv-cn { position: absolute; top: 12px; left: 14px; font: 600 16px/1 var(--latin); color: var(--gold); letter-spacing: .04em; }
.rv-cn.r { top: auto; left: auto; bottom: 12px; right: 14px; transform: rotate(180deg); }
.rv-emb { width: 92px; height: 92px; filter: drop-shadow(0 4px 14px #00000099) drop-shadow(0 0 18px #d9b26f40); }
.rv-emb svg { width: 100%; height: 100%; display: block; }
.rv-kind { font: 700 30px/1.15 var(--serif); letter-spacing: .32em; text-indent: .32em; margin-top: 4px;
  background: linear-gradient(180deg, #fff3d6 0%, #e7c27a 50%, #a8783a 100%); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 2px 6px #000c); }
.rv-lat { font: italic 500 15px/1 var(--latin); color: #d9b26fcc; letter-spacing: .3em; text-transform: uppercase; }
html[lang="en"] .rv-lat { display: none; }
.rv-pips { display: inline-flex; gap: 7px; margin-top: 8px; }
.rv-pips i { width: 7px; height: 7px; transform: rotate(45deg); border: 1px solid #d9b26f99; }
.rv-pips i.on { background: var(--lc); border-color: color-mix(in srgb, var(--lc) 60%, #fff); box-shadow: 0 0 8px var(--lc); }
.rv-lvn { font: 500 12px/1 var(--serif); letter-spacing: .3em; color: color-mix(in srgb, var(--lc) 60%, #fff); opacity: .9; }
.rv-hint { position: absolute; left: 0; right: 0; bottom: 16px; display: flex; flex-direction: column; align-items: center; gap: 5px;
  font: 500 12px/1 var(--serif); letter-spacing: .22em; color: #f3dcaacc; }
.rv-chev { width: 9px; height: 9px; border-left: 1.5px solid currentColor; border-top: 1.5px solid currentColor; transform: rotate(45deg); animation: rvChev 1.6s ease-in-out infinite; }
@keyframes rvChev { 0%, 100% { transform: translateY(3px) rotate(45deg); opacity: .4; } 50% { transform: translateY(-3px) rotate(45deg); opacity: 1; } }
.rv-shine { position: absolute; top: -30%; bottom: -30%; left: 0; width: 38%; z-index: 4; pointer-events: none;
  background: linear-gradient(100deg, transparent, #fff1d020 45%, #fff1d048 50%, #fff1d020 55%, transparent);
  transform: translateX(-180%) skewX(-14deg); animation: rvShine 3.8s 1s ease-in-out infinite; }
@keyframes rvShine { 0%, 55% { transform: translateX(-180%) skewX(-14deg); } 85%, 100% { transform: translateX(360%) skewX(-14deg); } }
/* 矮卡（惩罚菜单里）：牌背收紧 */
.rv-stage.rv-short .rv-bk-in { gap: 3px; padding: 8px 10px 30px; }
.rv-stage.rv-short .rv-emb { width: 50px; height: 50px; }
.rv-stage.rv-short .rv-kind { font-size: 22px; margin-top: 0; }
.rv-stage.rv-short .rv-lat, .rv-stage.rv-short .rv-lvn { display: none; }
.rv-stage.rv-short .rv-pips { margin-top: 3px; }
.rv-stage.rv-short .rv-hint { bottom: 9px; flex-direction: row; gap: 8px; font-size: 11px; }
.rv-stage.rv-up .rv-back, .rv-stage.rv-up .rv-edge { display: none; }
.rv-stage.rv-up .rv-flip, .rv-stage.rv-up .rv-front { transform: none; }

/* —— 扣着：可点 / 可推 —— */
.rv-stage.rv-down { cursor: grab; touch-action: pan-x; user-select: none; -webkit-user-select: none; }
.rv-stage.rv-down.rv-press .rv-tilt { transform: scale(.975); transition: transform .15s; }
.rv-stage.rv-down:focus-visible .rv-back { outline: 2px solid var(--gold); outline-offset: 3px; }
.rv-stage.rv-deal { animation: rvDeal .9s cubic-bezier(.2, .9, .25, 1.05) both; }
@keyframes rvDeal {
  0% { transform: translate3d(140px, -320px, 0) rotate(32deg) scale(.66); opacity: 0; filter: blur(3px); }
  55% { transform: translate3d(-5px, 8px, 0) rotate(-3.5deg) scale(1.025); opacity: 1; filter: none; }
  78% { transform: translate3d(1px, -2px, 0) rotate(1deg); }
  100% { transform: none; }
}
/* 等待中的小动作：越高级越不安分 */
.rv-stage.rv-down:not(.rv-busy):not(.rv-peel):not(.rv-press) .rv-tilt { animation: rvFloat 3.6s 1s ease-in-out infinite; }
.rv-stage.lv4.rv-down:not(.rv-busy):not(.rv-peel):not(.rv-press) .rv-tilt { animation: rvTremble 2.4s 1s infinite; }
.rv-stage.lv5.rv-down:not(.rv-busy):not(.rv-peel):not(.rv-press) .rv-tilt { animation: rvHeart 2.2s .6s infinite; }
@keyframes rvFloat { 50% { transform: translateY(-4px) rotateX(3deg); } }
@keyframes rvTremble { 0%, 78%, 100% { transform: none; } 81% { transform: rotate(-1.4deg) translateX(-2px); } 84% { transform: rotate(1.2deg) translateX(2px); }
  87% { transform: rotate(-.9deg); } 90% { transform: rotate(.6deg) translateX(1px); } 93% { transform: none; } }
@keyframes rvHeart { 0% { transform: scale(1); } 6% { transform: scale(1.035) rotate(-1deg); } 12% { transform: scale(.995) rotate(.8deg); }
  18% { transform: scale(1.025) rotate(-.6deg); } 26% { transform: scale(1) rotate(.4deg) translateX(-1px); } 32% { transform: translateX(1px); } 40%, 100% { transform: none; } }

/* —— 牌后漏光（暗示稀有度）—— */
.rv-aura { position: absolute; inset: 0; pointer-events: none; border-radius: 22px; opacity: 0; transition: opacity .6s; }
.rv-aura::before { content: ""; position: absolute; inset: -14px; border-radius: 30px; filter: blur(18px);
  background: radial-gradient(70% 60% at 50% 50%, color-mix(in srgb, var(--lc) 75%, transparent), transparent 75%); }
.rv-stage.lv3 .rv-aura { opacity: .55; }
.rv-stage.lv4 .rv-aura { opacity: .9; }
.rv-stage.lv4 .rv-aura::before { background: radial-gradient(70% 60% at 50% 50%, #e0304fcc, #c98a3a66 60%, transparent 78%); animation: rvAura 2.4s ease-in-out infinite; }
.rv-stage.lv5 .rv-aura { opacity: 1; }
.rv-stage.lv5 .rv-aura::before { inset: -26px; background: radial-gradient(70% 62% at 50% 50%, #ffe3a0ee, #e0a64a88 55%, transparent 78%); animation: rvAura 2.2s .6s ease-in-out infinite; }
@keyframes rvAura { 0%, 100% { opacity: .65; transform: scale(.98); } 8% { opacity: 1; transform: scale(1.04); } 20% { opacity: .8; } }
.rv-stage.rv-up .rv-aura { opacity: 0; }
.rv-stage.rv-up.lv4:not(.rv-still) .rv-aura, .rv-stage.rv-up.lv5 .rv-aura { opacity: 1; }
.rv-stage.rv-up.lv4 .rv-aura::before { animation: rvAuraOut 1.6s ease-out forwards; }
@keyframes rvAuraOut { 0% { opacity: 1; transform: scale(1.12); } 100% { opacity: .35; transform: scale(1); } }
/* L5 光芒：扣着时隐约在转，翻开时整个炸开 */
.rv-rays { position: absolute; left: 50%; top: 50%; width: 260%; aspect-ratio: 1; translate: -50% -50%; display: none; opacity: .35;
  background: repeating-conic-gradient(from 0deg, #ffe7b0 0deg 4deg, transparent 4deg 15deg);
  -webkit-mask: radial-gradient(closest-side, #000 8%, #0008 30%, transparent 70%); mask: radial-gradient(closest-side, #000 8%, #0008 30%, transparent 70%);
  animation: rvSpin 18s linear infinite; }
.rv-stage.lv5 .rv-rays { display: block; }
.rv-stage.lv5.rv-up .rv-rays { opacity: .55; animation: rvSpin 26s linear infinite, rvRaysIn 1.4s ease-out; }
.rv-stage.lv5.rv-up.rv-still .rv-rays { opacity: .32; animation: rvSpin 26s linear infinite; }
@keyframes rvSpin { to { rotate: 360deg; } }
@keyframes rvRaysIn { 0% { opacity: 1; scale: .5; } 40% { opacity: 1; scale: 1.1; } 100% { opacity: .55; scale: 1; } }
.rv-stage.lv5 .rv-back { border-color: #ffe3a0; box-shadow: 0 34px 60px -26px #000, 0 0 0 1px #000a, 0 0 26px -4px #ffd88a, inset 0 1px 0 #ffffff2a, inset 0 0 40px #00000080; }
.rv-stage.lv4 .rv-back { box-shadow: 0 34px 60px -26px #000, 0 0 0 1px #000a, 0 0 22px -6px #e0304f, inset 0 1px 0 #ffffff2a, inset 0 0 40px #00000080; }

/* L5 暗场：周围压暗，只剩这张牌 */
.rv-stage::before { content: ""; position: absolute; inset: 0; border-radius: 22px; pointer-events: none; box-shadow: 0 0 0 100vmax #000; opacity: 0; transition: opacity .5s; }
.rv-stage.rv-dim { z-index: 40; }
.rv-stage.rv-dim::before { opacity: .72; transition: opacity .35s; }

/* —— 粒子 —— */
.rv-fx { position: absolute; inset: 0; pointer-events: none; z-index: 5; }
.rv-ember { position: absolute; left: var(--x); bottom: 6%; width: var(--s); height: var(--s); border-radius: 50%; opacity: 0;
  background: radial-gradient(circle, #fff6d8, #ffc35a 45%, #ff7a2a00 72%); box-shadow: 0 0 8px #ffb347;
  animation: rvEmber var(--t) var(--d) ease-out infinite; }
@keyframes rvEmber { 0% { transform: translate(0, 0) scale(.6); opacity: 0; } 15% { opacity: 1; } 100% { transform: translate(var(--dx), -280px) scale(.2); opacity: 0; } }
.rv-burst { position: absolute; left: 50%; top: 50%; }
.rv-burst i { position: absolute; left: 0; top: 0; width: var(--s); height: var(--s); margin: calc(var(--s) / -2) 0 0 calc(var(--s) / -2);
  clip-path: polygon(50% 0, 61% 39%, 100% 50%, 61% 61%, 50% 100%, 39% 61%, 0 50%, 39% 39%);
  background: radial-gradient(circle, #fff, #ffe3a0 45%, #d9b26f); opacity: 0;
  animation: rvStar 1.1s var(--d) cubic-bezier(.15, .8, .3, 1) forwards; }
.rv-stage.lv4 .rv-burst i { background: radial-gradient(circle, #fff, #ffb0be 40%, #e0304f); }
@keyframes rvStar { 0% { transform: rotate(var(--ang)) translateX(0) scale(.3); opacity: 1; }
  70% { opacity: 1; } 100% { transform: rotate(var(--ang)) translateX(var(--dist)) scale(1) rotate(180deg); opacity: 0; } }
/* 翻开那一下的闪光 */
.rv-stage.rv-pop .rv-front::before { content: ""; position: absolute; inset: -2px; border-radius: 24px; z-index: 7; pointer-events: none;
  background: radial-gradient(circle at 50% 50%, #fffaf0 0%, #fff3d0cc 30%, transparent 75%); animation: rvFlash .7s ease-out forwards; }
.rv-stage.lv5.rv-pop .rv-front::before { animation-duration: 1.1s; }
@keyframes rvFlash { from { opacity: 1; } to { opacity: 0; } }
.rv-stage.rv-pop .rv-tilt { animation: rvPop .55s cubic-bezier(.2, 1.6, .4, 1); }
@keyframes rvPop { 0% { scale: .96; } 45% { scale: 1.035; } 100% { scale: 1; } }
.rv-pulse { position: fixed; inset: 0; z-index: 9990; pointer-events: none; box-shadow: inset 0 0 90px 24px #c8143ccc, inset 0 0 0 3px #ffd88a66; animation: rvPulse 1.5s ease-out forwards; }
@keyframes rvPulse { 0% { opacity: 0; } 12% { opacity: 1; } 30% { opacity: .5; } 45% { opacity: .9; } 100% { opacity: 0; } }

/* —— 稀有度：牌面 —— */
.rv-rar { position: absolute; left: 18px; bottom: 12px; z-index: 4; display: flex; align-items: baseline; gap: 6px; pointer-events: none;
  font: italic 500 12.5px/1 var(--latin); letter-spacing: .14em; color: #d9b26fcc; }
.rv-rar b { font: 700 11px/1 var(--sans); letter-spacing: 1px; font-style: normal; color: var(--gold); text-shadow: 0 0 8px #d9b26f88; }
.rv-stage.rv-down .rv-rar { opacity: 0; }
/* L1–L2：象牙卡 + 金边（Common / Uncommon） */
.rv-stage.lv1 .card.task, .rv-stage.lv2 .card.task {
  --lc: #b23a58; border: 1px solid #c9a35c;
  background: radial-gradient(120% 70% at 50% 0%, #fffaf0 0%, transparent 70%), radial-gradient(90% 60% at 50% 110%, #d9b26f2a, transparent 70%), linear-gradient(170deg, #f6eedf 0%, #e8d9bf 100%);
  box-shadow: 0 30px 60px -30px #000, 0 0 0 1px #00000099, inset 0 0 0 1px #ffffffaa, inset 0 0 30px #b48a4a22; }
.rv-stage.lv2 .card.task { --lc: #a8264b; }
.rv-stage.lv1 .card.task::before, .rv-stage.lv2 .card.task::before { border-color: #b48a4a88; box-shadow: inset 0 0 0 3px #ffffff40, inset 0 0 0 4px #b48a4a33; }
.rv-stage.lv1 .card.task::after, .rv-stage.lv2 .card.task::after { background: linear-gradient(100deg, transparent 0%, #ffffff40 45%, #ffffffaa 50%, #ffffff40 55%, transparent 100%); }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task p.big { color: #2a1016; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .tag { color: #8a5a22; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .tag .kind { color: #6b1a30; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .tag .lvn { color: #8c3048; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .pips i { border-color: #8c304899; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .pips i.on { box-shadow: none; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .idx { color: #9a6c2e; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .fav:not(.on) { color: #8b6f66; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .hint { color: #6d5550; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task .timer { color: #5a1a2a; background: #ffffff66; border-color: #9a6c2e88; }
:is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task b.pa, :is(.rv-stage.lv1, .rv-stage.lv2, .rv-stage.lv5) .card.task b.pb { filter: brightness(.6) saturate(1.4); }
:is(.rv-stage.lv1, .rv-stage.lv2) .rv-rar { color: #8a5a22; } :is(.rv-stage.lv1, .rv-stage.lv2) .rv-rar b { color: #9a6c2e; text-shadow: none; }
/* L3：酒红底 + 彩虹全息（Holo Rare） */
.rv-stage.lv3 .card.task { box-shadow: 0 30px 60px -26px #dc527499, 0 0 0 1px #000, inset 0 1px 0 #ffffff14; }
/* L4：全卡闪 + 闪粉 + 红金光（Ultra Rare） */
.rv-stage.lv4 .card.task {
  background: radial-gradient(120% 60% at 50% 0%, #e0304f55 0%, transparent 70%), radial-gradient(80% 50% at 50% 105%, #d9b26f30, transparent 70%),
    repeating-linear-gradient(135deg, #ffffff06 0 2px, transparent 2px 7px), linear-gradient(172deg, #3a0a1a 0%, #170409 100%);
  border-color: #e7b56a; box-shadow: 0 30px 60px -22px #c22a4fcc, 0 0 30px -8px #e7b56a88, 0 0 0 1px #000, inset 0 1px 0 #ffffff22; }
.rv-stage.lv4 .rv-rar { color: #ffd2a0; } .rv-stage.lv4 .rv-rar b { color: #ffd88a; }
/* L5：金卡（Secret Rare） */
.rv-stage.lv5 .card.task {
  background: radial-gradient(120% 70% at 30% 0%, #fff6d8 0%, transparent 55%), radial-gradient(100% 60% at 70% 110%, #b8863a 0%, transparent 70%),
    repeating-linear-gradient(120deg, #ffffff18 0 1px, transparent 1px 6px), linear-gradient(160deg, #fbe8bd 0%, #e2b866 40%, #c4913f 72%, #9a6c2e 100%);
  border: 1px solid #fff0c8; box-shadow: 0 30px 70px -20px #ffcf70aa, 0 0 40px -6px #ffd88acc, 0 0 0 1px #5a3a12, inset 0 0 0 1px #fff8, inset 0 0 40px #7a4e1a44; }
.rv-stage.lv5 .card.task::before { border-color: #7a4e1a66; box-shadow: inset 0 0 0 3px #ffffff30, inset 0 0 0 4px #7a4e1a40; }
.rv-stage.lv5 .card.task::after { background: linear-gradient(100deg, transparent 0%, #ffffff55 45%, #ffffffcc 50%, #ffffff55 55%, transparent 100%); }
.rv-stage.lv5 .card.task .tag, .rv-stage.lv5 .card.task .idx { color: #6b4414; }
.rv-stage.lv5 .card.task .pips i.on { background: #7a1030; }
.rv-stage.lv5 .rv-rar { color: #4a2a0a; font-weight: 600; z-index: 8; } .rv-stage.lv5 .rv-rar b { color: #7a1030; text-shadow: 0 0 6px #fff8; }
.rv-stage.lv5 .card.task .timer { background: #fff3dc99; }

/* —— 全息箔（pokemon-cards-css 思路：彩虹斜带 + 闪粉 + 跟手的眩光，叠加混合）—— */
.rv-foil { position: absolute; inset: 0; border-radius: 22px; pointer-events: none; z-index: 3; opacity: var(--rv-fo); mix-blend-mode: color-dodge;
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' seed='7' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 14 0 0 0 -8.6'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E"),
    repeating-linear-gradient(115deg, #ff5b7c 0%, #ffd36b 5%, #8dffb0 10%, #6fd9ff 15%, #9b8bff 20%, #ff7ad9 25%, #ff5b7c 30%),
    repeating-linear-gradient(25deg, #0e152e 0%, #8fa7c4 4%, #142438 8%);
  background-size: 180px 180px, 300% 300%, 220% 220%;
  background-position: center, var(--mx) var(--my), calc(100% - var(--mx)) calc(100% - var(--my));
  background-blend-mode: screen, hue, normal;
  filter: brightness(.62) contrast(1.6) saturate(1.3);
  animation: rvFoilIdle 7s ease-in-out infinite alternate; }
.rv-tilting .rv-foil, .rv-holo.rv-tilting > .rv-foil { animation: none; }
@keyframes rvFoilIdle { 0% { background-position: center, 10% 20%, 90% 80%; } 100% { background-position: center, 90% 80%, 10% 20%; } }
.rv-foil::after { content: ""; position: absolute; inset: 0; border-radius: inherit; mix-blend-mode: overlay;
  background: radial-gradient(farthest-corner circle at var(--mx) var(--my), #ffffffcc 0%, #ffffff40 18%, #00000040 70%); opacity: calc(.35 + var(--hyp) * .5); }
.rv-stage.lv1 .rv-foil, .rv-stage.rv-down .rv-foil { display: none; }
.rv-stage.lv2 .rv-foil { mix-blend-mode: soft-light; filter: none; background: radial-gradient(farthest-corner circle at var(--mx) var(--my), #fff 0%, #fff0 55%); opacity: .5; animation: none; }
.rv-stage.lv2 .rv-foil::after { display: none; }
.rv-stage.lv3 .rv-foil { filter: brightness(.85) contrast(1.5) saturate(1.5); }
.rv-stage.lv4 .rv-foil { filter: brightness(.72) contrast(1.7) saturate(1.5); }
.rv-stage.lv5 .rv-foil { mix-blend-mode: overlay; filter: brightness(1.05) contrast(1.2) saturate(.75);
  background-blend-mode: screen, color, normal; }
/* 其它模式自绘的任务卡：只加跟手倾斜 + 淡淡的箔光 */
.card.task.rv-holo { transition: rotate .6s var(--ease); }
.card.task.rv-holo.rv-tilting { transition: rotate .12s linear; }
.card.task.rv-holo > .rv-foil { --rv-fo: .18; z-index: 3; }
.card.task.rv-holo.lv3 > .rv-foil { --rv-fo: .35; } .card.task.rv-holo.lv4 > .rv-foil { --rv-fo: .45; } .card.task.rv-holo.lv5 > .rv-foil { --rv-fo: .5; }

/* —— 翻开前按钮锁住 —— */
.row.rv-lock { opacity: .32; filter: grayscale(.6); pointer-events: none; transition: opacity .3s, filter .3s; }
.row.rv-unlock { animation: rvUnlock .6s var(--ease); }
@keyframes rvUnlock { 0% { opacity: .32; transform: translateY(6px); } 100% { opacity: 1; transform: none; } }

@media (prefers-reduced-motion: reduce) {
  .rv-stage .rv-tilt, .rv-stage .rv-rays, .rv-foil, .rv-ember, .rv-shine, .rv-chev { animation: none !important; transform: none !important; }
  .rv-pulse { display: none; }
}
