/* Entrance & loading animation primitives. Ink settling — fade plus a short rise,
   never scale-from-zero, never bounce. Everything here honours prefers-reduced-motion. */
@keyframes yun-rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes yun-fade{from{opacity:0}to{opacity:1}}
@keyframes yun-ink-wash{from{opacity:0;clip-path:inset(0 100% 0 0)}to{opacity:1;clip-path:inset(0 0 0 0)}}
@keyframes yun-shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@keyframes yun-pulse{0%,100%{opacity:.55}50%{opacity:.9}}

:root{
--stagger-step:70ms; /* @kind other */
--dur-skeleton:1500ms; /* @kind other */
}

/* Skeleton: a warm paper sheen moving left across a sunken block. */
.yun-skeleton{background:var(--paper-200);background-image:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.72) 50%,transparent 100%);background-size:200% 100%;background-repeat:no-repeat;animation:yun-shimmer var(--dur-skeleton) linear infinite;border-radius:var(--radius-xs)}
.yun-skeleton-ink{background:var(--ink-700);background-image:linear-gradient(90deg,transparent 0%,rgba(246,240,229,.14) 50%,transparent 100%)}

@media (prefers-reduced-motion:reduce){
.yun-skeleton{animation:none;background-image:none}
[data-yun-reveal]{opacity:1!important;transform:none!important}
}
