/* ============================================================
   OFFRE STRUCTURÉE — le second moteur de document.

   LE DESSIN est celui des offres RÉELLEMENT envoyées, relevé dans leurs PDF
   le 11 sept. 2026 (tailles en pt, comme le moteur qui les a produites) :
   - SLV Création, OF-00051 — le style maison : garde anthracite à vagues,
     rubriques numérotées en corail, cartes grises à filet corail, livrables à
     grands numéros, encadrés rosé et sombre, tarif au total corail ;
   - André Bonetti — les variantes : garde claire, lettre en retrait, liste
     numérotée compacte, encadrés arrondis, citation, cartes bordées, tableaux
     sobres à filets noirs.
   Le moteur en portait une version appauvrie depuis le portage du skill
   `snapshot-doc-system` : c'est la forme qui s'était perdue, pas le contenu.

   DIFFÉRENCE AVEC LE SKILL : celui-ci s'imprime avec WeasyPrint et
   pose son pied de page dans des boîtes de marge `@page` — que Chrome
   ne sait pas faire. Ici, chaque page est une BOÎTE A4 RÉELLE avec son
   pied de page dedans. L'aperçu à l'écran est donc exactement ce que
   le client recevra, et la numérotation est la nôtre (l'offre simple
   imprime encore l'en-tête de Chrome, URL comprise).

   Le document n'est JAMAIS thématisé : c'est une feuille de papier.
   Palette figée en clair, comme .odoc-scope pour l'offre simple.
   ============================================================ */

.dstruct{
  --d-ink:#0B0B0B;
  --d-ink2:#4A4D54;
  --d-ink3:#696969;
  --d-line:#EAEAEA;
  --d-line2:#CFCFCF;
  --d-acc:#ED5847;       /* corail : filets, numéros, puces, total facturé */
  --d-acc2:#B82D1C;      /* corail lisible sur blanc : étiquettes, jalons, remises */
  --d-soft:#F5F5F5;
  --d-rose:#FEF7F6;      /* encadré « responsabilités » et « hors périmètre » */
  --d-rose2:#F6ABA2;
  --d-nuit:#1D2026;      /* garde sombre, encadré « ajustements » */
  --d-vert:#1F7A54;      /* « Offert » dans le tarif */
  /* Sans elle, Chrome n'imprime AUCUN fond (case « graphismes d'arrière-plan »
     décochée par défaut) : la garde anthracite sortait blanche, texte blanc
     compris, et les cartes perdaient leur gris. */
  -webkit-print-color-adjust:exact; print-color-adjust:exact;
}

/* ---------- LA PAGE ---------- */
.dpage{
  width:210mm; min-height:297mm; box-sizing:border-box;
  padding:20mm 18mm 20mm; position:relative; background:#fff;
  font-family:'Satoshi',sans-serif; font-size:9.5pt; line-height:1.6; font-weight:400;
  letter-spacing:0; text-transform:none; text-align:left; color:var(--d-ink);
  box-shadow:0 10px 44px rgba(20,22,25,.16); margin:0 auto 26px;
}
.dpage:last-child{margin-bottom:0}
.dpage *{box-sizing:border-box}
/* les marges du kit (h2, p, ul de l'application hôte) ne doivent rien décaler.
   Les classes génériques GLOBALES des pages hôtes sont évitées : `.note` (kit)
   habillait les notes du comparatif d'une boîte grise, `.col` (Studio) passait
   les cartes en flex dans l'aperçu. */
.dpage :where(h1,h2,h3,h4,p,ul,ol,li,table,th,td){margin:0; padding:0}
.dpage b, .dpage strong{font-weight:700}
/* le pied vit DANS la page : c'est lui qui remplace les boîtes @page.
   Sans filet : les offres envoyées n'en ont pas. */
