/* Avatar float */
@keyframes float {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-8px); }
}

/* Avatar conic-gradient rotation via @property */
@property --avatar-angle {
    syntax: '<angle>';
    initial-value: 0deg;
    inherits: false;
}

@keyframes avatarSpin {
    to { --avatar-angle: 360deg; }
}

/* Floating decoration elements around avatar */
@keyframes decoDrift {
    0%, 100% { opacity: 0; transform: translateY(0) scale(0.8); }
    50% { opacity: 0.75; transform: translateY(-8px) scale(1); }
}

/* Timeline latest dot — outward ripple */
@keyframes timelineDotPulse {
    0%   { box-shadow: 0 0 0 2px var(--accent-pink), 0 0 0 4px rgba(255, 183, 178, 0.40); }
    70%  { box-shadow: 0 0 0 2px var(--accent-pink), 0 0 0 14px rgba(255, 183, 178, 0); }
    100% { box-shadow: 0 0 0 2px var(--accent-pink), 0 0 0 4px rgba(255, 183, 178, 0); }
}

/* Content fade-up */
.posts-group {
    animation: fadeUp 0.5s var(--ease-soft);
}

@keyframes fadeUp {
    from { opacity: 0; transform: translateY(12px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes slideDown {
    from { opacity: 0; transform: translateY(-10px); }
    to { opacity: 1; transform: translateY(0); }
}

/* Status fade */
.status-fade {
    animation: statusFade 0.5s ease;
}

@keyframes statusFade {
    0% { opacity: 0; transform: translateY(5px); }
    100% { opacity: 1; transform: translateY(0); }
}

/* Pulse dots */
@keyframes pulse {
    0% { box-shadow: 0 0 0 0 rgba(102, 187, 106, 0.4); }
    70% { box-shadow: 0 0 0 8px rgba(102, 187, 106, 0); }
    100% { box-shadow: 0 0 0 0 rgba(102, 187, 106, 0); }
}

@keyframes pulse-orange {
    0% { box-shadow: 0 0 0 0 rgba(255, 112, 67, 0.4); }
    70% { box-shadow: 0 0 0 8px rgba(255, 112, 67, 0); }
    100% { box-shadow: 0 0 0 0 rgba(255, 112, 67, 0); }
}

@keyframes pulse-purple {
    0% { box-shadow: 0 0 0 0 rgba(171, 71, 188, 0.4); }
    70% { box-shadow: 0 0 0 8px rgba(171, 71, 188, 0); }
    100% { box-shadow: 0 0 0 0 rgba(171, 71, 188, 0); }
}

@keyframes pulse-blue {
    0% { box-shadow: 0 0 0 0 rgba(66, 165, 245, 0.4); }
    70% { box-shadow: 0 0 0 8px rgba(66, 165, 245, 0); }
    100% { box-shadow: 0 0 0 0 rgba(66, 165, 245, 0); }
}

/* Cherry blossom petals */
.petal {
    position: fixed;
    top: -20px;
    width: 12px;
    height: 12px;
    background: var(--accent-pink);
    border-radius: 50% 0 50% 50%;
    opacity: 0;
    pointer-events: none;
    z-index: 998;
    animation: petalFall linear forwards;
    will-change: transform, opacity;
}

@keyframes petalFall {
    0% { opacity: 0; transform: translateX(0) rotate(0deg) scale(0.8); }
    10% { opacity: 0.6; }
    90% { opacity: 0.4; }
    100% { opacity: 0; transform: translateX(var(--drift)) rotate(var(--spin)) scale(0.4); top: 105vh; }
}
