

/* Galeria ampliada: uma fotografia por vista, passagem contínua e movimento controlado. */
.lightbox.pv-photo-viewer {
  position:fixed;
  inset:0;
  margin:auto;
  width:min(1120px,94vw,calc(94dvh * 1.5));
  max-width:94vw;
  max-height:94dvh;
  padding:0;
  overflow:hidden;
  background:var(--paper-2);
  color:var(--ink);
  border:0;
  border-radius:12px;
  box-shadow:0 30px 100px rgba(0,0,0,.5);
}

.pv-photo-viewer .lightbox-close {
  display:none;
  position:absolute;
  top:14px;
  right:14px;
  z-index:6;
  width:42px;
  height:42px;
  border:0;
  border-radius:999px;
  background:rgba(17,17,17,.44);
  color:#fff;
  font:inherit;
  font-size:1.6rem;
  line-height:1;
  cursor:pointer;
  opacity:0;
  pointer-events:none;
  align-items:center;
  justify-content:center;
  backdrop-filter:blur(3px);
  -webkit-backdrop-filter:blur(3px);
  transition:background-color .2s ease,transform .2s ease,opacity .25s ease;
}

.pv-photo-viewer .lightbox-close:hover,
.pv-photo-viewer .lightbox-close:focus-visible {
  background:rgba(17,17,17,.62);
  transform:translateY(-1px);
  outline:none;
}

.lightbox.pv-photo-viewer.is-ui-active .lightbox-close,
.pv-photo-viewer .lightbox-close:focus-visible {
  opacity:1;
  pointer-events:auto;
}


.pv-photo-viewer .lightbox-counter {
  position:absolute;
  top:max(14px,env(safe-area-inset-top));
  left:max(14px,env(safe-area-inset-left));
  z-index:6;
  min-width:48px;
  padding:.42rem .68rem;
  border:1px solid rgba(255,255,255,.12);
  border-radius:999px;
  background:rgba(17,17,17,.52);
  color:#fff;
  box-shadow:0 3px 12px rgba(0,0,0,.18);
  backdrop-filter:blur(3px);
  -webkit-backdrop-filter:blur(3px);
  font-size:.86rem;
  font-weight:600;
  line-height:1.2;
  text-align:center;
  white-space:nowrap;
  text-shadow:0 1px 2px rgba(0,0,0,.55);
  pointer-events:none;
  user-select:none;
  opacity:0;
  transform:translateY(-3px);
  transition:opacity .22s ease,transform .22s ease;
}

.lightbox.pv-photo-viewer.is-ui-active .lightbox-counter {
  opacity:1;
  transform:translateY(0);
}


.pv-photo-viewer .lightbox-track {
  display:flex;
  width:100%;
  overflow-x:auto;
  overflow-y:hidden;
  scroll-snap-type:none;
  scroll-padding:0;
  overscroll-behavior-x:contain;
  scrollbar-width:none;
  -ms-overflow-style:none;
  /* Gestos geridos apenas no visualizador, permitindo zoom também em ecrã inteiro. */
  touch-action:none;
  cursor:grab;
  background:#111;
}

.pv-photo-viewer .lightbox-rail {
  display:flex;
  flex:0 0 100%;
  width:100%;
  min-width:0;
  height:100%;
}

.pv-photo-viewer .lightbox-track::-webkit-scrollbar { display:none; }

.pv-photo-viewer .lightbox-track.is-dragging {
  cursor:grabbing;
  scroll-snap-type:none;
}

.pv-photo-viewer .lightbox-slide {
  flex:0 0 100%;
  width:100%;
  min-width:100%;
  aspect-ratio:3/2;
  overflow:hidden;
  background:#111;
}

.pv-photo-viewer .lightbox-slide img {
  display:block;
  width:100%;
  height:100%;
  max-height:none;
  object-fit:cover;
  object-position:center;
  user-select:none;
  -webkit-user-select:none;
}

