/* ============================================================================
   fact-mereba — capa propia sobre el tema MEREBA "Wimbledon".

   Se carga DESPUES de mereba-theme.css. Aqui solo van las piezas propias de una
   aplicacion de facturacion: importes, estados de remision a la AEAT, bloque de
   QR tributario y la clase `has-background-cream`.

   Nota de deuda heredada: merebapy4web/apps/_default/templates/backoffice_layout.html
   usa `has-background-cream` sin que exista en ningun CSS. Aqui SI se define,
   para que el <body class="has-background-cream"> del layout signifique algo.
   ========================================================================== */

.has-background-cream {
  background-color: var(--mereba-cream);
}

/* ---------- Pie de pagina ----------
   El tema pinta el footer en verde botella pero solo aclara el texto que lleva
   `has-text-white`. Un <p> suelto queda verde sobre verde e ilegible. Aqui se
   aclara todo el contenido del pie. */
.footer,
.footer p {
  color: #F2EFE6;
}

/* Pie anclado abajo cuando el contenido no llena la ventana. */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

body > main {
  flex: 1 0 auto;
}

body > .footer {
  flex: none;
}

.has-background-cream-soft {
  background-color: var(--mereba-cream-soft);
}

/* ---------- Cifras y codigos ----------
   Todo lo que sea importe, NIF, numero de factura, huella o CSV va en la
   monoespaciada de marca: se comparan por columnas y deben alinearse. */
.dato-fiscal,
.importe,
.huella,
.csv {
  font-family: var(--mereba-font-mono);
  font-variant-numeric: tabular-nums;
}

.importe {
  text-align: right;
  white-space: nowrap;
}

/* La huella SHA-256 son 64 caracteres: se parte y se puede seleccionar entera. */
.huella {
  word-break: break-all;
  font-size: 0.8rem;
  color: var(--mereba-ink);
}

/* ---------- Estado de remision a la AEAT ----------
   Un color por estado del registro. `aceptado-con-errores` es AMBAR y no verde
   a proposito: la AEAT SI registro la factura, pero algo no cuadro, y lo mas
   probable es que sea un fallo en el calculo de la huella. Nunca debe parecer
   un exito. */
.estado-aeat {
  display: inline-flex;
  align-items: center;
  gap: var(--mereba-space-2);
  padding: 0.15rem 0.6rem;
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  white-space: nowrap;
}

.estado-aeat::before {
  content: "";
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: currentColor;
  flex: none;
}

.estado-aeat.es-pendiente {
  background: #EFEDE4;
  color: #6B6A62;
}

.estado-aeat.es-enviando {
  background: #E6E2F0;
  color: var(--mereba-purple);
}

.estado-aeat.es-correcto {
  background: #E2EFE7;
  color: var(--mereba-green);
}

.estado-aeat.es-aceptado-con-errores {
  background: #FBEFD8;
  color: #94631A;
}

.estado-aeat.es-incorrecto {
  background: #F7E1E1;
  color: #A32222;
}

/* Estado indeterminado: la AEAT no respondio y no sabemos si le llego. */
.estado-aeat.es-desconocido {
  background: #E7E9EC;
  color: #4A5058;
}

/* ---------- Estado de la factura ---------- */
.estado-factura.es-borrador {
  color: #6B6A62;
}

.estado-factura.es-emitida {
  color: var(--mereba-green);
}

.estado-factura.es-anulada {
  color: #A32222;
  text-decoration: line-through;
}

.estado-factura.es-rectificada {
  color: #94631A;
}

/* ---------- Aviso de entorno de pruebas ----------
   Franja permanente para que nadie confunda una factura de pruebas con una real. */
.aviso-pruebas {
  background: repeating-linear-gradient(
    45deg,
    #FBEFD8,
    #FBEFD8 12px,
    #F6E6C8 12px,
    #F6E6C8 24px
  );
  border: 1px solid #E0CFA5;
  border-radius: var(--mereba-radius-sm);
  color: #7A5312;
  font-weight: 700;
  padding: var(--mereba-space-3) var(--mereba-space-4);
  margin-bottom: var(--mereba-space-5);
}

