/* Gallery hover overlay effects */
.gallery-image-container {
    position: relative;
    overflow: hidden;
    cursor: pointer;
  }
  
  .gallery-image-container img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
  
  .gallery-hover-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(0, 0, 0, 0);
    transition: background-color 300ms ease-in-out;
    pointer-events: none;
  }
  
  .gallery-image-container:hover .gallery-hover-overlay {
    background-color: rgba(0, 0, 0, 0.2);
  }
  
  /* Carousel navigation arrows */
  .homerunner-carousel-arrow {
    color: rgba(0, 0, 0, 0.8);
    opacity: 0.5;
    background-color: rgba(255, 255, 255, 0.3);
    border: 1px solid rgba(229, 231, 235, 0.3);
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
  }
  
  .homerunner-carousel-arrow:hover {
    opacity: 1;
    /* background-color: rgba(255, 255, 255, 1); */
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
  }
  
  .homerunner-carousel-arrow:disabled {
    background-color: rgba(255, 255, 255, 0.6);
    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
  }
  
  /* Full screen modal animations */
  .fullscreen-modal {
    position: fixed;
    inset: 0;
    z-index: 50;
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1rem;
    transform: translateY(100%);
    transition: transform 400ms cubic-bezier(0.4, 0, 0.2, 1);
  }
  
  .fullscreen-modal.open {
    transform: translateY(0);
  }
  
  .fullscreen-modal.closing {
    transform: translateY(100%);
  }
  
  /* Lightbox image transition animations */
  .homerunner-gallery-lightbox-image-container {
    position: relative;
    overflow: hidden;
  }
  
  .homerunner-gallery-lightbox-image {
    transition: opacity 300ms ease-in-out, transform 300ms ease-in-out;
    will-change: opacity, transform;
  }
  
  .homerunner-gallery-lightbox-image.fade-out {
    opacity: 0;
    /* transform: scale(0.95); */
  }
  
  .homerunner-gallery-lightbox-image.fade-in {
    opacity: 1;
    /* transform: scale(1); */
  }
  
  /* Counter and caption animations */
  .homerunner-gallery-lightbox-counter,
  .homerunner-gallery-lightbox-caption {
    transition: opacity 200ms ease-in-out;
  }
  
  .homerunner-gallery-lightbox-counter.updating,
  .homerunner-gallery-lightbox-caption.updating {
    opacity: 0.7;
  }
  
  /* Skeleton loading animations - React Loading Skeleton style */
  @keyframes homerunner-skeleton-slide {
    100% {
      transform: translateX(100%);
    }
  }
  
  .homerunner-gallery-skeleton {
    --base-color: #ebebeb;
    --highlight-color: #f5f5f5;
    --animation-duration: 1.5s;
    --animation-direction: normal;
    --pseudo-element-display: block;
  
    background-color: var(--base-color);
    width: 100%;
    border-radius: 0.25rem;
    display: inline-flex;
    line-height: 1;
    position: relative;
    user-select: none;
    overflow: hidden;
  }
  
  .homerunner-gallery-skeleton::after {
    content: ' ';
    display: var(--pseudo-element-display);
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 100%;
    background-repeat: no-repeat;
    background-image: linear-gradient(
      90deg,
      var(--base-color) 0%,
      var(--highlight-color) 50%,
      var(--base-color) 100%
    );
    transform: translateX(-100%);
    animation-name: homerunner-skeleton-slide;
    animation-direction: var(--animation-direction);
    animation-duration: var(--animation-duration);
    animation-timing-function: ease-in-out;
    animation-iteration-count: infinite;
  }
  
  /* Dark mode skeleton */
  .dark .homerunner-gallery-skeleton {
    --base-color: #374151;
    --highlight-color: #4b5563;
  }

  /* Dark-mode skeleton — host-marker + auto first-paint variants (#900).
     Append-only siblings of the `.dark` rule above, reusing its exact values.
     `:host([data-hr-theme="dark"])` covers the runtime marker (explicit dark +
     post-hydration auto); the @media block repaints a server-stamped auto
     widget on a dark OS AT PARSE, dropped by `:not([data-hr-theme])` the instant
     the runtime stamps the marker at hydration. Both auto conditions stay
     INSIDE `:host(...)` — a `:not` after the parens silently never matches. */
  :host([data-hr-theme="dark"]) .homerunner-gallery-skeleton {
    --base-color: #374151;
    --highlight-color: #4b5563;
  }

  @media (prefers-color-scheme: dark) {
    :host([data-hr-scheme="auto"]:not([data-hr-theme])) .homerunner-gallery-skeleton {
      --base-color: #374151;
      --highlight-color: #4b5563;
    }
  }

  /* Respect user's motion preferences */
  @media (prefers-reduced-motion) {
    .homerunner-gallery-skeleton {
      --pseudo-element-display: none;
    }
  }
  
  /* Skeleton pulse animation for buttons and text */
  .homerunner-gallery-skeleton-pulse {
    animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
  }
  
  @keyframes pulse {
    0%, 100% {
      opacity: 1;
    }
    50% {
      opacity: 0.5;
    }
  }
  
/* ----------------------------------------------------------------------------
 * Section heading (shared across content widgets)
 * Bold title on the left + horizontal divider line filling remaining width.
 * -------------------------------------------------------------------------- */

.hr-widget-section {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  margin-bottom: 2rem;
  width: 100%;
}

.hr-widget-section-title {
  margin: 0;
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--foreground);
  white-space: nowrap;
  flex-shrink: 0;
}

.hr-widget-section-line {
  flex: 1;
  height: 1px;
  background-color: currentColor;
  opacity: 0.18;
  display: block;
}

@media (max-width: 640px) {
  .hr-widget-section-title { font-size: 1.25rem; }
  .hr-widget-section { gap: 1rem; margin-bottom: 1.5rem; }
}