.pv-photo-viewer .lightbox-track.is-photo-zoomed { cursor:move; }

.pv-photo-viewer .lightbox-slide img { transform-origin:center; }

.pv-photo-viewer .lightbox-track:focus-visible { outline:2px solid var(--brand); outline-offset:-2px; }


/* Indicação inicial de arrasto, afastada da legenda inferior. */
.pv-photo-viewer .lightbox-gesture-hint {
  position:absolute;
  top:max(18px,env(safe-area-inset-top));
  left:50%;
  z-index:5;
  display:inline-flex;
  align-items:center;
  gap:.5rem;
  max-width:calc(100% - 96px);
  padding:.48rem .78rem;
  border:1px solid rgba(255,255,255,.14);
  border-radius:999px;
  background:rgba(17,17,17,.58);
  color:#fff;
  box-shadow:0 4px 16px rgba(0,0,0,.2);
  backdrop-filter:blur(3px);
  -webkit-backdrop-filter:blur(3px);
  font-size:.9rem;
  font-weight:600;
  line-height:1.2;
  white-space:nowrap;
  text-shadow:0 1px 2px rgba(0,0,0,.55);
  pointer-events:none;
  user-select:none;
  opacity:0;
  transform:translate(-50%,-3px);
  transition:opacity .22s ease,transform .22s ease;
}

.pv-photo-viewer .lightbox-gesture-hint.is-visible {
  opacity:1;
  transform:translate(-50%,0);
}

.pv-photo-viewer .lightbox-gesture-hint.is-dismissed { transition:none; }

.pv-photo-viewer .lightbox-gesture-motion {
  display:grid;
  place-items:center;
  width:28px;
  height:16px;
  flex:0 0 28px;
}

.pv-photo-viewer .lightbox-gesture-motion svg {
  display:block;
  width:28px;
  height:14px;
  fill:none;
  stroke:currentColor;
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round;
}

.pv-photo-viewer .lightbox-gesture-hint.is-visible .lightbox-gesture-motion {
  animation:lightbox-gesture-nudge 1.05s ease-in-out 1;
}

@keyframes lightbox-gesture-nudge {
  0%,100% { transform:translateX(0); }
  30% { transform:translateX(-5px); }
  68% { transform:translateX(5px); }
}
@media (max-width:420px) {
  .pv-photo-viewer .lightbox-gesture-hint {
    max-width:calc(100% - 28px);
    padding:.44rem .68rem;
    font-size:.84rem;
  }
}

@media (prefers-reduced-motion:reduce) {
  .pv-photo-viewer .lightbox-gesture-hint { transition:none; transform:translate(-50%,0); }

  .pv-photo-viewer .lightbox-gesture-hint.is-visible .lightbox-gesture-motion { animation:none; }
}

