/* Gates-paced handoffs on the existing six-reel, four-row presentation. */
.reel-ghost{position:relative;overflow:hidden;background:transparent;border:0}
.reel-symbol-cell{position:absolute!important;inset:0!important;width:100%;height:100%;margin:0;pointer-events:none}
.reel-window .tall-emblem{position:absolute;pointer-events:none}
.board .symbol{transition:none;backface-visibility:hidden}
.tile.converted .symbol{filter:none}.tile .reveal-old{z-index:2;filter:none!important;pointer-events:none;will-change:opacity,transform}
.tile.spell-target{border-color:#8afcbd;box-shadow:inset 0 0 20px #62ffc133}
.boost-impact{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse,#ffeaa777,transparent 75%);border:1px solid #ffe7a155;z-index:5;opacity:0;will-change:opacity}
.multiplier,.tall-emblem em{transform-origin:center}
.expanding-wild{will-change:clip-path}.expanding-wild::after{animation-duration:calc(480ms * var(--spell-speed,1))}
.spell-projectile{will-change:offset-distance,opacity;box-shadow:0 0 8px 3px #aaffb866,0 0 18px 6px #8effb622}
.spell-projectile.gold{box-shadow:0 0 8px 3px #ffe18188,0 0 18px 6px #ffcf7033}
.spell-award{will-change:transform,opacity}
.wizard-casting .wizard-body,.wizard-casting .wizard-staff,.wizard-casting .wizard-orb,.wizard-casting .wizard-hand,.wizard-casting .wizard-seal{animation-duration:calc(460ms * var(--spell-speed,1));animation-timing-function:cubic-bezier(.22,.65,.3,1)}
.wizard-casting .wizard-body{animation-name:wizard-flow}.wizard-casting .wizard-staff{animation-name:staff-flow}.wizard-casting .wizard-orb{animation-name:orb-flow}.wizard-casting .wizard-hand{animation-name:hand-flow}.wizard-casting .wizard-seal{animation-name:seal-flow}
@keyframes wizard-flow{0%,100%{transform:translate3d(0,0,0) rotate(0)}44%{transform:translate3d(-1px,-1px,0) rotate(-.3deg)}}
@keyframes staff-flow{0%,100%{transform:rotate(0)}42%{transform:rotate(-1.1deg)}}
@keyframes orb-flow{0%,100%{opacity:.3;transform:scale(1)}42%{opacity:.8;transform:scale(1.1)}}
@keyframes hand-flow{0%,100%{opacity:0;transform:scale(.95)}44%{opacity:.8;transform:scale(1.08)}}
@keyframes seal-flow{0%,100%{opacity:0;transform:scale(.94) rotate(-6deg)}48%{opacity:.55;transform:scale(1.02) rotate(0)}}
@media(prefers-reduced-motion:reduce){.wizard-casting .wizard-body,.wizard-casting .wizard-staff,.wizard-casting .wizard-orb,.wizard-casting .wizard-hand,.wizard-casting .wizard-seal{animation:none}.spell-projectile,.spell-award,.reveal-old{will-change:auto}}

/* Full-screen receipts already animate their children; avoid moving the viewport too. */
dialog.bonus-dialog[open]{animation:none}
.celebration-content{contain:layout style}
.celebration-title,.bonus-outro .win-heading{filter:none;will-change:transform,opacity}
.win-celebration .result-total,.bonus-outro .result-total{filter:none;text-shadow:0 8px #000d;font-variant-numeric:tabular-nums}
/* Keep winning art stable; pulse one cheap overlay instead of repainting tile shadows. */
.tile.winner{animation:none}
.tile.winner::after{box-shadow:inset 0 0 18px #e7c67544;animation:winner-glow 1.8s ease-in-out infinite;will-change:opacity}
@keyframes winner-glow{0%,100%{opacity:.45}50%{opacity:1}}
@media(prefers-reduced-motion:reduce){.tile.winner::after{animation:none;will-change:auto}}

.celebration-title.raster-banner,.win-heading.raster-banner{background:none}
.raster-banner canvas{display:block;width:100%;height:100%;pointer-events:none}
