/* ---------------------------------------------------------------
   COURSIER 3.0 — feuille d'impression (audits MIN-67 a MIN-70, 2 nov.
   2026). Chargee par src/app/layout.tsx avec media="print" : telechargee
   sans bloquer l'affichage de l'ecran, elle ne s'applique qu'a
   l'impression (et a l'export PDF). A part de globals.css, au plafond de
   taille des fichiers CSS fusionnes par Turbopack (voir Logo.tsx et
   premier-affichage.spec.ts). Verifications : impression.spec.ts (PDF
   reels : pages /tarifs, /cgv, /mentions-legales, /services/stockage… ;
   titre de chaque page du plan du site sur la feuille 1, en portrait et
   en paysage ; en portrait, sur chacune de ces pages, aucune feuille qui
   finit par un titre ou par la fin d'un en-tete de section, presque vide
   ou avec une photo coupee ; en paysage, aucune feuille blanche sur les
   pages zones).

   Une feuille A4 en portrait (718 px de large avec des marges de 10 mm)
   recoit les styles de moins de 768 px, meme depuis un ordinateur.
   --------------------------------------------------------------- */

/* En-tete sur chaque feuille, sans jamais recouvrir le texte (MIN-68 ;
   decision du dirigeant, 2 nov. 2026 : en-tete en haut de chaque feuille).
   - Premiere feuille : l'en-tete du site, une seule fois, en haut
     (position absolute, regle plus bas), comme a l'ecran : par-dessus
     l'espace que le haut de chaque page lui reserve deja (l'en-tete fixe
     de l'ecran le recouvre aussi), le texte commence dessous. Avant, fixe,
     il etait recopie par le navigateur en haut de chaque feuille,
     par-dessus le texte.
   - Feuilles suivantes : en-tete courant dans la marge du haut, reservee
     (20 mm), hors de la zone du texte : macaron, nom et telephone
     (variables --impression-nom et --impression-telephone, posees sur
     <html> par layout.tsx a partir de src/lib/site.ts). Boites de marge
     (@top-left, @top-right) : Chrome et Edge depuis la version 131 ;
     ailleurs, la marge reste vide (rien ne recouvre le texte). Macaron :
     public/images/logo-footer.png (80 x 80), integre ici pour etre
     imprime sans attendre de requete, affiche a 26,7 px (3x). Fond blanc :
     marge des feuilles en papier blanc avec « Graphiques d'arriere-plan »
     coche (voir « Papier blanc » plus bas). */
@page {
  margin-top: 20mm;
  background: #fff;
  @top-left {
    content: image-set(url("data:image/png;base64,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") 3x) "\2003 " var(--impression-nom);
    vertical-align: bottom;
    padding-bottom: 2.5mm;
    font: 600 9pt var(--font-body);
    letter-spacing: 0.08em;
    color: #111;
  }
  @top-right {
    content: var(--impression-telephone);
    vertical-align: bottom;
    padding-bottom: 2.5mm;
    font: 9pt var(--font-body);
    color: #111;
  }
}

@page :first {
  margin-top: 10mm;
  @top-left {
    content: none;
  }
  @top-right {
    content: none;
  }
}

