/**
 * Hybrid shortcode runtime styles.
 * Skeletons, deferred background placeholders, semantic image helpers, reduced-motion.
 * Scoped — no html/body global mutations.
 *
 * OWNERSHIP: resources/css/zype_hybrid_runtime.css
 */

.zype-hybrid-bg-deferred {
  background-color: #1a1a1a;
  background-image: none !important;
}

.zype-hybrid-bg-deferred.zype-grid-video-card__thumbnail,
.zype-grid-video-card__thumbnail.zype-hybrid-bg-deferred {
  min-height: 1px;
}

/* Stable aspect ratios for catalog cards outside carousel-scoped CSS */
.zype-playlist-grid-shortcode .zype-grid-video-card--landscape .zype-grid-video-card__thumbnail,
.zype-playlist-grid-shortcode .zype-grid-video-card.zype-landscape .zype-grid-video-card__thumbnail,
.zype-playlist-grid-shortcode .zype-grid-video-card__media--landscape {
  aspect-ratio: 16 / 9;
}

.zype-playlist-grid-shortcode .zype-grid-video-card--poster .zype-grid-video-card__thumbnail,
.zype-playlist-grid-shortcode .zype-grid-video-card.zype-poster .zype-grid-video-card__thumbnail,
.zype-playlist-grid-shortcode .zype-grid-video-card__media--poster {
  aspect-ratio: 2 / 3;
}

/* Noscript-only fallback image for deferred background / semantic cards */
.zype-hybrid-bg-noscript,
.zype-hybrid-img-noscript {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  position: absolute;
  inset: 0;
}

.zype-hybrid-img-deferred:not([src]) {
  visibility: hidden;
}

.zype-hybrid-img-ready {
  visibility: visible;
}

.zype-hybrid-img-fallback,
.zype-hybrid-img-error {
  /* Geometry owned by media wrapper; keep cover crop. */
  object-fit: cover;
}

/* Player / channel shell skeleton — only when no useful SSR content */
.zype-hybrid-skeleton {
  position: relative;
  display: block;
  width: 100%;
  overflow: hidden;
  background: #141414;
  color: transparent;
  pointer-events: none;
}

.zype-hybrid-skeleton--player,
.zype-hybrid-skeleton--channel {
  aspect-ratio: 16 / 9;
}

.zype-hybrid-skeleton--carousel {
  min-height: 10.5rem;
  border-radius: 0.25rem;
}

.zype-hybrid-skeleton--grid {
  min-height: 12rem;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
  gap: 0.75rem;
}

.zype-hybrid-skeleton__card {
  aspect-ratio: 16 / 9;
  border-radius: 0.25rem;
  background: #222;
}

.zype-hybrid-skeleton__status {
  position: absolute;
  inset: 50% auto auto 50%;
  transform: translate(-50%, -50%);
  margin: 0;
  padding: 0.35rem 0.75rem;
  border-radius: 0.25rem;
  background: rgba(0, 0, 0, 0.55);
  color: #f2f2f2;
  font-size: 0.875rem;
  line-height: 1.3;
  white-space: nowrap;
  pointer-events: none;
}

.zype-hybrid-skeleton.is-animated::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(255, 255, 255, 0.06) 45%,
    transparent 90%
  );
  transform: translateX(-100%);
  animation: zype-hybrid-shimmer 1.4s ease-in-out infinite;
}

@keyframes zype-hybrid-shimmer {
  100% {
    transform: translateX(100%);
  }
}

.zype-hybrid-error [data-zype-hybrid-error-msg] {
  margin: 0.5rem 0;
  color: #b00020;
  font-size: 0.875rem;
}

@media (prefers-reduced-motion: reduce) {
  .zype-hybrid-skeleton.is-animated::before {
    animation: none;
    display: none;
  }

  .zype-hybrid-bg-deferred {
    background-color: #1a1a1a;
  }

  .zype-playlist-grid-shortcode .zype-grid-video-card__image,
  .zype-carousel .zype-grid-video-card__image {
    transition: none;
  }
}
