/* ===============================================================================================
   CONTROL DE IMPRESIÓN Y CAPTURA — el aspecto. La lógica está en `js/impresion-controlada.js`.
   ===============================================================================================

   Este fichero y ese JavaScript son una sola pieza, separada de `style.css` para poder llevarla
   entera a Modulos-Base como dependencia del visor de documentos.

   Hay que cargarlo DESPUÉS de style.css: las reglas de abajo vuelven a esconder la ficha de
   aseguradora cuando la impresión no está autorizada, y cargado antes un Ctrl+P sobre esa ficha
   sacaría la ficha en vez del aviso.
   =============================================================================================== */

/* ===========================================================================
   CTRL+P NO IMPRIME LA PANTALLA: IMPRIME UN AVISO
   ===========================================================================
   Una página web no puede cancelar la impresión del navegador, pero sí decidir
   qué se imprime. El texto y la constancia del intento están en
   `frontend/js/impresion-controlada.js`.

   En pantalla no se ve nunca. El aviso vive en el documento para que el
   navegador lo tenga medido antes de imprimir (construirlo dentro de
   `beforeprint` lo deja en blanco en algunos navegadores). */
#aviso-de-impresion-confidencial { display: none; }

/* Copias que se imprimen desde una pantalla (`imprimirCopiasDePantalla`). En pantalla no se ven. */
#zona-de-impresion-con-copias { display: none; }

@media print {
  /* style.css esconde `body *` con `visibility`; aquí se enseña solo la zona de copias. */
  body[data-impresion-autorizada] #zona-de-impresion-con-copias {
    display: block;
    position: absolute;
    inset: 0;
    width: 100%;
  }
  body[data-impresion-autorizada] #zona-de-impresion-con-copias,
  body[data-impresion-autorizada] #zona-de-impresion-con-copias * {
    visibility: visible;
  }
  /* Cada copia empieza en hoja nueva para que cada papel lleve su propia referencia. */
  .copia-impresa { break-after: page; }
  .copia-impresa:last-child { break-after: auto; }
  .pie-copia-impresa {
    margin-top: 18px;
    font-size: 7pt;
    line-height: 1.4;
    color: #444;
  }
  .pie-copia-impresa p { margin: 0; }
  /* El valor de cada casilla, ya como texto (lo pone clonarConValores). */
  .valor-impreso { display: block; font-weight: 600; white-space: pre-wrap; overflow-wrap: anywhere; }
  /* En papel, un campo de formulario es solo un dato. */
  #zona-de-impresion-con-copias input,
  #zona-de-impresion-con-copias textarea,
  #zona-de-impresion-con-copias select {
    border: none;
    background: transparent;
    padding: 0;
    font-weight: 600;
  }
  #zona-de-impresion-con-copias .card { break-inside: avoid; box-shadow: none; border: 1px solid #ccc; }
  /* Botones y alto limitado del dosier: en papel sobran. */
  #zona-de-impresion-con-copias button,
  #zona-de-impresion-con-copias .no-imprimir { display: none !important; }
  #zona-de-impresion-con-copias [style*="max-height"],
  #zona-de-impresion-con-copias .dosier-expediente { max-height: none !important; overflow: visible !important; }
}

@media print {
  /* `data-impresion-autorizada` lo pone `imprimirDesdeLaAplicacion()` justo
     antes de llamar a `window.print()`. Sin esa marca, la impresión la ha
     pedido el navegador y sale el aviso; con ella, la ha pedido la aplicación y
     sale lo que esa pantalla quiera imprimir (p. ej. el botón de imprimir de
     la ficha de aseguradora). */
  body:not([data-impresion-autorizada]) #aviso-de-impresion-confidencial {
    display: block;
    /* Ocupa la hoja entera: el aviso no comparte el papel con nada. */
    position: absolute;
    inset: 0;
    padding: 60px 50px;
    /* Negro sobre blanco explícito: en papel no valen los tokens de tema y debe
       leerse igual en una impresora en blanco y negro. */
    color: #000;
    background: #fff;
    font-size: 14pt;
    line-height: 1.7;
  }
  /* `visibility` y no solo `display`: style.css esconde `body *` para imprimir
     la ficha de aseguradora, y el aviso heredaría ese `hidden` (hoja en blanco). */
  body:not([data-impresion-autorizada]) #aviso-de-impresion-confidencial,
  body:not([data-impresion-autorizada]) #aviso-de-impresion-confidencial * {
    visibility: visible;
  }
  body:not([data-impresion-autorizada]) #aviso-de-impresion-confidencial h1 {
    font-size: 20pt;
    margin-bottom: 24px;
  }
  body:not([data-impresion-autorizada]) #aviso-de-impresion-confidencial p { margin-bottom: 14px; }

  /* Vuelve a esconder la ficha de aseguradora que style.css deja visible: por un
     Ctrl+P no sale. Gana en especificidad (elemento + atributo + clase contra una
     clase sola) y además va después. */
  body:not([data-impresion-autorizada]) .ficha-aseguradora,
  body:not([data-impresion-autorizada]) .ficha-aseguradora * {
    visibility: hidden;
  }

  /* Con la marca puesta, la impresión viene del botón de la aplicación y ya ha
     quedado anotada: el aviso no sale. */
  body[data-impresion-autorizada] #aviso-de-impresion-confidencial { display: none !important; }
}

/* ===========================================================================
   LA MÁSCARA DE CONFIDENCIALIDAD
   ===========================================================================
   No se puede impedir una captura, pero sí decidir qué captura: si la
   aplicación está tapada en el instante del disparo, en la imagen sale esto.

   `z-index` por encima de todo lo que existe en la aplicación: modales (60),
   franja de simulación de rol (200), asistencia remota (900) y botón de editar
   diseño (2000). Lo que asomara saldría en la captura.

   Fondo opaco, nunca translúcido: con transparencia la captura enseñaría los
   datos de debajo. */
#mascara-de-confidencialidad {
  position: fixed;
  inset: 0;
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px;
  /* Color de la casa, para que se reconozca como máscara y no como fallo de pintado. */
  background: #0d3b37;
  color: #fff;
}
.mascara-caja {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  max-width: 44ch;
  text-align: center;
}
.mascara-icono { font-size: 3rem; line-height: 1; }
/* Cuerpo generoso: en la captura tiene que leerse por qué no hay datos. */
.mascara-texto { font-size: 1.05rem; line-height: 1.6; margin: 0; }

/* No se imprime: competiría con el aviso de impresión por la misma hoja. */
@media print {
  #mascara-de-confidencialidad { display: none !important; }
}
