/**
 * WP19 — Motion & skeleton atoms
 * Load AFTER theme.bundle (motion tokens already in :root).
 * Global reduced-motion · shared skeleton shimmer · transition helpers.
 */

.exchange-app {
  --ex-motion-fast: var(--theme-duration-fast, 100ms);
  --ex-motion-default: var(--theme-duration-default, 150ms);
  --ex-motion-skeleton: var(--theme-duration-skeleton, 1200ms);
  --ex-ease: var(--theme-ease-default, ease-out);
}

/* Prefer tokenized transitions on interactive chrome */
.exchange-app .ex-header-cta,
.exchange-app .ex-mobile-nav__item,
.exchange-app .ex-sidebar-nav-list li a,
.exchange-app .ex-live-cat-strip__item {
  transition: var(--theme-transition-hover, var(--theme-transition-colors));
}

/* Skeleton atom */
.exchange-app .ex-skeleton {
  display: block;
  position: relative;
  overflow: hidden;
  background: color-mix(in srgb, var(--ex-border, #cbd5e1) 55%, var(--ex-surface, #f8fafc));
  border-radius: var(--theme-radius-chip, 4px);
}

.exchange-app .ex-skeleton::after {
  content: "";
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(
    90deg,
    transparent 0%,
    color-mix(in srgb, #fff 55%, transparent) 50%,
    transparent 100%
  );
  animation: ex-skeleton-shimmer var(--ex-motion-skeleton) var(--theme-ease-in-out, ease-in-out) infinite;
}

html.theme-dark .exchange-app .ex-skeleton,
.theme-dark .exchange-app .ex-skeleton {
  background: color-mix(in srgb, var(--ex-border, #334155) 45%, var(--ex-surface, #0f172a));
}

html.theme-dark .exchange-app .ex-skeleton::after,
.theme-dark .exchange-app .ex-skeleton::after {
  background: linear-gradient(
    90deg,
    transparent 0%,
    color-mix(in srgb, #fff 12%, transparent) 50%,
    transparent 100%
  );
}

.exchange-app .ex-skeleton--text {
  height: 0.75rem;
  width: 100%;
}

.exchange-app .ex-skeleton--title {
  height: 1rem;
  width: 60%;
}

.exchange-app .ex-skeleton--odds {
  height: var(--theme-odds-h-desktop, 36px);
  width: 100%;
  border-radius: var(--theme-radius-odds, 0);
}

.exchange-app .ex-skeleton--avatar {
  width: 2rem;
  height: 2rem;
  border-radius: var(--theme-radius-pill, 999px);
}

.exchange-app .ex-skeleton-row {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) repeat(3, minmax(3rem, 4.5rem));
  gap: 0.35rem;
  align-items: center;
  padding: 0.35rem 0.5rem;
}

@keyframes ex-skeleton-shimmer {
  100% {
    transform: translateX(100%);
  }
}

/* Global reduced-motion — kill decorative animation, keep instant state changes */
@media (prefers-reduced-motion: reduce) {
  .exchange-app .ex-skeleton::after,
  .exchange-app [class*="flash"],
  .exchange-app [class*="pulse"],
  .exchange-app [class*="shine"],
  .exchange-app .ex-indibet-list__live-badge::after,
  .exchange-app .ex-live-dot,
  .exchange-app .ex-preloader * {
    animation: none !important;
    transition: none !important;
  }

  .exchange-app .ex-skeleton::after {
    display: none;
  }
}

/* Schedule sport-tab loading */
.exchange-app .ex-schedule-skeleton {
  padding: 0.25rem 0 0.5rem;
}

.exchange-app .ex-schedule-skeleton .ex-skeleton-row + .ex-skeleton-row {
  margin-top: 0.2rem;
}

.exchange-app.is-schedule-loading .ex-live-cat-strip,
.exchange-app [data-ex-live-schedule].is-schedule-loading .ex-live-cat-strip,
.exchange-app [data-ex-fixtures-schedule].is-schedule-loading .ex-live-cat-strip,
.exchange-app [data-ex-results-schedule].is-schedule-loading .ex-live-cat-strip {
  pointer-events: none;
  opacity: 0.85;
}
