/**
 * انیمیشن‌ها: ظاهر شدن هنگام اسکرول (IntersectionObserver از reveal.js
 * کلاس is-in را اضافه می‌کند) + پریلودر
 */

.reveal {
    opacity: 0; transform: translateY(32px);
    transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out);
}
.reveal.is-in { opacity: 1; transform: none; }

.reveal-scale { opacity: 0; transform: scale(.92); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-spring); }
.reveal-scale.is-in { opacity: 1; transform: none; }

.reveal-right { opacity: 0; transform: translateX(36px); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
.reveal-right.is-in { opacity: 1; transform: none; }
.reveal-left { opacity: 0; transform: translateX(-36px); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
.reveal-left.is-in { opacity: 1; transform: none; }

/* استگر برای گروهی از فرزندان — از data-stagger روی والد پر می‌شود */
.reveal[data-d="1"] { transition-delay: .08s; }
.reveal[data-d="2"] { transition-delay: .16s; }
.reveal[data-d="3"] { transition-delay: .24s; }
.reveal[data-d="4"] { transition-delay: .32s; }
.reveal[data-d="5"] { transition-delay: .40s; }
.reveal[data-d="6"] { transition-delay: .48s; }

@media (prefers-reduced-motion: reduce) {
    .reveal, .reveal-scale, .reveal-right, .reveal-left { opacity: 1; transform: none; transition: none; }
}

/* ═══════════ پریلودر ═══════════ */
.preloader {
    position: fixed; inset: 0; z-index: var(--z-preloader); background: var(--bg-void);
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--sp-6);
    transition: opacity .7s var(--ease-out), visibility .7s var(--ease-out);
}
.preloader.is-done { opacity: 0; visibility: hidden; pointer-events: none; }

.preloader-mark { width: 64px; height: 64px; position: relative; }
.preloader-mark svg { width: 100%; height: 100%; }
.preloader-mark .ring {
    fill: none; stroke: var(--gold-500); stroke-width: 2; stroke-linecap: round;
    stroke-dasharray: 180; stroke-dashoffset: 180;
    animation: ringDraw 1.6s var(--ease-out) forwards;
}
@keyframes ringDraw { to { stroke-dashoffset: 0; } }

.preloader-bar { width: 200px; height: 2px; background: var(--line-2); border-radius: 2px; overflow: hidden; }
.preloader-bar span { display: block; height: 100%; width: 0%; background: linear-gradient(90deg, var(--gold-700), var(--gold-300)); transition: width .25s var(--ease-out); }
.preloader-pct { font-size: 12px; color: var(--ink-700); letter-spacing: .1em; font-variant-numeric: tabular-nums; }

@media (prefers-reduced-motion: reduce) {
    .preloader { transition: none; }
}
