/* ── Animations ─────────────────────────────────────────────────────────────── */
@keyframes scan-line {
    0%   { left: -100%; }
    100% { left: 100%; }
}

@keyframes glow-pulse {
    0%, 100% { opacity: 1; }
    50%       { opacity: 0.5; }
}

@keyframes grid-drift {
    0%   { background-position: 0 0; }
    100% { background-position: 60px 60px; }
}

@keyframes fade-in-up {
    from { opacity: 0; transform: translateY(20px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes typewriter-cursor {
    0%, 100% { opacity: 1; }
    50%       { opacity: 0; }
}

@keyframes lightbeam {
    0%   { transform: translateX(-100vw) skewX(-15deg); opacity: 0; }
    10%  { opacity: 0.4; }
    90%  { opacity: 0.4; }
    100% { transform: translateX(200vw) skewX(-15deg); opacity: 0; }
}

@keyframes border-pulse {
    0%, 100% { box-shadow: 0 0 4px var(--glow), 0 0 8px var(--glow); }
    50%       { box-shadow: 0 0 12px var(--glow), 0 0 30px var(--glow); }
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

/* ── Applied classes ────────────────────────────────────────────────────────── */
.anim-fade-up   { animation: fade-in-up 0.6s ease-out both; }
.anim-pulse     { animation: glow-pulse 2s ease-in-out infinite; }
.anim-border    { animation: border-pulse 2s ease-in-out infinite; }
.spinner {
    display: inline-block;
    width: 24px; height: 24px;
    border: 2px solid var(--border);
    border-top-color: var(--accent);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}
