/* ===== 返回顶部小火箭 · 慢升 → 猛窜 ===== */
#toTopRocket{position:fixed;right:30px;bottom:30px;width:52px;height:64px;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;visibility:hidden;transform:translateY(20px);transition:opacity .3s,transform .3s;z-index:9999}
#toTopRocket .base{position:absolute;left:0;top:0;width:52px;height:52px;border-radius:50%;background:#fff;border:1px solid #eee;box-shadow:0 4px 14px rgba(0,0,0,.12);transition:box-shadow .3s,opacity .25s}
#toTopRocket.show{opacity:1;visibility:visible;transform:translateY(0)}
#toTopRocket:hover .base{box-shadow:0 8px 22px rgba(0,0,0,.18)}
#toTopRocket .rocket{position:relative;width:28px;height:28px;transition:transform .4s cubic-bezier(.2,.7,.2,1);z-index:2}
#toTopRocket:hover .rocket{animation:rocketBounce 1.2s ease-in-out infinite}
#toTopRocket.flying .rocket{animation:rocketLaunch 1.4s cubic-bezier(.55,.05,.35,1) forwards}
#toTopRocket.flying .base{opacity:0;transition:opacity .3s .3s}
@keyframes rocketBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes rocketLaunch{
  0%   {transform:translateY(0)      rotate(0)     scale(1)}
  15%  {transform:translateY(2px)    rotate(-1deg) scale(1.02)}
  30%  {transform:translateY(2px)    rotate(1deg)  scale(1.02)}
  45%  {transform:translateY(0)      rotate(0)     scale(1.05)}
  60%  {transform:translateY(-28px)  rotate(0)     scale(1.05)}
  70%  {transform:translateY(-46px)  rotate(0)     scale(1.05)}
  100% {transform:translateY(-560px) rotate(0)     scale(.6);opacity:0}
}
#toTopRocket .flame{position:absolute;left:50%;bottom:-2px;width:10px;height:0;background:linear-gradient(180deg,#fff2a8 0%,#ffb347 40%,#ff5e3a 100%);border-radius:0 0 50% 50%;transform:translateX(-50%);opacity:0;filter:blur(.3px);z-index:1}
#toTopRocket .smoke{position:absolute;left:50%;bottom:-6px;width:22px;height:22px;border-radius:50%;background:radial-gradient(circle,rgba(200,200,200,.9) 0%,rgba(200,200,200,0) 70%);transform:translate(-50%,0) scale(.2);opacity:0;z-index:0}
#toTopRocket.flying .flame{animation:flameShow 1.4s cubic-bezier(.55,.05,.35,1) forwards}
#toTopRocket.flying .smoke{animation:smokePuff 1.4s ease-out forwards}
@keyframes flameShow{
  0%   {height:0;opacity:0}
  10%  {height:6px;opacity:.7}
  30%  {height:10px;opacity:.9}
  45%  {height:14px;opacity:1}
  60%  {height:26px;opacity:1}
  100% {height:34px;opacity:0}
}
@keyframes smokePuff{
  0%   {opacity:0;transform:translate(-50%,0) scale(.2)}
  40%  {opacity:.9;transform:translate(-50%,8px) scale(1)}
  100% {opacity:0;transform:translate(-50%,22px) scale(2.2)}
}
