/* ===============================================================================================
   Máscara anti-cámara: aspecto de las dos capas (marca forense y aviso legal para sistemas
   automatizados). La lógica y los límites de cada capa están en `js/mascara-anti-camara.js`.

   Se carga después de style.css para ganar cuando dos reglas empatan en especificidad.
   =============================================================================================== */

/* Ambas capas cubren el contenido entero. `pointer-events: none` es obligatorio: si capturasen la
   rueda o el ratón, la pantalla no se podría desplazar.
   `z-index: 2`: por encima de las marcas de búsqueda del visor (1) y por debajo de la máscara de
   confidencialidad, que debe taparlo todo. */
.anti-camara {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
}

/* ── La marca forense ───────────────────────────────────────────────────────────────── */

/* El SVG con el código de la persona lo pone el JavaScript. El tamaño del mosaico (180×120) va en el
   SVG para mantener la densidad en cualquier ventana; un porcentaje aquí lo estiraría.
   La opacidad va dentro del SVG y no con `opacity`: con `opacity` el navegador puede promover la
   capa a textura propia y el texto pierde definición al escalar. */
.anti-camara-marca {
  background-repeat: repeat;
}

/* ── El aviso legal dirigido a una máquina ──────────────────────────────────────────── */

/* Centrado: es la zona que ninguna cámara recorta. `z-index: 3` para quedar sobre la marca forense. */
.anti-camara-aviso-legal {
  z-index: 3;
  display: grid;
  place-items: center;
  padding: 0 8%;
}

/* 0.055 de negro sobre blanco da ~1,07:1 de contraste: el ojo lo percibe como veladura, pero un
   sensor de 8 bits distingue esos niveles y al normalizar el contraste el texto es legible.
   Subir la opacidad lo haría visible y estorbaría la lectura; bajarla, ilegible para la máquina. */
.anti-camara-aviso-legal p {
  margin: 0;
  color: rgba(0, 0, 0, 0.055);
  font-size: 0.78rem;
  line-height: 1.35;
  font-weight: 700;
  text-align: center;
  /* Mayúsculas y espaciado ancho aguantan mejor la pérdida de definición de una fotografía. */
  text-transform: uppercase;
  letter-spacing: 0.04em;
  /* No se copia junto al documento: basta con que esté en la imagen. */
  user-select: none;
}

/* ── La variante que cubre la aplicación entera ────────────────────────────────── */

/* - `position: fixed`: `#content` es el elemento que desplaza, y una capa absoluta dentro se iría
     con el scroll.
   - `z-index: 3000`: por encima de los modales (60) y del botón flotante (2000), y por debajo del
     bloqueo de pantalla (9999) y de la máscara de confidencialidad (99999).
   El hueco de las barras lo mide el JavaScript; el respaldo `0px` hace que, mientras no llega la
   medición, la capa cubra también las barras en vez de dejar datos sin cubrir. */
.anti-camara.anti-camara-toda-la-app {
  position: fixed;
  top: var(--anti-camara-arriba, 0px);
  left: var(--anti-camara-izquierda, 0px);
  right: 0;
  bottom: 0;
  z-index: 3000;
}

/* El aviso legal, por encima de la marca, igual que en la variante del visor. */
.anti-camara.anti-camara-toda-la-app.anti-camara-aviso-legal {
  z-index: 3001;
}

/* ── En papel, ninguna de las dos ────────────────────────────────────────────── */

/* En papel solo serían ruido; ahí la protección es la referencia al pie y la marca de agua dentro
   del PDF. Hay que ocultarlas explícitamente porque las capas globales cuelgan del `body`, igual que
   `#mascara-de-confidencialidad`, y `position: fixed` se imprime distinto en cada navegador. */
@media print {
  .anti-camara { display: none !important; }
}