/* Inclui telemóveis largos após rotação; a altura explícita evita o esticamento por inset:0. */
@media (max-width:820px), (pointer:coarse) and (max-height:600px) {
  .lightbox.pv-photo-viewer {
    width:100dvw;
    max-width:100dvw;
    height:min(100dvh,66.6667dvw);
    max-height:100dvh;
    min-height:0;
    padding:0;
    border:0;
    border-radius:0;
    box-shadow:none;
    margin:auto;
  }

  .pv-photo-viewer .lightbox-close { display:flex; top:10px; right:max(10px,env(safe-area-inset-right)); }

  .pv-photo-viewer .lightbox-track { height:100%; }

  .pv-photo-viewer .lightbox-slide { height:100%; aspect-ratio:auto; }

  .pv-photo-viewer .lightbox-slide img { width:100%; height:100%; object-fit:contain; background:#111; }
}


/* Cruz transparente recortada no botão de fecho. */
.pv-photo-viewer .lightbox-close,
.pv-photo-viewer .lightbox-close:hover,
.pv-photo-viewer .lightbox-close:focus-visible {
  color:transparent;
  background:transparent;
  backdrop-filter:none;
  -webkit-backdrop-filter:none;
}

.pv-photo-viewer .lightbox-close::before {
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:rgba(17,17,17,.44);
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 42'%3E%3Cpath fill='white' fill-rule='evenodd' d='M21 0a21 21 0 1 0 0 42a21 21 0 1 0 0-42Z M15 13l6 6 6-6 2 2-6 6 6 6-2 2-6-6-6 6-2-2 6-6-6-6Z'/%3E%3C/svg%3E") center/contain no-repeat;
  transition:background-color .2s ease;
}

.pv-photo-viewer .lightbox-close:hover::before,
.pv-photo-viewer .lightbox-close:focus-visible::before { background:rgba(17,17,17,.62); }

.pv-photo-viewer .lightbox-close:focus-visible { outline:2px solid var(--brand); outline-offset:3px; }

/* Na vertical, o espaço fora da fotografia permite fechar com um toque. */
@media (max-width:820px) {
  .pv-photo-viewer .lightbox-close { display:none; }
}


/* Na horizontal, usa toda a área sem cortar a fotografia; o fundo translúcido revela o site e o fecho
 * passa a × branco.
 */
@media (pointer:coarse) and (orientation:landscape) and (max-height:600px) {
  /* O fundo reutiliza o #222 do rodapé e deixa o site discretamente visível e desfocado, sem competir
 * com a fotografia.
 */
  .lightbox.pv-photo-viewer::backdrop {
    background:rgba(34,34,34,.88);
    backdrop-filter:blur(2px) saturate(.9);
    -webkit-backdrop-filter:blur(2px) saturate(.9);
  }

  .lightbox.pv-photo-viewer {
    /* Em ecrã inteiro, usa as unidades dinâmicas do CSS. VisualViewport só compensa as barras do navegador
 * no modo normal.
 */
    inset:auto;
    top:var(--gallery-vv-top,0px);
    left:var(--gallery-vv-left,0px);
    right:auto;
    bottom:auto;
    width:var(--gallery-vv-width,100dvw);
    max-width:none;
    height:var(--gallery-vv-height,100dvh);
    max-height:none;
    margin:0;
    border-radius:0;
    background:transparent;
  }

  .pv-photo-viewer .lightbox-track {
    height:100%;
    background:transparent;
  }

  .pv-photo-viewer .lightbox-slide {
    position:relative;
    isolation:isolate;
    height:100%;
    aspect-ratio:auto;
    background:transparent;
  }

  .pv-photo-viewer .lightbox-slide::before { display:none; }

  .pv-photo-viewer .lightbox-slide img {
    position:relative;
    z-index:1;
    width:100%;
    height:100%;
    object-fit:contain;
    background:transparent;
  }

  .pv-photo-viewer .lightbox-close,
.pv-photo-viewer .lightbox-close:hover,
.pv-photo-viewer .lightbox-close:focus-visible {
    display:flex;
    top:max(10px,env(safe-area-inset-top));
    right:max(10px,env(safe-area-inset-right));
    color:#fff;
    background:rgba(17,17,17,.50);
    backdrop-filter:blur(4px);
    -webkit-backdrop-filter:blur(4px);
    text-shadow:0 1px 3px rgba(0,0,0,.9);
  }

  .pv-photo-viewer .lightbox-close:hover,
.pv-photo-viewer .lightbox-close:focus-visible {
    background:rgba(17,17,17,.70);
  }

  .pv-photo-viewer .lightbox-close::before { display:none; }
}


@media (pointer:coarse) and (orientation:landscape) and (max-height:600px) and (prefers-reduced-transparency:reduce) {
  .lightbox.pv-photo-viewer::backdrop {
    background:#222;
    backdrop-filter:none;
    -webkit-backdrop-filter:none;
  }
}

/* Mantém o foco de teclado visível, sem contorno após abertura por toque ou rato. */
.lightbox.pv-photo-viewer[data-input-mode="pointer"],
.lightbox.pv-photo-viewer[data-input-mode="pointer"] .lightbox-track,
.lightbox.pv-photo-viewer[data-input-mode="pointer"] .lightbox-close {
  outline:none;
}


/* Evita o menu de imagem no telemóvel sem impedir deslocamento ou zoom por pinça. */
.pv-photo-viewer .lightbox-slide img {
  -webkit-touch-callout:none;
  -webkit-user-select:none;
  user-select:none;
}


/* As indicações de navegação só aparecem durante a interação com a fotografia ampliada. */
.pv-photo-viewer .lightbox-arrows { position:absolute; inset:0; z-index:3; pointer-events:none; }

.pv-photo-viewer .lightbox-arrow {
  position:absolute; top:50%; transform:translateY(-50%);
  display:grid; place-items:center; width:44px; height:52px; padding:10px;
  border:0; border-radius:8px; background:transparent; color:rgba(255,255,255,.88);
  opacity:0; pointer-events:none; cursor:pointer; transition:opacity .2s ease,background-color .2s ease;
  -webkit-tap-highlight-color:transparent;
}

.pv-photo-viewer .lightbox-arrow-prev { left:max(8px,env(safe-area-inset-left)); }

.pv-photo-viewer .lightbox-arrow-next { right:max(8px,env(safe-area-inset-right)); }

.pv-photo-viewer .lightbox-arrow svg { width:24px; height:28px; fill:none; stroke:currentColor; stroke-width:2.5; stroke-linecap:round; stroke-linejoin:round; filter:drop-shadow(0 1px 2px rgba(0,0,0,.85)); }

.lightbox.pv-photo-viewer.is-ui-active .lightbox-arrow { opacity:1; pointer-events:auto; }

@media (hover:hover) {
  .pv-photo-viewer .lightbox-arrow:hover { background:rgba(0,0,0,.22); }
}

.pv-photo-viewer .lightbox-arrow:focus-visible { opacity:1; pointer-events:auto; outline:2px solid var(--brand); outline-offset:2px; background:rgba(0,0,0,.22); }

@media (prefers-reduced-motion:reduce) {
  .pv-photo-viewer .lightbox-arrow,
.pv-photo-viewer .lightbox-counter,
.pv-photo-viewer .lightbox-close { transition:none; }
}

/* Single images retain zoom and pan, with no carousel drag cursor. */
.pv-photo-viewer .lightbox-track.is-single-photo { cursor:default; }
.pv-photo-viewer .lightbox-track.is-single-photo.is-photo-zoomed { cursor:move; }
/* Preserve the complete individual photo/illustration at every screen size. */
.pv-photo-viewer[data-single-viewer] .lightbox-slide img { object-fit:contain; }

/* Physical scroll coordinates stay consistent on Arabic pages. */
.pv-photo-viewer .lightbox-track { direction:ltr; }


/* No retrato individual, a fotografia mantém a dimensão máxima sem recorte.
 * O fundo exterior mostra o mesmo backdrop da galeria; os controlos ficam sobre a imagem. */
@media (pointer:coarse) and (orientation:portrait) and (max-width:820px) {
  .lightbox.pv-photo-viewer[data-single-viewer] {
    inset:auto;
    top:var(--gallery-vv-top,0px);
    left:var(--gallery-vv-left,0px);
    width:var(--gallery-vv-width,100dvw);
    max-width:none;
    height:var(--gallery-vv-height,100dvh);
    max-height:none;
    margin:0;
    background:transparent;
  }
  .pv-photo-viewer[data-single-viewer] .lightbox-track,
  .pv-photo-viewer[data-single-viewer] .lightbox-slide,
  .pv-photo-viewer[data-single-viewer] .lightbox-slide img { background:transparent; }
  .pv-photo-viewer[data-single-viewer] .lightbox-counter {
    top:calc(var(--photo-top,0px) + 14px);
    left:calc(var(--photo-left,0px) + 14px);
  }
  .pv-photo-viewer[data-single-viewer] .lightbox-arrows {
    inset:var(--photo-top,0px) var(--photo-right,0px) var(--photo-bottom,0px) var(--photo-left,0px);
  }
  .pv-photo-viewer[data-single-viewer] .lightbox-controls {
    left:var(--photo-left,0px);
    right:var(--photo-right,0px);
    bottom:var(--photo-bottom,0px);
  }
  .pv-photo-viewer[data-single-viewer] .lightbox-gesture-hint {
    top:calc(var(--photo-top,0px) + 18px);
  }
}

/* O fecho individual mantém-se acessível na horizontal, mesmo sem outras fotografias. */
@media (pointer:coarse) and (orientation:landscape) and (max-height:600px) {
  .lightbox.pv-photo-viewer[data-single-viewer] .lightbox-close {
    opacity:1;
    pointer-events:auto;
  }
}


/* Galerias e imagens individuais usam a mesma moldura adaptável no computador,
 * incluindo janelas estreitas. O telemóvel conserva a composição de ecrã inteiro. */
@media (pointer:fine), (min-width:821px) and (min-height:601px) {
  .lightbox.pv-photo-viewer {
    width:min(1120px,var(--viewer-max-width,94vw),calc(94dvh * var(--viewer-photo-ratio,1.5)));
    height:min(94dvh,calc(min(1120px,var(--viewer-max-width,94vw)) / var(--viewer-photo-ratio,1.5)));
    aspect-ratio:auto;
    background:transparent;
  }
  .pv-photo-viewer .lightbox-track { height:100%; background:transparent; }
  .pv-photo-viewer .lightbox-slide { height:100%; aspect-ratio:auto; background:transparent; }
  .pv-photo-viewer .lightbox-slide img { object-fit:contain; background:transparent; }
  .pv-photo-viewer .lightbox-counter {
    top:calc(var(--photo-top,0px) + 14px);
    left:calc(var(--photo-left,0px) + 14px);
  }
  .pv-photo-viewer .lightbox-arrows {
    inset:var(--photo-top,0px) var(--photo-right,0px) var(--photo-bottom,0px) var(--photo-left,0px);
  }
  .pv-photo-viewer .lightbox-controls {
    left:var(--photo-left,0px); right:var(--photo-right,0px); bottom:var(--photo-bottom,0px);
  }
  .pv-photo-viewer .lightbox-gesture-hint { top:calc(var(--photo-top,0px) + 18px); }
}
@media (pointer:fine) and (max-width:820px) {
  .lightbox.pv-photo-viewer { --viewer-max-width:100dvw; }
}

/* Boutaro: proporções das fotografias e cores da marca. */
.lightbox.boutaro-viewer { --paper-2: var(--ink); --brand: #c4a578; }
.lightbox.boutaro-viewer::backdrop { background: rgb(16 27 40 / .88); }
.lightbox.boutaro-viewer .lightbox-close {
  display: grid; place-items: center; width: 44px; height: 44px; padding: 0;
  background: rgb(17 24 34 / .84); color: #fff;
}
.lightbox.boutaro-viewer .lightbox-close::before { display: none; }
.lightbox.boutaro-viewer .lightbox-close:is(:hover, :focus-visible) { background: rgb(17 24 34 / .96); }
.lightbox.boutaro-viewer .lightbox-track:focus-visible { outline: none; }
.lightbox.boutaro-viewer[data-input-mode="keyboard"]:has(.lightbox-track:focus-visible) .lightbox-counter {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
  opacity: 1;
  transform: none;
}
@media (pointer: coarse) and (orientation: portrait) and (max-width: 820px) {
  .lightbox.boutaro-viewer { height: min(94dvh, calc(100dvw / var(--viewer-photo-ratio, 1.5))); }
}