.dpage-foot{
  position:absolute; left:18mm; right:18mm; bottom:6mm;
  display:flex; justify-content:space-between; align-items:baseline;
  font-size:7.5pt; line-height:1.3; color:var(--d-ink3);
}
.dpage-foot .num{font-variant-numeric:tabular-nums}
/* une page qui déborde ne doit pas se découvrir à l'impression */
.dpage.deborde{outline:2px solid var(--d-acc); outline-offset:3px}

/* ---------- PAGE DE GARDE ---------- */
/* claire (Bonetti) : le titre au milieu de la page */
.dpage.cover{padding:22mm 20mm 22mm; display:flex; flex-direction:column}
.dcover-head{position:relative; display:flex; justify-content:space-between; align-items:flex-start}
.dcover-head .logo{height:25.5pt; width:auto; display:block}
/* le logo déposé : la même hauteur au plus, sans déborder. Sur la garde sombre
   sans logo sombre, il se pose sur une étiquette claire : passé en blanc, un
   logo opaque (tout JPEG converti) deviendrait un rectangle blanc. */
.dcover-head .logo-depose{height:auto; max-height:25.5pt; max-width:70mm; object-fit:contain; object-position:left top}
.dpage.cover.sombre .logo-depose:not(.logo-pour-sombre){background:#fff; border-radius:5pt; padding:4pt 6pt; box-sizing:content-box}
.dcover-ref{display:flex; flex-direction:column; align-items:flex-end; text-align:right; font-size:7.5pt; line-height:1.75; color:var(--d-ink3)}
.dcover-ref .k{text-transform:uppercase; letter-spacing:.04em}
.dcover-ref b{font-weight:700; color:var(--d-ink)}
.dcover-mid{position:relative; margin:auto 0}
.dcover-mid .rule{width:41pt; height:2.2pt; background:var(--d-acc); margin-bottom:17pt}
.dcover-mid .doctype{
  font-size:7.5pt; font-weight:700; text-transform:uppercase; letter-spacing:.16em; line-height:1.5;
  color:var(--d-acc2); margin-bottom:6pt;
}
.dcover-mid h1{
  font-family:'Switzer',sans-serif; font-weight:600; font-size:34pt; line-height:1.1;
  letter-spacing:-.6pt; max-width:125mm; margin:0; color:var(--d-ink);
}
.dcover-mid .sub{font-size:12pt; font-weight:500; line-height:1.5; color:var(--d-ink2); margin-top:12pt; max-width:130mm}
.dcover-parties{position:relative; border-top:.75pt solid var(--d-line2); padding-top:12pt; display:flex; justify-content:space-between; gap:18pt}
.dcover-parties .lbl{font-size:7.5pt; font-weight:700; text-transform:uppercase; letter-spacing:.14em; line-height:1.5; color:var(--d-ink3); margin-bottom:3pt}
.dcover-parties .nom{font-size:10.5pt; font-weight:700; line-height:1.4}
.dcover-parties .li{font-size:9pt; line-height:1.55; color:var(--d-ink2)}
.dcover-parties .right{text-align:right}

/* sombre (SLV) : anthracite éclairé en haut, vagues, titre et parties en bas */
.dpage.cover.sombre{
  color:#fff;
  background:
    radial-gradient(ellipse 62% 40% at 64% 30%, rgba(56,61,71,.85) 0%, rgba(56,61,71,0) 100%),
    linear-gradient(172deg, #2A2E36 0%, #252930 38%, #1E2127 70%, #14161A 100%);
}
.dcover-ondes{position:absolute; inset:0; width:100%; height:100%; pointer-events:none}
.cover.sombre .dcover-ref{line-height:1.85; color:rgba(255,255,255,.62)}
.cover.sombre .dcover-ref .k{letter-spacing:.14em}
.cover.sombre .dcover-ref b{color:var(--d-acc-sombre, var(--d-acc)); letter-spacing:.14em}
.cover.sombre .dcover-mid{margin:auto 0 0}
.cover.sombre .dcover-mid .rule{width:46.5pt; height:1.9pt; margin-bottom:18pt}
.cover.sombre .dcover-mid .doctype{font-size:8pt; color:var(--d-acc-sombre, var(--d-acc)); margin-bottom:5pt}
.cover.sombre .dcover-mid h1{font-size:40pt; line-height:1.08; letter-spacing:-.8pt; color:#fff; max-width:170mm}
.cover.sombre .dcover-mid .sub{font-size:11pt; font-weight:400; line-height:1.55; color:rgba(255,255,255,.76); margin-top:14pt; max-width:112mm}
.cover.sombre .dcover-parties{border-top-color:rgba(255,255,255,.2); margin-top:23pt}
.cover.sombre .dcover-parties .lbl{font-size:7pt; font-weight:400; letter-spacing:.2em; color:rgba(255,255,255,.55)}
.cover.sombre .dcover-parties .nom{font-size:9.5pt; color:#fff}
.cover.sombre .dcover-parties .li{font-size:8.5pt; color:rgba(255,255,255,.62)}

/* ---------- EN-TÊTE DE SECTION ---------- */
/* « 01  LE PROJET EN UNE PAGE ——————— » puis la phrase en 23 pt */
.dsec{margin:20pt 0 13pt; break-inside:avoid; break-after:avoid}
.dpage > .dsec:first-child{margin-top:0}
.dsec-tete{display:flex; align-items:flex-start; font-size:8pt; font-weight:700; line-height:1.5}
.dsec .num{color:var(--d-acc); letter-spacing:.06em; margin-right:10pt; font-variant-numeric:tabular-nums}
.dsec .rub{text-transform:uppercase; letter-spacing:.2em; color:var(--d-ink); margin-right:14pt}
.dsec .filet{flex:1; align-self:flex-start; border-top:.75pt solid var(--d-line2); margin-top:-.2em}
.dsec h2{font-family:'Switzer',sans-serif; font-weight:600; font-size:23pt; line-height:1.15; letter-spacing:-.4pt; margin:10pt 0 0; color:var(--d-ink); max-width:150mm}
/* les mesures des offres envoyées : intro et titres ne courent pas sur toute la largeur */
.dsec .sub{margin-top:11pt; color:var(--d-ink2); max-width:152.5mm}
.dsec .sub p + p{margin-top:6pt}

/* ---------- TEXTE ---------- */
.dtexte{margin:0 0 13pt}
.dtexte p + p{margin-top:8pt}
.dtexte h3, .dbloc-t{font-family:'Satoshi',sans-serif; font-weight:700; font-size:10.5pt; line-height:1.4; letter-spacing:0; margin:0 0 6pt; color:var(--d-ink)}
.dtexte p.lead{font-size:11.5pt; font-weight:500; line-height:1.5; color:var(--d-ink2)}
/* la lettre d'ouverture (SLV) : le même texte, adouci */
.dtexte.intro{color:var(--d-ink2); max-width:152.5mm}
.dtexte.intro p + p{margin-top:12pt}
/* la lettre en retrait (Bonetti) : filet gris, petit texte gris */
.dtexte.retrait{border-left:1.5pt solid var(--d-line2); padding-left:9.5pt; font-size:8.5pt; line-height:1.6; color:var(--d-ink3)}
.dtexte.retrait p + p{margin-top:13.5pt}
/* les précisions de bas de bloc (sources des tarifs, conditions annexes) */
.dtexte.petit{font-size:8.2pt; line-height:1.55; color:var(--d-ink3)}
.dtexte.petit p + p{margin-top:5pt}

/* ---------- LISTES ---------- */
.dliste{margin:0 0 13pt}
ul.dliste > li{list-style:none; position:relative; padding-left:11.5pt; color:var(--d-ink2)}
ul.dliste > li + li{margin-top:6pt}
ul.dliste > li::before{position:absolute; left:0; top:0}
.dliste.tirets > li::before{content:"—"; color:var(--d-ink3)}
.dliste.puces > li{padding-left:10pt; font-size:9pt}
.dliste.puces > li::before{content:"•"; color:var(--d-acc)}
.dliste.fleches > li{padding-left:12pt; font-size:8.8pt}
.dliste.fleches > li + li{margin-top:4.5pt}
.dliste.fleches > li::before{content:"→"; color:var(--d-acc)}
ul.dliste li b{font-weight:700; color:var(--d-ink)}
ul.dliste li .d{display:block; font-size:8.5pt; color:var(--d-ink3); margin-top:1pt}

/* livrables (SLV) : grand numéro corail, libellé, précisions, texte */
.dliste.livrables{border-top:.75pt solid var(--d-line)}
.dliste.livrables .li{display:grid; grid-template-columns:37.5pt 1fr; padding:8pt 0 9.5pt; border-bottom:.75pt solid var(--d-line); break-inside:avoid}
.dliste.livrables .n{font-family:'Switzer',sans-serif; font-weight:600; font-size:17pt; line-height:1.15; letter-spacing:-.2pt; color:var(--d-acc)}
.dliste.livrables .t{font-weight:700; font-size:9.8pt; line-height:1.5; padding-top:1pt}
.dliste.livrables .meta{font-size:8.2pt; line-height:1.5; color:var(--d-ink3); margin-top:3pt}
.dliste.livrables .x{font-size:8.8pt; line-height:1.5; color:var(--d-ink2); margin-top:4pt}

/* numérotée compacte (Bonetti) : numéro · libellé · texte, sur une ligne */
.dliste.num{border-top:1.1pt solid var(--d-ink)}
.dliste.num .li{display:grid; grid-template-columns:36pt 161pt 1fr; align-items:baseline; padding:7pt 0; border-bottom:.75pt solid var(--d-line); break-inside:avoid}
.dliste.num .li:last-child{border-bottom:0}
.dliste.num .c{display:contents}
.dliste.num .n{font-size:8pt; font-weight:700; letter-spacing:.06em; color:var(--d-acc2)}
.dliste.num .t{font-family:'Switzer',sans-serif; font-weight:600; font-size:10.5pt; line-height:1.35; padding-right:10pt}
.dliste.num .x{font-size:9pt; line-height:1.5; color:var(--d-ink2)}
.dliste.num .li.sans-t .x{grid-column:2 / 4}

/* ---------- TABLEAUX ---------- */
.dtable{width:100%; border-collapse:collapse; margin:0 0 13pt; font-size:9.5pt; line-height:1.5}
.dtable thead th{
  font-size:7pt; font-weight:700; text-transform:uppercase; letter-spacing:.12em; line-height:1.5;
  color:var(--d-ink3); text-align:left; padding:0 10pt 5pt 0; border-bottom:.75pt solid var(--d-line2);
}
.dtable tbody td{padding:8pt 12pt 8pt 0; border-bottom:.75pt solid var(--d-line); vertical-align:top}
.dtable .r{text-align:right; padding-right:0; white-space:nowrap; font-variant-numeric:tabular-nums}
.dtable thead th.r{text-align:right; padding-right:0}
.dtable td .d{display:block; font-weight:400; font-size:8.2pt; line-height:1.5; color:var(--d-ink3); margin-top:1.5pt; max-width:118mm}
.dtable tr{break-inside:avoid}
/* la colonne d'intitulés ne se laisse pas écraser par un long texte voisin (« 02 · Contenus » sur deux lignes) */
.dtable thead th:first-child, .dtable tbody td:first-child{min-width:36mm}
.dtable tbody td.offert{font-size:8.5pt; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--d-vert); padding-top:9pt}
.dtable tbody td.neg{color:var(--d-acc2)}
.dtable tfoot td{border-top:1.1pt solid var(--d-ink); padding-top:9pt; font-weight:700; font-size:10pt; vertical-align:baseline}
.dtable tfoot td.r{font-size:11pt}
.dtable tfoot .exo{display:block; font-family:'Satoshi',sans-serif; font-size:7.5pt; font-weight:500; color:var(--d-ink3); margin-top:2pt}
/* le total FACTURÉ (tarif lié aux positions) : Switzer, montant en corail */
.dtable tfoot tr.facture td{border-top-width:1.5pt; padding-top:11pt; font-family:'Switzer',sans-serif; font-weight:600; font-size:12.5pt}
.dtable tfoot tr.facture td.r{font-size:19pt; letter-spacing:-.2pt; color:var(--d-acc)}
/* détaillé (tarif SLV) : intitulés et montants en gras, précision grise dessous */
.dtable.detail tbody td:first-child{font-weight:700}
.dtable.detail tbody td.r{font-weight:700; font-size:10pt}
.dtable.detail tbody td.offert{font-size:8.5pt}
/* le tarif tiré des positions : le rabais d'une ligne sous elle, en retrait et sans filet entre les deux ;
   le sous-total puis le rabais de l'offre ; l'arrondi. Les montants négatifs sont en corail (td.neg). */
.dtable tbody tr:has(+ tr.rab:not(.glob)) td{border-bottom:0; padding-bottom:2pt}
.dtable.detail tbody tr.rab td{padding-top:0; font-weight:500; font-size:9pt}
.dtable.detail tbody tr.rab td:first-child{padding-left:12pt; font-weight:500; color:var(--d-ink2)}
.dtable.detail tbody tr.rab.glob td{padding-top:6pt}
.dtable.detail tbody tr.rab.glob td:first-child{padding-left:0}
.dtable.detail tbody tr.sous td{border-bottom:0; padding:7pt 0 0; font-weight:600; font-size:9pt; color:var(--d-ink2)}
.dtable.detail tbody tr.sous td:first-child{font-weight:600}
/* jalons (calendrier, étapes, options futures — SLV) : la colonne de droite en corail */
.dtable.jalons{font-size:9pt}
.dtable.jalons tbody td{font-weight:700}
.dtable.jalons tbody td:not(:first-child){color:var(--d-acc2)}
/* sobre (Bonetti) : texte régulier, filets noirs, total en Switzer */
.dtable.simple thead th{font-size:7.5pt; padding-bottom:6pt; border-bottom:1.1pt solid var(--d-ink)}
.dtable.simple td .d{font-size:8.5pt}
.dtable.simple tbody tr:last-child td{border-bottom-color:var(--d-line2)}
.dtable.simple tfoot td{font-family:'Switzer',sans-serif; font-size:11pt}
.dtable.simple tfoot td.r{font-size:13pt}

/* ---------- COLONNES ---------- */
.dcols{display:flex; gap:9pt; margin:0 0 13pt; break-inside:avoid}
.dcols > .dcol{flex:1; min-width:0}
.dcols .lbl{font-size:7pt; font-weight:700; text-transform:uppercase; letter-spacing:.18em; line-height:1.5; color:var(--d-ink3); margin-bottom:3pt}
.dcols h4{font-family:'Satoshi',sans-serif; font-weight:700; font-size:10pt; line-height:1.4; margin:0 0 5pt; color:var(--d-ink)}
.dcols p{font-size:8.3pt; line-height:1.5; color:var(--d-ink2)}
.dcols p + p{margin-top:5pt}
.dpuces{margin-top:1pt}
.dcols p + .dpuces{margin-top:6pt}
.dpuces li{list-style:none; position:relative; padding-left:7.5pt; font-size:8.3pt; line-height:1.45; color:var(--d-ink2)}
.dpuces li + li{margin-top:4.5pt}
.dpuces li::before{content:"•"; position:absolute; left:0; top:0; color:var(--d-acc)}
/* cartes (SLV) : fond gris, filet corail en tête */
.dcols.cartes > .dcol{background:var(--d-soft); border-top:1.5pt solid var(--d-acc); padding:9pt 10.5pt 14pt}
.dcols.cartes .lbl{color:var(--d-acc)}
/* bordées (Bonetti) : blanches, bord gris arrondi */
.dcols.bordees{gap:13.5pt}
.dcols.bordees > .dcol{border:.75pt solid var(--d-line2); border-radius:6pt; padding:12pt 14pt 14pt}
.dcols.bordees .lbl{font-size:7.5pt; letter-spacing:.12em}
.dcols.bordees h4{font-size:9.5pt; margin-bottom:1pt}
.dcols.bordees p, .dcols.bordees .dpuces li{font-size:9.5pt; line-height:1.55; color:var(--d-ink)}
/* sans cadre */
.dcols.simple{gap:18pt}
.dcols.simple h4{font-family:'Switzer',sans-serif; font-weight:600; font-size:12pt}
.dcols.simple p{font-size:9pt}

/* ---------- ENCADRÉS ---------- */
.dnote{margin:0 0 13pt; font-size:9.5pt; line-height:1.55; break-inside:avoid}
.dnote .lbl{font-size:7.5pt; font-weight:700; text-transform:uppercase; letter-spacing:.12em; line-height:1.5; color:var(--d-ink3); margin-bottom:4pt}
.dnote > p + p{margin-top:6pt}
.dnote > p + .ditems, .dnote > p + .dgrille{margin-top:8pt}
.ditems li{list-style:none; position:relative; padding-left:11pt; color:var(--d-ink2)}
.ditems li + li{margin-top:5pt}
.ditems li::before{content:"—"; position:absolute; left:0; top:0; color:var(--d-ink3)}
.dgrille{display:grid; grid-template-columns:1fr 1fr; row-gap:9pt}
.dgrille > div{padding-right:14pt}
.dgrille b{display:block; font-size:9pt; line-height:1.45; color:var(--d-ink)}
.dgrille p{font-size:8.5pt; line-height:1.5; color:var(--d-ink2); margin-top:1.5pt}
/* bordure fine (Bonetti) */
.dnote.neutre{border:.75pt solid var(--d-line2); border-radius:6pt; padding:9pt 14pt 10pt}
/* bordure fine + barre corail (Bonetti, « hors périmètre ») */
.dnote.attn{border:.75pt solid var(--d-line2); border-left:2.2pt solid var(--d-acc); border-radius:6pt; padding:10pt 14pt 12pt}
.dnote.attn .lbl{color:var(--d-acc2)}
/* fond gris discret (Bonetti, « ajustements ») */
.dnote.soft{background:var(--d-soft); border:.75pt solid var(--d-line); border-radius:6pt; padding:9pt 14pt 10pt}
/* rosé à flèches (SLV, « responsabilités », « hors périmètre ») */
.dnote.corail{background:var(--d-rose); border:.8pt solid var(--d-rose2); padding:11pt 13pt 14pt; font-size:8.8pt; color:var(--d-ink2)}
.dnote.corail .lbl{font-size:7pt; letter-spacing:.18em; color:var(--d-acc2); margin-bottom:6pt}
.dnote.corail .ditems li{padding-left:12pt; line-height:1.6}
.dnote.corail .ditems li + li{margin-top:4.4pt}
.dnote.corail .ditems li::before{content:"→"; color:var(--d-acc)}
/* gris à barre corail (SLV, « en option », « ce qu'il faut en retenir ») */
.dnote.accent{background:var(--d-soft); border-left:2.6pt solid var(--d-acc); padding:9pt 16pt 11pt 13.5pt; font-size:9pt; color:var(--d-ink2)}
.dnote.accent .lbl{font-size:7pt; letter-spacing:.18em; color:var(--d-acc2); margin-bottom:6pt}
/* sombre (SLV, « ajustements ») */
.dnote.sombre{background:var(--d-nuit); padding:10pt 14.3pt 11pt; font-size:8.8pt; line-height:1.6; color:rgba(255,255,255,.88)}
.dnote.sombre .lbl{font-size:7pt; letter-spacing:.18em; color:var(--d-acc-sombre, var(--d-acc)); margin-bottom:5pt}
.dnote.sombre b, .dnote.sombre .ditems li{color:#fff}
/* citation (Bonetti) : une phrase mise en avant */
.dnote.citation{background:var(--d-soft); border-left:2.2pt solid var(--d-acc); border-radius:6pt; padding:9pt 15pt; font-family:'Switzer',sans-serif; font-weight:500; font-size:10.5pt; line-height:1.5; color:var(--d-ink2)}
/* en ligne (SLV, « paiement ») : l'étiquette ouvre la phrase, sans cadre */
.dnote.ligne{font-size:8.6pt; line-height:1.6; color:var(--d-ink2)}
.dnote.ligne .lbl{display:inline; font-size:7pt; letter-spacing:.18em; color:var(--d-acc2); margin:0 7pt 0 0}

/* ---------- COMPARATIF (SLV) ---------- */
.dcomp{display:flex; gap:10.5pt; margin:0 0 13pt; break-inside:avoid}
.dcomp .cote{flex:1; min-width:0}
.dcomp .tete{border-top:1.5pt solid var(--d-line2); padding-top:7pt; margin-bottom:9pt}
.dcomp .retenu .tete{border-top-color:var(--d-acc)}
.dcomp .lbl{font-size:7pt; font-weight:700; text-transform:uppercase; letter-spacing:.18em; line-height:1.5; color:var(--d-ink3)}
.dcomp .retenu .lbl{color:var(--d-acc2)}
.dcomp .t{font-weight:700; font-size:10pt; line-height:1.4; margin-top:1pt; color:var(--d-ink)}
.dcomp table{width:100%; border-collapse:collapse; font-size:8.4pt; line-height:1.5; color:var(--d-ink2)}
.dcomp tbody td{padding:5pt 0; border-bottom:.75pt solid var(--d-line); vertical-align:top}
.dcomp tbody tr:last-child td{border-bottom:0}
.dcomp td.r{text-align:right; white-space:nowrap; padding-left:8pt; font-variant-numeric:tabular-nums}
.dcomp tfoot td{border-top:1.1pt solid var(--d-ink); padding-top:7pt; font-weight:700; font-size:10pt; color:var(--d-ink); vertical-align:baseline}
.dcomp tfoot td.r{font-size:11pt; color:var(--d-acc)}
.dcomp .cote-note{font-size:8pt; line-height:1.5; color:var(--d-ink3); margin-top:11pt}
.dcomp .cote-note p + p{margin-top:4pt}

/* ---------- PARTIES (SLV) ---------- */
.dparties{display:flex; gap:10.5pt; margin:0 0 13pt; break-inside:avoid}
.dparties .carte{flex:1; min-width:0; background:var(--d-soft); border-top:1.5pt solid var(--d-acc); padding:9pt 11.3pt 11pt}
.dparties .lbl{font-size:7pt; font-weight:700; text-transform:uppercase; letter-spacing:.18em; line-height:1.5; color:var(--d-ink3)}
.dparties .nom{font-weight:700; font-size:10.5pt; line-height:1.4; margin-top:3pt}
.dparties .li{font-size:8.5pt; line-height:1.5; color:var(--d-ink2); margin-top:3pt}

/* ---------- SIGNATURE ---------- */
/* sobre (Bonetti) : mot de clôture, nom, coordonnées sous un filet */
.dsign{margin:13pt 0 0; break-inside:avoid}
.dsign .txt{font-size:9.5pt; margin-bottom:7pt}
.dsign .txt p + p{margin-top:6pt}
.dsign .nom{font-size:10pt; font-weight:700; line-height:1.4}
.dsign .role{font-size:8.5pt; line-height:1.4; color:var(--d-ink3)}
.dsign .contact{border-top:.75pt solid var(--d-line2); padding-top:10pt; margin-top:22pt; font-size:8pt; line-height:1.3; color:var(--d-ink3)}
.dsign .contact b{color:var(--d-ink2)}
.dsign .dcg{margin:6pt 0 0; font-size:8pt; line-height:1.45; color:var(--d-ink3)}
.dsign .dcg a, .dcg-seule a{color:inherit; text-decoration:underline; text-underline-offset:2px}
.dcg-seule{margin:14pt 0 0; font-size:8pt; line-height:1.45; color:var(--d-ink3); break-inside:avoid}
/* encadrée (SLV) : fond gris, barre corail, la ligne de coordonnées au pied */
.dsign.encadre{margin:0 0 13pt; background:var(--d-soft); border-left:2.6pt solid var(--d-acc); padding:9.5pt 16pt 10pt 14.3pt; font-size:9pt; line-height:1.6; color:var(--d-ink2)}
.dsign.encadre p + p{margin-top:5pt}
.dsign.encadre b{color:var(--d-ink2)}
.dsign.encadre .nom{font-size:10pt; color:var(--d-ink); margin:6pt 0}
.dsign.encadre .role{margin:-5pt 0 6pt}
.dsign.encadre .contact{border-top:0; padding-top:0; margin-top:7pt; font-size:8.2pt; line-height:1.5}

/* ---------- ÉCRAN ÉTROIT ---------- */
/* Huit pages A4 sur un téléphone sont illisibles, et le zoom donnait un texte
   de 6 px sur l'offre simple. Sous 760 px, les pages deviennent un flux
   continu — même leçon, même remède. L'impression reste A4.
   `@media screen` : sans lui, la classe `.reflow` (posée par le JS d'après la
   largeur d'ÉCRAN) suivait le document jusqu'au papier — imprimer depuis un
   téléphone rendait un PDF hors format, sans pied de page ni pagination. Le
   moteur lettre s'était donné exactement cette garde. */
@media screen{
.dstruct.reflow .dpage{
  width:100%; min-height:0; padding:20px 18px 22px; margin-bottom:0;
  box-shadow:none; border-bottom:1px solid var(--d-line);
}
.dstruct.reflow .dpage:last-child{border-bottom:0}
.dstruct.reflow .dpage-foot{display:none}
.dstruct.reflow .dpage.cover{display:block; padding:26px 18px}
.dstruct.reflow .dcover-mid{margin:56px 0 36px}
.dstruct.reflow .cover.sombre .dcover-mid{margin:150px 0 0}
.dstruct.reflow .cover.sombre .dcover-parties{margin-top:30px}
.dstruct.reflow .dcover-mid h1, .dstruct.reflow .cover.sombre .dcover-mid h1{font-size:26pt}
.dstruct.reflow .dcover-mid .sub{font-size:11pt}
.dstruct.reflow .dcover-parties{flex-direction:column; gap:14px}
.dstruct.reflow .dcover-parties .right{text-align:left}
.dstruct.reflow .dsec h2{font-size:18pt}
.dstruct.reflow .dcols, .dstruct.reflow .dparties, .dstruct.reflow .dcomp{flex-direction:column; gap:10px}
.dstruct.reflow .dgrille{grid-template-columns:1fr}
.dstruct.reflow .dliste.num .li{grid-template-columns:28pt 1fr}
.dstruct.reflow .dliste.num .x{grid-column:2}
.dstruct.reflow .dtable{font-size:9pt}
.dstruct.reflow .dtable td .d{max-width:none}
}

/* ---------- IMPRESSION ---------- */
@media print{
  .dstruct .dpage{
    box-shadow:none; margin:0; width:210mm; min-height:297mm;
    break-after:page; page-break-after:always;
  }
  .dstruct .dpage:last-child{break-after:auto; page-break-after:auto}
  .dstruct .dpage.deborde{outline:none}
  /* la page EST la feuille : aucune marge du navigateur, donc aucun en-tête
     ni pied imposé par Chrome (l'URL sur un document client) */
  @page{size:A4; margin:0}
}
