@keyframes card-pop{0%{transform:scale(1)}40%{transform:scale(1.25);filter:brightness(1.5)}to{transform:scale(1);filter:brightness(1)}}@keyframes badge-float-up{0%{opacity:1;transform:translateY(0) scale(1)}80%{opacity:1}to{opacity:0;transform:translateY(-32px) scale(.8)}}@keyframes card-receive{0%{opacity:0;transform:translateY(-20px) scale(.7)}60%{opacity:1;transform:translateY(0) scale(1.1)}to{opacity:1;transform:translateY(0) scale(1)}}.piece-drop-in{transform-box:fill-box;transform-origin:center;animation:pieceDropIn .3s cubic-bezier(.34,1.56,.64,1) both}@keyframes pieceDropIn{0%{transform:scale(.1) translateY(-12px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}.road-drop-in{transform-box:fill-box;transform-origin:center;animation:roadDropIn .25s cubic-bezier(.34,1.56,.64,1) both}@keyframes roadDropIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}.hex-roll-flash{animation:hexFlash .9s ease-in-out 4 forwards;pointer-events:none}@keyframes hexFlash{0%{opacity:0}20%{opacity:.9}80%{opacity:.9}to{opacity:0}}@keyframes achievementIn{0%{opacity:0;transform:translate(-50%) translateY(-40px) scale(.85)}20%{opacity:1;transform:translate(-50%) translateY(0) scale(1.04)}30%{transform:translate(-50%) translateY(0) scale(1)}75%{opacity:1;transform:translate(-50%) translateY(0) scale(1)}to{opacity:0;transform:translate(-50%) translateY(-20px) scale(.95)}}.achievement-banner{animation:achievementIn 3.6s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes pieceHighlightPulse{0%,to{opacity:.3}50%{opacity:.85}}.piece-highlight{transform-box:fill-box;transform-origin:center;animation:pieceHighlightPulse 1.1s ease-in-out infinite;pointer-events:none}@keyframes connectionDotPulse{0%,to{opacity:1;box-shadow:0 0 #e8c7308c}50%{opacity:.5;box-shadow:0 0 0 5px #e8c73000}}.connection-banner-dot{width:9px;height:9px;border-radius:50%;background:#e8c730;flex-shrink:0;animation:connectionDotPulse 1.2s ease-in-out infinite}@keyframes tradeDotPulse{0%,to{opacity:.18;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}.trade-pulse-dot{display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--ui-text-muted);animation:tradeDotPulse 1.3s ease-in-out infinite}
