/* Show card and filter surfaces immediately. Only the gray decorations use
   this inherited timer; removing a fast loader prevents them from flashing. */
.evi-filter-loading[aria-busy='true'],
[data-standings-loading]:not([hidden]),
[data-match-loading]:not([hidden]),
.schedule-skeleton,
[data-catalog-loading]:not([hidden]),
[data-summary-loading]:not([hidden]),
[data-team-summary-loading]:not([hidden]),
[data-home-favorites-skeleton]:not([hidden]),
.home-tip-match-skeleton,
.tippspiel-skeleton:not([hidden]),
[data-events-loading]:not([hidden]),
[data-odds-loading]:not([hidden]) {
  --evi-loading-decoration-visibility: hidden;
  animation: evi-loading-reveal 0s linear 300ms forwards;
}

.evi-filter-loading[aria-busy='true'] .evi-filter-loading-slot::after,
.evi-filter-skeleton::after,
.match-card-skeleton-group,
.match-card-skeleton-logo,
.match-card-skeleton-name,
.match-card-skeleton-score,
.match-card-skeleton-meta,
.match-card-skeleton-phase,
.schedule-skeleton-heading,
.standings-skeleton-title,
.standings-skeleton-head,
.standings-skeleton-rank,
.standings-skeleton-logo,
.standings-skeleton-name,
.standings-skeleton-stat,
.standings-skeleton-card::after,
.evi-skeleton-player,
.evi-skeleton-row,
.evi-skeleton-line,
.evi-skeleton-logo,
.evi-skeleton-card::after,
.evi-skeleton-player::after,
.evi-skeleton-row::after,
.team-summary-skeleton,
.home-favorite-skeleton-logo,
.home-favorite-skeleton-rank,
.home-favorite-skeleton-copy > span,
.home-favorite-skeleton-facts > span,
.home-tip-skeleton-meta,
.home-tip-skeleton-team,
.home-tip-skeleton-score,
.home-tip-skeleton-action,
.tippspiel-skeleton-badge,
.tippspiel-skeleton-name,
.tippspiel-skeleton-meta,
.tippspiel-skeleton-copy,
.skeleton-line,
.match-odds-skeleton {
  visibility: var(--evi-loading-decoration-visibility, visible);
}

/* The timer has no motion and also applies when leaf shimmer is disabled. */
@keyframes evi-loading-reveal {
  to { --evi-loading-decoration-visibility: visible; }
}
