/* =============================================================================
   LE TICKET DE CAISSE — 58 ou 80 mm, en hébreu, de droite à gauche.

   ⚠️  REPRIS DE LA MAQUETTE VALIDÉE PAR DAVID : `ticket_58mm.html`, déposée à
       la racine du bureau. L'ordre des blocs, les libellés hébreux, les tailles
       en millimètres et la place du QR en viennent. **Elle fait foi ; on ne la
       réinvente pas.**

   ⚠️  CE TICKET N'EST PAS UN DOCUMENT FISCAL, et il le dit en pied.
       `PARCOURS_CAISSE_V3.md` §6, réécrit le 21/08 : les הוראות ניהול ספרים
       interdisent de réimprimer un document dans une autre mise en page et de
       le remettre au client comme original (§18(a)(2)). **Le ticket renvoie à
       l'original, il ne le remplace pas.**

   LA LARGEUR EST UN RÉGLAGE, pas une constante : `--rouleau` est posée par
   `ticket.js` depuis `reglages_ticket()`. Toutes les mesures en découlent —
   c'est pour cela qu'elles sont en `mm` et non en `px`.
   ============================================================================= */

:root { --rouleau: 58mm; }

/* La zone d'impression vit hors de la caisse : elle n'est jamais visible à
   l'écran, elle n'existe que pour l'imprimante et pour l'aperçu. */
#zone-ticket { display: none; }
#zone-ticket.apercu { display: block; }

.ticket {
  width: var(--rouleau);
  background: #fff;
  color: #000;
  padding: 3mm 5mm 4mm;
  font-size: 2.55mm;
  line-height: 1.5;
  direction: rtl;
  text-align: right;
  font-family: "Segoe UI", "Arial Hebrew", Arial, sans-serif;
}

/* Le 80 mm respire : la maquette est calée sur 58, on ne fait grandir que ce
   qui gagne à l'être. Les corps de texte ne bougent pas — un ticket thermique
   se lit à la même distance quelle que soit la largeur du rouleau. */
.ticket.large { padding: 4mm 6mm 5mm; }

.ticket .c { text-align: center; }

