/* SPDX-FileCopyrightText: 2026 FTW.group Sàrl */
/* SPDX-License-Identifier: AGPL-3.0-or-later */
/* ==========================================================================
   SYSTEMIC.CLUB — facturation et conditions générales (version 0.3.7) :
   pièce imprimable (facture, note de crédit) et ses règles d’impression A4,
   « Mes factures » du compte, liste d’administration, bandeau et pages des
   conditions générales, case de la candidature. Chargée après systemic.css,
   dans la couche « pages ». Classes préfixées facture-, factures-, cg- :
   elles ne croisent ni un composant commun ni un autre module.
   Uniquement des jetons, sauf à l’impression (papier blanc, voir plus bas).
   ========================================================================== */

@layer pages {
  /* ------------------------------------------------------------ Pièce : facture ou note de crédit */
  .facture-page { display: grid; gap: var(--e4); width: min(100%, 860px); margin-inline: auto; }
  .mise-en-page-public .facture-page { padding: var(--e6) var(--gouttiere) var(--e7); width: min(100%, calc(860px + 2 * var(--gouttiere))); }
  .facture-outils { display: flex; flex-wrap: wrap; gap: var(--e2) var(--e4); align-items: center; justify-content: space-between; }
  .facture-outils__actions { display: flex; flex-wrap: wrap; gap: var(--e2) var(--e5); align-items: center; }
  .facture-outils .lien-fleche { min-height: var(--hauteur-controle); }
  .facture-astuce { display: flex; gap: var(--e2); align-items: center; color: var(--discret); font-size: var(--taille-petite); }
  .facture-astuce .icone { width: 16px; height: 16px; }

  .facture {
    display: grid; gap: var(--e6); padding: var(--e5) var(--e4) var(--e5);
    border: 1px solid var(--filet); border-top: 2px solid var(--encre); border-radius: 0 0 var(--rayon-surface) var(--rayon-surface);
    background: var(--releve); color: var(--texte); container-type: inline-size;
    font-variant-numeric: tabular-nums;
  }
  @media (width >= 641px) { .facture { padding: var(--e7) var(--e7) var(--e6); } }

  .facture__tete { display: grid; gap: var(--e5); }
  .facture__emetteur { display: grid; gap: var(--e1); align-content: start; font-size: var(--taille-petite); }
  /* Logo du club figé à l’émission (0.3.12), au-dessus du nom de l’organisation ; sa variante sombre
     à l’écran en thème sombre (thème du site, sinon du système), la claire à l’impression. Version 0.4.1 :
     le nom du club écrit à côté, comme dans l’en-tête du site (.logo__nom, à l’échelle du logo de la
     pièce : 30 px pour 44), et de l’espace avant le nom de l’organisation. Trop étroit, le nom passe
     sous le logo plutôt que de déborder. */
  .facture__logo { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e2) 14px; margin-bottom: var(--e5); }
  .facture__logo-image { width: auto; height: 44px; max-width: min(220px, 100%); object-fit: contain; object-position: left center; }
  .facture__club {
    color: var(--encre); font-family: var(--police-titre); font-size: 1.875rem; line-height: 1; letter-spacing: -.01em;
    white-space: nowrap; -webkit-text-stroke: var(--contour-titre) currentColor;
  }
  .facture__club span { color: var(--discret); }
  .facture__logo-image--sombre { display: none; }
  :root[data-theme="sombre"] .facture__logo-image--clair { display: none; }
  :root[data-theme="sombre"] .facture__logo-image--sombre { display: block; }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme]) .facture__logo-image--clair { display: none; }
    :root:not([data-theme]) .facture__logo-image--sombre { display: block; }
  }
  .facture__organisation { color: var(--encre); font-family: var(--police-titre); font-size: var(--titre-petit); line-height: 1.25; -webkit-text-stroke: var(--contour-titre) currentColor; }
  .facture__tva-numero { margin-top: var(--e2); color: var(--encre); font-weight: 500; }
  .facture__identite { display: grid; gap: var(--e3); align-content: start; }
  .facture__titre { font-size: var(--titre-affiche); line-height: 1; letter-spacing: -.02em; }
  /* Libellés et valeurs alignés en deux colonnes, quelle que soit la longueur du libellé. */
  .facture__references { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 2px var(--e3); margin: 0; font-size: var(--taille-petite); }
  .facture__references > div { display: contents; }
  .facture__references dt { color: var(--discret); }
  .facture__references dd { color: var(--encre); font-weight: 500; }
  .facture__numero { font-family: var(--police-chasse-fixe); letter-spacing: .02em; }
  @container (width >= 600px) {
    .facture__tete { grid-template-columns: minmax(0, 1fr) auto; gap: var(--e6); }
    .facture__identite { justify-items: end; text-align: right; }
    .facture__references { grid-template-columns: max-content max-content; justify-content: end; }
  }

  .facture__intitule {
    margin-bottom: var(--e2); color: var(--discret); font-family: var(--police); font-size: var(--taille-xs); font-weight: 600;
    letter-spacing: var(--approche-libelle); line-height: 1.5; text-transform: uppercase; -webkit-text-stroke: 0;
  }
  .facture__destinataire { max-width: 36ch; padding: var(--e4); border-left: 2px solid var(--filet-appuye); background: var(--panneau); border-radius: 0 var(--rayon) var(--rayon) 0; }
  .facture__destinataire p { color: var(--texte); line-height: 1.6; overflow-wrap: anywhere; }
  .facture__email { color: var(--discret); font-size: var(--taille-petite); }
  .facture__efface { color: var(--discret); font-size: var(--taille-petite); }

  .facture__lignes { width: 100%; font-size: var(--taille-petite); }
  .facture__lignes th { padding: var(--e2) var(--e3) var(--e2) 0; border-bottom: 1px solid var(--encre); color: var(--encre); font-size: var(--taille-xs); font-weight: 600; letter-spacing: .08em; text-align: left; text-transform: uppercase; }
  .facture__lignes td { padding: var(--e3) var(--e3) var(--e3) 0; border-bottom: 1px solid var(--filet); color: var(--encre); vertical-align: top; }
  .facture__lignes th:last-child, .facture__lignes td:last-child { padding-right: 0; }
  .facture__nombre { text-align: right !important; white-space: nowrap; }
  .facture__designation { width: 100%; overflow-wrap: anywhere; }
  /* Écran étroit : chaque ligne devient un bloc, ses montants sous la désignation. */
  @container (width < 560px) {
    .facture__lignes, .facture__lignes tbody, .facture__lignes tr { display: block; }
    .facture__lignes thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
    .facture__lignes tr { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--e2) var(--e3); padding: var(--e3) 0; border-block: 1px solid var(--filet); }
    .facture__lignes td { display: block; padding: 0; border: 0; }
    .facture__lignes .facture__designation { grid-column: 1 / -1; font-weight: 500; }
    .facture__lignes td.facture__nombre { text-align: left !important; }
    .facture__lignes td.facture__nombre::before { content: attr(data-libelle); content: attr(data-libelle) / ""; display: block; color: var(--discret); font-size: var(--taille-xs); font-weight: 600; letter-spacing: .06em; text-transform: uppercase; white-space: normal; }
  }

  /* Version 0.4.0 : quatre montants par ligne (le taux de TVA en plus) quand la pièce a plusieurs taux. */
  @container (width < 560px) {
    .facture__lignes--taux tr { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }

  /* Détail de la TVA taux par taux (version 0.4.0) : hors taxe, TVA et TTC de chaque taux ; à côté des totaux
     dès que la pièce est assez large (et toujours à l’impression : la pièce tient sur une page A4). */
  .facture__recapitulatif { display: grid; gap: var(--e5); }
  @container (width >= 560px) {
    .facture__recapitulatif { grid-template-columns: minmax(0, 1fr) minmax(0, 300px); gap: var(--e6); align-items: start; }
    .facture__recapitulatif .facture__tva { justify-self: start; }
    .facture__recapitulatif .facture__totaux { margin-top: 0; }
  }
  .facture__tva { justify-self: end; width: min(100%, 420px); font-size: var(--taille-petite); font-variant-numeric: tabular-nums; }
  .facture__tva caption { text-align: left; }
  .facture__tva th, .facture__tva td { padding: var(--e2) var(--e3) var(--e2) 0; border-bottom: 1px solid var(--filet); color: var(--encre); text-align: left; }
  .facture__tva thead th { border-bottom-color: var(--encre); font-size: var(--taille-xs); font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
  .facture__tva tbody th { font-weight: 500; white-space: nowrap; }
  .facture__tva :is(th, td):last-child { padding-right: 0; }

  .facture__totaux { display: grid; justify-self: end; width: min(100%, 340px); margin: calc(-1 * var(--e3)) 0 0; font-size: var(--taille-petite); }
  .facture__tva + .facture__totaux { margin-top: 0; }
  .facture__totaux > div { display: flex; gap: var(--e4); align-items: baseline; justify-content: space-between; padding: var(--e2) 0; border-bottom: 1px solid var(--filet); }
  .facture__totaux dt { color: var(--texte); }
  .facture__totaux dd { color: var(--encre); white-space: nowrap; }
  .facture__totaux > .facture__total { padding-top: var(--e3); border-top: 1px solid var(--encre); border-bottom: 0; }
  .facture__total dt { color: var(--encre); font-weight: 600; }
  .facture__total dd { font-family: var(--police-titre); font-size: 1.5rem; line-height: 1.1; -webkit-text-stroke: var(--contour-titre) currentColor; }
  .facture__totaux > div:first-child:not(.facture__total) { border-top: 0; }

  .facture__mentions { display: grid; gap: var(--e2); font-size: var(--taille-petite); }
  .facture__mention { display: flex; gap: var(--e2); align-items: flex-start; color: var(--encre); font-weight: 500; }
  .facture__mention .icone { width: 18px; height: 18px; margin-top: 1px; color: var(--succes); }
  .facture--note .facture__mention .icone { color: var(--info); }
  .facture__reference { color: var(--discret); }
  .facture__reference code { color: var(--texte); overflow-wrap: anywhere; }
  .facture__pied { padding-top: var(--e4); border-top: 1px solid var(--filet); color: var(--discret); font-size: var(--taille-xs); text-align: center; }

  /* Pièce indisponible (même réponse qu’elle existe ou non) */
  .facture-introuvable { display: grid; gap: var(--e3); justify-items: start; width: min(100%, 600px); margin-inline: auto; padding-block: var(--e6); }
  .mise-en-page-public .facture-introuvable { padding: var(--e7) var(--gouttiere) var(--e8); width: min(100%, calc(600px + 2 * var(--gouttiere))); }
  .facture-introuvable__icone { display: grid; place-items: center; width: 56px; height: 56px; border: 1px solid var(--filet); border-radius: var(--rayon-surface); background: var(--panneau); color: var(--encre); }
  .facture-introuvable__icone .icone { width: 26px; height: 26px; }
  .facture-introuvable .surtitre { margin-top: var(--e2); }

  /* ------------------------------------------------------------ « Mes factures » (compte) */
  .factures-compte { display: grid; }
  .factures-compte__piece { position: relative; display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; gap: var(--e3) var(--e4); align-items: start; padding: var(--e3) 0; border-top: 1px solid var(--filet); }
  .factures-compte__icone { display: grid; place-items: center; width: 40px; height: 40px; border: 1px solid var(--filet-appuye); border-radius: 50%; color: var(--texte); }
  .factures-compte__icone .icone { width: 18px; height: 18px; }
  .factures-compte__piece--note .factures-compte__icone { color: var(--info); }
  .factures-compte__texte { display: grid; gap: 2px; min-width: 0; }
  .factures-compte__texte p:not(.discret) { color: var(--texte); font-size: var(--taille-petite); overflow-wrap: anywhere; }
  .factures-compte__lien { justify-self: start; color: var(--encre); font-weight: 600; text-decoration-color: var(--filet-appuye); }
  /* La ligne entière mène à la pièce (lien étiré) ; le focus se voit sur la ligne. */
  .factures-compte__lien::after { content: ""; position: absolute; inset: 0; }
  .factures-compte__piece:hover { background: var(--survol); }
  .factures-compte__lien:focus-visible { outline: none; }
  .factures-compte__piece:has(.factures-compte__lien:focus-visible) { outline: 2px solid var(--focus); outline-offset: 2px; }
  .factures-compte__montant { color: var(--encre); font-weight: 600; white-space: nowrap; font-variant-numeric: tabular-nums; }
  @media (width <= 640px) {
    .factures-compte__piece { grid-template-columns: 40px minmax(0, 1fr); }
    .factures-compte__montant { grid-column: 2; }
  }

  /* ------------------------------------------------------------ Administration : liste des pièces */
  .factures-barre { display: flex; flex-wrap: wrap; gap: var(--e3) var(--e5); align-items: center; justify-content: space-between; margin-bottom: var(--e6); }
  .factures-barre > .discret { max-width: 60ch; }
  .factures-encadre { margin-bottom: var(--e6); }
  .factures-liste { display: grid; gap: var(--e5); container-type: inline-size; }
  .factures-liste__tete { display: flex; flex-wrap: wrap; gap: var(--e1) var(--e4); align-items: baseline; justify-content: space-between; padding-bottom: var(--e3); border-bottom: 1px solid var(--filet-appuye); }
  .factures-liste__tete p { color: var(--discret); font-size: var(--taille-petite); }
  .factures-filtres { display: flex; flex-wrap: wrap; gap: var(--e4); align-items: flex-end; padding: var(--e4); border: 1px solid var(--filet); border-radius: var(--rayon-surface); background: var(--panneau); }
  .factures-filtres > .champ { flex: 1 1 150px; }
  .factures-filtres input, .factures-filtres select { height: var(--hauteur-controle); }
  .factures-filtres__boutons { flex: 0 0 auto; }
  .factures-totaux { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0; border-block: 1px solid var(--filet-appuye); }
  .factures-total { display: grid; align-content: start; gap: var(--e1); padding: var(--e4) var(--e4) var(--e4) 0; }
  .factures-total + .factures-total { padding-left: var(--e4); border-left: 1px solid var(--filet); }
  .factures-total dt { color: var(--discret); font-size: var(--taille-xs); font-weight: 600; letter-spacing: var(--approche-libelle); text-transform: uppercase; }
  .factures-total dd { display: grid; gap: 2px; }
  .factures-total__valeur { color: var(--encre); font-family: var(--police-titre); font-size: 1.5rem; line-height: 1.15; white-space: nowrap; -webkit-text-stroke: var(--contour-titre) currentColor; }
  .factures-total__legende { color: var(--discret); font-size: var(--taille-petite); }
  @container (width < 720px) {
    .factures-totaux { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .factures-total:nth-child(odd) { padding-left: 0; border-left: 0; }
    .factures-total:nth-child(even) { padding-left: var(--e4); border-left: 1px solid var(--filet); }
    .factures-total:nth-child(n + 3) { border-top: 1px solid var(--filet); }
    .factures-total__valeur { font-size: 1.25rem; }
  }
  .factures-tableau td .discret { display: block; margin-top: 2px; font-size: var(--taille-xs); }
  .factures-tableau__numero a { font-family: var(--police-chasse-fixe); font-weight: 500; white-space: nowrap; }
  .factures-tableau__corrige { white-space: nowrap; }
  .factures-tableau__montant { text-align: right !important; white-space: nowrap; font-variant-numeric: tabular-nums; }
  .factures-tableau__designation { min-width: 16rem; }
  @media (width <= 640px) {
    .factures-tableau, .factures-tableau tbody, .factures-tableau tr, .factures-tableau td, .factures-tableau caption { display: block; }
    .factures-tableau thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
    .factures-tableau tr {
      display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "numero montant" "designation designation" "destinataire date";
      gap: var(--e3) var(--e4); margin-bottom: var(--e3); padding: var(--e4); border: 1px solid var(--filet); border-radius: var(--rayon-surface); background: var(--releve);
    }
    .factures-tableau td { padding: 0; border: 0; }
    .factures-tableau tr:hover td { background: transparent; }
    .factures-tableau td[data-libelle]::before {
      content: attr(data-libelle); content: attr(data-libelle) / "";
      display: block; margin-bottom: 2px; color: var(--discret); font-size: var(--taille-xs); font-weight: 600; letter-spacing: .08em; text-transform: uppercase;
    }
    .factures-tableau td.factures-tableau__numero::before, .factures-tableau td.factures-tableau__montant::before { content: none; }
    .factures-tableau__numero { grid-area: numero; }
    .factures-tableau__montant { grid-area: montant; color: var(--encre); font-family: var(--police-titre); font-size: 1.25rem; -webkit-text-stroke: var(--contour-titre) currentColor; }
    .factures-tableau__montant .discret { font-family: var(--police); -webkit-text-stroke: 0; }
    .factures-tableau__designation { grid-area: designation; min-width: 0; overflow-wrap: anywhere; }
    .factures-tableau__destinataire { grid-area: destinataire; min-width: 0; overflow-wrap: anywhere; }
    .factures-tableau__date { grid-area: date; text-align: right; }
  }

  /* ------------------------------------------------------------ Paramètres : un champ d’une ligne à côté d’une adresse */
  /* Dans une rangée alignée (sous-grille), le champ garde sa hauteur au lieu de prendre celle de l’adresse voisine. */
  .factures-champ-ligne > input { align-self: start; }

  /* ------------------------------------------------------------ Conditions générales : bandeau des espaces */
  .cg-rappel {
    display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--e3) var(--e4); align-items: center;
    margin-bottom: var(--e5); padding: var(--e4); border: 1px solid var(--filet-appuye); border-left: 3px solid var(--encre);
    border-radius: var(--rayon); background: var(--panneau); container-type: inline-size;
  }
  .cg-rappel__icone { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: var(--selection); color: var(--encre); }
  .cg-rappel__icone .icone { width: 20px; height: 20px; }
  .cg-rappel__texte { display: grid; gap: 2px; min-width: 0; font-size: var(--taille-petite); }
  .cg-rappel__titre { color: var(--encre); font-size: var(--taille); font-weight: 600; }
  .cg-rappel__actions { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: var(--e2) var(--e3); }
  .cg-rappel__actions form { display: contents; }
  @media (width <= 640px) {
    .cg-rappel { align-items: start; }
    .cg-rappel__icone { width: 32px; height: 32px; }
    .cg-rappel__icone .icone { width: 16px; height: 16px; }
    .cg-rappel__actions > a, .cg-rappel__actions .bouton { flex: 1 1 100%; }
  }
  @media (width >= 1024px) {
    .cg-rappel { grid-template-columns: auto minmax(0, 1fr) auto; padding: var(--e4) var(--e5); }
    .cg-rappel__actions { grid-column: auto; flex-wrap: nowrap; }
  }

  /* Case de la candidature : lien vers le texte, puis la case */
  .cg-accord { display: grid; gap: var(--e3); padding: var(--e4); border: 1px solid var(--filet-appuye); border-radius: var(--rayon); background: var(--fond); }
  .cg-accord--erreur { border-color: var(--danger); }
  .cg-accord__lien { display: flex; flex-wrap: wrap; gap: var(--e1) var(--e2); align-items: center; font-size: var(--taille-petite); }
  .cg-accord__lien > .icone { width: 18px; height: 18px; color: var(--encre); }
  .cg-accord__lien a { display: inline-flex; align-items: center; min-height: var(--hauteur-controle); color: var(--encre); font-weight: 600; }
  .cg-accord__lien .discret { flex-basis: 100%; margin-top: calc(-1 * var(--e2)); }
  .cg-accord .case > label { color: var(--encre); font-weight: 500; }
  /* L’erreur d’une case (case_a_cocher) va sous son libellé, dans la colonne du texte, et non sous la case. */
  .cg-accord .case .champ-erreur { grid-column: 2; }

  /* Page publique */
  .cg-page { display: grid; gap: var(--e5); }
  .cg-page .entete-page { margin-bottom: 0; }
  .cg-texte h2 { padding-top: var(--e4); border-top: 1px solid var(--filet); font-size: var(--titre-petit); }
  .cg-texte h2:first-child { margin-top: 0; }
  .cg-accepter { display: grid; gap: var(--e3); justify-items: start; padding: var(--e5); border: 1px solid var(--filet-appuye); border-top: 2px solid var(--encre); border-radius: 0 0 var(--rayon-surface) var(--rayon-surface); background: var(--panneau); scroll-margin-top: var(--e8); }
  .cg-accepter h2 { font-size: var(--titre-petit); }
  .cg-accepter p { max-width: var(--mesure); font-size: var(--taille-petite); }
  .cg-acceptee, .cg-compte__acceptee { display: flex; gap: var(--e2); align-items: flex-start; color: var(--succes); font-size: var(--taille-petite); font-weight: 500; }
  .cg-acceptee .icone, .cg-compte__acceptee .icone { width: 18px; height: 18px; margin-top: 1px; }
  .cg-versions { display: grid; gap: var(--e3); padding-top: var(--e5); border-top: 1px solid var(--filet-appuye); }
  .cg-versions h2 { font-size: var(--titre-petit); }
  .cg-versions ul { display: grid; gap: var(--e1); padding: 0; list-style: none; font-size: var(--taille-petite); }
  .cg-versions li { display: flex; flex-wrap: wrap; gap: var(--e2); align-items: center; min-height: var(--hauteur-controle); }
  .cg-versions [aria-current] { color: var(--encre); font-weight: 600; }

  /* Administration : brouillon, aperçu, publication */
  .cg-admin { display: grid; gap: var(--e7); max-width: 920px; }
  .cg-admin__bloc { display: grid; gap: var(--e4); container-type: inline-size; }
  .cg-admin__bloc > h2 { padding-bottom: var(--e3); border-bottom: 1px solid var(--filet-appuye); }
  .cg-admin__formulaire .editeur__zone { min-height: 420px; }
  .cg-versions-tableau th[scope="row"] { font-weight: 500; }
  .cg-apercu { display: grid; gap: var(--e6); }
  .cg-apercu__document { display: grid; gap: var(--e4); align-content: start; min-width: 0; padding: var(--e5) var(--e4); border: 1px solid var(--filet); border-top: 2px solid var(--encre); border-radius: 0 0 var(--rayon-surface) var(--rayon-surface); background: var(--releve); }
  .cg-apercu__publier { display: grid; gap: var(--e4); align-content: start; padding: var(--e5); border: 1px solid var(--filet); border-radius: var(--rayon-surface); background: var(--panneau); scroll-margin-top: calc(var(--hauteur-barre) + var(--e4)); }
  .cg-apercu__publier h2 { font-size: var(--titre-petit); }
  .cg-apercu__formulaire { gap: var(--e4); }
  @media (width >= 641px) { .cg-apercu__document { padding: var(--e6); } }
  @media (width >= 1024px) {
    .cg-apercu { grid-template-columns: minmax(0, 1fr) 320px; align-items: start; }
    .cg-apercu__publier { position: sticky; top: calc(var(--hauteur-barre) + var(--e5)); }
  }
}

/* ==========================================================================
   Impression d’une pièce : une page A4, sur papier blanc, sans la navigation
   du site. Les jetons reprennent les valeurs du thème clair (design.md) : un
   lecteur en thème sombre imprime la même pièce que les autres. Ces règles ne
   valent que pour les pages qui portent une pièce (:has(.facture-page)).
   ========================================================================== */
@media print {
  @page { size: A4; margin: 16mm 15mm 18mm; }
  @layer pages {
    :root:has(.facture-page) {
      color-scheme: light;
      --fond: #fff; --panneau: #fff; --releve: #fff; --champ: #fff;
      --encre: #111214; --texte: #3a3b3f; --discret: #5f6064;
      --filet: #e0e0dd; --filet-appuye: #c4c4c0;
      --succes: #2e6a47; --info: #2b5b76;
      --contour-titre: clamp(.2px, .008em, .5px);
    }
    html:has(.facture-page), body:has(.facture-page) { min-height: 0; background: #fff; }
    body:has(.facture-page) :is(.lien-evitement, .bandeau-preversion, .barre-laterale, .barre-haute, .dock, .entete, .pied, .entete-seule) { display: none !important; }
    body:has(.facture-page) #contenu > :not(.facture-page) { display: none !important; }
    body:has(.facture-page) .coquille { display: block; min-height: 0; }
    body:has(.facture-page) .contenu-espace, body:has(.facture-page) #contenu { width: auto; padding: 0; }
    .facture-page, .mise-en-page-public .facture-page { display: block; width: auto; margin: 0; padding: 0; }
    .facture-outils, .facture-astuce { display: none !important; }
    .facture { gap: 9mm; padding: 0; border: 0; border-radius: 0; background: none; font-size: 10.5pt; }
    .facture__tete { grid-template-columns: minmax(0, 1fr) auto; gap: 10mm; padding-bottom: 6mm; border-bottom: 2px solid var(--encre); }
    .facture__identite { justify-items: end; text-align: right; }
    .facture__references { grid-template-columns: max-content max-content; justify-content: end; }
    .facture__titre { font-size: 26pt; }
    /* Logo : toujours la version claire, sur le papier blanc ; le nom du club à côté, puis 7 mm avant l’organisation. */
    .facture__logo { gap: 2mm 3.5mm; margin-bottom: 7mm; }
    .facture__logo-image { height: 13mm; max-width: 60mm; }
    .facture__club { font-size: 23pt; }
    .facture__logo-image--clair { display: block !important; }
    .facture__logo-image--sombre { display: none !important; }
    .facture__destinataire { margin-left: 0; background: none; padding: 0 0 0 4mm; }
    /* La table reste une table, quelle que soit la largeur de l’écran d’où l’on imprime. */
    .facture__lignes { display: table !important; }
    .facture__lignes thead { position: static !important; width: auto !important; height: auto !important; overflow: visible !important; clip-path: none !important; display: table-header-group !important; }
    .facture__lignes tbody { display: table-row-group !important; }
    .facture__lignes tr { display: table-row !important; border: 0 !important; padding: 0 !important; }
    .facture__lignes td, .facture__lignes th { display: table-cell !important; }
    .facture__lignes td.facture__nombre { text-align: right !important; }
    .facture__lignes td.facture__nombre::before { content: none !important; }
    .facture__lignes tr, .facture__tva, .facture__totaux, .facture__mentions, .facture__destinataire { break-inside: avoid; }
    .facture__recapitulatif { grid-template-columns: minmax(0, 1fr) 62mm; gap: 8mm; align-items: start; break-inside: avoid; }
    .facture__recapitulatif .facture__tva { justify-self: start; }
    .facture__recapitulatif .facture__totaux { margin-top: 0; }
    .facture a { color: inherit; text-decoration: none; }
    /* Le contour des titres (écran) s’imprimerait comme un second texte : un PDF copié doublerait chaque lettre. */
    .facture, .facture * { -webkit-text-stroke: 0 !important; }
  }

  /* Pièce d’essai (version de test) : signalée à l’écran comme à l’impression. */
  .facture__essai { margin-bottom: var(--e4); padding: var(--e2) var(--e3); border: 1px dashed var(--attention); border-radius: var(--rayon); color: var(--attention); font-size: var(--taille-petite); font-weight: 600; text-align: center; }
  @media print { .facture__essai { border-color: #555; color: #000; } }
}