@keyframes spin{to{transform:rotate(360deg)}}
@keyframes logo-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes drift{0%,100%{transform:translate(0,0) scale(.8);opacity:.1}35%{opacity:.9}50%{transform:translate(18px,-35px) scale(1.3)}75%{opacity:.45}}
@keyframes fade-in{from{opacity:0}to{opacity:1}}
@keyframes card-in{from{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:none}}
@keyframes toast-in{from{opacity:0;transform:translateX(110%)}to{opacity:1;transform:none}}
@keyframes toast-timer{from{transform:scaleX(1);transform-origin:left}to{transform:scaleX(0);transform-origin:left}}
@keyframes pulse-glow{0%,100%{filter:drop-shadow(0 0 2px currentColor)}50%{filter:drop-shadow(0 0 12px currentColor)}}
@keyframes page-turn{from{opacity:.1;transform:rotateY(-10deg) translateX(12px)}to{opacity:1;transform:none}}
@keyframes dice-tumble-2d{0%{transform:translateX(-18px) translateY(-4px) rotate(-16deg) scale(.74);filter:blur(1.4px) brightness(1.18) drop-shadow(0 5px 3px rgb(0 0 0 / .2))}18%{transform:translateX(19px) translateY(-18px) rotate(78deg) scale(1.08);filter:blur(.8px) brightness(1.25) drop-shadow(-8px 14px 5px rgb(0 0 0 / .22))}42%{transform:translateX(-14px) translateY(5px) rotate(176deg) scale(.9);filter:blur(1px) brightness(1.04) drop-shadow(7px 7px 4px rgb(0 0 0 / .3))}66%{transform:translateX(12px) translateY(-9px) rotate(278deg) scale(1.06);filter:blur(.45px) brightness(1.18) drop-shadow(-5px 11px 4px rgb(0 0 0 / .26))}84%{transform:translateX(-4px) translateY(2px) rotate(346deg) scale(.96);filter:blur(0) brightness(1.04) drop-shadow(2px 8px 4px rgb(0 0 0 / .3))}100%{transform:none;filter:drop-shadow(0 10px 5px rgb(0 0 0 / .34))}}
@keyframes dice-table-impact{0%{transform:translateY(-9px) scale(1.08)}48%{transform:translateY(4px) scale(.93,1.06)}72%{transform:translateY(-2px) scale(1.025,.98)}100%{transform:none}}
@keyframes dice-shadow-shift{0%{transform:translateX(-65%) scale(.55);opacity:.18}30%{transform:translateX(-35%) scale(.9);opacity:.3}60%{transform:translateX(-63%) scale(.68);opacity:.2}100%{transform:translateX(-50%) scale(1);opacity:.28}}
@keyframes dice-sparkle{0%,100%{opacity:0;transform:scale(.25) rotate(0)}42%{opacity:1;transform:scale(1.25) rotate(90deg)}72%{opacity:.55;transform:scale(.8) rotate(150deg)}}
@keyframes dice-reduced-fade{from{opacity:.45;transform:scale(.96)}to{opacity:1;transform:none}}
@keyframes damage-pop{0%{opacity:0;transform:translate(-50%,0) scale(.6)}35%{opacity:1;transform:translate(-50%,-30px) scale(1.25)}100%{opacity:0;transform:translate(-50%,-65px) scale(.9)}}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
@keyframes health-flash{0%,100%{filter:none}50%{filter:brightness(1.8)}}
@keyframes candle{0%,100%{transform:scale(1) rotate(-1deg);filter:brightness(1)}50%{transform:scale(.92,1.08) rotate(2deg);filter:brightness(1.3)}}
@keyframes reward-reveal-pulse{0%{opacity:0;transform:scale(.72) rotate(-4deg);filter:brightness(1.8)}65%{transform:scale(1.06) rotate(1deg)}100%{opacity:1;transform:none;filter:none}}
@keyframes bestiary-reveal{0%{opacity:.15;transform:translateY(12px) scale(.92);filter:brightness(1.8) saturate(.5)}65%{transform:translateY(-2px) scale(1.025)}100%{opacity:1;transform:none;filter:none}}
.page-enter{animation:page-turn .28s ease}.pulse-glow{animation:pulse-glow 2s ease-in-out infinite}.shake{animation:shake .23s ease}.damage-pop{animation:damage-pop .85s ease forwards}
body.reduced-motion *,body.reduced-motion *::before,body.reduced-motion *::after{scroll-behavior:auto!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
@media (prefers-reduced-motion:reduce){*:not(.allow-motion),*::before,*::after{scroll-behavior:auto!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
