/* ============================================================
   animations.css — Animasi Tambahan & AOS Custom
   ============================================================ */

/* AOS tweak agar lebih smooth */
[data-aos] {
    transition-timing-function: cubic-bezier(.25, .8, .25, 1);
}

/* Light theme overrides tambahan */
[data-theme="light"] .hero-blob { opacity: .22; }
[data-theme="light"] .float-icon { opacity: .5; }
[data-theme="light"] .portfolio-overlay { background: linear-gradient(to top, rgba(244, 246, 255, .9), rgba(139, 92, 246, .12) 60%, transparent); }
[data-theme="light"] .timeline-dot { box-shadow: 0 0 0 5px var(--bg-secondary), 0 0 24px rgba(139, 92, 246, .45); }
[data-theme="light"] .code-window { color: var(--text-primary); }
[data-theme="light"] .code-body { color: #0b0f24; }

/* Glow text effect */
.glow-text { text-shadow: 0 0 20px rgba(0, 229, 255, .6); }

/* Shimmer line bawah judul section */
.section-title::after {
    content: '';
    display: block;
    width: 70px;
    height: 3px;
    margin: .9rem auto 0;
    border-radius: 3px;
    background: var(--gradient-main);
    animation: lineGrow 1.2s cubic-bezier(.2, .8, .2, 1);
}
@keyframes lineGrow { from { width: 0; } to { width: 70px; } }

/* Scroll reveal fallback (jika JS gagal load) */
.js-fallback [data-aos] { opacity: 1 !important; transform: none !important; }

/* Reduce motion untuk aksesibilitas & performa */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
        scroll-behavior: auto !important;
    }
    [data-aos] { opacity: 1 !important; transform: none !important; }
}

/* Modal image zoom cursor */
.gallery-img-preview { cursor: zoom-in; }

/* Animasi pulse khusus status online */
@keyframes statusGlow {
    0%, 100% { box-shadow: 0 0 8px var(--neon-green); }
    50% { box-shadow: 0 0 18px var(--neon-green); }
}
.status-pulse, .online-dot { animation: pulseDot 1.6s infinite, statusGlow 1.6s infinite; }

/* Partikel canvas selalu di bawah konten */
canvas.hero-particles { position: absolute; inset: 0; }
