/* 排行榜特效 v3（2026-11-05）：新增特效，并重写传说「樱花落」「星云」「PRO | 脉冲星」。
   在 leaderboard.css、leaderboard-effects-white.css 之后加载，粒子和 SVG 由 leaderboard-effects.js 生成。
   排行榜行和商店里的预览表用同一套 .leaderboard-player.effect-* 结构，所以这里只写这一处。
   行的最右边有「观看回放」按钮，所以每个特效的主角都放在右边 15% 以内，不会被按钮挡住。
   动画只动 transform / opacity；深色舞台的行会把整行文字改成浅色。 */

/* ---------- 公共零件 ---------- */
.leaderboard-effect-art b{position:absolute;display:block}
.leaderboard-effect-art svg{position:absolute;display:block;overflow:visible;pointer-events:none}
@keyframes lb3-spin{to{transform:rotate(360deg)}}
@keyframes lb3-twinkle{0%,100%{opacity:.15;transform:scale(.7)}45%{opacity:1;transform:scale(1.15)}70%{opacity:.4;transform:scale(.9)}}
@keyframes lb3-core{0%,100%{transform:scale(.85);opacity:.85}50%{transform:scale(1.15);opacity:1}}
@keyframes lb3-sway{from{transform:rotate(-1.2deg)}to{transform:rotate(1.4deg)}}
@keyframes lb3-sheen{0%,30%{transform:translateX(-70%)}70%,100%{transform:translateX(70%)}}