.ticket .he  { font-size: 4.2mm; font-weight: 700; }
.ticket.large .he { font-size: 5mm; }
.ticket .tag { font-size: 2mm; letter-spacing: .2em; color: #333; direction: ltr; }
.ticket .meta { font-size: 2.3mm; color: #222; line-height: 1.45; }

.ticket hr   { border: 0; border-top: .2mm dashed #666; margin: 1.6mm 0; }
.ticket hr.f { border-top: .35mm solid #000; margin: 1.6mm 0; }

/* Une ligne : le libellé à droite (RTL), le montant à gauche. */
.ticket .l { display: flex; justify-content: space-between; gap: 2mm; }

/* ⚠️  LES MONTANTS SONT EN CHIFFRES LATINS, ET ILS DOIVENT LE RESTER.
       `direction: ltr` + `unicode-bidi: embed` : sans cela, un montant collé à
       du texte hébreu se retourne — « 70.00 » devient « 00.70 ». Le défaut
       classique du bidirectionnel, et il ne se voit qu'à l'impression. */
.ticket .n {
  direction: ltr; unicode-bidi: embed;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}

.ticket .q   { color: #333; font-size: 2.3mm; }
.ticket .tot { font-size: 3.4mm; font-weight: 700; }
.ticket.large .tot { font-size: 4mm; }
.ticket .red { font-weight: 600; }

/* ⚠️  40 mm — DÉCISION DE DAVID, 23/08 (`B000-D152` fermée). Le 25 mm mesuré
       plus tôt le même jour tombe : il tenait, mais il ne rapportait rien.

       **Le grand format paie deux fois.** À 40 mm il reste de la place pour une
       correction plus forte, et le générateur passe donc en **`Q`** — il tolère
       qu'un **quart** du code soit effacé, contre 7 % en `L`. Un ticket
       thermique se froisse et pâlit au fond d'une poche : même taille, aucun
       coût, beaucoup plus robuste.

       ⛔ CES CHIFFRES ÉTAIENT FAUX DEUX FOIS, ET LE QR NE SORTAIT PAS — 05/09.

       **Première erreur : la marge claire n'était pas comptée.** Le SVG dessine
       quatre modules de zone claire de chaque côté : l'image fait `t + 8`
       modules, pas `t`. Le « 3,95 pt » ci-dessus valait déjà 3,59 pour sa
       propre hypothèse.

       **Seconde erreur : la clé de Tranzila a grandi le 03/09**, de 256 à 288
       caractères — 85 ventes portent l'ancienne, 21 la nouvelle. Le QR n'a donc
       pas UNE taille, il en a deux, et rien ne dit qu'il n'en aura pas une
       troisième.

       Mesuré le 05/09, thermique 203 ppp (1 mm = 7,9921 points) :

         | clé | adresse | version | modules + marge | à 40 mm | à 48 mm |
         |-----|---------|---------|-----------------|---------|---------|
         | 256 |  307 o  |   16    |   81 + 8 =  89  | 3,59 pt | 4,31 pt |
         | 288 |  339 o  |   17    |   85 + 8 =  93  | 3,44 pt | 4,12 pt |

       ⭐ **48 mm — DÉCISION DE DAVID, 05/09** : *« le QR doit être de la largeur
          du ticket. »* C'est exactement la largeur utile du rouleau — 58 mm
          moins les 5 mm de marge de chaque côté — et **c'est aussi la largeur
          imprimable d'une tête 58 mm** (384 points = 48,06 mm).

       ⚠️  ON NE VISE PAS UN NOMBRE ENTIER DE POINTS PAR MODULE, ET C'EST
           DÉLIBÉRÉ. 46,55 mm donnerait 4,00 pt pour la clé de 288 — et 4,18 pt
           pour celle de 256. **Aucune largeur ne peut être juste pour les deux**,
           et le fournisseur décide de la taille. La plus grande largeur
           disponible est la seule règle qui survive au prochain allongement.

       ⛔ LA `height` N'EST PAS DÉCORATIVE, ELLE EST LA CORRECTION.
          Le QR était un `<img>` avec `width` et **aucune `height`**. À l'instant
          du `print()`, l'image valait `complete: false`, `naturalWidth: 0`
          (mesuré en ligne le 05/09) : sans rapport de forme, `height: auto`
          résout à **0**, et la case s'effondre. **Ni image, ni trou, ni cadre.**
          Le QR est maintenant du SVG en ligne, et sa hauteur est écrite.

       ⚠️  LA MAQUETTE DISAIT 16 MM, ET CETTE VALEUR NE REVIENT JAMAIS : à 1,7
           point par module la tête d'impression ne trace plus la trame, quelle
           que soit la correction. `MISSION_TICKET.md` est corrigée, datée et
           motivée. */
.ticket .qr   { width: 48mm; height: 48mm; display: block; margin: 1.6mm auto 1mm; }
.ticket .pied { font-size: 2.1mm; color: #222; text-align: center; line-height: 1.55; }

/* -----------------------------------------------------------------------------
   L'IMPRESSION — et c'est le piège du lot.

   Chrome imprime en A4 par défaut. Sans ces règles, le ticket sortirait
   minuscule en haut d'une feuille de 30 cm, et l'écran de caisse sortirait
   avec lui. La règle `@page` elle-même est injectée par `ticket.js` : sa
   taille dépend du réglage, et `@page` ne sait pas lire une variable CSS.
   -------------------------------------------------------------------------- */
@media print {
  /* Rien d'autre que le ticket. Le bandeau, la caisse, le clavier, les
     messages : tout disparaît. */
  body > *   { display: none !important; }
  body       { background: #fff !important; padding: 0 !important; margin: 0 !important; }
  html       { background: #fff !important; }

  #zone-ticket,
  #zone-ticket.apercu { display: block !important; }

  .ticket {
    width: var(--rouleau);
    /* Le rouleau est continu : la hauteur n'est pas une page, c'est ce que le
       contenu occupe. */
    height: auto;
    margin: 0;
    box-shadow: none;
  }

  /* Une ligne coupée en deux par un saut de page est illisible sur un rouleau. */
  .ticket .l, .ticket .pied { break-inside: avoid; }
}