/* ---------- Bloque del QR tributario ----------
   Reproduce en pantalla lo que exige el art. 21 de la Orden HAC/1177/2024 para
   la factura impresa: leyenda "QR tributario:" encima, QR entre 30 y 40 mm con
   zona de silencio, y la mencion VERI*FACTU debajo. */
.qr-tributario {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: var(--mereba-space-2);
  padding: var(--mereba-space-3);
  background: #FFFFFF;
  border: 1px solid var(--mereba-line);
  border-radius: var(--mereba-radius-sm);
}

.qr-tributario .qr-titulo,
.qr-tributario .qr-leyenda {
  font-size: 0.78rem;
  font-weight: 700;
  text-align: center;
  color: var(--mereba-ink);
}

.qr-tributario img {
  width: 35mm;
  height: 35mm;
  display: block;
}

/* ---------- Tablas de facturas ---------- */
.tabla-facturas td,
.tabla-facturas th {
  vertical-align: middle;
}

.tabla-facturas .col-importe {
  text-align: right;
}

/* ---------- Impresion ---------- */
@media print {
  .navbar,
  .footer,
  .aviso-pruebas,
  .no-imprimir {
    display: none !important;
  }
}

/* ============================================================================
   E12 — rediseño del panel: cabeceras de página, navegación, formularios
   por secciones, paneles de alta plegables y la ficha de factura como hoja.
   ========================================================================== */

/* ---------- Navegación: sección activa ---------- */
.navbar.is-dark .navbar-item.es-actual {
  box-shadow: inset 0 -3px 0 #FFFFFF;
  color: #FFFFFF;
  font-weight: 700;
}

.navbar .navbar-item .icon img {
  filter: brightness(0) invert(1);
  opacity: 0.85;
  width: 1rem;
  height: 1rem;
}

/* ---------- Cabecera de página ----------
   Título a la izquierda, acciones a la derecha, y debajo el hilo de
   navegación. Es el mismo bloque en todas las pantallas. */
.cabecera-pagina {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--mereba-space-4);
  margin-bottom: var(--mereba-space-5);
  padding-bottom: var(--mereba-space-4);
  border-bottom: 1px solid var(--mereba-line);
}

.cabecera-pagina .title {
  margin-bottom: 0.75rem;
  line-height: 1.3;
}

.table.tabla-gestion td.importe,
.table.tabla-gestion .col-iva {
  white-space: nowrap;
}

.cabecera-pagina .subtitle {
  margin-top: 0;
  margin-bottom: 0;
  max-width: 64ch;
  font-size: 1rem;
  line-height: 1.5;
}

.cabecera-pagina .acciones {
  display: flex;
  flex-wrap: wrap;
  gap: var(--mereba-space-2);
  align-items: center;
}

.breadcrumb.is-small {
  margin-bottom: var(--mereba-space-3);
}

/* ---------- Tarjetas quietas ----------
   El tema hace que todas las tarjetas «salten» al pasar el ratón. En una
   aplicación de gestión eso distrae: aquí solo se mueven las que son enlace. */
/* El tema estira todas las tarjetas a la altura de su columna
   (`height: 100%`). Con dos tarjetas apiladas en una columna, la segunda
   se sale del pie de página. Aquí las tarjetas miden lo que contienen. */
.mereba-card {
  height: auto;
}

.table.tabla-gestion .col-momento,
.table.tabla-gestion .col-nowrap {
  white-space: nowrap;
}

.mereba-card:not(.is-interactive):hover {
  transform: none;
  box-shadow: var(--mereba-shadow-sm);
}

.mereba-card .title.is-5,
.mereba-card .title.is-6 {
  margin-bottom: var(--mereba-space-4);
}

