<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Expert Google Ads pour plombiers : une approche conçue pour générer davantage d’appels qualifiés et développer les services les plus rentables.">
<meta name="robots" content="noindex, follow">
<link rel="canonical" href="https://www.adamspilmann.com/expert-google-ads-plombier/">
<title>Expert Google Ads pour plombier | Adam Spilmann</title>
<link rel="icon" href="../favicon.svg" type="image/svg+xml">
<script>
// Polyfill Shadow DOM déclaratif : ne fait rien sur les navigateurs qui le
// supportent nativement (Chrome/Edge/Safari/Firefox récents), et attache
// les <template shadowrootmode> à la main sur les navigateurs plus anciens.
(function attachShadowRoots(root) {
root.querySelectorAll("template[shadowrootmode]").forEach((template) => {
const mode = template.getAttribute("shadowrootmode");
const shadowRoot = template.parentNode.attachShadow({ mode });
shadowRoot.appendChild(template.content);
template.remove();
attachShadowRoots(shadowRoot);
});
})(document);
</script>
<style>
@font-face {
font-family: "Overused Grotesk Medium";
src: url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");
font-weight: 500;
font-display: swap;
}
@font-face {
font-family: "Inter";
src: url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");
font-weight: 400;
font-display: swap;
}
* { box-sizing: border-box; }
html, body { margin: 0; background: #161512; }
.qualif-overlay {
position: fixed;
inset: 0;
z-index: 200;
display: none;
align-items: center;
justify-content: center;
padding: 20px;
background: rgba(13, 12, 10, 0.7);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
}
.qualif-overlay.is-open { display: flex; }
.qualif-dialog {
position: relative;
width: min(560px, 100%);
max-height: min(680px, 90vh);
overflow-y: auto;
padding: 32px clamp(20px, 4vw, 40px) 36px;
border-radius: 12px;
background: #f7f7f7;
color: rgba(0, 0, 0, 0.82);
font-family: "Inter", sans-serif;
box-shadow: 0 30px 80px rgba(0, 0, 0, 0.4);
}
.qualif-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
margin-bottom: 20px;
}
.qualif-brand strong { display: block; font-family: "Overused Grotesk Medium", sans-serif; font-size: 15px; }
.qualif-brand span { display: block; font-size: 12px; color: rgba(0, 0, 0, 0.5); margin-top: 2px; }
.qualif-close {
flex-shrink: 0;
width: 32px;
height: 32px;
border: 0;
border-radius: 50%;
background: rgba(0, 0, 0, 0.06);
font-size: 18px;
line-height: 1;
cursor: pointer;
color: rgba(0, 0, 0, 0.6);
}
.qualif-close:hover { background: rgba(0, 0, 0, 0.12); }
.qualif-progress { height: 3px; border-radius: 999px; background: rgba(0, 0, 0, 0.08); margin-bottom: 28px; overflow: hidden; }
.qualif-progress-bar { height: 100%; width: 0%; background: #161512; border-radius: 999px; transition: width 250ms ease; }
.qualif-panel { display: none; }
.qualif-panel.is-active { display: block; }
.qualif-question { font-family: "Overused Grotesk Medium", sans-serif; font-size: clamp(21px, 3vw, 26px); line-height: 1.2; letter-spacing: -0.02em; margin: 0 0 14px; }
.qualif-subtitle { margin: 0 0 20px; display: grid; gap: 12px; }
.qualif-subtitle span { display: block; font-size: 14px; line-height: 1.55; color: rgba(0, 0, 0, 0.66); }
.qualif-answers { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; border: 0; width: 100%; }
.qualif-answer {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
padding: 14px 16px;
border: 1px solid rgba(0, 0, 0, 0.14);
border-radius: 8px;
background: #fff;
color: inherit;
font-family: "Inter", sans-serif;
font-size: 14.5px;
line-height: 1.4;
text-align: left;
cursor: pointer;
transition: border-color 140ms ease, background 140ms ease;
}
.qualif-answer:hover, .qualif-answer:focus-visible { border-color: rgba(0, 0, 0, 0.35); background: rgba(0, 0, 0, 0.02); }
.qualif-answer .dot { flex-shrink: 0; width: 9px; height: 9px; border-radius: 50%; border: 1px solid rgba(0, 0, 0, 0.3); }
.qualif-disclaimer { margin: 16px 0 0; font-size: 11.5px; line-height: 1.5; color: rgba(0, 0, 0, 0.45); }
.qualif-result { text-align: center; padding-top: 8px; }
.qualif-result-icon { width: 52px; height: 52px; margin: 0 auto 16px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 24px; }
.qualif-result.ok .qualif-result-icon { background: rgba(31, 122, 82, 0.12); color: #1f7a52; }
.qualif-result.no .qualif-result-icon { background: rgba(179, 38, 30, 0.1); color: #b3261e; }
.qualif-result-label { margin: 0 0 10px; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; color: rgba(0, 0, 0, 0.5); }
.qualif-result-title { font-family: "Overused Grotesk Medium", sans-serif; font-size: 22px; line-height: 1.25; letter-spacing: -0.02em; margin: 0 0 14px; }
.qualif-result-copy { margin: 0 0 24px; font-size: 14.5px; line-height: 1.55; color: rgba(0, 0, 0, 0.66); }
.qualif-whatsapp {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 14px 26px;
border-radius: 999px;
background: #25d366;
color: #fff;
font-size: 14.5px;
font-weight: 500;
text-decoration: none;
}
.qualif-whatsapp:hover { background: #20bd5a; }
.qualif-whatsapp svg { width: 18px; height: 18px; }
.qualif-desktop-note { margin: 18px 0 0; font-size: 12px; color: rgba(0, 0, 0, 0.5); }
.qualif-desktop-number { margin: 2px 0 0; font-size: 14px; font-weight: 500; }
.qualif-instagram {
display: inline-flex;
padding: 14px 26px;
border-radius: 999px;
border: 1px solid rgba(0, 0, 0, 0.2);
color: rgba(0, 0, 0, 0.8);
text-decoration: none;
font-size: 14.5px;
}
.qualif-instagram:hover { border-color: rgba(0, 0, 0, 0.4); }
@media (max-width: 520px) {
.qualif-dialog { padding: 26px 18px 28px; border-radius: 10px; }
}
</style>
</head>
<body>
<div id="hero-frame">
<template shadowrootmode="open">
<style>
@font-face {
font-family: "Overused Grotesk Medium";
src: url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 500;
}
@font-face {
font-family: "Inter";
src: url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 400;
}
* {
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
}
html,
body,
:host {
width: 100%;
margin: 0;
background: #161512;
}
body,
:host {
color: #f7f7f7;
font-family: "Inter", sans-serif;
font-weight: 400;
font-synthesis: none;
}
a,
button {
color: inherit;
font: inherit;
}
.hero {
position: relative;
width: 100%;
min-height: 100svh;
overflow: hidden;
isolation: isolate;
background: #161512;
}
@media (min-width: 1200px) {
/* Évite que la photo 16:9 soit de plus en plus zoomée sur les fenêtres très hautes. */
.hero { min-height: min(100svh, 62.5vw); }
}
.hero-photo {
position: absolute;
inset: 0;
z-index: -2;
width: 100%;
height: 100%;
display: block;
object-fit: cover;
object-position: 64% center;
-webkit-user-drag: none;
user-select: none;
-webkit-touch-callout: none;
}
.hero-shade {
position: absolute;
inset: 0;
z-index: -1;
pointer-events: none;
backdrop-filter: blur(28px);
-webkit-backdrop-filter: blur(28px);
background: linear-gradient(304deg, rgba(0, 0, 0, 0) 59%, rgba(0, 0, 0, 0.2) 100%);
-webkit-mask: linear-gradient(237deg, rgba(0, 0, 0, 0) 43.4435%, rgba(0, 0, 0, 0.95) 63.0631%, rgba(0, 0, 0, 1) 100%);
mask: linear-gradient(237deg, rgba(0, 0, 0, 0) 43.4435%, rgba(0, 0, 0, 0.95) 63.0631%, rgba(0, 0, 0, 1) 100%);
}
@media (max-width: 700px) {
.hero-shade {
backdrop-filter: none;
-webkit-backdrop-filter: none;
background:
linear-gradient(90deg, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.2) 40%, rgba(0, 0, 0, 0) 65%),
linear-gradient(180deg, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.6) 75%, rgba(0, 0, 0, 0.88) 100%);
-webkit-mask: none;
mask: none;
}
}
.navbar {
position: absolute;
z-index: 20;
top: 0;
left: 0;
width: 100%;
min-height: 82px;
padding: 20px clamp(28px, 5.55vw, 80px);
display: flex;
align-items: center;
gap: 34px;
border: 0;
background: transparent;
}
.brand {
display: inline-flex;
align-items: center;
gap: 10px;
flex: 0 0 auto;
text-decoration: none;
font-family: "Overused Grotesk Medium", sans-serif;
font-size: 18px;
font-weight: 500;
letter-spacing: -0.025em;
color: #f7f7f7;
}
.brand-mark {
width: 26px;
height: 26px;
display: grid;
place-items: center;
border: 1px solid rgba(255, 255, 255, 0.65);
border-radius: 50%;
font-family: "Inter", sans-serif;
font-size: 10px;
letter-spacing: -0.06em;
}
.nav-separator {
width: 1px;
height: 26px;
background: rgba(255, 255, 255, 0.14);
}
.nav-links {
display: flex;
align-items: center;
gap: clamp(20px, 2.2vw, 36px);
}
.nav-link {
padding: 8px 0;
border: 0;
background: none;
color: #f7f7f7;
text-decoration: none;
font-size: 14px;
line-height: 1;
cursor: pointer;
opacity: 0.92;
transition: opacity 160ms ease;
}
.nav-link:hover,
.nav-link:focus-visible {
opacity: 0.62;
}
.nav-cta {
margin-left: auto;
min-height: 44px;
padding: 0 20px;
font-size: 13px;
}
.menu-toggle,
.mobile-menu {
display: none;
}
@media (max-width: 1050px) {
.navbar { gap: 24px; }
.nav-links { gap: 18px; }
.nav-link { font-size: 13px; }
}
@media (max-width: 809px) {
.navbar {
min-height: 72px;
padding: 18px 20px;
}
.brand { font-size: 16px; }
.brand-mark { width: 24px; height: 24px; }
.nav-separator,
.nav-links,
.nav-cta {
display: none;
}
.menu-toggle {
width: 44px;
height: 40px;
margin-left: auto;
padding: 0;
display: grid;
place-content: center;
gap: 5px;
border: 0;
background: transparent;
cursor: pointer;
}
.menu-toggle span {
width: 22px;
height: 1px;
display: block;
background: #f7f7f7;
transition: transform 180ms ease;
}
.menu-toggle[aria-expanded="true"] span:first-child {
transform: translateY(3px) rotate(45deg);
}
.menu-toggle[aria-expanded="true"] span:last-child {
transform: translateY(-3px) rotate(-45deg);
}
.mobile-menu {
position: absolute;
z-index: 18;
top: 70px;
right: 20px;
left: 20px;
padding: 14px;
display: grid;
gap: 2px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 6px;
background: rgba(12, 12, 10, 0.96);
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.28);
backdrop-filter: blur(18px);
opacity: 0;
visibility: hidden;
transform: translateY(-8px);
transition: opacity 180ms ease, visibility 180ms ease, transform 180ms ease;
}
.mobile-menu.is-open {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.mobile-menu .nav-link {
width: 100%;
padding: 13px 12px;
text-align: left;
}
}
.hero-content {
position: absolute;
inset: 0;
z-index: 2;
width: min(100%, 1440px);
margin: 0 auto;
padding: 120px clamp(28px, 5.55vw, 80px) 60px;
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-start;
}
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400;
min-height: 34px;
margin: 0 0 16px;
padding: 9px 14px;
display: inline-flex;
align-items: center;
gap: 9px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.08);
color: rgba(255, 255, 255, 0.88);
font-size: 11px;
line-height: 1;
letter-spacing: 0.1em;
text-transform: uppercase;
backdrop-filter: blur(8px);
}
.eyebrow::before {
content: "";
width: 7px;
height: 7px;
flex: 0 0 7px;
border-radius: 50%;
background: currentColor;
}
.eyebrow-icon {
width: 13px;
height: 13px;
flex: 0 0 13px;
}
.hero-title {
max-width: 680px;
margin: 0;
font-family: "Overused Grotesk Medium", sans-serif;
font-size: clamp(34px, 4.6vw, 64px);
font-weight: 500;
line-height: 1.02;
letter-spacing: -0.045em;
text-wrap: balance;
color: #f7f7f7;
}
.hero-copy {
max-width: 470px;
margin: 26px 0 0;
color: #f7f7f7;
font-size: 15px;
line-height: 22.5px;
letter-spacing: -0.3px;
}
.hero-actions {
margin-top: 28px;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px;
}
.arrow {
font-size: 20px;
line-height: 0;
}
.button {
min-height: 52px;
padding: 0 24px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 12px;
border: 1px solid rgba(255, 255, 255, 0.25);
border-radius: 4px;
background: transparent;
color: #f7f7f7;
text-decoration: none;
font-size: 14px;
line-height: 1;
cursor: pointer;
transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease;
}
.button-primary {
border-color: #f7f7f7;
background: #f7f7f7;
color: rgba(0, 0, 0, 0.9);
}
.button:hover,
.button:focus-visible {
border-color: #f7f7f7;
background: #f7f7f7;
color: rgba(0, 0, 0, 0.9);
}
@media (max-width: 700px) {
.hero-content {
padding-top: 160px;
padding-bottom: 48px;
}
.hero-title {
font-size: 32px;
line-height: 1.1;
}
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400;
background: rgba(0, 0, 0, 0.4);
}
}
</style>
<section class="hero">
<img class="hero-photo" src="../sections-validees/_ressources/section-01/portrait-adam-hero.webp" alt="Adam Spilmann dans son bureau" width="1920" height="1080" fetchpriority="high" draggable="false">
<div class="hero-shade"></div>
<nav class="navbar" aria-label="Navigation principale">
<a class="brand" href="#" data-scroll-target="#hero-frame" aria-label="Adam Spilmann, retour en haut">
<span class="brand-mark" aria-hidden="true">AS</span>
<span>Adam Spilmann</span>
</a>
<span class="nav-separator" aria-hidden="true"></span>
<div class="nav-links">
<button class="nav-link" type="button" data-scroll-target="#hero-frame">Accueil</button>
<button class="nav-link" type="button" data-scroll-target="#about-frame">À propos</button>
<button class="nav-link" type="button" data-scroll-target="#etapes-frame">Méthode</button>
<button class="nav-link" type="button" data-scroll-target="#avant-apres-frame">Résultat client</button>
<button class="nav-link" type="button" data-scroll-target="#pourqui-frame">Pour qui</button>
<button class="nav-link" type="button" data-scroll-target="#faq-frame">FAQ</button>
</div>
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="mobile-menu" aria-label="Ouvrir le menu">
<span></span>
<span></span>
</button>
</nav>
<div class="mobile-menu" id="mobile-menu">
<button class="nav-link" type="button" data-scroll-target="#hero-frame">Accueil</button>
<button class="nav-link" type="button" data-scroll-target="#about-frame">À propos</button>
<button class="nav-link" type="button" data-scroll-target="#etapes-frame">Méthode</button>
<button class="nav-link" type="button" data-scroll-target="#avant-apres-frame">Résultat client</button>
<button class="nav-link" type="button" data-scroll-target="#pourqui-frame">Pour qui</button>
<button class="nav-link" type="button" data-scroll-target="#faq-frame">FAQ</button>
<a class="nav-link" href="mailto:adam@adamspilmann.fr" data-open-qualif>Réserver un échange</a>
</div>
<div class="hero-content">
<h1 class="eyebrow">Google Ads pour les plombiers<svg class="eyebrow-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 48 48"><polygon fill="#ffc107" points="30.129,15.75 18.871,9.25 5.871,31.25 17.129,37.75"/><path fill="#1e88e5" d="M31.871,37.75c1.795,3.109,5.847,4.144,8.879,2.379c3.103-1.806,4.174-5.77,2.379-8.879l-13-22 c-1.795-3.109-5.835-4.144-8.879-2.379c-3.106,1.801-4.174,5.77-2.379,8.879L31.871,37.75z"/><circle cx="11.5" cy="34.5" r="6.5" fill="#43a047"/></svg></h1>
<p class="hero-title">Si ce qui compte vraiment pour toi, c’est de faire sonner ton téléphone, alors cette page va te plaire !</p>
<p class="hero-copy">Découvre la stratégie que j’utilise avec des entreprises qui génèrent 5, 10, 20 ou 50 appels par jour et qui n’ont qu’une seule mesure de performance : <strong>est-ce que le téléphone sonne ?</strong></p>
</div>
</section>
<script>
(() => {
const root = document.currentScript.getRootNode();
const menuToggle = root.querySelector(".menu-toggle");
const mobileMenu = root.querySelector("#mobile-menu");
const closeMenu = () => {
menuToggle.setAttribute("aria-expanded", "false");
menuToggle.setAttribute("aria-label", "Ouvrir le menu");
mobileMenu.classList.remove("is-open");
};
menuToggle.addEventListener("click", () => {
const willOpen = menuToggle.getAttribute("aria-expanded") !== "true";
menuToggle.setAttribute("aria-expanded", String(willOpen));
menuToggle.setAttribute("aria-label", willOpen ? "Fermer le menu" : "Ouvrir le menu");
mobileMenu.classList.toggle("is-open", willOpen);
});
root.querySelectorAll("[data-scroll-target]").forEach((control) => {
control.addEventListener("click", (event) => {
event.preventDefault();
const selector = control.dataset.scrollTarget;
const target = document.querySelector(selector);
if (target) target.scrollIntoView({ behavior: "smooth", block: "start" });
closeMenu();
});
});
root.querySelectorAll("[data-open-qualif]").forEach((control) => {
control.addEventListener("click", (event) => {
if (typeof window.openQualifPopup !== "function") return;
event.preventDefault();
window.openQualifPopup();
closeMenu();
});
});
})();
</script>
</template>
</div>
<div id="intro-frame">
<template shadowrootmode="open">
<style>
@font-face {
font-family: "Overused Grotesk Medium";
src: url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 500;
}
@font-face {
font-family: "Inter";
src: url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 400;
}
:root,
:host {
--background: #f7f7f7;
--ink: rgba(0, 0, 0, 0.76);
}
* {
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
}
html,
body,
:host {
margin: 0;
background: var(--background);
}
body,
:host {
color: var(--ink);
font-family: "Inter", sans-serif;
font-synthesis: none;
}
.intro {
min-height: 374px;
padding: 120px clamp(28px, 5.55vw, 80px);
background: var(--background);
}
.statement {
width: min(100%, 1280px);
margin: 0 auto;
font-family: "Overused Grotesk Medium", sans-serif;
font-size: 40px;
font-weight: 500;
line-height: 44px;
letter-spacing: -0.02em;
text-wrap: balance;
}
.statement strong {
color: rgba(0, 0, 0, 0.42);
font-weight: 500;
}
@media (max-width: 809px) {
.intro {
min-height: auto;
padding: 72px 20px;
}
.statement {
font-size: 26px;
line-height: 32px;
}
}
</style>
<style>
.intro { min-height: auto; padding-bottom: 0; }
@media (max-width: 809px) { .intro { padding-bottom: 0; } }
</style>
<section class="intro" aria-labelledby="intro-title">
<p class="statement" id="intro-title">L’état d’esprit : c’est le point commun des entrepreneurs que j’accompagne et qui performent en publicité. Pourquoi ? Car ils ont décidé de passer à l’action, d’arrêter d’attendre passivement que des clients viennent à eux, et ont compris qu’investir en publicité en ligne est nécessaire pour dominer leurs régions <strong>(et sont prêts à mettre les moyens pour y arriver) !</strong></p>
</section>
</template>
</div>
<div id="plan-frame">
<template shadowrootmode="open">
<style>
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");font-weight:500;font-display:swap}
* { box-sizing: border-box; -webkit-font-smoothing: antialiased; }
html, body, :host { margin: 0; background: #f7f7f7; }
img { display: block; width: 100%; height: 100%; }
h1, h2, h3 { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; margin: 0; }
.plan { --background:#f7f7f7; --ink:rgba(0,0,0,.8); --body:rgba(0,0,0,.7); --line:rgba(0,0,0,.1); --pill:rgba(0,0,0,.05); background: var(--background); color: var(--ink); font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 400; font-synthesis: none; padding: 120px clamp(28px, 5.55vw, 80px) 0; }
.plan .inner { max-width: 1280px; margin: 0 auto; }
.header { max-width: 1280px; margin: 0 0 64px; text-align: left; }
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400; display: inline-flex; align-items: center; gap: 8px; min-height: 28px; padding: 8px 12px; margin: 0 0 24px; border-radius: 999px; background: var(--pill); color: var(--ink); font-size: 12px; font-weight: 500; line-height: 12px; letter-spacing: 1.2px; text-transform: uppercase; }
.eyebrow::before { content: ""; width: 6px; height: 6px; flex: 0 0 6px; border-radius: 999px; background: var(--ink); }
.plan-title { margin-top: 0; font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; max-width: 920px; font-size: 64px; line-height: 1.04; letter-spacing: -.04em; margin-bottom: 20px; text-wrap: balance; }
.header .subtext { font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: var(--body); margin: 0; max-width: 480px; }
.grid { display: grid; grid-template-columns: minmax(0,1.15fr) minmax(0,.85fr); gap: 64px; align-items: start; }
.accordion { border-top: 1px solid var(--line); }
.accordion details { border-bottom: 1px solid var(--line); }
.accordion summary { min-height: 74px; padding: 22px 0; display: flex; align-items: center; justify-content: space-between; gap: 24px; list-style: none; cursor: pointer; color: var(--ink); font-size: 16px; font-weight: 500; line-height: 1.4; letter-spacing: -.01em; }
.accordion summary::-webkit-details-marker { display: none; }
.icon { position: relative; width: 18px; height: 18px; flex: 0 0 18px; }
.icon::before, .icon::after { content: ""; position: absolute; top: 50%; left: 50%; width: 14px; height: 1px; background: #161512; transform: translate(-50%, -50%); transition: transform 180ms ease, opacity 180ms ease; }
.icon::after { transform: translate(-50%, -50%) rotate(90deg); }
.accordion details[open] .icon::after { opacity: 0; transform: translate(-50%, -50%) rotate(90deg) scaleX(0); }
.answer { margin: 0 0 24px; padding: 0 30px 0 0; }
.answer .desc { font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: var(--body); margin: 0 0 16px; }
.answer .desc:last-child { margin-bottom: 0; }
.checklist { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 14px; }
.checklist li { display: flex; align-items: flex-start; gap: 12px; font-size: 15px; line-height: 1.4; letter-spacing: -.1px; color: var(--body); }
.checklist .mark { flex-shrink: 0; margin-top: 1px; width: 24px; height: 24px; border-radius: 50%; background: rgba(0,0,0,.08); display: inline-flex; align-items: center; justify-content: center; }
.checklist .mark svg { width: 11px; height: 11px; }
.checklist .mark svg path { stroke: rgba(0,0,0,.5); }
.plan-photo { aspect-ratio: 4/5; border-radius: 4px; overflow: hidden; position: sticky; top: 100px; }
.plan-photo img { object-fit: cover; object-position: center 20%; }
@media (max-width: 960px) {
.grid { grid-template-columns: 1fr; gap: 40px; }
.plan-photo { position: static; max-width: 420px; }
}
@media (max-width: 700px) {
.plan { padding: 72px 16px 0; }
.header { margin-bottom: 44px; }
.plan-title { font-size: 40px; line-height: 1.06; }
.answer { padding-right: 0; }
}
</style>
<section class="plan" id="plan">
<div class="inner">
<header class="header">
<p class="eyebrow">Ce qui bloque les comptes</p>
<h2 class="plan-title">Google Ads pour plombiers : les erreurs fréquentes</h2>
<p class="subtext">Peu importe ton secteur exact : si tu veux de vraies campagnes Google Ads, pilotées par quelqu’un qui l’a déjà fait, voici les profils avec qui ça fonctionne le mieux.</p>
</header>
<div class="grid">
<div class="accordion">
<details open>
<summary><span>Les métiers de l’urgence : 70 % de ma clientèle</span><span class="icon" aria-hidden="true"></span></summary>
<div class="answer">
<p class="desc">Plombier, serrurier, électricien, dératiseur, assainissement, débouchage : une agence généraliste ne peut rien pour toi, ton domaine est trop concurrentiel. Elle sait très bien gérer un thérapeute dont le clic coûte 30 centimes. Sur un métier d’urgence, où le clic peut grimper à 15 ou 20 €, ce n’est plus le même jeu : sans stratégie adaptée, tu peux te cramer le budget en quelques jours. Il faut une stratégie pensée uniquement pour générer plus d’appels, avec une vraie solution contre les faux clics, une lecture honnête du terrain, et une vraie stratégie business.</p>
<ul class="checklist">
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Une stratégie pensée uniquement pour générer plus d’appels, pas plus de clics</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Une vraie solution contre les faux clics, sur des CPC qui peuvent grimper à 15-20 €</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Une lecture honnête du terrain, pas une stratégie générique copiée d’un autre secteur</li>
</ul>
</div>
</details>
<details>
<summary><span>Les entreprises de l’habitat</span><span class="icon" aria-hidden="true"></span></summary>
<div class="answer">
<p class="desc">Plombier, couvreur, peintre en bâtiment : je connais l’habitat, et je maîtrise vraiment ce type de comptes, du diagnostic jusqu’au pilotage au quotidien. Plus de 2 500 appels générés sur ce type d’activité.</p>
<ul class="checklist">
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Plus de 2 500 appels générés sur des comptes habitat</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Stratégie pensée uniquement pour générer plus de clients</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Stratégie axée sur la rentabilité de chaque service</li>
</ul>
</div>
</details>
<details>
<summary><span>Les entreprises de services, locales ou nationales</span><span class="icon" aria-hidden="true"></span></summary>
<div class="answer">
<p class="desc">Nettoyage, écoles, services B2B : que tu couvres une seule ville ou tout le territoire, chaque zone a ses propres enjeux business. Il faut une structure de compte pensée pour ça, avec une gestion rigoureuse, pas un compte générique qui traite toutes tes zones de la même façon.</p>
<ul class="checklist">
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Structure de compte adaptée aux enjeux business de chaque zone clé</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Gestion rigoureuse, pas une campagne lancée puis laissée tourner seule</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Comptes gérés aussi bien en local qu’à l’échelle nationale</li>
</ul>
</div>
</details>
<details>
<summary><span>Les dirigeants qui lancent une nouvelle société</span><span class="icon" aria-hidden="true"></span></summary>
<div class="answer">
<p class="desc">Tu ouvres une structure ou tu attaques une nouvelle ville : tu as besoin de clients vite, pour pouvoir te concentrer sur la croissance et le pilotage de ton entreprise, pas sur l’apprentissage de Google Ads. Tu ne veux pas un cours, tu veux un expert capable de gérer tout ton tunnel d’acquisition. J’ai déjà accompagné des entreprises passées de zéro à 50 000 € de bénéfice par mois.</p>
<ul class="checklist">
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Comptes pilotés de A à Z, pas un simple accompagnement théorique</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Tunnel d’acquisition géré dans son ensemble, pas juste les campagnes</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Des entreprises accompagnées de zéro à 50 000 € de bénéfice mensuel</li>
</ul>
</div>
</details>
<details>
<summary><span>Les repreneurs d’entreprise (rachat ou passation familiale)</span><span class="icon" aria-hidden="true"></span></summary>
<div class="answer">
<p class="desc">Beaucoup de reprises se font sur des entreprises qui ont toujours fonctionné au bouche-à-oreille ou sur un réseau déjà établi. Quand une nouvelle génération reprend l’activité, elle réalise souvent que l’acquisition client est quasi inexistante, et qu’il faut tout reconstruire. Il te faut quelqu’un de compétent pour aller chercher de nouveaux clients avec Google Ads, pas quelqu’un qui découvre le sujet en même temps que toi.</p>
<ul class="checklist">
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Acquisition reconstruite de zéro quand le bouche-à-oreille ne suffit plus</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Stratégie pensée pour une reprise, pas pour un compte qui tournait déjà en Ads</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Résultats visibles rapidement pour asseoir la reprise</li>
</ul>
</div>
</details>
</div>
<div class="plan-photo">
<img src="../sections-validees/_ressources/section-01/portrait-adam-hero.webp" alt="Adam Spilmann">
</div>
</div>
</div>
</section>
</template>
</div>
<div id="intro2-frame">
<template shadowrootmode="open">
<style>
@font-face {
font-family: "Overused Grotesk Medium";
src: url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 500;
}
@font-face {
font-family: "Inter";
src: url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 400;
}
:root,
:host {
--background: #f7f7f7;
--ink: rgba(0, 0, 0, 0.76);
}
* {
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
}
html,
body,
:host {
margin: 0;
background: var(--background);
}
body,
:host {
color: var(--ink);
font-family: "Inter", sans-serif;
font-synthesis: none;
}
.intro {
min-height: auto;
padding: 120px clamp(28px, 5.55vw, 80px) 0;
background: var(--background);
}
.statement {
width: min(100%, 1280px);
margin: 0 auto;
font-family: "Overused Grotesk Medium", sans-serif;
font-size: 40px;
font-weight: 500;
line-height: 44px;
letter-spacing: -0.02em;
text-wrap: balance;
}
.statement strong {
color: rgba(0, 0, 0, 0.42);
font-weight: 500;
}
@media (max-width: 809px) {
.intro {
min-height: auto;
padding: 72px 20px 0;
}
.statement {
font-size: 26px;
line-height: 32px;
}
}
</style>
<style>
.intro { min-height: 374px; padding-bottom: 120px; }
@media (max-width: 809px) { .intro { min-height: auto; padding-bottom: 72px; } }
</style>
<section class="intro" aria-labelledby="intro-title">
<h2 class="statement" id="intro-title">Ce que tu dois vraiment faire pour avoir des campagnes performantes</h2>
</section>
</template>
</div>
<div id="avant-apres-frame">
<template shadowrootmode="open">
<style>
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");font-weight:500;font-display:swap}
* { box-sizing: border-box; }
html, body, :host { margin: 0; background: #111820; }
img { display: block; width: 100%; height: auto; }
h1, h2, h3 { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; margin: 0; }
.dark { --background:#111820; --ink:#f7f7f7; --body:rgba(247,247,247,.72); --line:rgba(247,247,247,.14); background: var(--background); color: var(--ink); font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 400; font-synthesis: none; padding: 120px 28px; }
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400; display: inline-flex; align-items: center; gap: 9px; padding: 9px 14px; border-radius: 999px; background: rgba(247,247,247,.08); margin: 0 0 30px; font-size: 12px; line-height: 1.35; letter-spacing: .08em; text-transform: uppercase; color: rgba(247,247,247,.62); }
.eyebrow:before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.proof { padding: 8px; border-radius: 13px; background: rgba(247,247,247,.06); border: 1px solid rgba(247,247,247,.14); }
.proof img { border-radius: 6px; }
.proof-label { margin: 16px 0 0; font-size: 12px; line-height: 1.35; letter-spacing: .06em; text-transform: uppercase; color: rgba(247,247,247,.48); }
.result { font-size: 22px; line-height: 1.25; letter-spacing: -.02em; margin: 10px 0 12px; color: var(--ink); }
.desc { font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; margin: 0; color: var(--body); }
.v4 .inner { max-width: 1280px; margin: 0 auto; display: grid; grid-template-columns: minmax(0,.85fr) minmax(0,1.15fr); gap: 80px; align-items: start; }
.v4 .text-col { position: sticky; top: 100px; }
.v4 h3.v4-title { font-size: 64px; line-height: 1.04; letter-spacing: -.04em; margin-bottom: 24px; }
.v4 .text-col .desc { margin-bottom: 16px; }
.v4 .text-col .desc:last-child { margin-bottom: 0; }
.v4 .block + .block { margin-top: 56px; padding-top: 56px; border-top: 1px solid var(--line); }
@media (max-width: 960px) {
.v4 .inner { grid-template-columns: 1fr; gap: 44px; }
.v4 .text-col { position: static; }
}
@media (max-width: 640px) {
.dark.v4 { padding: 72px 16px; }
.v4 h3.v4-title { font-size: 40px; line-height: 1.06; }
}
</style>
<section class="dark v4" id="avant-apres">
<div class="inner">
<div class="text-col">
<h2 class="eyebrow">Résultat Google Ads plombier</h2>
<h3 class="v4-title">Plus de 3 500 demandes générées</h3>
</div>
<div class="cards-col">
<div class="block">
<div class="proof"><img src="../sections-validees/_ressources/section-03/resultat-debouchage.webp" alt="Résultat Google Ads plomberie et débouchage : plus de 3 500 demandes générées"></div>
</div>
</div>
</div>
</section>
</template>
</div>
<div id="about-frame">
<template shadowrootmode="open">
<style>
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");font-weight:500;font-display:swap}
* { box-sizing: border-box; }
html, body, :host { margin: 0; background: #f7f7f7; }
img { display: block; width: 100%; height: 100%; }
h1, h2, h3 { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; margin: 0; }
.about { --background:#f7f7f7; --ink:rgba(0,0,0,.8); --body:rgba(0,0,0,.7); --line:rgba(0,0,0,.1); background: var(--background); color: var(--ink); font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 400; font-synthesis: none; padding: 120px clamp(28px, 5.55vw, 80px) 0; }
.about .inner { max-width: 1280px; margin: 0 auto; display: grid; grid-template-columns: minmax(0,.85fr) minmax(0,1.15fr); gap: 50px; align-items: center; }
.about-photo { aspect-ratio: 1; border-radius: 4px; overflow: hidden; }
.about-photo img { object-fit: cover; object-position: center 20%; }
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400; display: inline-flex; align-items: center; gap: 9px; padding: 9px 14px; border-radius: 999px; background: rgba(0,0,0,.05); margin: 0 0 24px; font-size: 12px; line-height: 1.35; letter-spacing: .08em; text-transform: uppercase; color: rgba(0,0,0,.55); }
.eyebrow:before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.about-title { margin-top: 0; font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; font-size: 64px; line-height: 1.04; letter-spacing: -.04em; margin-bottom: 24px; }
.value-label { font-size: 16px; font-weight: 500; color: rgba(0,0,0,.9); margin: 0 0 20px; }
.checklist { list-style: none; margin: 0 0 24px; padding: 0; display: grid; gap: 16px; max-width: 600px; }
.about-details .desc { font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: var(--body); margin: 0 0 36px; max-width: 600px; }
.checklist li { display: flex; align-items: center; gap: 14px; font-size: 15px; line-height: 1.4; letter-spacing: -.1px; color: var(--body); }
.checklist .mark { flex-shrink: 0; width: 26px; height: 26px; border-radius: 50%; background: rgba(0,0,0,.08); display: inline-flex; align-items: center; justify-content: center; }
.checklist .mark svg { width: 12px; height: 12px; }
.checklist .mark svg path { stroke: rgba(0,0,0,.5); }
.cta { display: inline-flex; align-items: center; gap: 8px; padding: 16px 28px; border-radius: 4px; border: 0; background: #111820; color: #f7f7f7; font-family: "Inter","Inter Placeholder",sans-serif; font-size: 15px; font-weight: 500; letter-spacing: -.2px; cursor: pointer; }
.cta svg { width: 14px; height: 14px; }
@media (max-width: 900px) {
.about .inner { grid-template-columns: 1fr; gap: 36px; }
.about-photo { max-width: 420px; }
}
@media (max-width: 700px) {
.about { padding: 72px 16px 0; }
.about-title { margin-top: 0; font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; font-size: 40px; line-height: 1.06; }
}
</style>
<section class="about" id="about">
<div class="inner">
<div class="about-photo">
<img src="../sections-validees/_ressources/section-01/portrait-adam-hero.webp" alt="Adam Spilmann">
</div>
<div class="about-details">
<h2 class="eyebrow">Qui suis-je ?</h2>
<p class="about-title">Environ 13k prospects <strong>générés en 3 ans</strong></p>
<p class="value-label">Moi c’est Adam Spilmann, partenaire Google & Meta Ads des entreprises de services qui veulent plus de clients.</p>
<ul class="checklist">
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Formé sur les marchés publicitaires les plus concurrentiels</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Plusieurs comptes passés de 0 à 10, 20, 50 appels/jour (72 mon record)</li>
<li><span class="mark"><svg viewbox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg></span>Pas là pour te vendre du rêve, mais pour te dire la réalité, même si elle ne te plaît pas (sorry)</li>
</ul>
<p class="desc">Mes comptes sont pensés pour absorber la croissance, pas seulement pour tourner. Jamais de la vie je ne te garantirai des résultats chiffrés. Par contre, je peux te garantir de déployer tout ce que je sais, sans compter mes heures, tant que ton compte ne performe pas.</p>
</div>
</div>
</section>
</template>
</div>
<div id="etapes-frame">
<template shadowrootmode="open">
<style>
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");font-weight:500;font-display:swap}
* { box-sizing: border-box; }
html, body, :host { margin: 0; background: #f7f7f7; }
h1, h2, h3 { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; margin: 0; }
.etapes { --background:#f7f7f7; --ink:rgba(0,0,0,.8); --body:rgba(0,0,0,.7); --line:rgba(0,0,0,.12);
background: var(--background); color: var(--ink); font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 400; font-synthesis: none; padding: 120px 28px 0; }
.etapes .inner { max-width: 1280px; margin: 0 auto; }
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400; display: flex; align-items: center; justify-content: center; gap: 9px; width: fit-content; padding: 9px 14px; border-radius: 999px; background: rgba(0,0,0,.05); margin: 0 auto 30px; font-size: 12px; line-height: 1.35; letter-spacing: .08em; text-transform: uppercase; color: rgba(0,0,0,.55); }
.eyebrow:before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.etapes .steps-title { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; text-align: center; max-width: 780px; margin: 0 auto 64px; font-size: 64px; line-height: 1.04; letter-spacing: -.04em; }
/* barre d'onglets horizontale */
.tabs { display: flex; justify-content: center; gap: 8px; border-bottom: 1px solid var(--line); margin-bottom: 56px; }
.tab { appearance: none; border: 0; background: none; cursor: pointer; display: flex; align-items: center; gap: 10px; padding: 18px 24px; margin-bottom: -1px; border-bottom: 2px solid transparent; font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 500; font-size: 15px; line-height: 1.35; letter-spacing: -.2px; color: rgba(0,0,0,.45); }
.tab[aria-selected="true"] { color: var(--ink); border-bottom-color: var(--ink); }
.tab .num { font-size: 12px; letter-spacing: .04em; color: rgba(0,0,0,.35); }
.tab[aria-selected="true"] .num { color: var(--ink); }
.panel { display: none; }
.panel[data-active="true"] { display: block; }
.panel-content { max-width: 760px; margin: 0 auto; }
.panel-content h3 { font-size: 28px; line-height: 1.2; letter-spacing: -.02em; margin: 0 0 24px; }
.panel-content p { margin: 0 0 20px; font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: var(--body); }
.panel-content p:last-child { margin-bottom: 0; }
.cta-row { text-align: center; margin-top: 64px; }
.cta { display: inline-flex; align-items: center; gap: 8px; padding: 16px 28px; border-radius: 999px; border: 1px solid var(--ink); background: none; cursor: pointer; color: var(--ink); font-family: "Inter","Inter Placeholder",sans-serif; font-size: 15px; font-weight: 500; letter-spacing: -.2px; text-decoration: none; }
@media (max-width: 700px) {
.etapes { padding: 72px 16px 0; }
.etapes .steps-title { font-size: 40px; line-height: 1.06; margin-bottom: 44px; }
.tabs { justify-content: flex-start; overflow-x: auto; gap: 4px; }
.tab { padding: 14px 16px; font-size: 14px; white-space: nowrap; }
.panel-content h3 { font-size: 23px; }
}
</style>
<section class="etapes" id="etapes">
<div class="inner">
<h2 class="eyebrow">Comment ça marche ?</h2>
<p class="steps-title">Les 4 étapes pour <strong>travailler avec moi</strong></p>
<div class="tabs" role="tablist">
<button class="tab" role="tab" aria-selected="true" data-tab="1"><span class="num">01</span><span>Point stratégique</span></button>
<button class="tab" role="tab" aria-selected="false" data-tab="2"><span class="num">02</span><span>Lancement des campagnes</span></button>
<button class="tab" role="tab" aria-selected="false" data-tab="3"><span class="num">03</span><span>Consolidation des campagnes</span></button>
<button class="tab" role="tab" aria-selected="false" data-tab="4"><span class="num">04</span><span>Scaling et testing agressif</span></button>
</div>
<div class="panel" data-panel="1" data-active="true">
<div class="panel-content">
<h3>Mettre des chiffres sur votre ambition <strong>avant de dépenser</strong></h3>
<p>On se retrouve en visioconférence ou en présentiel autour de tableaux que j'ai construits pour projeter concrètement votre objectif : combien de demandes sont nécessaires pour atteindre votre chiffre d'affaires, combien une demande peut réellement coûter sur votre marché, quels services mettre en avant et quel budget prévoir.</p>
<p>Mon rôle est aussi de remettre de la vérité dans la publicité. Si votre clic coûte déjà 20 €, vous n'aurez pas durablement des demandes à 40 €. Le fait qu'un confrère obtienne ce coût dans une zone très peu concurrentielle, au fin fond du Morbihan, ne dit rien de votre réalité. On part donc des chiffres de votre marché, de vos marges et de vos capacités pour construire la stratégie la plus cohérente, sans vous vendre du rêve.</p>
</div>
</div>
<div class="panel" data-panel="2">
<div class="panel-content">
<h3>Lancer une base solide, <strong>déjà testée</strong> sur des marchés difficiles</h3>
<p>À partir de ce que nous avons défini ensemble, je déploie une structure de campagnes basée sur des stratégies qui ont déjà fait leurs preuves sur certains des marchés les plus concurrentiels.</p>
<p>L'idée n'est pas de partir d'une expérimentation montée au hasard, mais d'une base solide, pensée pour aller chercher du volume rapidement tout en restant lisible et pilotable. Cette première structure est une valeur sûre, amenée à être améliorée dès que les premières données arrivent.</p>
</div>
</div>
<div class="panel" data-panel="3">
<div class="panel-content">
<h3>Transformer les campagnes performantes en <strong>socle de revenus</strong></h3>
<p>On identifie les campagnes qui trouvent le bon volume, se positionnent correctement face à la concurrence, convertissent et génèrent des demandes que vous arrivez réellement à chiffrer et à signer.</p>
<p>On les consolide jusqu'à obtenir des campagnes stables, capables de tourner dans la durée et d'alimenter régulièrement l'entreprise. Elles deviennent une source constante de demandes et de revenus, sur laquelle on peut ensuite s'appuyer pour aller chercher plus loin.</p>
</div>
</div>
<div class="panel" data-panel="4">
<div class="panel-content">
<h3>Scaler et tester plus agressivement <strong>sans brûler la trésorerie</strong></h3>
<p>C'est tout l'intérêt de la consolidation. Une fois qu'un flux stable est installé, on peut augmenter les budgets, ouvrir de nouvelles campagnes et tester plus agressivement de nouveaux services, de nouvelles zones, de nouvelles offres ou de nouvelles stratégies.</p>
<p>L'objectif n'est pas de cramer toute la trésorerie d'un coup. On réinvestit directement une partie du chiffre généré par les campagnes déjà consolidées. Ce socle finance la croissance, limite le risque et permet d'aller chercher plus de volume sans repartir de zéro à chaque test.</p>
</div>
</div>
</div>
</section>
<script>
(() => {
const root = document.currentScript.getRootNode();
const tabs = root.querySelectorAll(".tab");
const panels = root.querySelectorAll(".panel");
tabs.forEach((tab) => {
tab.addEventListener("click", () => {
const id = tab.dataset.tab;
tabs.forEach((t) => t.setAttribute("aria-selected", t === tab ? "true" : "false"));
panels.forEach((p) => (p.dataset.active = p.dataset.panel === id ? "true" : "false"));
});
});
})();
</script>
</template>
</div>
<div id="pourqui-frame">
<template shadowrootmode="open">
<style>
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");font-weight:500;font-display:swap}
* { box-sizing: border-box; }
html, body, :host { margin: 0; background: #f7f7f7; }
h1, h2, h3, h4 { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; margin: 0; }
.light-bg { --background:#f7f7f7; --ink:rgba(0,0,0,.8); --body:rgba(0,0,0,.7); --line:rgba(0,0,0,.1); background: var(--background); color: var(--ink); font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 400; font-synthesis: none; padding: 120px 28px 0; }
.head { max-width: 900px; margin: 0 auto; text-align: center; padding-bottom: 84px; }
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400; display: flex; align-items: center; justify-content: center; gap: 9px; width: fit-content; padding: 9px 14px; border-radius: 999px; background: rgba(0,0,0,.05); margin: 0 auto 30px; font-size: 12px; line-height: 1.35; letter-spacing: .08em; text-transform: uppercase; color: rgba(0,0,0,.55); }
.eyebrow:before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.compatibility-title { margin: 0; font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; font-size: 64px; line-height: 1.04; letter-spacing: -.04em; }
.head .intro { max-width: 640px; margin: 24px auto 0; font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: var(--body); }
.inner { max-width: 1160px; margin: 0 auto; }
@media (max-width: 700px) {
.light-bg { padding: 72px 16px 0; }
.head { padding-bottom: 56px; text-align: left; }
.head .eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400; justify-content: flex-start; margin-left: 0; margin-right: 0; }
.head .intro { margin-left: 0; margin-right: 0; }
.compatibility-title { margin: 0; font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; font-size: 40px; line-height: 1.06; }
}
.mirror { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; }
.col-head { display: flex; align-items: center; gap: 16px; margin-bottom: 32px; }
.col-head .mark { width: 34px; height: 34px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 15px; color: #fff; flex-shrink: 0; }
.good .col-head .mark { background: #1f7a52; }
.bad .col-head .mark { background: #b3261e; }
.col-head h3 { font-size: clamp(24px,2.6vw,32px); line-height: 1.12; letter-spacing: -.03em; color: rgba(0,0,0,.9); }
.acc-list { border-top: 1px solid rgba(0,0,0,.14); }
.acc-item { border-bottom: 1px solid rgba(0,0,0,.14); }
.acc-trigger { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 22px 4px; background: none; border: 0; cursor: pointer; text-align: left; font-family: "Inter","Inter Placeholder",sans-serif; }
.acc-trigger h4 { font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 500; font-size: 16px; line-height: 1.4; letter-spacing: -.01em; color: rgba(0,0,0,.9); margin: 0; }
.bad .acc-trigger h4 { color: rgba(0,0,0,.75); }
.acc-plus { position: relative; width: 16px; height: 16px; flex-shrink: 0; }
.acc-plus:before, .acc-plus:after { content: ""; position: absolute; background: rgba(0,0,0,.45); border-radius: 1px; }
.acc-plus:before { top: 50%; left: 0; width: 16px; height: 1.5px; transform: translateY(-50%); }
.acc-plus:after { left: 50%; top: 0; width: 1.5px; height: 16px; transform: translateX(-50%); transition: transform .2s ease; }
.acc-item[data-open="true"] .acc-plus:after { transform: translateX(-50%) rotate(90deg); opacity: 0; }
.acc-panel { max-height: 0; overflow: hidden; transition: max-height .25s ease; }
.acc-panel-inner { padding: 0 28px 26px 4px; }
.acc-panel-inner > p { margin: 0 0 20px; font-size: 15px; line-height: 1.5em; letter-spacing: -.02em; color: var(--body); }
.bad .acc-panel-inner > p { color: rgba(0,0,0,.6); }
.acc-points { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.acc-points li { display: flex; align-items: flex-start; gap: 12px; font-size: 15px; line-height: 1.4; letter-spacing: -.1px; color: rgba(0,0,0,.75); }
.acc-points .pt-mark { width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; color: #fff; flex-shrink: 0; margin-top: 2px; }
.good .acc-points .pt-mark { background: #1f7a52; }
.bad .acc-points .pt-mark { background: #b3261e; }
.bad .acc-points li { color: rgba(0,0,0,.6); }
@media (max-width: 900px) {
.mirror { grid-template-columns: 1fr; gap: 48px; }
}
</style>
<section class="light-bg" id="pour-qui">
<div class="head">
<h2 class="eyebrow">Pour qui est cette offre ?</h2>
<p class="compatibility-title">Nos profils sont-ils <strong>compatibles ?</strong></p>
<p class="intro">Ce que j’aime, ce sont les entreprises qui raisonnent en volume et en rentabilité. Ce que je fuis, ce sont celles qui préfèrent commenter les chiffres plutôt que générer davantage de demandes.</p>
</div>
<div class="inner">
<div class="mirror">
<div class="good">
<div class="col-head"><span class="mark">✓</span><h3>Le profil que j’accompagne</h3></div>
<div class="acc-list">
<div class="acc-item" data-open="true">
<button class="acc-trigger"><h4>Une vision à long terme</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Ils raisonnent sur 90 à 180 jours, pas sur une semaine isolée. Un mois plus calme ne les inquiète pas si la tendance de fond reste bonne.</p>
<ul class="acc-points">
<li><span class="pt-mark">✓</span>Analyse les résultats sur plusieurs mois, pas semaine par semaine</li>
<li><span class="pt-mark">✓</span>Accepte une phase de test avant de juger la rentabilité</li>
<li><span class="pt-mark">✓</span>Garde le cap même si un mois est plus calme</li>
</ul>
</div></div>
</div>
<div class="acc-item" data-open="false">
<button class="acc-trigger"><h4>Une compréhension de l’investissement en ads</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Le budget publicitaire est vu comme un investissement, pas comme une dépense. Ils regardent ce qu’il rapporte, pas seulement ce qu’il coûte.</p>
<ul class="acc-points">
<li><span class="pt-mark">✓</span>Raisonne en retour sur investissement, pas en coût affiché</li>
<li><span class="pt-mark">✓</span>Prêt à augmenter le budget si la rentabilité suit</li>
<li><span class="pt-mark">✓</span>Comprend qu’un compte a besoin de données pour s’optimiser</li>
</ul>
</div></div>
</div>
<div class="acc-item" data-open="false">
<button class="acc-trigger"><h4>Une culture du volume et de la rentabilité</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>15 appels à 70 € valent mieux que 2 appels à 40 € si le chiffre et la marge suivent. Le volume ne leur fait pas peur.</p>
<ul class="acc-points">
<li><span class="pt-mark">✓</span>Veut maximiser le nombre de demandes, pas juste réduire le coût par lead</li>
<li><span class="pt-mark">✓</span>À l’aise avec un volume élevé tant que la marge suit</li>
<li><span class="pt-mark">✓</span>Sait absorber les nouvelles demandes côté terrain</li>
</ul>
</div></div>
</div>
<div class="acc-item" data-open="false">
<button class="acc-trigger"><h4>Ne croit plus aux méthodes miracles</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Méfie-toi des agences qui promettent 300 prospects dès le premier mois, sans engagement dans la durée et avec des conditions de paiement floues. Ce qu’il faut chercher, ce n’est pas une promesse impossible à tenir : c’est quelqu’un qui s’implique vraiment dans ton business.</p>
<ul class="acc-points">
<li><span class="pt-mark">✓</span>Aucune promesse de volume irréaliste dès le premier mois</li>
<li><span class="pt-mark">✓</span>Un engagement clair dans la durée, pas un coup d’un soir</li>
<li><span class="pt-mark">✓</span>Des conditions de paiement transparentes, écrites noir sur blanc</li>
</ul>
</div></div>
</div>
</div>
</div>
<div class="bad">
<div class="col-head"><span class="mark">✕</span><h3>Le profil que j’évite</h3></div>
<div class="acc-list">
<div class="acc-item" data-open="true">
<button class="acc-trigger"><h4>La forme avant le fond</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Plus attentifs aux reportings, aux réunions et aux micro-variations qu’au volume réel de demandes généré.</p>
<ul class="acc-points">
<li><span class="pt-mark">✕</span>Se concentre sur les rapports plutôt que sur les demandes générées</li>
<li><span class="pt-mark">✕</span>Commente chaque micro-variation du coût par clic</li>
<li><span class="pt-mark">✕</span>Préfère un beau reporting à un résultat concret</li>
</ul>
</div></div>
</div>
<div class="acc-item" data-open="false">
<button class="acc-trigger"><h4>L’exigence de promesses de résultats</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Veulent une garantie chiffrée avant même de commencer, alors que la publicité reste un système à ajuster, pas une formule magique.</p>
<ul class="acc-points">
<li><span class="pt-mark">✕</span>Demande une garantie de résultat avant même de démarrer</li>
<li><span class="pt-mark">✕</span>Compare à un concurrent sans connaître son propre marché</li>
<li><span class="pt-mark">✕</span>Veut un chiffre figé plutôt qu’une stratégie qui s’ajuste</li>
</ul>
</div></div>
</div>
<div class="acc-item" data-open="false">
<button class="acc-trigger"><h4>Le prix avant la rentabilité</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Cherchent le moins cher possible plutôt que le plus rentable. Un budget plus élevé mais plus rentable ne les intéresse pas.</p>
<ul class="acc-points">
<li><span class="pt-mark">✕</span>Cherche le prestataire le moins cher, pas le plus rentable</li>
<li><span class="pt-mark">✕</span>Hésite à investir même quand le retour est démontré</li>
<li><span class="pt-mark">✕</span>Compare des devis sans comparer les résultats obtenus</li>
</ul>
</div></div>
</div>
<div class="acc-item" data-open="false">
<button class="acc-trigger"><h4>Le blocage au moindre imprévu</h4><span class="acc-plus"></span></button>
<div class="acc-panel"><div class="acc-panel-inner">
<p>Bloquent sur un dépassement budgétaire même lorsque la croissance suit. La bureaucratie passe avant l’encaissement.</p>
<ul class="acc-points">
<li><span class="pt-mark">✕</span>Bloque le budget dès le moindre dépassement</li>
<li><span class="pt-mark">✕</span>Freine une campagne qui fonctionne par excès de prudence</li>
<li><span class="pt-mark">✕</span>Priorise la validation interne à la vitesse d’exécution</li>
</ul>
</div></div>
</div>
</div>
</div>
</div>
</div>
</section>
<script>
(() => {
const root = document.currentScript.getRootNode();
root.querySelectorAll(".acc-list").forEach((list) => {
const items = [...list.querySelectorAll(".acc-item")];
const applyState = () => {
items.forEach((item) => {
const panel = item.querySelector(".acc-panel");
panel.style.maxHeight = item.dataset.open === "true" ? `${panel.scrollHeight}px` : "0px";
});
};
items.forEach((item) => {
item.querySelector(".acc-trigger").addEventListener("click", () => {
const isOpen = item.dataset.open === "true";
items.forEach((i) => (i.dataset.open = "false"));
item.dataset.open = isOpen ? "false" : "true";
applyState();
});
});
applyState();
window.addEventListener("resize", applyState);
});
})();
</script>
</template>
</div>
<div id="faq-frame">
<template shadowrootmode="open">
<style>
@font-face {
font-family: "Overused Grotesk Medium";
src: url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 500;
}
@font-face {
font-family: "Inter";
src: url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Inter";
src: url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");
font-display: swap;
font-style: normal;
font-weight: 500;
}
:root,
:host {
--background: #f7f7f7;
--ink: rgba(0, 0, 0, 0.9);
--body: rgba(0, 0, 0, 0.7);
--line: rgba(0, 0, 0, 0.1);
--pill: rgba(0, 0, 0, 0.05);
}
* {
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
}
html,
body,
:host {
margin: 0;
min-height: 100%;
background: var(--background);
}
body,
:host {
color: var(--ink);
font-family: "Inter", "Inter Placeholder", sans-serif;
font-synthesis: none;
}
.faq {
min-height: 100vh;
padding: 86px 40px;
display: flex;
align-items: center;
background: var(--background);
}
.container {
width: min(1160px, 100%);
margin: 0 auto;
}
.header {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 24px;
margin-bottom: 68px;
}
.eyebrow { font-family: "Inter", "Inter Placeholder", sans-serif; font-weight: 400;
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 28px;
padding: 8px 12px;
border-radius: 999px;
background: var(--pill);
color: var(--ink);
font-size: 12px;
font-weight: 500;
line-height: 12px;
letter-spacing: 1.2px;
text-transform: uppercase;
}
.eyebrow::before {
content: "";
width: 6px;
height: 6px;
flex: 0 0 6px;
border-radius: 999px;
background: var(--ink);
}
.faq-title {
max-width: 780px;
margin: 0;
font-family: "Overused Grotesk Medium", "Overused Grotesk Medium Placeholder", sans-serif;
font-size: 64px;
font-weight: 500;
line-height: 1.04;
letter-spacing: -0.04em;
text-wrap: balance;
}
.faq-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
column-gap: 80px;
}
.faq-column {
min-width: 0;
}
details {
border-bottom: 1px solid var(--line);
}
.faq-column details:first-child {
border-top: 1px solid var(--line);
}
summary {
min-height: 78px;
padding: 24px 0;
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
list-style: none;
cursor: pointer;
color: var(--ink);
font-size: 16px;
font-weight: 500;
line-height: 1.4;
letter-spacing: -0.01em;
}
summary::-webkit-details-marker {
display: none;
}
.icon {
position: relative;
width: 18px;
height: 18px;
flex: 0 0 18px;
}
.icon::before,
.icon::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 14px;
height: 1px;
background: #161512;
transform: translate(-50%, -50%);
transition: transform 180ms ease, opacity 180ms ease;
}
.icon::after {
transform: translate(-50%, -50%) rotate(90deg);
}
details[open] .icon::after {
opacity: 0;
transform: translate(-50%, -50%) rotate(90deg) scaleX(0);
}
.answer {
max-width: 520px;
margin: 0;
padding: 0 42px 24px 0;
color: var(--body);
font-size: 15px;
font-weight: 400;
line-height: 22.5px;
letter-spacing: -0.3px;
}
@media (max-width: 809px) {
.faq {
min-height: auto;
padding: 64px 20px;
}
.header {
gap: 20px;
margin-bottom: 48px;
}
.faq-title {
font-size: 40px;
line-height: 1.06;
}
.faq-grid {
grid-template-columns: 1fr;
column-gap: 0;
}
.faq-column + .faq-column details:first-child {
border-top: 0;
}
summary {
min-height: 74px;
padding: 22px 0;
font-size: 15px;
}
.answer {
padding-right: 30px;
}
}
</style>
<section class="faq" id="faq" aria-labelledby="faq-title">
<div class="container">
<header class="header">
<h2 class="eyebrow" id="faq-title">Questions fréquentes sur Google Ads pour plombiers</h2>
<p class="faq-title">Les questions que l’on me pose <strong>le plus souvent</strong></p>
</header>
<div class="faq-grid">
<div class="faq-column">
<details open>
<summary>
<span>Peux-tu accompagner le lancement d’une nouvelle activité ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Oui, totalement. Je l’ai déjà fait plusieurs fois, avec des entreprises parties de zéro et devenues très rentables en quelques mois. Mais lancer une activité ne signifie pas forcément se lancer sans argent. Si tu viens de créer ta micro-entreprise avec 300 € à investir, je ne peux pas t’aider : on ne construit pas un système d’acquisition solide avec ses derniers euros. En revanche, si tu lances une entreprise, une activité ou une implantation avec une vraie enveloppe pour te développer, c’est exactement le genre de projet que j’aime accompagner.</p>
</details>
<details>
<summary>
<span>Pourquoi refuses-tu de garantir un nombre d’appels ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Parce que garantir un nombre d’appels, c’est du bullshit. Je pourrais te promettre 30 appels en 90 jours, mais je ne prendrais aucun risque. Deux campagnes identiques ne produisent jamais exactement les mêmes résultats : les enchères, la concurrence et les prospects changent d’une zone à l’autre. Mes clients ne signent pas pour une garantie artificielle. Ils signent parce que j’ai déjà atteint les niveaux qu’ils veulent viser. Ma garantie, c’est mon implication : je vais me tuer sur leur compte jusqu’à trouver ce qui fonctionne.</p>
</details>
<details>
<summary>
<span>Peut-on relancer un compte qui a déjà échoué ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Oui. Un compte qui a échoué n’est pas forcément un compte qui ne pouvait pas fonctionner. Nous auditons les campagnes, le tracking, la landing page, l’offre et le traitement des appels pour trouver le vrai point de blocage. Ensuite, il faut poser la question que beaucoup évitent : les moyens engagés étaient-ils cohérents avec les objectifs ? Tu ne peux pas vouloir générer 50 000 € de chiffre d’affaires supplémentaire avec 500 € de budget, puis conclure que Google Ads ne fonctionne pas.</p>
</details>
<details>
<summary>
<span>Mon marché est concurrentiel : peut-il quand même être rentable ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Quand j’entends qu’un marché est « trop concurrentiel », je demande : trop concurrentiel par rapport à quoi ? Tu es couvreur, tu peux gagner 20 000 ou 30 000 € sur une rénovation, mais investir 3 000 € pour trouver des clients te paraît déraisonnable ? Tu es plombier, tu factures une recherche de fuite près de 1 000 €, mais une demande à 80 € serait impossible à rentabiliser ? Si tes concurrents investissent pour rester visibles, c’est probablement qu’ils y trouvent leur compte. Le problème n’est pas toujours la concurrence. Parfois, c’est simplement la peur d’investir.</p>
</details>
</div>
<div class="faq-column">
<details>
<summary>
<span>Puis-je vérifier les résultats de tes anciens clients ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Oui, avec grand plaisir. Je peux te montrer la majorité des comptes Google Ads que je gère, avec leurs dépenses, les appels générés et le contexte des résultats. Avec leur accord, je peux également te transmettre les coordonnées de certains clients pour que tu leur poses directement tes questions. Je préfère te montrer de vrais comptes plutôt que te demander de croire une capture d’écran sortie de son contexte.</p>
</details>
<details>
<summary>
<span>Peux-tu m’aider à conquérir un nouveau secteur ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Oui, je l’ai déjà fait plusieurs fois. Si tu veux ouvrir une nouvelle ville, un département ou une zone, dis-le-moi dès le départ. Je construirai une stratégie spécifique avec des budgets, des services et des objectifs adaptés à chaque secteur. Je ne lance pas quelques annonces dans une nouvelle ville en espérant que ça prenne : je réfléchis au tunnel complet, de la visibilité jusqu’au traitement des appels et à la rentabilité de la zone.</p>
</details>
<details>
<summary>
<span>Quelqu’un a déjà géré mes publicités sans succès : que feras-tu différemment ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Beaucoup de personnes s’improvisent expertes après avoir lancé quelques campagnes. De mon côté, j’ai dépensé plusieurs millions d’euros et généré des dizaines de milliers d’appels pour mes clients. Je commencerai par auditer ton compte et t’expliquer précisément ce qui n’allait pas. Mais demande-toi aussi si ton ancien prestataire avait déjà atteint les résultats que tu lui demandais. Tu veux générer 30 000 € de bénéfices supplémentaires par mois ? Pourquoi confier cet objectif à quelqu’un qui ne l’a jamais fait ?</p>
</details>
<details>
<summary>
<span>Je n’ai que quelques centaines d’euros à investir : est-ce suffisant ?</span>
<span class="icon" aria-hidden="true"></span>
</summary>
<p class="answer">Dans la majorité des entreprises de services, non. Je préfère te le dire franchement plutôt que d’encaisser tes derniers euros pour faire semblant de travailler. Avec quelques centaines d’euros, tu n’auras généralement ni le volume ni les données nécessaires pour prendre de bonnes décisions. Pour la plupart des entreprises que j’accompagne, investir moins de 3 000 € par mois n’a pas beaucoup de sens. Si cet investissement met ton entreprise en danger, ne lance pas Google Ads maintenant : ce n’est pas un bouton magique pour sauver une société sans trésorerie.</p>
</details>
</div>
</div>
</div>
</section>
</template>
</div>
<div id="footer-frame">
<template shadowrootmode="open">
<style>
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-medium.woff2") format("woff2");font-weight:500;font-display:swap}
* { box-sizing: border-box; -webkit-font-smoothing: antialiased; }
html, body, :host { margin: 0; background: #161512; }
h1, h2, h3 { font-family: "Overused Grotesk Medium", sans-serif; font-weight: 500; margin: 0; }
.site-footer { background: #161512; color: #f7f7f7; font-family: "Inter","Inter Placeholder",sans-serif; font-weight: 400; font-synthesis: none; padding: 96px clamp(28px, 5.55vw, 80px) 32px; }
.site-footer .inner { max-width: 1160px; margin: 0 auto; }
.top { display: flex; align-items: flex-end; justify-content: space-between; gap: 40px; padding-bottom: 56px; }
.brand .name { font-size: 32px; line-height: 1.1; letter-spacing: -.02em; color: #f7f7f7; margin-bottom: 14px; }
.brand .tagline { max-width: 440px; font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: #f7f7f7; margin: 0; }
.button { flex-shrink: 0; min-height: 52px; padding: 0 24px; display: inline-flex; align-items: center; justify-content: center; gap: 12px; border: 1px solid #f7f7f7; border-radius: 4px; background: #f7f7f7; color: rgba(0,0,0,.9); text-decoration: none; font-size: 14px; line-height: 1; white-space: nowrap; }
.arrow { font-size: 16px; line-height: 0; }
.columns { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 32px; padding: 56px 0; border-top: 1px solid rgba(255,255,255,.12); }
.col-label { font-size: 12px; font-weight: 500; letter-spacing: 1.2px; text-transform: uppercase; color: rgba(255,255,255,.5); margin: 0 0 20px; }
.col-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
.col-list li a,
.col-list li span { color: #f7f7f7; text-decoration: none; font-size: 15px; line-height: 1.4; letter-spacing: -.1px; }
.col-list li a:hover { color: rgba(255,255,255,.7); }
.col-note { max-width: 260px; font-size: 15px; line-height: 22.5px; letter-spacing: -.3px; color: #f7f7f7; margin: 0; }
.bottom { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px; padding-top: 28px; border-top: 1px solid rgba(255,255,255,.12); font-size: 13px; line-height: 1.4; letter-spacing: -.1px; color: rgba(255,255,255,.5); }
.bottom-links { display: flex; flex-wrap: wrap; gap: 20px; }
.bottom-links a { color: rgba(255,255,255,.5); text-decoration: none; }
.bottom-links a:hover { color: rgba(255,255,255,.8); }
@media (max-width: 900px) {
.columns { grid-template-columns: repeat(2, minmax(0,1fr)); row-gap: 40px; }
}
@media (max-width: 700px) {
.site-footer { padding: 64px 20px 24px; }
.top { flex-direction: column; align-items: flex-start; gap: 24px; padding-bottom: 40px; }
.brand .name { font-size: 26px; }
.columns { grid-template-columns: 1fr; gap: 32px; padding: 40px 0; }
.bottom { flex-direction: column; align-items: flex-start; gap: 14px; }
}
</style>
<footer class="site-footer">
<div class="inner">
<div class="top">
<div class="brand">
<p class="name">Adam Spilmann</p>
<p class="tagline">Acquisition Google Ads et Facebook Ads pour les entreprises de services qui veulent absorber la croissance, pas seulement tourner.</p>
</div>
<a class="button" href="mailto:adam@adamspilmann.fr" data-open-qualif>Réserver un échange <span class="arrow" aria-hidden="true">→</span></a>
</div>
<div class="columns">
<div>
<p class="col-label">Navigation</p>
<ul class="col-list">
<li><a href="#hero-frame" data-scroll-target="#hero-frame">Accueil</a></li>
<li><a href="#avant-apres-frame" data-scroll-target="#avant-apres-frame">Résultat client</a></li>
<li><a href="#about-frame" data-scroll-target="#about-frame">Qui suis-je</a></li>
<li><a href="#faq-frame" data-scroll-target="#faq-frame">FAQ</a></li>
</ul>
</div>
<div>
<p class="col-label">Contact</p>
<ul class="col-list">
<li><a href="mailto:adam@adamspilmann.fr">adam@adamspilmann.fr</a></li>
<li><span>Réponse sous 24h ouvrées</span></li>
</ul>
</div>
<div>
<p class="col-label">Légal</p>
<ul class="col-list">
<li><a href="../mentions-legales.html" target="_parent">Mentions légales</a></li>
<li><a href="../politique-de-confidentialite.html" target="_parent">Politique de confidentialité</a></li>
</ul>
</div>
<div>
<p class="col-label">À propos</p>
<p class="col-note">Consultant indépendant en acquisition payante, spécialisé sur les entreprises de services : plombiers, serruriers, entreprises de nettoyage, paysagistes, B2B.</p>
</div>
</div>
<div class="bottom">
<p>© 2026 Adam Spilmann. Tous droits réservés.</p>
<div class="bottom-links">
<a href="../mentions-legales.html" target="_parent">Mentions légales</a>
<a href="../politique-de-confidentialite.html" target="_parent">Politique de confidentialité</a>
</div>
</div>
</div>
</footer>
<script>
(() => {
const root = document.currentScript.getRootNode();
root.querySelectorAll("[data-open-qualif]").forEach((control) => {
control.addEventListener("click", (event) => {
if (typeof window.openQualifPopup !== "function") return;
event.preventDefault();
window.openQualifPopup();
});
});
root.querySelectorAll("[data-scroll-target]").forEach((control) => {
control.addEventListener("click", (event) => {
event.preventDefault();
const target = document.querySelector(control.dataset.scrollTarget);
if (target) target.scrollIntoView({ behavior: "smooth", block: "start" });
});
});
})();
</script>
</template>
</div>
<div class="qualif-overlay" id="qualif-overlay" aria-hidden="true">
<div class="qualif-dialog" role="dialog" aria-modal="true" aria-labelledby="qualif-title">
<div class="qualif-header">
<div class="qualif-brand">
<strong>Adam Spilmann</strong>
<span>Qualification du projet</span>
</div>
<button type="button" class="qualif-close" id="qualif-close" aria-label="Fermer">×</button>
</div>
<div class="qualif-progress"><div class="qualif-progress-bar" id="qualif-progress-bar"></div></div>
<div class="qualif-panel" data-panel="step-1">
<p class="qualif-question" id="qualif-title">Point important : je ne suis pas un sauveur d’entreprise.</p>
<p class="qualif-subtitle">
<span>Google Ads peut être extrêmement rentable, mais il faut un minimum de budget pour lancer, tester et optimiser une stratégie correctement.</span>
<span>On voit de tout sur les réseaux sociaux, mais non : 500 € ne suffisent pas pour transformer un compte en machine à générer des clients. J’ai monté des comptes à 10, 20, parfois 50 appels par jour, et aucun n’a démarré avec quelques centaines d’euros.</span>
<span>Je ne vous demande pas de rouler sur l’or. En revanche, si vous avez de grandes ambitions pour votre entreprise, il faut être prêt à mettre les moyens en face pour les atteindre.</span>
<span>La publicité est un levier de développement, pas une méthode miracle.</span>
</p>
<div class="qualif-answers">
<button type="button" class="qualif-answer" data-next="step-2" data-label="Je suis prêt à mettre les moyens pour me développer"><span class="dot" aria-hidden="true"></span><span>Je suis prêt à mettre les moyens pour me développer</span></button>
<button type="button" class="qualif-answer" data-next="result-no" data-label="Je préfère continuer sans investir dans mon acquisition"><span class="dot" aria-hidden="true"></span><span>Je préfère continuer sans investir dans mon acquisition</span></button>
</div>
</div>
<div class="qualif-panel" data-panel="step-2">
<p class="qualif-question">Quand souhaitez-vous commencer à recevoir plus de clients grâce à la publicité ?</p>
<div class="qualif-answers">
<button type="button" class="qualif-answer" data-next="step-3" data-label="Le plus rapidement possible"><span class="dot" aria-hidden="true"></span><span>Le plus rapidement possible</span></button>
<button type="button" class="qualif-answer" data-next="step-3" data-label="Dans les semaines à venir"><span class="dot" aria-hidden="true"></span><span>Dans les semaines à venir</span></button>
<button type="button" class="qualif-answer" data-next="result-no" data-label="Je compare actuellement différentes offres"><span class="dot" aria-hidden="true"></span><span>Je compare actuellement différentes offres</span></button>
</div>
</div>
<div class="qualif-panel" data-panel="step-3">
<p class="qualif-question">Mise en situation FICTIVE</p>
<p class="qualif-subtitle"><span>Une solution pourrait permettre de générer 50 000 € de chiffre d’affaires supplémentaire chaque mois. Sa mise en place représente un investissement initial de 5 000 €. Quelle serait votre première réaction ?</span></p>
<div class="qualif-answers">
<button type="button" class="qualif-answer" data-next="result-ok" data-label="L’investissement me semble cohérent si le plan est sérieux et le potentiel crédible."><span class="dot" aria-hidden="true"></span><span>L’investissement me semble cohérent si le plan est sérieux et le potentiel crédible.</span></button>
<button type="button" class="qualif-answer" data-next="result-no" data-label="5 000 €, c’est trop cher, même si cela me rapporte 50 000 €."><span class="dot" aria-hidden="true"></span><span>5 000 €, c’est trop cher, même si cela me rapporte 50 000 €.</span></button>
<button type="button" class="qualif-answer" data-next="result-ok" data-label="Si cela me rapporte 50 000 €, je suis prêt à investir 5 000 €."><span class="dot" aria-hidden="true"></span><span>Si cela me rapporte 50 000 €, je suis prêt à investir 5 000 €.</span></button>
<button type="button" class="qualif-answer" data-next="result-no" data-label="Je cherche actuellement une solution aux alentours de 500 €."><span class="dot" aria-hidden="true"></span><span>Je cherche actuellement une solution aux alentours de 500 €.</span></button>
</div>
<p class="qualif-disclaimer">Cette situation est un exemple entièrement fictif. Les montants présentés ne correspondent pas nécessairement au prix d’une prestation ou aux résultats pouvant être obtenus.</p>
</div>
<div class="qualif-panel qualif-result ok" data-panel="result-ok">
<div class="qualif-result-icon">✓</div>
<p class="qualif-result-label">Votre profil semble correspondre</p>
<p class="qualif-result-title">Super, d’après tes réponses, il y a de fortes chances que je puisse t’aider à te développer !</p>
<p class="qualif-result-copy">Je t’invite à m’envoyer directement un message WhatsApp en cliquant sur le bouton pour que nous puissions échanger ensemble.</p>
<a class="qualif-whatsapp" id="qualif-whatsapp-link" href="#" target="_blank" rel="noopener noreferrer">
<svg viewbox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M19.05 4.91A9.82 9.82 0 0 0 12.03 2C6.57 2 2.13 6.44 2.13 11.9c0 1.75.46 3.46 1.33 4.96L2 22l5.27-1.38a9.84 9.84 0 0 0 4.74 1.21h.01c5.46 0 9.9-4.44 9.9-9.9a9.8 9.8 0 0 0-2.87-7.02Zm-7.02 15.25h-.01a8.14 8.14 0 0 1-4.15-1.14l-.3-.18-3.13.82.84-3.05-.2-.31a8.18 8.18 0 0 1-1.25-4.39c0-4.5 3.66-8.16 8.17-8.16 2.18 0 4.22.85 5.76 2.39a8.09 8.09 0 0 1 2.38 5.77c0 4.5-3.66 8.16-8.16 8.16Zm4.48-6.11c-.25-.12-1.47-.72-1.7-.8-.23-.09-.4-.12-.57.12-.17.25-.65.8-.8.97-.15.17-.29.19-.54.06-.25-.12-1.04-.38-1.98-1.22-.73-.65-1.22-1.45-1.37-1.69-.14-.25-.02-.38.11-.5.11-.11.25-.29.37-.43.12-.15.17-.25.25-.42.08-.17.04-.31-.02-.43-.06-.12-.57-1.37-.78-1.88-.21-.5-.42-.43-.57-.43h-.49c-.17 0-.43.06-.66.31-.23.25-.87.85-.87 2.08s.89 2.41 1.01 2.58c.12.17 1.76 2.69 4.27 3.77.6.26 1.07.42 1.43.54.6.19 1.14.16 1.57.1.48-.07 1.47-.6 1.68-1.18.21-.59.21-1.09.15-1.19-.06-.11-.23-.17-.48-.29Z"/></svg>
<span>Clique ici pour lancer une conversation WhatsApp</span>
</a>
<p class="qualif-desktop-note">Tu es sur ordinateur ? Envoie-moi directement un message à ce numéro :</p>
<p class="qualif-desktop-number">+33 7 59 60 49 17</p>
</div>
<div class="qualif-panel qualif-result no" data-panel="result-no">
<div class="qualif-result-icon">×</div>
<p class="qualif-result-label">Votre profil semble moins correspondre</p>
<p class="qualif-result-title">Il semblerait, d’après vos réponses, que vous ne soyez peut-être pas éligible à mon offre.</p>
<p class="qualif-result-copy">Cela ne signifie pas que ton projet n’est pas intéressant. Tu peux toujours m’envoyer directement un message sur Instagram pour m’expliquer ta situation.</p>
<a class="qualif-instagram" href="#" target="_blank" rel="noopener noreferrer">M’envoyer un message sur Instagram</a>
</div>
</div>
</div>
<script>
// Cette page est une copie de la landing page actuelle. Seules les
// sections 3 et 4 sont remplacées par leur contenu métier.
const metierStyles = `
@font-face{font-family:"Overused Grotesk Medium";src:url("../sections-validees/_ressources/communs/overused-grotesk-medium.woff2") format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter";src:url("../sections-validees/_ressources/communs/inter-regular.woff2") format("woff2");font-weight:400;font-display:swap}
*{box-sizing:border-box;-webkit-font-smoothing:antialiased}
:host{display:block;background:#f7f7f7;color:rgba(0,0,0,.8);font-family:"Inter",sans-serif;font-synthesis:none}
h2,h3{margin:0;font-family:"Overused Grotesk Medium",sans-serif;font-weight:500}
p{margin:0}
.section{padding:120px clamp(28px,5.55vw,80px)}
.inner{max-width:1280px;margin:0 auto}
.eyebrow{font-family:"Inter","Inter Placeholder",sans-serif;font-weight:400;display:inline-flex;align-items:center;gap:8px;min-height:28px;padding:8px 12px;margin:0 0 24px;border-radius:999px;background:rgba(0,0,0,.05);font-size:12px;font-weight:500;line-height:12px;letter-spacing:1.2px;text-transform:uppercase}
.eyebrow:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.title{max-width:920px;font-size:64px;line-height:1.04;letter-spacing:-.04em;text-wrap:balance}
.intro{max-width:610px;margin-top:24px;font-size:15px;line-height:22.5px;letter-spacing:-.3px;color:rgba(0,0,0,.7)}
.problems{margin-top:64px;border-top:1px solid rgba(0,0,0,.1)}
.problem{display:grid;grid-template-columns:70px minmax(240px,.85fr) minmax(300px,1.15fr);gap:32px;align-items:start;padding:30px 0;border-bottom:1px solid rgba(0,0,0,.1)}
.problem>span{font-size:11px;letter-spacing:.08em;color:rgba(0,0,0,.5)}
.problem h3{font-size:27px;line-height:1.08;letter-spacing:-.03em}
.problem p{max-width:570px;font-size:15px;line-height:22.5px;letter-spacing:-.3px;color:rgba(0,0,0,.65)}
.story{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);gap:80px;align-items:center}
.story-copy p{max-width:650px;margin-top:22px;font-size:15px;line-height:22.5px;letter-spacing:-.3px;color:rgba(0,0,0,.7)}
.story-copy .signature{margin-top:34px;font-family:"Overused Grotesk Medium",sans-serif;font-size:24px;line-height:1.25;letter-spacing:-.02em;color:rgba(0,0,0,.8)}
.story-photo{aspect-ratio:4/5;overflow:hidden;border-radius:4px}
.story-photo img{display:block;width:100%;height:100%;object-fit:cover;object-position:center 20%}
@media(max-width:809px){
.section{padding:72px 20px}
.title{font-size:40px;line-height:1.06}
.intro{margin-top:20px}
.problem{grid-template-columns:38px 1fr;gap:20px;padding:26px 0}
.problem p{grid-column:2}
.story{grid-template-columns:1fr;gap:44px}
}
`;
const section3Root = document.querySelector("#plan-frame")?.shadowRoot;
if (section3Root) section3Root.innerHTML = `
<style>${metierStyles}</style>
<section class="section" aria-labelledby="metier-problems-title">
<div class="inner">
<span class="eyebrow">Ce qui bloque les comptes</span>
<h2 class="title" id="metier-problems-title">Google Ads pour plombiers : les erreurs fréquentes</h2>
<p class="intro">La plomberie fait partie des marchés Google Ads les plus concurrentiels, au même titre que la serrurerie et l’assainissement. Pourtant, beaucoup de comptes sont encore pilotés comme s’il suffisait d’acheter quelques mots-clés et d’attendre que le téléphone sonne.</p>
<div class="problems">
<article class="problem"><span>01</span><h3>Les CPC sont complètement sous-estimés</h3><p>On voit encore des agences annoncer des clics à 3 ou 5 €. Sur le terrain, ils peuvent facilement atteindre 30 ou 40 €. Mon record est même monté à 200 € pour un seul clic. C’est horrible, mais c’est la réalité de certains marchés.</p></article>
<article class="problem"><span>02</span><h3>Le budget ne correspond pas à l’objectif</h3><p>Dire à un plombier qu’il peut se lancer sérieusement avec 500 ou 600 € est une erreur. Passer de 30 appels par mois à 5 ou 10 appels par jour exige un budget cohérent et une structure capable de l’absorber.</p></article>
<article class="problem"><span>03</span><h3>Tous les appels sont considérés identiques</h3><p>Payer 150 € pour un appel concernant un évier qui goutte n’est pas rentable. Le même coût peut être parfaitement acceptable pour une recherche de fuite sur canalisation enterrée ou un débouchage avec inspection caméra.</p></article>
<article class="problem"><span>04</span><h3>Plomberie et assainissement sont mélangés</h3><p>Ballons d’eau chaude, chauffage et recherche de fuite ne doivent pas partager la même stratégie que le débouchage, l’hydrocurage ou l’inspection caméra. Chaque famille de services possède ses propres marges et intentions.</p></article>
<article class="problem"><span>05</span><h3>La structure repose sur trois mots-clés</h3><p>Se limiter à « plombier », « plombier urgent » et au nom de la ville ne suffit pas. Pour développer un compte à plusieurs milliers d’euros par jour, il faut une architecture bien plus avancée et des données réellement exploitables.</p></article>
</div>
</div>
</section>`;
const section4Root = document.querySelector("#intro2-frame")?.shadowRoot;
if (section4Root) section4Root.innerHTML = `
<style>${metierStyles}</style>
<section class="section" aria-labelledby="metier-story-title">
<div class="inner story">
<div class="story-copy">
<span class="eyebrow">La méthode sur le terrain</span>
<h2 class="title" id="metier-story-title">Ce que tu dois vraiment faire pour avoir des campagnes performantes.</h2>
<p>Les métiers de l’urgence ne s’optimisent absolument pas comme les autres secteurs. Chaque appel possède une valeur différente et chercher systématiquement le coût par appel le plus bas est une erreur. Les contacts les moins chers sont souvent ceux qui demandent seulement le prix et refusent même de payer un déplacement à 90 €.</p>
<p>La stratégie doit commencer par la rentabilité réelle des interventions. Je sépare la plomberie pure, comme les ballons d’eau chaude, le chauffage et la recherche de fuite non destructive, des prestations d’assainissement comme le débouchage, l’hydrocurage et l’inspection caméra. Le budget est ensuite réparti selon la valeur de chaque service.</p>
<p>J’ai construit depuis zéro des comptes capables de dépenser plus de 2 000 ou 3 000 € par jour. À ce niveau, il faut une structure avancée, un tracking propre, souvent avec du call tracking, et une lecture intelligente des fluctuations. Dans l’urgence, on ne gagne pas forcément chaque journée. La rentabilité se juge sur un lissage de 30 jours.</p>
<p>Les faux clics existent, mais les outils miracles ne règlent pas le problème. Je préfère construire des campagnes qui les limitent directement et travailler une zone géographique cohérente, plutôt que d’enfermer le compte dans un rayon arbitraire de 3 km qui empêche de générer du volume.</p>
<p class="signature">Un plombier n’a pas peur d’investir quand il comprend précisément combien vaut l’appel et pourquoi il est rentable.</p>
</div>
<div class="story-photo"><img src="../sections-validees/_ressources/section-01/portrait-adam-hero.webp" alt="Adam Spilmann"></div>
</div>
</section>`;
// Standard visuel global : libellés foncés et section Étapes sur fond #111820.
(() => {
["intro-frame","plan-frame","intro2-frame","results-frame","about-frame","etapes-frame","pourqui-frame","faq-frame"].forEach((id) => {
const root = document.querySelector(`#${id}`)?.shadowRoot;
if (!root) return;
const style = document.createElement("style");
style.textContent = `.eyebrow{font-family:"Inter","Inter Placeholder",sans-serif;font-weight:400;background:#111820!important;color:#fff!important}.eyebrow:before,.eyebrow::before{background:currentColor!important}`;
root.appendChild(style);
});
const steps = document.querySelector("#etapes-frame")?.shadowRoot;
if (steps) {
const style = document.createElement("style");
style.textContent = `:host{background:#111820!important;color:#f7f7f7!important}.etapes{--background:#111820!important;--ink:#f7f7f7!important;--body:rgba(247,247,247,.7)!important;--line:rgba(247,247,247,.14)!important;background:#111820!important;color:#f7f7f7!important;padding-bottom:120px!important}.eyebrow{font-family:"Inter","Inter Placeholder",sans-serif;font-weight:400;background:rgba(247,247,247,.08)!important;color:rgba(247,247,247,.72)!important}.etapes .steps-title,.panel-content h3{color:#f7f7f7!important}.panel-content p{color:rgba(247,247,247,.7)!important}.tabs{border-bottom-color:rgba(247,247,247,.14)!important}.tab{color:rgba(247,247,247,.5)!important}.tab .num{color:rgba(247,247,247,.36)!important}.tab[aria-selected="true"]{color:#f7f7f7!important;border-bottom-color:#f7f7f7!important}.tab[aria-selected="true"] .num{color:rgba(247,247,247,.7)!important}.cta{border-color:#f7f7f7!important;color:#f7f7f7!important}@media(max-width:700px){.etapes{padding-bottom:72px!important}.tabs{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important;overflow:visible!important;border-bottom:0!important;margin-bottom:44px!important}.tab{width:100%!important;min-height:74px!important;margin:0!important;padding:13px 12px!important;white-space:normal!important;text-align:left!important;justify-content:flex-start!important;align-items:flex-start!important;border:1px solid rgba(247,247,247,.18)!important;border-radius:4px!important;line-height:1.25!important}.tab[aria-selected="true"]{background:rgba(247,247,247,.1)!important;border-color:rgba(247,247,247,.55)!important;color:#f7f7f7!important}}`;
steps.appendChild(style);
}
const about = document.querySelector("#about-frame")?.shadowRoot;
if (about) {
const style = document.createElement("style");
style.textContent = `.about{padding-bottom:120px!important}@media(max-width:700px){.about{padding-bottom:72px!important}}`;
about.appendChild(style);
}
})();
// Les scripts placés dans un Shadow DOM déclaratif restent inertes après
// le parsing HTML. Les interactions sont donc initialisées depuis la page.
const heroRoot = document.querySelector("#hero-frame")?.shadowRoot;
if (heroRoot) {
const menuToggle = heroRoot.querySelector(".menu-toggle");
const mobileMenu = heroRoot.querySelector("#mobile-menu");
const closeMenu = () => {
menuToggle.setAttribute("aria-expanded", "false");
menuToggle.setAttribute("aria-label", "Ouvrir le menu");
mobileMenu.classList.remove("is-open");
};
menuToggle?.addEventListener("click", () => {
const willOpen = menuToggle.getAttribute("aria-expanded") !== "true";
menuToggle.setAttribute("aria-expanded", String(willOpen));
menuToggle.setAttribute("aria-label", willOpen ? "Fermer le menu" : "Ouvrir le menu");
mobileMenu.classList.toggle("is-open", willOpen);
});
heroRoot.querySelectorAll("[data-scroll-target]").forEach((control) => {
control.addEventListener("click", (event) => {
event.preventDefault();
document.querySelector(control.dataset.scrollTarget)?.scrollIntoView({ behavior: "smooth", block: "start" });
closeMenu();
});
});
heroRoot.querySelectorAll("[data-open-qualif]").forEach((control) => {
control.addEventListener("click", (event) => {
if (typeof window.openQualifPopup !== "function") return;
event.preventDefault();
window.openQualifPopup();
closeMenu();
});
});
}
const etapesRoot = document.querySelector("#etapes-frame")?.shadowRoot;
if (etapesRoot) {
const tabs = etapesRoot.querySelectorAll(".tab");
const panels = etapesRoot.querySelectorAll(".panel");
tabs.forEach((tab) => {
tab.addEventListener("click", () => {
const id = tab.dataset.tab;
tabs.forEach((item) => item.setAttribute("aria-selected", item === tab ? "true" : "false"));
panels.forEach((panel) => {
panel.dataset.active = panel.dataset.panel === id ? "true" : "false";
});
});
});
}
const pourQuiRoot = document.querySelector("#pourqui-frame")?.shadowRoot;
if (pourQuiRoot) {
pourQuiRoot.querySelectorAll(".acc-list").forEach((list) => {
const items = [...list.querySelectorAll(".acc-item")];
const applyState = () => {
items.forEach((item) => {
const panel = item.querySelector(".acc-panel");
panel.style.maxHeight = item.dataset.open === "true" ? `${panel.scrollHeight}px` : "0px";
});
};
items.forEach((item) => {
item.querySelector(".acc-trigger")?.addEventListener("click", () => {
const isOpen = item.dataset.open === "true";
items.forEach((other) => { other.dataset.open = "false"; });
item.dataset.open = isOpen ? "false" : "true";
applyState();
});
});
applyState();
window.addEventListener("resize", applyState);
});
}
const enableExclusiveDetails = (root) => {
if (!root) return;
const details = [...root.querySelectorAll("details")];
details.forEach((item) => {
item.addEventListener("toggle", () => {
if (!item.open) return;
details.forEach((other) => {
if (other !== item) other.open = false;
});
});
});
};
enableExclusiveDetails(document.querySelector("#plan-frame")?.shadowRoot);
enableExclusiveDetails(document.querySelector("#faq-frame")?.shadowRoot);
const footerRoot = document.querySelector("#footer-frame")?.shadowRoot;
if (footerRoot) {
footerRoot.querySelectorAll("[data-open-qualif]").forEach((control) => {
control.addEventListener("click", (event) => {
if (typeof window.openQualifPopup !== "function") return;
event.preventDefault();
window.openQualifPopup();
});
});
footerRoot.querySelectorAll("[data-scroll-target]").forEach((control) => {
control.addEventListener("click", (event) => {
event.preventDefault();
document.querySelector(control.dataset.scrollTarget)?.scrollIntoView({ behavior: "smooth", block: "start" });
});
});
}
// Popup de préqualification.
const qualifOverlay = document.querySelector("#qualif-overlay");
const qualifPanels = document.querySelectorAll(".qualif-panel");
const qualifProgressBar = document.querySelector("#qualif-progress-bar");
const qualifWhatsappLink = document.querySelector("#qualif-whatsapp-link");
const qualifCloseBtn = document.querySelector("#qualif-close");
const QUALIF_PROGRESS = { "step-1": "33%", "step-2": "66%", "step-3": "100%", "result-ok": "100%", "result-no": "100%" };
const QUALIF_LABELS = { "step-1": "Budget & ambition", "step-2": "Calendrier", "step-3": "Mise en situation" };
const QUALIF_WHATSAPP_NUMBER = "33759604917";
let qualifAnswers = {};
const qualifShowPanel = (id) => {
qualifPanels.forEach((panel) => {
panel.classList.toggle("is-active", panel.dataset.panel === id);
});
qualifProgressBar.style.width = QUALIF_PROGRESS[id] || "0%";
};
const qualifBuildWhatsappLink = () => {
const lines = Object.keys(QUALIF_LABELS)
.filter((id) => qualifAnswers[id])
.map((id) => `• ${QUALIF_LABELS[id]} : ${qualifAnswers[id]}`)
.join("\n");
const message = `Bonjour Adam, je viens de remplir ton questionnaire.\n\nVoici ma situation :\n${lines}\n\nJe souhaiterais échanger avec toi pour voir ce qu'il est possible de mettre en place.`;
return `https://wa.me/${QUALIF_WHATSAPP_NUMBER}?text=${encodeURIComponent(message)}`;
};
window.openQualifPopup = () => {
qualifAnswers = {};
qualifShowPanel("step-1");
qualifOverlay.classList.add("is-open");
qualifOverlay.setAttribute("aria-hidden", "false");
document.body.style.overflow = "hidden";
};
window.closeQualifPopup = () => {
qualifOverlay.classList.remove("is-open");
qualifOverlay.setAttribute("aria-hidden", "true");
document.body.style.overflow = "";
};
qualifCloseBtn.addEventListener("click", () => window.closeQualifPopup());
qualifOverlay.addEventListener("click", (event) => {
if (event.target === qualifOverlay) window.closeQualifPopup();
});
document.addEventListener("keydown", (event) => {
if (event.key === "Escape" && qualifOverlay.classList.contains("is-open")) window.closeQualifPopup();
});
document.querySelectorAll(".qualif-answer").forEach((button) => {
button.addEventListener("click", () => {
const panel = button.closest(".qualif-panel");
qualifAnswers[panel.dataset.panel] = button.dataset.label;
const next = button.dataset.next;
if (next === "result-ok") qualifWhatsappLink.href = qualifBuildWhatsappLink();
qualifShowPanel(next);
});
});
</script>
</body>
</html>