@media print {
  /* Aucune transition (integration des lots, 2 nov. 2026) : l'encre foncee
     ci-dessous en lancait dans toute la page au passage a l'impression, et
     les styles imprimes etaient encore ceux de l'ecran. Au retour a l'ecran :
     src/components/layout/ImpressionSansTransition.tsx. */
  *,
  *::before,
  *::after {
    transition: none !important;
  }

  /* En-tete du site en haut de la premiere feuille seulement (voir plus
     haut ; top-0 left-0 right-0 et z-[70] de Header.tsx), sans fond ni
     flou (Header.tsx). Pas dans le flux : il decalait toute la page de sa
     hauteur (76 px, 88 px en paysage) ; quand le haut de page tenait sur
     la feuille 1 sans sa marge du bas, Chrome le renvoyait en entier a la
     feuille 2, et la feuille 1 ne portait que l'en-tete (sept pages de
     prestation en portrait ; cinq d'entre elles, les deux pages secteurs,
     l'accueil et un guide en paysage ; verification du lot C, 2 nov.
     2026). En haut de la feuille 1, comme sur le site en ligne, le haut
     de page ne peut pas etre renvoye plus loin : il se coupe au besoin,
     et le titre reste sur la feuille 1. */
  body > header {
    position: absolute !important;
  }

  /* En-tete sans fond ni flou, en haut de page comme apres defilement
     (fond retire plus bas avec les autres, « Papier blanc »). Regles
     venues des classes print: de Header.tsx et Hero.tsx (integration des
     lots, 2 nov. 2026) : ici, hors de la feuille commune, au plafond de
     taille des fichiers CSS fusionnes de Turbopack (voir Logo.tsx). */
  body > header {
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
  }

  /* Haut de l'accueil, « Passez a la vitesse » : or uni a toutes les
     largeurs (sans fonds imprimes, le degrade or vers rouge decoupe dans
     les lettres serait invisible ; Hero.tsx, accueil-impression.spec.ts). */
  [data-hero-boutons-bas] .signature-gradient {
    background-image: none !important;
    color: #d4b776 !important;
    -webkit-text-fill-color: #d4b776 !important;
  }

  /* Jamais imprimes (MIN-68) : carte cookies et sa cale, menu mobile,
     barres et pastille d'action fixes (elles seraient recopiees en haut ou
     en bas de chaque feuille, par-dessus le texte). Reserve de hauteur du
     bandeau cookies sous le pied de page (globals.css) annulee. */
  #cookie-banner,
  [data-impression="masquer"] {
    display: none !important;
  }

  body::after {
    display: none !important;
  }

  /* Papier blanc, meme avec « Graphiques d'arriere-plan » coche dans la
     fenetre d'impression de Chrome (« Imprimer les arriere-plans »
     ailleurs ; Chrome peut garder ce reglage d'une impression a l'autre) :
     les fonds sombres du site s'imprimaient alors sous l'encre foncee
     ci-dessous, texte noir sur fond noir (1,1:1), en-tete courant des
     feuilles 2 et suivantes compris (marge de la feuille peinte dans le
     fond de la page, #121212 : pages en color-scheme dark, layout.tsx) ;
     verification du responsable, 2 nov. 2026. Fonds (aplats, degrades,
     motifs) et grain du site (body::before, globals.css) retires : la
     feuille s'imprime comme avec le reglage par defaut, ou ils ne
     s'impriment pas. Gardes : les photos et videos (img, video ; logo de
     l'en-tete compris, peint en fond de son <img>, logo-entete.css) et le
     haut de l'accueil (photo imprimee, textes clairs dessus, Hero.tsx).
     Marge des feuilles : fond de @page, plus haut. Carte des zones
     (ZonesMap.tsx, figure svg[role="img"]) : dessin SVG, imprime avec ses
     aplats sombres dans les deux cas ; ses noms gardent les couleurs de
     l'ecran (regle suivante). */
  html {
    background: #fff !important;
  }

  body::before {
    display: none !important;
  }

  body,
  body *:not(img, video, [data-hero-boutons-bas], [data-hero-boutons-bas] *),
  body *:not([data-hero-boutons-bas], [data-hero-boutons-bas] *)::before,
  body *:not([data-hero-boutons-bas], [data-hero-boutons-bas] *)::after {
    background-color: transparent !important;
    background-image: none !important;
  }

  /* Encre foncee (MIN-69) : sans fonds imprimes (reglage par defaut),
     Chrome assombrissait le texte clair du site (#f5f5f7) en gris pale
     (#a3a3a4, 2,5:1 sur le papier). Texte principal #111 (18,9:1), texte
     secondaire #444 (9,7:1).
     Ors, rouges et bleus : les teintes que Chrome leur donnait deja pour
     le papier avec le reglage par defaut (or #c8a96e en #74623f, 6:1 ;
     rouge du telephone #ff4f63 en #ab3542, 6,4:1 ; bleu #5b8ae6 en
     #395792, 7,1:1 ; releve dans les PDF du 2 nov. 2026), ecrites ici :
     avec les fonds imprimes, Chrome n'assombrit plus rien (or a 2,2:1,
     rouge a 3,2:1, bleu a 3,4:1 sur le papier). Meme rouge a toutes les
     largeurs (#ef233c, garde tel quel par Chrome a partir de 768 px de
     large : 4,2:1). Variantes attenuees (text-gold/80, text-accent/80,
     text-ink-muted/70…) en couleur pleine : a 70 ou 80 %, l'or et le gris
     secondaire passaient sous 4,5:1 (3,8:1 et 4,2:1).
     Haut de l'accueil : sa photo est imprimee, ses textes clairs a ombre
     (Hero.tsx) gardent leurs couleurs. Carte des zones aussi : en encre
     foncee, ses noms tombaient sur ses aplats sombres (1,2:1). */
  :root {
    --color-ink: #111;
    --color-ink-muted: #444;
    --ink: #111;
    --ink-muted: #444;
    --color-gold: #74623f;
    --accent-gold: #74623f;
    --color-accent: #ab3542;
    --accent: #ab3542;
    --color-bleu: #395792;
  }

  [data-hero-boutons-bas],
  figure svg[role="img"] {
    --color-ink: #f5f5f7;
    --color-ink-muted: #b8b8be;
    --ink: #f5f5f7;
    --ink-muted: #b8b8be;
    --color-gold: #c8a96e;
    --accent-gold: #c8a96e;
    --color-accent: #ef233c;
    --accent: #ef233c;
    --color-bleu: #5b8ae6;
  }

  :is(.text-accent, .text-accent\/80, .text-accent\/90):not([data-hero-boutons-bas] *) {
    color: var(--color-accent) !important;
  }

  :is(.text-gold\/60, .text-gold\/70, .text-gold\/80):not([data-hero-boutons-bas] *) {
    color: var(--color-gold) !important;
  }

  :is(.text-ink-muted\/70, .text-ink-muted\/80):not([data-hero-boutons-bas] *) {
    color: var(--color-ink-muted) !important;
  }

  /* Liens en forme de bouton (fond rouge bg-accent-hover ou bleu nuit
     --cta-solid-bg, libelle blanc : « Ouvrir mon compte pro », « Recevoir
     une proposition », « Obtenir mon devis personnalisé »…) : fond non
     imprime (retire plus haut avec « Graphiques d'arriere-plan »), libelle
     blanc eclairci par Chrome en gris pale (171,171,171,
     2,3:1 ; verification du lot C, 2 nov. 2026). Libelle et fleche en
     encre foncee, cadre garde. Haut de l'accueil exclu (photo imprimee,
     voir plus haut). */
  a[class~="bg-accent-hover"]:not([data-hero-boutons-bas] *),
  a[class~="bg-[var(--cta-solid-bg)]"]:not([data-hero-boutons-bas] *) {
    color: #111 !important;
  }

  /* Autres textes blancs du corps des pages, sur fond sombre a l'ecran
     (chiffres cles de l'accueil, de Grands comptes et des pages Google
     Ads, references clients de Grands comptes) : meme gris pale sur le
     papier. Encre foncee, secondaire pour les variantes transparentes
     (text-white/60…). Aucun ne passe sur une photo imprimee (releve du
     2 nov. 2026 sur toutes les pages du plan du site) ; haut de l'accueil
     exclu. */
  main [class~="text-white"]:not([data-hero-boutons-bas] *) {
    color: #111 !important;
  }

  main :is([class*=" text-white/"], [class^="text-white/"]):not([data-hero-boutons-bas] *) {
    color: #444 !important;
  }

  /* Rangees de cartes a faire glisser (utilitaire swipe-x de globals.css,
     variante max-md:, MIN-67) : sur papier, une seule carte par rangee
     etait lisible. Cartes les unes a cote des autres, sur deux colonnes,
     sans rognage (regle plus bas, feuilles de moins de 768 px de large,
     ou la rangee est active), jamais coupees entre deux feuilles. */
  .max-md\:swipe-x > * {
    break-inside: avoid;
  }
}

