/* Skeleton Loading Animation */
@keyframes skeleton-shimmer {
    0% {
        transform: translateX(-100%);
    }

    100% {
        transform: translateX(100%);
    }
}

/* Image Wrapper Skeleton State */
.img-skeleton-wrapper {
    position: relative;
    background-color: var(--overlay-light);
    /* Semantic blue-gray placeholder */
    overflow: hidden !important;
    /* Ensure shimmer doesn't spill */
}

/* The shimmer effect */
.img-skeleton-wrapper::before {
    content: "";
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: linear-gradient(90deg,
            transparent,
            var(--border-light),
            transparent);
    transform: translateX(-100%);
    animation: skeleton-shimmer 2s infinite;
    z-index: 1;
    pointer-events: none;
}

/* The image inside starts hidden/transparent */
.img-skeleton-wrapper img {
    opacity: 0;
    transition: opacity 0.5s ease-in-out;
    position: relative;
    z-index: 2;
}

/* Loaded state: remove skeleton, show image */
.img-skeleton-wrapper.loaded::before {
    display: none;
    animation: none;
}

.img-skeleton-wrapper.loaded {
    background-color: transparent;
}

.img-skeleton-wrapper.loaded img {
    opacity: 1;
}

/* Text Skeleton (Optional Usage) */
.skeleton-text {
    color: transparent !important;
    background-color: var(--overlay-light);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    user-select: none;
}

.skeleton-text::before {
    content: "";
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: linear-gradient(90deg, transparent, var(--border-light), transparent);
    transform: translateX(-100%);
    animation: skeleton-shimmer 2s infinite;
}