/* BNT Animasyon Kütüphanesi — sadece transform + opacity (GPU) */

@keyframes wm-mount-in {
    0%   { opacity: 0; transform: translate3d(0,12px,0) scale(.96); filter: blur(6px); }
    60%  { opacity: 1; filter: blur(0); }
    100% { opacity: 1; transform: translate3d(0,0,0) scale(1); }
}
@keyframes wm-fade-up {
    from { opacity: 0; transform: translate3d(0,8px,0); }
    to   { opacity: 1; transform: translate3d(0,0,0); }
}
@keyframes wm-pulse-border {
    0%, 100% { box-shadow: 0 0 0 0 rgba(107,107,255,0); }
    50%      { box-shadow: 0 0 0 4px rgba(107,107,255,.18); }
}
@keyframes wm-spin     { to { transform: rotate(360deg); } }
@keyframes wm-shimmer  { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } }
@keyframes wm-pop      { 0% { transform: scale(.8); opacity: 0; } 60% { transform: scale(1.05); } 100% { transform: scale(1); opacity: 1; } }
@keyframes wm-shake    { 0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)} }
@keyframes wm-glow {
    0%, 100% { filter: drop-shadow(0 0 2px var(--accent)); }
    50%      { filter: drop-shadow(0 0 12px var(--accent)); }
}
@keyframes wm-confetti-fall { to { transform: translate3d(var(--cx,0), 100vh, 0) rotate(720deg); opacity: 0; } }
@keyframes wm-progress-stripe { to { background-position: 40px 0; } }
@keyframes wm-bounce-soft { 0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)} }

.widget.widget-mounting { animation: wm-mount-in .5s cubic-bezier(.2,.8,.2,1) both; }

/* Widget hover'da HİÇ HAREKET ETMEZ — istek üzerine kaldırıldı */
.widget.widget-module { transition: outline-color .2s; }

body.layout-edit-mode .widget {
    animation: wm-pulse-border 2s ease-in-out infinite;
}

/* Refresh butonu sadece .spinning sınıfında döner (hover'da değil) */
.wm-refresh.spinning { animation: wm-spin .8s linear infinite; }

.wm-skeleton {
    background: linear-gradient(90deg, rgba(255,255,255,.04) 0%, rgba(255,255,255,.12) 50%, rgba(255,255,255,.04) 100%);
    background-size: 200% 100%;
    animation: wm-shimmer 1.4s ease-in-out infinite;
    border-radius: 8px;
}

.wm-item-enter { animation: wm-fade-up .35s cubic-bezier(.2,.8,.2,1) both; }
.wm-item-pop   { animation: wm-pop .35s both; }
.wm-shake      { animation: wm-shake .35s ease-in-out; }
.wm-glow       { animation: wm-glow 2s ease-in-out infinite; }
.wm-bounce     { animation: wm-bounce-soft 1.6s ease-in-out infinite; }

.wm-progress {
    height: 8px; border-radius: 999px;
    background: rgba(255,255,255,0.08);
    overflow: hidden; position: relative;
}
.wm-progress-fill {
    height: 100%;
    background: linear-gradient(45deg, var(--accent) 25%, rgba(255,255,255,.3) 25%, rgba(255,255,255,.3) 50%, var(--accent) 50%, var(--accent) 75%, rgba(255,255,255,.3) 75%);
    background-size: 40px 40px;
    animation: wm-progress-stripe 1s linear infinite;
    transition: width .4s ease;
}

.wm-confetti {
    position: fixed; pointer-events: none; top: -20px;
    width: 8px; height: 12px; z-index: 9999;
    animation: wm-confetti-fall var(--dur, 2.5s) linear forwards;
}

@media (prefers-reduced-motion: reduce) {
    *,*::before,*::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
    }
}
