/* Jennifer Hoeve Store — Seamless Clip-In v2
   Best practices carousel (onder de hero) + resultaatgalerij (onder de configurator)
   Huisstijl: erft de tokens van .jhs-choice (zwart/wit/goud, Manrope, hoekige knoppen). */

.jhs-media-section {
  --jhs-media-gap: clamp(10px, 1.4vw, 18px);
  --jhs-media-radius: 0;
  padding-block: var(--jhs-section);
}

/* ============================================================
   1. Best practices carousel — edge to edge
   ============================================================ */

.jhs-bp {
  padding-block: clamp(56px, 7vw, 96px) clamp(48px, 6vw, 84px);
  background: var(--jhs-gray-50);
  border-block: 1px solid var(--jhs-gray-200);
}

.jhs-bp-head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px 32px;
  margin-bottom: clamp(26px, 3.4vw, 40px);
}

.jhs-bp-head > div { max-width: 56ch; }
.jhs-bp-head h2 { margin-bottom: 10px; }
.jhs-bp-head p { margin-bottom: 0; color: var(--jhs-gray-700); }

.jhs-bp-controls {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}

.jhs-bp-nav {
  display: inline-flex;
  width: 46px;
  height: 46px;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid var(--jhs-black);
  background: transparent;
  color: var(--jhs-black);
  cursor: pointer;
  transition: background-color 180ms ease, color 180ms ease, opacity 180ms ease;
}

.jhs-bp-nav:hover,
.jhs-bp-nav:focus-visible { background: var(--jhs-black); color: var(--jhs-white); }
.jhs-bp-nav svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.6; }

.jhs-bp-playstate {
  min-width: 9ch;
  color: var(--jhs-gray-500);
  font-size: .68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .12em;
}

/* De viewport loopt bewust buiten .jhs-shell: edge to edge in het browservenster. */
.jhs-bp-viewport {
  position: relative;
  width: 100%;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 5%, #000 95%, transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 5%, #000 95%, transparent 100%);
}

@media (max-width: 720px) {
  .jhs-bp-viewport {
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 3%, #000 97%, transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0, #000 3%, #000 97%, transparent 100%);
  }
}

.jhs-bp-track {
  display: flex;
  align-items: stretch;
  gap: var(--jhs-media-gap);
  padding-inline: var(--jhs-media-gap);
  will-change: transform;
}

.jhs-bp-item {
  position: relative;
  flex: 0 0 auto;
  width: clamp(190px, 21vw, 268px);
  margin: 0;
  padding: 0;
  background: var(--jhs-black);
  overflow: hidden;
}

.jhs-bp-item.is-landscape { width: clamp(300px, 34vw, 442px); }

.jhs-bp-button {
  display: block;
  width: 100%;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  cursor: pointer;
  text-align: left;
}

.jhs-bp-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 9 / 16;
  background: var(--jhs-gray-200);
  overflow: hidden;
}

.jhs-bp-item.is-landscape .jhs-bp-frame { aspect-ratio: 16 / 9; }

.jhs-bp-frame > img,
.jhs-bp-frame > video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.jhs-bp-frame > video {
  opacity: 0;
  transition: opacity 420ms ease;
}

.jhs-bp-item.is-playing .jhs-bp-frame > video { opacity: 1; }

.jhs-bp-overlay {
  position: absolute;
  inset: auto 0 0 0;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 10px;
  padding: 44px 14px 14px;
  background: linear-gradient(180deg, rgb(0 0 0 / 0) 0%, rgb(0 0 0 / .72) 100%);
  color: var(--jhs-white);
  pointer-events: none;
}

.jhs-bp-caption {
  font-size: .76rem;
  font-weight: 600;
  line-height: 1.35;
  text-shadow: 0 1px 3px rgb(0 0 0 / .45);
}

.jhs-bp-zoom {
  display: inline-flex;
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  border: 1px solid rgb(255 255 255 / .55);
  background: rgb(0 0 0 / .3);
  transition: background-color 180ms ease, border-color 180ms ease;
}

.jhs-bp-zoom svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.7; }

.jhs-bp-button:hover .jhs-bp-zoom,
.jhs-bp-button:focus-visible .jhs-bp-zoom {
  border-color: var(--jhs-gold-light);
  background: rgb(0 0 0 / .55);
}

.jhs-bp-button:focus-visible { outline: 2px solid var(--jhs-gold-dark); outline-offset: 3px; }

.jhs-bp-hint {
  margin-top: clamp(20px, 2.6vw, 30px);
  color: var(--jhs-gray-500);
  font-size: .72rem;
  font-weight: 700;
  text-align: center;
  text-transform: uppercase;
  letter-spacing: .12em;
}