/* ---------- Panel de alta plegable ---------- */
details.panel-alta {
  background: var(--mereba-cream-soft);
  border: 1px solid var(--mereba-line);
  border-radius: var(--mereba-radius);
  margin-bottom: var(--mereba-space-5);
  box-shadow: var(--mereba-shadow-sm);
}

details.panel-alta > summary {
  cursor: pointer;
  list-style: none;
  padding: var(--mereba-space-4) 1.75rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--mereba-space-3);
  font-weight: 700;
  color: var(--mereba-green-dark);
}

details.panel-alta > summary::-webkit-details-marker {
  display: none;
}

details.panel-alta > summary::after {
  content: "";
  width: 0.6rem;
  height: 0.6rem;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  transition: transform var(--mereba-transition-fast);
  flex: none;
}

details.panel-alta[open] > summary::after {
  transform: rotate(-135deg);
}

details.panel-alta[open] > summary {
  border-bottom: 1px solid var(--mereba-line);
}

details.panel-alta > .cuerpo {
  padding: var(--mereba-space-5) 1.75rem;
}

/* ---------- Formularios por secciones ----------
   Cada <fieldset> es una pregunta («¿Qué se factura?», «¿A quién?») con una
   línea de ayuda. Los bloques condicionados llevan [hidden] hasta que la
   opción elegida los necesita. */
.formulario fieldset {
  border: 0;
  padding: 0;
  margin: 0 0 var(--mereba-space-5) 0;
}

.formulario fieldset:last-of-type {
  margin-bottom: 0;
}

.formulario legend {
  font-weight: 700;
  color: var(--mereba-green-dark);
  font-size: 1rem;
  padding: 0;
  margin-bottom: var(--mereba-space-1);
}

.formulario .ayuda {
  color: #6B6A62;
  font-size: 0.85rem;
  margin-bottom: var(--mereba-space-3);
  max-width: 70ch;
}

.formulario .label {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--mereba-ink);
  margin-bottom: 0.25rem;
}

.formulario .label .opcional {
  font-weight: 400;
  color: #6B6A62;
}

.formulario .field {
  margin-bottom: var(--mereba-space-3);
}

.formulario .help {
  color: #6B6A62;
}

.formulario .help.is-danger {
  color: #A32222;
  font-weight: 600;
}

.formulario .input,
.formulario .textarea,
.formulario .select select {
  background: #FFFFFF;
}

.formulario .input.dato-fiscal,
.formulario input[inputmode="decimal"] {
  font-family: var(--mereba-font-mono);
  text-align: right;
}

.formulario .select,
.formulario .select select {
  width: 100%;
}

.formulario .acciones-formulario {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--mereba-space-3);
  padding-top: var(--mereba-space-4);
  border-top: 1px solid var(--mereba-line);
  margin-top: var(--mereba-space-4);
}

.formulario .bloque-condicional {
  border-left: 3px solid var(--mereba-purple);
  padding-left: var(--mereba-space-4);
  margin: var(--mereba-space-3) 0;
}

/* Botones de opción grandes (identificación del cliente, tipo de factura). */
.opciones-segmento {
  display: flex;
  flex-wrap: wrap;
  gap: var(--mereba-space-2);
  margin-bottom: var(--mereba-space-3);
}

