/* ============================================================
   Ziatan — Keyframes + utility motion classes
   GSAP handles most choreography; this file holds CSS-only
   loops (shimmer, radar spin, dot pulse, gradient drift).
   ============================================================ */

/* Skeleton shimmer sweep */
@keyframes ztShimmer {
    0%   { background-position: -200% 0; }
    100% { background-position: 200% 0; }
}

/* Radar sweep in the empty state */
@keyframes ztRadarSpin {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
}

/* Live-data dot pulse in the eyebrow */
@keyframes ztPulseDot {
    0%, 100% {
        box-shadow: 0 0 0 0 rgba(243,107,31,0.45), 0 0 12px rgba(243,107,31,0.55);
        transform: scale(1);
    }
    50% {
        box-shadow: 0 0 0 8px rgba(243,107,31,0.0), 0 0 18px rgba(243,107,31,0.65);
        transform: scale(1.05);
    }
}

/* Button spinner */
@keyframes ztSpin {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
}

/* Slow gradient drift on the hero bg — runs only when JS isn't paused */
@keyframes ztGradDrift {
    0%   { transform: translate3d(0, 0, 0) scale(1); }
    50%  { transform: translate3d(-3%, 2%, 0) scale(1.08); }
    100% { transform: translate3d(0, 0, 0) scale(1); }
}
.zt-bg-grad {
    animation: ztGradDrift 22s ease-in-out infinite;
}

/* Subtle float for the orbs as a CSS-only fallback if GSAP hasn't kicked in yet */
@keyframes ztOrbFloatA {
    0%, 100% { transform: translate3d(0, 0, 0); }
    50%      { transform: translate3d(6%, -4%, 0); }
}
@keyframes ztOrbFloatB {
    0%, 100% { transform: translate3d(0, 0, 0); }
    50%      { transform: translate3d(-7%, 5%, 0); }
}
@keyframes ztOrbFloatC {
    0%, 100% { transform: translate3d(0, 0, 0); }
    50%      { transform: translate3d(4%, -6%, 0); }
}
.zt-bg-orb-magenta { animation: ztOrbFloatA 14s ease-in-out infinite; }
.zt-bg-orb-blue    { animation: ztOrbFloatB 18s ease-in-out infinite; }
.zt-bg-orb-orange  { animation: ztOrbFloatC 16s ease-in-out infinite; }

/* Reveal helpers — JS toggles .is-in to play */
.zt-fade-up {
    opacity: 0;
    transform: translate3d(0, 24px, 0);
    transition: opacity 0.7s var(--t-power), transform 0.7s var(--t-power);
    will-change: transform, opacity;
}
.zt-fade-up.is-in {
    opacity: 1;
    transform: none;
}

/* Hover lift utility */
.zt-lift {
    transition: transform var(--t-fast), box-shadow var(--t-fast);
    will-change: transform;
}
.zt-lift:hover {
    transform: translateY(-2px);
}

/* Focus visible polish */
body.ziatan-search :focus-visible {
    outline: 2px solid var(--accent-primary);
    outline-offset: 3px;
    border-radius: 6px;
}
body.ziatan-search button:focus-visible,
body.ziatan-search a:focus-visible {
    outline-color: var(--accent-primary-hi);
}

/* Cursor for magnetic-tagged elements */
[data-magnetic] { cursor: pointer; }

/* Header SVG underline reveal anchor — JS draws stroke-dashoffset */
.zt-tier-header__underline path {
    stroke-dasharray: 400;
    stroke-dashoffset: 400;
}
.zt-tier-header.is-drawn .zt-tier-header__underline path {
    stroke-dashoffset: 0;
    transition: stroke-dashoffset 1.1s cubic-bezier(0.16, 1, 0.3, 1);
}