/* 深色舞台的行：整行文字改成浅色 */
.leaderboard-table tbody tr:has(.leaderboard-player:is(.effect-thunder,.effect-comet,.effect-galaxy_swirl,.effect-frost_bloom,.effect-abyss_jelly,.effect-event_horizon)) td{color:#e5edf5}
.leaderboard-table tbody tr:has(.leaderboard-player:is(.effect-thunder,.effect-comet,.effect-galaxy_swirl,.effect-frost_bloom,.effect-abyss_jelly,.effect-event_horizon)) td strong{color:#fff}
.leaderboard-table tbody tr:has(.leaderboard-player:is(.effect-thunder,.effect-comet,.effect-galaxy_swirl,.effect-frost_bloom,.effect-abyss_jelly,.effect-event_horizon)) .player-region{border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.08);color:#e5edf5}
.leaderboard-table tbody tr:has(.leaderboard-player:is(.effect-thunder,.effect-comet,.effect-galaxy_swirl,.effect-frost_bloom,.effect-abyss_jelly,.effect-event_horizon)) .leaderboard-player>div small{color:#cbd5e1}
/* 细星背景，几个深色舞台共用 */
.galaxy-field,.eh-field{inset:0;background:
  radial-gradient(circle at 7% 22%,rgba(255,255,255,.9) 0 .7px,transparent 1.3px),radial-gradient(circle at 15% 70%,rgba(255,255,255,.7) 0 .6px,transparent 1.2px),
  radial-gradient(circle at 26% 38%,rgba(255,255,255,.8) 0 .7px,transparent 1.3px),radial-gradient(circle at 33% 84%,rgba(210,220,255,.8) 0 .6px,transparent 1.2px),
  radial-gradient(circle at 44% 16%,rgba(255,255,255,.75) 0 .6px,transparent 1.2px),radial-gradient(circle at 51% 58%,rgba(255,235,220,.8) 0 .7px,transparent 1.3px),
  radial-gradient(circle at 59% 30%,rgba(255,255,255,.7) 0 .6px,transparent 1.2px),radial-gradient(circle at 66% 80%,rgba(255,255,255,.85) 0 .7px,transparent 1.3px),
  radial-gradient(circle at 74% 12%,rgba(220,230,255,.8) 0 .6px,transparent 1.2px),radial-gradient(circle at 82% 66%,rgba(255,255,255,.7) 0 .6px,transparent 1.2px),
  radial-gradient(circle at 90% 34%,rgba(255,255,255,.85) 0 .7px,transparent 1.3px),radial-gradient(circle at 96% 88%,rgba(255,240,220,.7) 0 .6px,transparent 1.2px)}

/* ===================== 普通：名字本身 ===================== */
.leaderboard-player.effect-mint_name{--fx-ink:#0b8a68;--fx-glow:rgba(47,214,160,.55)}
.leaderboard-player.effect-violet_name{--fx-ink:#6b46d6;--fx-glow:rgba(155,123,255,.55)}
.leaderboard-player.effect-ice_name{--fx-ink:#17618f;--fx-glow:rgba(110,201,255,.7)}
.leaderboard-player.effect-ice_name strong{-webkit-text-stroke:.35px rgba(110,201,255,.9);text-shadow:0 1px 0 #fff,0 -1px 0 #fff,1px 0 0 #fff,-1px 0 0 #fff,0 0 10px rgba(110,201,255,.8)!important}
.leaderboard-player.effect-sunset_name strong{color:transparent!important;background:linear-gradient(90deg,#ea580c,#f43f5e 60%,#db2777)!important;-webkit-background-clip:text!important;background-clip:text!important;text-shadow:none!important;filter:drop-shadow(0 1px 0 #fff) drop-shadow(0 0 5px rgba(249,115,22,.4))}
.leaderboard-player.effect-ink_shadow strong{color:#1f2a35!important;text-shadow:1px 1px 0 #93a1ad,2px 2px 0 #aeb9c3,3px 3px 0 #c8d0d7,4px 4px 0 #dde2e7!important}

/* ===================== 稀有 ===================== */
/* 流金 */
.leaderboard-player.effect-gilded_shimmer strong{color:transparent!important;background:linear-gradient(105deg,#9a6700 0 38%,#fff6cf 46%,#ffe08a 50%,#9a6700 58% 100%)!important;background-size:260% 100%!important;-webkit-background-clip:text!important;background-clip:text!important;text-shadow:none!important;filter:drop-shadow(0 1px 0 #fff) drop-shadow(0 0 5px rgba(234,179,8,.45));animation:lb3-gild 2.6s ease-in-out infinite}
.leaderboard-player .fx-gild{inset:0;background:linear-gradient(105deg,transparent 40%,rgba(255,236,170,.4) 50%,transparent 60%);transform:translateX(-100%);animation:lb3-gild-sweep 2.6s ease-in-out infinite}
@keyframes lb3-gild{0%{background-position:100% 0}60%,100%{background-position:-60% 0}}
@keyframes lb3-gild-sweep{0%{transform:translateX(-100%)}60%,100%{transform:translateX(100%)}}
/* 萤火 */
.leaderboard-player.effect-firefly{--fx-ink:#3f6212;--fx-glow:rgba(163,230,53,.55)}
.leaderboard-player .fx-firefly{left:var(--x);top:var(--y);width:4px;height:4px;border-radius:50%;background:#ecfccb;box-shadow:0 0 4px 2px rgba(163,230,53,.85),0 0 12px 4px rgba(132,204,22,.4);animation:lb3-fly var(--speed) ease-in-out var(--delay) infinite alternate,lb3-blink var(--blink) ease-in-out var(--delay) infinite}
@keyframes lb3-fly{to{transform:translate(var(--dx),var(--dy))}}
@keyframes lb3-blink{0%,100%{opacity:.15}45%{opacity:1}60%{opacity:.8}}

/* ===================== 史诗 ===================== */
/* 雷霆：漆黑夜空，乌云翻滚，闪电劈下照亮云层 */
.leaderboard-player.effect-thunder .leaderboard-effect-art{background:linear-gradient(180deg,#0b0f1a,#05070d 62%,#020306)!important;box-shadow:inset 0 0 0 1px rgba(148,163,184,.14)!important}
.leaderboard-player.effect-thunder strong{color:#eef2ff!important;text-shadow:0 1px 2px #000,0 0 10px rgba(147,197,253,.7)!important}
.leaderboard-player .storm-rain{left:0;right:0;bottom:0;height:45%;background:linear-gradient(0deg,rgba(30,41,59,.45),transparent)}
.leaderboard-player .storm-cloud{top:-62%;height:112%;width:30%;border-radius:50%;background:radial-gradient(ellipse,rgba(71,85,105,.62),rgba(30,41,59,.4) 45%,transparent 70%);filter:blur(5px);animation:lb3-cloud 16s ease-in-out infinite alternate}
.leaderboard-player .storm-cloud.is-1{left:20%}
.leaderboard-player .storm-cloud.is-2{left:42%;width:34%;top:-70%;animation-duration:21s;animation-direction:alternate-reverse}
.leaderboard-player .storm-cloud.is-3{left:63%;width:26%;animation-duration:18s}
.leaderboard-player .storm-cloud.is-4{left:2%;width:24%;top:-74%;opacity:.8;animation-duration:24s}
.leaderboard-player .storm-flash{inset:0;background:radial-gradient(ellipse 190px 60px at var(--x) 0%,rgba(219,234,254,.85),rgba(96,165,250,.3) 50%,transparent 82%),linear-gradient(rgba(148,163,184,.1),rgba(148,163,184,.1));opacity:0;animation:lb3-storm-flash 7s linear var(--delay) infinite}
.leaderboard-player .storm-bolt{left:var(--x);top:0;width:60px;height:100%;margin-left:-30px;opacity:0;animation:lb3-strike 7s linear var(--delay) infinite}
.leaderboard-player .storm-bolt polyline{fill:none;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.leaderboard-player .storm-bolt .bolt-glow{stroke:rgba(147,197,253,.6);stroke-width:5px;filter:blur(2px)}
.leaderboard-player .storm-bolt .bolt-core{stroke:#fff;stroke-width:1.5px}
.leaderboard-player .storm-bolt .bolt-twig{stroke:rgba(219,234,254,.85);stroke-width:.9px}
@keyframes lb3-cloud{to{transform:translateX(8%) scale(1.08)}}
@keyframes lb3-strike{0%{opacity:0}1%{opacity:1}2%{opacity:.1}3%{opacity:1}4.6%{opacity:.7}7%,100%{opacity:0}}
@keyframes lb3-storm-flash{0%{opacity:0}1%{opacity:1}2%{opacity:.25}3%{opacity:.95}6%{opacity:.25}10%,100%{opacity:0}}
/* 涟漪：一汪浅水，雨滴轮流落下激起三圈透视的水波 */
.leaderboard-player.effect-ripple{--fx-ink:#0e7490;--fx-glow:rgba(34,211,238,.4)}
.leaderboard-player .pond-water{left:26%;right:22%;top:0;bottom:0;background:radial-gradient(ellipse 60% 130% at 58% 70%,rgba(165,243,252,.5),rgba(207,250,254,.28) 55%,transparent 76%)}
.leaderboard-player .pond-shine{left:26%;right:22%;top:-10px;bottom:0;background:repeating-linear-gradient(0deg,transparent 0 6px,rgba(255,255,255,.55) 6px 7px);-webkit-mask:radial-gradient(ellipse 55% 90% at 58% 70%,#000,transparent 72%);mask:radial-gradient(ellipse 55% 90% at 58% 70%,#000,transparent 72%);opacity:.6;animation:lb3-shine 3.5s linear infinite}
.leaderboard-player .pond-drop{left:var(--x);top:var(--y);width:0;height:0}
.leaderboard-player .drop-fall{left:-.75px;top:-44px;width:1.5px;height:7px;border-radius:2px;background:linear-gradient(transparent,#0891b2);opacity:0;animation:lb3-drop 4.2s linear var(--delay) infinite}
.leaderboard-player .drop-ring{left:-42px;top:-9px;width:84px;height:18px;border:1.6px solid rgba(8,145,178,.75);border-radius:50%;box-shadow:0 0 4px rgba(34,211,238,.35);opacity:0;animation:lb3-pond-ring 4.2s ease-out var(--delay) infinite}
.leaderboard-player .drop-ring.is-2{animation-delay:calc(var(--delay) + .32s)}
.leaderboard-player .drop-ring.is-3{animation-delay:calc(var(--delay) + .64s);border-width:1px}
.leaderboard-player .drop-splash{left:-1px;top:-5px;width:2px;height:2px;border-radius:50%;background:#22d3ee;box-shadow:-5px -2px 0 #67e8f9,5px -3px 0 #67e8f9;opacity:0;animation:lb3-splash 4.2s ease-out var(--delay) infinite}
@keyframes lb3-shine{to{transform:translateY(7px)}}
@keyframes lb3-drop{0%{opacity:0;transform:translateY(-6px)}3%{opacity:1}16%{opacity:1;transform:translateY(40px)}17%,100%{opacity:0;transform:translateY(40px)}}
@keyframes lb3-pond-ring{0%,16%{opacity:0;transform:scale(.05)}17%{opacity:1;transform:scale(.08)}62%,100%{opacity:0;transform:scale(1)}}
@keyframes lb3-splash{0%,16%{opacity:0;transform:translateY(0)}17%{opacity:1;transform:translateY(0)}27%,100%{opacity:0;transform:translateY(-7px)}}
/* 彗星：暮色天空，着色器画的彗星图从右往左慢慢飞过。图是黑底，screen 混合写在最外层的 .comet-lane 上 */
.leaderboard-player.effect-comet .leaderboard-effect-art{background:radial-gradient(ellipse at 90% 130%,rgba(244,114,182,.22),transparent 45%),linear-gradient(100deg,#1f1c52,#15123d 45%,#0a0925)!important;box-shadow:inset 0 0 0 1px rgba(165,180,252,.18)!important}
.leaderboard-player.effect-comet strong{color:#eef2ff!important;text-shadow:0 1px 2px #000,0 0 10px rgba(165,180,252,.7)!important}
.leaderboard-player .dusk-sky{inset:0;background:linear-gradient(0deg,rgba(251,146,60,.13),transparent 45%)}
.leaderboard-player .dusk-star{left:var(--x);top:var(--y);width:1.6px;height:1.6px;border-radius:50%;background:#fff;box-shadow:0 0 3px rgba(255,255,255,.8);animation:lb3-twinkle 3.2s ease-in-out var(--delay) infinite}
.leaderboard-player .comet-lane{left:22%;right:22%;top:0;bottom:0;transform:rotate(-2.5deg);mix-blend-mode:screen}
.leaderboard-player .comet-body{left:0;top:0;width:100%;height:100%;opacity:0;animation:lb3-comet-fly 14s linear infinite}
.leaderboard-player .comet-body b{left:0;transform:translateX(-6%);top:-8%;height:116%;width:auto;aspect-ratio:5/1;background:url("/assets/fx-comet.webp") left center/100% 100% no-repeat}
@keyframes lb3-comet-fly{0%{opacity:0;transform:translateX(100%)}8%{opacity:1}86%{opacity:1}100%{opacity:0;transform:translateX(0)}}

/* ===================== 神话 ===================== */
/* 银河漩涡：显卡渲染的正面旋涡星系图，倾斜成椭圆缓缓自转。
   图是黑底，用 screen 混合去掉黑色；混合必须写在带 transform 的最外层（.galaxy-tilt）上，写在里面会被隔离成黑方块 */
.leaderboard-player.effect-galaxy_swirl .leaderboard-effect-art{background:radial-gradient(ellipse 260px 80px at 72% 50%,rgba(129,140,248,.2),transparent 70%),linear-gradient(115deg,#05051a,#0c0a27 55%,#060a1e)!important;box-shadow:inset 0 0 0 1px rgba(165,180,252,.18)!important}
.leaderboard-player.effect-galaxy_swirl strong{color:#f5f3ff!important;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px rgba(165,180,252,.75)!important}
.leaderboard-player .galaxy-glow{right:19%;top:50%;width:300px;height:90px;margin-top:-45px;background:radial-gradient(ellipse,rgba(196,181,253,.22),rgba(99,102,241,.08) 45%,transparent 70%)}
.leaderboard-player .galaxy-tilt{right:21%;top:50%;width:250px;height:250px;margin-top:-125px;transform:rotate(-14deg) scaleY(.3);mix-blend-mode:screen}
.leaderboard-player .galaxy-spin{inset:0;border-radius:50%;background:url("/assets/fx-galaxy.webp") center/100% 100% no-repeat;animation:lb3-spin 90s linear infinite reverse}
.leaderboard-player .galaxy-twinkle{left:var(--x);top:var(--y);width:2px;height:2px;border-radius:50%;background:#fff;box-shadow:0 0 4px rgba(255,255,255,.9);animation:lb3-twinkle 3s ease-in-out var(--delay) infinite}
/* 霜华：结霜的夜色玻璃，六角雪花慢慢转 */
.leaderboard-player.effect-frost_bloom .leaderboard-effect-art{background:radial-gradient(ellipse 220px 80px at 69% 50%,rgba(125,211,252,.22),transparent 70%),linear-gradient(115deg,#061827,#0b2942 55%,#071c30)!important;box-shadow:inset 0 0 0 1px rgba(186,230,253,.22)!important}
.leaderboard-player.effect-frost_bloom strong{color:#f0f9ff!important;text-shadow:0 1px 2px #001018,0 0 10px rgba(186,230,253,.85)!important}
.leaderboard-player .frost-glass{inset:0;background:radial-gradient(ellipse 120px 40px at 0% 0%,rgba(224,242,254,.2),transparent 70%),radial-gradient(ellipse 160px 40px at 100% 100%,rgba(224,242,254,.16),transparent 70%);box-shadow:inset 0 0 14px rgba(186,230,253,.28)}
.leaderboard-player .frost-sheen{inset:-40% -20%;background:linear-gradient(110deg,transparent 42%,rgba(224,242,254,.16) 50%,transparent 58%);transform:translateX(-70%);animation:lb3-sheen 7s ease-in-out infinite}
.leaderboard-player .frost-flake{left:var(--x);top:50%;width:calc(58px * var(--s));height:calc(58px * var(--s));margin:calc(-29px * var(--s)) 0 0 calc(-29px * var(--s));filter:drop-shadow(0 0 3px rgba(186,230,253,.85));animation:lb3-spin 36s linear var(--delay) infinite}
.leaderboard-player .frost-flake svg{inset:0;width:100%;height:100%;animation:lb3-flake-glow 4s ease-in-out var(--delay) infinite alternate}
.leaderboard-player .frost-flake .flake-arms path{fill:none;stroke:#e0f2fe;stroke-width:1.2px;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.leaderboard-player .frost-flake .flake-plate{fill:rgba(186,230,253,.22);stroke:#e0f2fe;stroke-width:1px;vector-effect:non-scaling-stroke}
.leaderboard-player .frost-snow{left:var(--x);top:-6px;width:var(--size);height:var(--size);border-radius:50%;background:#f0f9ff;box-shadow:0 0 4px rgba(186,230,253,.9);opacity:0;animation:lb3-snow var(--speed) linear var(--delay) infinite}
@keyframes lb3-flake-glow{from{opacity:.7}to{opacity:1}}
@keyframes lb3-snow{0%{opacity:0;transform:translate(0,0)}15%{opacity:.95}100%{opacity:0;transform:translate(var(--drift),64px)}}
/* 深海水母 */
.leaderboard-player.effect-abyss_jelly .leaderboard-effect-art{background:radial-gradient(ellipse at 70% -20%,rgba(94,234,212,.2),transparent 55%),linear-gradient(180deg,#022235,#03384a 60%,#021c2a)!important;box-shadow:inset 0 0 0 1px rgba(94,234,212,.2)!important}
.leaderboard-player.effect-abyss_jelly strong{color:#ecfeff!important;text-shadow:0 1px 2px #00121a,0 0 10px rgba(94,234,212,.85),0 0 18px rgba(244,114,182,.35)!important}
.leaderboard-player .abyss-caustics{inset:-30%;background:radial-gradient(ellipse 40px 10px at 20% 30%,rgba(153,246,228,.2),transparent),radial-gradient(ellipse 30px 8px at 55% 18%,rgba(153,246,228,.16),transparent),radial-gradient(ellipse 50px 12px at 80% 40%,rgba(153,246,228,.14),transparent),radial-gradient(ellipse 36px 9px at 38% 58%,rgba(153,246,228,.12),transparent);filter:blur(1px);animation:lb3-caustic 9s ease-in-out infinite alternate}
.leaderboard-player .abyss-caustics.is-second{animation-duration:13s;animation-direction:alternate-reverse;opacity:.7}
.leaderboard-player .fx-jelly{left:var(--x);bottom:-8px;width:22px;height:34px;opacity:.95;transform:scale(var(--scale));animation:lb3-swim 7s ease-in-out var(--delay) infinite}
.leaderboard-player .fx-jelly svg{inset:0;width:100%;height:100%}
.leaderboard-player .jelly-bell{fill:rgba(94,234,212,.32);stroke:#99f6e4;stroke-width:1;transform-box:fill-box;transform-origin:50% 100%;animation:lb3-bell 1.6s ease-in-out infinite;filter:drop-shadow(0 0 3px rgba(94,234,212,.9))}
.leaderboard-player .fx-jelly-2 .jelly-bell{fill:rgba(244,114,182,.3);stroke:#fbcfe8;filter:drop-shadow(0 0 3px rgba(244,114,182,.9))}
.leaderboard-player .jelly-tentacles{fill:none;stroke:rgba(153,246,228,.7);stroke-width:.9;stroke-linecap:round;transform-box:fill-box;transform-origin:50% 0;animation:lb3-tentacle 2.4s ease-in-out infinite alternate}
.leaderboard-player .fx-jelly-2 .jelly-tentacles{stroke:rgba(251,207,232,.7)}
.leaderboard-player .abyss-mote{left:var(--x);bottom:-4px;width:2px;height:2px;border-radius:50%;background:#ccfbf1;box-shadow:0 0 3px rgba(94,234,212,.9);opacity:0;animation:lb3-rise var(--speed) linear var(--delay) infinite}
@keyframes lb3-caustic{to{transform:translate(8%,4%) scale(1.08)}}
@keyframes lb3-swim{0%,100%{transform:translateY(0) scale(var(--scale))}50%{transform:translateY(-16px) scale(var(--scale))}}
@keyframes lb3-bell{0%,100%{transform:scale(1,1)}50%{transform:scale(1.08,.86)}}
@keyframes lb3-tentacle{to{transform:skewX(8deg)}}
@keyframes lb3-rise{0%{transform:translateY(0);opacity:0}20%{opacity:.9}100%{transform:translateY(-64px);opacity:0}}

/* ===================== 传说 ===================== */
/* 事件视界：黑洞放在回放按钮左边 */
.leaderboard-player.effect-event_horizon .leaderboard-effect-art{background:radial-gradient(ellipse at 71% 50%,rgba(251,191,36,.16),transparent 40%),linear-gradient(115deg,#05040a,#0d0a14 60%,#050409)!important;box-shadow:inset 0 0 0 1px rgba(251,191,36,.22)!important}
.leaderboard-player.effect-event_horizon strong{color:#fff7e0!important;text-shadow:0 1px 2px #000,0 0 10px rgba(251,191,36,.85),0 0 20px rgba(249,115,22,.45)!important}
.leaderboard-player .eh-hole{right:21%;top:50%;width:132px;height:132px;margin-top:-66px}
.leaderboard-player .eh-lens{inset:26px;border:3px solid transparent;border-top-color:rgba(255,214,150,.9);border-bottom-color:rgba(255,190,110,.4);border-radius:50%;filter:blur(1.4px);box-shadow:0 -4px 14px rgba(251,191,36,.35)}
.leaderboard-player .eh-disc,.leaderboard-player .eh-front{inset:0;transform:rotate(-9deg) scaleY(.22)}
.leaderboard-player .eh-front{clip-path:inset(50% 0 0 0)}
.leaderboard-player .eh-disc>i,.leaderboard-player .eh-front>i{inset:0;border-radius:50%;background:conic-gradient(from 0deg,#fff7d6,#fbbf24 14%,#ea580c 32%,#7c2d12 50%,#ea580c 68%,#fbbf24 86%,#fff7d6);-webkit-mask:radial-gradient(circle,transparent 0 33%,#000 36%,#000 60%,transparent 72%);mask:radial-gradient(circle,transparent 0 33%,#000 36%,#000 60%,transparent 72%);animation:lb3-spin 3.6s linear infinite}
.leaderboard-player .eh-core{left:50%;top:50%;width:44px;height:44px;margin:-22px 0 0 -22px;border-radius:50%;background:#000;box-shadow:0 0 0 1.5px rgba(255,240,200,.95),0 0 9px 3px rgba(251,191,36,.75),0 0 24px 6px rgba(234,88,12,.4)}
.leaderboard-player .eh-infall{right:calc(21% + 66px);top:50%;width:30px;height:1.5px;border-radius:2px;background:linear-gradient(90deg,transparent,rgba(255,230,180,.95));transform-origin:100% 50%;opacity:0;animation:lb3-infall var(--speed) ease-in var(--delay) infinite}
@keyframes lb3-infall{0%{opacity:0;transform:rotate(var(--a)) translateX(-110px) scaleX(.5)}25%{opacity:.9}100%{opacity:0;transform:rotate(var(--a)) translateX(-22px) scaleX(1.2)}}

/* 樱花落：白底，右侧被一棵大樱花树的一角占满，树冠轻摆，花瓣成片往左飘。
   树冠宽度最多占行的 52%，窄表格（商店预览）里只裁掉左边稀疏的枝 */
.leaderboard-player.effect-sakura_fall{--fx-ink:#be185d;--fx-glow:rgba(244,114,182,.4)}
.leaderboard-player.effect-sakura_fall .leaderboard-effect-art{background:none!important;box-shadow:none!important}
.leaderboard-player.effect-sakura_fall strong:before,.leaderboard-player.effect-sakura_fall strong:after{content:none!important;display:none!important}
.leaderboard-player.effect-sakura_fall strong{color:#be185d!important;text-shadow:0 0 8px rgba(244,114,182,.35)!important}
.leaderboard-player .sakura-canopy{right:0;top:-6%;height:132%;width:min(640px,60%);background:url("/assets/fx-sakura-canopy.webp") right center/auto 100% no-repeat;transform-origin:100% 40%;animation:lb3-canopy 6s ease-in-out infinite alternate}
.leaderboard-player .fx-sakura{left:var(--x);top:var(--y);width:8px;height:9px;perspective:60px;opacity:0;animation:lb3-petal var(--speed) linear var(--delay) infinite}
.leaderboard-player .fx-sakura.is-near{width:14px;height:15px;filter:blur(1.1px)}
.leaderboard-player .fx-sakura.is-far{width:5px;height:6px;filter:opacity(.7)}
.leaderboard-player .fx-sakura svg{inset:0;width:100%;height:100%;animation:lb3-petal-flip calc(var(--speed) / 3) ease-in-out var(--delay) infinite}
.leaderboard-player .petal-body{fill:#f3a7c9}
.leaderboard-player .petal-vein{display:none}
.leaderboard-player .fx-sakura.is-far .petal-body{fill:#c4a6df}
@keyframes lb3-canopy{from{transform:rotate(-.5deg) scale(1)}to{transform:rotate(.45deg) scale(1.012)}}
@keyframes lb3-petal{0%{opacity:0;transform:translate(0,0) rotate(0) scale(var(--scale))}6%{opacity:1}35%{transform:translate(calc(var(--drift) * .3),calc(var(--fall) * .5)) rotate(calc(var(--spin) * .35)) scale(var(--scale))}70%{transform:translate(calc(var(--drift) * .68),calc(var(--fall) * .75)) rotate(calc(var(--spin) * .7)) scale(var(--scale))}90%{opacity:.9}100%{opacity:0;transform:translate(var(--drift),var(--fall)) rotate(var(--spin)) scale(var(--scale))}}
@keyframes lb3-petal-flip{0%{transform:rotateX(0) rotateY(0)}50%{transform:rotateX(65deg) rotateY(180deg)}100%{transform:rotateX(0) rotateY(360deg)}}

/* 星云：「星河」训练场天空沿银河拉直的一条，首尾相接地缓缓流动 */
.leaderboard-player.effect-nebula .leaderboard-effect-art{background:#0b0820!important;box-shadow:inset 0 0 0 1px rgba(244,114,182,.2)!important}
.leaderboard-player.effect-nebula strong{color:#fff!important;text-shadow:0 1px 2px #000,0 0 10px rgba(255,105,180,.8),0 0 18px rgba(99,140,255,.5)!important}
.leaderboard-player .nebula-river{left:0;top:0;height:100%;width:auto;aspect-ratio:14400/96;background:url("/assets/star-river-loop.webp") 0 0/auto 100% repeat-x;animation:lb3-river 260s linear infinite}
.leaderboard-player .nebula-shade{inset:0;background:linear-gradient(90deg,rgba(6,4,20,.62),rgba(6,4,20,.18) 30%,transparent 52%)}
.leaderboard-player .nebula-star{left:var(--x);top:var(--y);width:3px;height:3px;margin:-1.5px 0 0 -1.5px;border-radius:50%;background:#fff;box-shadow:0 0 4px 1px #fff,0 0 10px 3px rgba(255,170,215,.55);animation:lb3-twinkle var(--speed) ease-in-out var(--delay) infinite}
@keyframes lb3-river{to{transform:translateX(-50%)}}

/* PRO | 镭射：银色金属底 + 流动的彩虹光带（overlay 混合）+ 衍射细纹闪粉 + 反光 + 四芒星。
   旧样式把这一行的格子刷成深色、文字刷成浅色，这里改回深色文字 */
.leaderboard-table tbody tr:has(.effect-pro_orbit) td{color:#1e293b!important;background:#f7f8fa!important;border-color:#eef0f2!important}
.leaderboard-table tbody tr:has(.effect-pro_orbit) td strong{color:#0f172a!important}
.leaderboard-table tbody tr:has(.effect-pro_orbit) .rank{color:#6d28d9!important}
.leaderboard-player.effect-pro_orbit .leaderboard-effect-art{background:linear-gradient(105deg,#b3bdca,#eef1f6 26%,#c3cbd6 52%,#f3f5f9 76%,#bcc5d2)!important;box-shadow:inset 0 0 0 1px rgba(148,163,184,.55),inset 0 1px rgba(255,255,255,.9)!important}
.leaderboard-player.effect-pro_orbit strong{color:#1e1b4b!important;background:none!important;-webkit-text-fill-color:currentColor!important;text-shadow:0 1px 0 rgba(255,255,255,.9),0 0 8px rgba(255,255,255,.8)!important;filter:none!important;animation:none!important}
.leaderboard-player.effect-pro_orbit>div small{color:#475569!important}
.leaderboard-player.effect-pro_orbit .player-region{color:#1e293b!important;background:rgba(255,255,255,.55)!important;border-color:rgba(148,163,184,.5)!important;backdrop-filter:none!important}
.leaderboard-player .holo-rainbow{top:0;left:-40%;height:100%;width:300%;background:repeating-linear-gradient(105deg,#ff6fae 0,#ffc46b 46px,#c6ff7a 92px,#58e1ff 138px,#8f7bff 184px,#ff6fae 230px);mix-blend-mode:overlay;animation:lb3-holo-tilt 7s ease-in-out infinite alternate}
.leaderboard-player .holo-tex{inset:0;background:url("/assets/fx-holo.webp") 0 0/200px 200px;mix-blend-mode:overlay}
.leaderboard-player .holo-glare{inset:-60% -10%;background:linear-gradient(110deg,transparent 44%,rgba(255,255,255,.2) 47%,rgba(255,255,255,.85) 50%,rgba(255,255,255,.2) 53%,transparent 56%);transform:translateX(-75%);animation:lb3-holo-glare 7s ease-in-out infinite alternate}
.leaderboard-player .holo-spark{left:var(--x);top:var(--y);width:var(--s);height:var(--s);margin:calc(var(--s) / -2) 0 0 calc(var(--s) / -2);background:radial-gradient(circle,#fff 0 12%,transparent 30%),linear-gradient(90deg,transparent 44%,#fff 50%,transparent 56%),linear-gradient(0deg,transparent 44%,#fff 50%,transparent 56%);filter:drop-shadow(0 0 2px rgba(196,181,253,.9));opacity:0;animation:lb3-holo-spark var(--speed) ease-in-out var(--delay) infinite}
@keyframes lb3-holo-tilt{from{transform:translateX(0)}to{transform:translateX(-9%)}}
@keyframes lb3-holo-glare{from{transform:translateX(-75%)}to{transform:translateX(75%)}}
@keyframes lb3-holo-spark{0%,100%{opacity:0;transform:scale(.3) rotate(0)}45%{opacity:1;transform:scale(1) rotate(45deg)}60%{opacity:.2;transform:scale(.6) rotate(60deg)}}

/* PRO | 水墨山水：一卷慢慢展开的手卷。旧绢底、没骨淡墨山水横移、留白给名字、薄雾、远鸟、渔舟、朱印 */
.leaderboard-player.effect-pro_ink .leaderboard-effect-art{background:#ece2cc!important;box-shadow:inset 0 0 0 1px rgba(110,90,60,.28)!important}
.leaderboard-player.effect-pro_ink strong{color:#1f1b17!important;text-shadow:0 0 6px rgba(236,226,204,.95)!important;letter-spacing:.05em}
.leaderboard-player.effect-pro_ink>div small{color:#6b5d48!important}
.leaderboard-player.effect-pro_ink .player-region{color:#4a3f30!important;background:rgba(255,250,238,.55)!important;border-color:rgba(120,100,70,.3)!important}
.leaderboard-player .sc-paint{left:0;top:0;height:100%;width:auto;aspect-ratio:7200/120;background:url("/assets/fx-ink-scroll.webp") 0 0/auto 100% repeat-x;animation:lb3-river 320s linear infinite}
.leaderboard-player .sc-veil{inset:0;background:linear-gradient(90deg,#ece2cc 0 15%,rgba(236,226,204,.86) 25%,rgba(236,226,204,.25) 43%,transparent 58%),radial-gradient(ellipse 70% 140% at 50% 50%,transparent 60%,rgba(120,96,60,.12))}
.leaderboard-player .sc-mist{left:-40%;top:22%;width:80%;height:46%;border-radius:50%;background:radial-gradient(ellipse,rgba(246,240,226,.85),rgba(246,240,226,.35) 45%,transparent 70%);animation:lb3-sc-mist 40s ease-in-out infinite alternate}
.leaderboard-player .sc-birds{left:30%;top:14%;width:44px;height:16px;opacity:0;animation:lb3-sc-birds 48s linear infinite}
.leaderboard-player .sc-bird{left:var(--x);top:var(--y);width:calc(9px * var(--s));height:calc(4px * var(--s))}
.leaderboard-player .sc-bird svg{inset:0;width:100%;height:100%;transform-origin:50% 60%;animation:lb3-sc-flap .62s ease-in-out var(--delay) infinite alternate}
.leaderboard-player .sc-bird path{fill:none;stroke:#2a2622;stroke-width:1.1;stroke-linecap:round;stroke-linejoin:round}
.leaderboard-player .sc-seal{right:22.5%;bottom:14%;width:12px;height:12px;opacity:.88;transform:rotate(-2deg)}
.leaderboard-player .sc-seal svg{inset:0;width:100%;height:100%}
.leaderboard-player .sc-seal .seal-bg{fill:#b4231f}
.leaderboard-player .sc-seal .seal-lines{fill:none;stroke:#f5e6d8;stroke-width:1.5;stroke-linecap:square}
.leaderboard-player .sc-edge{inset:0;box-shadow:inset 0 3px 0 rgba(214,204,182,.95),inset 0 4px 0 rgba(120,100,70,.35),inset 0 -3px 0 rgba(214,204,182,.95),inset 0 -4px 0 rgba(120,100,70,.35)}
.leaderboard-player .sc-boat{left:40%;bottom:3%;width:30px;height:14px;animation:lb3-sc-boat 110s ease-in-out infinite alternate}
.leaderboard-player .sc-boat svg{inset:0;width:100%;height:100%;transform-origin:50% 80%;animation:lb3-sc-rock 4.8s ease-in-out infinite alternate}
.leaderboard-player .sc-boat .boat-hull{fill:#24211e}
.leaderboard-player .sc-boat .boat-man{fill:#24211e;stroke:#24211e;stroke-width:1.1;stroke-linejoin:round}
.leaderboard-player .sc-boat .boat-line{fill:none;stroke:rgba(36,33,30,.55);stroke-width:.6}
.leaderboard-player .sc-boat .boat-ripple{fill:none;stroke:rgba(36,33,30,.3);stroke-width:.6}
@keyframes lb3-sc-boat{from{transform:translateX(0)}to{transform:translateX(240px)}}
@keyframes lb3-sc-rock{from{transform:rotate(-2deg) translateY(0)}to{transform:rotate(2deg) translateY(.6px)}}
@keyframes lb3-sc-mist{to{transform:translateX(70%)}}
@keyframes lb3-sc-birds{0%{opacity:0;transform:translate(420px,6px)}8%{opacity:.85}50%{transform:translate(200px,-2px)}88%{opacity:.85}100%{opacity:0;transform:translate(-20px,4px)}}
@keyframes lb3-sc-flap{from{transform:scaleY(1)}to{transform:scaleY(.3) translateY(1px)}}

/* 减少动态：所有新特效停在静止画面 */
@media(prefers-reduced-motion:reduce){
  .leaderboard-player .leaderboard-effect-art *,.leaderboard-player .leaderboard-effect-art *:before,.leaderboard-player .leaderboard-effect-art *:after{animation:none!important}
  .leaderboard-player.effect-gilded_shimmer strong{animation:none!important}
  
}