.opciones-segmento label {
  cursor: pointer;
  border: 1px solid var(--mereba-line);
  border-radius: var(--mereba-radius-sm);
  padding: 0.5rem 0.9rem;
  background: #FFFFFF;
  font-size: 0.9rem;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.opciones-segmento label:has(input:checked) {
  border-color: var(--mereba-green);
  background: #E2EFE7;
  color: var(--mereba-green-dark);
  font-weight: 700;
}

.opciones-segmento input {
  accent-color: var(--mereba-green);
}

.opciones-segmento label:has(input:focus-visible) {
  outline: 2px solid var(--mereba-purple);
  outline-offset: 2px;
}

/* ---------- Aviso suave dentro de un formulario ---------- */
.aviso-inline {
  background: #FBEFD8;
  border: 1px solid #E0CFA5;
  border-radius: var(--mereba-radius-sm);
  color: #7A5312;
  padding: var(--mereba-space-2) var(--mereba-space-3);
  font-size: 0.85rem;
  margin-bottom: var(--mereba-space-3);
}

.aviso-inline.es-info {
  background: #E6E2F0;
  border-color: #CFC5E3;
  color: var(--mereba-purple-dark);
}

/* ---------- Listados ---------- */
.barra-filtros {
  display: flex;
  flex-wrap: wrap;
  gap: var(--mereba-space-2);
  align-items: center;
  margin-bottom: var(--mereba-space-4);
}

.barra-filtros .control.is-expanded {
  flex: 1 1 16rem;
}

.table.tabla-gestion th {
  font-size: 0.78rem;
  text-transform: none;
  letter-spacing: 0;
  color: #6B6A62;
  font-weight: 600;
  border-bottom-width: 1px;
}

.table.tabla-gestion td,
.table.tabla-gestion th {
  vertical-align: middle;
}

.table.tabla-gestion .col-acciones {
  text-align: right;
  white-space: nowrap;
}

.table.tabla-gestion .col-acciones form {
  display: inline;
}

.table.tabla-gestion a.principal {
  font-weight: 700;
}

.table.tabla-gestion tr.es-inactivo td {
  color: #9A998F;
}

.estado-vacio {
  text-align: center;
  padding: var(--mereba-space-7) var(--mereba-space-4);
  color: #6B6A62;
}

.estado-vacio .title {
  color: var(--mereba-green-dark);
  margin-bottom: var(--mereba-space-2);
}

/* ---------- Cuadro de mando (portada) ---------- */
.cifras {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: var(--mereba-space-3);
  margin-bottom: var(--mereba-space-5);
}

.cifra {
  background: var(--mereba-cream-soft);
  border: 1px solid var(--mereba-line);
  border-radius: var(--mereba-radius);
  padding: var(--mereba-space-4);
  text-decoration: none;
  color: inherit;
  display: block;
}

.cifra:hover {
  border-color: var(--mereba-green);
  color: inherit;
}

.cifra .numero {
  font-family: var(--mereba-font-mono);
  font-size: 2rem;
  line-height: 1;
  color: var(--mereba-green-dark);
  font-variant-numeric: tabular-nums;
}

.cifra .numero.es-aviso {
  color: #94631A;
}

.cifra .texto {
  display: block;
  margin-top: var(--mereba-space-2);
  font-size: 0.85rem;
  color: #6B6A62;
}

/* ---------- Ficha de factura: la hoja ----------
   La cabecera de una factura emitida se lee como el documento, no como un
   formulario: número grande, destinatario y totales a la derecha. */
.hoja-factura {
  background: #FFFFFF;
  border: 1px solid var(--mereba-line);
  border-top: 5px solid var(--mereba-green);
  border-radius: var(--mereba-radius);
  padding: 1.75rem;
  box-shadow: var(--mereba-shadow-sm);
}

.hoja-factura .numero-factura {
  font-family: var(--mereba-font-mono);
  font-size: 1.6rem;
  color: var(--mereba-green-dark);
  letter-spacing: 0.02em;
}

.hoja-factura .partes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--mereba-space-4);
  margin-top: var(--mereba-space-4);
}

@media (max-width: 640px) {
  .hoja-factura .partes {
    grid-template-columns: 1fr;
  }
}

.hoja-factura .parte dt {
  font-size: 0.75rem;
  color: #6B6A62;
  font-weight: 600;
}

.hoja-factura .parte dd {
  margin: 0 0 var(--mereba-space-2) 0;
}

.totales {
  margin-left: auto;
  min-width: 16rem;
  border-top: 1px solid var(--mereba-line);
  margin-top: var(--mereba-space-3);
  padding-top: var(--mereba-space-2);
}