/* ============================================================
   2. Resultaatgalerij — zwart-wit, subtiel naar kleur
   ============================================================ */

.jhs-gallery { padding-block: var(--jhs-section); }

/* ---- Galerij 2.0 -------------------------------------------------------
   Strak raster in plaats van masonry-kolommen. De curatie leverde uitsluitend
   staande beelden op (9x 3:4 en 2x 2:3), dus één tegelvorm is nu wél passend:
   bij aspect-ratio 3/4 snijdt 9 van de 11 foto's exact nul procent bij en de
   twee 2:3-beelden 11% — tegen 40% bij de oorspronkelijke opzet.

   Waarom geen masonry meer: met kolommen eindigt elke kolom op een andere
   hoogte, wat onderaan een rafelige rand geeft en de witruimte tussen sectie
   en CTA onvoorspelbaar maakt. Een raster geeft rechte marges rondom. */
.jhs-gallery-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  /* Eén gap-waarde voor rijen en kolommen: gelijke witruimte in beide
     richtingen leest rustiger dan de eerdere ongelijke marges. */
  gap: var(--jhs-media-gap);
  margin-top: clamp(30px, 3.8vw, 46px);
}

@media (max-width: 1024px) { .jhs-gallery-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 640px)  { .jhs-gallery-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

.jhs-gallery-item {
  position: relative;
  display: block;
  width: 100%;
  /* Vaste tegelvorm: alle rijen even hoog, geen rafelige onderrand. */
  aspect-ratio: 3 / 4;
  margin: 0;
  padding: 0;
  border: 0;
  background: var(--jhs-gray-100);
  cursor: pointer;
  overflow: hidden;
}

.jhs-gallery-item img {
  display: block;
  width: 100%;
  height: 100%;
  /* cover binnen een vaste vorm; object-position hoog zodat bij de twee
     2:3-beelden de voeten wegvallen en niet het gezicht. */
  object-fit: cover;
  object-position: 50% 32%;
  filter: grayscale(1) contrast(1.02);
  transform: scale(1.001);
  transition: filter 620ms cubic-bezier(.22, .61, .36, 1),
              transform 720ms cubic-bezier(.22, .61, .36, 1);
}

.jhs-gallery-item:hover img,
.jhs-gallery-item:focus-visible img {
  filter: grayscale(0) contrast(1);
  transform: scale(1.035);
}

.jhs-gallery-item:focus-visible { outline: 2px solid var(--jhs-gold-dark); outline-offset: 3px; }

.jhs-gallery-veil {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-end;
  padding: 36px 14px 13px;
  background: linear-gradient(180deg, rgb(0 0 0 / 0) 42%, rgb(0 0 0 / .58) 100%);
  color: var(--jhs-white);
  opacity: 0;
  transition: opacity 420ms ease;
  pointer-events: none;
}

.jhs-gallery-item:hover .jhs-gallery-veil,
.jhs-gallery-item:focus-visible .jhs-gallery-veil { opacity: 1; }

.jhs-gallery-veil span {
  font-size: .68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .12em;
}

.jhs-gallery-action { margin-top: clamp(24px, 3vw, 36px); text-align: center; }

/* ============================================================
   3. Gedeelde lightbox
   ============================================================ */

.jhs-lightbox {
  /* De lightbox wordt aan <body> gehangen, buiten de sectie waar het thema
     --jhs-white en --jhs-black definieert. Zonder eigen definitie vallen die
     var() terug op de donkere themakleur en werd de sluitknop zwart-op-zwart.
     Hier lokaal vastleggen, zodat alle kindregels blijven kloppen. */
  --jhs-white: #fff;
  --jhs-black: #171717;
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: none;
  padding: clamp(14px, 2.4vw, 34px);
  background: rgb(10 10 10 / .95);
  color: var(--jhs-white);
}

.jhs-lightbox[open],
.jhs-lightbox.is-open {
  display: grid;
  /* minmax(0,1fr): zonder de 0-ondergrens groeit de rij mee met de intrinsieke
     videohoogte en duwt hij de sluitknop uit beeld.
     align-/justify-items expliciet: het thema zet grid-items standaard op
     center, waardoor balk en stage hun rij niet vullen. */
  grid-template-rows: auto minmax(0, 1fr) auto;
  align-items: stretch;
  justify-items: stretch;
  align-content: stretch;
}

.jhs-lightbox > * { min-width: 0; align-self: stretch; }

/* hidden moet altijd winnen van .is-open, ook bij een onverwachte volgorde */
.jhs-lightbox[hidden] { display: none; }

.jhs-lightbox-bar {
  display: flex;
  align-items: center;
  /* De sluitknop staat fixed rechtsboven; de balk houdt alleen de teller. */
  justify-content: flex-start;
  gap: 16px;
  padding-bottom: 12px;
  padding-right: 150px;
}

.jhs-lightbox-count {
  color: rgb(255 255 255 / .62);
  font-size: .7rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .14em;
}

.jhs-lightbox-close {
  /* Fixed in de hoek van de overlay in plaats van meelopend in de balk: het
     thema forceert op generieke sluitknoppen position:absolute met een
     negatieve top, en een meelopende knop verdween eerder achter een hoge
     video. Fixed + eigen z-index maakt de uitgang onvoorwaardelijk zichtbaar.
     !important omdat de themaregel op #id-niveau staat. */
  position: fixed !important;
  top: clamp(14px, 2.4vw, 34px) !important;
  right: clamp(14px, 2.4vw, 34px) !important;
  bottom: auto !important;
  left: auto !important;
  z-index: 10;
  /* Vierkant icoonvlak: alleen een kruis, geen tekstlabel. */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  padding: 0;
  /* !important op kleur, rand en vulling: het thema zet op knoppen binnen deze
     scope een donkere tekstkleur (rgb(23,23,23)) en een transparante vulling,
     waardoor de knop onzichtbaar zwart-op-zwart werd. */
  border: 1px solid rgb(255 255 255 / .55) !important;
  border-radius: 999px;
  background: rgb(10 10 10 / .72) !important;
  backdrop-filter: blur(6px);
  color: var(--jhs-white) !important;
  cursor: pointer;
  transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease;
}

@media (max-width: 640px) {
  /* De knop is overal een vierkant icoonvlak; alleen de balkruimte verschilt. */
  .jhs-lightbox-bar { padding-right: 62px; }
}

.jhs-lightbox-close:hover,
.jhs-lightbox-close:focus-visible {
  border-color: var(--jhs-white);
  background: var(--jhs-white);
  color: var(--jhs-black);
}

/* width !important + flex-shrink: het thema zet op svg binnen knoppen een
   width die de flexbox tot 0px perst, waardoor het kruis onzichtbaar werd. */
.jhs-lightbox-close svg {
  width: 18px !important;
  height: 18px !important;
  flex: 0 0 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.9;
}

.jhs-lightbox-stage {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 0;
  overflow: hidden;
}

.jhs-lightbox-media {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-inline: 62px;
}

@media (max-width: 720px) { .jhs-lightbox-media { padding-inline: 10px; } }

.jhs-lightbox-media img,
.jhs-lightbox-media video {
  max-width: min(100%, 1320px);
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  background: #000;
}

.jhs-lightbox-arrow {
  position: absolute;
  top: 50%;
  display: inline-flex;
  width: 52px;
  height: 52px;
  align-items: center;
  justify-content: center;
  padding: 0;
  transform: translateY(-50%);
  border: 1px solid rgb(255 255 255 / .5);
  background: rgb(0 0 0 / .45);
  color: var(--jhs-white);
  cursor: pointer;
  transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease;
}

.jhs-lightbox-arrow:hover,
.jhs-lightbox-arrow:focus-visible { border-color: var(--jhs-white); background: var(--jhs-white); color: var(--jhs-black); }
.jhs-lightbox-arrow svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.6; }
.jhs-lightbox-prev { left: 0; }
.jhs-lightbox-next { right: 0; }

@media (max-width: 720px) {
  .jhs-lightbox-arrow {
    width: 44px;
    height: 44px;
    /* Op smalle schermen zweven de pijlen over het beeld in plaats van het
       weg te drukken; de mediapadding blijft daarmee minimaal. */
    background: rgb(0 0 0 / .62);
  }
  .jhs-lightbox-prev { left: 2px; }
  .jhs-lightbox-next { right: 2px; }
}

.jhs-lightbox-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-top: 12px;
}

.jhs-lightbox-caption {
  margin: 0;
  font-size: .82rem;
  line-height: 1.45;
}

.jhs-lightbox-esc {
  flex-shrink: 0;
  color: rgb(255 255 255 / .5);
  font-size: .64rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .12em;
}

@media (max-width: 720px) { .jhs-lightbox-esc { display: none; } }

body.jhs-lightbox-open { overflow: hidden; }

/* ============================================================
   4. Reduced motion
   ============================================================ */

@media (prefers-reduced-motion: reduce) {
  .jhs-gallery-item img,
  .jhs-gallery-veil,
  .jhs-bp-frame > video { transition-duration: 1ms; }
  .jhs-gallery-item:hover img,
  .jhs-gallery-item:focus-visible img { transform: none; }
}
