/**
 * case_study — CPT stylesheet. Loaded by inc/enqueue.php ONLY on single
 * case studies and their archive (rmd_enqueue_cpt_style).
 *
 * ── The convention ──────────────────────────────────────────────────────────
 * One file per CPT: assets/css/cpt/<post_type>.css, post type spelled exactly
 * as registered (snake_case, no transform — same 1:1 rule as layout keys).
 * Drop the file in, and it loads on that CPT's pages. No enqueue code, no
 * Tailwind rebuild, no touching any other CPT's styles.
 *
 * ── Why hand-written and not Tailwind source ────────────────────────────────
 * These are plain CSS component rules — no @apply, no Tailwind functions, only
 * var(--token) references that main.css publishes in @layer theme. So this file
 * needs NO build step: edit and deploy. Design tokens and utility classes still
 * come from the shared main.css; only the CPT's own components live here.
 *
 * ── @layer components is load-bearing ───────────────────────────────────────
 * main.css establishes the layer order (properties, theme, base, components,
 * utilities) and puts its component rules in `components`. Rejoining that layer
 * keeps Tailwind UTILITIES winning over these rules, exactly as before — an
 * unlayered file would silently beat every utility class in the templates.
 * This file must therefore load AFTER main.css. enqueue.php declares that
 * dependency; don't drop it.
 *
 * Everything is scoped to `.rmd-case` (the <main> class on case-study pages) so
 * generic names — .card, .tag, .pill, table — can never collide with parent
 * Vault/UiCore styles.
 */


/* ═══ UNLAYERED, ON PURPOSE ─ ne pas « ranger » ce qui suit dans @layer ═══
   Quelque chose sur la page embarque un reset NON LAYERÉ :
       blockquote, dd, dl, figure, h1..h6, hr, p, pre { margin: 0 }
   Dans la cascade CSS, une déclaration non layerée bat TOUTES les déclarations
   layerées, quelle que soit la spécificité : `.rmd-case .comment p` (0,2,1) dans
   @layer components perd contre un `p` (0,0,1) non layeré. La couche tranche
   AVANT la spécificité. C'est pour ça que seules les règles dont le sélecteur se
   TERMINE par un nom d'élément étaient touchées (trouvé le 03/08/2026).
   La règle pour ce fichier : un sélecteur qui finit sur un nom d'élément nu et
   pose une marge vit ici, pas dans la couche.
   Les règles qu'expliquait cette note (.hero-badge hr, .comment p, .real h3) sont
   parties avec l'ancien design le 13/08/2026 ; la note reste, le piège non. */

/* Keyframes and the reduced-motion override stay UNLAYERED, exactly as the
   Tailwind source emitted them (they were outside @layer components). The
   header CTA in assets/css/rmd-chrome.css ships its own identical copy of this
   animation, so the two files stay independent. */
@keyframes rmdCtaShine {
	0% { left: -75%; }
	25% { left: 125%; }
	100% { left: 125%; }
}

/* ═══════════════════════════════════════════════════════════════════════════════
   Archive (/etudes-de-cas/) — moved here from assets/css/rmd-chrome.css, which is
   SHARED chrome: these card styles are case_study's alone, and W3 makes chrome
   site-wide, at which point they would have leaked onto every page.

   Deliberately UNLAYERED, exactly as it was in rmd-chrome.css, so it keeps
   overriding the sparse .rmd-archive defaults main.css ships in @layer components.
   ═══════════════════════════════════════════════════════════════════════════════ */
/* ── Case-study archive (/etudes-de-cas/) ───────────────────────────────────
   Hand-written so it needs no Tailwind rebuild. Unlayered, so it overrides the
   sparse @layer defaults in main.css. Uses the case-study tokens (ink #041135,
   redder #E4004D, purp #3943FF, bord #E9EAF2) to match the single template. */
.rmd-archive {
	max-width: 1200px;
	margin: 0 auto;
	padding: 64px 24px 88px;
	font-family: 'Poppins', ui-sans-serif, system-ui, sans-serif;
	color: #041135;
}
.rmd-archive__head { max-width: 720px; margin-bottom: 44px; }
.rmd-arch-eyebrow {
	display: inline-flex; align-items: center;
	background: #F3F4FF; color: #3943FF;
	font-size: 12px; font-weight: 600; letter-spacing: .04em;
	padding: 7px 16px; border-radius: 9999px; margin-bottom: 18px;
}
.rmd-arch-title {
	margin: 0; color: #041135;
	font-size: 40px; font-weight: 500; letter-spacing: -.02em; line-height: 1.1;
}
@media (min-width: 768px) { .rmd-arch-title { font-size: 52px; } }
.rmd-arch-sub {
	margin: 16px 0 0; max-width: 560px;
	font-size: 16px; line-height: 1.6; color: #596980;
}

.rmd-archive__grid {
	display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
}
@media (max-width: 900px) { .rmd-archive__grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 620px) { .rmd-archive__grid { grid-template-columns: 1fr; } }

