/* Loading skeletons + page transitions
   Light · Elegant · Classy
   ============================================================ */

/* Shimmering skeleton */
.dm-skel {
    background: linear-gradient(90deg,
        var(--dm-ivory) 0%,
        rgba(212,168,67,0.10) 50%,
        var(--dm-ivory) 100%);
    background-size: 200% 100%;
    animation: dmShimmer 1.4s linear infinite;
    border-radius: var(--dm-radius-sm);
}
@keyframes dmShimmer {
    0%   { background-position:  200% 0; }
    100% { background-position: -200% 0; }
}
.dm-skel--text { height: 14px; margin-bottom: 8px; }
.dm-skel--text:last-child { width: 60%; }
.dm-skel--img { aspect-ratio: 1; width: 100%; }
.dm-skel--avatar { width: 40px; height: 40px; border-radius: 50%; }
.dm-skel--card {
    padding: var(--dm-space-3);
    background: #fff;
    border: 1px solid var(--dm-line-gold);
    border-radius: var(--dm-radius-md);
}
.dm-skel--card .dm-skel--img { margin-bottom: 12px; }

/* Generic loading state for async grids */
.is-loading > * { opacity: 0.4; pointer-events: none; }
.is-loading::after {
    content: '';
    display: block;
    width: 28px; height: 28px;
    border: 3px solid var(--dm-line-gold);
    border-top-color: var(--dm-saffron);
    border-radius: 50%;
    margin: 32px auto;
    animation: dmSpin 0.7s linear infinite;
}
@keyframes dmSpin { to { transform: rotate(360deg); } }

/* Page transition fade-in */
body { opacity: 0; transition: opacity 280ms var(--dm-ease); animation: dmBodyReveal 600ms 250ms var(--dm-ease) forwards; }
body.dm-loaded { opacity: 1; animation: none; }
/* Fallback: always show page after 600ms even without JS */
@keyframes dmBodyReveal { from { opacity: 0; } to { opacity: 1; } }

/* Slow mandala rotation in hero */
.dm-hero__visual-img { animation: dmSpinSlow 60s linear infinite; }
@keyframes dmSpinSlow { to { transform: rotate(360deg); } }

/* Mandala bg subtle counter-rotation */
.dm-mandala-bg::before { animation: dmSpinReverse 90s linear infinite; }
@keyframes dmSpinReverse { from { transform: rotate(0); } to { transform: rotate(-360deg); } }

/* Reduced motion: pause everything */
@media (prefers-reduced-motion: reduce) {
    body { opacity: 1 !important; transition: none !important; }
    .dm-hero__visual-img,
    .dm-mandala-bg::before,
    .dm-skel,
    .is-loading::after,
    .dm-hero__glow { animation: none !important; }
}
