/* CoordSecours — export « FICHE DE BILAN SECOURISTE » (A4, façon formulaire papier).
   Feuille .xf-sheet construite par assets/export-fiche.js (moteur PARTAGÉ terrain hors-ligne + PC).
   CSP stricte : AUCUN style inline — la totalité du rendu est portée par les classes de ce fichier.
   Référence visuelle : maquette validée (bandeau titre, triage 4 cases, tableaux denses bordures
   noires, 3 colonnes vitales, surveillance avec unités, pied confidentialité).
   MÉTRIQUE « TOUJOURS 1 PAGE » (maquette « fiche 1 page » validée) : .xf-sheet porte la SEULE
   taille de police en px ; toutes les tailles et hauteurs COMPRESSIBLES internes sont en em et
   suivent donc le palier de densité xf-d1…xf-d7 posé sur .xf-sheet (choisi par MESURE dans
   openPreview, cf. export-fiche.js). Les mm restent réservés à la géométrie feuille : 210 mm,
   padding 10 mm, logo 14 mm, largeurs de colonnes. Les règles de palier n'utilisent JAMAIS
   transform ni flex (dompdf). */

/* ── Aperçu plein écran (overlay) ──
   text-size-adjust:100% — INDISPENSABLE, et posé ICI plutôt que dans la feuille de l'application.
   Safari iOS (et Chrome Android) « gonflent » automatiquement la police des blocs qu'ils jugent
   être le contenu principal quand la page est plus large que l'écran — ce qui est TOUJOURS le cas
   d'une feuille A4 de 210 mm sur un téléphone. Le gonflement est SÉLECTIF : les bandeaux de
   rubrique et les longues lignes de cases explosent pendant que les cellules de tableau restent
   minuscules. Toute la feuille étant dimensionnée en em depuis un unique font-size racine (palier
   xf-d1…xf-d7), l'échelle entière est détruite — fiche illisible (constaté sur iPhone le
   2026-08-16, page publique de partage). app.css portait déjà cette déclaration, mais la page
   publique partage.php ne charge PAS app.css : la protection doit voyager avec LA FEUILLE, pour
   couvrir tout hôte présent et à venir. */
.xf-overlay{position:fixed;inset:0;z-index:9000;background:rgba(15,18,24,.85);overflow:auto;-webkit-overflow-scrolling:touch;-webkit-text-size-adjust:100%;text-size-adjust:100%;}
.xf-lock{overflow:hidden;}
.xf-toolbar{position:sticky;top:0;z-index:2;display:flex;flex-wrap:wrap;gap:10px;justify-content:center;align-items:center;padding:10px 12px;background:rgba(15,18,24,.94);}
/* Sur téléphone, la barre débordait : les boutons se coupaient hors écran (retour terrain
   2026-08-10). Elle passe à la ligne, les libellés raccourcissent et les cibles s'élargissent. */