.rmd-cscard {
	background: #fff; border: 1px solid #E9EAF2; border-radius: 16px; overflow: hidden;
	box-shadow: 0 8px 26px rgba(4, 17, 53, .05);
	transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
}
.rmd-cscard__link { display: flex; flex-direction: column; height: 100%; color: inherit; text-decoration: none; }
.rmd-cscard__media { aspect-ratio: 16 / 10; background: #F9FAFB; overflow: hidden; }
.rmd-cscard__image { width: 100%; height: 100%; object-fit: cover; display: block; }
/* No featured image → a tasteful branded placeholder (soft brand-tint wash +
   muted Rhillane mark), so the card reads as intentional, never broken. */
.rmd-cscard__media--empty {
	background: linear-gradient(135deg, #EEF0FF 0%, #FBFCFE 55%, #F6F4FF 100%);
}
.rmd-cscard__placeholder {
	display: flex; align-items: center; justify-content: center;
	width: 100%; height: 100%;
}
.rmd-cscard__placeholder-logo {
	width: 46%; max-width: 188px; height: auto; opacity: .5;
}
.rmd-cscard__body { display: flex; flex-direction: column; flex: 1; padding: 24px 24px 22px; }
.rmd-cscard__chip {
	align-self: flex-start;
	background: #F3F4FF; color: #3943FF;
	font-size: 11.5px; font-weight: 600; letter-spacing: .04em;
	padding: 5px 12px; border-radius: 9999px; margin-bottom: 14px;
}
.rmd-cscard__title { margin: 0; color: #041135; font-size: 19px; font-weight: 600; line-height: 1.3; }
.rmd-cscard__excerpt {
	margin: 10px 0 0; color: #596980; font-size: 14px; line-height: 1.6;
	display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.rmd-cscard__more {
	display: inline-flex; align-items: center; gap: 8px;
	margin-top: 20px; padding-top: 18px; border-top: 1px solid #F0F1F5;
	color: #E4004D; font-size: 14px; font-weight: 600;
}
.rmd-cscard__more svg { transition: transform .25s ease; }
/* Gradient-border lift on hover — identical feel to the .rmd-case cards. */
.rmd-cscard:hover {
	transform: translateY(-3px);
	box-shadow: 0 20px 40px -20px rgba(4, 17, 53, .18);
	border-color: transparent;
	background-image: linear-gradient(#fff, #fff), linear-gradient(155deg, #3943FF 58%, #E4004D 85%, #FA9329 100%);
	background-origin: border-box;
	background-clip: padding-box, border-box;
}
.rmd-cscard:hover .rmd-cscard__more svg { transform: translateX(4px); }

.rmd-archive .navigation.pagination { margin-top: 48px; }
.rmd-archive .nav-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }
.rmd-archive .page-numbers {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 40px; height: 40px; padding: 0 12px;
	border: 1px solid #E9EAF2; border-radius: 10px;
	color: #041135; font-size: 14px; font-weight: 500; text-decoration: none;
	transition: background .15s ease, border-color .15s ease;
}
.rmd-archive .page-numbers:hover { background: #F3F4F6; }
.rmd-archive .page-numbers.current { background: #041135; color: #fff; border-color: #041135; }

/* ── Empty archive ──────────────────────────────────────────────────────────
   Three of the four markets show this on day one, so it is a real page rather
   than an error state: a grid of placeholder cards, then the message.

   The cards reuse .rmd-cscard's geometry and the SAME branded placeholder a
   thumbnail-less study already renders (.rmd-cscard__media--empty +
   .rmd-cscard__placeholder-logo above) — so an empty archive and a half-filled
   one look like the same design, not two.

   No shimmer, deliberately. A skeleton that animates is the web's loading
   signal: it makes visitors wait for content that never arrives, and a page
   that looks broken costs more than one that looks empty. These are static
   frames, and the markup marks them aria-hidden so the grid is decorative to a
   screen reader — only the heading and the CTA are reachable. */
.rmd-cscard--ghost {
	background: #fff; border: 1px solid #E9EAF2; border-radius: 16px; overflow: hidden;
	box-shadow: 0 8px 26px rgba(4, 17, 53, .05);
	display: flex; flex-direction: column;
}
/* No hover rule on purpose — .rmd-cscard's lift belongs to a card you can click,
   and these are frames. The wash and the centred logo come from
   .rmd-cscard__media--empty / .rmd-cscard__placeholder above; nothing else is
   redeclared, which is what keeps the two states identical by construction.

   The ONE exception is height. A real card is 16/10 because it has a screenshot
   to show; a frame has a wide logo (650×166) floating in dead space, so 16/10
   spends ~70px per row on nothing. That matters here: measured with real Poppins
   at 1857×940, the CTA landed at 878px in French — inside the fold by 62px, which
   any bookmarks bar or zoom step eats. On a 1366×768 laptop it was 238px below.

   Safe precisely because the two never co-exist: the frames render in the `else`
   branch of archive-case_study.php, i.e. only when the query returned nothing, so
   no visitor can ever see a 16/7 frame beside a 16/10 card and read it as a bug.
   The logo is width-driven (46%), so a shorter box does not shrink it. */
.rmd-cscard--ghost .rmd-cscard__media { aspect-ratio: 16 / 7; }
/* Palette-exact: #596980 is the theme's ONLY muted text colour, and #F0F1F5 the
   hairline .rmd-cscard__more already uses inside a card. gap 8px matches it too.
   An earlier pass invented a lighter grey and a lighter rule for "quieter" —
   off-palette by two values nobody would have spotted until they drifted. */
.rmd-cscard__ghostfoot {
	display: flex; align-items: center; justify-content: center; gap: 8px;
	padding: 18px 20px 19px; border-top: 1px solid #F0F1F5;
	color: #596980; font-size: 13px; font-weight: 500; letter-spacing: .02em;
}
.rmd-cscard__ghostfoot svg { width: 14px; height: 14px; flex: none; opacity: .85; }

/* Overrides the bare one-liner this used to be — same class name, so any
   markup still emitting a plain <p class="rmd-arch-empty"> degrades to centred
   grey text rather than to nothing. */
.rmd-arch-empty {
	margin: 30px auto 0; max-width: 560px;
	display: flex; flex-direction: column; align-items: center; text-align: center;
	color: #596980; font-size: 16px;
}
.rmd-arch-empty__h {
	margin: 0; color: #041135;
	font-size: 24px; font-weight: 500; letter-spacing: -.02em; line-height: 1.28;
	text-wrap: balance;
}
.rmd-arch-empty__p { margin: 12px 0 0; font-size: 15.5px; line-height: 1.6; color: #596980; }
.rmd-arch-empty__cta { margin-top: 22px; }

/* Property-for-property the header CTA (.rmd-cta, assets/css/rmd-chrome.css):
   8px radius — NOT a pill — 12/24 padding, 14px/500, gap 10, the --shadow-card
   triple, and opacity on hover rather than a lift. A first pass had this as a
   600-weight pill with a pink glow, which is a different button on the same page.

   Copied rather than reused, and that is forced, not lazy: .rmd-cta is
   `display: none` until 768px because the header swaps it for the burger, and
   rmd-chrome.css enqueues at priority 20 against this sheet's 10 — both
   unlayered, so chrome PRINTS LAST and its display:none would beat anything at
   equal specificity here. Adding the class would hide this button on phones.

   The shine sweep is copied too. Every brand button carries it — .rmd-cta
   (header), .rmd-fd-cta (footer) and .rmd-case .btn-cta (in-content) — and the
   last two already appear on the same page as the header's, so "two animations
   compete" is not a rule this design holds. A CTA without it would be the odd
   one out. @keyframes rmdCtaShine is declared in this file already (and again in
   chrome.css, identically), so nothing new is introduced. */
.rmd-arch-empty__btn {
	display: inline-flex; align-items: center; gap: 10px;
	position: relative; overflow: hidden;
	border-radius: 8px; padding: 12px 24px;
	font-size: 14px; font-weight: 500; text-decoration: none; color: #fff;
	background-image: linear-gradient(90deg, #D7045A 50%, #FC8831 100%);
	box-shadow: -4px 0 10px 0 rgba(0, 0, 0, .02), 4px 0 10px 0 rgba(0, 0, 0, .02), 0 4px 10px 0 rgba(0, 0, 0, .02);
	transition: opacity .25s ease;
}
.rmd-arch-empty__btn::before {
	content: ''; position: absolute; top: 0; left: -75%; width: 50%; height: 100%;
	background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .45), transparent);
	transform: skewX(-20deg); animation: rmdCtaShine 3s ease-in-out infinite;
}
.rmd-arch-empty__btn:hover { opacity: .95; color: #fff; }
.rmd-arch-empty__btn:focus-visible { outline: 3px solid #3943FF; outline-offset: 3px; }

@media (max-width: 620px) {
	.rmd-arch-empty__h { font-size: 21px; }
}

@media (prefers-reduced-motion: reduce) {
	.rmd-arch-empty__btn { transition: none; }
	.rmd-arch-empty__btn::before { animation: none; }
	.rmd-cscard, .rmd-cscard__more svg { transition: none; }
	.rmd-cscard:hover { transform: none; }
}

/* Small phones — tighten the archive head so the grid arrives sooner. */
@media (max-width: 560px) {
	.rmd-archive { padding: 40px 18px 64px; }
	.rmd-archive__head { margin-bottom: 30px; }
	.rmd-arch-title { font-size: 34px; }
}


/* ═══════════════════════════════════════════════════════════════════════════
   NOUVEAU DESIGN — porté de redesign-case-studies/Case-Study-mariner-version5.html
   (12/08/2026, branche feat/cs-redesign). Sections : case_hero, client_marquee,
   serp_proof (.rmd-p1), challenge, method_steps, results_band, serp_grid (.rmd-p2),
   chart_stack (.rmd-cr), contact_form (.rmd-fm), related_cases (.rmd-oc) + les
   deux visionneuses #lb / #p2lb.
   ⚠ rmd-sec de la maquette → rmd-p1 ICI ET DANS LES TEMPLATES : le thème pose
   déjà .rmd-sec sur chaque ancienne section (rmd_section_open) — sans ce
   renommage, la preuve v1 restylerait les 11 anciens layouts.
   ⚠ Les jetons :root de la maquette vivent ici sur .rmd-case (le <main> des
   études de cas) : ils héritent partout dans la page et ne fuient pas sur les
   autres vues du multisite.
   ⚠ L’ANCIEN bloc @layer components au-dessus disparaît au nettoyage (phase 10) ;
   le bloc ARCHIVE non-layeré (.rmd-archive/.rmd-cscard) reste, l’archive s’en
   sert toujours.
   ═══════════════════════════════════════════════════════════════════════════ */
@layer components {
  /* ═══════════════════════════════════════════════════════════════════════════
     HERO — repris de hero/hero-mariner.html le 05/08/2026, en remplacement de
     la version précédente (celle-ci ajoute le cadre, la trame, les filets et
     le pied de carte ; elle abandonne les encoches .rmd-cs__n).
     Seule adaptation : les chemins perdent un niveau, ../_assets → ./_assets.
     ═══════════════════════════════════════════════════════════════════════════ */

  /* ═══════════════════════════════════════════════════════════════════════════
     HERO — étude de cas Mariner Underwear

     Système repris tel quel de index-EN.html : mêmes tokens, même Poppins,
     mêmes .rmd-pill / .rmd-chips / .rmd-grad-a, même fond en courbes à 6 %
     d'opacité. Rien d'inventé ici, seulement une composition nouvelle.

     La composition vient de la référence iPullRank : le résultat en très
     grand à gauche, une carte sombre à droite qui porte un avant → après.
     Le jaune de la référence tombe sur --rmd-orng, qui est déjà dans la charte.

     Thème clair uniquement, comme index-EN.html : le site n'a pas de mode
     sombre, en ajouter un ici créerait une incohérence avec le reste.
     ═══════════════════════════════════════════════════════════════════════════ */
  .rmd-ty{
    --rmd-ink:#041135; --rmd-purp:#3943FF; --rmd-purpsoft:#F3F4FF;
    --rmd-slight:#596980; --rmd-bord:#E9EAF2; --rmd-redder:#E4004D;
    /* --rmd-green aligné sur --rmd-win le 06/08 : la page mélangeait deux
       verts (#22C55E hero/défi vs #16B364 partout ailleurs). Un seul vert
       « résultat » désormais. */
    --rmd-orng:#FA9329; --rmd-nuk:#F9FAFB; --rmd-win:#16B364; --rmd-green:#16B364;
    --rmd-shadow-card:-4px 0 10px 0 rgba(0,0,0,.02), 4px 0 10px 0 rgba(0,0,0,.02), 0 4px 10px 0 rgba(0,0,0,.02);
    --rmd-maxw:1200px;
    /* ── LE BORD QUI COULE ────────────────────────────────────────────────────
       Découpe du bas du panneau de chiffres du hero (.rmd-cs__cardin, plus bas,
       où l'effet est expliqué en entier). Sorti ici en variable parce que la
       règle qui l'utilise doit l'écrire DEUX FOIS, une fois pour
       -webkit-mask-image et une fois pour mask-image : une seule définition,
       donc aucun risque que les deux copies divergent.

       Repère de lecture : boîte de 560x34. Plein jusqu'à y=11 (« ligne de
       fonte »), puis six gouttes qui descendent à 26, 17, 34, 18, 23 et 16 —
       longueurs volontairement inégales, une goutte régulière ferait feston de
       napperon, pas matière fondue. 44px de plat à gauche et 16px à droite pour
       que les angles arrondis restent nets.
       ⚠ Ne pas remplacer les '%23' par '#' : dans une data-URI le '#' ouvre une
       ancre et tout ce qui suit est ignoré — le masque ne charge plus et le
       panneau disparaît d'un coup.
       ⚠ preserveAspectRatio='none' : le SVG doit s'étirer à la largeur de la
       carte, sinon les gouttes décollent du bas. */
    --rmd-drip:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 560 34' preserveAspectRatio='none'%3E%3Cpath d='M0 11 L44 11 C56 11 62 26 78 26 C94 26 100 11 112 11 L148 11 C158 11 164 17 174 17 C184 17 190 11 200 11 L236 11 C250 11 254 34 270 34 C286 34 292 11 304 11 L338 11 C348 11 352 18 362 18 C372 18 376 11 386 11 L420 11 C432 11 438 23 452 23 C466 23 472 11 484 11 L496 11 C506 11 510 16 520 16 C530 16 534 11 544 11 L560 11 L560 0 L0 0 Z' fill='%23000'/%3E%3C/svg%3E");
    font-family:'Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
    color:var(--rmd-ink); line-height:var(--rmd-lh-body); text-align:left; -webkit-font-smoothing:antialiased;
  }
  .rmd-ty *{box-sizing:border-box;}
  .rmd-ty h1,.rmd-ty h2,.rmd-ty h3,.rmd-ty p,.rmd-ty ul,.rmd-ty li,.rmd-ty dl,.rmd-ty dt,.rmd-ty dd{margin:0;padding:0;}
  .rmd-ty ul{list-style:none;}
  .rmd-ty img,.rmd-ty svg{display:block;max-width:100%;}
  .rmd-ty strong{font-weight:600;color:var(--rmd-ink);}

  /* Remise a zero UNIQUE, et placee AVANT tout composant. Chaque section
     apportait la sienne, un peu plus longue, plus bas dans la feuille :
     :where() vaut 0, donc .rmd-cs__photo{margin-left:auto} faisait match nul
     avec .rmd-ty :where(...figure){margin:0} et perdait sur l'ordre — la photo
     du hero cessait d'etre calee a droite et le cadre degrade restait seul. */
  .rmd-ty :where(h2,h3,p,ul,li,dl,dt,dd,figure,fieldset,legend){margin:0;padding:0;}
  .rmd-ty :where(fieldset,legend){border:0;}

  .rmd-grad-a{background-image:linear-gradient(155deg,#3943FF 58%,#E4004D 85%,#FA9329 100%);-webkit-background-clip:text;background-clip:text;color:transparent;}

  .rmd-pill{display:inline-flex;align-items:center;gap:16px;border:1px solid var(--rmd-bord);background:#fff;border-radius:999px;padding:10px 10px 10px 24px;box-shadow:var(--rmd-shadow-card);}
  .rmd-pill__t{font-size:14px;font-weight:500;letter-spacing:-.01em;color:var(--rmd-purp);white-space:nowrap;}
  /* Sous 560px la pastille du hero (372px en nowrap) est plus large que la
     colonne : elle doit se replier au lieu d'être rognée. Règle PARTAGÉE —
     toutes les pastilles courtes (« Le défi », « Résultats »…) tiennent sur
     une ligne et ne changent pas de forme.
     12,5px et non 14 (10/08, demande Ayoub) : repliée sur deux lignes à 14px,
     la pastille pesait autant que le corps de texte (16px) et se lisait comme
     le début du contenu. C'est une étiquette — elle doit redevenir plus
     petite que TOUT le texte courant. Padding et gap suivent. */
  @media(max-width:560px){
    .rmd-pill{max-width:100%;padding:8px 8px 8px 18px;gap:12px;}
    .rmd-pill__t{white-space:normal;font-size:12.5px;line-height:var(--rmd-lh-title);}
  }
  .rmd-pill__arrow{width:32px;height:20px;flex:none;}

  .rmd-lead{font-size:clamp(16px,2vw,17px);line-height:var(--rmd-lh-body);color:var(--rmd-slight);max-width:520px;}
  .rmd-chips{display:flex;flex-wrap:wrap;gap:8px 20px;font-size:14px;color:var(--rmd-slight);}
  .rmd-chip{display:inline-flex;align-items:center;gap:6px;}
  .rmd-chip svg{width:15px;height:15px;color:var(--rmd-green);flex:none;}

  /* ── Coque ─────────────────────────────────────────────────────────────── */
  .rmd-cs{position:relative;overflow:hidden;background:#fff;}
  /* opacity .9 → .5 le 10/08 : voir .rmd-p1__bg, les quatre couches de fond
     de la page sont réglées ensemble. */
  .rmd-cs__bg{position:absolute;inset:0;width:100%;height:100%;opacity:.5;pointer-events:none;}
  /* 10/08 (demande Ayoub) : plus d'air au dessus et en dessous du hero.
     40/56 → 56/72 ici, 52/76 → 76/104 en desktop. En padding et non en
     margin : le blanc de la coque doit courir jusqu'au header et au bandeau
     clients — une margin aurait laissé le fond de la page apparaître. */
  /* ── minmax(0,1fr), PAS 1fr (10/08, mesuré au rendu) ─────────────────────
     Une piste 1fr ne descend jamais sous le min-content de ses enfants, et la
     pastille « SEO · Étude de cas · Mode et e-commerce » (nowrap) en impose
     372px. Sur un écran de 390px la piste passait donc à 372 dans une boîte
     de 342 : TOUTE la colonne (pastille, CTA, capture SERP) sortait de 30px
     à droite, rognée par l'overflow:hidden de la coque — c'était ça, le bord
     coupé sur mobile. minmax(0,1fr) autorise la piste à rétrécir ; la
     pastille et le CTA gèrent alors leur propre retour à la ligne (voir
     leurs règles). */
  .rmd-cs__inner{position:relative;max-width:var(--rmd-maxw);margin:0 auto;padding:56px 24px 72px;
                 display:grid;grid-template-columns:minmax(0,1fr);gap:48px;}

  /* Le paragraphe centré sous les colonnes (.rmd-cs__below) est retiré le
     06/08 : il cassait la lecture du hero. À la place, la colonne de gauche
     enchaîne titre → CTA → chips de provenance. Le CTA reprend trait pour
     trait le bouton de l'en-tête (dégradé, rayon 8, reflet ctaShine — les
     keyframes sont déclarées dans le bloc en-tête, la portée est globale). */
  /* Accroche au-dessus du CTA : courte, encre, un cran plus grasse que le
     chapo - elle adresse le visiteur juste avant le bouton. */
  /* La colonne espace tout de 22px (gap) : l'accroche flottait a egale
     distance du chapo et du bouton, elle ne se rattachait a rien. Les
     marges la COLLENT au bouton : 22+8 = 30px au-dessus, 22-14 = 8px
     en dessous - une etiquette et son action, comme dans la preuve. */
  .rmd-cs__left .rmd-cs__hook{font-size:17px;font-weight:600;color:var(--rmd-ink);margin:8px 0 -14px;}
  .rmd-cs__cta{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:10px;
               margin-top:6px;border-radius:8px;padding:14px 28px;font-size:15px;line-height:20px;
               font-weight:500;color:#fff;text-decoration:none;white-space:nowrap;
               background-image:linear-gradient(90deg,#D7045A 50%,#FC8831 100%);
               box-shadow:var(--rmd-shadow-card, -4px 0 10px 0 rgba(0,0,0,.02), 4px 0 10px 0 rgba(0,0,0,.02), 0 4px 10px 0 rgba(0,0,0,.02));transition:opacity .15s ease;}
  .rmd-cs__cta:hover{opacity:.95;}
  .rmd-cs__cta::before{content:'';position:absolute;top:0;left:-75%;width:50%;height:100%;
                       background:linear-gradient(120deg,transparent,rgba(255,255,255,.45),transparent);
                       transform:skewX(-20deg);animation:ctaShine 3s ease-in-out infinite;}
  @media(min-width:1024px){
    /* Le bloc de titre se cale au milieu de la hauteur du collage, comme dans
    la référence. Il ne contient plus que la pilule, le client et le titre :
    le paragraphe est passé dessous, centré. */
    /* V5 : la colonne de droite prend la main (le collage était trop petit) et
       la gouttière se resserre pour lui rendre de la place. */
    /* 07/08 : stretch au lieu de center. La tuile photo doit monter jusqu'au
       niveau de la pilule « Étude de cas · Référencement Google » — donc la
       colonne de droite prend TOUTE la hauteur de la rangée, et la photo la
       remplit de haut en bas. La carte, elle, reste centrée dedans (le flex
       ci-dessous), ce qui crée un débord haut/bas bien plus généreux qu'un
       margin fixe et qui s'adapte tout seul à la longueur du titre. */
    /* 07/08 : gouttière à 64 px — le titre collait au bloc carte+photo.
       Retour à align-items:center : en « stretch » le bloc prenait toute la
       hauteur du titre (~600 px) et montait trop haut. Le collage retrouve une
       hauteur propre, calée sur la carte (voir min-height plus bas). */
    /* 10/08 : colonnes rééquilibrées. Le titre est passé d'un nombre court à
       une phrase de deux lignes — il lui faut de la largeur, sinon « Puis la
       première place. » déborde. */
    /* 10/08 (soir) : align-items center → start. Depuis que le logo a quitté
       la colonne gauche, celle-ci est ~110px plus courte que la droite ; le
       centrage remontait donc la capture bien AU-DESSUS de la pastille
       d'accroche, et les deux colonnes ne commençaient plus au même endroit.
       En `start`, le haut du cadre tombe pile sur le haut de « SEO · Étude de
       cas · Mode et e-commerce ». La colonne droite descend plus bas que la
       gauche — c'est voulu, c'est elle qui porte le contenu le plus long. */
    /* gap 64 → 96 le 10/08 (demande Ayoub) : à 64px le texte et le collage
       se touchaient presque, les deux colonnes respiraient mal. 96px reste
       sous la gouttière de 1fr : la colonne texte perd ~16px, pas une ligne. */
    /* minmax pour la même raison que la règle de base : qu'aucun nowrap ne
       puisse re-gonfler une piste. */
    .rmd-cs__inner{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:96px;align-items:start;padding:76px 24px 104px;}
  }

  /* ── Colonne gauche ────────────────────────────────────────────────────── */
  .rmd-cs__left{display:flex;flex-direction:column;align-items:flex-start;gap:22px;}
  /* .rmd-cs__client (pastille + « MARINER UNDERWEAR » en petites capitales)
     retiré le 10/08 : le vrai logo le remplace. Il a d'abord été posé ici, en
     haut de la colonne gauche, puis déplacé en tête du panneau de chiffres —
     styles avec le panneau, plus bas (.rmd-cs__cardlogo). */

  /* Le résultat EST le titre. Deux graisses, comme la référence : le chiffre
     lourd, la phrase qui l'explique en 300. Interlignage serré pour que les
     deux lignes se lisent comme un seul bloc. */
  /* 37/4.9vw/64 (au lieu de 34/4.5/58) : remonté d'un cran le 06/08 à la
     demande d'Ayoub. Le nowrap du chiffre tient toujours : « +60 413 visites »
     fait ~465px à 64px, la colonne en fait ~575. */
  /* 10/08 : le titre est devenu une phrase (« Page 5 de Google. Puis la
     première place. ») et non plus un nombre — donc plus petit, interligne
     resserré, et SURTOUT plus de nowrap : il doit pouvoir passer à la ligne. */
  .rmd-cs__h1{margin:0;font-weight:600;font-size:clamp(32px,4vw,48px);line-height:1.06;
              letter-spacing:-.04em;color:var(--rmd-ink);text-wrap:balance;}
  /* > b : uniquement l'enfant direct. Sans le chevron, la règle attrapait
     aussi le <b> à l'intérieur du <small> et le passait en bloc. */
  .rmd-cs__h1 > b{display:block;font-weight:600;}

  /* 10/08 — le titre porte le avant → après en couleur, exactement comme la
     carte de preuve juste à côté (page 5 gris → n° 1 dégradé). Le lecteur voit
     le mouvement avant même d'avoir lu la phrase.
     « Page 5 » en gris = le point de départ, il ne doit pas peser.
     « première place » prend le dégradé de .rmd-grad-b, la même encre que
     « leur visibilité » et que les chiffres de la carte. */
  .rmd-cs__was{color:var(--rmd-slight);}
  /* 12/08 — le volume reprend le GRIS de .rmd-cs__was, celui que portait
     « Page 5 » dans le tout premier titre (choix d'Ayoub, le violet essayé
     entre-temps a été écarté).
     Ce que ça donne, et c'est le bon réglage : un seul accent coloré dans le
     titre. Le gris pose le décor (le marché), le dégradé chaud marque ce qu'on
     y a pris. Deux couleurs vives auraient fait deux points d'entrée pour
     l'œil, donc aucun.
     Pas de nouvelle classe : .rmd-cs__was existe et porte exactement cette
     encre. Son nom parle d'un « avant » et sert ici à autre chose, mais mieux
     vaut ce léger décalage de nom qu'un second jeton pour la même valeur. */
  /* Repli solide d'abord : le texte en dégradé repose sur background-clip:text,
     et sans support le titre deviendrait transparent, donc invisible. Ici,
     contrairement au reste de la page, c'est le H1 — on ne prend pas le risque. */
  .rmd-cs__now{color:var(--rmd-redder);}
  /* Le dégradé s'arrête à #F2622F et non à #FA9329 : sur blanc, l'orange de la
     charte ne tient que 2,27:1 — sous le seuil de 3:1 des grands textes. Sur
     « 4,04 M » (7 signes) ça passait inaperçu ; sur « première place. » les
     dernières lettres tombaient en plein dedans. Même famille, même effet,
     mais lisible : #F2622F tient 3,20:1. */
  @supports ((-webkit-background-clip:text) or (background-clip:text)){
    .rmd-cs__now{background-image:var(--rmd-grad-warm);
                 -webkit-background-clip:text;background-clip:text;color:transparent;}
  }
  /* Le + est légèrement plus petit et remonté : à taille égale il pèse autant
     que les chiffres et on lit « + 60 413 » en trois blocs au lieu d'un. */
  .rmd-cs__plus{font-size:.62em;font-weight:600;vertical-align:.22em;margin-right:.04em;
                color:var(--rmd-redder);letter-spacing:0;}
  .rmd-cs__h1 small{display:block;margin-top:16px;font-size:clamp(17px,1.9vw,21px);font-weight:300;
                    line-height:var(--rmd-lh-body);letter-spacing:-.005em;color:var(--rmd-slight);max-width:34em;}
  .rmd-cs__h1 small b{display:inline;white-space:normal;font-weight:500;color:var(--rmd-ink);}

  /* Bouton + sa micro-ligne forment un seul bloc : sans ce conteneur, la
     colonne (gap 22 px) les séparait comme deux éléments sans rapport. */
  .rmd-cs__ctawrap{display:flex;flex-direction:column;align-items:flex-start;gap:10px;}
  /* Coche verte reprise des anciennes pastilles : même icône, même taille,
     même --rmd-green, pour que la réassurance garde le signal visuel qu'elle
     avait avant. */
  .rmd-cs__ctanote{display:flex;flex-wrap:wrap;align-items:center;gap:6px 20px;margin:0;
                   font-size:13px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);}
  .rmd-cs__ctanote span{display:inline-flex;align-items:center;gap:7px;}
  .rmd-cs__ctanote svg{width:15px;height:15px;color:var(--rmd-green);flex:none;}

  /* ── Carte sombre ──────────────────────────────────────────────────────── */
  .rmd-cs__right{position:relative;}
  /* 10/08 : grille « chiffres | photo ». align-items:center cale les chiffres
     au milieu de la hauteur de la tuile. */
  /* Écart resserré (28→20→12, 26→18→10) : les chiffres sont la LÉGENDE de la
     capture, pas un bloc indépendant. Trop d'air entre les deux et ils se
     lisent comme deux sections empilées.
     Plancher à ~10px : en dessous, les deux rayons de 20px se touchent presque
     et l'intervalle se lit comme un défaut d'alignement, pas comme un écart. */
  .rmd-cs__collage{position:relative;display:grid;grid-template-columns:1fr;gap:12px;}
  @media(min-width:1024px){
    /* 10/08 : plus de côte-à-côte. La colonne de droite ne fait que ~570 px ;
       y loger une carte ET une photo donnait deux éléments de 265 px, tous les
       deux trop petits. Empilés, chacun prend les 570 px : image large en haut,
       bandeau de preuve dessous. */
    .rmd-cs__collage{grid-template-columns:1fr;gap:10px;align-items:stretch;}
  }

  /* Tuile capture : elle dépasse derrière la carte, comme la photo de la
     référence. object-position:top pour garder le haut du résultat Google,
     c'est la seule partie qui prouve quelque chose. */
  /* La photo de marque, calée à droite. Portrait, donc elle donne sa hauteur
     au collage ; la carte viendra mordre son coin bas-gauche. */
  /* 4/3 et pas 4/5 : la source fait 632×802, soit presque exactement 4/5, donc
     un cadre 4/5 ne recadrait rien et « AU RYTHME DES VACANCES » restait en bas,
     coupé en deux par la carte. Un cadre plus large sort ce texte du champ et
     garde le sujet. */
  /* Cadre en dégradé décalé DERRIÈRE la photo : le même filet que la carte,
     posé en biais. C'est ce qui donne l'effet collage de la référence sans
     casser la géométrie arrondie du système. */
  /* ═══ V5 (07/08) — collage « carte à gauche, tuile photo à droite » ═══
     La photo devient une tuile PORTRAIT posée à droite, qui déborde au-dessus
     et au-dessous de la carte et mord son coin droit. Deux conséquences
     voulues, à l'inverse de la v3 :
       — le cadrage redescend au centre : dans ce format haut, « AU RYTHME DES
         VACANCES » tient entièrement dans l'image, il n'est plus coupé ;
       — le cadre en dégradé décalé disparaît (il doublait le contour de la
         tuile et salissait la superposition). */
  .rmd-cs__frame{display:none;}

  /* ═══ 10/08 — le panneau gris est supprimé ═══
     Plus de carte : les deux chiffres sont posés en typographie sur la page,
     à côté de la photo. Le collage devient une grille à deux colonnes, donc
     plus aucun recouvrement à calculer — c'est ce chevauchement, et ses
     paddings en pourcentage, qui rendaient le bloc bancal.
     La tuile garde le ratio EXACT de la source (632/802) : aucun recadrage. */
  /* ═══ 10/08 — LA PREUVE COMME VISUEL DE HERO ═══
     Fenêtre blanche encadrée : barre de recherche Google en haut, résultat n° 1
     dessous, légende en pied. Aucun effet — c'est une capture, elle doit avoir
     l'air d'une capture, sinon elle ne prouve plus rien. */
  /* 10/08 (soir) — DEUX AJOUTS pour que la capture accroche l'œil :
     un liseré en dégradé et une flèche tracée à la main qui la désigne.
     Les deux prennent la MÊME encre que les chiffres de la carte
     (linear-gradient 148deg #E4004D → #FA9329) : c'est UN geste graphique de
     plus, pas deux. Aucune couleur nouvelle. */
  .rmd-cs__proof{position:relative;order:1;padding-top:74px;}

  /* Pastille de marché : en ABSOLU dans la bande vide au-dessus du cadre,
     jamais dans le flux. Le cadre est calé pour que son haut tombe
     exactement sur le haut du H1 (note du 10/08) ; une pastille dans le
     flux l’aurait poussé de ~50px et aurait cassé ce calage.
     À DROITE : la gauche de cette bande porte déjà la note et la flèche.
     ⚠ Préfixée .rmd-ty, sinon la remise à zero « .rmd-ty p{margin:0} »
     (0,1,1) bat une règle à une seule classe. Même piège que le
     max-width des logos du bandeau clients. */
  .rmd-ty .rmd-cs__mkt{position:absolute;z-index:2;right:0;top:14px;margin:0;}
  /* Pastille DESHABILLEE dans le hero (11/08, demande Ayoub) : fond blanc,
     bordure et ombre retires, il ne reste que le drapeau et le mot. Dans la
     section Preuve la pastille est POSEE SUR la scene grise, elle a besoin
     de son fond pour s’en detacher ; ici elle flotte sur le blanc du hero,
     ou ce fond ne separait rien et ajoutait une boite de plus a cote du
     cadre. L’override est porte par .rmd-cs__mkt : la pastille de la Preuve
     n’est pas touchee.
     Le mot « France » RESTE : la legende de la carte ne le dit plus, et un
     drapeau seul est decoratif - il ne se lit pas dans un lecteur d’ecran
     (le svg est aria-hidden). */
  .rmd-ty .rmd-cs__mkt .mkt{background:none;border:0;box-shadow:none;padding:0;}

  /* Flèche manuscrite, purement décorative (aria-hidden). Elle déborde
     volontairement au-dessus de sa bande : posée à la main, pas centrée dans
     une case. La pointe s'arrête ~6 px AU-DESSUS du cadre — une annotation
     désigne, elle ne griffonne pas sur la preuve. */
  .rmd-cs__doodle{position:absolute;z-index:2;top:0;left:-6px;width:92px;height:auto;
                  color:var(--rmd-redder);transform:rotate(32deg);
                  transform-origin:50% 50%;pointer-events:none;}

  /* Note « Vrai client. Vraie capture. » — posée juste au-dessus de la flèche,
     dans la même encre. width:max-content pour qu'elle ne se coupe jamais en
     deux lignes : sur une note manuscrite, un retour à la ligne subi se voit.
     Position par défaut = à droite de la flèche dans la bande au-dessus du
     cadre (disposition mobile / tablette). */
  .rmd-cs__real{position:absolute;z-index:2;top:0;left:76px;margin:0;width:max-content;
                font-size:13px;font-weight:500;line-height:var(--rmd-lh-title);color:var(--rmd-redder);}

  /* ≥1024 px : la flèche RELIE le titre à la capture. Elle occupe la réserve
     vide en haut — à droite de la pastille d'accroche, au-dessus du titre —
     et descend en diagonale jusqu'au bord gauche du cadre, à hauteur du
     résultat n° 1.
     C'est le SEUL couloir vraiment libre du hero : partout ailleurs elle
     croise du texte. Première tentative (queue collée au titre, pointe dans
     le cadre) : elle touchait « place. » et se lisait comme une rature.
     Angle : aucune rotation. Le tracé descend naturellement à 28,5°, et la
     diagonale réserve-vide → cadre fait 27,6°. Il n'y a rien à tourner, juste
     à mettre à l'échelle — d'où transform:none.
     Ancrée sur le CADRE et pas sur le titre : c'est la pointe qui doit tomber
     juste, la queue peut flotter.
     Taille : 180 px d'abord, ramenés à 112. Une flèche dessinée à la main est
     un ACCENT — passé une certaine longueur elle devient un objet du hero et
     capte l'œil avant le titre. La pointe ne bouge pas (c'est elle qui doit
     tomber juste) : c'est la queue qui se rapproche du cadre.
     stroke-width en unités du viewBox, donc mis à l'échelle avec la largeur —
     4.0 à 112 px de large ≈ 3,3 px à l'écran, un trait de stylo. */
  /* 10/08 (soir) — la capture descend de 64px.
     64 = hauteur de la pastille d'accroche (43px) + la gouttière de la colonne
     gauche (22px), à l'unité près : le haut du cadre tombe donc exactement sur
     le haut du H1. Alignée sur la pastille elle « flottait » encore en haut —
     une pastille est un petit jeton, un cadre de 250px pèse bien plus lourd à
     l'œil et paraît démarrer plus haut à hauteur égale.
     La flèche est REMONTÉE d'autant (34 → -30) : elle est ancrée au cadre,
     donc sans ça elle descendait avec lui et retombait en travers du titre,
     alors qu'elle doit rester dans la réserve vide au-dessus. Sa pointe vise
     désormais le coin haut-gauche de la capture — ce que montrait le croquis. */
  /* 10/08 (soir, 5) — NOTE ET FLÈCHE REGROUPÉES, FLÈCHE COURTE ET VERTICALE.
     Avant : note en haut à gauche, longue flèche en diagonale finissant au coin
     du cadre. Les mots étaient à ~120px de leur sujet, et « ça » ne veut rien
     dire tant que l'œil n'est pas arrivé sur la pastille. D'où l'impression de
     flou.

     Contrainte dure : la pastille « 1 » est 118px SOUS le haut du cadre. Aucune
     flèche partant de l'extérieur ne peut l'atteindre sans traverser toute la
     barre de recherche — c'est ça qui l'obligeait à être longue. Elle vise donc
     maintenant la COLONNE de la pastille, pointe à 8px au-dessus du cadre, à
     x=26 (la pastille occupe 18→44). L'œil descend la gouttière tout seul.

     La note passe juste à gauche de la flèche, à hauteur de la pastille
     d'accroche, à 9px du tracé : les deux se lisent enfin comme un seul geste.
     stroke-width remonté à 5.6 parce qu'il suit l'échelle du viewBox — à 68px
     de large, les 4.2 d'origine ne donnaient plus que 2,1px à l'écran. */
  @media(min-width:1024px){
    .rmd-cs__proof{padding-top:0;margin-top:64px;}
    /* ≥1024 : plus de bande de padding, la pastille remonte au-dessus du
       cadre. -48 = sa hauteur (32) + 16 de respiration. */
    .rmd-ty .rmd-cs__mkt{top:-48px;}
    /* 11/08 (3e passe) : la flèche descend sur la pastille « 1 », la note
       se pose sur son départ, et le tracé ne touche plus le cadre.
       Historique, pour ne pas refaire le tour : elle a d’abord visé le
       coin du cadre (on croyait qu’elle montrait Google), puis elle a été
       posée à l’horizontale à côté de la note (elle se lisait comme un
       ornement), puis redressée mais collant le bord du cadre.

       ⚠ NE PAS CALER CETTE FLÈCHE SUR SA BOÎTE. Une boîte tournée est
       bien plus large que son encre : à 40° le svg fait 124×89 alors que
       le tracé n’occupe que 52px de large dedans. C’est ce qui faisait
       croire que la flèche tenait alors qu’elle mordait le cadre.
       Le calage vient d’un échantillonnage du TRACÉ : getPointAtLength sur
       les deux chemins, ramené à l’écran par getScreenCTM (rotation
       comprise). Résultat, en repère .rmd-cs__proof :
           rotate(40deg) width:124px top:37px left:-96px
           pointe (-8, 132) · queue (-53, 16) · encre x-60..-8 y16..135
       Un tracé de 52×119 : haut et étroit, entièrement dans le couloir
       libre (-96..0), pas un pixel sur le cadre. La pastille est à
       x 18..44 : la pointe s’arrête 26px avant et la désigne sans entrer.
       ⚠ Les quatre valeurs vont ENSEMBLE et se recalculent. */
    .rmd-cs__doodle{top:37px;left:-96px;width:124px;transform:rotate(40deg);}
    .rmd-cs__doodle path{stroke-width:4;}
    /* 10/08 : note descendue de -52 à -45. Le blanc entre le bas du texte et le
       départ du tracé passe de ~12px à ~5 : au-delà, la flèche se lit comme un
       élément séparé posé à côté, au lieu de partir de la phrase.
       C'est la NOTE qui bouge, pas la flèche : déplacer la flèche déplacerait
       aussi sa pointe, donc ce qu'elle désigne.
       Le calage à gauche est conservé (-112 pour la note, queue du tracé à
       -109) : les deux partent du même bord, c'est ce qui les relie. */
    /* CENTRÉE sur la queue du tracé (x=-53) et posée au-dessus : c’est la
       seule façon de mettre les deux sur le même axe, et sans ça les mots
       flottaient à 90px de leur flèche. width fixe + text-align:center
       font ce centrage sans connaître la longueur de la phrase.
       Elle dépasse de 7px à droite du bord gauche du cadre, mais à
       y -24..-6, donc AU-DESSUS de lui (le cadre commence à y=0). */
    .rmd-cs__real{top:-24px;left:-153px;width:200px;text-align:center;}
  }

  /* Liseré : le dégradé est le FOND de la figure, la face blanche est posée
     dessus avec 2 px de rayon en moins. Même technique que .rmd-card:hover
     dans index-EN.html — un border-image ne se coupe pas proprement sur un
     rayon de 20 px, ceci si. */
  .rmd-cs__serp{position:relative;margin:0;padding:2px;border:0;border-radius:20px;
                background-image:linear-gradient(148deg,#E4004D 0%,#EE453C 50%,#FA9329 100%);
                box-shadow:0 24px 56px -34px rgba(4,17,53,.34);}
  .rmd-cs__serpface{background:#fff;border-radius:18px;overflow:hidden;}
  .rmd-cs__serphead{padding:14px 18px;border-bottom:1px solid var(--rmd-bord);}
  .rmd-cs__serphead img{display:block;width:100%;height:auto;}
  /* Le résultat est décalé à gauche pour laisser la place à la pastille de rang. */
  .rmd-cs__serpres{position:relative;padding:18px 18px 16px 54px;}
  .rmd-cs__serpres img{display:block;width:100%;height:auto;}
  /* Cadre vert sur le résultat gagnant (11/08, demande Ayoub) : le même
     signal que la pastille, donc le même jeton --rmd-win. En CSS et non
     peint dans le PNG - la capture doit rester une capture, et un cadre
     dessiné dedans se pixelise dès qu’elle change d’échelle (elle est
     recadrée en bande sur mobile).
     Sur l’IMAGE et pas sur .rmd-cs__serpres : le bloc contient la
     gouttière de 54px de la pastille, le cadre aurait enfermé le numéro
     avec le résultat.
     box-sizing:border-box, sinon width:100% + padding + bordure font
     déborder l’image de 20px hors de sa colonne. */
  .rmd-cs__serpres:not(.rmd-cs__serpres--lose) img{box-sizing:border-box;padding:8px;
                background:#fff;border:2px solid var(--rmd-win);border-radius:10px;}
  /* Le deuxième résultat (11/08) : estompé, pas supprimé - c’est sa
     présence qui donne sa valeur à la première place. Valeurs reprises
     telles quelles de .r--lose dans la section Preuve : une seule façon
     d’estomper un perdant dans la page.
     padding-top:2px et aucun filet : Google ne trace pas de ligne entre
     ses résultats. L’écart vient du retrait bas du premier bloc (16px). */
  .rmd-cs__serpres--lose{padding-top:2px;opacity:.4;filter:grayscale(1);}
  /* ── Capture cliquable (11/08) ────────────────────────────────────────────
     La capture du hero est un RECADRAGE : sur mobile elle est coupée à droite
     (voir le zoom-recadrage plus bas), et même sur bureau elle ne montre que
     le premier résultat. Le lecteur qui veut vérifier n'avait pour seule
     porte que la section Preuve, à deux écrans de là. Elle ouvre donc la
     MÊME visionneuse (#lb) que les captures de la Preuve, sur le MÊME
     fichier — pas une deuxième lightbox : il y en a déjà deux dans la page
     (#lb, #p2lb) et leur cohabitation a coûté un renommage complet.
     Le lien enveloppe la barre + le résultat, PAS la légende : la légende
     est du texte, pas la preuve, et elle reste sélectionnable.
     display:block et non inline-flex — les deux enfants sont des blocs et
     doivent garder leur flux (filet, retraits, pastille absolue). */
  .rmd-cs__shot{position:relative;display:block;color:inherit;text-decoration:none;
                cursor:zoom-in;}
  /* Calqué sur .r__go de la section Preuve : même pastille, même apparition.
     Le hero est la première chose vue — si les deux se comportaient
     différemment, le lecteur apprendrait deux fois la même chose. */
  .rmd-cs__go{position:absolute;right:10px;bottom:10px;display:inline-flex;align-items:center;
              gap:6px;font-size:11.5px;font-weight:500;color:#fff;background:rgba(4,17,53,.86);
              border-radius:9999px;padding:6px 11px;opacity:0;transform:translateY(4px);
              transition:opacity .22s ease,transform .22s ease;pointer-events:none;}
  .rmd-cs__shot:hover .rmd-cs__go,.rmd-cs__shot:focus-visible .rmd-cs__go{opacity:1;transform:none;}
  .rmd-cs__shot:focus-visible{outline:2px solid var(--rmd-purp);outline-offset:3px;}
  /* Au doigt il n'y a pas de survol : la pastille resterait invisible et rien
     n'indiquerait que la capture s'ouvre — or c'est justement là qu'elle est
     recadrée et qu'on a le plus besoin de l'agrandir. */
  @media (hover:none){
    .rmd-cs__go{opacity:1;transform:none;}
  }
  @media (prefers-reduced-motion:reduce){
    .rmd-cs__go{transition:none;}
  }
  /* Pastille de rang : bleu de marque → rouge → VERT, le 10/08.
     Le bleu se fondait dans le titre du résultat Google, lui-même bleu. Le vert
     règle ça et aligne le hero sur la section Preuve, dont la pastille du
     gagnant (.r__num) est déjà verte : même signal, même couleur, deux fois
     dans la page.
     ⚠ Blanc sur #16B364 = 2,74:1, sous le seuil AA. Acceptable ICI parce que la
     pastille est aria-hidden et que l'information « position 1 » est portée en
     clair par la légende dessous — jamais par ce seul chiffre. Ne pas réutiliser
     ce couple pour du texte qui porte du sens à lui seul.

     10/08 — CALAGE VERTICAL. Elle était à top:18px, soit exactement le retrait
     haut de .rmd-cs__serpres : elle se collait donc au bord supérieur du
     résultat, à hauteur du favicon, et paraissait décrochée vers le haut.
     Elle est maintenant centrée sur le bloc résultat (top:50% + translateY).
     Pourquoi centrer plutôt que la caler sur le titre : la pastille numérote
     le RÉSULTAT ENTIER (favicon + titre + description), pas sa première ligne.
     Le centre est aussi la seule valeur qui tienne aux deux tailles — sur
     mobile l'image passe en hauteur fixe (96px, recadrage object-fit) et un
     décalage en px calculé sur le bureau serait faux ici. */
  .rmd-cs__rank{position:absolute;left:16px;top:50%;transform:translateY(-50%);
                width:26px;height:26px;border-radius:50%;
                background:var(--rmd-green);color:#fff;display:grid;place-items:center;
                font-size:13px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;}
  /* ⚠ APRÈS .rmd-cs__rank, et pas avant : même spécificité (une classe),
     donc seule la position dans la feuille départage. Posée avant, elle
     perdait et la pastille restait VERTE - invisible à l’œil parce que le
     bloc est en grayscale(1), qui désature le vert en gris. Ça marchait
     par accident : sans le filtre, la deuxième place repassait au vert du
     gagnant. Valeurs identiques à .r--lose .r__num (section Preuve). */
  .rmd-cs__rank--lose{background:var(--rmd-bord);color:#98A2B3;}
  .rmd-cs__serpcap{padding:0 18px 15px 54px;font-size:11.5px;line-height:var(--rmd-lh-body);
                   color:var(--rmd-slight);}
  /* État d'erreur : le script remplace le contenu par du texte, donc le liseré
     dégradé doit repasser en blanc, sinon le message s'affiche sur le dégradé.
     `background:` (raccourci) écrase bien background-image. */
  .rmd-cs__serp.is-missing{display:flex;align-items:center;justify-content:center;
                           min-height:120px;padding:24px;background:#fff;
                           border:1px dashed var(--rmd-bord);box-shadow:none;
                           font-size:12px;color:#B9C0CC;}

  /* La trame quadrillée (.rmd-cs__mesh, coin haut-gauche de la photo) a été
     retirée le 06/08 à la demande d'Ayoub — c'est elle, et pas le cadre en
     dégradé, qui devait partir. */

  /* Carte : gros rayon, et un LISERÉ EN DÉGRADÉ obtenu par double fond —
     exactement la technique déjà utilisée par .rmd-card:hover dans
     index-EN.html. Un border-image ne se coupe pas proprement sur un rayon
     de 30 px, celle-ci si. */
  /* -68 px et pas -124 : avec la photo passée en 4/3 elle est bien plus courte,
     et l'ancien chevauchement n'en laissait plus qu'un bandeau. */
  /* Marge positive : la carte se pose SOUS la photo, elle ne la recouvre plus. */
  /* 07/08 : carte passée au clair. Sur le marine, le bleu de marque (#3943FF)
     ne tient que 3,01:1 — d'où l'orange par défaut. Sur blanc il monte à
     6,14:1, donc la carte peut enfin porter la couleur primaire. Le liseré
     dégradé 3 couleurs devient un filet simple : une seule couleur par carte. */
  /* 10/08 — CARTE DE PREUVE, version claire.
     Blanc, filet fin, ombre douce : elle se lit comme un document, pas comme
     une plaquette. Pas de dégradé de fond, pas de halo — la hiérarchie vient
     de la taille du chiffre et de l'espace, rien d'autre. */
  /* 10/08 (soir) — .rmd-cs__card et .rmd-cs__cardface SUPPRIMÉS.
     Deux cartes blanches empilées dans la même colonne, chacune avec son
     cadre / son rayon / son ombre : le regard s'arrêtait à la frontière au
     lieu de descendre. Les chiffres deviennent le PIED de la capture
     (.rmd-cs__cardin, plus bas) et il ne reste qu'un contour pour l'ensemble.
     La colonne de droite y gagne aussi ~36 px de hauteur. */

  /* 10/08 : la ligne de source (« Google Search Console · Semrush… ») est
     retirée du hero — trop d'informations à l'ouverture. Le sourcing reste
     porté par les sections de preuve plus bas dans la page. */

  /* Le bloc « lignes » (petite carte blanche au coin bas-gauche de la carte
     sombre) a été retiré le 06/08 à la demande d'Ayoub. */

  /* La carte fait maintenant toute la largeur de la colonne : les deux chiffres
     passent côte à côte, séparés par un filet vertical. Empilés, ils rendaient
     la carte deux fois trop haute pour la photo. */
  /* 10/08 (soir) : le bloc porte lui-même sa peau — .rmd-cs__card et
     .rmd-cs__cardface n'existent plus, deux div pour une seule surface.
     GRIS MAT, SANS OMBRE, et non plus blanc + ombre. C'est le correctif du
     heurt visuel : deux surfaces blanches ombrées empilées se lisaient comme
     deux objets rivaux et le regard s'arrêtait entre les deux. Ici la capture
     garde le blanc, le liseré et l'ombre — donc l'attention — et les chiffres
     se posent derrière, en retrait. Même rayon (20px) que le cadre pour que
     les deux restent visiblement de la même famille. */
  /* 10/08 (soir, 2) — HAUTEUR ET ALIGNEMENT.
     Le panneau faisait 153px sous une capture de 248 : une bande écrasée, sans
     rapport de proportion avec elle. Il monte à ~180px (≈ 72 % du cadre) par
     l'espace seul — aucun texte ajouté, le hero est déjà chargé.
     Le retrait gauche de 56px n'est pas décoratif : c'est EXACTEMENT là que
     commence la légende de la capture (2px de liseré + 54px de gouttière de
     pastille). Les deux blocs partagent donc la même verticale, et c'est ça
     qui empêche l'œil de buter en passant de l'un à l'autre. L'asymétrie
     gauche/droite est celle du cadre au-dessus, pas une erreur de calage. */
  /* 10/08 (soir, 3) — LOGO EN RAIL À GAUCHE, plus en bandeau de tête.
     Le panneau passe donc à trois colonnes : logo | chiffre | progression.
     Deux conséquences assumées :
       — le retrait de 56px qui alignait les chiffres sur la légende de la
         capture disparaît : c'est le logo qui occupe la gauche désormais.
       — le panneau redevient sur une seule rangée, donc ~167px au lieu de 226.

     10/08 (soir, 4) — LE FILET APRÈS LE LOGO EST AJOUTÉ.
     Il avait été écarté faute de place : un filet coûte son retrait + une
     gouttière, soit à peu près ce qu'il faut à « +60 413 » pour tenir à 48px.
     La place est reprise ailleurs plutôt que sur le chiffre — retraits du
     panneau 26→22, gouttières 24→20. Chaque colonne de chiffres garde 187px
     pour un besoin de ~174px. Réduire le KPI aurait été le mauvais échange :
     c'est lui que la section vend. */
  /* 10/08 (nuit) — BAS QUI COULE, « melting ».
     1re version = un simple fondu vers le blanc : ça ne coulait pas, ça
     s'effaçait. Refait avec une VRAIE découpe : le bas du panneau est un bord
     irrégulier, six gouttes de longueurs différentes qui pendent (la plus
     longue 23px, la plus courte 5px). C'est la forme qui fait le « melting »,
     pas la couleur.

     Trois choses travaillent ensemble, retirer l'une casse l'effet :

     1. LE MASQUE À DEUX CALQUES fait la découpe.
        calque 1 = un aplat qui couvre le panneau sauf ses 34 derniers px.
        calque 2 = le SVG des gouttes, étiré sur toute la largeur, collé en bas.
        Les deux calques s'additionnent (défaut de mask-composite), donc corps
        plein + bord qui dégouline. Le masque agit sur l'ÉLÉMENT, pas sur une
        couche : le fond, le contour ET les deux filets intérieurs sont
        découpés du même coup. Un cache blanc posé par-dessus, lui, aurait
        laissé les trois traits traverser les gouttes.
        ⚠ preserveAspectRatio='none' est obligatoire : sans lui le SVG garde son
        ratio et les gouttes ne touchent plus le bas sur une carte large.
        ⚠ le '#' d'une couleur doit s'écrire %23 dans une data-URI, sinon tout
        ce qui suit est lu comme une ancre et le masque ne charge pas.

     2. LA LIGNE DE FONTE est à 23px du bas (y=11 sur les 34 du SVG). C'est là
        que le panneau cesse d'être plein ; en dessous il n'y a plus que les
        gouttes. Le retrait bas de 52px laisse donc 29px de plein sous le texte,
        soit le retrait d'origine (30px) : le texte n'a pas bougé, seul le bord
        a changé. ⚠ 52 et 23 sont un couple — toucher au SVG = recalculer.

     3. LA CHALEUR est un calque de FOND (donc derrière le texte). Elle culmine
        en bas, c'est-à-dire exactement dans les gouttes : elles se lisent comme
        de la matière qui coule, pas comme un bord rogné. Dégradé repris de la
        charte (#E4004D → #EE453C → #FA9329), la MÊME encre que « +60 413 » et
        « n° 1 ».

     4. PLUS DE CARTE DU TOUT (10/08, demande Ayoub, en deux temps).
        1er temps, le contour : border:0 sur les quatre côtés.
        2e temps, ce qui restait — et c'était ça le vrai coupable : l'APLAT.
        Un fond gris plein, même à 1 % d'écart avec le blanc, reste un
        rectangle ; il gardait une arête franche en haut et sur les deux côtés,
        donc l'objet continuait de se lire comme une carte. Retirer le contour
        n'y changeait rien.
        Donc : background-color:transparent, et la chaleur passe d'un dégradé
        LINÉAIRE (une bande, forcément rectangulaire) à un dégradé RADIAL
        centré sous le bord bas (50% 114%). Une ellipse n'a pas d'arête : la
        couleur s'éteint toute seule vers le haut ET vers les côtés. Plus aucun
        bord droit nulle part — il ne reste à l'œil que les chiffres, les deux
        filets de séparation, et la coulée chaude qui goutte.
        ⚠ Réglage du radial : il doit être éteint (arrêt à 0) AVANT d'atteindre
        le haut du bloc, sinon l'arête du haut revient. Avec ry=86 % et le
        centre à 114 %, le haut est à 1,33 de rayon, donc bien au-delà du
        dernier arrêt (70 %). Changer la hauteur du bloc ne casse rien, ces
        valeurs sont relatives ; changer les arrêts, si.
        ⚠ C'est la COULEUR seule qui porte maintenant la forme des gouttes.
        Baisser les arrêts ne « calme » pas l'effet, ça l'efface. Pour plus de
        discrétion, raccourcir les gouttes dans le SVG — pas éclaircir.
        border-radius retiré : sans aplat il n'arrondissait plus rien, et le
        radial gère lui-même ses bords.
        --rmd-bord reste utilisé à l'intérieur (rail du logo, filet entre les
        deux chiffres) : séparer n'est pas encadrer.

     5. LA COULÉE EST CALÉE EN PX, PAS EN %, depuis le 10/08 (« Visites venues de
        Google » tombait dedans et devenait illisible). Le radial était dimensionné
        en pourcentage de la HAUTEUR du bloc : ry=86 % + centre à 114 % le faisaient
        commencer à ~54 % de la hauteur, donc en plein dans la ligne de texte, et
        le problème EMPIRAIT à chaque fois qu'on agrandissait un chiffre.
        Rayon vertical en px (78) + centre à calc(100% + 18px) : la coulée occupe
        désormais les 37 derniers px, un point fixe, quelle que soit la hauteur du
        bloc. Le retrait bas de 60px laisse donc ~23px de blanc franc sous le texte
        avant que la moindre couleur commence.
        ⚠ Règle à retenir : ce qui doit rester à distance d'un TEXTE se mesure en px.
        Un % se recalcule quand le bloc grandit, et le fait grandir avec lui.

     6. PLUS DE RETRAIT LATÉRAL (padding-x 22 → 0). Un retrait sert à décoller un
        contenu du bord de sa carte ; il n'y a plus de carte. Le bloc s'aligne donc
        maintenant sur le bord gauche de la capture au-dessus, ce qui est un calage
        visible, pas un décrochement de 22px sans raison. Les 44px récupérés vont
        aux chiffres et au logo, que la version précédente étranglait.

     Sans support de mask (navigateur très ancien) : bloc fermé, bande chaude,
     rien de cassé. */
  .rmd-cs__cardin{position:relative;order:2;display:grid;grid-template-columns:auto 1.2fr 1fr;
                  gap:0 18px;align-items:stretch;
                  padding:28px 0 60px;
                  background-color:transparent;
                  background-image:radial-gradient(88% 78px at 50% calc(100% + 18px),
                        rgba(250,147,41,.50)  0%,
                        rgba(238,69,60,.30)  36%,
                        rgba(228,0,77,.12)   55%,
                        rgba(228,0,77,0)     70%);
                  border:0;
                  -webkit-mask-image:linear-gradient(#000,#000),var(--rmd-drip);
                  -webkit-mask-size:100% calc(100% - 34px),100% 34px;
                  -webkit-mask-position:top left,bottom left;
                  -webkit-mask-repeat:no-repeat,no-repeat;
                          mask-image:linear-gradient(#000,#000),var(--rmd-drip);
                          mask-size:100% calc(100% - 34px),100% 34px;
                          mask-position:top left,bottom left;
                          mask-repeat:no-repeat,no-repeat;}
  /* Rail pleine hauteur (align-items:stretch sur le panneau), logo centré
     dedans : il se cale sur le milieu du bloc de chiffres, pas sur leur
     première ligne. Le filet est le MÊME que celui qui sépare les deux
     chiffres — une seule façon de séparer dans ce panneau. */
  .rmd-cs__cardlogo{display:flex;align-items:center;justify-content:center;
                    margin:0;padding:0 18px 0 0;
                    border-right:1px solid var(--rmd-bord);}
  /* 24 → 36 (10/08) → 44px (12/08, demande Ayoub).
     Le logo occupe un RAIL à gauche des deux chiffres : sa hauteur ne coûte
     rien, sa LARGEUR se prend sur eux. Le fichier fait 197×70, donc chaque
     pixel de hauteur coûte ~2,8px de large au rail.
     ⚠ Plafond MESURÉ sur la page rendue, pas estimé :
         36px → rail 120 · « 60 413 » sur une ligne · carte 294px
         44px → rail 143 · « 60 413 » sur une ligne · carte 294px
         48px → rail 154 · dernier palier sain
         52px → la pile « page 5 → n° 1 » passe à la ligne, carte 306px
     44 laisse quatre pixels de marge avant la rupture. 48 marcherait
     aujourd’hui mais ne laisserait plus rien : un chiffre d’une position de
     plus casserait la carte.
     ⚠ Valeur propre à CE fichier. Un logo plus carré (Kindy, 155×155) ne
     prendrait que 44px de large au rail — ne pas transposer d’un client à
     l’autre sans regarder son ratio. */
  .rmd-cs__logo{display:block;height:44px;width:auto;}
  .rmd-cs__row + .rmd-cs__row{border-left:1px solid var(--rmd-bord);padding-left:18px;}
  /* Hiérarchie : le KPI principal est nettement plus gros que la progression.
     Deux chiffres à la même taille = deux mesures ; tailles différentes = un
     chiffre et sa précision.
     48 → 52px le 10/08. Le plafond n'est pas esthétique, il est mesuré : la
     colonne fait ~217px (colonne droite du hero 553px, moins le rail du logo,
     les gouttières et le filet, réparti en 1,2fr). « +60 413 » occupe ~3,43 em
     — 5 chiffres à 0,6 em, l'espace insécable, le « + » réduit à 0,62 em, moins
     l'interlettrage négatif. À 52px ça fait ~178px, il reste 39px de marge.
     À 60px on serait à 206px : ça tiendrait encore, mais le chiffre dépasserait
     le h1 du hero (48px max) juste à côté, et la promesse passerait après la
     preuve. C'est ÇA la limite, pas la place. */
  .rmd-cs__row--lead .rmd-cs__val{font-size:clamp(40px,4.6vw,52px);}

  /* Deux colonnes alignées, comme la référence : les chiffres à gauche, ce
     qu'ils veulent dire à droite. Le libellé coiffe la ligne sur toute la
     largeur. Colonne de gauche à largeur fixe pour que « 4,04 M » et le bloc
     avant → après démarrent exactement au même endroit. */
  /* Colonne de valeurs à 126px et types réduits : la carte étant passée à 72 %
     de la colonne, l'ancienne grille à 160px ne laissait plus assez de place au
     texte et chaque description partait sur trois lignes. */
  /* V5 : colonne unique. La carte a perdu ~30 % de largeur au profit de la
     tuile photo ; la grille 118px + texte y partait sur trois lignes. */
  /* 10/08 (soir, 2) : 9→13px. Le panneau gagne en hauteur par la respiration
     interne plutôt que par du padding seul — sinon les trois lignes restent
     tassées au milieu d'un cadre devenu grand, ce qui se voit encore plus. */
  .rmd-cs__row{display:grid;grid-template-columns:1fr;gap:13px;align-items:start;}
  /* V5 : types remontés — la carte a gagné en surface, l'ancienne échelle y
     flottait. */
  /* Libellé en gris neutre : les chiffres portent maintenant le dégradé, un
     libellé bleu au-dessus aurait remis une 2e couleur dans la carte. */
  /* 11/08 — DURÉE : « 13 mois » ne doit plus apparaître nulle part sur la page
     (demande Ayoub). Partout remplacé par « quelques mois ». Quatre endroits,
     tous du texte visible :
       sous-titre du h1        « En 13 mois, sans publicité. »
       libellé de ce panneau   « Sur 13 mois »  →  « En quelques mois »
       libellé KPI de Preuve   « … en 13 mois »
       titre des Résultats     « … par le référencement naturel en 13 mois. »
     ⚠ Le libellé passe de 11 à 16 caractères, et il est en majuscules avec
     0,15em d'interlettrage : 101px → 147px. Il tient (colonne de 207px), mais
     c'est le libellé le plus long du panneau désormais. Un mot de plus ici et
     il passera à deux lignes, ce qui décalerait le chiffre en dessous.
     ⚠ Les autres durées de la page (8 mois, 90 jours, un an) appartiennent à
     d'AUTRES clients : elles ne sont pas concernées. */
  .rmd-cs__lbl{grid-column:1 / -1;font-size:11.5px;font-weight:500;letter-spacing:.15em;
               text-transform:uppercase;color:var(--rmd-slight);}
  /* 07/08 : chiffres en dégradé — exactement celui de .rmd-grad-b, le même que
     « leur visibilité » du bandeau clients. Repris trait pour trait (angle,
     arrêts, couleurs) pour que ce soit la MÊME encre, pas une variante. */
  .rmd-cs__val{font-size:clamp(38px,4.6vw,52px);font-weight:600;line-height:1;letter-spacing:-.035em;
               font-variant-numeric:tabular-nums;
               background-image:linear-gradient(148deg,#E4004D 0%,#EE453C 50%,#FA9329 100%);
               -webkit-background-clip:text;background-clip:text;color:transparent;}
  /* Descripteur court, calé optiquement sur le haut du chiffre.
     13,5 → 14,5px le 10/08. Il était donné comme illisible, mais la taille
     n'était PAS la cause principale : le texte est déjà en encre pleine (il est
     entièrement dans le <b> ci-dessous, qui force --rmd-ink), il était juste
     posé sur la coulée colorée. Le vrai correctif est le point 5 — la coulée
     descend. Le +1px vient en plus, pas à la place : c'est la LIGNE DU BAS du
     bloc, celle qui doit rester la plus nette.
     ⚠ La couleur déclarée ici ne se voit pas dans ce balisage-là. Si un jour un
     descripteur est écrit sans <b>, il sortira en gris --rmd-slight. */
  .rmd-cs__desc{font-size:14.5px;line-height:var(--rmd-lh-body);letter-spacing:.005em;color:var(--rmd-slight);padding-top:2px;}
  .rmd-cs__desc b{display:block;font-weight:500;letter-spacing:.03em;color:var(--rmd-ink);margin-bottom:4px;}

  /* ── Le marché, sous les deux chiffres (11/08, demande Ayoub) ─────────────
     Le panneau annonçait « +60 413 visites » et « page 5 → n° 1 » sans dire
     OÙ. Sur un site à quatre marchés (ma / fr-fr / en-us / en-ae), un visiteur
     peut lire ces chiffres comme un total mondial ; ce sont des mesures
     françaises. La capture le disait déjà (« … · France · position 1 ») mais
     seulement pour LA requête montrée, pas pour les deux chiffres.
     Posée en pied de panneau et non dans un libellé : elle porte sur les DEUX
     lignes à la fois. Dans un libellé (« EN QUELQUES MOIS · FRANCE ») il aurait
     fallu la répéter au-dessus de chaque chiffre, et « PROGRESSION · FRANCE »
     ne tenait pas sur une ligne dans une colonne de 1fr.
     (Le libellé disait « SUR 13 MOIS » jusqu'au 11/08 — voir la note sur la
     durée, plus bas dans ce même bloc.)
     grid-column:1/-1 — le panneau est une grille (rail du logo + deux
     colonnes) : sans ça la ligne se serait glissée dans la 1ʳᵉ colonne, celle
     du rail, large de ~101px. Elle vaut aussi sur mobile, où la grille tombe
     à une seule colonne.
     Le filet est le MÊME que celui qui sépare les deux chiffres (1px
     --rmd-bord) : une seule façon de séparer dans ce panneau. Il est ici
     horizontal parce que la ligne coiffe la largeur, pas une colonne.
     ⚠ Reste au-dessus des 34px du bas : c'est la zone rongée par le masque de
     la coulée (--rmd-drip). Le retrait bas de 60px du panneau lui laisse 26px
     de dégagement — descendre l'un ou l'autre ferait manger le texte. */
  /* ⚠ SÉLECTEUR À DEUX CLASSES, obligatoire : la remise à zéro
     « .rmd-ty h1,…,.rmd-ty p,… {margin:0} » vaut (0,1,1) et écrase un
     .rmd-cs__scope seul. Écrite en une classe, la règle passait mais PAS son
     margin-top : le filet remontait à ~6px sous « n° 1 » et le soulignait.
     C'est le même piège que le max-width des logos du bandeau clients.
     34px et non 26 : l'écart part du BAS DE LA RANGÉE, pas du dernier glyphe.
     Le retrait bas du panneau (60px) est fixe, donc l'ajout rallonge le
     panneau sans réduire le dégagement de la coulée. */
  .rmd-ty .rmd-cs__scope{grid-column:1 / -1;margin:34px 0 0;padding-top:16px;
                 border-top:1px solid var(--rmd-bord);
                 font-size:11.5px;line-height:var(--rmd-lh-body);
                 letter-spacing:.01em;color:var(--rmd-slight);}
  .rmd-cs__scope b{font-weight:600;color:var(--rmd-ink);}

  /* Avant → après empilé, la flèche sur sa propre ligne : c'est ce qui fait
     lire les deux chiffres comme un mouvement et pas comme deux mesures. */
  /* 10/08 : écart 4→10px. Avec la marge de la flèche (3px), il reste 13px de
     part et d'autre au lieu de 6 : « page 5 », la flèche et « n° 1 » se
     touchaient presque et le mouvement ne se lisait plus comme trois temps.
     Les deux valeurs travaillent ensemble — changer l'une sans l'autre
     redéséquilibre le haut et le bas de la flèche. */
  .rmd-cs__stack{display:flex;flex-direction:column;align-items:flex-start;gap:10px;}
  /* Le « avant » reste gris : c'est le point de départ, il ne doit pas peser
     autant que le « après ». */
  .rmd-cs__from{font-size:clamp(20px,2.3vw,27px);font-weight:500;line-height:1;letter-spacing:-.03em;
                color:var(--rmd-slight);font-variant-numeric:tabular-nums;}
  /* La flèche prend la teinte de départ du dégradé : elle appartient au même
     bloc que le chiffre d'arrivée, elle ne doit pas rester bleue toute seule. */
  .rmd-cs__arrow{width:26px;height:12px;flex:none;color:var(--rmd-redder);margin:3px 0;}
  /* 10/08 : la progression descend à 36 px. Elle était à 52 px, soit PLUS
     grosse que le KPI principal — la hiérarchie était inversée. */
  .rmd-cs__to{font-size:clamp(31px,3.5vw,40px);font-weight:600;line-height:1;letter-spacing:-.035em;
              font-variant-numeric:tabular-nums;
              background-image:linear-gradient(148deg,#E4004D 0%,#EE453C 50%,#FA9329 100%);
              -webkit-background-clip:text;background-clip:text;color:transparent;}

  /* .rmd-cs__rule et .rmd-cs__foot retirés le 07/08 : les filets et la ligne
     « 247 mots-clés / 157 en Top 3 » chargeaient la carte. L'espace sépare. */

  /* Sous 1024 px la grille du collage repasse à une colonne (déclarée plus
     haut) : la tuile photo d'abord, les chiffres dessous. Rien à annuler —
     il n'y a plus ni recouvrement ni panneau à défaire. */
  @media(max-width:1023px){
    .rmd-cs__proof{order:1;}
  }
  /* Sous 560 px les deux chiffres côte à côte deviennent illisibles : la carte
     repasse à une colonne, filet horizontal. */
  @media(max-width:560px){
    /* La flèche rétrécit avec le cadre : sa pointe est calée sur la hauteur de
       la bande, donc les deux valeurs changent ensemble. */
    .rmd-cs__proof{padding-top:56px;}
    /* La bande passe de 74 a 56px ici : la pastille de marche doit remonter
       avec, sinon elle mord le haut du cadre. 6 + ses 43px de haut = 49,
       soit 7px sous le cadre. */
    .rmd-ty .rmd-cs__mkt{top:6px;}
    .rmd-cs__doodle{width:68px;left:-2px;}
    /* Le CTA cumulait white-space:nowrap et overflow:hidden : dès que la
       colonne devenait plus étroite que son texte, « gratuit → » était
       tronqué SANS indice visuel. Sous 560px il passe pleine largeur,
       centré, retour à la ligne autorisé — le motif standard d'un bouton
       mobile, plus rien à couper. align-self:stretch sur le wrap : c'est
       lui (flex, align-start) qui donnait au bouton sa largeur naturelle. */
    .rmd-cs__cta{white-space:normal;width:100%;justify-content:center;
                 text-align:center;padding:14px 18px;}
    .rmd-cs__ctawrap{align-self:stretch;}
    .rmd-cs__serp{border-radius:18px;}
    .rmd-cs__serpface{border-radius:16px;}
    .rmd-cs__serpres{padding-left:46px;}
    .rmd-cs__serpcap{padding-left:46px;}
    /* ── Zoom-recadrage des captures (10/08, demande Ayoub) ─────────────────
       Les fichiers sont des captures BUREAU (1760 et 1400px de large, soit
       880/700px CSS en retina). En width:100% sur une colonne de ~270px elles
       tombent à ~31 % de leur taille prévue : texte de 5px, illisible — c'est
       ça qui « n'était pas responsive ».
       Au lieu de rétrécir, on AGRANDIT et on COUPE À DROITE : hauteur fixe +
       object-fit:cover ancré à gauche, là où vit le texte. La barre Google
       remonte à ~61 % de sa taille prévue (446px visibles sur 880 : logo +
       requête entière), le résultat à ~71 % (346px sur 700 : favicon, nom du
       site, URL, début du titre). Ce qui part : les icônes micro/objectif et
       la vignette produit — rien qui porte la preuve. Le fondu blanc sur le
       bord droit signe le recadrage comme un zoom volontaire, pas une image
       cassée. La capture entière reste dans la section Preuve plus bas.
       ⚠ Ces hauteurs sont un couple avec la largeur de colonne : si le
       padding de la coque ou de la face change, les recalculer. */
    .rmd-cs__serphead{position:relative;}
    .rmd-cs__serphead img{height:58px;object-fit:cover;object-position:left center;}
    .rmd-cs__serpres img{height:96px;object-fit:cover;object-position:left center;}
    .rmd-cs__serphead::after,.rmd-cs__serpres::after{content:"";position:absolute;
        top:0;right:0;bottom:0;width:44px;pointer-events:none;
        background:linear-gradient(to right,rgba(255,255,255,0),#fff);}
    /* Retrait gauche symétrique : la gouttière de pastille tombe à 46px et le
       panneau n'a plus qu'une colonne, l'alignement sur la légende ne tient
       plus. Un décalage de 56px sur un écran étroit ne se lirait plus comme un
       calage, juste comme un bloc mal centré. */
    /* Le rail à gauche ne tient pas sur un écran étroit : le logo redevient un
       bandeau de tête, pleine largeur, filet dessous. */
    /* Le retrait bas (60px) et la coulée (37px, calée en px) sont repris tels
       quels de la règle de base : le dégagement sous le texte ne dépend pas de
       la largeur d'écran, donc rien à recalculer ici. Le SVG des gouttes, lui,
       se comprime en largeur — elles deviennent plus étroites, donc plus
       pointues, ce qui convient.
       Le retrait latéral est déjà à 0 sur la règle de base ; il n'y a plus rien
       à annuler ici, et le bandeau du logo n'a donc plus besoin de sa marge
       négative pour aller chercher les bords. */
    .rmd-cs__cardin{grid-template-columns:1fr;gap:22px 0;}
    /* Le filet passe de vertical à horizontal avec le rail : border-right doit
       être explicitement annulé, sinon il traîne sous le bandeau. */
    .rmd-cs__cardlogo{margin:0 0 22px;padding:0 0 14px;
                      border-right:0;border-bottom:1px solid var(--rmd-bord);}
    /* 23 → 32 → 40px : suit la règle de base (24 → 36 → 44) en restant un
       cran en dessous, le bandeau mobile étant pleine largeur et non plus un
       rail étroit. Ici la largeur ne coûte rien à personne : le logo est seul
       sur sa bande, les chiffres sont dessous. */
    .rmd-cs__logo{height:40px;}
    .rmd-cs__row + .rmd-cs__row{border-left:0;padding-left:0;
                                border-top:1px solid var(--rmd-bord);padding-top:22px;}
    .rmd-cs__desc{padding-top:0;}
  }
/* ═══════════════════════════════════════════════════════════════════════════
     BANDEAU CLIENTS — repris tel quel de section-clients-dark.html.
     Voir ce fichier pour le pourquoi du traitement des logos (brightness(0)
     invert(1), kindy-mono) et de la boucle par copies.
     ⚠ La boucle est passée de QUATRE copies à DEUX le 11/08, en même temps que
     la rangée passait de 5 à 18 marques : une copie mesure désormais 3 528px
     (18 × 196), donc plus large que n'importe quel écran, et deux suffisent à
     ne jamais laisser la piste se vider. Quatre auraient inliné 36 logos de
     plus en base64 pour rien.

     ⚠ NE PAS REPASSER CETTE SECTION AU BLANC. Essayé le 10/08, annulé le jour
     même : le marine est voulu. C'est la seule respiration sombre entre le hero
     et la preuve, tous deux blancs.
     Si la question revient, six valeurs bougent ENSEMBLE, pas une : fond de
     section, SVG de fond, couleur du titre, couleur de l'œilleton, couleur de
     son filet, et le filtre des logos. Et deux pièges attendent :
       · le marine n'est pas dans `background`, il est peint par le SVG
         (rect #041135 + trois halos) — c'est LUI qu'il faut neutraliser ;
       · masquer ce SVG demande DEUX classes dans le sélecteur. La ceinture est
         dans <div class="rmd-ty">, qui pose `.rmd-ty img,.rmd-ty svg{display:
         block}` : en (0,1,1) il bat tout sélecteur à une seule classe. Et il
         faut garder le positionnement absolu, sinon le SVG repasse en flux et
         disloque la page (c'est ce qui est arrivé le 10/08). */
  .rmd-grad-b{background-image:linear-gradient(148deg,#E4004D 0%,#EE453C 50%,#FA9329 100%);
              -webkit-background-clip:text;background-clip:text;color:transparent;}

  .rmd-cl{position:relative;overflow:hidden;background:var(--rmd-ink);}
  .rmd-cl__bg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}
  /* Bandeau raccourci le 06/08/2026 (~250 px → ~185 px de haut). C'est une
     bande de réassurance posée entre le hero et la preuve, pas une section à
     part entière : elle se lisait comme la deuxième. Quatre réglages tirent la
     hauteur, ils ont tous baissé ensemble — padding du bloc, corps du titre,
     padding du ruban, échelle des logos. En bouger un seul déséquilibre. */
  .rmd-cl__inner{position:relative;max-width:var(--rmd-maxw);margin:0 auto;
                 display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;
                 padding:26px 24px 0;}
  @media(min-width:768px){.rmd-cl__inner{padding:32px 24px 0;}}

  .rmd-cl__eyb{display:inline-flex;align-items:center;gap:12px;
               font-size:10px;font-weight:500;letter-spacing:.15em;text-transform:uppercase;
               color:var(--rmd-orng);}
  .rmd-cl__eyb::before{content:'';width:26px;height:1px;background:var(--rmd-orng);opacity:.7;flex:none;}

  .rmd-cl__h{font-weight:500;font-size:clamp(22px,2.7vw,30px);line-height:var(--rmd-lh-head);
             letter-spacing:-.03em;color:#fff;max-width:760px;}

  /* margin-top 12 → 30px le 11/08 (demande Ayoub) : le titre et la première
     rangée se touchaient presque, la bande se lisait comme une seule masse.
     La landing pose 32px sous son intitulé (mb-8) et n'a QUE cet intitulé ;
     ici il y a un œilleton ET un titre, donc l'écart part du titre et non de
     l'œilleton — 30px + les 8 de padding, soit 38px de blanc réel. */
  .rmd-cl__belt{position:relative;margin-top:30px;padding:8px 0 24px;
                -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 9%,#000 91%,transparent 100%);
                mask-image:linear-gradient(90deg,transparent 0,#000 9%,#000 91%,transparent 100%);}
  @media(min-width:768px){.rmd-cl__belt{margin-top:38px;padding:10px 0 28px;}}

  /* 34s → 104s le 11/08, et ce n'est PAS un ralentissement : la vitesse est
     inchangée. Un cycle parcourt une copie entière, et la copie est passée de
     980px (5 marques) à ~3 020px (18 marques au calage de la landing). À 34s
     la bande filerait à 89px/s au lieu de 29 — illisible.
     ⚠ La largeur d'une copie n'est plus calculable de tête depuis que les
     logos ont des largeurs libres : la mesurer (.rmd-cl__row, getBounding‑
     ClientRect) et poser durée = largeur / 29. */
  .rmd-cl__track{display:flex;width:max-content;animation:rmdClLoop 104s linear infinite;}
  /* -50 % = exactement une copie sur les DEUX. ⚠ Cette valeur est liée au
     nombre de copies (100 / nb) : elle était à -25 % tant qu'il y en avait
     quatre. Voir la note en tête de section. */
  @keyframes rmdClLoop{from{transform:translateX(0);}to{transform:translateX(-50%);}}
  .rmd-cl__belt:hover .rmd-cl__track{animation-play-state:paused;}

  /* ── L'écart : celui de la landing ────────────────────────────────────────
     Deux méthodes ont été essayées avant, ne pas les rouvrir :
       · gap de 86px puis clamp(28,3.8vw,68) — un écart constant entre des
         logos de largeurs très différentes ne donne pas un rythme constant,
         l'œil mesure les centres et voyait kindy collé à lily billy ;
       · case de largeur fixe (196px, gap:0) — rythme parfait, mais chaque
         logo flottait au milieu de son blanc, très loin du bandeau de
         rhillane.com/lp-creation-site-web-maroc.
     11/08, arbitrage : on reprend la recette de cette landing telle quelle.
     C'est un gap de 64px (son `gap-16`) — le rythme y est tenu non par
     l'écart mais par le CALAGE DES LOGOS, hauteur commune plafonnée en
     largeur, voir .rmd-cl__logo. Les deux réglages vont ensemble : remettre
     un gap sans le plafond de largeur ramène le défaut du premier essai.
     ⚠ padding-right = gap, obligatoirement la même valeur : il recrée l'écart
     à la couture entre les deux copies de la rangée. Sans lui, le défilement
     marque un temps toutes les 18 marques. */
  .rmd-ty .rmd-cl__row{flex:none;display:flex;align-items:center;gap:64px;padding-right:64px;}

  .rmd-ty .rmd-cl__item{flex:none;display:flex;align-items:center;justify-content:center;padding:0;}

  /* ── Le calage : hauteur commune, plafond de largeur ─────────────────────
     Repris de .client-logo sur rhillane.com/lp-creation-site-web-maroc :
         height:2rem; width:auto; max-width:9rem; object-fit:contain
     soit 32px de haut, 144px au maximum de large.
     Le couple fait tout le travail, et c'est pour ça qu'il remplace le
     système --lh/--s d'avant (une valeur à régler par marque) :
       · les logos compacts (kindy 1:1, adidas 1,5:1) prennent les 32px et
         restent étroits — 32 et 47px de large ;
       · les logotypes allongés butent sur les 144px, et object-fit:contain
         les redescend alors en hauteur : GARNIER (7,3:1) sort à 144×20,
         L'ORÉAL (5,5:1) à 144×26. Personne n'écrase personne.
     ⚠ Ne pas remettre une hauteur unique SANS le max-width : un 7,3:1 à 32px
     de haut ferait 234px de large et mangerait deux voisins.
     ⚠ Les deux valeurs sont en px et non en em : elles ne suivent pas le
     corps de texte, elles suivent le bandeau de la landing. */
  /* brightness(0) invert(1) : chaque logo est aplati en silhouette puis passé
     en blanc, quelle que soit sa couleur d'origine. C'est ce qui donne cinq
     marques du même poids visuel sur le marine.
     ⚠ Ce filtre n'est pas cosmétique : lily-billy-logo.svg, ihinvest-logo.svg
     et tbm-logo.png sont déjà les variantes BLANCHES, et logo-kindy-mono.png
     la variante monochrome. Les fichiers et le filtre vont ensemble. */
  /* ⚠ DEUX classes dans le sélecteur, et c'est obligatoire : la remise à zéro
     « .rmd-ty img,.rmd-ty svg{display:block;max-width:100%} » vaut (0,1,1) et
     bat un sélecteur à une seule classe. Écrit .rmd-cl__logo seul, le
     max-width:144px était ignoré et GARNIER (7,3:1) sortait à 237px de large,
     mangeant ses deux voisins. Même piège que le SVG de fond, § plus haut. */
  .rmd-ty .rmd-cl__logo{height:32px;width:auto;max-width:144px;object-fit:contain;
                opacity:.68;filter:brightness(0) invert(1);
                transition:opacity .3s ease, transform .3s ease;}
  .rmd-cl__item:hover .rmd-cl__logo{opacity:1;transform:translateY(-3px);}

  /* 10/08 puis 11/08 : les --lh par marque (kindy 60px, mariner 41…) ont été
     retirés avec le passage au calage de la landing — la hauteur est commune,
     il n'y a plus rien à régler marque par marque. Historique gardé ici parce
     que la tentation revient à chaque logo qui « paraît petit » : la réponse
     est le plafond de largeur, pas une hauteur sur mesure. */

  @media(prefers-reduced-motion:reduce){
    .rmd-cl__track{animation:none;width:100%;}
    .rmd-cl__belt{-webkit-mask-image:none;mask-image:none;}
    .rmd-ty .rmd-cl__row{flex:1 1 auto;flex-wrap:wrap;justify-content:center;
                 padding-right:0;row-gap:28px;}
    .rmd-cl__row[aria-hidden="true"]{display:none;}
  }

  @media(max-width:640px){
    .rmd-cl__belt{padding:10px 0 26px;margin-top:26px;
                  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 6%,#000 94%,transparent 100%);
                  mask-image:linear-gradient(90deg,transparent 0,#000 6%,#000 94%,transparent 100%);}
    /* 26px au lieu de 32, et 40px de gap au lieu de 64 : la landing garde ses
       valeurs de bureau sur mobile, mais son bandeau est pleine largeur alors
       que celui-ci vit dans un conteneur à 24px de marge. À 64px d'écart on ne
       voyait plus que deux marques et demie par écran. Le rapport gap/hauteur
       (2:1) est celui de la landing, c'est lui qui fait le rythme.
       Une copie tombe alors à 2 228px (mesurée) : 2 228 / 29 = 77s pour garder
       exactement la vitesse du bureau. */
    .rmd-ty .rmd-cl__logo{height:26px;max-width:116px;}
    .rmd-ty .rmd-cl__row{gap:40px;padding-right:40px;}
    .rmd-cl__track{animation-duration:77s;}
  }

  
  /* ═══════════════════════════════════════════════════════════════════════════
     PREUVE v1 — repris de preuve/section-preuve-v1.html (remplace v2, retirée
     le 05/08/2026). v1 montre UNE requête : barre de recherche, résultat
     gagnant, concurrent juste dessous. v2 en montrait quatre.

     Deux adaptations, à refaire si le fichier source évolue :
     1. Ses remises à zéro étaient GLOBALES (body, img, a, h1..h3/p/figure,
        :focus-visible) : portées ici sur .rmd-p1 / .lb, sinon elles
        descendraient sur le hero et le bandeau clients.
     2. Chemins : ../../new-design-ayoub → ../ , ./serp-*.png → ./preuve/.
     ═══════════════════════════════════════════════════════════════════════════ */

  /* ═══════════════════════════════════════════════════════════════════════════
     SECTION PREUVE — v1  (une requête, la scène Google reconstituée par découpe)

     Mise en page d'après https://www.hostino.ma/agence-seo-maroc/ :
     une scène claire, la recherche en haut, le résultat gagnant détaché, le
     concurrent estompé dessous.

     ── v1 / v2 ──────────────────────────────────────────────────────────────
     Cette version montre UNE requête : « homewear homme », premier résultat,
     Tommy Hilfiger estompé juste dessous. C'est l'argument le plus direct — un
     duel, lisible en une seconde, avec l'en-tête Google au-dessus pour planter
     le décor.
     section-preuve-v2.html en montre quatre, sans en-tête. Les deux tiennent :
     v1 frappe plus fort sur une requête, v2 prouve un système. Gardées côte à
     côte pour arbitrage.

     ── La SERP est DÉCOUPÉE, pas redessinée ─────────────────────────────────
     Un premier essai redessinait la page de résultats en HTML : logo composé
     lettre à lettre, faux champ de recherche, faux résultats. Le rendu était
     approximatif — la typographie de Google n'est pas la nôtre, les gris ne
     tombaient pas juste, et l'ensemble avait l'air d'une imitation. Une
     imitation ne prouve rien.
     Cette version repart de la vraie capture, assets/serp-homewear.png, coupée
     en trois morceaux nets :
         serp-head.png  1760 × 190   logo, champ de recherche, onglets
         serp-r1.png    1400 × 272   le résultat Mariner, favicon et vignette
         serp-r2.png    1400 × 258   le résultat Tommy Hilfiger
     Découpés à 2× depuis l'original pour rester nets sur écran retina. Tout ce
     qu'on voit dans la scène vient donc de Google : la police, les couleurs,
     l'URL, la vignette produit. Rien n'est reconstitué.

     Ce que la mise en page ajoute — et c'est tout — ce sont les deux pastilles
     de rang à gauche et l'estompage du second résultat. Le reste est la capture.

     ── Ce que le découpage retire ────────────────────────────────────────────
     La capture d'origine fait 1 644 px de haut : carrousel sponsorisé, filtres,
     « Autres questions », etc. En garder trois bandes, c'est montrer la ligne
     qui compte sans faire défiler. La capture entière reste accessible : un clic
     sur la scène l'ouvre en pop-up, où elle se fait défiler.

     ── Provenance des chiffres ───────────────────────────────────────────────
     Aucun chiffre inventé (new-design-ayoub/mariner/MarinaSection.md) :
       « homewear homme » 1re position                       capture
       Amazon, Calvin Klein, Dim, Hugo Boss                  section 4
       247 mots-clés sur 250 en 1re page · 157 en Top 3      section 12
       124 985 € de CA via Google organique                  section 8, GA

     ⚠ Le volume de recherche a été RETIRÉ de cette section. MarinaSection.md
     (§2, hero) donne « homewear homme (33 100 rech./mois) ». Vérification
     Ahrefs du 05/08/2026 : FR 400, global 400, BE 30, partout ailleurs 0 —
     aucune lecture n'approche 33 100. Publier ce chiffre sur la seule section
     dont l'argument entier est « vous pouvez vérifier » serait le contraire du
     but recherché. Voir le même avertissement dans la v2. À arbitrer côté hero.

     ── Identité ──────────────────────────────────────────────────────────────
     .eyebrow, .section-title/.thin, .section-sub, .rmd-p1, .wrap, jetons :
     assets/css/cpt/case_study.css et mockup.css. La pastille de rang reprend
     .real .num (36 px, rayon 9, fond vert, chiffre blanc en 700).
     ═══════════════════════════════════════════════════════════════════════════ */
  .rmd-case{
    /* Les trois déclarations de base du <main>, rapatriées de l'ancien bloc
       @layer supprimé le 13/08/2026. Chaque section v5 repose sa police, mais
       le <main> lui-même n'en avait pas d'autre. */
    font-family:var(--font-sans);
    color:#041135;
    -webkit-font-smoothing:antialiased;
    /* ── INTERLIGNE : UNE VALEUR PAR RÔLE (11/08) ────────────────────────────
       La page comptait 15 interlignes différents pour du texte courant, dont un
       à 1,95 qui se voyait à l'œil, et .rmd-d2__pt déclaré DEUX FOIS (1,7 puis
       1,6) — la valeur appliquée tenait de l'accident, pas d'un choix.
       Trois valeurs désormais, et trois seulement :
         --rmd-lh-body    une phrase, 11 à 18px
         --rmd-lh-title   un titre court ou un libellé, 12 à 23px, 1 à 2 lignes
         --rmd-lh-head    un titre de section, 26 à 38px
       ⚠ « Le même interligne partout » serait une ERREUR de typo, pas de la
       cohérence : plus le corps grossit, plus l'interligne doit se serrer,
       sinon les lignes d'un titre se détachent les unes des autres. La
       cohérence, c'est UNE valeur PAR RÔLE — d'où trois tokens et non un.
       Restent volontairement en dehors, ce ne sont pas des phrases :
         line-height:1          grands chiffres et icônes (une seule ligne)
         20 / 24 / 32px         boutons et liens de nav (cible tactile)
         1.05 / 1.1 / 1.15      les chiffres dans les blocs de stats
         .rmd-cs__h1 (1.06)     le h1 du hero, 48px : sa propre classe de taille
       Écrire une valeur en dur ici est une régression — passer par un token. */
    --rmd-lh-body:1.6;
    --rmd-lh-title:1.35;
    --rmd-lh-head:1.12;
    /* ── RAMPE CHAUDE — l'encre des accents (11/08) ──────────────────────────
       Un seul dégradé pour tous les mots mis en avant dans un titre : hero
       (« Aujourd'hui premier. »), preuve, résultats, défi, contact, autres
       cas, carrousel. Il était écrit SIX fois en dur avant d'être sorti ici ;
       six copies d'une même valeur finissent toujours par diverger d'un chiffre.
       ⚠ Ce jeton porte la VALEUR, pas le procédé. Les trois lignes qui vont
       avec (-webkit-background-clip / background-clip / color:transparent)
       restent sur chaque règle, sous @supports, parce que sans le clip un
       color:transparent rend le texte INVISIBLE — la solution de repli doit
       rester à côté de son garde, pas dans un jeton.
       ⚠ Il existe une seconde rampe, froide, qui part du bleu #3943FF : c'est
       .rmd-grad-a à sa définition de base. Elle n'accentue plus aucun titre de
       section mais sert encore dans le corps de texte. Ne pas fusionner. */
    --rmd-grad-warm:linear-gradient(112deg,#E4004D 0%,#EE453C 55%,#F2622F 100%);
    --ink:#041135; --purp:#3943FF; --purpsoft:#F3F4FF; --slight:#596980;
    --bord:#E9EAF2; --redder:#E4004D; --orng:#FA9329; --green:#16B364; --nuk:#F9FAFB;
    --sh-card:0 8px 26px rgba(4,17,53,.05);
    --sh-big:0 24px 60px rgba(4,17,53,.1);
    /* --sh-lift vivait dans un second :root (bloc courbes) : fusionné ici. */
    --sh-lift:0 18px 44px rgba(4,17,53,.09);
  }
  .rmd-p1 *,.lb *{box-sizing:border-box;}
  .rmd-p1,.lb{font-family:'Poppins',ui-sans-serif,system-ui,sans-serif;color:var(--ink);
       background:#fff;-webkit-font-smoothing:antialiased;line-height:var(--rmd-lh-body);}
  .rmd-p1 :where(h1,h2,h3,p,figure){margin:0;}
  /* height:auto est obligatoire ici. Les découpes portent leurs attributs
     width/height (utiles : ils réservent la place avant chargement et évitent
     que la page saute). Mais avec width:100% en CSS et un height="190" en
     attribut, le navigateur applique 190 px de haut à une image affichée sur
     600 px de large : elle s'étire. height:auto rend la main au ratio. */
  .rmd-p1 img,.lb img{max-width:100%;display:block;height:auto;}
  .rmd-p1 a{color:inherit;}
  .rmd-p1 :focus-visible,.lb :focus-visible{outline:2px solid var(--purp);outline-offset:3px;border-radius:4px;}

  .wrap{max-width:1200px;margin:0 auto;padding:0 24px;}
  /* 56/76 : le rythme vertical standard de la page (résultats, défi, approche,
     autres cas). Était 64/96 — normalisé le 06/08. */
  .rmd-p1{padding-block:56px;}  /* fond : voir le bloc « Fond commun » plus bas */
  @media(min-width:768px){.rmd-p1{padding-block:76px;}}

  .eyebrow{display:inline-flex;align-items:center;gap:14px;border-radius:9999px;
        border:1px solid var(--bord);background:#fff;padding:9px 12px 9px 22px;
        box-shadow:-4px 0 10px rgba(0,0,0,.02),4px 0 10px rgba(0,0,0,.02),0 4px 10px rgba(0,0,0,.02);
        font-size:13px;font-weight:500;letter-spacing:-.01em;color:var(--purp);margin-bottom:18px;}
  .eyebrow::after{content:'';width:30px;height:18px;flex:0 0 auto;
        background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 18' fill='none'%3E%3Cpath d='M2 9h24m0 0-6-6m6 6-6 6' stroke='%233943FF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;}
  .section-title{font-size:38px;font-weight:500;letter-spacing:-.02em;line-height:var(--rmd-lh-head);}
  .section-title .thin{font-weight:300;color:var(--slight);}
  /* « Première place. » reprend EXACTEMENT l'encre de « première place. » du
     hero (.rmd-cs__now) : même angle, mêmes arrêts, même arrivée à #F2622F et
     pas #FA9329 (l'orange de la charte tombe à 2,27:1 sur blanc, sous le seuil
     de 3:1 des grands textes). Jusqu'au 12/08 le hero disait « première place »
     mot pour mot ; il dit maintenant « premier ». C'est donc la COULEUR qui
     porte seule le rappel entre le hero et la preuve.
     Le repli en couleur pleine ET le garde @supports sont obligatoires — un
     texte en color:transparent sans background-clip:text est invisible.
     Sélecteur porté par .rmd-p1 : .section-title est déclaré à nu ici et
     touche déjà .rmd-p2 plus bas, il ne faut pas lui ajouter un enfant qui
     voyage. */
  /* Hiérarchie du titre : « Première place. » garde les 38px et prend le
     dégradé, les concurrents passent en dessous à 0,62em (≈24px), en 400 et en
     gris. Sur une seule ligne à taille égale, l'œil lisait les quatre marques
     avant le résultat — or c'est le résultat qu'on vend, les marques ne sont
     que la mesure de la difficulté. Porté par .rmd-p1 : .section-title .thin
     est déclaré à nu ici et sert aussi à .rmd-p2 plus bas. */
  .rmd-p1 .section-title .now{font-weight:600;}
  /* 10/08 (demande Ayoub, deux temps) : cette seconde ligne porte l'argument
     (« devant les marques… ») — d'abord passée de --slight à --ink, puis de
     .62em à 1em : c'est UN titre en deux lignes, pas un titre + sous-titre.
     Même corps (38px), même interlettrage que « Première place. » ; seule la
     graisse (400 vs 600) et la couleur distinguent encore les deux lignes.
     display:block conservé — chaque ligne reste sur sa ligne. margin-top
     tombe : à corps égal, l'interligne du titre suffit.
     Scopé .rmd-p1 : les .thin des autres sections restent gris et petits. */
  .rmd-p1 .section-title .thin{display:block;
        font-weight:400;letter-spacing:-.02em;color:var(--ink);}
  .rmd-p1 .section-title .now{color:var(--redder);}
  @supports ((-webkit-background-clip:text) or (background-clip:text)){
    .rmd-p1 .section-title .now{
        background-image:var(--rmd-grad-warm);
        -webkit-background-clip:text;background-clip:text;color:transparent;}
  }
  .section-sub{font-size:16px;color:var(--slight);margin-top:12px;max-width:640px;line-height:var(--rmd-lh-body);}
  .section-sub b{color:var(--ink);font-weight:600;}
  @media(max-width:900px){.section-title{font-size:30px;}}

  .pv{display:grid;grid-template-columns:1fr;gap:34px;margin-top:36px;align-items:center;}
  /* 10/08 (demande Ayoub) : texte à GAUCHE, capture à DROITE. Le DOM garde
     scène puis récit (mobile : la preuve d'abord, l'ordre de lecture voulu) ;
     l'inversion est purement visuelle, par order + colonnes miroir. La
     capture garde la piste large (1.18), c'est elle qui a besoin de place. */
  @media(min-width:1000px){
    .pv{grid-template-columns:.82fr 1.18fr;gap:52px;}
    .pv > .scene{order:2;}
    .pv > .say{order:1;}
  }

  /* ── La scène ──────────────────────────────────────────────────────────── */
  /* 22 en haut et non 30 : la pastille de marché ajoute déjà sa propre hauteur
     au-dessus de la barre de recherche. */
  .scene{position:relative;background:var(--nuk);border:1px solid var(--bord);
         border-radius:24px;padding:22px 26px 26px;overflow:hidden;}
  /* Le grand arrondi pâle de la référence : il fait « écran » sans dessiner de
     cadre de navigateur. Placé bas pour ne pas couper les résultats. */
  .scene::before{content:'';position:absolute;left:-26%;bottom:-88%;width:150%;height:132%;
         border-radius:50%;background:#fff;opacity:.7;}
  .scene__in{position:relative;}

  /* ── Le marché ────────────────────────────────────────────────────────────
     Une capture de SERP ne dit pas d'où elle a été prise, et c'est la première
     question qu'on lui pose : première position, oui — mais sur quel marché ?
     Le pays est donc posé SUR la scène et pas seulement dans la phrase
     d'introduction : un lecteur qui saute le texte le voit quand même, et il le
     voit avant les résultats, au moment où il commence à les lire.
     Le drapeau n'est PAS l'emoji 🇫🇷 : Windows n'a pas de glyphe de drapeau,
     l'emoji y retombe sur les deux lettres « FR » dans une police de secours,
     soit exactement l'accident qu'on ne veut pas sur une section dont
     l'argument est « rien n'est bricolé ».

     10/08 — passé du dégradé CSS à un SVG à trois rects.
     Le dégradé coupait à 33,34 % : sur 21px de large, les bornes tombaient à
     7,0007px, donc entre deux pixels, et le navigateur lissait les deux
     jointures. D'où un drapeau aux bords cotonneux.
     Le SVG a un viewBox de 3 unités affiché sur 24px : chaque bande fait
     exactement 8px, sur une frontière de pixel entière. shape-rendering
     crispEdges interdit en plus tout lissage sur ces jointures.
     Proportions officielles 2:3 respectées (24×16). */
  /* 10/08 : centré, plus calé à droite. Avec le petit rectangle de 24px la
     pastille était un discret repère de coin ; avec le drapeau flottant elle a
     assez de présence pour tenir l'axe de la carte, et décentrée elle tirait
     tout le haut de la scène vers la droite. */
  .scene__mkt{display:flex;justify-content:center;margin-bottom:12px;}
  .mkt{display:inline-flex;align-items:center;gap:8px;background:#fff;
       border:1px solid var(--bord);border-radius:9999px;padding:6px 13px 6px 9px;
       font-size:12px;font-weight:500;letter-spacing:-.01em;color:var(--ink);
       white-space:nowrap;box-shadow:var(--sh-card);}
  .mkt b{font-weight:600;}
  /* 10/08 — drapeau flottant sur hampe, 40×28, à la place du rectangle de 24px.
     Le contour reste indispensable, quelle que soit la forme : la bande
     centrale est blanche et la pastille aussi, sans lui le milieu du drapeau se
     confond avec le fond. Il est ici porté par le tracé lui-même (stroke sur le
     path) et non par un `outline` CSS — un contour rectangulaire autour d'une
     forme ondulée dessinerait une boîte autour du drapeau.
     Les trois bandes sont des rects pleine hauteur découpés par un clipPath à
     la forme du drapeau : elles se chevauchent de 0,2 unité pour qu'aucun filet
     de fond n'apparaisse entre elles au rendu.
     Pas de shape-rendering:crispEdges ici, contrairement au rectangle : les
     ondulations ONT besoin du lissage. */
  .mkt__fl{flex:0 0 auto;display:block;width:40px;height:28px;}

  /* ── L'en-tête découpé ────────────────────────────────────────────────────
     La barre de recherche est une CARTE, exactement comme le résultat gagnant :
     même fond blanc, même filet var(--bord), même rayon 14, même padding 12/14,
     même ombre var(--sh-card). Une seule déclaration change entre les deux —
     aucune, en fait : .scene__head et .r--win partagent la liste ci-dessous.
     Posée à nu sur le fond de la scène, la barre flottait : on lisait une image
     collée au-dessus d'un bloc encadré, deux objets de nature différente. Encadrée
     pareil, elle redevient le haut de la même page.
     Le retrait négatif de -6 px qui compensait la marge blanche du fichier saute
     avec l'encadrement : c'est le padding de la carte qui donne l'alignement
     maintenant, et un décalage à gauche se verrait contre le filet. */
  .scene__head{background:#fff;border:1px solid var(--bord);border-radius:14px;
        padding:12px 14px;box-shadow:var(--sh-card);}
  .scene__head img{width:100%;}

  /* ── Les résultats ─────────────────────────────────────────────────────── */
  .res{margin-top:18px;display:flex;flex-direction:column;gap:10px;}
  /* Le rang À GAUCHE : il se lit avant le résultat, et les deux pastilles
     s'empilent en colonne — on voit 1 puis 2 sans rien lire. */
  .r{display:grid;grid-template-columns:36px minmax(0,1fr);gap:14px;align-items:center;
     border:1px solid transparent;border-radius:14px;padding:12px 14px;}
  .r--win{background:#fff;border-color:var(--bord);box-shadow:var(--sh-card);}
  /* Le concurrent est estompé, pas supprimé : c'est sa présence qui donne sa
     valeur à la première place. */
  .r--lose{opacity:.4;filter:grayscale(1);}
  /* .real .num de la charte : 36 px, rayon 9, fond vert, chiffre blanc 700.
     Le perdant garde la forme et perd la couleur. */
  .r__num{display:flex;align-items:center;justify-content:center;width:36px;height:36px;
          border-radius:9px;background:var(--green);color:#fff;
          font-size:16px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;}
  .r--lose .r__num{background:var(--bord);color:#98A2B3;}
  .r__shot{position:relative;display:block;width:100%;border-radius:6px;overflow:hidden;}
  .r__shot img{width:100%;}
  .r__go{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;gap:6px;
        font-size:11.5px;font-weight:500;color:#fff;background:rgba(4,17,53,.86);
        border-radius:9999px;padding:6px 11px;opacity:0;transform:translateY(4px);
        transition:opacity .22s ease,transform .22s ease;pointer-events:none;}
  .r__shot:hover .r__go,.r__shot:focus-visible .r__go{opacity:1;transform:none;}

  /* ── Classement + date ────────────────────────────────────────────────────
     Une ligne de texte, pas des pastilles : la scène contient déjà trois cartes
     encadrées, un quatrième niveau de boîtes l'aurait chargée. Le séparateur
     est un ::before et non un caractère dans le balisage — écrit en dur, le
     point resterait en fin de ligne au moment du retour à la ligne.
     Gouttière horizontale à 0 : c'est la marge du point qui espace, sinon
     l'écart réel serait gap + 2 × marge.
     (Une version en échelle, une entrée par ligne, a été essayée et retirée le
     10/08 : elle cassait la mise en page. La ligne reste la ligne — seul le
     réglage typographique ci-dessous a changé.) */
  .rankline{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 0;
        margin-top:16px;padding-top:14px;border-top:1px solid var(--bord);
        font-size:13px;line-height:var(--rmd-lh-body);color:var(--slight);
        /* Poppins sort des chiffres proportionnels : le « 1 » est nettement
           plus étroit que le « 4 » et le « 6 », donc #1 / #2 / #4 / #6 ne
           tombaient pas sur la même largeur et la ligne paraissait bancale.
           tabular-nums leur donne la même chasse. Sans effet si la fonte n'a
           pas le jeu — jamais de dégât. */
        font-variant-numeric:tabular-nums;
        -webkit-font-smoothing:antialiased;
        -moz-osx-font-smoothing:grayscale;}
  /* 500 et non 400 : Poppins est une géométrique à grande hauteur d'x, sa 400
     en 13 px et en gris tire vers le maigre à côté de la 600 du gagnant. La 500
     est déjà chargée (Google Fonts, 300;400;500;600;700) — aucune requête en
     plus, et l'écart avec le gagnant reste lisible. */
  .rankline > span{font-weight:500;}
  /* ── Icônes de marque ──────────────────────────────────────
     Ce sont les FAVICONS que Google affiche à côté de chaque résultat,
     découpés dans nos propres captures. Sur une ligne qui parle de
     positions dans Google, c’est la marque la plus juste : c’est ce que le
     lecteur voit s’il refait la recherche. Aucun logo téléchargé, aucun
     logo redessiné.
     Le NOM reste à côté : règle du guide UX (« un logo seul demande un
     effort de reconnaissance ») — et à cette taille, un favicon encore
     moins.
     ⚠ AUCUN cadre ici, et c’est délibéré. Une version 24px posée dans une
     tuile blanche à filet a été retirée le 12/08 : Google dessine DÉJÀ une
     pastille grise autour de chaque favicon, donc la tuile faisait un
     second cadre autour d’un cercle déjà cadré. Elle n’avait été ajoutée
     que parce que la première découpe rognait cette pastille — les
     fichiers ont été refaits (pastille entière, centrée, 96×96), le
     problème n’existe plus. Si un favicon revenait sans son fond,
     redonner un cadre à CELUI-LÀ, pas à tous.
     ⚠ 28px et non 24 : avec la tuile, 2px de padding et 1px de filet ne
     laissaient que 18px utiles à la marque. Nus, les 28 sont à elle.
     ⚠ vertical-align et non align-items : la ligne aligne ses éléments
     sur la BASELINE (voir .rankline), et une image inline y pose sa base
     sur la ligne d’écriture. Sans le décalage elle flotte au-dessus du
     texte. -8px à 28 de haut, contre -6 à 24.
     ⚠ flex:none : dans un conteneur flex une image se laisse comprimer
     quand la ligne se resserre, et un favicon écrasé devient une bouillie.
     ⚠ Préfixé .rankline : « .rmd-p1 img{max-width:100%;display:block} »
     vaut (0,1,1) et écraserait un sélecteur à une seule classe — l’icône
     passerait en display:block et casserait la ligne en deux. */
  .rankline .rankline__ico{display:inline-block;flex:none;width:28px;height:28px;
                 vertical-align:-8px;margin-right:8px;object-fit:contain;
                 border-radius:50%;}
  /* La 600 de Poppins chasse large ; -.01em referme l'ensemble sans que la
     ligne bouge à l'œil. */
  .rankline b{font-weight:600;color:var(--ink);letter-spacing:-.01em;}
  .rankline > * + *::before{content:'·';margin:0 12px;color:#C9CFDB;
        /* Le point ne doit pas grossir avec la 500 des noms. */
        font-weight:400;}
  .capdate{margin-top:9px;font-size:11.5px;line-height:var(--rmd-lh-body);color:var(--slight);}

  @media(max-width:560px){
    .scene{padding:22px 16px 20px;}
    /* ── L'en-tête découpé ────────────────────────────────────────────────────
    La barre de recherche est une CARTE, exactement comme le résultat gagnant :
    même fond blanc, même filet var(--bord), même rayon 14, même padding 12/14,
    même ombre var(--sh-card). Une seule déclaration change entre les deux —
    aucune, en fait : .scene__head et .r--win partagent la liste ci-dessous.
    Posée à nu sur le fond de la scène, la barre flottait : on lisait une image
    collée au-dessus d'un bloc encadré, deux objets de nature différente. Encadrée
    pareil, elle redevient le haut de la même page.
    Le retrait négatif de -6 px qui compensait la marge blanche du fichier saute
    avec l'encadrement : c'est le padding de la carte qui donne l'alignement
    maintenant, et un décalage à gauche se verrait contre le filet. */
    .scene__head{padding:10px;}
    .r{grid-template-columns:30px minmax(0,1fr);gap:10px;padding:10px;}
    .r__num{width:30px;height:30px;font-size:14px;}
    /* Deux chiffres côte à côte sous 560px : « 124 985 € » à 30px ne tient pas
       dans une demi-colonne. Ils s'empilent, le filet passe à l'horizontale. */
    .kpi{grid-template-columns:1fr;gap:0;}
    .kpi__i + .kpi__i{border-left:0;padding-left:0;
        border-top:1px solid var(--bord);margin-top:18px;padding-top:18px;}
    /* Le séparateur du classement passe en marge réduite : sur un écran
       étroit, 12px de chaque côté poussaient la dernière entrée seule sur
       une ligne de plus. */
    .rankline > * + *::before{margin:0 8px;}
  }

  /* ── Le récit ──────────────────────────────────────────────────────────── */
  /* 15 → 16.5 → 18px le 10/08 (demande Ayoub, en deux temps) : c'est
     l'argumentaire principal de la section, il doit se lire comme un LEAD,
     nettement au-dessus du corps standard (16). L'interligne descend à 1.65 :
     à 18px, 1.7 d'interligne aérait trop et cassait les blocs. */
  .say p{font-size:18px;line-height:var(--rmd-lh-body);color:rgba(4,17,53,.74);max-width:60ch;}
  .say p + p{margin-top:14px;}
  .say b{color:var(--ink);font-weight:600;}
  /* 11/08 — NOM DE CONCURRENT dans le récit (demande Ayoub : les faire ressortir).
     Surlignage neutre, pas une couleur de marque : un fond d'encre à 5,5 % et
     un poids 500. Trois raisons de ne PAS utiliser <b> ni le cramoisi ici :
       — <b> est déjà pris dans ce paragraphe par « première position ». Deux
         emphases identiques et la phrase n'a plus de hiérarchie : le lecteur ne
         sait plus si le gras désigne notre résultat ou le concurrent.
       — le cramoisi est la couleur du RÉSULTAT dans toute la page. La donner à
         Tommy Hilfiger reviendrait à décorer l'adversaire.
       — un fond gris dit « ceci est un nom propre » sans hiérarchiser. C'est
         exactement le rôle voulu : repérer, pas valoriser.
     ⚠ white-space:nowrap est structurel, pas cosmétique : « Tommy Hilfiger » et
     « Calvin Klein » font deux mots. Sans lui, le surlignage se coupe en fin de
     ligne et laisse une moitié de pastille orpheline.
     ⚠ margin négatif de -.06em : il compense le padding horizontal pour que le
     mot garde sa position dans le rythme de la phrase. Sans ça, chaque nom
     pousse le texte de ~5px et l'interlettrage du paragraphe se voit. */
  /* 11/08 (2e passe, demande Ayoub) : le fond gris devient un SURLIGNEUR.
     Un trait de marqueur, pas une pastille : le dégradé part de
     transparent, monte au jaune plein en 2 % et redescend à la fin, donc
     les extrémités s’estompent comme un feutre qui attaque et relâche.
     L’angle de 104° donne l’obliquité d’une main. Un rectangle jaune à coins
     arrondis aurait été une étiquette de plus, et la page en a déjà
     beaucoup. Même famille que la flèche manuscrite du hero : ce sont les
     deux seules marques « à la main » de la page.

     ⚠ COULEUR HORS PALETTE, assumée. La charte n’a pas de jaune, et
     --rmd-orng (#FA9329) est un orange : en surlignage sous du texte
     encre, il devient illisible. Le jaune n’est pas ici une couleur de
     marque, c’est un OBJET que tout le monde reconnaît, un surligneur.
     #FFE55C et non le #FFFF00 de la référence : sur une page blanche et
     bleu nuit, le fluo pur hurle. Ne pas le réutiliser ailleurs comme
     s’il était un jeton de charte.

     Ce qui ne bouge pas, et pourquoi : voir la note juste au-dessus.
     nowrap et la marge négative sont structurels ; font-weight reste à
     500 parce que le gras est déjà pris par « première position » dans le
     même paragraphe — le jaune suffit à repérer, le gras mettrait le
     concurrent au niveau de notre résultat. */
  .say .brand{color:var(--ink);font-weight:500;white-space:nowrap;
              background-image:linear-gradient(104deg,
                   rgba(255,229,92,0) 0.4%, #FFE55C 2.4%,
                   #FFE55C 96%, rgba(255,229,92,0) 99%);
              background-repeat:no-repeat;
              background-size:100% 62%;background-position:0 78%;
              padding:.08em .3em;margin:0 -.06em;}
  /* .say__src (ligne de sources) retirée le 10/08 avec son bloc. La date de
     relevé est portée par .capdate, sous la capture. */

  /* ── Les deux chiffres ────────────────────────────────────────────────────
     Deux colonnes, un filet entre elles : exactement la grille du panneau de
     preuve du hero, pour que la page n'invente pas une deuxième façon de poser
     un chiffre. Pas de carte, pas de fond, pas d'icône — les chiffres se
     détachent par leur taille et par le filet, rien d'autre.
     Le « /250 » est en 0,62em et en gris : c'est le dénominateur, il ne doit
     pas peser autant que le 247. */
  .kpi{display:grid;grid-template-columns:1fr 1fr;gap:0 24px;
       margin-top:24px;padding-top:22px;border-top:1px solid var(--bord);}
  .kpi__i + .kpi__i{border-left:1px solid var(--bord);padding-left:24px;}
  .kpi__v{display:block;font-size:30px;font-weight:600;line-height:1.05;
       letter-spacing:-.03em;color:var(--ink);font-variant-numeric:tabular-nums;}
  .kpi__u{font-size:.62em;font-weight:500;letter-spacing:-.01em;color:var(--slight);}
  /* Le « € » reprend le vert de .rmd-rs__u (section Résultats · CA) : --green
     et --rmd-win valent tous deux #16B364, ce sont les deux noms du même vert
     selon la portée de jetons. Un symbole de devise traité de deux façons dans
     la même page se remarque tout de suite.
     Le RAPPORT, lui, n'est pas repris : .rmd-rs__u vaut 0.5em sur un chiffre de
     52px, soit 26px. Le même 0.5em sur les 30px d'ici ne faisait plus que 15px,
     illisible. Un rapport em ne se transporte pas d'une échelle de titre à une
     échelle de texte — c'est la taille RENDUE qu'il faut garder comparable.
     0.7em → 21px, lisible, et toujours nettement sous le nombre. */
  .kpi__c{font-size:.7em;color:var(--green);letter-spacing:-.02em;margin-left:.04em;}
  .kpi__l{display:block;margin-top:8px;font-size:13px;line-height:var(--rmd-lh-body);color:var(--slight);}
  /* .say p.say__note et pas .say__note : .say p pèse (0,1,1), une simple classe
     (0,1,0) perdrait et la note repasserait à 15px. */
  .say p.say__note{margin-top:14px;font-size:12.5px;line-height:var(--rmd-lh-body);color:var(--slight);}
  /* Accroche + CTA sous les KPI (11/08, demande Ayoub). La section n'est
     pas dans .rmd-ty : les jetons --rmd-* recoivent leur valeur en secours.
     Le color est re-force en blanc : une regle de liens de la section
     battait le .rmd-cs__cta a la specificite. */
  .rmd-p1 .say__hook{margin-top:22px;font-size:17px;font-weight:600;color:var(--rmd-ink, #041135);opacity:1;}
  .say__cta{margin-top:12px;}
  .say__cta a.rmd-cs__cta{color:#fff;}
  /* ⚠ « .say p » pèse (0,1,1) et impose 18px : sans le p dans le sélecteur,
     la ligne de réassurance se lirait comme un paragraphe du récit. Même
     piège que .say p.say__note juste au-dessus.
     ⚠ Les jetons --rmd-* sont portés par .rmd-ty ; cette section n’y est
     pas, d’où les valeurs de secours. Sans elles, le texte perdait sa
     couleur et la coche son vert. */
  .say p.say__ctanote{margin-top:12px;font-size:13px;
                 line-height:var(--rmd-lh-body,1.7);color:var(--rmd-slight,#596980);}
  .say p.say__ctanote svg{color:var(--rmd-green,#16B364);}

  /* ═══ POP-UP DE CAPTURE ═══════════════════════════════════════════════════
     La capture entière s'ouvre PAR-DESSUS la page, jamais dans un autre onglet :
     quitter la page pour vérifier une preuve, c'est perdre le lecteur au moment
     précis où il est convaincu.
     Le <a href> est conservé dessous : sans JavaScript le lien fonctionne
     encore, il ouvre simplement le fichier. Le JS ne fait qu'intercepter.
     La capture fait ~1 640 px de haut : la fenêtre la laisse DÉFILER plutôt que
     de la réduire à une vignette illisible. */
  .lb{position:fixed;inset:0;z-index:80;display:none;padding:24px;
      align-items:center;justify-content:center;}
  .lb[open],.lb.is-on{display:flex;}
  /* z-index explicites. backdrop-filter promeut le voile en couche composée :
     sans z-index, Chrome le peint AU-DESSUS de la fenêtre pourtant située après
     lui dans le DOM, et la pop-up disparaît derrière son propre fond. */
  .lb__veil{position:absolute;inset:0;z-index:0;background:rgba(4,17,53,.72);
      -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);}
  .lb__box{position:relative;z-index:1;width:min(1080px,100%);max-height:calc(100vh - 48px);
      background:#fff;border-radius:18px;overflow:hidden;display:flex;flex-direction:column;
      box-shadow:0 40px 90px rgba(4,17,53,.4);animation:lbIn .22s ease both;}
  @keyframes lbIn{from{opacity:0;transform:translateY(10px) scale(.985);}to{opacity:1;transform:none;}}
  .lb__bar{display:flex;align-items:center;gap:14px;padding:13px 14px 13px 18px;
      border-bottom:1px solid var(--bord);flex:0 0 auto;}
  .lb__cap{font-size:13.5px;font-weight:500;letter-spacing:-.01em;min-width:0;
      overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .lb__hint{margin-left:auto;font-size:12px;color:var(--slight);white-space:nowrap;}
  @media(max-width:620px){.lb__hint{display:none;}}
  /* 44 px : plancher de cible tactile (WCAG 2.5.8). */
  .lb__x{flex:0 0 auto;width:44px;height:44px;display:flex;align-items:center;justify-content:center;
      border:1px solid var(--bord);background:#fff;border-radius:11px;cursor:pointer;
      font-size:19px;line-height:1;color:var(--ink);transition:background .18s ease;}
  .lb__x:hover{background:var(--nuk);}
  /* overflow:auto → la capture entière se parcourt dans la fenêtre. */
  .lb__scroll{overflow:auto;background:var(--nuk);-webkit-overflow-scrolling:touch;}
  .lb__scroll img{width:100%;}
  /* Repérage des trois premiers résultats sur la capture ouverte (11/08,
     demande Ayoub). Posé PAR-DESSUS l’image, jamais peint dedans : c’est la
     pièce à conviction, et c’est précisément celle qu’on ouvre pour vérifier.

     Positions relevées sur le fichier (2218×1644). Les trois résultats
     partagent la même colonne, seule la bande verticale change :
         n° 1  Mariner         y  995..1210
         n° 2  Tommy Hilfiger  y 1240..1445
         n° 3  La Redoute      y 1478..1644  ← coupé par le bas de la capture
     En POURCENTAGES : la boîte de la visionneuse va de 1080px à la largeur
     d’un téléphone ; en px, les cadres se décaleraient à chaque taille. La
     bordure reste en px — un trait doit garder son épaisseur.
     Le n° 3 s’arrête à 99,5 % et non 100 : son résultat est coupé par le bord
     de la capture, et une bordure basse posée pile sur ce bord disparaît.

     Couleurs : trois jetons DÉJÀ dans la page, aucune couleur inventée. La
     descente vert → orange → rouge se lit comme un classement sans qu’on
     ait besoin des chiffres. Le vert du n° 1 est celui de la pastille du
     hero : même signal, même couleur. */
  .lb__stage{position:relative;}
  .lb__stage img{display:block;}
  .lb__marks[hidden]{display:none;}
  .lb__mark{position:absolute;left:11.27%;width:48.92%;
            border:2px solid;border-radius:10px;pointer-events:none;}
  .lb__mark--1{top:60.52%;height:13.08%;border-color:var(--green);}
  .lb__mark--2{top:75.43%;height:12.47%;border-color:var(--orng);}
  .lb__mark--3{top:89.90%;height: 9.60%;border-color:var(--redder);}
  /* Les pastilles sortent à GAUCHE des cadres, dans la marge blanche de
     Google (11,3 % de l’image, ~120px à la taille d’ouverture) : elles ne
     recouvrent aucun pixel des résultats. Sous 620px cette marge fond, elles
     repassent à l’intérieur — voir la règle plus bas.
     Le fond est écrit par modificateur et non en currentColor : la pastille
     déclare color:#fff pour son chiffre, donc currentColor y vaudrait blanc. */
  .lb__marknum{position:absolute;right:calc(100% + 10px);top:50%;transform:translateY(-50%);
               width:26px;height:26px;border-radius:50%;color:#fff;
               display:grid;place-items:center;font-size:13px;font-weight:600;line-height:1;}
  .lb__mark--1 .lb__marknum{background:var(--green);}
  .lb__mark--2 .lb__marknum{background:var(--orng);}
  .lb__mark--3 .lb__marknum{background:var(--redder);}
  @media(max-width:620px){
    .lb__marknum{right:auto;left:6px;top:6px;transform:none;width:22px;height:22px;font-size:12px;}
  }

  @media(prefers-reduced-motion:reduce){
    .r__go{transition:none;}
    .lb__box{animation:none;}
  }

  /* ═══════════════════════════════════════════════════════════════════════════
     RÉSULTATS · CA — repris de resultats/section-resultats-ca.html.
     Elle partage le système .rmd-ty du hero, donc rien à re-porter : les règles
     déjà présentes (.rmd-ty, sa remise à zéro, .rmd-grad-a) ont été écartées
     pour ne pas les déclarer deux fois. Seul --rmd-win (#16B364, le vert des
     gains) manquait et a été ajouté au bloc de jetons plus haut.
     Aucun script, aucune image : rien d'autre à adapter.
     ═══════════════════════════════════════════════════════════════════════════ */

  /* ═══════════════════════════════════════════════════════════════════════════
     SECTION RÉSULTATS — d'après le bloc « Turning traffic into revenue — fast »
     du moodboard, avec les vrais chiffres Mariner.

     La composition du moodboard est reprise telle quelle : bande lilas pâle,
     exergue en petites capitales, titre sur deux lignes dont la seconde est
     décalée, une note en petit corps calée à gauche, puis trois grands nombres
     séparés par des filets verticaux, chacun avec un intitulé gras et une ligne
     d'explication.
     Le lilas du moodboard tombe sur --rmd-purpsoft (#F3F4FF), qui est déjà le
     violet pâle de la charte — rien à inventer. Le bloc reste plat, sans
     courbes de fond : c'est ce qui le distingue des sections voisines, comme
     .rmd-steps se distingue de .rmd-hero dans index-EN.html.

     ── Le triptyque ──────────────────────────────────────────────────────────
     L'ordre a changé le 10/08 : l'argent d'abord, puis l'audience, puis
     l'efficacité. Le moodboard proposait conversions / revenus / taux, et la
     section suivait cette montée. Mais un lecteur qui ne lit qu'une colonne doit
     tomber sur celle qui décide, et c'est le chiffre d'affaires.

     ── Ce que la première colonne corrige ────────────────────────
     Elle a affiché un moment une croissance de chiffre d'affaires GLOBALE en
     grand, avec le total du site en petit dessous. Posé comme ça, dans une
     étude de cas SEO, ce chiffre se lit comme du CA produit par le
     référencement. Il ne l'est pas : le référencement ne pèse qu'une part du
     total, le reste vient de la publicité, de l'emailing, du direct et du
     referral. La colonne porte donc le chiffre du CANAL, celui que
     l'agence a produit.

     ⚠ Le total et la répartition par canal ont été RETIRÉS de ce fichier le
     11/08 (consigne du patron) : chiffres d'affaires du client, ils n'ont
     rien à faire dans un document qui sort de l'agence. Ni dans la page,
     ni ici : les commentaires partent avec le fichier standalone et
     s'affichent d'un clic droit. Ils sont dans les exports Analytics si
     quelqu'un en a besoin.

     ── Les deux taux retirés le 10/08 ────────────────────────────────────────
     Les descriptions portaient aussi +5,8 % (croissance du canal organique) et
     la croissance du total du site. Retirés : trois colonnes de prose dense se
     lisaient comme un paragraphe, plus comme trois mesures. Ce qui reste est le
     strict nécessaire — le chiffre du canal, le total nommé comme total, et
     d'où vient la différence.

     ⚠ La croissance du canal organique est très en dessous de celle du total
     du site. Tant qu'aucun pourcentage n'est affiché dans cette colonne, rien
     ne ment. Mais si un taux revient un jour ici, ce doit être celui du
     CANAL : afficher la croissance globale dans une colonne dont le titre dit
     « référencement naturel » est exactement le raccourci que cette section a
     été refaite pour fermer.

     ── Provenance des chiffres ────────────────────────────────────────────────
     Aucun chiffre inventé, conformément à new-design-ayoub/mariner/MarinaSection.md.

       124 985 € CA référencement naturel                 Google Analytics, section 8
               (montant mis à jour le 11/08 par Ayoub ; le taux de croissance
                qui l’accompagnait valait pour l’ancien montant, il a sauté)
       +149 %  utilisateurs, 93 000 sur la période       Google Analytics, section 8
       +25 %   taux de conversion sur un an, 4,55 %      Shopify, section 5
               pic à 8,1 % le 30 novembre 2024           Shopify, section 5

     Le CA total du client et sa répartition par canal figuraient ici : retirés
     le 11/08, voir plus haut. La section parle de ce que le référencement
     rapporte, pas de la répartition média du client.

     Chaque chiffre porte sa propre période. Le document de référence interdit
     de croiser des périodes entre elles, d'où la mention de la source et de la
     fenêtre sous chaque nombre plutôt qu'un total agrégé maison.

     ⚠ 124 985 € est déjà affiché dans la section preuve v1 (bloc .kpi, « de CA
     via Google organique »). Le doublon est assumé : preuve v1 le donne comme
     pièce à conviction, la section résultats comme mesure. Si la répétition
     gêne, c'est le .kpi de preuve v1 qui saute, pas celui-ci.

     ── Identité ───────────────────────────────────────────────────────────────
     Jetons, Poppins et dégradé .rmd-grad-a : repris de index-EN.html. Le « + »
     réduit et remonté est le .rmd-cs__plus de hero-mariner.html.
     La section n'a qu'un seul composant de mesure, en une rangée de trois
     (la seconde rangée « détail du référencement » a été retirée le 06/08,
     ses styles avec).
     ═══════════════════════════════════════════════════════════════════════════ */
  /* Jetons .rmd-ty : déclaration UNIQUE en tête de ce bloc (portage 12/08).
     La maquette les redéclarait ici (sous-ensemble identique, vérifié) ;
     une seule source désormais. */

  /* :where() = spécificité nulle, donc n'importe quelle classe de composant bat
     cette remise à zéro. Sans ça, .rmd-ty li{padding:0}
 écrase le padding des
     composants et les boîtes se referment sur leur texte. */

  .rmd-ty :where(ul){list-style:none;}



  /* ── Coque ─────────────────────────────────────────────────────────────── */
  /* ── Fond blanc depuis le 10/08 (était --rmd-nuk) ──────────────────────────
     Le gris #F9FAFB ne séparait rien : 2 % d'écart avec le blanc, ça ne se lit
     pas comme un changement de section, seulement comme une zone un peu terne
     tenue sur un long défilement. Et il cassait le panneau de preuve de la
     section voisine — .board est en --nuk lui aussi, donc invisible sur un fond
     --nuk (voir le commentaire de .rmd-p2).

     Le sol repasse en blanc partout, et ce sont les panneaux (.scene, .board)
     qui portent la teinte. C'est déjà le rapport qui marche dans « Première
     place » : section blanche, panneau gris. Une seule règle pour toute la page,
     au lieu d'un fond par section.

     Ce qui sépare maintenant les sections, c'est l'espace, plus la couleur :
     152px avant la paire (76 de .rmd-p1 + 76 d'ici) et 56px à l'intérieur
     (0 d'ici + 56 de .rmd-p2). Grand écart dehors, petit écart dedans : la
     paire se lit comme un bloc sans avoir besoin d'un aplat pour le dire. */
  .rmd-rs{background:#fff;}

  /* Même rythme que défi et approche (56 / 76) : la section était calée sur
     64 / 96 du temps où elle portait deux rangées de chiffres. Avec une seule,
     ce cadrage la faisait respirer deux fois plus que ses voisines.

     ⚠ Padding BAS à 0, padding haut plein. La section précède « Quatre
     requêtes » (.rmd-p2) et les deux partagent le fond --rmd-nuk : elles doivent
     se lire comme un seul bloc continu. Deux paddings qui se touchent creusent
     le double — 76 + 76 = 152 px de trou au milieu de ce qui doit paraître
     d'une pièce. L'écart est donc tenu à un seul endroit, par le padding HAUT
     de .rmd-p2, et celui d'ici part à 0.

     Le padding haut, lui, reste : c'est « Première place » (.rmd-p1) qui
     précède maintenant, sur fond blanc. Changement de fond, donc l'écart se
     rend des deux côtés et le padding garde sa valeur.

     La règle, pour la prochaine fois que la section bouge : le padding du côté
     d'un voisin qui PARTAGE le fond vaut 0, celui du côté d'un voisin qui CHANGE
     de fond garde sa valeur. Cette section a été déplacée quatre fois le 10/08 et
     c'est ce réglage qui casse à chaque fois.

     Position au 10/08 : « Première place » (preuve v1), puis résultats, puis
     « Quatre requêtes » (preuve v2). Les deux dernières se déplacent ENSEMBLE —
     elles partagent le fond et se lisent comme un seul bloc, les séparer laisse
     un trou d'un côté et une coupe nette de l'autre. */
  .rmd-rs__inner{max-width:var(--rmd-maxw);margin:0 auto;
                 display:flex;flex-direction:column;gap:32px;padding:56px 24px 0;}

  @media(min-width:768px){.rmd-rs__inner{gap:44px;padding:76px 24px 0;}
}


  /* ── En-tête ───────────────────────────────────────────────────────────── */
  /* Grille à une seule colonne depuis le 10/08, avec le retrait de .rmd-rs__note.
     Elle tenait la colonne 1 (250px), calée en bas pour venir à hauteur de la
     seconde ligne du titre ; le titre était épinglé en colonne 2. Retirer le
     paragraphe sans défaire la grille laissait le titre en colonne 2, donc
     décalé de 290px avec une gouttière vide à sa gauche — la panne classique
     quand on vide une cellule au lieu de supprimer la colonne.
     Le titre repart donc du bord, sous la pastille, en une seule colonne. */
  .rmd-rs__head{display:grid;gap:14px;}

  /* Résultats portait le seul exergue en filet de la page — toutes les autres
     sections ouvrent sur la pastille .rmd-pill. Passée à la pastille le 06/08.
     Le placement dans la grille est porté par .rmd-rs__head .rmd-pill ;
     l'ancienne classe .rmd-rs__eyb a disparu avec son filet. */
  .rmd-rs__head .rmd-pill{grid-column:1 / -1;justify-self:start;margin-bottom:4px;}

  /* ── Le titre, aligné sur .section-title ──────────────────────────────────
     Il était en clamp(30px, 5vw, 52px), soit 52px sur un grand écran, quand
     TOUTES les autres sections de la page titrent à 38 / 30 via .section-title
     (preuve v1, preuve v2, carrousel). Posée juste sous « Première place »,
     la section paraissait donc d'un cran au dessus dans la hiérarchie alors
     qu'elle est au même niveau. Mêmes valeurs que .section-title, à la
     déclaration près, y compris la bascule à 30px sous 900px — c'est le point
     d'arrêt du reste de la page, pas un nouveau. */
  .rmd-rs__h{font-weight:500;font-size:38px;line-height:var(--rmd-lh-head);
             letter-spacing:-.02em;color:var(--rmd-ink);text-wrap:balance;}

  @media(max-width:900px){
    .rmd-rs__h{font-size:30px;}
  }

  .rmd-rs__h b{display:block;font-weight:500;}

  /* Le dégradé de « Première place » (.rmd-p1 .section-title .now), repris ici
     mot pour mot : les deux titres mettent en avant leur phrase forte, ils ne
     peuvent pas le faire dans deux couleurs différentes à une section d'écart.

     ⚠ Surcharge SCOPÉE, et pas une retouche de .rmd-grad-a. Cette classe sert
     encore au défi, au contact et à « autres cas » : y toucher repeindrait
     trois sections d'un coup. Seul background-image est redéclaré — le
     background-clip et le color:transparent viennent déjà de .rmd-grad-a. */
  .rmd-rs__h .rmd-grad-a{
    background-image:var(--rmd-grad-warm);}

  /* .rmd-rs__note retirée le 10/08 avec son paragraphe. Rien d'autre sur la page
     ne porte cette classe — si la note revient, il faut aussi remettre la grille
     à deux colonnes ci-dessus, les deux allaient ensemble. */


  /* ── Les trois nombres ─────────────────────────────────────────────────── */
  .rmd-rs__stats{display:grid;grid-template-columns:1fr;gap:28px;}

  /* Colonne flex + margin-top:auto sur la source : les trois descriptions ne
     font pas le même nombre de lignes, et sans ça les trois pastilles de source
     flottaient à trois hauteurs différentes. Là elles se calent toutes sur le
     bas du bloc. */
  .rmd-rs__stat{display:flex;flex-direction:column;align-items:flex-start;}

  @media(min-width:820px){
    .rmd-rs__stats{grid-template-columns:repeat(3,1fr);gap:0;}

    .rmd-rs__stat{padding:0 40px;border-left:1px solid rgba(4,17,53,.10);}

    .rmd-rs__stat:first-child{padding-left:0;border-left:none;}

    .rmd-rs__stat:last-child{padding-right:0;}

  }

  /* ── Les nombres, calés sur .rmd-cs__val (carte chiffre du hero) ───────────
     Ils étaient en clamp(52px, 7.6vw, 84px), soit 84px sur grand écran — le plus
     gros texte de toute la page, devant même le titre du hero. Tant que le titre
     de section montait à 52px l'écart passait ; ramené à 38px pour s'aligner sur
     .section-title, l'écart devenait du simple au double et le titre se lisait
     comme la légende de ses propres chiffres.

     Reprise à l'identique de .rmd-cs__val — mêmes clamp, graisse, interligne et
     approche. C'est la carte chiffre du hero, donc le premier grand nombre que
     le lecteur rencontre : c'est elle qui donne l'échelle, pas cette section.
     Échelle des nombres de la page, pour rester dedans la prochaine fois :
     hero et pied de page 52, autres cas 56 (72 sur la carte large), défi 44. */
  .rmd-rs__v{font-weight:600;font-size:clamp(38px,4.6vw,52px);line-height:1;
             letter-spacing:-.035em;color:var(--rmd-ink);font-variant-numeric:tabular-nums;
             white-space:nowrap;}

  /* Le « + » à 0,52 em et remonté : à taille égale il pèse autant que les
     chiffres et on lit « + 149 » en deux blocs au lieu d'un seul nombre. */
  .rmd-rs__plus{font-size:.52em;vertical-align:.42em;margin-right:.04em;
                color:var(--rmd-win);letter-spacing:0;}

  .rmd-rs__u{font-size:.5em;color:var(--rmd-win);letter-spacing:-.02em;margin-left:.02em;}

  /* 26px et non 14. Le nombre est cadré à line-height:1, donc sa boîte s'arrête
     quasiment sur le bas des chiffres : il n'y a presque aucun blanc de fonte à
     récupérer sous lui, contrairement à un texte courant. 14px mesurés s'en
     voyaient 6 ou 7, et le titre semblait collé. La marge est restée à 26 après
     le passage des nombres de 84 à 52px : la colonne est plus compacte, autant
     ne pas la resserrer davantage. */
  .rmd-rs__t{margin-top:26px;font-size:15.5px;font-weight:600;letter-spacing:-.01em;
             line-height:var(--rmd-lh-title);color:var(--rmd-ink);}

  /* margin-bottom : la source étant poussée en bas par margin-top:auto, c'est
     cette marge qui garantit un écart minimum quand la colonne est bien remplie.

     Interligne 1,6 → 1,75 → 1,95. Ces descriptions sont la seule prose de la
     section : serrées, elles font un pavé gris au pied de chaque colonne. À
     14 px, 1,95 met un peu moins de 14 px de blanc entre deux lignes.

     ⚠ La marge du haut suit l'interligne, elle ne peut pas rester fixe. Tant
     que l'écart titre → paragraphe ne dépasse pas l'écart entre deux lignes DU
     paragraphe, l'œil regroupe tout en un seul bloc et desserrer l'interligne
     ne fait qu'empirer les choses. D'où 20 px ici, à relever encore si
     l'interligne remonte. L'échelle de la colonne se lit de haut en bas :
     14 (dans le paragraphe) < 20 (titre → paragraphe) < 26 (nombre → titre)
     < 30 (paragraphe → pastille de source). */
  .rmd-rs__d{margin:20px 0 30px;font-size:14px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);
             max-width:330px;text-wrap:pretty;}

  /* Le total tous canaux passe à l'encre du texte, sans gras appuyé ni couleur :
     il doit s'attraper en diagonale — c'est le chiffre qu'on ne veut voir
     confondu avec aucun autre — sans venir concurrencer le grand nombre au
     dessus, qui reste le sujet de la colonne. */
  .rmd-rs__b{font-weight:600;color:var(--rmd-ink);}

  /* .rmd-rs__src (pastilles « GOOGLE ANALYTICS » / « SHOPIFY » en pied de
     chaque colonne) retirée le 10/08 avec ses trois éléments : plus rien ne la
     portait.
     ⚠ Elle avait un rôle de mise en page en plus de son rôle d'attribution :
     `margin-top:auto` poussait la pastille en bas de la colonne flex et calait
     donc les trois cartes sur la même ligne de pied. Sans elle, les colonnes
     s'arrêtent chacune à la fin de leur texte — voir .rmd-rs__d, dont la marge
     basse de 30px devient le seul espace de fin de colonne. */




  @media(max-width:819px){

    /* 40px et non 28 : empilées, les trois mesures n'ont plus que le filet pour
       se séparer. L'écart entre deux mesures doit rester plus grand que l'écart
       entre le nombre et son titre à l'intérieur d'une mesure (26px), sinon les
       blocs se regroupent au mauvais endroit. */
    .rmd-rs__stat + .rmd-rs__stat{padding-top:40px;border-top:1px solid rgba(4,17,53,.10);}

    .rmd-rs__stats{gap:0;}

    .rmd-rs__stat{padding-bottom:0;}

    .rmd-rs__stat + .rmd-rs__stat{margin-top:0;}

  }
  /* ── Fond commun aux sections claires ─────────────────────────────────────
     preuve n'avait aucun fond (donc le blanc du body) et resultats était en
     --rmd-purpsoft : trois sections claires, trois traitements différents.
     Elles reprennent celui du hero — blanc + les courbes de marque à 6 %.

     position:relative sur les conteneurs internes est obligatoire : le SVG est
     en position:absolute, et un élément positionné passe DEVANT du contenu non
     positionné, quel que soit l'ordre du DOM. Sans ça les courbes recouvriraient
     le texte au lieu de rester derrière. */
  .rmd-p1{position:relative;overflow:hidden;background:#fff;}
  /* 10/08 — courbes de fond adoucies : opacity .9 → .5 sur les QUATRE couches
     qui portent ce motif (hero, preuve, défi, autres cas). Le trait est à 6 %
     dans le SVG, donc le rendu passe de ~5,4 % à ~3 %.
     Le réglage se fait ici et non sur les stroke-opacity : neuf attributs à
     modifier contre quatre déclarations, et surtout le SVG reste exactement
     celui de la charte.
     Les quatre bougent ensemble à dessein — c'est tout l'objet de ce bloc
     « fond commun ». En dimmer une seule, c'est revenir aux trois traitements
     différents qu'il a fallu unifier le 06/08. */
  /* .rmd-p1__bg retirée le 10/08 (passe « tout en blanc » — seuls hero,
     bandeau clients et pied de page gardent leur décor). Le bloc « fond
     commun » ci-dessus ne pilote plus que le hero. */
  .rmd-p1 > .wrap{position:relative;}
  .rmd-rs__inner{position:relative;}

  /* ═══════════════════════════════════════════════════════════════════════════
     CONTACT — repris de contact/section-contact.html.

     ⚠ Trois composants partagés étaient définis DIFFÉREMMENT ici et dans le
     hero : .rmd-lead (480 vs 520px), .rmd-chips (centré, 13.5px vs 14px) et
     .rmd-chip (gap 8 vs 6). Repris tels quels, ils passaient APRÈS ceux du
     hero dans la feuille et l'auraient silencieusement restylé — les chips du
     hero se seraient centrées. Ils sont donc portés sur .rmd-fm.
     .rmd-pill ne différait que par des espaces, .rmd-ty / .rmd-grad-a /
     .rmd-pill__t / __arrow étaient identiques : écartés pour ne pas doubler.
     ═══════════════════════════════════════════════════════════════════════════ */




  .rmd-h2{font-weight:500;font-size:clamp(30px,4.2vw,44px);line-height:var(--rmd-lh-head);
          letter-spacing:-.03em;color:var(--rmd-ink);text-wrap:balance;}

  .rmd-fm .rmd-lead{font-size:clamp(16px,2vw,17px);line-height:var(--rmd-lh-body);color:var(--rmd-slight);
            max-width:480px;text-wrap:pretty;}


  /* Réassurances : sous le formulaire et en ligne, comme sur la landing page,
     et non plus en colonne à gauche. */
  .rmd-fm .rmd-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:10px 22px;margin-top:20px;
             font-size:13.5px;color:var(--rmd-slight);}

  .rmd-fm .rmd-chip{display:inline-flex;align-items:center;gap:8px;}

  /* Scopé .rmd-fm comme les autres composants partagés du bloc contact :
     non scopé, il repeignait aussi les coches des chips du hero. */
  .rmd-fm .rmd-chip svg{width:15px;height:15px;color:var(--rmd-win);flex:none;}


  /* ── Coque ─────────────────────────────────────────────────────────────── */
  /* --rmd-nuk → blanc le 11/08 (demande Ayoub, comme avant la greffe) : tout le
   site est sur blanc, seuls le bandeau clients et le pied de page tranchent.
   La carte du formulaire garde son relief par son filet + son ombre. */
.rmd-fm{position:relative;overflow:hidden;background:#fff;}

  .rmd-fm__bg{position:absolute;inset:0;width:100%;height:100%;opacity:.9;pointer-events:none;}

  .rmd-fm__inner{position:relative;max-width:var(--rmd-maxw);margin:0 auto;
                 display:grid;grid-template-columns:1fr;gap:40px;padding:56px 24px;}

  /* ── Largeur du formulaire ─────────────────────────────────────────────
     Retour à la largeur d'origine : deux colonnes égales, carte à 544 px et
     champs pleine largeur à l'intérieur.
     Deux variantes ont été essayées entre-temps et écartées :
       · carte réduite à 448 px — le bloc devenait trop étroit à l'écran ;
       · champs bornés à 340 px dans une carte restée à 544 — pire encore, les
         champs se tassaient à gauche et laissaient une bande de blanc mort à
         droite, à l'intérieur même de la carte.
     Le point à retenir de ces essais : quelle que soit la largeur retenue pour
     la carte, les champs la remplissent bord à bord. C'est la carte qu'on
     dimensionne, jamais les champs séparément. */
  @media(min-width:960px){
    /* 11/08 — align-items center → start (demande Ayoub : caler le bloc de gauche
       sur le haut de la carte de contact).
       Les deux colonnes ne font pas la même hauteur : à droite carte + chips de
       réassurance, à gauche pastille + titre + texte + bloc valeur. En "center"
       la grille centre CHAQUE colonne dans la hauteur de la rangée, donc la plus
       courte descend de la moitié de l'écart — d'où le décrochage d'environ 60px
       qu'on voyait en haut à gauche. Personne n'avait écrit ce décalage, il était
       calculé.
       En "start" les deux colonnes partent de la même ligne. Contrepartie
       assumée : du vide en bas de la colonne courte au lieu d'un vide réparti
       en haut et en bas. C'est le bon échange ici — le haut est ce que l'œil
       compare, deux titres qui démarrent au même niveau ; le bas, il ne le
       compare pas.
       ⚠ Ne pas "corriger" ce décalage avec un margin-top négatif sur .rmd-fm__pitch :
       ça marcherait à un seul contenu près, et le moindre mot ajouté à droite
       (une chip de plus) le redéréglerait. La cause est l'alignement, pas la marge. */
  .rmd-fm__inner{grid-template-columns:1fr 1fr;gap:64px;padding:76px 24px;align-items:start;}

  }

  /* 11/08 — TITRE DU CONTACT : noir + accent CRAMOISI, comme « Résultats ».
     Modèle demandé par Ayoub, celui de .rmd-rs__h :
       « Du trafic, oui. »              → noir d'encre
       « Du chiffre d'affaires, surtout. » → dégradé cramoisi, pas de bleu
     Il existe DEUX rampes d'accent dans la page, et ce n'est pas un hasard :
       base .rmd-grad-a  155deg #3943FF 58% → #E4004D 85% → #FA9329 100%
                         part du BLEU de marque. Ouvre une section.
       override          112deg #E4004D 0%  → #EE453C 55% → #F2622F 100%
                         100 % chaud. Sert quand le titre annonce un RÉSULTAT.
     Le contact demande une action, pas un constat, mais Ayoub le veut sur la
     rampe chaude comme les résultats : la page se termine donc en chaud, du
     défi jusqu'au formulaire.
     Écrit comme les deux autres surcharges (.rmd-rs__h, .rmd-d2) : on ne
     redéclare QUE background-image. background-clip et color:transparent
     restent portés par .rmd-grad-a — les redéclarer ici ferait trois endroits
     à corriger le jour où le procédé change.
     ⚠ « Autres cas » est désormais le SEUL titre encore sur la rampe bleue.

     La taille est alignée dans la foulée : le contact était le seul titre de
     section resté sur la base (clamp 30/4,2vw/44) alors que défi, approche et
     autres cas sont à clamp 26/3,2vw/38. Un dégradé sur du texte se calcule sur
     la boîte du texte, donc deux titres de tailles différentes ne rendent jamais
     tout à fait pareil, même à dégradé identique. */
  .rmd-fm .rmd-h2{font-size:clamp(26px,3.2vw,38px);line-height:var(--rmd-lh-head);}
  .rmd-fm .rmd-h2 .rmd-grad-a{background-image:var(--rmd-grad-warm);}
  .rmd-fm__pitch{display:flex;flex-direction:column;align-items:flex-start;gap:22px;}

  .rmd-fm__col{display:flex;flex-direction:column;}


  /* ── La carte ──────────────────────────────────────────────────────────── */
  /* max-width vaut aussi en colonne unique : sur une tablette de 800 px, sans
     lui, la carte prendrait toute la largeur et les champs repartiraient à
     700 px. */
  /* 11/08 — CARTE MISE EN AVANT (référence envoyée par Ayoub : carte à liseré
     rose avec un halo, celle qu'on choisit parmi trois).
     Le liseré passe du gris neutre au cramoisi de la charte. Aucune couleur
     inventée : #E4004D est --rmd-redder, déjà l'encre des chiffres du hero.

     Trois ombres empilées, chacune fait un travail différent — retirer la
     mauvaise casse l'effet sans qu'on comprenne pourquoi :
       1. l'anneau  0 0 0 5px à 5 % : un halo net, collé au bord. C'est LUI qui
          fait lire « sélectionné » ; sans lui il n'y a qu'un trait coloré.
       2. la lueur  0 0 34px -6px à 28 % : diffuse, elle décolle la carte du
          blanc de la section.
       3. l'ombre portée, en bleu d'encre et non en rose : elle pose la carte au
          sol. En rose elle donnerait un objet qui flotte dans un nuage coloré.
     ⚠ 1,5px et non 2 : à 2px le liseré devient un cadre et écrase les libellés
     de champs à l'intérieur.
     ⚠ La carte de gauche (.rmd-fm__stack) porte déjà son propre liseré, en
     DÉGRADÉ. Deux anneaux différents côte à côte, c'est la limite : ne pas
     ajouter un troisième traitement d'encadrement dans cette section. */
  /* Liseré DÉGRADÉ repris des cartes « autres secteurs » (11/08, demande
     Ayoub) : bord transparent + double fond (blanc dans le padding, dégradé
     de marque dans la zone de bordure). L'anneau rose part avec le liseré
     rouge ; l'ombre d'encre reste, c'est elle qui pose la carte au sol. */
  .rmd-fm__card{width:100%;max-width:544px;margin:0 auto;
                border:1.5px solid transparent;border-radius:18px;
                background-image:linear-gradient(#fff,#fff),
                     linear-gradient(155deg,#3943FF 58%,#E4004D 85%,#FA9329 100%);
                background-origin:border-box;
                background-clip:padding-box,border-box;
                box-shadow:0 26px 60px -34px rgba(4,17,53,.30);}

  .rmd-fm__head{padding:26px 30px 20px;border-bottom:1px solid var(--rmd-bord);}

  .rmd-fm__ht{font-size:19px;font-weight:600;letter-spacing:-.015em;color:var(--rmd-ink);}

  .rmd-fm__hs{margin-top:5px;font-size:13.5px;color:var(--rmd-slight);}

  /* Marges intérieures généreuses, comme le veut la règle du conteneur borné :
     ce sont elles qui font respirer le formulaire, pas du blanc laissé à droite
     des champs. */
  .rmd-fm__body{padding:26px 30px 32px;}


  .rmd-fm__meter{display:flex;align-items:center;gap:14px;margin-top:16px;}

  .rmd-fm__prog{flex:1 1 auto;height:4px;background:var(--rmd-bord);border-radius:999px;overflow:hidden;}

  .rmd-fm__progi{display:block;height:100%;width:33.33%;border-radius:999px;
                 background:linear-gradient(90deg,#3943FF 0%,#E4004D 62%,#FA9329 100%);
                 transition:width .35s ease;}

  .rmd-fm__count{flex:none;font-size:11.5px;font-weight:600;letter-spacing:.03em;
                 color:var(--rmd-slight);font-variant-numeric:tabular-nums;}


  /* ── Étapes ────────────────────────────────────────────────────────────── */
  /* 18 → 22 : un cran d'air de plus entre les champs, 10/08. C'est la seule
     valeur à bouger ici — l'intérieur d'un champ (libellé/contrôle/aide) reste
     serré à dessein, c'est ce qui les fait lire comme UN bloc et non comme
     trois lignes indépendantes. Élargir les deux à la fois aurait dissous le
     groupement au lieu de l'aérer. */
  .rmd-fm__step{display:flex;flex-direction:column;gap:22px;}

  .rmd-fm__step[hidden]{display:none;}

  /* La marge basse n'est PAS décorative : un <legend> n'est pas un enfant
     flex de son <fieldset>, il est sorti du flux et posé sur la bordure. Le
     gap:18px de .rmd-fm__step ne s'applique donc jamais entre lui et le
     premier champ — mesuré à 0 px sur les trois étapes, « VOTRE SITE » collé
     à « Site à auditer ». Seule une marge portée par le legend lui-même
     rétablit la respiration.
     Préfixé .rmd-ty : la remise à zéro `:where(…,legend){margin:0}` vaut
     (0,1,0), autant qu'une classe seule — même piège que .rmd-fm__note. */
  .rmd-ty .rmd-fm__legend{font-size:11px;font-weight:600;letter-spacing:.14em;
                  text-transform:uppercase;color:var(--rmd-purp);
                  margin-bottom:16px;}

  /* Le script déplace le focus sur le titre de l'étape à chaque changement
     d'écran, pour que le lecteur d'écran annonce la nouvelle étape et que la
     tabulation reparte du bon endroit.
     Aucun cadre ici, pas même en :focus-visible : Chrome fait « hériter »
     :focus-visible d'un focus programmatique quand le focus précédent le
     matchait — le liseré réapparaissait donc à la souris, sur un titre qui
     n'est pas un contrôle. Masquer l'indicateur ne coûte rien sur un élément
     non interactif : rien ne s'y active, et la tabulation suivante rend la main
     au premier champ, qui a son propre liseré. */
  .rmd-fm__legend:focus,
  .rmd-fm__legend:focus-visible{outline:none;}

  /* Les paires côte à côte (email/téléphone, effectif/budget) tenaient dans une
     colonne de 488 px. Dans 340 elles tomberaient à 161 px chacune, et
     « 80 000 MAD - 200 000 MAD » y serait coupé. Elles s'empilent donc. */
  .rmd-fm__two{display:grid;grid-template-columns:1fr;gap:22px;}


  .rmd-fm__f{display:flex;flex-direction:column;gap:8px;min-width:0;}

  .rmd-fm__l{display:flex;align-items:baseline;gap:8px;font-size:13px;font-weight:500;color:var(--rmd-ink);}

  /* La mention porte sur l'exception, pas sur la règle : neuf champs sur dix
     sont requis, ce sont les deux autres qui méritent d'être signalés. */
  .rmd-fm__opt{font-size:11.5px;font-weight:400;color:#9AA4B5;}

  /* 1,45 était la valeur la plus serrée du formulaire, sur un texte qui passe
     à deux lignes dès qu'il explique quelque chose. */
  .rmd-fm__hint{font-size:11.5px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);}

  .rmd-fm__i{width:100%;font:inherit;font-size:14px;color:var(--rmd-ink);background:#fff;
             border:1px solid var(--rmd-bord);border-radius:10px;padding:10px 14px;
             transition:border-color .2s ease, box-shadow .2s ease;}

  .rmd-fm__i::placeholder{color:#AAB3C2;}

  .rmd-fm__i:hover{border-color:#CBD2E0;}

  .rmd-fm__i:focus{outline:none;border-color:var(--rmd-purp);box-shadow:0 0 0 3px rgba(57,67,255,.12);}

  textarea.rmd-fm__i{min-height:92px;resize:vertical;}

  /* 16 px sous 768 : Safari iOS zoome sur tout champ dont le texte est plus
     petit, et ne revient pas en arrière quand on quitte le champ. Le select
     natif, bien que masqué, prend le focus et déclenche le même zoom. */
  @media(max-width:767px){
    .rmd-fm__i,.rmd-sel__btn,.rmd-sel__native{font-size:16px;}
  }



  /* L'état d'erreur est posé par le script, pas par :invalid : :invalid est vrai
     dès le chargement sur un champ requis vide, ce qui teindrait tout le
     formulaire en rouge avant la moindre interaction. */
  .rmd-fm__f.has-err .rmd-fm__i{border-color:var(--rmd-redder);box-shadow:0 0 0 3px rgba(228,0,77,.10);}

  .rmd-fm__err{display:none;font-size:11.5px;color:var(--rmd-redder);}

  .rmd-fm__f.has-err .rmd-fm__err{display:block;}


  /* ── Liste déroulante maison ───────────────────────────────────────────── */
  /* Le <select> natif reste dans le DOM, masqué visuellement : il porte les
     options, il est validé par le navigateur, et il s'affiche tel quel si le
     script ne tourne pas. Le bouton et la liste ci-dessous ne sont qu'un
     habillage qui réécrit sa valeur. */
  .rmd-sel{position:relative;}

  .rmd-sel__native{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
                   overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}

  .rmd-sel__btn{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
                font:inherit;font-size:14px;color:var(--rmd-ink);background:#fff;text-align:left;
                cursor:pointer;border:1px solid var(--rmd-bord);border-radius:10px;padding:10px 14px;
                transition:border-color .2s ease, box-shadow .2s ease;}

  .rmd-sel__btn:hover{border-color:#CBD2E0;}

  .rmd-sel__btn:focus-visible{outline:none;border-color:var(--rmd-purp);box-shadow:0 0 0 3px rgba(57,67,255,.12);}

  .rmd-sel.is-open .rmd-sel__btn{border-color:var(--rmd-purp);box-shadow:0 0 0 3px rgba(57,67,255,.12);}

  .rmd-sel__val{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

  .rmd-sel__val.is-ph{color:#AAB3C2;}

  .rmd-sel__chev{width:11px;height:7px;flex:none;color:var(--rmd-slight);transition:transform .2s ease;}

  .rmd-sel.is-open .rmd-sel__chev{transform:rotate(180deg);}

  /* max-height était à 236 px, soit deux pixels de moins que les six lignes de
     la plus longue liste : elle défilait pour rien et coupait la dernière ligne
     en deux. La hauteur est désormais calculée à l'ouverture, en fonction de la
     place réellement disponible à l'écran (voir place() dans le script), et
     plafonnée ici pour les très grands écrans. */
  /* ⚠ Préfixé .rmd-ty — même piège, même correctif que .rmd-ty .rmd-cl__row.
     La liste est un <ul> et les options des <li> : la remise à zéro
     « .rmd-ty ul,.rmd-ty li{margin:0;padding:0} » (ligne 42) vaut une classe
     PLUS un élément, elle battait donc .rmd-sel__list, qui n'a qu'une classe.
     Résultat : panneau et options sans aucun padding, texte collé au bord et
     lignes tassées. Le bouton, lui, gardait le sien — la remise à zéro ne liste
     pas <button>. Sans le préfixe, ce bloc se fait à nouveau écraser. */
  .rmd-ty .rmd-sel__list{position:absolute;z-index:20;top:calc(100% + 6px);left:0;right:0;
                 max-height:320px;overflow-y:auto;overscroll-behavior:contain;
                 background:#fff;padding:5px;
                 border:1px solid var(--rmd-bord);border-radius:12px;
                 box-shadow:0 18px 40px -16px rgba(4,17,53,.28);
                 scrollbar-width:thin;scrollbar-color:#CBD2E0 transparent;}

  /* Ouverture vers le haut quand le bas manque de place : sans ça, la liste du
     dernier champ sortait sous la carte. */
  /* Préfixé .rmd-ty comme la règle de base juste au-dessus : à (0,1,0) son
     top:auto perdait contre le top de .rmd-ty .rmd-sel__list (0,2,0) — la
     liste retournée gardait les DEUX ancrages et s'écrasait à ~12px de haut.
     C'est le « dropdown invisible » du 06/08. */
  .rmd-ty .rmd-sel__list--up{top:auto;bottom:calc(100% + 6px);}

  .rmd-sel__list::-webkit-scrollbar{width:10px;}

  .rmd-sel__list::-webkit-scrollbar-track{background:transparent;}

  .rmd-sel__list::-webkit-scrollbar-thumb{background:#CBD2E0;border-radius:999px;
                 border:3px solid #fff;background-clip:padding-box;}

  .rmd-sel__list[hidden]{display:none;}

  /* Préfixé pour la même raison que .rmd-sel__list juste au-dessus.
     9px et non 9px 11px : le texte de l'option se cale alors exactement sur
     celui du bouton — bordure 1 + padding 5 de la liste + 9 ici = 15 px, soit
     la bordure 1 + les 14 px du bouton. Ouvrir la liste ne décale plus le mot. */
  .rmd-ty .rmd-sel__opt{display:flex;align-items:center;
                font-size:14px;line-height:var(--rmd-lh-title);color:var(--rmd-ink);padding:9px;
                border-radius:8px;cursor:pointer;}

  /* ═══ DRAPEAU + SYMBOLE ═════════════════════════════════════════════════
     Le liseré n'est pas décoratif : le drapeau américain a le bord blanc, et
     sans lui il se dissout dans le fond blanc de la liste. 2px de rayon pour
     ne pas avoir l'air d'un carré collé.
     display:inline-block plutôt que flex sur .rmd-sel__val : ce conteneur
     porte text-overflow:ellipsis, qui ne fonctionne pas sur un flex — les
     quatre autres sélecteurs, plus longs, en dépendent. */
  /* ⚠ Préfixé .rmd-ty, et c'est indispensable : la règle globale
     « .rmd-ty img,.rmd-ty svg{display:block} » vaut (0,1,1) et écrasait
     display:inline-block posé sur une classe seule (0,1,0). Le drapeau passait
     donc en bloc et prenait SA PROPRE LIGNE — dans le bouton, la vignette
     s'affichait au-dessus du libellé et le contrôle doublait de hauteur.
     Troisième fois que cette remise à zéro gagne dans ce fichier, après
     .rmd-fm__note et .rmd-fm__legend : ici, tout ce qui met en forme un p, un
     ul, un legend, une img ou un svg se préfixe .rmd-ty. */
  .rmd-ty .rmd-sel__flag{display:inline-block;width:20px;height:14px;flex:none;
                 margin-right:9px;vertical-align:-2px;border-radius:2px;
                 box-shadow:0 0 0 1px rgba(4,17,53,.12);}
  .rmd-sel__sym{margin-left:8px;color:var(--rmd-slight);}
  .rmd-sel__opt .rmd-sel__sym{margin-left:auto;padding-left:12px;}
  /* Le symbole vit dans la LISTE, pas dans le bouton fermé. Mesuré : drapeau +
     « MAD » + « DH » + le chevron réclament 88px dans une case qui en offre 65,
     et le libellé se coupait en « MA… ». Élargir la colonne n'était pas la
     solution : à 390px elle prend sa largeur sur les tranches, et
     « 200 000 – 500 000 MAD » se serait coupé à son tour — on aurait déplacé
     la troncature sur le champ le plus important des deux.
     Aucune information perdue : le symbole a fait son travail au moment du
     choix, le code ISO ne se confond avec rien, et la tranche affichée juste à
     côté porte déjà « € » ou « MAD ». */
  .rmd-sel__val .rmd-sel__sym{display:none;}

  .rmd-sel__opt.is-active{background:var(--rmd-purpsoft);}

  .rmd-sel__opt[aria-selected="true"]{color:var(--rmd-purp);font-weight:500;}

  .rmd-fm__f.has-err .rmd-sel__btn{border-color:var(--rmd-redder);box-shadow:0 0 0 3px rgba(228,0,77,.10);}


  /* 1,5 → 1,65 : c'est la mention la plus dense de la carte, elle fait 3 à 4
     lignes, et 1,5 est le plancher d'accessibilité — pas une cible. */
  .rmd-fm__consent{display:flex;align-items:flex-start;gap:10px;font-size:12.5px;line-height:var(--rmd-lh-body);
                   color:var(--rmd-slight);cursor:pointer;}

  .rmd-fm__consent input{margin-top:2px;width:16px;height:16px;flex:none;accent-color:var(--rmd-purp);}

  .rmd-fm__consent a{color:var(--rmd-purp);}


  /* ── Actions ───────────────────────────────────────────────────────────── */
  /* Le bouton fait la largeur des champs. C'est ce que fait déjà .btn-cta dans
     le menu mobile de mariner-case-study-seo.html : posé dans une pile, il
     s'étire sur toute la largeur et monte à 54 px de haut ; il n'est en largeur
     automatique que dans l'en-tête, où il est en ligne. Ici on est dans une
     pile, donc largeur pleine.
     Avant, un bouton de 160 px sous des champs de 480 px cassait le seul
     alignement vertical de la carte : le bloc se lisait comme un formulaire
     suivi d'un élément étranger.
     « Retour » passe sous le bouton principal et non à côté : ainsi la largeur
     du bouton principal ne change pas d'une étape à l'autre. */
  /* Le bloc de boutons est borné comme les champs : le bouton principal fait
     donc exactement leur largeur, et « Retour » se centre sous lui et non au
     milieu de la carte. */
  /* 8px collait le bouton au dernier champ, alors que les champs respirent à
     18 entre eux : le bouton se lisait comme un quatrième champ. 26px le
     détache du groupe sans ouvrir un trou. */
  .rmd-fm__acts{display:flex;flex-direction:column;gap:8px;margin-top:26px;}

  .rmd-fm__acts[hidden]{display:none;}

  .btn-cta{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;
           gap:10px;width:100%;min-height:48px;background-image:linear-gradient(90deg,#D7045A 50%,#FC8831 100%);
           color:#fff;font:inherit;font-size:15px;font-weight:500;border:0;cursor:pointer;
           padding:11px 26px;border-radius:10px;box-shadow:var(--rmd-shadow-card);}

  .btn-cta::before{content:'';position:absolute;top:0;left:-75%;width:50%;height:100%;
           background:linear-gradient(120deg,transparent,rgba(255,255,255,.45),transparent);
           transform:skewX(-20deg);animation:ctaShine 3s ease-in-out infinite;}

  @keyframes ctaShine{0%{left:-75%;}
25%{left:125%;}
100%{left:125%;}
}

  .btn-back{align-self:center;display:inline-flex;align-items:center;gap:7px;background:none;border:0;
            cursor:pointer;font:inherit;font-size:13.5px;font-weight:500;color:var(--rmd-slight);
            padding:8px 10px;border-radius:8px;}

  .btn-back:hover{color:var(--rmd-ink);}

  .btn-back:focus-visible{outline:2px solid var(--rmd-purp);outline-offset:2px;}

  .btn-back[hidden]{display:none;}


  /* ── Confirmation ──────────────────────────────────────────────────────── */
  .rmd-fm__done{display:none;flex-direction:column;align-items:center;text-align:center;gap:12px;
                padding:24px 4px 10px;}

  .rmd-fm__done.is-on{display:flex;}

  .rmd-fm__tick{display:flex;align-items:center;justify-content:center;width:52px;height:52px;
                border-radius:999px;background:rgba(22,179,100,.12);color:var(--rmd-win);}

  .rmd-fm__tick svg{width:26px;height:26px;}

  .rmd-fm__donet{font-size:18px;font-weight:600;color:var(--rmd-ink);}

  .rmd-fm__doned{font-size:14px;color:var(--rmd-slight);max-width:340px;text-wrap:pretty;}

  /* Bouton secondaire : blanc bordé, même rayon et même hauteur que les champs.
     Il ne prend pas la largeur pleine, contrairement au bouton principal — ce
     n'est pas l'action attendue à cet endroit, seulement une porte de sortie. */
  .btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:9px;margin-top:6px;
             background:#fff;border:1px solid var(--rmd-bord);border-radius:10px;cursor:pointer;
             font:inherit;font-size:14px;font-weight:500;color:var(--rmd-ink);
             padding:12px 22px;min-height:46px;box-shadow:var(--rmd-shadow-card);
             transition:border-color .2s ease, transform .2s ease;}

  .btn-ghost:hover{border-color:var(--rmd-purp);transform:translateY(-1px);}

  .btn-ghost:focus-visible{outline:2px solid var(--rmd-purp);outline-offset:2px;}

  .btn-ghost svg{width:14px;height:14px;flex:none;}


  /* ═══ §11 — CE QUE VAUT L'AUDIT (guide UX §11.A), 10/08 ═════════════════════
     Le formulaire demandait sept informations — dont un budget — et n'offrait
     en retour qu'un intitulé. On met en face la liste de ce qu'on donne, avec
     un prix par ligne : « gratuit » est un mot vague, une liste chiffrée
     s'évalue.
     La boîte est celle de rhillane.com/lp-creation-site-web-maroc, reprise au
     pixel : un conteneur qui porte le dégradé de marque en fond avec 2 px de
     padding, et une carte blanche à rayon 12 posée dessus — le dégradé ne
     ressort que sur le liseré. Même technique de signature que le survol des
     cartes d'études de cas, jouée ici en permanence.
     Le total vit dans la pastille du titre (purpsoft/purp), pas dans une ligne
     barrée en bas : c'est la convention déjà en production. */
  .rmd-fm__stack{width:100%;max-width:544px;border-radius:14px;padding:2px;
                 box-shadow:var(--rmd-shadow-card);
                 background-image:linear-gradient(155deg,#3943FF 58%,#E4004D 85%,#FA9329 100%);}
  .rmd-fm__stackin{border-radius:12px;background:#fff;padding:24px;}
  .rmd-fm__stackh{display:flex;align-items:center;justify-content:space-between;
                  gap:12px;margin-bottom:16px;}
  /* 1,45 et non 1,35 : sur téléphone le titre passe à deux lignes. */
  .rmd-ty .rmd-fm__stackt{font-size:15px;font-weight:600;line-height:var(--rmd-lh-title);color:var(--rmd-ink);}
  .rmd-fm__stackb{flex:none;white-space:nowrap;border-radius:999px;
                  background:var(--rmd-purpsoft);padding:4px 12px;
                  font-size:12px;font-weight:600;color:var(--rmd-purp);}
  /* 12 → 15 : deux lignes de la liste passent à deux lignes de texte, et à
     1,65 d'interligne un écart de 12 ne se distinguait plus du retour à la
     ligne interne. L'écart entre entrées doit rester supérieur à l'écart
     entre lignes d'une même entrée, sinon la liste se lit comme un pavé. */
  .rmd-ty .rmd-fm__stackl{display:flex;flex-direction:column;gap:15px;
                  font-size:13.5px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);}
  .rmd-fm__stackl li{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;}
  .rmd-fm__stackl strong{font-weight:600;color:var(--rmd-ink);}
  .rmd-fm__stackv{flex:none;font-size:13px;color:var(--rmd-ink);
                  font-variant-numeric:tabular-nums;}

  /* ═══ §11.D — CHAMPS OBLIGATOIRES ═══════════════════════════════════════════
     L'astérisque par défaut est trop petit pour être perçu : il est porté à la
     taille du libellé, en --rmd-redder (#E4004D, 4,9:1 sur blanc). Il est
     aria-hidden dans le balisage — l'information passe déjà par
     `required` + `aria-required`, et un lecteur d'écran qui annonce
     « étoile » n'apprend rien à personne. */
  .rmd-fm__req{color:var(--rmd-redder);font-size:1em;line-height:1;}
  /* Préfixé .rmd-ty : la remise à zéro `.rmd-ty p{margin:0}` vaut (0,1,1) et
     bat une classe seule (0,1,0) — la marge basse était avalée et la légende
     collait au libellé du premier champ. Même piège que .rmd-oc__body. */
  .rmd-ty .rmd-fm__note{font-size:12px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);
                margin-bottom:18px;}
  .rmd-fm__note b{color:var(--rmd-redder);font-weight:600;}

  /* ═══ §11.C — DEVISE ════════════════════════════════════════════════════════
     Deux contrôles côte à côte : la devise à gauche en largeur fixe, les
     tranches à droite. Les tranches se RECALCULENT au changement de devise —
     réétiqueter « 40 000 MAD » en « 40 000 € » multiplierait par dix le budget
     annoncé et fausserait toute la qualification. */
  /* 88 -> 116px : le drapeau (20) + la marge (9) + « MAD » + le chevron ne
     tenaient plus dans 88. Et la liste, calée sur left:0/right:0, héritait de
     cette largeur : le symbole s'y serait écrasé. D'où le min-width. */
  .rmd-fm__cur{display:grid;grid-template-columns:116px 1fr;gap:10px;align-items:start;}
  .rmd-fm__cur .rmd-sel__list{min-width:172px;}
  /* Sous 640px la carte n'est plus à sa largeur maximale : les deux contrôles
     se partagent ~282px, il reste 88px utiles aux tranches, et
     « 200 000 – 500 000 MAD » se coupait à « 200 000 – 500… ». On tronquait le
     champ qui QUALIFIE le prospect pour garder une devise de trois lettres à
     côté. Ils s'empilent — même arbitrage que .rmd-fm__two pour les paires
     effectif/budget et email/téléphone. */
  @media(max-width:640px){
    .rmd-fm__cur{grid-template-columns:1fr;gap:12px;}
    .rmd-fm__cur .rmd-sel__list{min-width:0;}
  }
  /* À 320px il manquait encore 7px à « 200 000 – 500 000 MAD » : la passe
     téléphone monte les contrôles à 16px sous 768 (garde anti-zoom iOS), et le
     libellé grandit avec. On ne touche PAS à cette taille — c'est elle qui
     empêche l'iPhone de zoomer et de ne plus dézoomer. Les 8px manquants sont
     repris sur le rembourrage latéral du bouton, qui n'a aucun effet de bord. */
  @media(max-width:360px){
    .rmd-sel__btn{padding-left:10px;padding-right:10px;}
  }
  .rmd-fm__cur > *{min-width:0;}

  @media(prefers-reduced-motion:reduce){
    .btn-cta::before{animation:none;}

    .rmd-fm__progi,.rmd-sel__chev{transition:none;}

  }
  /* ═══ Passe téléphone du fichier feedback-rework, repliée ici avec sa section (10/08). ═══ */
  @media(max-width:640px){.rmd-fm__hint,.rmd-fm__err,.rmd-fm__opt,.rmd-fm__count{font-size:12.5px;}}
  @media(max-width:767px){.rmd-fm__consent input{width:20px;height:20px;margin-top:0;}}

  /* ═══════════════════════════════════════════════════════════════════════════
     LE DÉFI v2 — repris de defi/section-defi-v2.html.
     ⚠ .rmd-h2 et .rmd-lead étaient définis différemment ici et sur la page
     (h2 : 26-38px contre 30-44px ; lead : 15.5px/560 contre clamp/520). La
     section contact utilise .rmd-h2 et le hero utilise .rmd-lead : repris tels
     quels, ils passaient après et les auraient rétrécis. Portés sur .rmd-d2.
     Chemin logo : ../clients → ./clients (un niveau de moins depuis la racine).
     ═══════════════════════════════════════════════════════════════════════════ */

  /* ═══════════════════════════════════════════════════════════════════════════
     SECTION « LE DÉFI » — v2 — Mariner Underwear

     v1 (section-defi.html) posait une fiche client en colonne de gauche et
     trois lignes de paragraphes à droite. Deux reproches, tranchés le 05/08 :
     trop de texte, et la fiche pesait trop lourd.

     ── Ce que v2 change ───────────────────────────────────────────────────────
     1. LA FICHE DISPARAÎT. Elle était une carte blanche + un aplat sombre +
        une ombre, soit trois objets empilés pour porter quatre informations
        qui tiennent sur une ligne. Elle redevient ce qu'elle est : une ligne
        de métadonnées sous le titre, logo compris.
     2. LES TROIS CHIFFRES PASSENT EN BANDEAU. Une bande de trois cellules
        séparées par des filets verticaux, au lieu de trois lignes empilées.
        Le lecteur les compare d'un coup d'œil au lieu de les lire l'un après
        l'autre.
     3. LE TEXTE TOMBE À UNE LIGNE PAR CHIFFRE. v1 en donnait deux à trois.
        La section n'a qu'un seul travail : donner la mesure du point de
        départ. Le récit détaillé, c'est la section « approche » qui le porte.

     Résultat : plus de carte, plus de colonne, une seule mesure de lecture.

     ── Pourquoi le rouge ──────────────────────────────────────────────────────
     #E4004D est déjà la couleur du problème dans les études de cas actuelles
     (cartes rouges au départ, vertes à l'arrivée). Le lecteur qui descend la
     page voit le rouge devenir vert.

     ── Provenance des chiffres (aucun chiffre inventé) ────────────────────────
     Section 4 « Contexte & défi » de ../inc/seeding.php → rmd_seed_sections_fr() :
       · position 49, page 5, sur « caleçon de nuit homme » (Ahrefs, août 2024)
       · Domain Rating 25 (Ahrefs) avant intervention
       · Amazon, Calvin Klein, Dim, Hugo Boss
     Le Domain Rating est décrit comme ce qu'il est — la force du profil de
     liens mesurée par Ahrefs — et non comme « la confiance que Google accorde
     au site » : c'est une métrique Ahrefs, que Google ne publie ni n'utilise.
     La ligne de source n'attribue à Ahrefs que ce qu'Ahrefs mesure ; les quatre
     concurrents sont une observation de SERP, pas un relevé.

     ── Identité graphique ─────────────────────────────────────────────────────
     Jetons, Poppins, .rmd-pill, .rmd-grad-a et le fond en courbes à 6 % viennent
     de section-defi.html / index-EN.html. Fond blanc, comme « Notre approche ».
     ═══════════════════════════════════════════════════════════════════════════ */
  /* Jetons .rmd-ty : déclaration UNIQUE en tête de ce bloc (portage 12/08).
     La maquette les redéclarait ici (sous-ensemble identique, vérifié) ;
     une seule source désormais. */



  /* Blanc depuis le passage de la section au marine. Le corps de texte reste
     en blanc à 72 % : le titre doit rester le seul élément à pleine intensité. */
  .rmd-d2 .rmd-h2{font-weight:500;font-size:clamp(26px,3.2vw,38px);line-height:var(--rmd-lh-head);
          letter-spacing:-.03em;color:var(--rmd-ink);text-wrap:balance;}

  /* Le dégradé de « Première place » (.rmd-p1 .section-title .now), repris ici
     mot pour mot — c'est déjà ce qui a été fait sur le titre de « Résultats ».
     Les trois sections mettent en avant leur phrase forte : elles ne peuvent
     pas le faire dans trois couleurs différentes.

     ⚠ Surcharge SCOPÉE, jamais une retouche de .rmd-grad-a : cette classe sert
     encore au contact et à « autres cas ». Seul background-image est redéclaré,
     le background-clip et le color:transparent viennent de .rmd-grad-a. */
  .rmd-d2 .rmd-h2 .rmd-grad-a{
    background-image:var(--rmd-grad-warm);}

  /* Le chapô était tombé en passant de v1 à v2 : la section enchaînait le titre
     et le bandeau sans dire ce que les trois chiffres viennent démontrer.
     Volontairement court — deux phrases, pas le paragraphe de v1. */
  /* 16px, pas 15.5 : « Le défi » et « Notre approche » sont le même niveau
     éditorial, leurs leads doivent être identiques (le commentaire d'approche
     le dit lui-même). */
  .rmd-d2 .rmd-lead{font-size:16px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);
            max-width:560px;text-wrap:pretty;}


  /* ── Coque ─────────────────────────────────────────────────────────────── */
  /* Fond blanc + courbes de marque, exactement le traitement du hero —
     demande Ayoub 06/08 (était un aplat --rmd-nuk). */
  /* Blanc. Le marine essayé puis retiré le 10/08 — anciennement (même --rmd-ink) : la page alterne déjà
     clair / sombre, cette section reprend le sombre existant plutôt que d'en
     inventer un. Elle tombe entre deux sections blanches, donc la rupture
     marque le début du récit sans qu'aucun séparateur soit nécessaire. */
  .rmd-d2{position:relative;overflow:hidden;background:#fff;}
  /* .rmd-d2__bg (courbes de marque à 6 %) retirée le 10/08 avec son SVG,
     demande Ayoub : blanc pur. Le commentaire au dessus garde l'historique. */


.rmd-d2 .rmd-d2__inner{position:relative;max-width:var(--rmd-maxw);margin:0 auto;padding:56px 24px;}

  @media(min-width:768px){.rmd-d2 .rmd-d2__inner{padding:76px 24px;}
}


.rmd-d2 .rmd-d2__head{display:flex;flex-direction:column;align-items:flex-start;gap:16px;max-width:720px;}


  /* ── Les deux cercles ────────────────────────────────────────────────────
     Historique des retraits, pour ne pas rouvrir des pistes déjà fermées :
     fiche client (__meta / __logo / __logotxt / __facts), tableau avant-après
     (__cmp / __when / __corner / __what / __why) et ses chiffres (__v /
     __hash / __was / __now), clôture encadrée (__turn), trois paragraphes puis
     un seul (__text), trois cartes (__cards / __card / __ct / __cd).

     ── L'accent ──────────────────────────────────────────────────────────────
     .rmd-d2__hi (orange plein) est retirée avec le fond marine : sur blanc,
     --rmd-orng ne donne que 2,26:1, sous le seuil de 3:1 valable même pour
     du grand texte. Le titre reprend .rmd-grad-a, le dégradé des autres
     titres de la page sur fond clair. L'orange reste sur la pastille et le
     cercle 2 — décoratif ou posé sur son propre aplat, deux cas où le
     rapport de contraste ne s'applique pas. */

  /* ── Le plateau ───────────────────────────────────────────────────────────
     aspect-ratio 2/1 n'est pas décoratif, c'est lui qui règle le recoupement.
     Chaque cercle a pour diamètre la HAUTEUR du plateau, et est décalé de 4 %
     de sa LARGEUR. Recouvrement = 2iR + 2 − R, soit 0,16h ici (61px pour un
     plateau de 760). Le seuil est R < 2/(1−2i) = 2,17 : au delà les cercles se
     décollent tout à fait.

     Était à 1,9 → 0,25h de recouvrement, jugé trop fusionné le 10/08. Les deux
     disques doivent se croiser, pas se chevaucher.

     ⚠ max-width 760px, et c'est la vraie contrainte. Sans elle le plateau
     prenait les 1200px du conteneur, donc 631px de haut : deux cercles de la
     hauteur d'un écran pour deux phrases, et une section deux fois plus haute
     que ses voisines. À 760 il fait 400px de haut, l'ordre de grandeur des
     autres blocs de la page. Le ratio règle le recoupement, la largeur règle
     la taille — ce sont deux réglages distincts, ne pas corriger l'un par
     l'autre.

     Centré alors que le titre est à gauche : c'est une figure, pas du texte.
     Aligné à gauche il laissait 400px de vide à droite.

     ── Mobile (10/08) ────────────────────────────────────────────────────────
     Sous 860px la figure ne disparaît plus, elle BASCULE : le plateau passe en
     1/2 au lieu de 2/1 et les deux cercles s'empilent. Avant, .rmd-d2__rings
     était en display:none et le téléphone ne recevait que deux paragraphes
     séparés d'un filet — tout le travail de la section était réservé au
     bureau, alors que c'est le mobile qui fait le gros du trafic.

     320px de large, donc 640px de haut : un cercle par écran de téléphone,
     dans l'ordre de grandeur des autres blocs. Monter cette largeur allonge la
     section au carré, c'est le seul réglage à surveiller ici. */
.rmd-d2 .rmd-d2__viz{position:relative;display:block;width:100%;
                aspect-ratio:1/2;max-width:320px;margin:28px auto 0;}

  @media(min-width:860px){
    .rmd-d2 .rmd-d2__viz{aspect-ratio:2/1;max-width:760px;margin:36px auto 0;}
  }

  /* ── Les cercles, en SVG ─────────────────────────────────────────────────
     Ils étaient en <div> + border-radius:50 %. Le défaut n'était pas la forme
     mais le fait qu'un border trace le cercle ENTIER : les deux arcs se
     croisaient au milieu du plateau et couraient derrière le texte. Aucun
     réglage de border ne coupe un arc.

     Chaque <circle> est donc masqué par l'autre disque (mask = rectangle blanc
     moins le disque voisin). Il ne reste que le contour extérieur de la
     réunion des deux, les tracés s'arrêtant net sur les jonctions — que les
     gouttes viennent coiffer.

     vector-effect:non-scaling-stroke : sans lui le filet grossit avec le SVG
     et passerait à ~1,6px sur grand écran.

     ⚠ AUCUNE ROTATION CSS ICI — voir l'avertissement dans le markup. Le premier
     jet du mobile pivotait la balise <svg> avec transform:rotate(90deg) et un
     jeu de pourcentages (200 % / 50 % / left:-50 %) pour lui donner la boîte
     couchée. Le calcul était juste, la balise ne l'était pas : sur un <svg>
     racine, transform-origin se résout sur le viewBox, en unités utilisateur,
     pas sur la boîte CSS. La figure sortait décalée et rognée hors de la page.

     Il ne reste donc que deux <svg> superposés au plateau, sans transform,
     sans offset négatif : celui dont le viewBox correspond à l'orientation
     s'affiche, l'autre est en display:none. Le viewBox fait tout le travail.
     (Le partage du tracé via <defs> + <use> a aussi été essayé et retiré :
     les clones d'un <use> échappent à la feuille de style, tout sortait en
     noir plein. La géométrie est donc DUPLIQUÉE dans les deux <svg> — toute
     retouche se fait dans les deux, voir le commentaire du markup.) */
.rmd-d2 .rmd-d2__rings{display:block;position:absolute;top:0;left:0;
                width:100%;height:100%;pointer-events:none;}
.rmd-d2 .rmd-d2__rings--h{display:none;}

  @media(min-width:860px){
    .rmd-d2 .rmd-d2__rings--v{display:none;}
    .rmd-d2 .rmd-d2__rings--h{display:block;}
  }

  /* Hors media query : le tracé est le même dans les deux orientations.
     2px : à 1px il disparaissait sur un cercle de 380px de diamètre — un filet
     de hairline convient à une carte, pas à une forme de cette taille.
     non-scaling-stroke garde ces 2px constants quelle que soit la largeur du
     plateau ; sans lui le trait maigrirait sur mobile en même temps que le
     SVG (0,8px à 320px de large, soit invisible). */
.rmd-d2 .rmd-d2__arc{fill:none;stroke-width:2;vector-effect:non-scaling-stroke;}
.rmd-d2 .rmd-d2__arc--a{stroke:var(--rmd-bord);}
.rmd-d2 .rmd-d2__arc--b{stroke:var(--rmd-orng);}

  /* ── Les gouttes ──────────────────────────────────────────────────────────
     Ce ne sont plus des <span> mais deux <path> du même SVG que les arcs — la
     géométrie est dans le markup, ici il ne reste que la couleur. Voir le
     commentaire du SVG pour le pourquoi (un seul repère au lieu de deux).

     Côté 76 dans le viewBox, soit 10 % de la largeur du plateau : la goutte
     s'arrête à x=418 et le bloc « Problème 2 » commence à 433. 15px d'écart,
     mesurés, pas estimés. Élargir la goutte ou le texte referme cet écart. */
  /* stroke:none explicite : les gouttes sont des aplats. Sans ça elles
     hériteraient d'un éventuel stroke posé plus tard sur le SVG et gagneraient
     un contour de 2px comme les arcs. */
.rmd-d2 .rmd-d2__drop{stroke:none;}
.rmd-d2 .rmd-d2__drop--hot{fill:var(--rmd-orng);}
.rmd-d2 .rmd-d2__drop--mute{fill:var(--rmd-bord);}

  /* Le texte n'est jamais DANS un cercle au sens du flux : il est posé par
     dessus, au centre du disque — dans les deux orientations. 29 % et 71 %
     sont les centres des disques, pas les quarts du plateau : la grille les
     posait à 25 % / 75 %, 30px plus loin, et le texte paraissait fuir vers
     l'extérieur.

     Mobile : même principe, sur l'autre axe. 76 % et non 80 % — le cas serré
     n'est pas le téléphone courant mais l'écran de 320px, où le plateau tombe
     à 272px : « Problème 2 » y prend 4 lignes, soit 138px de haut, et la corde
     du disque à cette hauteur ne fait plus que 234px. À 80 % il ne restait que
     8px de blanc de chaque côté, à 76 % il en reste 14. Élargir ce 76 % ou
     grossir .rmd-d2__pt fait déborder le texte sur le tracé — c'est le couple
     à tester ensemble, jamais l'un seul. */
.rmd-d2 .rmd-d2__prob{position:absolute;z-index:2;left:50%;width:76%;
                transform:translate(-50%,-50%);}
.rmd-d2 .rmd-d2__prob--a{top:29%;}
.rmd-d2 .rmd-d2__prob--b{top:71%;}

  @media(min-width:860px){
    /* width:28 % laisse ~75px de blanc de chaque côté à l'intérieur du disque,
       la corde disponible à cette hauteur étant bien plus large. */
    /* 10/08 (demande Ayoub) : les deux blocs ne sont PLUS centrés chacun sur
       le milieu de son disque — les textes n'ayant pas le même nombre de
       lignes, les deux pastilles « Problème » partaient à des hauteurs
       différentes et l'œil le lisait comme un défaut d'alignement. Les blocs
       sont désormais accrochés par le HAUT à la même ligne (translate Y = 0),
       posée à 25 % : c'est la hauteur qui centre le bloc le plus haut
       (Problème 2, ~190px depuis le passage du texte à 17px) dans son disque
       de 380. Le bloc court finit juste plus haut, ce qui ne se voit pas ;
       les pastilles, elles, sont à niveau.
       ⚠ 25 % dépend de la longueur ET du corps du texte de Problème 2 —
       toucher l'un des deux demande de recaler cette valeur. */
    .rmd-d2 .rmd-d2__prob{width:28%;transform:translate(-50%,0);}
    .rmd-d2 .rmd-d2__prob--a{top:25%;left:29%;}
    .rmd-d2 .rmd-d2__prob--b{top:25%;left:71%;}
  }

  /* Pastilles : la 1 en verre dépoli sur le marine, la 2 en orange plein avec
     le texte en marine (8,2:1 dans les deux sens). C'est la seule différence
     entre les deux problèmes — même taille, même graisse, même rayon. */
.rmd-d2 .rmd-d2__chip{display:inline-flex;align-items:center;padding:7px 15px;
                border-radius:999px;font-size:12.5px;font-weight:600;
                letter-spacing:-.01em;background:rgba(4,17,53,.07);color:var(--rmd-ink);}
.rmd-d2 .rmd-d2__chip--hot{background:var(--rmd-orng);color:var(--rmd-ink);}

/* 15.5/1.65 → 17/1.7 le 10/08 (demande Ayoub) : dans un disque, le texte n'a
   pas de bloc voisin pour donner l'échelle et paraissait plus petit qu'il
   n'était. 17px + interligne 1.7 le met au niveau du récit de la preuve.
   Conséquence géométrique : Problème 2 passe à ~190px de haut — l'ancre
   commune des deux blocs descend de 27 % à 25 % pour le garder centré. */
.rmd-d2 .rmd-d2__pt{margin-top:14px;font-size:17px;line-height:var(--rmd-lh-body);
                color:var(--rmd-slight);text-wrap:pretty;}
.rmd-d2 .rmd-d2__pt strong{color:var(--rmd-ink);font-weight:600;}

  /* Sur mobile le texte est enfermé dans un disque, il ne peut plus s'allonger
     librement : chaque ligne gagnée le pousse vers le tracé. 14,5/1,6 tient la
     phrase la plus longue (« Problème 2 », 101 signes) en 4 lignes, soit 138px
     de haut chip comprise, pour une corde de 234px sur le plus petit écran. */
  @media(max-width:859px){
    .rmd-d2 .rmd-d2__pt{margin-top:12px;font-size:14.5px;line-height:var(--rmd-lh-body);}
    .rmd-d2 .rmd-d2__chip{padding:6px 13px;font-size:12px;}
  }

  /* L'issue, hors plateau : dans un cercle elle deviendrait un troisième
     problème. Posée dessous, elle referme la section. */
/* 15.5 → 17px avec les textes des disques : même niveau de lecture. */
/* Centrée le 11/08 : alignée à gauche sous un plateau centré, elle prenait le
   bord du titre et se lisait comme un paragraphe d'en-tête de plus.
   ⚠ text-align:center est posé ici, il n'est jamais hérité : .rmd-ty force
   text-align:left sur toute la section. Les marges auto centrent la boîte de
   62ch, text-align centre les lignes dedans — il faut les deux. */
.rmd-d2 .rmd-d2__out{margin:34px auto 0;font-size:17px;line-height:var(--rmd-lh-body);
                color:var(--rmd-slight);max-width:62ch;text-wrap:pretty;text-align:center;}
.rmd-d2 .rmd-d2__out strong{color:var(--rmd-ink);font-weight:600;}

  /* .rmd-d2__src retirée le 10/08 avec sa ligne de source. */
  /* ═══ OUTILS : bande retirée le 10/08 (validation Ayoub) — la nouvelle
     section « Notre méthode » embarque les mêmes logos outils. ═══ */
  /* ═══════════════════════════════════════════════════════════════════════════
     PREUVE v2 — repris de preuve/section-preuve-v2.html, EN PLUS de la v1 qui
     est déjà sur cette page.
     ⚠ v1 et v2 sont deux versions d'une même section : mêmes classes, mêmes
     id. Cohabiter tel quel donnait 4 id en double (lb, lbCap, lbImg, pvTitle),
     10 règles en conflit et deux lightbox liées au même #lb — la seconde aurait
     piloté les images de la première.
     v2 est donc entièrement préfixée : .rmd-p1 → .rmd-p2, .lb* → .p2lb*,
     id → p2*, @keyframes lbIn → p2lbIn. La lightbox vit hors de la section,
     elle est donc renommée et non portée sur un parent.
     ═══════════════════════════════════════════════════════════════════════════ */

  /* ═══════════════════════════════════════════════════════════════════════════
     SECTION PREUVE — v2

     ── Ce qui change par rapport à la v1 ─────────────────────────────────────
     La v1 montrait une requête : « homewear homme », premier résultat, le
     concurrent estompé dessous. C'est une preuve, mais une seule — et une seule
     capture se lit toujours comme un coup de chance bien choisi.
     La v2 en montre quatre. Quatre requêtes, quatre captures, quatre fois la
     première position. À partir de trois, le lecteur arrête de chercher
     l'exception et commence à voir un système. C'est tout l'argument de la
     section, et il se fait sans une ligne de texte en plus.

     Retiré au passage : l'en-tête Google reconstitué en haut de la scène. Les
     quatre captures ne viennent pas de la même session — deux ont la barre
     d'onglets et un carrousel sponsorisé, deux non, et les largeurs de champ de
     recherche ne tombent pas pareil. Un en-tête unique aurait donc menti sur
     trois cartes sur quatre. La requête est écrite en toutes lettres au-dessus
     de chaque capture : c'est plus honnête et ça se lit mieux.

     ── La SERP est DÉCOUPÉE, pas redessinée ─────────────────────────────────
     Un premier essai redessinait la page de résultats en HTML : logo composé
     lettre à lettre, faux champ de recherche, faux résultats. Le rendu était
     approximatif — la typographie de Google n'est pas la nôtre, les gris ne
     tombaient pas juste, et l'ensemble avait l'air d'une imitation. Une
     imitation ne prouve rien.
     Ici chaque carte porte une découpe de la capture d'origine :
         serp-q1-homewear.png  1267 × 220   ← assets/serp-homewear.png
         serp-q2-slip.png      1213 × 205   ← assets/serp-slip-taille-haute.png
         serp-q3-calecon.png   1336 × 365   ← assets/serp-calecon.png
         serp-q4-shortys.png   1346 × 285   ← assets/serp-shortys.png
     Découpées à la résolution native (captures retina), donc nettes une fois
     réduites. Police, couleurs, favicon, fil d'URL, vignette produit : tout
     vient de Google. La seule chose que la page ajoute, c'est la pastille verte
     de rang à gauche du titre.

     ── Pourquoi les quatre découpes n'ont pas la même largeur ────────────────
     Les captures n'ont pas le même zoom (1704 à 2218 px de large pour la même
     colonne de résultats). Découper chacune à ses bornes naturelles puis les
     afficher toutes à la largeur de la carte donnerait des tailles de texte
     différentes d'une carte à l'autre. Les largeurs de découpe sont donc
     proportionnelles au zoom de chaque capture : réduites à la même largeur,
     les quatre textes retombent entre 15 et 17 px. L'écart résiduel (~10 %) est
     sous le seuil visible.

     ── Ce que le découpage retire ────────────────────────────────────────────
     Les captures d'origine font ~1 640 px de haut : carrousel sponsorisé,
     filtres, « Autres questions », résultats suivants. N'en garder que la ligne
     gagnante, c'est montrer ce qui compte sans faire défiler. Chaque capture
     reste cliquable : la découpe est un lien vers le fichier entier, pour qui
     veut vérifier le contexte.

     ── Provenance des chiffres ───────────────────────────────────────────────
     Aucun chiffre inventé (new-design-ayoub/mariner/MarinaSection.md) :
       « homewear homme » 1re position                       capture
       Amazon, Calvin Klein, Dim, Hugo Boss                  section 4
     Les concurrents cités carte par carte (Tommy Hilfiger, Amazon, Arthur,
     Inderwear) sont lus directement dans les captures, au rang qui suit.

     Retirés le 05/08/2026 avec le bloc de clôture : 247/250 et 157 en Top 3
     (section 12), 124 985 € de CA (section 8, GA). Ils vivent dans resultats/ et
     mots-cles/ ; les répéter ici les faisait apparaître deux fois sur la page
     assemblée. Cette section ne montre plus que les quatre captures.

     ⚠ AUCUN VOLUME DE RECHERCHE N'EST AFFICHÉ ICI — et c'est délibéré.
     MarinaSection.md (§2, hero) donne « homewear homme (33 100 rech./mois) ».
     Vérification Ahrefs du 05/08/2026, aucune lecture n'en approche :
         homewear homme     FR 400   ·  global 400  ·  BE 30, tous autres 0
         homewear           FR 300   ·  global 9 300
     Les trois autres requêtes tombent encore plus bas (slip taille haute homme
     100, shortys homme 40, caleçon slip intérieur 0 — ce dernier étant un trou
     de données Ahrefs, pas une absence de demande : la requête a un bloc
     « Autres questions » et arthur.fr s'y bat).
     Publier 33 100 sur une carte, c'est publier un chiffre qu'un prospect
     dément en dix secondes dans Keywords Explorer — sur la seule section de la
     page dont l'argument entier est « vous pouvez vérifier ». Publier 400
     affaiblirait la preuve sans la rendre plus vraie. Donc : pas de volume. La
     section démontre la position et l'adversaire battu, tous deux lisibles dans
     la capture elle-même.
     → À arbitrer côté hero (§2) et §12, qui portent encore le 33 100.

     ── Identité ──────────────────────────────────────────────────────────────
     .rmd-p2 .eyebrow, .section-title/.thin, .section-sub, .rmd-p2, .wrap, .card/.lift,
     .rmd-p2 .kpi-strip, jetons : assets/css/cpt/case_study.css et mockup.css.
     La pastille de rang reprend .real .num (rayon 9, fond vert, chiffre blanc
     en 700), réduite à 28 px pour tenir sur une ligne de titre.
     ═══════════════════════════════════════════════════════════════════════════ */
  /* --sh-lift : fusionné dans le bloc .rmd-case en tête (portage 12/08). */

  .rmd-p2 *,.p2lb *{box-sizing:border-box;}

  .rmd-p2,.p2lb{font-family:'Poppins',ui-sans-serif,system-ui,sans-serif;color:var(--ink);
       background:#fff;-webkit-font-smoothing:antialiased;line-height:var(--rmd-lh-body);}

  /* Le même lilas que « Résultats » juste au-dessus, pour que les deux se
     lisent comme un seul bloc : le chiffre, puis la capture qui le prouve.
     Règle séparée et non fondue dans celle du dessus : .p2lb est la pop-up,
     elle doit rester blanche. --purpsoft est sur .rmd-case, donc c'est exactement
     la valeur que .rmd-rs prend par --rmd-purpsoft (#F3F4FF). */
  /* ⚠ Blanc, et surtout PAS --nuk. .board (le panneau qui tient les quatre
     captures) est lui-même en --nuk : tant que la section l'était aussi, le
     panneau avait exactement la couleur de son propre fond et disparaissait —
     il ne restait que son filet de 1px. Un panneau de la couleur du sol n'est
     plus un panneau, c'est un rectangle vide.

     Le même composant marche dans « Première place » (.scene, mêmes --nuk,
     même filet --bord, même rayon 24) parce que cette section-là est blanche.
     Ici on rétablit le même rapport : sol blanc, panneau teinté.

     Donc : si cette section doit un jour reprendre un fond, il faut donner à
     .board une autre couleur en même temps, sinon le panneau se ré-efface. */
  .rmd-p2{background:#fff;}

  .rmd-p2 :where(h1,h2,h3,p,figure,figcaption){margin:0;}

  /* height:auto est obligatoire ici. Les découpes portent leurs attributs
     width/height (utiles : ils réservent la place avant chargement et évitent
     que la page saute). Mais avec width:100% en CSS et un height="220" en
     attribut, le navigateur applique 220 px de haut à une image affichée sur
     560 px de large : elle s'étire. height:auto rend la main au ratio. */
  .rmd-p2 img,.p2lb img{max-width:100%;display:block;height:auto;}

  .rmd-p2 a{color:inherit;}

  .rmd-p2 :focus-visible,.p2lb :focus-visible{outline:2px solid var(--purp);outline-offset:3px;border-radius:6px;}


  .rmd-p2 .wrap{max-width:1200px;margin:0 auto;padding:0 24px;}

  /* Fond continu avec « Résultats », donc plus de césure à marquer : le padding
     bas de .rmd-rs__inner est passé à 0 et c'est ce padding haut qui fait tout
     l'écart entre les chiffres et les captures. Le bas reste au rythme de la
     page (56 / 76), lui, parce qu'il touche « Contact » et son autre fond. */
  /* Bas de p2 = ecart complet vers le carrousel (qui n'a plus de haut) :
   les deux vivent sous le meme chapeau « Resultats », meme 56/40 que rs -> p2. */
  .rmd-p2{padding-block:40px;}

  @media(min-width:768px){.rmd-p2{padding-block:56px;}
}



  /* margin-top:0 — cette marge décollait le titre de la pastille « La preuve »,
     retirée le 06/08/2026. Sans elle le titre est le premier élément du bloc et
     la marge ne fait plus que creuser le haut de la section. */
  .rmd-p2 .section-title{font-size:38px;font-weight:500;letter-spacing:-.02em;line-height:var(--rmd-lh-head);margin-top:0;}

  .rmd-p2 .section-title .thin{font-weight:300;color:var(--slight);}

  .rmd-p2 .section-sub{font-size:16px;color:var(--slight);margin-top:12px;max-width:600px;line-height:var(--rmd-lh-body);}



  /* ── L'en-tête ─────────────────────────────────────────────────────────────
     Le titre à gauche, la mention de provenance à droite : elle répond à la
     seule objection que soulève une capture d'écran — « c'est retouché ». La
     poser tout de suite, avant les images, coûte une ligne. */
  .pv__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:20px;}

  /* Sans base de flex, le bloc de titre est un enfant flex qui s'étale sur
     toute la ligne et pousse la mention de provenance en dessous. */
  .pv__head > div{flex:1 1 520px;min-width:0;}

  .pv__note{flex:0 0 auto;}

  .pv__note{display:inline-flex;align-items:center;gap:9px;font-size:12.5px;color:var(--slight);
        border:1px solid var(--bord);border-radius:9999px;padding:8px 15px;background:#fff;
        white-space:nowrap;}

  .pv__note::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--green);flex:0 0 auto;}


  /* ── Le tableau de preuves ────────────────────────────────────────────── */
  .board{position:relative;margin-top:34px;background:var(--nuk);border:1px solid var(--bord);
         border-radius:24px;padding:26px;overflow:hidden;}

  /* Une nappe violette très diluée en haut à gauche : elle donne au bloc la
     profondeur d'un écran sans dessiner de cadre de navigateur — un faux cadre
     aurait concurrencé les vraies captures. */
  .board::before{content:'';position:absolute;inset:0;pointer-events:none;
         background:radial-gradient(680px 340px at 8% -10%,rgba(57,67,255,.07),transparent 70%);}

  .board__grid{position:relative;display:grid;grid-template-columns:1fr;gap:18px;}

  @media(min-width:940px){.board__grid{grid-template-columns:1fr 1fr;gap:20px;}
}

  @media(max-width:560px){.board{padding:16px;border-radius:18px;}
}


  /* ── Une carte = une requête ─────────────────────────────────────────────
     display:flex + margin-top:auto sur le pied : les deux cartes d'une même
     ligne font la même hauteur (grille), et l'écart de hauteur entre deux
     découpes part dans le blanc au-dessus du pied plutôt que de décaler les
     lignes de texte. */
  .rmd-p2 .q{display:flex;flex-direction:column;background:#fff;border:1px solid var(--bord);
     border-radius:16px;padding:16px 16px 14px;box-shadow:var(--sh-card);
     transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;}

  .rmd-p2 .q:hover{transform:translateY(-3px);box-shadow:var(--sh-lift);border-color:#DDDFEE;}


  .q__top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:13px;}

  /* .real .num de la charte, réduit de 36 à 28 px pour s'aligner sur une ligne
     de texte plutôt que sur un bloc. */
  .q__rank{display:flex;align-items:center;justify-content:center;flex:0 0 auto;
        width:28px;height:28px;border-radius:9px;background:var(--green);color:#fff;
        font-size:14px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;}

  .q__query{font-size:14.5px;font-weight:500;letter-spacing:-.01em;}


  /* La découpe est un lien vers la capture entière : la preuve se vérifie. */
  .q__shot{position:relative;display:block;border:1px solid #F0F1F6;border-radius:10px;
        overflow:hidden;background:#fff;}

  .q__shot img{width:100%;}

  .q__go{position:absolute;right:9px;bottom:9px;display:inline-flex;align-items:center;gap:6px;
        font-size:11.5px;font-weight:500;color:#fff;background:rgba(4,17,53,.86);
        border-radius:9999px;padding:6px 11px;opacity:0;transform:translateY(4px);
        transition:opacity .22s ease,transform .22s ease;pointer-events:none;}

  .q__shot:hover .q__go,.q__shot:focus-visible .q__go{opacity:1;transform:none;}


  .q__beat{margin-top:auto;padding-top:13px;font-size:12.5px;line-height:var(--rmd-lh-body);color:var(--slight);}

  .q__beat b{color:var(--ink);font-weight:600;}
  /* ── Le favicon du concurrent battu (12/08, demande Ayoub) ─────────────────
     Mêmes fichiers que la ligne de classement de « La preuve » (clients/
     favicon-*.png) : un seul jeu d'icônes pour toute la page.
     18px et non 28 : la légende est en 12,5px, l'icône de la rankline
     accompagne un texte bien plus gros. À 28 elle aurait dominé la phrase.
     ⚠ vertical-align négatif obligatoire : une image inline pose sa base sur
     la ligne d'écriture et flotte au-dessus du texte sans ça. -4px à 18 de
     haut, contre -8px à 28 dans la rankline. Le rapport est le même.
     ⚠ Sélecteur préfixé .q__beat : « .rmd-p2 img{display:block} » vaut plus
     qu'une classe seule et casserait la ligne en deux.
     ── Pourquoi le favicon MARINER ouvre les quatre légendes ─────────────────
     Inderwear et Arthur n'ont de favicon nulle part dans le projet (vérifié
     sur tous les fichiers image). Avec la seule icône du concurrent, deux
     cartes sur quatre en portaient une et deux n'en portaient aucune : à côté
     d'une carte illustrée, une carte nue se lit comme un logo qui n'a pas
     chargé — c'est exactement pour ça que Calvin Klein est sorti de la
     rankline le 12/08.
     Mariner devant « 1re position » règle ça : les QUATRE légendes ouvrent
     sur la même icône, celle du gagnant, et l'icône du battu n'apparaît que
     lorsqu'elle existe. Le rythme est tenu par le client, pas par la
     disponibilité des logos adverses.
     Bonus de sens : l'ancre Mariner sur « 1re position » dit qui est premier
     avant même qu'on lise la phrase.
     Dès que favicon-inderwear.png et favicon-arthur.png existent, les ajouter
     après « devant » sur les cartes 2 et 3. */
  .q__beat .q__ico{display:inline-block;flex:none;width:18px;height:18px;
                vertical-align:-4px;margin-right:6px;object-fit:contain;
                border-radius:50%;}

  /* .capdate est global et vaut 9px de marge, réglés pour « Première place » où
     il suit directement une ligne de texte. Ici il suit un panneau encadré de
     24px de rayon : à 9px il se collait au filet et paraissait en faire partie.
     Seule la marge est reprise — le corps, la couleur et l'interligne restent
     ceux de .capdate, sinon les deux dates ne se ressembleraient plus. */
  .rmd-p2 .capdate{margin-top:18px;}




  /* ═══ POP-UP DE CAPTURE ═══════════════════════════════════════════════════
     La capture entière s'ouvre PAR-DESSUS la page, jamais dans un autre onglet :
     quitter la page pour vérifier une preuve, c'est perdre le lecteur au moment
     précis où il est convaincu.
     Le <a href> est conservé dessous : sans JavaScript le lien fonctionne
     encore, il ouvre simplement le fichier. Le JS ne fait qu'intercepter.
     Les captures font ~1 640 px de haut : la fenêtre les laisse DÉFILER plutôt
     que de les réduire à une vignette illisible.
     Les flèches ◀ ▶ passent d'une requête à l'autre sans refermer — quatre
     preuves se parcourent alors comme une série, ce qui est exactement
     l'argument de la section. */
  .p2lb{position:fixed;inset:0;z-index:80;display:none;padding:24px;
      align-items:center;justify-content:center;}

  .p2lb.is-on{display:flex;}

  /* z-index explicites. backdrop-filter promeut le voile en couche composée :
     sans z-index, Chrome le peint AU-DESSUS de la fenêtre pourtant située après
     lui dans le DOM, et la pop-up disparaît derrière son propre fond. */
  .p2lb__veil{position:absolute;inset:0;z-index:0;background:rgba(4,17,53,.72);
      -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);}

  .p2lb__box{position:relative;z-index:1;width:min(1080px,100%);max-height:calc(100vh - 48px);
      background:#fff;border-radius:18px;overflow:hidden;display:flex;flex-direction:column;
      box-shadow:0 40px 90px rgba(4,17,53,.4);animation:p2lbIn .22s ease both;}

  @keyframes p2lbIn{from{opacity:0;transform:translateY(10px) scale(.985);}
}

  .p2lb__bar{display:flex;align-items:center;gap:10px;padding:13px 14px 13px 18px;
      border-bottom:1px solid var(--bord);flex:0 0 auto;}

  .p2lb__rank{display:flex;align-items:center;justify-content:center;flex:0 0 auto;
      width:26px;height:26px;border-radius:8px;background:var(--green);color:#fff;
      font-size:13px;font-weight:700;line-height:1;}

  /* flex:1 pousse la barre d'outils à droite sans margin-left:auto — sinon
     masquer .p2lb__hint en petit écran ferait retomber les boutons à gauche. */
  .p2lb__cap{flex:1 1 auto;font-size:13.5px;font-weight:500;letter-spacing:-.01em;min-width:0;
      overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

  .p2lb__hint{flex:0 0 auto;font-size:12px;color:var(--slight);white-space:nowrap;padding-right:4px;}

  @media(max-width:760px){.p2lb__hint{display:none;}
}

  /* 44 px : plancher de cible tactile (WCAG 2.5.8). */
  .p2lb__nav,.p2lb__x{flex:0 0 auto;width:44px;height:44px;display:flex;align-items:center;
      justify-content:center;border:1px solid var(--bord);background:#fff;border-radius:11px;
      cursor:pointer;font-size:16px;line-height:1;color:var(--ink);transition:background .18s ease;}

  .p2lb__x{font-size:19px;}

  .p2lb__nav:hover,.p2lb__x:hover{background:var(--nuk);}

  /* overflow:auto → la capture entière se parcourt dans la fenêtre. */
  .p2lb__scroll{overflow:auto;background:var(--nuk);-webkit-overflow-scrolling:touch;}

  .p2lb__scroll img{width:100%;}
  /* Cadres de rang sur la capture ouverte (11/08, demande Ayoub). Mêmes
     couleurs que dans la visionneuse de la preuve : vert 1er, orange 2e,
     rouge 3e. Posés par-dessus l’image, jamais peints dedans.
     ⚠ Les coordonnées ne sont PAS ici : cette visionneuse ouvre quatre
     captures de largeurs, de zooms et de mises en page différents. Elles
     voyagent avec chaque capture, dans le data-marks de son lien, et le
     script les pose en style inline. Douze règles figées ici auraient
     dérivé dès la première capture remplacée.
     ⚠ Pas de pastille numérotée : shortys et caleçon portent déjà leur rang
     imprimé dans l’image, à gauche du résultat, là où la pastille se poserait.
     Deux numéros superposés se lisent comme un bug. */
  .p2lb__stage{position:relative;}
  .p2lb__stage img{display:block;}
  .p2lb__mk{position:absolute;border:2px solid;border-radius:10px;pointer-events:none;}
  .p2lb__mk--1{border-color:var(--green);}
  .p2lb__mk--2{border-color:var(--orng);}
  .p2lb__mk--3{border-color:var(--redder);}


  @media(prefers-reduced-motion:reduce){
    .rmd-p2 .q,.q__go{transition:none;}

    .rmd-p2 .q:hover{transform:none;}

    .p2lb__box{animation:none;}

  }
  /* ═══════════════════════════════════════════════════════════════════════════
     NOTRE APPROCHE — repris de approche/section-approche.html.
     ⚠ Mêmes deux conflits que le défi v2 : .rmd-h2 (26-38px contre 30-44px) et
     .rmd-lead (16px/560 contre clamp/520). Contact utilise .rmd-h2, le hero
     utilise .rmd-lead : portés sur .rmd-ap pour ne pas les rétrécir.
     Ni script, ni image, ni jeton manquant. rmdApGrad est unique.
     ═══════════════════════════════════════════════════════════════════════════ */


  /* Même poids que « Le défi » : les deux sections sont au même niveau de
     lecture, sous le hero. */
  .rmd-ap .rmd-h2{font-weight:500;font-size:clamp(26px,3.2vw,38px);line-height:var(--rmd-lh-head);
          letter-spacing:-.03em;color:var(--rmd-ink);text-wrap:balance;}

  /* Rampe CHAUDE, comme tous les autres titres de section (défi, résultats,
     contact, autres cas, carrousel). Sans cette ligne le titre hérite de la
     définition de base de .rmd-grad-a, qui part du bleu #3943FF : c’était le
     seul titre de la page dans une autre couleur.
     ⚠ Surcharge SCOPÉE, jamais une retouche de .rmd-grad-a : cette classe
     sert encore dans le corps de texte. Seul background-image est redéclaré,
     le background-clip et le color:transparent viennent de la classe de
     base. */
  .rmd-ap .rmd-h2 .rmd-grad-a{background-image:var(--rmd-grad-warm);}

  .rmd-ap .rmd-lead{font-size:16px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);
            max-width:560px;text-wrap:pretty;}


  /* ── Coque ─────────────────────────────────────────────────────────────── */
  /* Même fond que le bandeau outils (--rmd-nuk / --nuk = #F9FAFB) :
     les deux sections se suivent et doivent se lire d'un bloc. Les courbes
     de marque sont retirées avec le blanc — le bandeau outils est un aplat. */
  /* --rmd-nuk → blanc le 11/08 (demande Ayoub) : même passe que .rmd-fm. */
.rmd-ap{position:relative;overflow:hidden;background:#fff;}
  /* ═══ BANDEAU OUTILS, RAPATRIÉ DANS « NOTRE MÉTHODE » (10/08) ══════════════
     Il vivait en section autonome (.rmd-ot--band), avec son propre rythme et un
     défilé de 19 logos. Deux raisons de le ramener ici :
     · les outils ne sont pas un sujet, ils sont la MÉTHODE — les montrer sous
       les quatre phases, c'est dire avec quoi ces phases ont été menées ;
     · le fond. La section méthode est déjà sur --rmd-nuk (#F9FAFB), qui est
       exactement le `bg-nuk` de #methode sur rhillane.com/lp-creation-site-web-maroc.
       Le bandeau n'apporte donc plus son propre aplat : il se pose sur celui de
       la section, séparé par un simple filet.
     Le défilé est supprimé avec lui : 19 logos qui passent en boucle sur une
     étude de cas SEO ne prouvent rien (guide §10). Six outils fixes, ceux de
     cette mission-là, qu'on peut lire sans attendre qu'ils repassent.
     ⚠ Classes en .rmd-ap__tool* et non .tl__* : les .tl__* de l'ancienne
     section ne sont PAS scopées (.tl__row{flex:none;display:flex}, .tl__lab
     {text-align:center}…) et auraient repris la main sur ce bloc. */
  /* Géométrie alignée sur le bandeau partenaires de la landing (10/08) :
       conteneur  flex flex-col items-center gap-6   -> centré, 24px sous le label
       label      text-xs font-semibold uppercase tracking-wider text-slight
       piste      gap-12                              -> 48px entre les marques
       logos      h-8                                 -> 32px de haut
     Seule différence assumée, et c'est la vôtre : les verrous gardent leur nom,
     là où la landing n'aligne que des pictogrammes. */
  /* Habillage repris du bandeau clients (.rmd-cl) le 11/08, demande Ayoub :
     meme marine, memes silhouettes blanches, meme etiquette orange - la bande
     outils repond visuellement a « Ils nous ont confie leur visibilite. ».
     PLEINE LARGEUR (2e passe) : le bloc vit hors du .wrap du carrousel et
     file de bord a bord, aplat plein, sans rayon - exactement comme .rmd-cl. */
  .rmd-ap__tools{margin-top:44px;background:var(--rmd-ink);
                padding:30px 0 34px;display:flex;flex-direction:column;align-items:center;gap:18px;}
  @media(min-width:768px){.rmd-ap__tools{margin-top:56px;padding:34px 0 38px;}}
  /* Etiquette au style du titre clients (.rmd-cl__h) - 7e passe du 11/08,
     demande Ayoub : blanc, graisse 500, meme echelle. L'eyebrow orange a
     filet est parti avec. */
  .rmd-ty .rmd-ap__toolslab{font-weight:500;font-size:clamp(22px,2.7vw,30px);
                line-height:var(--rmd-lh-head);letter-spacing:-.03em;
                color:#fff;text-align:center;}
  /* ── Le bandeau défile ────────────────────────────────────────────────────
     Recette reprise telle quelle de rhillane.com/lp-creation-site-web-maroc :
       .marquee-track{display:flex;width:max-content}
       animation: marquee 60s linear infinite
       @keyframes marquee{0%{translateX(0)} to{translateX(-50%)}}
       mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent)
     Passé à -25% avec QUATRE copies identiques (11/08, 3e passe) : en pleine
     largeur, deux copies laissaient la piste se vider sur les grands écrans
     et le raccord sautait. On glisse d'exactement une copie par cycle, comme
     le bandeau clients — qui, lui, est repassé à DEUX copies et -50 % le 11/08
     (18 marques : une copie y fait 3 528px, plus large que tout écran, donc
     deux suffisent). Le principe est le même, le nombre de copies ne l'est
     plus : la rangée d'outils, elle, reste courte, donc quatre. Toute marque
     ajoutée à la première rangée doit l'être aux TROIS autres, sinon le
     raccord saute.
     will-change:transform garde la piste sur sa propre couche : l'animation ne
     repeint jamais le reste de la section (même note que sur la landing).
     Le masque remplace les bords nets : sans lui, les logos apparaissent et
     disparaissent d'un coup en bord de bloc. */
  .rmd-ap__toolsbelt{position:relative;width:100%;overflow:hidden;
                -webkit-mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);
                mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);}
  .rmd-ap__toolstrack{display:flex;width:max-content;will-change:transform;
                animation:rmdApToolsLoop 60s linear infinite;}
  .rmd-ap__toolstrack > *{flex:0 0 auto;}
  .rmd-ap__toolsbelt:hover .rmd-ap__toolstrack{animation-play-state:paused;}
  @keyframes rmdApToolsLoop{from{transform:translateX(0);}to{transform:translateX(-25%);}}
  .rmd-ty .rmd-ap__toolsrow{display:flex;align-items:center;gap:48px;padding-right:48px;}
  /* Sans mouvement : la piste redevient une rangée qui s'enroule, la copie
     disparaît, et le masque s'efface avec elle — il n'aurait plus rien à
     adoucir et ne ferait que délaver les deux bouts. */
  @media(prefers-reduced-motion:reduce){
    .rmd-ap__toolstrack{animation:none;width:100%;}
    .rmd-ty .rmd-ap__toolsrow{flex-wrap:wrap;justify-content:center;gap:22px 40px;padding-right:0;}
    .rmd-ap__toolsrow[aria-hidden="true"]{display:none;}
    .rmd-ap__toolsbelt{-webkit-mask-image:none;mask-image:none;}
  }
  /* 6e passe du 11/08 - reference : bande « Stack SEO utilise pour ce
     projet » du moodboard. Logos NUS sur le marine, en VARIANTES SOMBRES :
     les parties encre sont passees blanches DANS les fichiers (ahrefs, GA),
     Semrush et Shopify sont en icone officielle monochrome + nom, GSC garde
     son icone couleur, Screaming Frog est inverse par filtre (voir plus
     bas). Plus de pastille, plus de survol : la bande se lit d'un bloc,
     comme le bandeau clients. */
  .rmd-ap__tool{display:inline-flex;align-items:center;gap:10px;}
  /* ── Les vrais logotypes ───────────────────────────────────────────────────
     Fini les reconstitutions : ce sont les FICHIERS DES ÉDITEURS, embarqués en
     data: URI (35 Ko au total, sur un fichier de 6 Mo) pour que la page
     continue de s'ouvrir depuis le disque.
       ahrefs           logotype officiel, déjà servi par rhillane.com
       Google Analytics logotype horizontal (vectorlogo.zone, ar21)
       Shopify          idem
       Screaming Frog   logo du site de l'éditeur (250×60)
       Semrush          logo officiel 2026 (2000×511)
       Search Console   ICÔNE officielle — Google ne publie pas de logotype
                        horizontal pour ce produit : l'icône est accompagnée du
                        nom, exactement comme dans la capture de référence.
     h-8 w-auto de la landing = hauteur 32, largeur libre. Les proportions
     varient beaucoup d'un éditeur à l'autre (ahrefs 3,9:1, Semrush 3,9:1,
     WordPress ~1:1), d'où les retouches unitaires plus bas — la landing fait
     pareil (.partner-logo[src*="woocommerce"]{transform:scale(2.5)}). */
  .rmd-ty .rmd-ap__toollogo{height:32px;width:auto;flex:none;display:block;}
  /* ── Calage optique, réglé À L'ŒIL ────────────────────────────────────────
     Première tentative : normaliser la hauteur de capitale, mesurée au pixel.
     Résultat faux à l'écran, et pour une bonne raison — la taille PERÇUE d'un
     logotype ne dépend pas que de la hauteur des lettres : ahrefs et SEMRUSH
     sont des gras larges et pèsent lourd, Shopify est un bas-de-casse fin et
     Google Analytics un texte gris sur deux lignes. À hauteur de capitale
     égale, les premiers écrasaient les seconds.
     Les valeurs ci-dessous sont donc réglées à l'œil, logo par logo, jusqu'à
     ce que la ligne pèse pareil d'un bout à l'autre. Elles ne se déduisent
     d'aucune formule : un logo remplacé se re-règle en regardant. */
  /* ── 12/08 : PLUS UN SEUL NOM EN POPPINS ──────────────────────────────────
     Cinq outils s'affichaient en "icone + nom compose en Poppins" faute de
     logotype disponible. Ayoub a fourni les fichiers : ce sont maintenant les
     VRAIS verrouillages des editeurs, nom compris, sur les huit.
     Chaque fichier etait sombre sur blanc. Traitement applique, identique pour
     les cinq : fond detoure, MARQUE gardee a ses couleurs reelles, NOM repeint
     en blanc (tri a la saturation : un pixel gris ou noir est du texte, un
     pixel colore appartient a la marque).
     Exception WordPress, traite entierement en blanc : son "Word" est en
     sarcelle #21759B, quasiment la valeur du marine du bandeau. Garde tel
     quel, le mot se serait efface. Blanc = la variante mono officielle.
     Les hauteurs ci-dessous ont ete reglees en composant la rangee a 1:1 sur
     le marine et en regardant, Screaming Frog (22px) servant d'etalon. Elles
     ne se deduisent d'aucune formule : les typographies n'ont ni la meme
     hauteur d'oeil ni la meme graisse. Un logo remplace se re-regle a l'oeil. */
  .rmd-ty .rmd-ap__toollogo--ahrefs{height:19px;}    /* gras large, on retient */
  .rmd-ty .rmd-ap__toollogo--sfrog{height:22px;}     /* l'etalon */
  /* PNG clair, aucune variante blanche publiee : inversion de luminosite
     qui CONSERVE les teintes - le texte noir passe blanc, le vert reste
     vert. Ne pas appliquer aux autres : ils sont deja detoures et repeints. */
  .rmd-ty .rmd-ap__toollogo--sfrog{filter:invert(1) hue-rotate(180deg);}
  .rmd-ty .rmd-ap__toollogo--ga{height:54px;}        /* deux lignes, gris clair : chaque ligne doit peser comme un logotype voisin */
  .rmd-ty .rmd-ap__toollogo--gsc{height:22px;}       /* nom long, texte fin */
  .rmd-ty .rmd-ap__toollogo--semrush{height:16px;}   /* capitales grasses, on retient */
  .rmd-ty .rmd-ap__toollogo--shopify{height:21px;}   /* bas-de-casse fin */
  .rmd-ty .rmd-ap__toollogo--clarity{height:21px;}   /* le sous-titre doit rester lisible */
  .rmd-ty .rmd-ap__toollogo--wp{height:20px;}
  .rmd-ty .rmd-ap__toollogo--icon{height:27px;}
  /* ⚠ .rmd-ap__toolname n'est plus utilise : les huit logos portent maintenant
     leur propre nom. La regle reste au cas ou un outil sans logotype arriverait
     un jour (c'etait le cas de cinq d'entre eux jusqu'au 12/08). Si un nom en
     Poppins reapparait a cote d'un logotype, c'est qu'un <span> a ete remis :
     le nom serait alors ecrit deux fois. */
  .rmd-ap__toolname{font-size:13.5px;font-weight:600;letter-spacing:-.015em;
                color:#fff;white-space:nowrap;}
  @media(max-width:640px){
    .rmd-ty .rmd-ap__toolsrow{gap:32px;padding-right:32px;}
    .rmd-ty .rmd-ap__toollogo--ahrefs{height:17px;}
    .rmd-ty .rmd-ap__toollogo--sfrog{height:19px;}
    .rmd-ty .rmd-ap__toollogo--ga{height:46px;}
    .rmd-ty .rmd-ap__toollogo--gsc{height:19px;}
    .rmd-ty .rmd-ap__toollogo--semrush{height:14px;}
    .rmd-ty .rmd-ap__toollogo--shopify{height:18px;}
    .rmd-ty .rmd-ap__toollogo--clarity{height:18px;}
    .rmd-ty .rmd-ap__toollogo--wp{height:17px;}
    .rmd-ty .rmd-ap__toollogo--icon{height:23px;}
    .rmd-ap__toolname{font-size:15px;}
  }


  .rmd-ap__bg{position:absolute;inset:0;width:100%;height:100%;opacity:.9;pointer-events:none;}

  .rmd-ap__inner{position:relative;max-width:var(--rmd-maxw);margin:0 auto;padding:56px 24px;}

  @media(min-width:768px){.rmd-ap__inner{padding:76px 24px;}
}


  .rmd-ap__head{display:flex;flex-direction:column;align-items:flex-start;gap:16px;
                margin-bottom:32px;}

  @media(min-width:768px){.rmd-ap__head{margin-bottom:40px;}
}


  /* ── La liste ──────────────────────────────────────────────────────────────
     Gouttière de 22 % RETIRÉE le 11/08 (demande Ayoub) : toute la page cale
     son contenu au bord gauche, ce décalage cassait le rythme. Le numéro
     rentre dans la grille de la rangée (1re colonne) au lieu de pendre en
     absolu dans la gouttière disparue. */
  .rmd-ap__list{border-top:1px solid var(--rmd-bord);}


  /* Interligne resserré : une seule idée par phase, donc la ligne n'a plus
     besoin de la respiration qu'imposaient deux paragraphes. */
  .rmd-ap__row{position:relative;display:grid;grid-template-columns:1fr;gap:8px;
               padding:20px 0;border-bottom:1px solid var(--rmd-bord);}

  @media(min-width:1024px){
    .rmd-ap__row{grid-template-columns:56px minmax(0,1fr) minmax(0,1.4fr);gap:32px;
                 align-items:start;padding:22px 0;}

  }


  /* Le numéro occupe la 1re colonne de la grille (11/08 : la gouttière est partie).
     Il était en --rmd-bord (#E9EAF2) à 12px, soit exactement la couleur des
     filets : illisible sur blanc. Il reste subordonné au titre (23px violet)
     mais doit se lire sans effort, sinon la séquence ne sert à rien. */
  .rmd-ap__num{font-size:14px;font-weight:600;letter-spacing:.1em;
               color:var(--rmd-slight);font-variant-numeric:tabular-nums;}

  @media(min-width:1024px){
    .rmd-ap__num{font-size:16px;margin-top:4px;}

  }


  .rmd-ap__title{font-size:clamp(19px,2.1vw,23px);font-weight:600;line-height:var(--rmd-lh-title);
                 letter-spacing:-.02em;color:var(--rmd-purp);text-wrap:balance;}


  .rmd-ap__body{font-size:14.5px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);
                text-wrap:pretty;max-width:56ch;}


  /* ── Le point de départ ─────────────────────────────────────────
     Fond gris très clair et filet, pas de couleur d’alerte : c’est un point de
     départ, pas un problème. Il se lit comme le cadre du travail, pas comme
     une excuse posée avant les résultats.
     ⚠ Préfixé .rmd-ty sur le <p> : « .rmd-ty p{margin:0} » vaut (0,1,1) et
     battrait une simple classe. */
  .rmd-ap__cons{margin:0 0 32px;padding:20px 22px;border-radius:14px;
                border:1px solid var(--rmd-bord);background:var(--rmd-nuk);}
  @media(min-width:768px){.rmd-ap__cons{margin-bottom:40px;padding:24px 26px;}}
  .rmd-ap__consk{display:block;margin-bottom:8px;font-size:12px;font-weight:600;
                letter-spacing:.12em;text-transform:uppercase;color:var(--rmd-purp);}
  .rmd-ty .rmd-ap__consp{margin:0;font-size:15px;line-height:var(--rmd-lh-body);
                color:var(--rmd-ink);max-width:74ch;text-wrap:pretty;}
  .rmd-ap__consp b{font-weight:600;}


  /* Bandeau de clôture : la phrase qui relie l'approche au résultat. Repris du
     « proof-strip » vert des études de cas actuelles, sans la boîte. */
  .rmd-ap__close{display:flex;align-items:flex-start;gap:12px;margin-top:26px;
                 padding-top:20px;border-top:1px solid var(--rmd-bord);}

  @media(min-width:1024px){.rmd-ap__close{margin-left:0;}
}

  .rmd-ap__close svg{flex:none;margin-top:2px;color:var(--rmd-green);}

  .rmd-ap__close p{font-size:15px;line-height:var(--rmd-lh-body);color:var(--rmd-ink);max-width:60ch;}
  /* ═══════════════════════════════════════════════════════════════════════════
     SECTION RÉSULTATS — v3 : la v2, simplifiée

     Copie de section-resultats-carrousel-v2.html. Mêmes données, mêmes courbes,
     mêmes captures : c'est la MISE EN PAGE qui change. La v2 reste en place.

     ── 1. Un cadre au lieu de trois ──────────────────────────────────────────
     La v2 emboîtait .stage (fond nuk, rayon 24, 76 px de marge latérale) dans
     lequel vivait .card (blanc, rayon 16, ombre) dans lequel vivait .viz (blanc
     aussi, rayon 12, filet). Deux boîtes blanches l'une dans l'autre : le filet
     intérieur ne séparait rien de rien, et les 76 px de marge du panneau
     rétrécissaient les graphiques de 130 px pour ne rien ajouter.
     Ici il reste UNE carte. Le graphique se pose dedans, sans cadre à lui.
     Effet de bord utile : à pleine largeur, les courbes montent à ~385 px de
     haut au lieu de ~210. Les diapositives arrivent presque à la même hauteur
     d'elles-mêmes, ce qui était l'origine du problème suivant.

     ── 2. Le trou de 130 px ──────────────────────────────────────────────────
     .track est une grille d'une seule ligne : toutes les diapositives prennent
     la hauteur de la plus haute (les barres Shopify, ~400 px). La v2 donnait
     .card{height:100%} et .card__note{margin-top:auto}, donc TOUT le mou d'une
     diapositive courte tombait d'un coup juste avant la ligne de source — un
     trou de 130 px sur la diapositive Meta, et la ligne de source orpheline en
     bas de page.
     La hauteur commune est nécessaire (sinon le bloc saute à chaque flèche),
     c'est sa RÉPARTITION qui était fausse. Le mou va maintenant à la zone
     graphique — .viz{flex:1} + justify-content:center — donc il se partage
     au-dessus et en dessous du graphique, où il ressemble à de la respiration.
     Le bas de la carte, lui, reste soudé : phrase, chiffres, lien.

     ── 3. Un bloc de texte en moins par diapositive ──────────────────────────
     La v2 empilait cinq blocs : titre, graphique, « Ce que ça veut dire… »,
     chiffres, note de bas de carte. La note portait deux choses différentes —
     l'avertissement de méthode (« valeurs recalculées, d'où le ≈ ») et le lien
     vers la capture. L'avertissement est le même sur toutes les diapositives :
     il est dit UNE fois, en pied de section. Reste le lien, qui remonte sur la
     ligne des chiffres, à droite. Quatre blocs au lieu de cinq, et plus de
     ligne isolée en bas de carte.
     Le libellé « Ce que ça veut dire. » saute aussi : répété cinq fois, il
     annonçait à chaque diapositive ce que le lecteur avait déjà compris à la
     première. Les phrases, elles, ne changent pas.

     ── 4. Une seule zone de navigation ───────────────────────────────────────
     La v2 avait des flèches flottantes posées sur le panneau (position:absolute,
     top:50%) ET une barre de contrôle en dessous avec compteur, points et un
     second jeu de flèches pour le mobile. Les flèches flottantes se centraient
     sur la hauteur du panneau rembourré, pas sur le graphique : d'où leur air
     de flotter à côté du sujet.
     Ici : une ligne, sous la carte, flèche — points — flèche. Le même contrôle
     à toutes les largeurs, un seul jeu de boutons dans le DOM. Le compteur
     « 01 / 05 » disparaît de l'écran (les points le disent) et devient une zone
     aria-live qui annonce en plus le titre de la diapositive atteinte.

     ── Ce qui n'a pas bougé ──────────────────────────────────────────────────
     Toutes les valeurs, toutes les périodes, tous les relevés de courbe, la
     pop-up de capture et ses raccourcis clavier. Aucun chiffre n'a été retouché.
     Les avertissements de méthode de la v2 sont conservés mot pour mot, mais
     regroupés en pied de section :
       · courbes relevées point par point dans les captures, moyennées à la
         semaine (contrôlées contre les totaux affichés : 21,8 K clics ✓,
         1,16 M impressions ✓, 17,2 % de visibilité ✓) ;
       · valeurs « avant » des graphiques en barres recalculées depuis la
         variation affichée par l'outil, d'où le ≈ ;
       · périodes différentes d'un outil à l'autre, indiquées sur chaque
         diapositive, aucun chiffre reporté d'une capture à l'autre.

     ── Identité ──────────────────────────────────────────────────────────────
     .eyebrow, .section-title/.thin, .section-sub, .rmd-cr, .wrap, .card,
     jetons : assets/css/cpt/case_study.css et mockup.css. Courbes en --purp sur
     aplat dégradé, point d'arrivée en --green.
     ═══════════════════════════════════════════════════════════════════════════ */

.rmd-cr *{box-sizing:border-box;}
.rmd-cr{font-family:'Poppins',ui-sans-serif,system-ui,sans-serif;color:var(--ink);-webkit-font-smoothing:antialiased;line-height:var(--rmd-lh-body);}
  .rmd-cr{background:#fff;}
.rmd-cr h1,.rmd-cr h2,.rmd-cr h3,.rmd-cr p,.rmd-cr figure,.rmd-cr ul,.rmd-cr li{margin:0;}
.rmd-cr ul{list-style:none;padding:0;}
.rmd-cr img{max-width:100%;display:block;height:auto;}
.rmd-cr a{color:inherit;}
.rmd-cr button{font:inherit;color:inherit;}
.rmd-cr :focus-visible{outline:2px solid var(--purp);outline-offset:3px;border-radius:6px;}
  /* Le compteur n'est plus à l'écran : il reste lisible par un lecteur d'écran. */

.rmd-cr .vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
      clip:rect(0 0 0 0);white-space:nowrap;border:0;}

.rmd-cr .wrap{max-width:1200px;margin:0 auto;padding:0 24px;}
/* 56/76 : rythme standard de la page (était 64/96, normalisé 06/08). */
.rmd-cr{padding-block:0 56px;}
  @media(min-width:768px){.rmd-cr{padding-block:0 76px;}}

.rmd-cr .eyebrow::after{content:'';width:30px;height:18px;flex:0 0 auto;
        background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 18' fill='none'%3E%3Cpath d='M2 9h24m0 0-6-6m6 6-6 6' stroke='%233943FF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;}
.rmd-cr .section-title{font-size:38px;font-weight:500;letter-spacing:-.02em;line-height:var(--rmd-lh-head);}
/* 11/08 — l'accent du titre du carrousel passe de l'encre à la rampe chaude,
   comme les six autres titres de la page. Le noir reste sur « Trois mesures, »,
   qui n'est volontairement pas dans un span.
   Le garde @supports n'est pas décoratif : color:transparent SANS
   background-clip:text donne du texte INVISIBLE, pas du texte noir. La couleur
   pleine déclarée au-dessus est donc la version qui s'affiche là où le clip
   n'existe pas. Même construction que .rmd-p1 .section-title .now.
   ⚠ Scopé .section-title : .rmd-cr .tbl .now (les cellules du tableau) porte le
   même nom de classe et doit rester en couleur pleine. */
.rmd-cr .section-title .now{color:var(--redder);}
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .rmd-cr .section-title .now{background-image:var(--rmd-grad-warm);
      -webkit-background-clip:text;background-clip:text;color:transparent;}
}
.rmd-cr .section-title .thin{font-weight:300;color:var(--slight);}
.rmd-cr .section-sub{font-size:16px;color:var(--slight);margin-top:12px;max-width:640px;line-height:var(--rmd-lh-body);}
  @media(max-width:900px){.rmd-cr .section-title{font-size:30px;}}

  /* ══ LES TROIS COURBES, EMPILÉES ══════════════════════════════════════════
     11/08 — le carrousel est supprimé (demande Ayoub). Trois lignes l'une sous
     l'autre, chaque courbe avec son explication à côté.
     Pourquoi c'est mieux ici : un carrousel range deux tiers de la preuve
     derrière un clic. Sur une page qui sert à convaincre, la preuve qu'on ne
     voit pas ne compte pas. Empilé, tout se lit en descendant, sans rien à
     manipuler — et le texte peut enfin dire ce que la courbe ne dit pas.
     Ce qui a disparu avec : la piste à défilement, l'état .is-on, les flèches,
     les points, la région live et les 6 Ko de script qui pilotaient tout ça. */
/* 12/08 — UN FILET ENTRE LES LIGNES (demande Ayoub).
   Le 11/08 la séparation était faite par 56px de vide seul, parce qu'on venait
   de retirer les cadres. Le vide sépare, mais il ne dit pas OÙ ça se coupe :
   trois blocs à la suite, l'œil ne sait plus s'il lit encore la ligne 1.
   Un filet d'1px le dit sans rien encadrer.
   ⚠ gap:0 sur la grille, et TOUT l'espacement passe sur .card + .card :
   marge au-dessus du filet, retrait en dessous. Avec gap ET padding, les deux
   s'additionnaient et il y avait 112px entre deux lignes.
   ⚠ .card + .card et non :not(:last-child) : le filet marque un DÉBUT de
   ligne, il n'y en a donc pas au-dessus de la première ni sous la dernière. */
.rmd-cr .rows{display:grid;gap:0;margin-top:32px;}
.rmd-cr .card + .card{margin-top:48px;padding-top:48px;
        border-top:1px solid var(--bord);}
/* ── La ligne : texte d'un côté, courbe de l'autre ────────────────────────────
   Sous 1040px tout s'empile : le texte d'abord, la courbe dessous. Un graphique
   dans une demi-colonne de téléphone ne se lit pas.
   Au-dessus, deux colonnes. La courbe prend la plus large (le texte est plafonné à 360px) parce
   qu'elle porte 7 mois de données : à largeur égale, les mois se tassent et la
   pente ment. Le texte n'a besoin que d'une mesure de lecture confortable.
   ⚠ align-items:start, et surtout pas center ni stretch : le texte commence
   au NIVEAU DU BORD HAUT du pavé gris, sur les trois lignes (demande Ayoub,
   12/08). Centré, chaque colonne se plaçait au milieu d'une hauteur de ligne
   différente, donc le titre démarrait plus bas sur la ligne 3 que sur la 1 :
   trois départs de lecture à trois hauteurs, l'œil ne trouvait pas la marche
   à suivre. Aligné en haut, il y a UNE SEULE ligne de départ pour toute la
   section, et le vide se retrouve en bas, là où il ne gêne personne. */
/* 11/08 (2) — PLUS DE CARTE AUTOUR DE LA LIGNE (croquis d'Ayoub).
   La ligne n'est plus un objet : c'est un graphique et un texte posés côte à
   côte sur la page. Le seul bloc gris visible est le graphique lui-même.
   Pourquoi c'est mieux : un cadre autour des deux disait « voici une carte »,
   et il fallait alors une carte autour de chaque ligne, donc trois cadres
   empilés. Sans cadre, l'œil ne voit plus que ce qui compte — la courbe. */
.rmd-cr .card{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;
        background:none;border:0;border-radius:0;padding:0;box-shadow:none;}
/* 1040px et non 900 : c'est la largeur à partir de laquelle la colonne du
   graphique dépasse 600px. En dessous, la deuxième colonne lui prenait 400px
   et on retombait sur un tracé écrasé — le défaut qu'on vient de corriger.
   Empilé, le graphique prend toute la largeur : toujours plus grand. */
@media(min-width:1040px){
  /* Le graphique occupe la colonne LARGE, à gauche (le texte est plafonné à 360px). Sept mois
     de données dans une demi-page se tassent et la pente ment ; le texte, lui,
     n'a besoin que d'une mesure de lecture.
     padding:0 — la ligne n'a plus de cadre à garnir. */
  .rmd-cr .card{grid-template-columns:minmax(0,1fr) minmax(300px,360px);
        gap:40px;align-items:start;padding:0;}
  /* Par défaut : graphique à gauche, texte à droite.
     order:2 sur la colonne texte, et non un changement d'ordre dans le HTML :
     dans le markup le texte reste AVANT le graphique, donc à la lecture d'écran
     et sur téléphone on entend d'abord de quoi il s'agit, puis la courbe. Un
     graphique annoncé par rien n'apprend rien. */
  .rmd-cr .row__txt{order:2;}

  /* ⚠ NE PAS INVERSER UNE LIGNE. Essayé DEUX FOIS, refusé deux fois :
     le 11/08 en alternant les trois lignes, le 12/08 en n'inversant que celle
     du milieu. Les deux fois, la rupture s'est vue comme un défaut et non
     comme un rythme. Le graphique reste à GAUCHE sur les trois lignes.
     Ce qui était écrit ici (à ne pas remettre) :
         .rmd-cr .card:nth-child(2){grid-template-columns:minmax(300px,360px) minmax(0,1fr);}
         .rmd-cr .card:nth-child(2) .row__txt{order:0;}
     Et si un jour on y revient : il FAUT les deux déclarations. Rendre l'ordre
     du texte à 0 sans retourner le gabarit envoie le graphique dans la colonne
     de 360px, donc un tracé écrasé. */
}
/* Le numéro : un repère de progression, pas une décoration. Il dit « il y en a
   trois » sans qu'on ait à compter. */
/* ⚠ line-height:1 — pas de la coquetterie, c'est ce qui fait tenir
   l'alignement du haut. Le « 01 » héritait de l'interligne du corps (1,6) :
   la MOITIÉ du surplus se pose au-dessus du chiffre, soit ~3,5px de vide
   invisible qui poussaient le texte sous le bord du pavé gris alors que les
   deux boîtes, elles, commençaient bien à la même hauteur.
   ⚠ Cette déclaration doit rester ICI, dans la règle de base : la règle des
   colonnes plus haut est dans un @media et pèse pareil (0,2,0) — placée
   là-bas, celle-ci passait APRÈS et l'écrasait. */
.rmd-cr .row__n{display:block;font-size:11.5px;font-weight:600;letter-spacing:.16em;
        line-height:1;color:var(--slight);font-variant-numeric:tabular-nums;}
.rmd-cr .row__t{margin:8px 0 0;font-size:21px;font-weight:600;letter-spacing:-.02em;
        line-height:var(--rmd-lh-title);color:var(--ink);}
/* 42ch : la mesure de lecture. Au-delà, l'œil perd la ligne en revenant à la
   gauche — c'est ce qui fait qu'un paragraphe « paraît long » alors qu'il ne
   compte que trois lignes. */
.rmd-cr .row__p{margin:14px 0 0;font-size:15px;line-height:var(--rmd-lh-body);
        color:var(--slight);max-width:42ch;}
  /* Têtes de carte (titre + source) retirées le 11/08, demande Ayoub : la
     phrase .hero porte seule le résultat. */

  /* ── La zone graphique ────────────────────────────────────────────────────
     flex:1 → c'est elle qui prend le mou de la hauteur commune ; center → le
     mou se répartit au-dessus ET en dessous du graphique. min-height:0 pour
     qu'elle puisse aussi rétrécir sur la diapositive la plus haute. */
  /* Le padding bas est un PLANCHER de séparation entre le graphique et la
     phrase : sur la diapositive la plus haute (Shopify) il n'y a aucun mou à
     répartir, et sans lui la légende des barres touchait le texte. */
/* ── §08 RECONSTRUIT — 10/08 ───────────────────────────────────────────────
   Référence : siegemedia.com/work/zoom-content-marketing, dont les couleurs
   ont été relevées sur les images elles-mêmes :
       panneau  #F3F3F3   ·  accent  #FF0000
       remplissage #F4E0E0 (= l'accent à ~12 % sur le panneau)
       grille   #DADADA   ·  libellés #A8A8A8
       tableau  lignes #E3E3E3 sur panneau #F7F7F7, en-tête #1E1F23
   Deux enseignements, et c'est tout ce qu'on leur reprend :
   1. le graphique est POSÉ DANS UN PANNEAU, il ne flotte pas sur la page —
      le cadre fait la moitié de la lisibilité ;
   2. un seul accent, tout le reste en gris.
   Les teintes, elles, restent celles de RMD : le rouge de Siege deviendrait
   ici une seconde marque. --purp porte la courbe, --nuk le panneau, --bord
   la grille, --slight les libellés. */
.rmd-cr .pane--viz{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;
       justify-content:center;}
/* ── Le pavé gris EST le graphique, et RIEN D'AUTRE ────────────────────────
   Il est posé sur .pane--chart, une classe portée par les deux volets à
   courbe. Il avait été mis sur .pane--viz sans condition : la 3e ligne
   (le pic de ventes) n'a pas de courbe mais quatre tuiles, elles-mêmes en
   --nuk — gris sur gris, les tuiles disparaissaient dans le pavé.
   Règle : le fond habille le dessin, jamais un bloc qui a déjà le sien. */
.rmd-cr .pane--chart{background:var(--nuk);border:0;
       border-radius:14px;padding:20px 18px;}
.rmd-cr .pane--viz > svg{display:block;width:100%;height:auto;overflow:visible;}
/* ── UN SEUL TRACÉ PAR COURBE (12/08, « ils sont trop petits ») ────────────
   Il y en avait deux : 1080 unités de large pour le grand écran, 720 pour le
   téléphone. C'était juste tant que la diapositive faisait toute la largeur.
   Depuis que les lignes sont empilées, le graphique vit dans une colonne de
   ~690px : le tracé 1080 y était réduit à 0,59, donc un libellé de 14 unités
   arrivait à l'écran en 8px. Illisible, et rien à faire côté CSS — c'est la
   boîte qui est petite, pas la police.
   Le tracé 720 tient cette même colonne à 0,96, quasiment taille réelle. Il
   devient le seul, et les trois annotations qui ne vivaient que sur le 1080
   (« niveau de juin », « 66 visites/jour », « six semaines à 0 % ») y ont été
   reportées, abscisses converties : x720 = 8 + (x1080 - 12) x 2/3.
   Partent avec le 1080 : aspect-ratio:1080/400, preserveAspectRatio="none" et
   la contre-échelle scaleY(.825) qui rattrapait la déformation. Le 720 est à
   ratio libre, donc rien à compenser — et il rend 316px de haut contre 236. */
.rmd-cr .pane--viz text{font-family:'Poppins',sans-serif;}
.rmd-cr .gl{stroke:var(--bord);stroke-width:1;}
.rmd-cr .gl--base{stroke:#D9DCEA;}
/* Petits textes (11/08, demande Ayoub) : 12 px gris se lisaient mal sur
   la piste claire - axes, dates et legendes passent a 14 px et a l'encre. */
.rmd-cr .ax{font-size:14px;fill:var(--ink);font-variant-numeric:tabular-nums;}
/* ⚠ Pas de `stroke` ici : chaque courbe porte le sien en ATTRIBUT
   (stroke="url(#lnA)"), et une déclaration CSS l'emporterait sur un attribut
   de présentation — le dégradé était bien défini, bien référencé, et
   proprement écrasé par ce stroke:var(--purp). La couleur se règle donc dans
   le SVG, la graisse ici. */
.rmd-cr .ln{fill:none;stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round;}
/* ── §08 : UNE SEULE COULEUR D'ACCENT PAR GRAPHIQUE ─────────────────────────
   Le point d'arrivée était vert alors que la courbe est violette : deux
   accents pour une seule idée, et l'œil hésitait entre les deux. Le violet
   porte la courbe ET ses repères ; tout le reste est gris.
   Repère de départ en cercle CREUX, d'arrivée en cercle PLEIN : on lit le
   sens de lecture sans légende — vide au début, plein à la fin. */
/* Le point d'arrivée prend la couleur de FIN du dégradé : posé là où le
   trait est devenu orange, un point violet aurait juré. */
.rmd-cr .pt{fill:#FA9329;stroke:#fff;stroke-width:2.5;}
.rmd-cr .halo{fill:#FA9329;opacity:.15;}
.rmd-cr .ln{stroke-width:3;}
.rmd-cr .mk{fill:#fff;stroke:var(--purp);stroke-width:2.5;}
/* ── L'étiquette, calme ────────────────────────────────────────────────────
   Elle était le SEUL aplat marine du graphique : elle pesait plus lourd que
   la courbe qu'elle commente. En purpsoft/purp elle informe sans capter.
   Forme reprise des repères de siegemedia.com/work/zoom-content-marketing :
   une pastille posée au contact de son point, qui dit ce qui se passe là. */
/* Pastille PLEINE et non pâle : c'est le seul repère qui reste sur la
   courbe, il porte le résultat, il doit se voir — comme le repère rouge de
   siegemedia. La pastille de départ a été supprimée : deux pastilles pour
   deux bouts d'une même ligne, c'était une de trop. */
  /* ── Annotations dessinées, pas rédigées ──────────────────────────────────
     Le texte sous la courbe expliquait bien, mais il fallait le lire : on
     regardait un dessin, puis on allait chercher ailleurs ce qu'il voulait dire.
     Tout revient donc DANS le tracé, en formes plutôt qu'en phrases.
     • La ligne pointillée pose le niveau de départ et le prolonge sur toute la
       largeur : l'écart entre elle et la courbe EST le résultat, sans un mot.
     • La zone grisée couvre la période où la courbe ne décolle pas — le vide
       devient un fait daté au lieu d'un défaut de graphique.
     • La pastille de départ répond à celle d'arrivée : d'où l'on part, où l'on
       arrive. Elle est en clair pour que la violette, à la fin, reste le point
       d'arrivée du regard. */
.rmd-cr .ref{stroke:#B9BFD6;stroke-width:1.5;stroke-dasharray:5 5;}
.rmd-cr .ref-t{font-size:13.5px;font-weight:600;fill:var(--ink);}
.rmd-cr .zone{fill:#041135;opacity:.045;}
.rmd-cr .zone-l{stroke:#C3C8DC;stroke-width:1.5;stroke-dasharray:4 4;}
.rmd-cr .zone-t{font-size:13.5px;font-weight:600;fill:var(--ink);}
.rmd-cr .cal rect{fill:var(--purp);}
.rmd-cr .cal-t{font-size:12px;font-weight:600;fill:#fff;
       font-variant-numeric:tabular-nums;}
/* 11/08 — ⚠⚠ NE PAS ESPACER CES PASTILLES EN CSS. Essayé, annulé le jour même.
   La règle était :
       .rmd-cr .cal:not(.cal--dep):not(.cal--ev){transform:translateX(-18px);}
   Elle a envoyé la pastille au MILIEU du graphique au lieu de la reculer un peu.
   Raison : l'attribut SVG transform="translate(334,0)" et la propriété CSS
   transform sont LA MÊME CHOSE. Le CSS ne s'ajoute pas à l'attribut, il le
   REMPLACE. Les grandes courbes plaçaient la pastille avec translate(334,0) ;
   la règle a effacé ce 334 et il n'est resté que -18, soit un saut de 352
   unités vers la gauche.
   L'écartement se règle donc dans le markup, sur le translate qui existe déjà.
   (Alternative valable si besoin un jour : la propriété CSS `translate`, qui
   elle se COMPOSE avec transform. Pas utilisée ici : une seule source de
   position dans le markup est plus simple à relire.) */
/* À spécificité égale (0,2,1 pour « .rmd-cr .cal rect » comme pour
   « .rmd-cr .cal--dep rect »), c'est l'ORDRE qui tranche : placées avant, ces
   deux règles perdaient et la pastille de départ sortait violette sur violet. */
.rmd-cr .cal--dep rect{fill:#fff;stroke:#C9CEE2;stroke-width:1.5;}
.rmd-cr .cal--dep .cal-t{fill:var(--slight);}
/* ── Fanion d'événement (11/08, demande Ayoub) ─────────────────────────────
   Repris du repère « Started with Siege Media » de siegemedia.com/work/zoom :
   la partie plate de la courbe devient l'AVANT, le fanion date le début du
   travail, la montée qui suit se lit comme l'effet — sans une phrase.
   MARINE et non violet : il date un ÉVÉNEMENT, les pastilles violettes/claires
   portent des VALEURS. Posé un cran AVANT le décollage : le SEO ne paie pas
   le jour même, le décalage visible est honnête (Siege fait pareil : fanion
   en mai, bond en septembre). Placé après .cal : à spécificité égale c'est
   l'ordre qui tranche, comme pour .cal--dep. */
.rmd-cr .cal--ev rect{fill:var(--ink);}
.rmd-cr .ev-l{stroke:var(--ink);stroke-width:1.5;}
.rmd-cr .tag{fill:var(--purpsoft);}
.rmd-cr .tag-t{font-size:11.5px;font-weight:600;fill:var(--purp);}

  /* ═══ PARTIE 1 — LE CHIFFRE, PUIS LA COURBE ════════════════════════════════
     L'ordre de lecture d'un dirigeant : le résultat d'abord, la démonstration
     ensuite. Le chiffre est donc AU-DESSUS du graphique, en très grand, et le
     graphique ne fait plus que le prouver.
     Il remplace la rangée de trois KPI qui vivait sous chaque carte : trois
     nombres de même taille ne se hiérarchisent pas, on les lit tous ou aucun.
     Un seul, énorme, se lit sans décider. */
  /* ⚠ PAS de préfixe .rmd-ty ici : contrairement aux autres sections, le
     carrousel n'est pas enveloppé dans un .rmd-ty. Préfixée, la règle ne
     s'appliquait jamais — le chiffre et son libellé restaient collés, sans
     flex ni écart. Vérifié : .rmd-cr .hero (0,2,0) bat bien la remise à zéro
     .rmd-cr p (0,1,1). */
  /* Alignement sur la ligne de base tant que la légende tient sur une ligne :
     dès qu'elle passe à deux, elle démarre au pied du chiffre et retombe
     dessous, comme suspendue. Centrée, elle reste en face du chiffre quel que
     soit le nombre de lignes. */
  /* 12/08 — le KPI RETOURNE DANS LE VOLET DU GRAPHIQUE, en haut, et redevient
     une ligne : le chiffre à gauche, ce qu'il mesure juste à côté.
     Il avait été empilé le 11/08 parce qu'il vivait alors dans la colonne
     texte, large de 360px — deux éléments côte à côte n'y tenaient pas. Dans
     le volet il y a 716px : la place existe, et le chiffre redevient le titre
     de sa propre courbe au lieu d'un troisième niveau de titre à droite.
     ⚠ Pas de flex-wrap : si le libellé passait à la ligne, il sautait ENTIER
     sous le chiffre. On veut l'inverse — le libellé garde sa place à droite
     et c'est SON TEXTE qui se coupe en deux lignes, d'où flex:1 1 auto et
     min-width:0 sur le span (sans min-width:0, un élément flex refuse de
     descendre sous la largeur de son plus long mot et déborde). */
.rmd-cr .hero{display:flex;flex-direction:row;align-items:baseline;
       gap:14px;margin:0 0 20px;}
  .rmd-cr .hero b{flex:0 0 auto;font-size:clamp(38px,4.2vw,50px);font-weight:600;line-height:1;
       letter-spacing:-.035em;color:var(--purp);font-variant-numeric:tabular-nums;}
  /* Plus de max-width en ch : la mesure de lecture sert à un PARAGRAPHE, pas
     à une légende d'une ligne. Ici c'est la largeur du volet qui décide, et
     le libellé prend ce qui reste à droite du chiffre. */
  /* 12/08 — le libellé passe de --slight (#596980) à --ink (#041135). En gris
     il se lisait comme une note de bas de page à côté d'un chiffre violet de
     50px ; c'est pourtant lui qui dit CE QUE le chiffre mesure. Sans lui,
     « 17,2 % » ne veut rien dire. Il est de la même famille que le chiffre,
     il doit en avoir l'encre. */
  .rmd-cr .hero span{flex:1 1 auto;min-width:0;font-size:16px;
       line-height:var(--rmd-lh-body);color:var(--ink);}

  /* ═══ LES CHIFFRES ════════════════════════════════════════════════════════
     Un tableau obligeait à lire seize cellules et à apparier chaque ligne avec
     son en-tête. Un bloc par mesure se lit de haut en bas, sans appariement.

     ── Ce que le bloc dit, et dans cet ordre ────────────────────────────────
       1. la mesure          — de quoi on parle
       2. le résultat, gros  — l'ancre : un chiffre fort posé en premier oriente
                               la lecture de tout ce qui suit
       3. la barre           — l'échelle. « +137 % » est une abstraction ; deux
                               barres côte à côte se comparent sans calcul
       4. le point de départ, LE GAIN EN VALEUR, puis le pourcentage

     Le gain en valeur est l'ajout qui compte. La recherche B2B est constante
     là-dessus : un acheteur veut des euros ET un pourcentage, pas l'un des
     deux. « +137 % » ne se dépense pas ; « ≈ +217 000 € en 90 jours » se
     rapporte à un budget. Les blocs affichaient le ratio et taisaient la
     somme — c'est-à-dire exactement le chiffre qui décide.
     ⚠ Les « avant » étant recalculés depuis la variation de l'outil, les gains
     qui en découlent portent le même ≈. On ne durcit pas un chiffre dérivé. */
  /* Le peu de mou qui reste va DANS les tuiles, pas autour d'elles : la grille
     prend toute la hauteur du volet et chaque tuile centre son contenu. Le même
     vide, borduré, se lit comme une tuile de tableau de bord plutôt que comme
     un trou au milieu de la carte. */
  .rmd-cr .stats{display:grid;gap:14px;margin:0;flex:1 1 auto;
       grid-template-columns:repeat(auto-fit,minmax(184px,1fr));}
  /* Dans la colonne large (~690px), auto-fit tombait sur 3 tuiles + 1
     orpheline. Deux par deux, la grille est pleine. */
  @media(min-width:1040px){
    .rmd-cr .stats{grid-template-columns:repeat(2,minmax(0,1fr));}
  }
  /* Les tuiles prennent EXACTEMENT ce que la carte leur laisse : plus de
     hauteur plancher à recalculer chaque fois qu'une ligne bouge ailleurs. */
  /* ── Un seul trait par diapositive ────────────────────────────────────────
     Les tuiles étaient blanches et bordées À L'INTÉRIEUR d'une carte blanche
     et bordée : deux filets pour séparer deux blancs identiques. L'aplat clair
     pose le bloc aussi bien sans ajouter de ligne à l'image, et le cadre de la
     carte redevient le seul trait — les chiffres n'ont plus de grille autour
     d'eux. Même traitement pour la zone du graphique, juste au-dessus. */
  /* 13/08 (demande Ayoub) : les tuiles respiraient mal — le bas (gain + base)
     se lisait tassé. Padding élargi et interlignes du bas desserrés, voir
     .stats__gain / .stats__base plus bas. */
  .rmd-cr .stats li{display:flex;flex-direction:column;justify-content:center;
       background:var(--nuk);
       border:0;border-radius:14px;padding:30px 26px 28px;}
  .rmd-cr .stats__k{display:block;font-size:13px;font-weight:600;letter-spacing:.04em;
       text-transform:uppercase;color:var(--slight);}
  .rmd-cr .stats__v{display:block;margin-top:12px;font-size:38px;font-weight:600;
       line-height:1.1;letter-spacing:-.03em;color:var(--ink);
       font-variant-numeric:tabular-nums;}
  /* ── La barre DIT le gain ──────────────────────────────────────────────────
     Piste = le résultat d'aujourd'hui. La part GRISE est ce qu'il y avait
     avant, la part VERTE est ce qui a été gagné — et le vert est celui du
     chiffre de gain juste dessous. La barre n'illustre plus vaguement une
     proportion : elle montre la même chose que le texte, dans la même couleur.
     Aucune légende à lire. */
  /* La carte ROAS (publicité, ×11,94) a été RETIRÉE le 11/08 (demande Ayoub) :
     elle contredisait le « sans publicité » du hero sur une étude de cas
     SEO. Les regles .stats--cmp avaient déjà sauté avec sa couleur. */

  .rmd-cr .stats__bar{display:block;margin-top:20px;height:10px;border-radius:999px;
       background:#CDEBD9;overflow:hidden;}
  .rmd-cr .stats__bar i{display:block;height:100%;width:var(--w);border-radius:999px;
       background:#BFC5DA;}

  /* ── Trois nombres, trois rôles, aucun doute possible ─────────────────────
     Ils étaient alignés sur une seule ligne, même taille, même gris :
     « ≈ 37 000 · ≈ +56 000 · +149 % ». Deux d'entre eux commençaient par ≈ et
     se ressemblaient trait pour trait — impossible de dire lequel était le
     point de départ et lequel le gain.
     Désormais chacun est marqué : le gain porte un TRIANGLE et le vert, le
     pourcentage le suit entre parenthèses de couleur, et la base est une
     phrase — « contre ≈ 37 000 avant » — qu'on ne peut pas confondre avec un
     gain. C'est la convention des tableaux de bord eux-mêmes : Shopify affiche
     « 25 384 ↗78 % », Analytics de même. Reprendre leur grammaire, c'est être
     lisible ET cohérent avec les captures qui servent de preuve. */
  .rmd-cr .stats__gain{display:flex;align-items:center;gap:7px;margin-top:20px;
       font-size:16px;font-weight:600;color:#0B7A44;font-variant-numeric:tabular-nums;
       line-height:1.4;}
  .rmd-cr .stats__gain b{font-weight:600;}
  .rmd-cr .stats__gain span{font-weight:600;opacity:.75;}
  .rmd-cr .stats__up{flex:none;}
  .rmd-cr .stats__base{display:block;margin-top:11px;font-size:14px;color:var(--ink);
       line-height:1.5;font-variant-numeric:tabular-nums;}
  .rmd-cr .stats__note{margin-top:16px;font-size:13px;line-height:var(--rmd-lh-body);color:var(--slight);}

  /* ═══ Bande de captures (.film) retirée le 11/08, demande Ayoub. La visionneuse
     crlb, qui n'avait plus aucun déclencheur, part avec elle. ═══ */


  @media(prefers-reduced-motion:reduce){.rmd-cr .cap{transition:none;}
    .rmd-cr .cap:hover{transform:none;}}

  /* ── Le tableau ───────────────────────────────────────────────────────────
     Remplace les graphiques en barres : une comparaison avant/après se lit
     mieux alignée en colonnes qu'estimée à la longueur de deux rectangles.
     Forme reprise du tableau de Siege : en-tête sombre, lignes claires
     séparées par du blanc, valeurs alignées à droite en chiffres tabulaires.
     Pas de bordures intérieures — c'est l'alternance qui structure. */
  .rmd-cr .tbl{width:100%;border-collapse:separate;border-spacing:0 3px;
       font-variant-numeric:tabular-nums;}
  .rmd-cr .tbl th{background:var(--ink);color:#fff;font-size:11.5px;font-weight:600;
       letter-spacing:.04em;text-transform:uppercase;text-align:right;padding:9px 14px;}
  .rmd-cr .tbl th:first-child{text-align:left;border-radius:8px 0 0 8px;}
  .rmd-cr .tbl th:last-child{border-radius:0 8px 8px 0;}
  .rmd-cr .tbl td{background:#fff;font-size:14px;padding:11px 14px;text-align:right;
       color:var(--ink);}
  .rmd-cr .tbl td:first-child{text-align:left;font-weight:500;border-radius:8px 0 0 8px;}
  .rmd-cr .tbl td:last-child{border-radius:0 8px 8px 0;}
  /* La colonne « avant » est la référence, pas le résultat : elle reste grise
     pour que l'œil tombe d'abord sur la colonne « après ». */
  .rmd-cr .tbl .was{color:var(--slight);}
  .rmd-cr .tbl .now{font-weight:600;}
  .rmd-cr .tbl .gap{font-weight:600;color:#0B7A44;}
  .rmd-cr .tbl tr:hover td{background:var(--purpsoft);}
  /* Ligne de tête d'un classement : le meilleur résultat porte l'accent. */
  .rmd-cr .tbl tr.best td{background:var(--purpsoft);}
  .rmd-cr .tbl tr.best .now{color:var(--purp);}
  /* Douze lignes contre quatre ailleurs : sans cette variante, la diapositive
     la plus haute étirait les cinq (les slides sont des colonnes de grille). */
  .rmd-cr .tbl--tight td{padding:6px 14px;font-size:13.5px;}
  .rmd-cr .tbl--tight{border-spacing:0 2px;}
  .rmd-cr .tbl caption{caption-side:bottom;margin-top:10px;font-size:12px;
       color:var(--slight);text-align:left;}

  /* ── Barres comparées ─────────────────────────────────────────────────────
     La variation occupe une COLONNE et non un ::after décalé hors de la barre :
     dehors, elle réapparaissait par-dessus la diapositive voisine. */
.rmd-cr .bars{display:flex;flex-direction:column;gap:15px;}
.rmd-cr .brow{display:grid;grid-template-columns:1fr;gap:7px;}
.rmd-cr .blbl{font-size:13px;font-weight:500;}
.rmd-cr .bwrap{display:grid;grid-template-columns:minmax(0,1fr) 64px;align-items:center;gap:12px;}
.rmd-cr .bset{display:flex;flex-direction:column;gap:6px;min-width:0;}
.rmd-cr .bar{height:27px;border-radius:7px;display:flex;align-items:center;
       padding-left:11px;width:var(--w);min-width:92px;}
.rmd-cr .bar span{font-size:12.5px;font-weight:600;white-space:nowrap;font-variant-numeric:tabular-nums;}
.rmd-cr .bar--old{background:#EDEEF6;color:var(--slight);}
.rmd-cr .bar--new{background:linear-gradient(90deg,#3943FF 0%,#5B63FF 100%);color:#fff;}
.rmd-cr .bdelta{font-size:13px;font-weight:600;color:var(--green);text-align:right;
       font-variant-numeric:tabular-nums;}
.rmd-cr .bars__legend{display:flex;gap:18px;font-size:12px;color:var(--slight);margin-top:2px;}
.rmd-cr .bars__legend i{display:inline-block;width:11px;height:11px;border-radius:3px;
       margin-right:6px;vertical-align:-1px;}

  /* ── Barres ROAS ──────────────────────────────────────────────────────────
     Piste à 20 px et non 16 : douze lignes montent alors à ~350 px, la hauteur
     des autres diapositives. Le mou à répartir tombe à quelques dizaines de
     pixels — la respiration se voit, le trou non.
     padding-top : la légende du seuil se pose AU-DESSUS des barres ; sans cette
     réserve elle retombait sur la meilleure campagne, celle qu'on veut lire. */
.rmd-cr .roas{position:relative;display:flex;flex-direction:column;gap:8px;padding-top:24px;}
.rmd-cr .rrow{display:grid;grid-template-columns:56px 1fr;align-items:center;gap:10px;}
.rmd-cr .rval{font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;text-align:right;}
.rmd-cr .rtrk{height:20px;background:#F2F3F9;border-radius:6px;overflow:hidden;}
.rmd-cr .rtrk i{display:block;height:100%;width:var(--w);border-radius:6px;
       background:linear-gradient(90deg,#3943FF 0%,#5B63FF 100%);}
.rmd-cr .rrow--top .rtrk i{background:linear-gradient(90deg,#D7045A 0%,#FC8831 100%);}
.rmd-cr .rrow--top .rval{color:var(--redder);}
  /* Le seuil de rentabilité : sans lui, « ×11,94 » n'a pas d'échelle.
     66px = la colonne des valeurs (56) + le gap (10). */
.rmd-cr .even{position:absolute;top:20px;bottom:0;left:calc(66px + (100% - 66px) * 0.0833);
        border-left:2px dashed #C7CBDD;}
.rmd-cr .even span{position:absolute;top:-20px;left:-7px;font-size:11px;color:var(--slight);
        white-space:nowrap;}

  /* ── Le bas de carte : phrase, chiffres, lien ─────────────────────────────
     Les trois blocs sont soudés au bas de la carte et ne bougent plus d'une
     diapositive à l'autre. Le lien vers la capture est monté sur la ligne des
     chiffres : c'est la ligne isolée en moins. */
.rmd-cr .say{font-size:14.5px;line-height:var(--rmd-lh-body);color:rgba(4,17,53,.76);max-width:92ch;}
.rmd-cr .say b{color:var(--ink);font-weight:600;}
.rmd-cr .foot{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
        gap:12px 28px;margin-top:16px;}
.rmd-cr .kpis{display:flex;flex-wrap:wrap;gap:10px 26px;}
.rmd-cr .kpis b{display:block;font-size:19px;font-weight:600;letter-spacing:-.02em;line-height:1.15;
        font-variant-numeric:tabular-nums;}
.rmd-cr .kpis span{display:block;font-size:12px;color:var(--slight);margin-top:3px;}
  /* span.up et non .up : posée sur un <b>, la règle (0,2,0) battrait .kpis b
     (0,1,1) et ferait tomber la valeur de 19 à 13 px. */
.rmd-cr .kpis span.up{color:var(--green);font-weight:600;font-size:13px;}

  /* ── Navigation : SUPPRIMÉE le 11/08 avec le carrousel ────────────────────
     .nav / .arw / .dot / .dots n'ont plus d'élément à styler — flèches, points
     et région live sont partis du markup, le script aussi. Les règles sont
     retirées plutôt que laissées « au cas où » : du CSS sans élément se remet
     en service tout seul le jour où quelqu'un réutilise le nom de classe, et
     .dot / .nav / .card sont exactement les noms génériques qui voyagent
     d'une section à l'autre dans ce fichier (voir l'avertissement du README).
     L'historique de ce qu'ils faisaient est dans git, pas ici. */



  /* ── Des diapositives de hauteur voisine, sans une ligne de script ────────
     Cinq colonnes de grille s'étirent sur la plus haute : c'est la grille qui
     égalise, gratuitement. Le trou ne venait pas de cet étirement mais de
     l'ÉCART à égaliser — 700 px pour les courbes contre 374 px pour les
     chiffres. Piloter la hauteur en JavaScript ne supprimait pas cet écart, il
     l'animait ; et cette mécanique (mesure, transition, image de rendu) a une
     panne possible par maillon.
     On réduit donc l'écart lui-même : le graphique est plafonné en largeur,
     donc en hauteur puisqu'il garde ses proportions, et les blocs de chiffres
     grossissent. Ce qui reste de mou redevient de la respiration, réparti
     au-dessus et au-dessous par le centrage déjà en place. Aucun script, aucun
     saut de hauteur, et la section tient même si le JavaScript ne part pas. */
  /* ── Téléphone : quatre tuiles en colonne, c'est 800 px de carte ─────────
     Empilées, les tuiles font des diapos chiffrées les plus hautes de la série,
     et c'est alors le graphique qui se retrouve seul au milieu du vide — le
     défaut de départ, retourné. En deux colonnes serrées, les deux familles de
     diapos rentrent dans la même fourchette et l'égalisation de la grille
     redevient indolore. Le chiffre descend à 26 px : « 162 553 € » tient dans
     une demi-largeur de téléphone, vérifié à 320 px. */
  /* ── Téléphone : on empile, on n'égalise plus ────────────────────────────
     En grand écran les deux familles de diapos ont des hauteurs voisines et la
     grille les égalise sans dommage. Au téléphone l'écart redevient béant :
     quatre tuiles en colonne font 800 px quand un graphique en fait 150. Aucune
     règle CSS ne peut donner à un rail horizontal la hauteur de la seule diapo
     visible — c'est précisément ce que le script mesurait.
     Alors on retire la contrainte au lieu de la calculer : sous 900 px le rail
     devient une pile verticale, chaque carte fait sa propre hauteur, il n'y a
     plus rien à égaliser ni à animer. Les flèches et pastilles disparaissent :
     elles ne commandent plus rien, on fait défiler la page. */
  /* 11/08 — les trois règles qui « dé-carrouselaient » le rail sous 900px
     (.track en block, .slide + .slide, .nav caché) n'ont plus d'objet : la
     section est empilée à toutes les largeurs maintenant. L'écart de hauteur
     décrit ci-dessus disparaît avec elles, puisqu'il n'y a plus de rangée
     commune à égaliser — chaque ligne fait sa propre hauteur. */
  @media(max-width:899px){
    .rmd-cr .stats li{min-height:0;padding:22px 20px 20px;}
    .rmd-cr .stats{align-content:start;}
    /* Le plancher de 262 px n'a plus lieu d'être une fois la pile en place, et
       le chiffre redescend : à 320 px « Chiffre d'affaires » passait à la ligne
       et chaque tuile grimpait à 300 px, soit 1 269 px pour une seule carte. */
    .rmd-cr .stats__v{font-size:30px;margin-top:8px;}
    .rmd-cr .stats__bar{margin-top:14px;}
    .rmd-cr .stats__gain{margin-top:12px;font-size:15px;}
  }

  /* Plus de bascule entre deux tracés : il n'en reste qu'un (voir plus haut). */
  /* 11/08 (2) — l'ancienne surcharge téléphone remettait un retrait et un rayon
     sur .card (16px / 16px) : elle datait de la carte encadrée, qui n'existe
     plus. Laissée, elle redonnait un cadre invisible au bloc et décalait le
     graphique de 16px vers l'intérieur sans raison.
     Seul le pavé du graphique garde un retrait, resserré pour l'écran étroit.
     ⚠ Garder un retrait HORIZONTAL non nul : à 0, la courbe touche le bord du
     pavé gris et le premier point du tracé se retrouve coupé. */
  @media(max-width:560px){
    /* Sous 560px le volet fait ~300px : le chiffre et son libellé ne
       tiennent plus sur une ligne, ils s'empilent. */
    .rmd-cr .hero{flex-direction:column;align-items:flex-start;gap:4px;}
    .rmd-cr .card + .card{margin-top:32px;padding-top:32px;}
    .rmd-cr .pane--chart{padding:14px 12px;border-radius:12px;}
  }

  /* ═══════════════════════════════════════════════════════════════════════════
     AUTRES ÉTUDES DE CAS — repris de autres-cas/section-autres-cas.html (v3),
     la grille iPullRank : une carte large (Lily Billy) et deux moitiés en
     miroir dessous (TBM panneau devant, IH Invest image devant).

     ── Les trois moitiés visuelles (06/08, dernier état : LOGOS) ─────────────
     D'abord des emplacements vides, puis les captures des sites clients
     (recadrées 5:4), remplacées le jour même par les LOGOS BLANCS des
     clients, centrés sur le fond marine — décision Ayoub. Fichiers dans
     autres-cas/ : lily-billy-logo.svg, tbm-logo.png (détouré du PNG du
     site), ihinvest-logo.svg. Les captures .jpg restent dans le dossier si
     on revient en arrière.

     Sun Trails a laissé sa place à IH Invest (ses chiffres restent bons, mais
     Ayoub a fourni les captures de TBM et IH Invest). Sun Trails vit désormais
     derrière le lien « toutes les études de cas ».

     ── Fusion dans la page (les pièges habituels, vérifiés le 06/08) ──────────
     · .rmd-oc et rmdOcGrad : zéro occurrence dans la page avant l'ajout.
     · .rmd-ty (jetons), .rmd-grad-a, .rmd-pill* : déjà définis à l'identique —
       ÉCARTÉS pour ne pas doubler (même précédent que la section contact).
     · .rmd-h2 : trois définitions dans la page, mais celle qui gagne ici est
       la 44 px du contact (les 38 px sont enfermées ailleurs) — donc re-scopée
       ci-dessous en .rmd-oc .rmd-h2, vérifiée au calculé (38 px).
     · La remise à zéro de la page « .rmd-ty p/ul{margin:0;padding:0} » vaut
       (0,1,1) : les règles de cette section qui posent une marge sur un <p>
       ou un <ul> sont donc préfixées .rmd-ty — même piège, même correctif que
       la liste déroulante du formulaire et .rmd-cl__row.
     · .rmd-ty a n'existe pas dans la page : reset des liens porté sur .rmd-oc.
     · Les trois images sont en loading="eager" et non lazy : le lazy-load ne
       se déclenchait pas dans cette page assemblée (constaté le 06/08 :
       naturalWidth restait à 0 même dans le viewport). Le fichier standalone
       garde lazy, lui.
     ⚠ Ne JAMAIS écrire de balise fermante en toutes lettres dans un
       commentaire HTML de cette page : la première version de cette note le
       faisait, le parseur a coupé le commentaire dessus et le reste s'est
       affiché EN TEXTE par-dessus la photo. Un commentaire CSS, comme ici, ne
       peut rien afficher.
     ═══════════════════════════════════════════════════════════════════════════ */
  /* ── Passage au clair, 10/08 (guide UX §12) ───────────────────────────────
     --rmd-win (#16B364) plafonne à 2,7:1 sur blanc : il échoue même au seuil
     de 3:1 réservé aux grands textes. Il tenait sur le marine, il ne tient
     pas sur le blanc. D'où un vert de TEXTE dédié à ≈5,4:1 ; #16B364 reste
     disponible pour les aplats et les icônes, où le contraste ne s'applique
     pas de la même façon.
     Déclaré ici et non sur .rmd-ty : le reste de la page porte encore des
     aplats sombres, la promotion en jeton global se fera quand tout sera
     passé au clair. */
  /* --rmd-win-ink (#0B7A44) retiré le 11/08 : plus aucun consommateur depuis que
     .rmd-oc__v est passé sur --rmd-win. Un jeton local sans usage finit par être
     repris « parce qu'il est là » et fait revenir un 2e vert par la porte de
     derrière. La valeur et la raison de son existence restent notées sur
     .rmd-oc__v, plus bas, si l'accessibilité doit reprendre la main. */
  .rmd-oc{position:relative;overflow:hidden;background:#fff;}
  /* 11/08 — « le fond de cette section, mets-le en blanc » (Ayoub).
     Le fond ÉTAIT déjà #fff : ce n'est pas lui qui se voyait, c'est la couche de
     courbes décoratives au-dessus. Piège classique de cette page — cf. le
     bandeau clients : la propriété background ne dit pas ce qu'on voit.

     L'opacité réelle d'une courbe est un PRODUIT de deux valeurs situées à deux
     endroits différents : opacity sur la couche CSS × stroke-opacity dans le SVG.
       hero                 .5 × 0,035 = 1,75 %   ← le « blanc » de référence
       autres clients (av.) .9 × 0,06  = 5,40 %   ← 3× plus, d où le fond sali
     .9 → .3 donne .3 × 0,06 = 1,8 %, soit le hero à l arrondi près. La section
     redevient blanche à l œil, et garde la même famille graphique que les autres.
     ⚠ Ne pas comparer deux sections sur le seul opacity : ce SVG-ci a un
     stroke-opacity de 0,06, celui du hero 0,035. Même opacity = rendu différent.
     ⚠ .rmd-ap__bg et .rmd-fm__bg sont encore à .9 — même symptôme, pas touché
     ici, la demande portait sur cette section. */
  .rmd-oc__bg{position:absolute;inset:0;width:100%;height:100%;opacity:.3;pointer-events:none;}
  .rmd-oc__inner{position:relative;max-width:var(--rmd-maxw);margin:0 auto;padding:56px 24px;}
  @media(min-width:768px){.rmd-oc__inner{padding:76px 24px;}}

  .rmd-oc a{color:inherit;text-decoration:none;}

  .rmd-oc .rmd-h2{font-size:clamp(26px,3.2vw,38px);line-height:var(--rmd-lh-head);}
  /* 11/08 — dernier titre passé sur la rampe chaude (défi, résultats, contact
     l'avaient déjà). La page n'a donc plus qu'UNE rampe d'accent sur ses titres
     de section : 112deg #E4004D → #EE453C → #F2622F, noir d'encre pour le reste
     de la phrase. Le bleu de marque n'accentue plus aucun titre.
     .rmd-grad-a garde sa définition bleue à la racine — elle n'est pas morte,
     elle sert encore hors des titres (voir le contact et le défi dans le corps
     de texte). C'est pour ça qu'on surcharge plutôt que de la réécrire : la
     réécrire repeindrait ces usages-là aussi, sans qu'on le voie ici.
     FAIT le 11/08 : la valeur était en réalité écrite SIX fois (le hero comptait
     aussi). Elle est sortie en jeton --rmd-grad-warm, déclaré sur .rmd-case — voir
     le commentaire là-bas. Toutes les surcharges pointent dessus désormais ;
     ajouter une section = une ligne var(), plus jamais une couleur recopiée. */
  .rmd-oc .rmd-h2 .rmd-grad-a{background-image:var(--rmd-grad-warm);}

  .rmd-oc__head{display:flex;flex-direction:column;align-items:flex-start;gap:14px;
                margin-bottom:32px;max-width:640px;}
  @media(min-width:768px){.rmd-oc__head{margin-bottom:40px;}}

  .rmd-oc__grid{display:grid;grid-template-columns:1fr;gap:10px;}
  @media(min-width:900px){
    .rmd-oc__grid{grid-template-columns:1fr 1fr;gap:12px;}
    .rmd-oc__card--wide{grid-column:1 / -1;}
  }

  /* ── La carte de marque, reprise de rhillane.com/lp-creation-site-web-maroc
     (.work-card), 10/08 ──────────────────────────────────────────────────────
     La carte était le dernier grand aplat marine de la page avec le bandeau
     clients. Elle prend maintenant, au pixel près, la carte du site en
     production : rayon 14, filet #E9EAF2, fond blanc, et l'ombre `shadow-card`
     de la landing — qui est exactement notre --rmd-shadow-card, même triplet.
     Rien à inventer : les jetons de la page (--rmd-bord, --rmd-nuk, --rmd-purp,
     --rmd-slight, --rmd-ink, --rmd-purpsoft) ET ceux de la landing (bord, nuk,
     purp, slight, ink, purpsoft) portent déjà les mêmes hex. */
  .rmd-oc__card{position:relative;overflow:hidden;display:grid;grid-template-columns:1fr;
                background:#fff;border:1px solid var(--rmd-bord);border-radius:14px;
                box-shadow:var(--rmd-shadow-card);
                transition:transform .2s ease, box-shadow .3s ease, border-color .2s ease;}
  @media(min-width:900px){
    /* 1.5fr : la capture est large (1,88:1), plus la colonne image est large,
       moins object-fit:cover doit rogner sur les côtés. */
    .rmd-oc__card--wide{grid-template-columns:1.5fr 1fr;align-items:stretch;}
    .rmd-oc__card--half{grid-template-columns:1fr 1fr;align-items:stretch;}
    /* Le miroir. Enfermé dans cette requête — empilée en mobile, l'image doit
       rester en haut de TOUTES les cartes. */
    .rmd-oc__card--flip .rmd-oc__media{order:2;}
  }
  /* Le survol de marque. Trois gestes, tels quels depuis la landing :
     1. la carte se soulève de 4 px (hover:-translate-y-1) ;
     2. le filet gris devient le DÉGRADÉ DE MARQUE — deux couches de fond,
        le blanc découpé sur la padding-box et le dégradé sur la border-box :
        seul l'anneau de 1 px laisse passer le dégradé. C'est le même
        linear-gradient(155deg,#3943FF 58%,#E4004D 85%,#FA9329 100%) que
        .rmd-grad-a utilise déjà sur le texte de cette page — la signature
        maison, jouée sur le contour ;
     3. l'ombre passe à 0 20px 40px -20px rgba(4,17,53,.18), la valeur exacte
        de la landing (l'ancienne, à .5, était calée sur une carte sombre et
        salissait le blanc).
     ⚠ background-color reste blanc : la couleur de fond se peint SOUS les
     couches d'image, donc elle ne masque pas le dégradé de l'anneau. */
  .rmd-oc__card:hover{
    transform:translateY(-4px);
    border-color:transparent;
    background-image:linear-gradient(#fff,#fff),
                     linear-gradient(155deg,#3943FF 58%,#E4004D 85%,#FA9329 100%);
    background-origin:border-box;
    background-clip:padding-box,border-box;
    box-shadow:0 20px 40px -20px rgba(4,17,53,.18);
  }
  /* 11/08 — :focus-within → :focus-visible. Corrige le « double liseré » au survol.
     Ce qui se passait : la carte est un <a href="#">. Un clic lui donne le focus,
     et comme la page ne change pas, elle le GARDE. :focus-within restait donc
     vrai indéfiniment ; au survol suivant, deux anneaux se superposaient —
     l'outline bleu à 3px de décalage, plus le liseré dégradé du :hover. D'où
     l'impression d'un bug de survol, alors que le survol n'y était pour rien :
     c'était un reste de clic.
     :focus-visible ne se déclenche que sur une navigation CLAVIER. Le clic
     souris ne laisse donc plus rien derrière lui, et l'anneau d'accessibilité
     reste entier pour qui tabule.
     ⚠ Ne pas « régler » ça en supprimant l'outline : c'est le seul repère de
     focus de ces cartes, et sans lui la navigation au clavier devient aveugle.
     ⚠ :focus-within n'avait de sens que si le focus pouvait tomber sur un
     enfant. Ici la carte EST le lien — il n'y a rien à englober. */
  .rmd-oc__card:focus-visible{outline:2px solid var(--rmd-purp);outline-offset:3px;}

  /* Moitié LOGO (06/08) : les captures d'écran des sites sont remplacées par
     le logo blanc du client, centré — plus premium et plus lisible en moitié
     de carte. Logos récupérés sur les sites clients, blancs d'origine
     (lilybilly.ma, thebeautifulmarrakech.com, ihinvest.be). Les règles
     .rmd-oc__img/aspect-ratio des captures ont été retirées avec elles.
     ⚠ 10/08 : la phrase sur le halo radial « qui évite que moitié logo et
     panneau se fondent en un seul aplat marine » ne vaut plus — le panneau
     est blanc, la séparation se fait toute seule, et les halos sont partis. */
  /* Moitié logo (06/08, 3e passe) : fond = LA COULEUR PRINCIPALE DU SITE du
     client, logo blanc du client par-dessus. Aucune couleur inventée :
     orange #F88C21 du favicon de lilybilly.ma, olive
     #6E8358 échantillonné sur l'icône du site TBM, #21202a est le fond
     sombre d'ihinvest.be (aussi la couleur de son logo « main »). */
  .rmd-oc__media{position:relative;overflow:hidden;aspect-ratio:16/10;
                 display:flex;align-items:center;justify-content:center;}
  .rmd-oc__media--lily{background:#F88C21;} /* orange du favicon lilybilly.ma, aussi 3x dans sa feuille de style */
  .rmd-oc__media--tbm{background:#6E8358;}
  .rmd-oc__media--ih{background:#21202a;}
  @media(min-width:900px){
    .rmd-oc__media{aspect-ratio:auto;min-height:260px;}
    .rmd-oc__card--wide .rmd-oc__media{min-height:340px;}
  }

  .rmd-oc__logo{position:relative;width:min(56%,230px);height:auto;}
  .rmd-oc__card--wide .rmd-oc__logo{width:min(44%,280px);}

  /* Les styles d'emplacement vide (.rmd-oc__ph) ont été retirés le 06/08 :
     les trois cartes portent désormais une vraie capture. Ils vivent toujours
     dans autres-cas/section-autres-cas.html si une 4e carte en a besoin. */

  .rmd-oc__panel{position:relative;display:flex;flex-direction:column;padding:28px 24px;}
  @media(min-width:768px){/* 11/08 — PASSE DE COMPRESSION VERTICALE sur les demi-cartes (« encore trop
     hautes »). Le texte avait déjà été raccourci ; ce qui restait, c'était
     l'espacement. Six valeurs verticales baissent ensemble, ~40px en tout :
       retrait du panneau      34 → 26   (haut/bas seulement, 30 reste à droite
                                          et à gauche : ce n'est pas la largeur
                                          qui pose problème)
       __t   margin-top        12 → 10
       __stats margin-top      22 → 16
       __body margin-top       20 → 16, padding-top 16 → 14
       __link padding-top      24 → 16
     ⚠ Aucune taille de police n'est touchée. Le grand chiffre est ce que la
     carte vend ; le rétrécir aurait rendu la carte plus courte ET plus faible.
     On prend sur le vide, pas sur le contenu.
     ⚠ Le PLANCHER n'est pas ici : les deux colonnes de la carte sont des
     colonnes de grille, donc la hauteur = max(image, panneau). Tant que
     .rmd-oc__media garde min-height:300px, comprimer le panneau en dessous de
     300 ne se voit plus. C'est pour ça que ce min-height descend lui aussi.
     ⚠ Les deux demi-cartes sont sur la MÊME rangée : elles font la hauteur de
     la plus haute. Gagner 40px ici ne sert que si l'autre suit — d'où des
     valeurs communes et non une surcharge par carte. */
  .rmd-oc__panel{padding:26px 30px;}}
  @media(min-width:900px){.rmd-oc__card--wide .rmd-oc__panel{padding:44px 40px;}}

  /* .rmd-oc__blob (3 halos en surimpression à 20 %) : retirés du balisage et
     d'ici. Ils existaient pour casser l'aplat marine ; sur une carte blanche
     ils ne sont plus qu'une salissure, et la section porte déjà sa trame de
     courbes à 6 % (.rmd-oc__bg). Le position:relative des enfants, qui les
     faisait passer au-dessus, est laissé tel quel : il ne coûte rien.

     .rmd-oc__meta / __tag / __plus : retirés eux aussi. L'étiquette de
     secteur ouvrait la carte et faisait TRIER avant de lire — « Restaurant »,
     et le lecteur passe à côté d'un +489,7 %. Le secteur reste dit dans le
     corps du texte, où il informe sans filtrer, et le repère de périmètre
     (lieu · durée) descend en pied de carte : .rmd-oc__foot / __scope.
     Le « +++ » ne codait rien du tout. */

  /* 11/08 — vert aligné sur celui de la section Résultats (demande Ayoub).
     --rmd-win-ink (#0B7A44) → --rmd-win (#16B364), le vert que portent déjà
     le « + », le « € » et le « % » de .rmd-rs__plus / .rmd-rs__u. Un seul vert
     « résultat » sur toute la page désormais.
     ⚠ CE QUE ÇA COÛTE, écrit ici pour que ce soit un choix et pas un oubli :
       #0B7A44 sur blanc = 5,41:1  → passe partout
       #16B364 sur blanc = 2,74:1  → sous le seuil (3:1 pour du grand texte)
     Le #0B7A44 avait été choisi pour cette raison-là. La cohérence l'emporte
     ici parce que le chiffre n'est jamais seul : chaque carte répète la mesure
     en toutes lettres juste en dessous (.rmd-oc__l « de vues de la fiche
     Google en un an »), en gris d'encre lisible. Rien n'est porté par la
     couleur seule, donc rien ne se perd si elle passe mal.
     ⚠ Ne pas réutiliser ce couple pour un texte qui, lui, serait seul à porter
     son information. Même règle que la pastille verte du hero (.rmd-cs__rank).
     Si l'accessibilité redevient prioritaire, le retour se fait ici ET sur
     .rmd-rs__plus / .rmd-rs__u — les trois bougent ensemble ou pas du tout. */
  .rmd-oc__v{position:relative;font-size:clamp(40px,4.6vw,56px);
             font-weight:600;line-height:1;letter-spacing:-.04em;color:var(--rmd-win);
             font-variant-numeric:tabular-nums;}
  @media(min-width:900px){.rmd-oc__card--wide .rmd-oc__v{font-size:clamp(48px,5.6vw,72px);}}

  /* L'étiquette flotte sur la moitié logo, en haut à droite : c'est la
     pastille « Aperçu » de la landing (bg-white/95, texte purp, shadow-card,
     backdrop-blur, rayon plein), reprise telle quelle.
     Elle a d'abord été essayée sur la ligne du résultat, comme la pastille de
     secteur de la carte de marque — mais le chiffre fait jusqu'à 72 px, il
     prend la ligne entière et l'étiquette retombait entre le chiffre et sa
     légende, qui doivent rester collés. Sur l'image, elle ne dispute rien.
     Et elle ne porte PLUS un secteur (« Restaurant · SEO local »), qui faisait
     trier avant de lire, mais un repère neutre lieu · durée : forme de marque,
     contenu du guide. */
  .rmd-oc__scope{position:absolute;top:14px;right:14px;z-index:1;
                 border-radius:999px;background:rgba(255,255,255,.95);
                 -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
                 box-shadow:var(--rmd-shadow-card);
                 padding:6px 12px;font-size:12px;font-weight:500;
                 color:var(--rmd-purp);white-space:nowrap;}

  /* ⚠ CETTE LIGNE DOIT TENIR SUR UNE SEULE LIGNE (11/08). Sur les demi-cartes,
     la colonne de texte fait 225px : demi-carte 570 / 2 colonnes = 285, moins
     2 × 30px de retrait. À 15px en graisse 600, ça fait ~29 caractères, pas un
     de plus. Repères mesurés :
       « de trafic organique en 8 mois »        29 → tient (référence haute)
       « mots-clés en première page en un an »  35 → passait à 2 lignes
       « mots-clés page 1 en un an »            25 → tient, avec de la marge
     Deux lignes ici ne coûtent pas qu'une ligne : les deux demi-cartes sont sur
     la même rangée et prennent la hauteur de la plus haute, donc un débordement
     d'un seul côté rallonge LES DEUX cartes.
     La carte large, elle, a 381px de colonne (~46 caractères) : ne pas
     transposer sa longueur de texte ici.
     ⚠ Écrire « page&nbsp;1 » et pas « page 1 » : sans l'espace insécable, le 1
     part seul en fin de ligne dès que la colonne se resserre. */
  .rmd-ty .rmd-oc__t{position:relative;margin-top:10px;font-size:15px;font-weight:600;
             line-height:var(--rmd-lh-title);color:var(--rmd-ink);letter-spacing:-.01em;}

  /* L'aperçu chiffré, dans la grille de statistiques de la carte de marque :
     valeur en encre et en 600, légende en 12 px gris juste dessous. Les
     pastilles arrondies faisaient lire les chiffres comme des mots ; en
     colonnes ils se lisent comme des chiffres, et se comparent d'une carte à
     l'autre. auto-fit plutôt que les 3 colonnes fixes de la landing : nos
     cartes en moitié n'ont que deux mesures et une 3e colonne vide s'y
     verrait.
     Le plancher de piste est à 100 px, pas 112 : le panneau d'une carte en
     moitié ne fait que ~225 px utiles à 1440, et à 112 la grille retombait sur
     UNE colonne — les chiffres redevenaient une liste. */
  .rmd-ty .rmd-oc__stats{position:relative;margin-top:16px;display:grid;
                gap:15px 16px;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));}
  .rmd-oc__stats li{display:flex;flex-direction:column;}
  .rmd-oc__stats b{font-size:17px;font-weight:600;line-height:1.2;color:var(--rmd-ink);
                letter-spacing:-.02em;font-variant-numeric:tabular-nums;}
  @media(min-width:640px){.rmd-oc__stats b{font-size:20px;}}
  /* « mots-clés en Top 3 » passe à deux lignes dans une carte en moitié :
     1,4 y tassait les deux lignes l'une sur l'autre. */
  .rmd-oc__stats span{margin-top:2px;font-size:12px;line-height:var(--rmd-lh-body);color:var(--rmd-slight);}

  /* Le filet qui sépare la description des chiffres : border-t border-bord
     pt-3 sur la landing. 1,65 d'interligne = le plancher du guide (§13). */
  .rmd-ty .rmd-oc__body{position:relative;margin-top:16px;padding-top:14px;
                border-top:1px solid var(--rmd-bord);
                font-size:13.5px;line-height:var(--rmd-lh-body);
                color:var(--rmd-slight);text-wrap:pretty;max-width:46ch;}

  /* Le lien passait en --rmd-win, qui échoue au contraste sur blanc. Il prend
     le violet des liens de la section : un seul accent de lien, le vert
     réservé au résultat. */
  .rmd-oc__link{position:relative;margin-top:auto;padding-top:16px;
                display:inline-flex;align-items:center;gap:9px;
                font-size:13.5px;font-weight:600;color:var(--rmd-purp);}
  .rmd-oc__link svg{transition:transform .25s ease;}
  .rmd-oc__card:hover .rmd-oc__link svg{transform:translateX(4px);}

  /* Bouton de fermeture de section. Repris du bouton secondaire de la
     landing (h 50, rayon 12, texte encre), retouché le 12/08 :
     ⚠ L’OMBRE A SAUTÉ. Il portait --rmd-shadow-card, l’ombre des cartes,
     juste sous une grille de trois cartes : il se lisait comme une
     quatrième carte ratée, vide et plus petite que les autres.
     ⚠ CENTRÉ. Calé à gauche sous une grille pleine largeur, il était
     orphelin dans un grand vide à droite. display:flex + width:max-content
     et non inline-flex : un élément inline ne se centre pas avec
     margin:auto.
     ⚠ Le filet passe de --rmd-bord (#E9EAF2, presque invisible) à
     --rmd-ink. Un contour franc, c’est ce qui sépare un bouton d’une
     simple zone.
     ⚠ Au survol il se REMPLIT d’encre au lieu de virer au violet.
     Monochrome, donc il ne concurrence pas le CTA en dégradé chaud qui
     suit immédiatement : c’est une action secondaire, elle doit le
     rester. */
  .rmd-oc__all{margin:40px auto 0;display:flex;width:max-content;
               align-items:center;gap:10px;
               min-height:50px;padding:0 26px;border-radius:12px;
               border:1px solid var(--rmd-ink);background:transparent;
               font-size:14px;font-weight:600;color:var(--rmd-ink);
               transition:background-color .2s ease, color .2s ease;}
  .rmd-oc__all:hover{background:var(--rmd-ink);color:#fff;}
  .rmd-oc__all svg{transition:transform .25s ease;}
  .rmd-oc__all:hover svg{transform:translateX(4px);}

  @media(prefers-reduced-motion:reduce){
    .rmd-oc__card,.rmd-oc__link svg,.rmd-oc__all svg{transition:none;}
    .rmd-oc__card:hover{transform:none;}
  }
/* ═══ Passe téléphone du fichier feedback-rework, repliée ici avec sa section (10/08). ═══ */
/* ⚠ display:flex ici aussi : la valeur inline-flex qui s’y trouvait
   annulait le centrage sous 768px. */
@media(max-width:767px){.rmd-oc__all{min-height:44px;display:flex;align-items:center;}}

} /* fin @layer components (nouveau design) */
