/* Sistema de diseño del Escaparate de La Zarza.
 *
 * EL ESQUELETO ES EL DE LABARRA (D-12): papel, tinta, tecla, cifras y medidas,
 * copiados de `LaBarra/public/shared/tokens.css` (commit 971bfb0, 2026-09-03).
 * Cuando LaBarra cambie uno de ESOS valores, se cambia aquí el mismo.
 *
 * LOS COLORES SON LOS DEL ESCUDO DEL PUEBLO (D-25, 2026-09-04): el azul del
 * rótulo, el amarillo del sol y el verde de la loma de lazarza.net, en el
 * reparto «A · Institucional» que eligió el director. En esto LaBarra ya no
 * manda: su verde y su ámbar se fueron. Contrastes medidos sobre el papel de
 * aquí, no sobre blanco; ver `tests/estetica.test.js`.
 *
 * LAS CUATRO REGLAS QUE NO SE ROMPEN
 *
 *   1. EL AMARILLO ES EL RELOJ Y EL AVISO, Y NADA MÁS. Los días que quedan, la
 *      caducidad y la etiqueta de «cartel de muestra». Nunca un botón, nunca
 *      un título, nunca un nombre de comercio. Sobre papel no se lee como
 *      texto (1,4:1): en texto se usa `--ambar-tinta`, el mismo color bajado
 *      hasta poder leerse.
 *   2. EL COLOR DE LA CASA CONTESTA DOS PREGUNTAS, Y NADA MÁS: «¿dónde estoy?»
 *      y «¿qué puedo pulsar?». DOS colores desde D-28: el azul del vecino, que
 *      la pantalla del comercio comparte, y el ciruela del director. Lo llevan
 *      la cabecera y TODO lo pulsable. UN SOLO COLOR PARA TODOS LOS COMERCIOS:
 *      que uno destaque por color es el mismo agravio que destacar por orden.
 *   3. LO PULSABLE PARECE UNA TECLA. Canto inferior grueso y oscuro, y se
 *      hunde al pulsarlo: un bulto que se hunde no hay que aprenderlo.
 *   4. LAS CIFRAS VAN EN MONOESPACIADA Y TABULAR. Los nombres, en la de siempre.
 *
 * Y LA LETRA (D-25, con la Fase 15 de Asociaciones de modelo): en el pueblo
 * hay mucha gente mayor y esto se lee de pie en la calle. Hay DOS tamaños,
 * `--letra-cuerpo` para lo que se lee y `--letra-control` para la maquinaria
 * (botones, campos, etiquetas). Subir el cuerpo no mueve ninguna fila. NO SE
 * TOCA `html { font-size }`: subirlo movería todos los rem, o sea la página.
 *
 * Sin tema oscuro, sin colores de categoría y sin color por comercio (D-12).
 */

:root {
  /* El papel. Cálido, no blanco de oficina: se mira a media luz y con el
     brillo del móvil bajo. Mismos valores que el jukebox. */
  --fondo: #f1ede7;
  --papel: #fffefc;
  --linea: #e4ded6;
  /* El filete del margen de la libreta. Es la única línea que pesa. */
  --margen: #cfc6ba;

  /* La tinta. Negro cálido con algo de ciruela. */
  --tinta: #221b26;
  --tinta-suave: #6b6270;

  /* EL RELOJ Y EL AVISO: el sol del escudo. Regla 1. En texto, la tinta. */
  --ambar: #F4DE25;
  --ambar-tinta: #5C4A00;
  --ambar-suave: #FDF4C2;

  /* Se está acabando, o algo ha ido mal. No está en el escudo; hace falta. */
  --brasa: #A32F1E;
  --brasa-suave: #fbeae5;

  /* Cuadra. El verde de la loma, bajado hasta leerse (6,4:1). */
  --valido: #2F6B14;
  --valido-suave: #EAF4E1;

  /* LA LETRA: lo que se lee, y la maquinaria. 20 px y 17 px sobre 16 de base. */
  --letra-cuerpo: 1.25rem;
  --letra-control: 1.0625rem;

  --maquina: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
  --gente: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

  --r-sm: 6px; --r-md: 10px; --r-lg: 14px;
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 24px; --s-6: 36px;

  /* 44 es el mínimo de una aplicación normal. Aquí se pulsa con los guantes de
     moto puestos, y eso lo mide la spec, no el gusto. */
  --tap: 56px;

  --relieve: 0 1px 2px rgba(34, 27, 38, .05), 0 1px 10px rgba(34, 27, 38, .04);
  --relieve-alto: 0 -2px 20px rgba(34, 27, 38, .10);

  color-scheme: light;

  /* ── EL COLOR DE LA CASA. Regla 2 ───────────────────────────────────────
     Los de aquí son los del escaparate —el azul del rótulo del escudo, 8,2:1
     sobre papel— y los sirve también la pantalla del comercio, que desde D-28
     no declara los suyos. El director sí redefine el ciruela en su hoja.

       --casa        la cabecera y el relleno de lo pulsable
       --casa-hondo  el canto de la tecla, y el fondo al pulsarla
       --casa-tenue  el borde de lo pulsable que NO es la acción principal
       --casa-suave  el papel teñido: lo elegido, lo marcado, el foco

     Ninguno es amarillo, y ninguno se acerca a la brasa: si el color de la
     casa se confundiera con el reloj o con un aviso, habría dejado de
     contestar una pregunta. */
  --casa: #244A9E;
  --casa-hondo: #1A3673;
  --casa-tenue: #A9BBE0;
  --casa-suave: #E9EFFA;

}