@media (max-width:640px){
  .xf-toolbar{gap:7px;padding:8px 9px;}
  .xf-btn{flex:1 1 auto;min-width:0;padding:11px 10px;font-size:13px;white-space:nowrap;}
  .xf-pages{flex:1 1 100%;text-align:center;order:-1;}
  .xf-dlmsg{flex:1 1 100%;text-align:center;}
}
.xf-btn{appearance:none;border:1px solid #2b6cb0;background:#2b6cb0;color:#fff;font:600 14px/1.2 -apple-system,system-ui,Segoe UI,Roboto,sans-serif;padding:9px 16px;border-radius:8px;cursor:pointer;}
.xf-btn:hover{background:#245a94;}
.xf-btn-ghost{background:transparent;border-color:#8aa0b8;color:#dce6f2;}
.xf-btn-ghost:hover{background:rgba(255,255,255,.08);}
/* Bouton PRINCIPAL « Télécharger le PDF » (génération serveur) + mise en avant du repli Imprimer */
.xf-btn-primary{background:#1d7f3f;border-color:#1d7f3f;font-weight:700;}
.xf-btn-primary:hover{background:#186a35;}
.xf-btn-primary:disabled{opacity:.65;cursor:default;}
.xf-btn-hl{outline:3px solid #ffd23f;outline-offset:2px;}
.xf-dlmsg{color:#ffe9a8;font:600 12.5px/1.3 -apple-system,system-ui,Segoe UI,Roboto,sans-serif;max-width:320px;}
.xf-dlmsg-err{color:#ffc9c9;}
.xf-page{display:flex;padding:18px 12px 40px;}

/* ── La feuille A4 — géométrie en mm, métriques internes en em (elles suivent le palier) ── */
/* flex:none — la feuille garde ses 210 mm même sur un écran étroit (l'aperçu défile plutôt
   que de se déformer) : ce que le secouriste valide à l'écran est CE QUI SERA IMPRIMÉ. */
/* text-size-adjust répété sur la feuille elle-même : build() peut être utilisée SANS l'aperçu
   (hôte futur, PDF local, page tierce) — la feuille ne doit jamais dépendre de son enrobage. */
.xf-sheet{position:relative;width:210mm;min-height:297mm;flex:none;padding:10mm;margin:auto;background:#fff;box-shadow:0 4px 18px rgba(0,0,0,.35);color:#000;box-sizing:border-box;font-family:Arial,Helvetica,sans-serif;font-size:9.5px;line-height:1.25;display:flex;flex-direction:column;-webkit-text-size-adjust:100%;text-size-adjust:100%;}
.xf-sheet *{box-sizing:border-box;border-radius:0;}
/* Gabarit neutralisé PENDANT la mesure des paliers uniquement (openPreview) : hauteur A4 levée,
   et surtout LARGEUR A4 GARANTIE. Sans cela, sur un écran étroit (téléphone du terrain) la feuille
   — élément flex de .xf-page — se laisse comprimer : le texte se replie, la hauteur mesurée explose
   et le palier choisi devient beaucoup trop dense, alors que le PDF, lui, sort toujours en 210 mm.
   La feuille est sortie du flux le temps du calcul (elle reprend sa place aussitôt après). */
.xf-sheet.xf-measure{min-height:0;width:210mm;max-width:none;flex:none;position:absolute;left:-10000px;top:0;visibility:hidden;}
.xf-sheet table{width:100%;border-collapse:collapse;}
/* Indice typographique (SpO₂, O₂) : rendu dans la police courante, sans décalage de ligne de
   base ni saut de taille — remplace le caractère Unicode absent d'Arial/Helvetica.
   line-height:0 évite qu'il n'écarte la ligne qui le contient. */
.xf-sub{font-size:.72em;line-height:0;vertical-align:-.22em;}

/* Respiration des cellules : le texte touchait les filets du tableau (retour 2026-08-12).
   Un peu d'air à gauche/droite et au-dessus, sans gonfler la hauteur de la fiche. */
.xf-t td,.xf-t th{border:1px solid #000;padding:.28em .5em;vertical-align:top;font-size:1em;}
.xf-noborder td{border:none;padding:0;}
.xf-b{font-weight:bold;}
.xf-up{text-transform:uppercase;}
.xf-small{font-size:.842em;}
.xf-tiny{font-size:.789em;color:#333;}
.xf-center{text-align:center;}
.xf-right{text-align:right;}
.xf-mt2{margin-top:.21em;}
.xf-vm{vertical-align:middle;}

/* En-tête */
.xf-w-logo{width:18mm;text-align:center;}
.xf-w-num{width:34mm;text-align:center;}
.xf-w-sign{width:40mm;}
.xf-logo-box{width:14mm;height:14mm;border:1px solid #444;margin:0 auto;display:flex;align-items:center;justify-content:center;font-size:.737em;color:#666;text-align:center;}
.xf-logo-img{max-width:14mm;max-height:14mm;display:block;margin:0 auto;}
.xf-hdr-title{font-size:1.684em;font-weight:bold;letter-spacing:.04em;text-align:center;text-transform:uppercase;}
.xf-hdr-sub{font-size:1.053em;text-align:center;}
.xf-num-lbl{font-size:.947em;}
.xf-num{font-size:1.895em;font-weight:bold;}
.xf-sign-name{font-weight:bold;margin-top:.1em;}
.xf-sign-area{height:3.19em;border-bottom:1px dotted #000;}

/* Bandeau TRIAGE */
.xf-triage{display:flex;margin-top:.42em;border:1px solid #000;}
.xf-triage>div{flex:1;text-align:center;padding:.32em .21em;font-size:.947em;font-weight:bold;border-right:1px solid #000;}
.xf-triage>div:last-child{border-right:none;}
.xf-tri-sub{display:block;font-weight:normal;font-size:.789em;}
.xf-tri-rouge{background:#d90f0f;color:#fff;}
.xf-tri-jaune{background:#ffe100;color:#000;}
.xf-tri-vert{background:#17a54a;color:#fff;}
.xf-tri-blanc{background:#fff;color:#000;}
.xf-tri-noir{background:#000;color:#fff;}
/* Aucun contour sur la case sélectionnée (retiré le 2026-08-12) : la couleur de fond et la case
   cochée suffisent à la désigner — le cadre n'ajoutait rien et alourdissait le bandeau. */

/* Ligne PRISE EN CHARGE / DEVENIR résumé */
.xf-pec{margin-top:.42em;}
.xf-pec td{background:#f2f2f2;}
.xf-w-half{width:50%;}

/* Sections génériques */
.xf-sec{margin-top:.42em;}
.xf-band{background:#e8e8e8;border:1px solid #000;font-weight:bold;text-transform:uppercase;font-size:1em;padding:.26em .6em;letter-spacing:.03em;}
.xf-band.xf-custom{color:#444;}
.xf-custom{color:#444;}
.xf-dot{font-weight:bold;font-size:1.053em;color:#444;}
.xf-band .xf-note{font-weight:normal;text-transform:none;}

/* Champs (segments en ligne dans les cellules) */
.xf-f{display:inline-block;margin:0 1.05em .1em 0;}
.xf-f-block{display:block;margin:.1em 0;}
.xf-flbl{font-weight:normal;}
.xf-glbl{font-weight:bold;}
.xf-fill{border-bottom:1px dotted #000;display:inline-block;min-width:4.2em;padding:0 .21em;font-weight:bold;}
.xf-fill-l{min-width:9.4em;}
/* Champ RENSEIGNÉ : plus de pointillés ni de largeur minimale — la ligne à remplir n'a de sens
   que sur un champ vide. Évite les « ......... » sous une valeur déjà écrite. */
.xf-filled{border-bottom:none;min-width:0;}

/* Hôte de mesure du générateur PDF hors ligne (assets/pdf-local.js) : la feuille y est clonée à
   sa taille RÉELLE (210 mm) pour être transposée, sans le zoom d'affichage appliqué sur mobile.
   Hors écran et non imprimable : n'affecte ni l'aperçu, ni l'impression. */
.xf-pdfhote{position:absolute;left:-10000px;top:0;width:210mm;}
@media print{.xf-pdfhote{display:none !important;}}
.xf-cb{font-size:.895em;line-height:1;}
.xf-checked{font-weight:bold;}
/* Option de liste enveloppée (insécable). .xf-optoff = option NON cochée alors que le champ
   porte une valeur → sacrifiable aux paliers denses (d4+) ; un champ vide garde toutes ses
   cases pour l'usage papier. */
.xf-opt{white-space:nowrap;margin-right:.35em;}
.xf-on{font-weight:bold;}
.xf-multiline{white-space:pre-wrap;}
.xf-u{font-weight:normal;}
.xf-crit{background:#d90f0f;color:#fff;font-weight:bold;padding:0 .3em;}
.xf-warn{background:#fff3b0;}

/* RCP — bande rouge de synthèse (la date n'y est écrite qu'UNE fois) + historique en
   QUADRILLAGE (variante V1 validée) : une CASE par événement, numéro en gras AU-DESSUS de
   l'heure seule HH:MM ; rangée des chocs DAE sur fond ambré (#fff3d6 / bordures #d9a13b).
   Le quadrillage est TOUJOURS imprimé (ces horodatages doivent être lisibles SUR LE PAPIER) :
   aux paliers denses il se resserre (cellules plus compactes), il ne disparaît jamais. */
.xf-rcp{border:2px solid #d90f0f;background:#fde8e8;padding:.21em .42em;font-size:.947em;font-weight:bold;color:#7a0000;display:inline-block;}
.xf-rcp-det{margin-top:.15em;}
.xf-sheet table.xf-rcpgrid{width:auto;}
.xf-rcpgrid th{border:1px solid #c98787;background:#fde8e8;color:#7a0000;font-size:.842em;font-weight:bold;text-align:left;padding:.15em .6em;white-space:nowrap;vertical-align:middle;}
.xf-rcpgrid td{border:1px solid #c98787;color:#7a0000;font-size:.842em;text-align:center;padding:.18em .5em;line-height:1.15;white-space:nowrap;}
.xf-rcpgrid td b{display:block;font-size:.9em;}
.xf-rcpgrid td.xf-rcpchoc{background:#fff3d6;}   /* variante validée : le FOND seul change (bordures inchangées) */

/* Devenir : les 5 options — une par ligne au palier d1 (lecture papier), INLINE dès xf-d2 */
.xf-dev-opt{display:block;white-space:nowrap;}

/* 3 colonnes vitales (Neurologique / Respiratoire / Circulatoire) */
.xf-cols3{display:flex;margin-top:.42em;}
.xf-cols3>div{flex:1;border:1px solid #000;margin-right:-1px;}
.xf-cols3>div:last-child{margin-right:0;}
.xf-colhead{background:#e8e8e8;border-bottom:1px solid #000;font-weight:bold;text-align:center;font-size:.947em;padding:.21em;text-transform:uppercase;}
.xf-item{padding:.16em .5em;border-bottom:1px solid #bbb;font-size:.947em;}
.xf-item:last-child{border-bottom:none;}
.xf-item .xf-f{display:inline;margin:0 .6em 0 0;}
.xf-item .xf-f-block{display:inline;margin:0 .6em 0 0;}
.xf-item.xf-crit{padding:.105em .42em;}

/* Tableau SURVEILLANCE — rangées vides de poursuite papier ; .xf-survx (dès d3) et
   .xf-survx4 (à d4+) : rangées SACRIFIABLES aux paliers denses (jamais une donnée). */
.xf-surv td{text-align:center;}
.xf-surv .xf-surv-h td{background:#f2f2f2;font-weight:bold;}
.xf-surv-empty td{height:2em;}
/* Sur-en-tête par FONCTION VITALE : le médecin qui reçoit la victime lit la grille par appareil,
   comme il l'examine. */
.xf-surv .xf-surv-fn td{background:#f2f2f2;font-weight:bold;text-transform:uppercase;
  font-size:.85em;letter-spacing:.03em;}
/* Rangées PORTANT UNE VRAIE PRISE : jamais sacrifiées aux paliers denses (cf. .xf-survx) —
   perdre une mesure de santé pour gagner de la place n'est pas une option. */
.xf-surv .xf-surv-v td{font-variant-numeric:tabular-nums;}
.xf-sw-h{width:14%;}
.xf-sw-fr{width:12%;}
.xf-sw-sp{width:14%;}
.xf-sw-fc{width:12%;}
.xf-sw-pa{width:16%;}
.xf-sw-do{width:14%;}

/* OBSERVATIONS : lignes pointillées pour poursuite papier (.xf-obsx dès d3, .xf-obsx4 à d4+) */
.xf-line{height:2em;border-bottom:1px dotted #000;}

/* INFORMATION VICTIME */
.xf-w-34{width:34%;}
.xf-w-26{width:26%;}
.xf-w-16{width:16%;}

/* Pied de page */
.xf-footer{margin-top:auto;padding-top:.53em;}
.xf-footer-inner{border-top:2px solid #000;padding-top:.32em;}
.xf-foot-l{width:40%;font-size:.895em;font-weight:bold;}
.xf-foot-r{width:10%;text-align:right;font-size:.895em;font-weight:bold;}

/* ══ PALIERS DE DENSITÉ — décision client : la fiche imprimée tient TOUJOURS sur 1 page. ══
   UNE seule classe xf-d1…xf-d7 sur .xf-sheet, choisie par MESURE dans openPreview (première
   qui tient sous ~269 mm, marge dompdf ~3 %) ; elle voyage dans l'attribut class jusqu'à
   dompdf. Tout étant en em, le seul font-size racine densifie la feuille entière ; chaque
   palier ajoute ses réductions STRUCTURELLES par classes de masquage — on ne sacrifie que du
   VIDE (rangées de poursuite papier, lignes vierges, options non cochées en dernier recours),
   JAMAIS une donnée saisie. d1–d4 = maquette validée ; d5–d7 = crans typographiques
   supplémentaires (mêmes masquages que d4) jusqu'au palier très dense ~59 %. */
.xf-sheet.xf-d1{font-size:9.5px;line-height:1.25;}    /* 100 % (défaut) */
.xf-sheet.xf-d2{font-size:8.75px;line-height:1.25;}   /* ≈ 92 % */
.xf-sheet.xf-d3{font-size:8px;line-height:1.2;}       /* ≈ 84 % */
.xf-sheet.xf-d4{font-size:7.4px;line-height:1.15;}    /* ≈ 78 % */
.xf-sheet.xf-d5{font-size:6.8px;line-height:1.12;}    /* ≈ 72 % */
.xf-sheet.xf-d6{font-size:6.2px;line-height:1.1;}     /* ≈ 65 % */
.xf-sheet.xf-d7{font-size:5.6px;line-height:1.08;}    /* ≈ 59 % — dernier recours */
/* d2+ : chrome resserré + devenir en options INLINE (une ligne au lieu de 5) */
/* Espacement en em : l'air reste proportionnel au palier — en px fixes, le texte finissait
   collé aux filets dès le palier d2 (retour 2026-08-12). */
.xf-d2 .xf-t td,.xf-d3 .xf-t td{padding:.24em .45em;}
.xf-d4 .xf-t td,.xf-d5 .xf-t td{padding:.2em .4em;}
.xf-d6 .xf-t td,.xf-d7 .xf-t td{padding:.16em .32em;}   /* paliers extrêmes : on serre vraiment */
.xf-d2 .xf-sec,.xf-d2 .xf-triage,.xf-d2 .xf-pec,.xf-d2 .xf-cols3{margin-top:3px;}
.xf-d3 .xf-sec,.xf-d3 .xf-triage,.xf-d3 .xf-pec,.xf-d3 .xf-cols3,
.xf-d4 .xf-sec,.xf-d4 .xf-triage,.xf-d4 .xf-pec,.xf-d4 .xf-cols3,
.xf-d5 .xf-sec,.xf-d5 .xf-triage,.xf-d5 .xf-pec,.xf-d5 .xf-cols3,
.xf-d6 .xf-sec,.xf-d6 .xf-triage,.xf-d6 .xf-pec,.xf-d6 .xf-cols3,
.xf-d7 .xf-sec,.xf-d7 .xf-triage,.xf-d7 .xf-pec,.xf-d7 .xf-cols3{margin-top:2px;}
.xf-d2 .xf-dev-opt,.xf-d3 .xf-dev-opt,.xf-d4 .xf-dev-opt,
.xf-d5 .xf-dev-opt,.xf-d6 .xf-dev-opt,.xf-d7 .xf-dev-opt{display:inline-block;margin-right:1.1em;}
/* d3+ : bandeaux plus fins, items plus serrés, rangées/lignes sacrifiables masquées */
.xf-d3 .xf-band,.xf-d4 .xf-band,.xf-d5 .xf-band{padding-top:.2em;padding-bottom:.2em;}
.xf-d6 .xf-band,.xf-d7 .xf-band{padding-top:1px;padding-bottom:1px;}
.xf-d3 .xf-item,.xf-d4 .xf-item,.xf-d5 .xf-item{padding:.14em .45em;}
.xf-d6 .xf-item,.xf-d7 .xf-item{padding:1px 3px;}
.xf-d3 .xf-survx,.xf-d4 .xf-survx,.xf-d5 .xf-survx,.xf-d6 .xf-survx,.xf-d7 .xf-survx,
.xf-d3 .xf-obsx,.xf-d4 .xf-obsx,.xf-d5 .xf-obsx,.xf-d6 .xf-obsx,.xf-d7 .xf-obsx{display:none;}
/* d4+ (paliers denses) : encore une rangée/ligne en moins, options non cochées masquées
   quand le champ porte une valeur (.xf-optoff), historique RCP replié (renvoi application) */
.xf-d4 .xf-survx4,.xf-d5 .xf-survx4,.xf-d6 .xf-survx4,.xf-d7 .xf-survx4,
.xf-d4 .xf-obsx4,.xf-d5 .xf-obsx4,.xf-d6 .xf-obsx4,.xf-d7 .xf-obsx4,
.xf-d4 .xf-optoff,.xf-d5 .xf-optoff,.xf-d6 .xf-optoff,.xf-d7 .xf-optoff{display:none;}
/* RCP : JAMAIS masqué (donnée clinique demandée sur le papier) — seulement resserré. */
.xf-d4 .xf-rcpgrid th,.xf-d5 .xf-rcpgrid th,.xf-d6 .xf-rcpgrid th,.xf-d7 .xf-rcpgrid th{padding:.1em .35em;}
.xf-d4 .xf-rcpgrid td,.xf-d5 .xf-rcpgrid td,.xf-d6 .xf-rcpgrid td,.xf-d7 .xf-rcpgrid td{padding:.1em .3em;}

/* ── Aperçu : compteur de pages + repères de fin de page. Avec le palier choisi par mesure la
   fiche tient sur 1 page et AUCUN repère n'est affiché ; le code reste pour le seul cas hors
   gabarit (contenu qui déborde encore au dernier palier). ── */
.xf-pages{color:#dce6f2;font:600 13px/1.2 -apple-system,system-ui,Segoe UI,Roboto,sans-serif;}
.xf-pagemark{position:absolute;left:0;right:0;border-top:2px dashed #d90f0f;pointer-events:none;}
.xf-pagemark-l{position:absolute;right:2mm;top:-14px;background:#d90f0f;color:#fff;font-size:8px;font-weight:bold;padding:1px 6px;}

/* ── Panneau « QR pour les renforts » ── */
.xf-share{position:fixed;inset:0;z-index:9500;background:rgba(10,12,16,.72);display:flex;align-items:center;justify-content:center;padding:16px;}
.xf-share-box{background:#fff;max-width:340px;width:100%;padding:18px;text-align:center;border-radius:12px;}
.xf-share-t{font:700 15px/1.3 -apple-system,system-ui,Segoe UI,Roboto,sans-serif;color:#15233f;margin-bottom:10px;}
.xf-share-qr svg{width:220px;height:220px;display:block;margin:0 auto;}
.xf-share-url{font-size:10px;color:#5b667f;word-break:break-all;margin-top:8px;}
.xf-share-note{font-size:12px;color:#5b667f;margin-top:8px;line-height:1.4;}
.xf-share-close{margin-top:12px;}
@media print{.xf-share{display:none !important;}}

/* Règles SCOPÉES sur body.xf-lock (aperçu ouvert) : sans aperçu, l'impression normale des pages
   terrain/PC reste INTACTE. La règle @page est injectée/retirée dynamiquement par export-fiche.js
   (CSSOM) uniquement pendant l'aperçu, pour la même raison. */
@media print{
  body.xf-lock>:not(.xf-overlay){display:none !important;}
  body.xf-lock{overflow:visible !important;}
  .xf-overlay{position:static;inset:auto;background:none;overflow:visible;padding:0;}
  .xf-toolbar{display:none !important;}
  .xf-pagemark{display:none !important;}
  /* zoom:1 impératif — l'aperçu écran réduit la feuille pour tenir sur un téléphone (CSSOM) ;
     à l'impression, le document doit reprendre sa taille RÉELLE (210 mm). */
  .xf-page{display:block;padding:0;zoom:1 !important;}
  .xf-sheet{width:auto;min-height:0;padding:0;margin:0;box-shadow:none;}
  .xf-sheet,.xf-sheet *{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .xf-item,.xf-f-block,.xf-sheet tr,.xf-rcp{break-inside:avoid;page-break-inside:avoid;}
  .xf-sec,.xf-sheet table{break-inside:avoid;page-break-inside:avoid;}   /* jamais couper une catégorie ni un tableau */
  .xf-band,.xf-colhead{break-after:avoid;page-break-after:avoid;}
  .xf-triage,.xf-cols3{break-inside:avoid;page-break-inside:avoid;}
}

/* ── Rendu SERVEUR (dompdf — api/v1/pdf-fiche.php) : règles scopées body.pdf, JAMAIS actives
   dans le navigateur (le document est reconstruit côté serveur avec <body class="pdf">).
   dompdf ne supporte ni flexbox ni outline → équivalents display:table + bordures, et police
   Unicode DejaVu Sans (embarquée par dompdf) pour les cases ☐/☑ et les symboles (·, —).
   Le palier de densité arrive dans l'attribut class de .xf-sheet : ses règles (font-size,
   height, display par classes) s'appliquent ici telles quelles. ── */
body.pdf{margin:0;padding:0;background:#fff;}
body.pdf .xf-sheet{display:block;width:auto;min-height:0;padding:0;margin:0;box-shadow:none;font-family:"DejaVu Sans",sans-serif;}
body.pdf .xf-triage{display:table;width:100%;table-layout:fixed;}
body.pdf .xf-triage>div{display:table-cell;}
/* (Le cadre de la case sélectionnée a été retiré : même rendu qu'à l'écran.) */
body.pdf .xf-logo-box{display:block;line-height:14mm;}   /* dompdf ignore flexbox → centrage par line-height */
body.pdf .xf-cols3{display:table;width:100%;table-layout:fixed;}
body.pdf .xf-cols3>div{display:table-cell;margin-right:0;}
body.pdf .xf-cols3>div+div{border-left:none;}
body.pdf .xf-footer{margin-top:6px;}
body.pdf .xf-pagemark,body.pdf .xf-toolbar,body.pdf .xf-share{display:none;}
