/* ============================================
   VILLAGE CAROUSEL - Netflix style
   ============================================ */
.carousel-section {
  padding: var(--space-3xl) 0 var(--space-5xl);
  overflow: hidden;
}

.carousel-section.is-hidden {
  display: none;
}

/* ── Header ── */
.carousel-header {
  display: block;
  padding: 0 var(--space-xl);
  max-width: var(--container-max);
  margin: 0 auto var(--space-2xl);
}

.carousel-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--space-md);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin-bottom: var(--space-md);
}

.carousel-eyebrow::after {
  content: '';
  width: 40px;
  height: 1px;
  background: linear-gradient(to right, var(--color-gold), transparent);
}

.carousel-title {
  font-family: var(--font-display);
  font-size: var(--text-3xl);
  font-weight: 400;
}

.carousel-subtitle {
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: 1.6;
  color: var(--color-text-secondary);
  max-width: 540px;
  margin: var(--space-sm) 0 0;
}

/* Dark stage override */
.home-villages-stage .carousel-subtitle {
  color: rgba(250, 248, 245, 0.55);
}

/* ── Stage — positioning context for buttons ── */
.carousel-stage {
  position: relative;
}

.carousel-track-wrapper {
  padding: 0 var(--space-xl);
  overflow: hidden;
}

.carousel-track {
  display: flex;
  gap: var(--space-lg);
  overflow-x: visible;
  scrollbar-width: none;
  -ms-overflow-style: none;
  padding: var(--space-md) 0;
  transition: transform 1.1s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
  touch-action: pan-y;
}

.carousel-track::-webkit-scrollbar {
  display: none;
}

/* Incoming track sits off-screen until animated */
.carousel-track--incoming {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  padding: var(--space-md) 0;
}

/* ── Navigation buttons — overlay on track edges ── */
.carousel-btn {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 3;
  width: 52px;
  height: 52px;
  border-radius: var(--radius-full);
  background: var(--color-midnight);
  color: var(--color-warm-white);
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(250, 248, 245, 0.15);
  box-shadow:
    0 4px 16px rgba(10, 22, 40, 0.35),
    0 8px 32px rgba(10, 22, 40, 0.2);
  cursor: pointer;
  transition:
    opacity 0.4s ease,
    visibility 0.4s ease,
    background-color var(--duration-normal),
    border-color var(--duration-normal),
    transform var(--duration-fast),
    box-shadow var(--duration-normal);
}

.carousel-btn--prev {
  left: var(--space-sm);
}

.carousel-btn--next {
  right: var(--space-sm);
}

/* Hidden state — used by JS when at first/last batch */
.carousel-btn.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

@media (hover: hover) {
  .carousel-btn:hover {
    background: var(--color-pine);
    border-color: var(--color-pine);
    transform: translateY(-50%) scale(1.1);
    box-shadow:
      0 6px 20px rgba(61, 90, 71, 0.4),
      0 12px 40px rgba(61, 90, 71, 0.2);
  }
}

.carousel-btn:active {
  transform: translateY(-50%) scale(0.95);
}

.carousel-btn svg {
  width: 22px;
  height: 22px;
  stroke-width: 2.5;
}

/* ── Village Card ── */
.village-card {
  flex: 0 0 clamp(280px, 22vw, 420px);
  position: relative;
  border-radius: var(--radius-xl);
  overflow: hidden;
  background: var(--color-cream);
  border: 1px solid rgba(0, 0, 0, 0.06);
  box-shadow:
    0 2px 4px rgba(0, 0, 0, 0.04),
    0 8px 16px rgba(0, 0, 0, 0.06),
    0 16px 32px rgba(0, 0, 0, 0.04);
  transition:
    transform var(--duration-normal) var(--ease-out-expo),
    box-shadow var(--duration-normal) var(--ease-out-expo),
    border-color var(--duration-normal);
}

@media (hover: hover) {
  .village-card:hover {
    transform: translateY(-10px) scale(1.02);
    border-color: rgba(125, 211, 192, 0.3);
    box-shadow:
      0 4px 8px rgba(0, 0, 0, 0.04),
      0 16px 32px rgba(0, 0, 0, 0.08),
      0 32px 64px rgba(0, 0, 0, 0.06),
      0 0 0 1px rgba(125, 211, 192, 0.1);
  }

  .village-card:hover .village-card-image img {
    transform: scale(1.06);
  }
}