* { box-sizing: border-box; }

/* `hidden` tiene que ganar a cualquier regla de componente que fije display. */
[hidden] { display: none !important; }

body {
  margin: 0;
  font-family: var(--gente);
  font-size: var(--letra-cuerpo);
  line-height: 1.45;
  color: var(--tinta);
  background: var(--fondo);
  -webkit-text-size-adjust: 100%;
}

h1, h2, h3 { margin: 0; font-weight: 700; }

/* ── El rótulo de la casa ─────────────────────────────────────────────────
   Sin tipografía descargada, a propósito: esto se abre junto a una nevera, a
   veces compartiendo los datos de un móvil. El carácter lo pone el
   TRATAMIENTO —versales estrechas, muy espaciadas, como un rótulo pintado en
   la pared del garaje—, no un fichero de 40 KB que puede no llegar.

   La cabecera va en el COLOR DE LA CASA y no en tinta (regla 2): es la banda
   más grande y más estable de la pantalla, y es lo primero que se ve al
   abrirla. Que «Me sirvo» sea verde y «El local» ciruela contesta «¿dónde
   estoy?» desde el otro lado del local, sin leer una palabra — que es
   exactamente como lo mira quien no está acostumbrado a esto. */
.barra {
  position: sticky; top: 0; z-index: 5;
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--s-3);
  padding: var(--s-3) var(--s-4);
  background: var(--casa);
  color: var(--papel);
  /* El canto oscuro es el mismo recurso que el de las teclas: separa la banda
     del papel sin una línea que parezca un borde. */
  border-bottom: 3px solid var(--casa-hondo);
}
.barra-marca { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.barra-casa {
  font-size: .8rem; font-weight: 700; letter-spacing: .34em; text-transform: uppercase;
  color: rgba(255, 254, 252, .72);
}
.barra-donde {
  font-size: 1.6rem; font-weight: 700; letter-spacing: .02em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.barra nav { display: flex; align-items: center; gap: var(--s-2); flex-shrink: 0; }
/* Pastillas con borde, no texto: a un texto no se le nota que lleva a otro
   sitio. `.foro-globo` es «Foro» + globo en la barra de la portada (D-63.8):
   fuera de <nav> porque la portada no lleva botones de salto (D-27), y solo
   lo ve quien tiene clave guardada y mensajes sin leer. */
.barra nav a, .barra nav button, .barra .foro-globo {
  display: inline-flex; align-items: center; gap: var(--s-2);
  min-height: 44px; padding: 0 var(--s-3);
  border: 1.5px solid rgba(255, 254, 252, .45); border-radius: 999px;
  background: rgba(255, 254, 252, .16);
  font: inherit; font-size: var(--letra-control); font-weight: 700;
  color: var(--papel); text-decoration: none; cursor: pointer;
  white-space: nowrap;
}
.barra nav a:hover, .barra nav button:hover, .barra .foro-globo:hover { background: var(--papel); color: var(--casa); }
.barra nav a:active, .barra nav button:active, .barra .foro-globo:active { transform: translateY(1px); }
/* El globo rojo con la cifra de nuevos del foro (D-63.7), en Mi cartel y en la
   barra de la portada; solo se ve con algo nuevo, y no baja de 1rem. */
.globo {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 1.75em; height: 1.75em; padding: 0 .5em; border-radius: 999px;
  background: var(--brasa); color: var(--papel);
  font-size: 1rem; font-weight: 700; line-height: 1;
}

/* ── El epígrafe ──────────────────────────────────────────────────────────
   El rótulo de una sección de la libreta. Pequeño, ancho y apagado: nombra sin
   competir con lo que nombra. */
.epigrafe {
  margin: 0 0 var(--s-3);
  font-size: .8rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase;
  color: var(--tinta-suave);
  display: flex; align-items: baseline; justify-content: space-between; gap: var(--s-3);
}

/* ── Las cifras. Regla 3 ──────────────────────────────────────────────────
   `tabular-nums` es lo que alinea las comas en una columna de euros. */
.cifra {
  font-family: var(--maquina);
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  letter-spacing: -.01em;
}
/* Regla 1: el reloj es ámbar, y en texto se lee con `--ambar-tinta`. */
.reloj { color: var(--ambar-tinta); }

/* ── Lo pulsable. Reglas 2 y 3 ───────────────────────────────────────────
   Un botón aquí tiene DOS señales, y las dos hacen falta:

     · el color de la casa, que dice «esto es de las cosas que se tocan»;
     · el canto inferior grueso y oscuro, que dice «esto sobresale».

   La segunda es la que de verdad funciona con quien no ha usado nunca una
   aplicación. Un rectángulo de color plano es una convención aprendida —hay
   que saber que en las pantallas el color significa botón—; un bulto que se
   hunde al apretarlo no hay que aprenderlo, es lo mismo que un interruptor de
   la luz. Por eso el canto no es un adorno y no se quita para «modernizar».

   El hundido son 2 px de canto que se pierden y 2 px que baja el botón: el
   borde de abajo se queda donde estaba y el de arriba desciende, que es
   exactamente lo que hace una tecla de verdad. */
.btn {
  min-height: var(--tap);
  display: inline-flex; align-items: center; justify-content: center; gap: var(--s-2);
  padding: 0 var(--s-4);
  border: 2px solid var(--casa-tenue); border-bottom-width: 4px;
  border-radius: var(--r-md);
  background: var(--papel); color: var(--casa);
  font: inherit; font-size: var(--letra-control); font-weight: 700; text-decoration: none;
  cursor: pointer;
  transition: transform .06s ease, background-color .12s ease, border-bottom-width .06s ease;
}
.btn:hover { background: var(--casa-suave); }
.btn:active { transform: translateY(2px); border-bottom-width: 2px; }
/* La acción principal va rellena: en una pantalla con cuatro botones, uno solo
   puede ser el que se pulsa al final. */
.btn-primary {
  background: var(--casa); border-color: var(--casa-hondo); color: var(--papel);
}
.btn-primary:hover { background: var(--casa-hondo); }
/* Deshabilitado se apaga del todo —gris, sin color de casa y sin canto—: si
   sigue pareciendo una tecla, se pulsa, y no pasa nada. Eso es peor que no
   poder pulsarlo. */
.btn:disabled, .btn-primary:disabled {
  background: var(--linea); border-color: var(--margen); border-bottom-width: 2px;
  color: var(--tinta-suave); cursor: not-allowed; transform: none;
}
/* El de salir de un paso sin hacer nada. No lleva canto —no es una tecla— pero
   sí el color de la casa y subrayado, que es lo que se ha entendido como «esto
   lleva a algún sitio» desde la primera pantalla que existió. */
.btn-ghost {
  background: transparent; border-color: transparent; border-bottom-width: 2px;
  color: var(--casa); text-decoration: underline; text-underline-offset: 3px;
}
.btn-ghost:hover { background: var(--casa-suave); }
/* Borrar y corregir NO son de la casa: son brasa. Lo que puede doler tiene su
   propio color en las tres pantallas, y es el mismo que el de «se acaba». */
.btn-peligro { color: var(--brasa); border-color: #e2b6a8; }
.btn-peligro:hover { background: var(--brasa-suave); }
.btn-menor { min-height: 44px; padding: 0 var(--s-3); }

/* El foco se ve SIEMPRE. Se pulsa con guantes, pero también se navega con
   teclado desde el portátil que hay en el local. */
:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: 3px solid var(--tinta);
  outline-offset: 2px;
}

/* ── Formularios ─────────────────────────────────────────────────────── */
label { display: flex; flex-direction: column; gap: var(--s-1); }
.etiqueta-campo {
  font-size: .8rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  color: var(--tinta-suave);
}
/* Dos píxeles de borde y no uno: una casilla vacía sobre papel del mismo tono
   no se ve que es una casilla, y quien viene del papel espera un recuadro
   dibujado, no un cambio de blancos. */
input, select, textarea {
  min-height: var(--tap);
  padding: var(--s-2) var(--s-3);
  border: 2px solid var(--margen); border-radius: var(--r-md);
  background: var(--papel); color: var(--tinta);
  font: inherit; font-size: var(--letra-control);
}
textarea { min-height: 80px; resize: vertical; }
/* La casilla en la que se está escribiendo se tiñe del color de la casa: en un
   formulario de seis campos, saber cuál tiene el cursor es la mitad del
   trabajo. */
input:focus, select:focus, textarea:focus {
  border-color: var(--casa); background: var(--casa-suave);
}
/* Las casillas que piden dinero o unidades son cifras: se teclean y se leen
   como cifras. */
input[type="number"] { font-family: var(--maquina); font-variant-numeric: tabular-nums; }
input::placeholder, textarea::placeholder { color: var(--tinta-suave); opacity: .8; }

/* ── La libreta: renglones con margen ─────────────────────────────────────
   El filete de la izquierda es el margen del libro. Es lo más cerca de un
   adorno que hay en el sistema, y está porque dice algo cierto: estas filas
   son asientos de un libro, no tarjetas sueltas. */
.libreta {
  list-style: none; margin: 0; padding: 0 0 0 var(--s-4);
  border-left: 2px solid var(--margen);
}
.renglon {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  gap: var(--s-1) var(--s-3);
  padding: var(--s-3) 0;
  border-bottom: 1px solid var(--linea);
}
.renglon:last-child { border-bottom: 0; }
.renglon-que { font-weight: 600; }
.renglon-pie { grid-column: 1 / -1; font-size: 1rem; color: var(--tinta-suave); }

/* Un apunte corregido NO se esconde: se tacha, y su contrario queda debajo. */
.renglon[data-estado="anulado"] .renglon-que,
.renglon[data-estado="anulado"] .renglon-dinero { text-decoration: line-through; opacity: .5; }

/* ── Tablas. Son datos, y se leen como un libro mayor ─────────────────── */
.tabla-scroll { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: .95rem; }
th, td { padding: var(--s-3) var(--s-3) var(--s-3) 0; text-align: left; border-bottom: 1px solid var(--linea); white-space: nowrap; }
th {
  font-size: .64rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  color: var(--tinta-suave); border-bottom-color: var(--margen);
}
td:last-child, th:last-child { padding-right: 0; }
tbody tr:last-child td { border-bottom: 0; }
caption { text-align: left; padding: var(--s-3) 0; color: var(--tinta-suave); }
/* Las columnas de números se alinean por la coma, no por el borde. */
td.num, th.num { text-align: right; font-family: var(--maquina); font-variant-numeric: tabular-nums; }

/* ── Estados del género ──────────────────────────────────────────────────
   Ni «queda poco» ni «no hay» gastan ámbar: el ámbar es del dinero. Lo que se
   acaba es brasa, y lo que ya no hay se apaga. */
.poco { color: var(--brasa); font-weight: 700; }
.agotado { color: var(--tinta-suave); font-weight: 700; }
.cuadra { color: var(--valido); font-weight: 700; }

/* ── Pastillas ───────────────────────────────────────────────────────── */
.pastilla {
  display: inline-block; padding: 2px var(--s-2); border-radius: 999px;
  border: 1px solid var(--linea); background: var(--fondo);
  font-size: .8rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--tinta-suave); vertical-align: 2px;
}

/* ── Avisos y notas ──────────────────────────────────────────────────── */
.nota { margin: 0; color: var(--tinta-suave); font-size: 1.05rem; }
.error { margin: 0; color: var(--brasa); font-weight: 600; }
.error a { color: inherit; }

/* ── El recado ───────────────────────────────────────────────────────────
   Sustituye a `alert()`. Un `alert` del navegador en un móvil no se puede leer
   con una copa en la mano: sale del sistema, no dice de qué pantalla viene y
   bloquea el pulgar hasta acertar con «Aceptar». */
.recado {
  position: fixed; left: 50%; bottom: calc(var(--s-5) + env(safe-area-inset-bottom));
  transform: translate(-50%, 12px);
  max-width: min(92vw, 30rem);
  padding: var(--s-3) var(--s-4);
  border-radius: var(--r-lg);
  background: var(--tinta); color: var(--papel);
  font-weight: 600; text-align: center;
  box-shadow: var(--relieve-alto);
  opacity: 0; pointer-events: none; z-index: 60;
  transition: opacity .18s ease, transform .18s ease;
}
.recado.se-ve { opacity: 1; transform: translate(-50%, 0); }
.recado[data-tono="mal"] { background: var(--brasa); }
.recado[data-tono="bien"] { background: var(--valido); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
  /* Se quita el desplazamiento, no el hundido del canto (4 px a 2): quien pide
     menos movimiento sigue viendo que ha pulsado. */
  .btn:active, .paso:active { transform: none; }
}