/* Feuille de moins de 768 px de large (A4 en portrait, depuis un
   ordinateur comme depuis un telephone) : textes blancs du haut de
   l'accueil, sur la photo seule (fonds non imprimes), avec les ombres du
   site d'avant (Hero.tsx) ; burger blanc de l'en-tete avec un halo sombre
   (Header.tsx ; l'icone d'appel, rouge, s'en passe). A l'ecran, aucune
   ombre ni aucun halo. Regles venues des classes print:max-md: de ces
   composants (integration des lots, 2 nov. 2026, voir plus haut). Titre :
   dans la couche des utilitaires de Tailwind, a la place de leur
   max-md:[text-shadow:none]! (important, l'emporterait sinon). */
@media print and (width < 48rem) {
  [data-hero-boutons-bas] :has(+ h1),
  [data-hero-boutons-bas] [data-hero-accroche],
  [data-hero-boutons-bas] [data-hero-main-cta] {
    text-shadow: 0 1px 10px rgba(0, 0, 0, 0.65), 0 0 2px rgba(0, 0, 0, 0.9), 0 0 3px rgba(0, 0, 0, 0.6), 0 0 5px rgba(0, 0, 0, 0.5);
  }

  [data-hero-boutons-bas] h1 em {
    text-shadow: 0 2px 18px rgba(0, 0, 0, 0.85), 0 0 10px rgba(0, 0, 0, 0.65), 0 0 3px rgba(0, 0, 0, 0.75);
  }

  [data-hero-boutons-bas] h1 + p {
    text-shadow: 0 0 14px rgba(0, 0, 0, 0.95), 0 0 6px rgba(0, 0, 0, 0.9), 0 1px 2px rgba(0, 0, 0, 0.9);
  }

  [data-hero-boutons-bas] [data-mention-entreprises] {
    text-shadow: 0 0 2px rgba(0, 0, 0, 0.9), 0 1px 3px rgba(0, 0, 0, 0.9), 0 0 6px rgba(0, 0, 0, 0.7), 0 0 14px rgba(0, 0, 0, 0.6);
  }

  body > header button[aria-controls="menu-mobile"] > svg {
    filter: drop-shadow(0 0 0.5px #000) drop-shadow(0 0 0.5px #000) drop-shadow(0 0 1px #000) drop-shadow(0 0 1.5px rgba(0, 0, 0, 0.9));
  }
}

@layer utilities {
  @media print and (width < 48rem) {
    [data-hero-boutons-bas] h1[class] {
      text-shadow: 0 2px 18px rgba(0, 0, 0, 0.75), 0 0 3px rgba(0, 0, 0, 0.55) !important;
    }
  }
}

/* Seulement sous 768 px (48rem, limite de max-md: de Tailwind) : feuille
   A4 en portrait (718 px). En paysage (1 047 px), les rangees gardent la
   grille de l'ecran a cette largeur (3 colonnes avec lg:grid-cols-3, par
   exemple), au lieu de 2 colonnes et d'une carte seule en derniere rangee
   (verification du lot C, 2 nov. 2026). */
@media print and (width < 48rem) {
  .max-md\:swipe-x {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    overflow: visible !important;
    margin-inline: 0 !important;
    padding-inline: 0 !important;
    scroll-snap-type: none !important;
  }
}

/* Feuille de 768 px de large et plus (A4 en paysage, 1 047 px) : en-tete
   du site dans sa version ordinateur, en haut de la premiere feuille.
   Sans son fond anthracite (non imprime), ses liens blancs sortaient en
   gris pale (2,3:1) : liens en encre foncee. Le logo s'imprime, a toutes
   les largeurs, dans sa version sombre (lettres noires, rouge conserve :
   classe logo-version-sombre, src/components/ui/logo-fond-clair.css,
   constat MIN-50). Integration des lots, 2 nov. 2026 : le halo sombre que
   le lot C posait ici sur ses lettres blanches, plus specifique, remplacait
   ce filtre en paysage (lettres blanches sur le papier) ; retire. */
@media print and (width >= 48rem) {
  body > header nav a,
  body > header nav button {
    color: #111 !important;
  }
}

/* Lien vers les avis Google du haut de l'accueil (« 5,0 ★★★★★ Avis
   Google », Hero.tsx, depuis le 8 nov. 2026), a toutes les largeurs : sa
   pastille sombre n'est pas imprimee par defaut (fonds non imprimes), son
   texte blanc et ses etoiles sont alors sur la photo seule ; ombre serree
   de la mention (« Service reserve aux entreprises… »), comme elle. Son
   cadre blanc reste. La plaquette (public/presentation), dont la
   couverture s'imprime sur fond blanc, sans photo, imprime le meme lien a
   l'encre de sa couverture (style.css, bloc « Lien avis Google », depuis
   le 9 nov. 2026). */
@media print {
  [data-hero-boutons-bas] [data-hero-avis] {
    text-shadow: 0 0 2px rgba(0, 0, 0, 0.9), 0 1px 3px rgba(0, 0, 0, 0.9), 0 0 6px rgba(0, 0, 0, 0.7), 0 0 14px rgba(0, 0, 0, 0.6);
  }
}

@media print {
  /* Questions frequentes (MIN-70) : reponses imprimees sous chaque
     question, meme fermee. Pied de page exclu (liens, accordeons du
     telephone). */
  main details::details-content {
    content-visibility: visible !important;
  }

  main details summary svg {
    display: none !important;
  }

  /* Formulaires vides et boutons (MIN-70) : sans objet sur papier. Chaque
     formulaire n'imprime que son dernier paragraphe, l'e-mail et le
     telephone a utiliser (data-impression="seulement", PrintFallback de
     src/components/forms/fields.tsx). Fleches des liens-cartes retirees :
     sans objet sur papier, et celles posees en position absolue sur
     telephone etaient deplacees par Chrome en haut d'une autre feuille. */
  main form > :not([data-impression="seulement"]),
  main button,
  main input,
  main select,
  main textarea,
  main a svg.lucide-arrow-up-right {
    display: none !important;
  }

  [data-impression="seulement"] {
    display: block !important;
  }

  /* Pas de titre seul en bas de feuille (MIN-70 ; integration des lots,
     2 nov. 2026, sur la verification du responsable du lot C : « Trois
     criteres, un prix clair. » de /tarifs, « NOS SOLUTIONS » de l'accueil,
     numeros d'article des CGV restaient seuls en bas d'une feuille).
     Titres, sur-titres (Kicker.tsx), numeros d'article (CGV), noms de ville
     des adresses du pied de page (attribut data-impression="titre") et
     questions des FAQ : gardes avec ce qui suit, jamais coupes. */
  h1,
  h2,
  h3,
  h4,
  [data-impression="titre"],
  main details > summary {
    break-after: avoid;
    break-inside: avoid;
  }

  /* Sur-titre en ligne (inline-flex) : break-after ne vaut que pour un
     bloc ; c'est l'element qui le suit qui ne s'en separe pas, et le debut
     de cet element aussi : sans cela, Chrome coupait juste apres son filet
     du haut (« AUTRES MOYENS DE NOUS JOINDRE » et un trait seuls en bas de
     la feuille 1 des pages Google Ads, leurs coordonnees sur la feuille 2 ;
     verification du responsable de l'integration, 3 nov. 2026). */
  [data-impression="titre"] + *,
  [data-impression="titre"] + * > :first-child {
    break-before: avoid;
  }

  /* Petits blocs jamais coupes entre deux feuilles (attribut
     data-impression="bloc") : lignes de coordonnees de /contact et des
     pages Google Ads, libelle avec sa valeur (« NEUILLY-SUR-SEINE » seul
     en bas de la feuille 1 de /contact, son adresse sur la feuille 2) ;
     liste « Nos autres zones » des pages zones, ainsi gardee avec son
     en-tete de section (regle plus bas). En A4 portrait, Chrome coupait
     juste apres le filet du haut de la liste : « Nos autres zones » et sa
     phrase seuls en bas de la feuille 6 de Nanterre et de Neuilly-sur-Seine,
     la liste sur la feuille 7 (verification du responsable de
     l'integration, 3 nov. 2026). L'en-tete passe avec la liste sur la
     feuille 7, et le bandeau photo qui suit (jamais coupe) sur la 8 :
     une feuille de plus sur ces deux pages (9, comme Paris et La Defense). */
  [data-impression="bloc"] {
    break-inside: avoid;
  }

  /* Chrome ne reporte pas ces regles d'un titre au bloc qui le contient
     quand ce bloc est une case de grille (colonne de l'en-tete d'une
     section : sur-titre et titre a gauche, chapo a droite) : blocs qui
     finissent par un titre (bloc Reveal, colonne), sur deux niveaux. */
  :is(main, footer) :is(div, nav):has(> :is(h1, h2, h3, h4, [data-impression="titre"]):last-child),
  :is(main, footer) :is(div, nav):has(> div:last-child > :is(h1, h2, h3, h4, [data-impression="titre"]):last-child) {
    break-after: avoid;
  }

  /* Debut de ce qui suit un titre : premiere carte d'une grille (cartes
     jamais coupees, regle des rangees plus haut) gardee avec le titre ; sans
     elle, Chrome renvoyait toute la rangee a la feuille suivante et
     laissait le titre seul (« Comment pouvons-nous vous aider ? » de
     l'accueil en paysage). */
  :is(main, footer) :is(div, nav):has(> :is(h1, h2, h3, h4, [data-impression="titre"]):last-child) + * > :first-child,
  :is(main, footer) :is(div, nav):has(> div:last-child > :is(h1, h2, h3, h4, [data-impression="titre"]):last-child) + * > :first-child {
    break-before: avoid;
  }
}

/* En-tete de section en grille (sur-titre et titre, chapo eventuel ;
   attribut data-impression="entete-section", pose sur ces seules grilles,
   jamais sur une grille qui porte toute une section ; « Trois criteres, un
   prix clair. » de /tarifs) : sur une feuille de moins de 768 px (A4 en
   portrait), ou la grille n'a qu'une colonne, d'un seul tenant et garde
   avec ce qui suit, premiere carte comprise.
   Verification du responsable de l'integration (3 nov. 2026) : la regle
   s'appliquait avant a toute grille contenant un titre en case de grille,
   sections entieres comprises (A propos : feuille 2 avec une seule photo,
   « Quatre engagements, zero compromis. » seul en bas de la feuille 3 ;
   Grands comptes : une feuille avec le seul lien « Decouvrir la flotte »,
   2 feuilles de plus ; Flotte : « choisissez la cadence. » seul en bas de
   la feuille 5).
   En paysage (deux colonnes), Chrome ne deplace pas une telle grille vers
   la feuille suivante : avec ces regles, il coupait la premiere carte
   apres sa marge du haut (« 01 » de « Comment ca marche » sous l'en-tete
   courant) ou laissait une feuille blanche ; elles n'y sont pas
   appliquees. Le paysage n'est pas traite par ces regles ni par celles
   qui suivent (decision de la direction attendue) : releve du 3 nov. 2026
   depuis un ordinateur 1440 x 900, 28 pages sur 35 ont au moins une
   feuille qui finit par un titre ou un sur-titre (en-tetes de section de
   l'accueil, de /tarifs, des pages prestations, des pages zones, d'A
   propos, de Flotte, des pages Google Ads…), comme avant cette
   verification. Aucun texte perdu. Plus de feuille blanche (pages zones :
   regle data-impression="marge-bas", en fin de fichier) ; restent des
   feuilles d'une seule ligne (accueil, feuille 3 ; /tarifs, feuille 12 ;
   Marques de sport et de mode, feuille 11 ; Paris et La Defense,
   feuille 13 ; releve du 3 nov. 2026). */
@media print and (width < 48rem) {
  main [data-impression="entete-section"] {
    break-inside: avoid;
    break-after: avoid;
  }

  main [data-impression="entete-section"] + * > :first-child {
    break-before: avoid;
  }

  /* Marge du bas des sections (py-… de Section.tsx et des autres
     sections) : un bloc vide de meme hauteur en fin de section, a la place
     du padding-bottom. Chrome n'imprime pas la fin d'une section sur une
     feuille sans son padding du bas : quand il ne tenait plus, il renvoyait
     a la feuille suivante tout le dernier bloc de la section et laissait
     son titre seul (« Des promesses tenues » et ses cartes sur les cinq
     pages prestations, « Du stock a vos clients… » sur Cosmetiques, « Votre
     stockage en Ile-de-France, en clair. » seul sur la feuille 2 de
     Stockage). Le bloc vide, lui, passe seul a la feuille suivante, et
     s'y ajoute au padding du haut de la section suivante : texte de cette
     feuille jusqu'a 17 mm plus bas qu'ailleurs. Bloc de la hauteur du padding
     du haut, egal a celui du bas (py-… : releve du 3 nov. 2026 sur les 160
     sections concernees des 35 pages) ; fonds non imprimes : sans saut de
     feuille, rendu identique. */
  main section[class*="py-"] {
    padding-bottom: 0 !important;
  }

  main section[class*="py-"]::after {
    content: "";
    display: block;
    padding-top: inherit;
  }

  /* Photos jamais coupees entre deux feuilles : cadres des photos (img
     en fill de next/image dans un bloc a proportions fixes : vehicules de
     /flotte, A propos, accueil…) et bandeaux sur photo (CTABand, photo en
     fond de la section). La regle des en-tetes de section, appliquee
     avant a toute grille (voir plus haut), gardait aussi d'un seul tenant
     les grilles photo + texte de /flotte ; limitee aux en-tetes, et sans
     cette regle-ci, la photo du velo etait coupee en deux entre les
     feuilles 1 et 2, et le bandeau « Parlons de vos besoins de transport »
     de /zones-desservies entre les feuilles 4 et 5. L'accueil, A propos,
     /flotte et /guides avaient deja une photo coupee (releve du 3 nov.
     2026). */
  main div:has(> img[data-nimg="fill"]),
  section:has(> div > div > img[data-nimg="fill"]) {
    break-inside: avoid;
  }

  /* Pied de page du telephone (Footer.tsx) : accordeons « Services » et
     « L'entreprise » (fermes, sans leurs liens sur papier) d'un seul
     tenant et gardes avec la colonne Contact qui suit (« L'ENTREPRISE »
     seul en bas d'une feuille de trois pages, « SERVICES » sur /contact).
     Grille d'une colonne imprimee en blocs (Chrome ne garde pas une case
     de grille avec la suivante), meme ecart de 2rem (gap-8). */
  footer :has(> div > nav > details) {
    display: block !important;
  }

  footer :has(> div > nav > details) > :not(:first-child) {
    margin-top: 2rem;
  }

  footer div:has(> nav > details) {
    break-inside: avoid;
    break-after: avoid;
  }
}

/* Pages zones en A4 paysage (feuille de 768 px de large et plus) : marge
   du bas des sections (md:py-44 de Section.tsx) en margin, et non en
   padding (attribut data-impression="marge-bas", sections de
   src/app/zones-desservies/[slug]/page.tsx). Chrome garde le padding du
   bas d'une section avec son dernier bloc : quand il ne tenait plus sur la
   feuille, son reste passait en haut de la suivante, et Chrome y renvoyait
   en entier la section « Flotte adaptee » (en-tete garde avec ses cartes
   par les regles des blocs qui finissent par un titre, plus haut ; le tout
   ne tient pas sur une feuille) : feuille 6 blanche sur Paris, Nanterre,
   Neuilly-sur-Seine et La Defense (verification du responsable de
   l'integration, 3 nov. 2026). Une marge, elle, tombe au saut de feuille :
   plus de feuille blanche, une feuille de moins sur ces quatre pages.
   Fonds non imprimes : sans saut de feuille, rendu identique (meme ecart
   de 176 px entre deux sections). En portrait : bloc vide de la marge du
   bas des sections, plus haut. Regle limitee a ces pages : etendue a
   toutes, elle changeait la mise en page de 25 pages sur 35 en paysage
   (en mieux pour la plupart, mais un titre seul en bas d'une feuille de
   /services/stockage et une photo coupee sur /tarifs) ; decision de la
   direction attendue pour le paysage. */
@media print and (width >= 48rem) {
  main section[data-impression="marge-bas"][class~="md:py-44"] {
    padding-bottom: 0 !important;
    margin-bottom: calc(var(--spacing) * 44);
  }
}