.totales .fila {
  display: flex;
  justify-content: space-between;
  gap: var(--mereba-space-4);
  padding: 0.2rem 0;
}

.totales .fila.es-total {
  font-weight: 700;
  font-size: 1.15rem;
  border-top: 2px solid var(--mereba-green-dark);
  margin-top: 0.25rem;
  padding-top: 0.4rem;
}

.totales .fila .importe {
  font-family: var(--mereba-font-mono);
}

/* Lo que la ficha ofrece hacer con una factura, agrupado en una columna. */
.acciones-ficha .mereba-card + .mereba-card {
  margin-top: var(--mereba-space-4);
}

.acciones-ficha .buttons {
  margin-bottom: 0;
}

.acciones-ficha .peligro {
  border-color: #E8C4C4;
}

/* Estado del PDF archivado en el bucket. */
.archivo-pdf {
  display: flex;
  align-items: flex-start;
  gap: var(--mereba-space-3);
  font-size: 0.85rem;
}

.archivo-pdf .punto {
  width: 0.7rem;
  height: 0.7rem;
  border-radius: 50%;
  margin-top: 0.3rem;
  flex: none;
  background: #BDBBB2;
}

.archivo-pdf.es-archivado .punto {
  background: var(--mereba-green);
}

.archivo-pdf.es-pendiente .punto {
  background: #94631A;
}

/* Líneas del borrador: previsión de importes. */
.prevision {
  font-size: 0.8rem;
  color: #6B6A62;
}

.linea-nueva {
  background: #FFFFFF;
  border: 1px dashed var(--mereba-line);
  border-radius: var(--mereba-radius-sm);
  padding: var(--mereba-space-4);
  margin-top: var(--mereba-space-4);
}

.linea-nueva .rejilla {
  display: grid;
  grid-template-columns: 2fr repeat(3, minmax(5rem, 0.6fr)) 1.6fr minmax(5rem, 0.6fr);
  gap: var(--mereba-space-2);
  align-items: end;
}

@media (max-width: 900px) {
  .linea-nueva .rejilla {
    grid-template-columns: 1fr 1fr;
  }
}

.linea-nueva .pie-linea {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--mereba-space-3);
  margin-top: var(--mereba-space-3);
}

/* ---------- Mensajes flash con cierre ---------- */
.notification.flash {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--mereba-space-3);
}

.notification.flash .cerrar {
  background: none;
  border: 0;
  cursor: pointer;
  font-size: 1.1rem;
  line-height: 1;
  color: inherit;
  opacity: 0.7;
}

.notification.flash .cerrar:hover {
  opacity: 1;
}

/* ---------- Página de entrada ---------- */
.portada-entrada {
  max-width: 28rem;
}

/* ---------- Desplegables que py4web pinta sin el envoltorio de Bulma ----------
   El widget de `Form` es un <select class="select"> a secas; Bulma espera
   <div class="select"><select>. Sin el envoltorio, el <select> hereda la
   tipografia de titulares del tema y sale en versalitas. Aqui se le da el
   aspecto de un control normal. */
.formulario select.select {
  font-family: var(--mereba-font-body);
  font-size: 1rem;
  letter-spacing: normal;
  text-transform: none;
  width: 100%;
  height: 2.5em;
  padding: 0 2.25em 0 0.75em;
  border: 1px solid #dbdbdb;
  border-radius: var(--mereba-radius-sm);
  background: #FFFFFF;
  color: var(--mereba-ink);
}

.formulario select.select:focus {
  border-color: var(--mereba-green);
  outline: none;
  box-shadow: 0 0 0 0.125em rgba(0, 112, 60, 0.25);
}

/* Lineas del borrador: mas densas, para que quepan las columnas de importes
   y el boton de quitar sin desplazamiento horizontal. */
.tabla-lineas {
  font-size: 0.85rem;
}

.tabla-lineas td,
.tabla-lineas th {
  padding: 0.4em 0.5em;
}