.village-card-image {
  position: relative;
  height: clamp(180px, 14vw, 280px);
  overflow: hidden;
}

.village-card-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--duration-slower) var(--ease-out-expo);
}

.village-card-body {
  padding: var(--space-xl);
  position: relative;
  background: linear-gradient(
    135deg,
    var(--color-cream) 0%,
    rgba(143, 184, 202, 0.08) 100%
  );
}

/* Subtle colored accent line at top of card body */
.village-card-body::before {
  content: '';
  position: absolute;
  top: 0;
  left: var(--space-xl);
  width: 40px;
  height: 3px;
  background: linear-gradient(
    90deg,
    var(--color-aurora),
    var(--color-gold)
  );
  border-radius: var(--radius-full);
}

.village-card-title,
.village-card-name {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  font-weight: 500;
  color: var(--color-text-primary);
  margin-bottom: var(--space-xs);
}

.village-card-location {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-md);
  display: flex;
  align-items: center;
  gap: var(--space-xs);
}

.village-card-location::before {
  content: '';
  width: 16px;
  height: 16px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23737373' stroke-width='2'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E");
  background-size: contain;
  flex-shrink: 0;
}

.village-card-description,
.village-card-tagline {
  font-size: var(--text-sm);
  line-height: 1.6;
  color: var(--color-text-secondary);
  margin-bottom: var(--space-md);
}

.village-card-meta {
  display: flex;
  gap: var(--space-md);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}

.village-card-meta span {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
}

.village-card-meta span::before {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: var(--radius-full);
  background: var(--color-aurora);
}

/* Alignment tweak for village pages */
.village-page .carousel-section {
  padding: var(--space-xl) 0 var(--space-3xl);
}

.village-page .carousel-header {
  max-width: var(--container-content);
  padding-left: 0;
  padding-right: 0;
  margin-bottom: var(--space-lg);
}

.village-page .carousel-track,
.village-page .carousel-track--incoming {
  padding-top: 0;
}

/* ── Responsive: 1200px ── */
@media (max-width: 1200px) {
  .carousel-btn {
    width: 44px;
    height: 44px;
  }

  .carousel-btn svg {
    width: 20px;
    height: 20px;
  }

  .village-card-body {
    padding: var(--space-lg);
  }

  .village-card-body::before {
    left: var(--space-lg);
  }

  .village-card-title,
  .village-card-name {
    font-size: var(--text-xl);
  }

  .village-card {
    flex: 0 0 min(320px, 70vw);
  }
}

/* ── Responsive: 768px (mobile) ── */
@media (max-width: 768px) {
  .carousel-section {
    padding: var(--space-xl) 0 var(--space-2xl);
  }

  .carousel-header {
    text-align: center;
    margin-bottom: var(--space-sm);
  }

  .carousel-eyebrow {
    justify-content: center;
  }

  .carousel-subtitle {
    max-width: none;
  }

  .carousel-track-wrapper {
    padding-top: 0;
  }

  .carousel-title {
    line-height: 1.08;
  }

  /* Hide overlay buttons on touch devices — swipe instead */
  .carousel-btn {
    display: none;
  }

  .carousel-track-wrapper {
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    scroll-padding-left: var(--space-lg);
    scroll-padding-right: var(--space-lg);
    padding-left: var(--space-lg);
    padding-right: var(--space-lg);
    padding-top: 0;
    width: 100%;
    box-sizing: border-box;
    overscroll-behavior-x: contain;
  }

  .carousel-track {
    overflow-x: visible;
    width: max-content;
    justify-content: flex-start !important;
    scroll-snap-type: x mandatory;
    touch-action: pan-x;
  }

  .village-card {
    flex: 0 0 78vw;
    scroll-snap-align: start;
  }

  .village-card-image {
    height: 170px;
  }
}

@media (min-width: 701px) and (max-width: 900px) {
  .village-card {
    flex: 0 0 320px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .carousel-track,
  .carousel-track--incoming {
    transition: none !important;
  }
}
