5/5

MY SERVICE 49

Parlons de votre projet

Décrivez votre besoin en quelques étapes pour recevoir
un devis personnalisé.

Retrouvez-nous
ZI du Cormier — 6 square des Grandes Claies
49300 Cholet

    Quels travaux souhaitez-vous réaliser ?

    Quelle prestation souhaitez-vous ?

    Quel type de bâtiment ?

    Quelle surface souhaitez-vous traiter ?

    Comment est l’accès à la zone à traiter ?

    Quand souhaitez-vous une intervention ?

    Où se situe votre projet ?

    Vos coordonnées

    Une photo de 5 Mo maximum.

    Vos informations seront utilisées pour répondre à votre demande de devis.

    .my-devis { --my-color: #20b5bd; --my-dark: #06485b; max-width: 760px; margin: 24px auto; padding: 28px; background: white; border: 1px solid #e4ecee; border-radius: 24px; box-shadow: 0 12px 40px #06485b12; color: var(--my-dark); } .my-devis *, .my-devis *::before { box-sizing: border-box; } .my-devis [hidden] { display: none !important; } .my-devis h3 { font-size: 24px; text-align: center; margin: 24px 0; } .my-devis .wpcf7-radio { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .my-devis .wpcf7-list-item { margin: 0; min-width: 0; } .my-devis .wpcf7-list-item label { position: relative; display: block; height: 100%; cursor: pointer; } .my-devis input[type="radio"] { position: absolute; width: 1px; height: 1px; opacity: 0; } .my-devis .wpcf7-list-item-label { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; height: 100%; min-height: 135px; padding: 18px 12px; border: 2px solid #e4e8ec; border-radius: 18px; background: #f8fafb; text-align: center; font-size: 17px; line-height: 1.35; } .my-devis .wpcf7-list-item-label::before, .my-devis .wpcf7-list-item-label::after { content: none; } .my-devis .my-icon { display: block; font-size: 34px; line-height: 1.2; } .my-devis input:checked + .wpcf7-list-item-label { border-color: var(--my-color); background: #eafafb; box-shadow: 0 5px 16px #20b5bd20; } .my-devis input:focus-visible + .wpcf7-list-item-label { outline: 3px solid var(--my-dark); outline-offset: 3px; } .my-devis .my-progress { height: 7px; background: #edf1f3; border-radius: 20px; overflow: hidden; } .my-devis .my-progress span { display: block; height: 100%; background: var(--my-color); transition: width .2s; } .my-devis .my-count { margin: 10px 0; text-align: center; font-size: 14px; } .my-devis .my-nav { display: flex; justify-content: space-between; gap: 12px; margin-top: 24px; } .my-devis .my-nav button, .my-devis input[type="submit"] { padding: 14px 22px; border: 0; border-radius: 12px; background: var(--my-dark); color: white; font: inherit; font-weight: 600; cursor: pointer; } .my-devis .my-nav .my-next { margin-left: auto; background: var(--my-color); } .my-devis-step > label { display: block; margin: 14px 0; } .my-devis input[type="text"], .my-devis input[type="email"], .my-devis input[type="tel"] { width: 100%; margin-top: 6px; padding: 13px; border: 1px solid #cddcde; border-radius: 10px; background: white; font: inherit; } .my-devis .my-error { color: #b42318; text-align: center; } @media (max-width: 600px) { .my-devis { padding: 18px 12px; } .my-devis h3 { font-size: 21px; } .my-devis .wpcf7-list-item-label { font-size: 15px; min-height: 125px; padding: 14px 8px; } }(function () { function init() { document.querySelectorAll(".my-devis").forEach(function (box) { if (box.dataset.myReady) return;const steps = Array.from( box.querySelectorAll(".my-devis-step") ); const form = box.closest("form"); if (!form || steps.length !== 7) return;box.dataset.myReady = "1"; let current = 0; let timer;const icons = [ ["🌿","🧹","💧","🏠","🛡️","🏢","☀️","🪵", "🔆","🌧️","🪟","🌳","🏭","📦","🔧"], ["🏠","🏢","🏪","🏭"], ["📏","📐","🏡","🏭"], ["✅","🪜","🏗️","❓"], ["⚡","📅","🗓️","🕒"], ["📍","📍","📍","📍"] ];steps.forEach(function (step, index) { const heading = step.querySelector("h3"); if (heading) heading.tabIndex = -1;step.querySelectorAll( ".wpcf7-list-item-label" ).forEach(function (label, n) { const icon = document.createElement("span"); icon.className = "my-icon"; icon.setAttribute("aria-hidden", "true"); icon.textContent = (icons[index] || [])[n] || "✓"; label.prepend(icon); }); });const header = document.createElement("div"); header.innerHTML = '
    ' + '

    '; box.prepend(header);const error = document.createElement("p"); error.className = "my-error"; error.setAttribute("role", "alert"); box.append(error);const nav = document.createElement("div"); nav.className = "my-nav"; nav.innerHTML = '' + ''; box.append(nav);const back = nav.querySelector(".my-back"); const next = nav.querySelector(".my-next");function show(index, focus) { clearTimeout(timer); current = index; steps.forEach(function (step, n) { step.hidden = n !== current; }); back.hidden = current === 0; next.hidden = current === steps.length - 1; error.textContent = ""; header.querySelector(".my-count").textContent = "Étape " + (current + 1) + " sur " + steps.length; header.querySelector(".my-progress span").style.width = ((current + 1) / steps.length * 100) + "%";if (focus) { const heading = steps[current].querySelector("h3"); if (heading) { heading.focus({preventScroll: true}); heading.scrollIntoView({ behavior: "smooth", block: "center" }); } } }function advance() { if (current >= steps.length - 1) return; if (!steps[current].querySelector("input[type=radio]:checked")) { error.textContent = "Choisissez une réponse pour continuer."; return; } show(current + 1, true); }back.addEventListener("click", function () { show(Math.max(0, current - 1), true); }); next.addEventListener("click", advance);box.addEventListener("click", function (event) { if (!event.target.matches('input[type="radio"]')) return; const index = steps.indexOf( event.target.closest(".my-devis-step") ); if (index !== current) return; clearTimeout(timer); timer = setTimeout(advance, 200); });form.addEventListener("submit", function (event) { const missing = steps.findIndex(function (step, n) { return n < 6 && !step.querySelector('input[type="radio"]:checked'); }); if (missing !== -1 || current = 30) clearInterval(loading); }, 500); })();.my-contact-intro { max-width: 880px; margin: 40px auto 12px; padding: 0 24px; text-align: center; color: #06485b; } .my-contact-intro .my-contact-tag { margin: 0 0 12px; color: #168b93; font-size: 13px; font-weight: 700; letter-spacing: 2px; } .my-contact-intro h1 { margin: 0 0 16px; color: #06485b; font-size: clamp(28px, 4vw, 42px); line-height: 1.15; font-weight: 700; } .my-contact-intro .my-contact-description { max-width: 580px; margin: 0 auto; color: #637780; font-size: 17px; line-height: 1.6; } .my-contact-details { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; margin: 28px 0; padding: 22px; border: 1px solid #e2ecee; border-radius: 16px; background: #f5fafb; } .my-contact-details strong, .my-contact-details a, .my-contact-details span { display: block; } .my-contact-details strong { margin-bottom: 8px; font-size: 15px; } .my-contact-details a, .my-contact-details span { color: #506c76; font-size: 14px; line-height: 1.7; text-decoration: none; } .my-contact-details a:hover { color: #168b93; } .my-devis-v2 { max-width: 880px; margin: 12px auto 48px; padding: 28px; border-radius: 20px; box-shadow: 0 8px 32px #06485b0d; } .my-devis-v2 h3 { font-size: 23px; margin: 22px 0; } .my-devis-v2 .my-devis-step:first-of-type .wpcf7-radio { grid-template-columns: repeat(3, minmax(0, 1fr)); } .my-devis-v2 .wpcf7-list-item-label { min-height: 115px; padding: 16px 10px; font-size: 15px; font-weight: 500; border-radius: 14px; } .my-devis-v2 .my-icon { font-size: 30px; } .my-devis-v2 .wpcf7-list-item label:hover .wpcf7-list-item-label { border-color: #20b5bd; background: #f0fbfb; } @media (max-width: 600px) { .my-contact-intro { margin-top: 24px; padding: 0 12px; } .my-contact-details { grid-template-columns: 1fr; gap: 18px; padding: 18px; } .my-devis-v2 { padding: 20px 12px; } .my-devis-v2 .my-devis-step:first-of-type .wpcf7-radio { grid-template-columns: repeat(2, minmax(0, 1fr)); } .my-devis-v2 .wpcf7-list-item-label { font-size: 14px; } }.my-devis-zone { position: relative; isolation: isolate; box-sizing: border-box; width: 100%; max-width: 1200px; margin: 24px auto 48px; padding: 32px; border-radius: 30px; background: linear-gradient(125deg, #f2fbfb, #d4eff0); border: 1px solid #d3e9e9; }.my-devis-zone::before { content: ""; position: absolute; top: 80px; right: 2%; width: 43%; height: 440px; max-height: none; border-radius: 0; background: url("https://www.myservice49.com/wp-content/uploads/2026/10/Volkswagen-Crafter-detoure-sur-fond-transparent.png") center / contain no-repeat; opacity: 1; filter: drop-shadow(0 22px 16px rgba(6, 72, 91, 0.16)); pointer-events: none; z-index: -1; }.my-devis-zone > .elementor-widget-container { padding-right: 47%; }.my-devis-zone .my-devis-v2 { box-sizing: border-box; width: 100%; max-width: none; margin: 0; padding: 26px; background: #fff; border: none; border-radius: 22px; box-shadow: 0 12px 35px rgba(6, 72, 91, 0.08); }.my-devis-zone .my-devis-v2 .wpcf7-radio { grid-template-columns: repeat(2, minmax(0, 1fr)); }@media (max-width: 1024px) { .my-devis-zone { padding: 18px; border-radius: 22px; }.my-devis-zone::before { display: none; }.my-devis-zone > .elementor-widget-container { padding-right: 0; } }@media (max-width: 600px) { .my-devis-zone { padding: 10px; }.my-devis-zone .my-devis-v2 { padding: 16px; } }.my-devis-zone::before { top: 32px; right: 32px; width: 41%; height: 520px; border-radius: 22px; background-image: url("https://www.myservice49.com/wp-content/uploads/2026/10/Nettoyage-haute-pression-en-tenue-MY-Service.png"); background-size: cover; background-position: 65% center; background-repeat: no-repeat; opacity: 1; filter: none; box-shadow: 0 12px 30px rgba(6, 72, 91, 0.12); }/* Remplace l’ancienne photo de fond */ .my-devis-zone::before { display: none; }.my-contact-visual { position: absolute; right: 32px; top: 50%; transform: translateY(-50%); width: 41%; padding: 35px 0 110px; pointer-events: none; }.my-contact-visual img { position: relative; z-index: 1; display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; object-position: 65% center; border-radius: 26px; box-shadow: 0 18px 40px rgba(6, 72, 91, .12); }/* Carré turquoise au-dessus de la photo */ .my-contact-visual::before { content: ""; position: absolute; z-index: 2; top: 5px; right: 25px; width: 125px; height: 125px; border: 3px solid #20b5bd; border-radius: 22px; transform: rotate(25deg); }/* Grand carré en dessous */ .my-contact-visual::after { content: ""; position: absolute; bottom: 30px; left: 35px; width: 130px; height: 130px; border: 3px solid #20b5bd; border-radius: 24px; transform: rotate(-20deg); }.my-contact-visual .my-blue-square { position: absolute; right: 55px; bottom: 35px; width: 65px; height: 65px; background: #08718a; border-radius: 14px; transform: rotate(25deg); }@media (max-width: 1024px) { .my-contact-visual { display: none; } }(function () { function addVisual() { document.querySelectorAll(".my-devis-zone").forEach(function (zone) { if (zone.querySelector(".my-contact-visual")) return;var visual = document.createElement("div"); visual.className = "my-contact-visual"; visual.setAttribute("aria-hidden", "true"); visual.innerHTML = '' + '';zone.appendChild(visual); }); }addVisual(); document.addEventListener("DOMContentLoaded", addVisual);var attempts = 0; var timer = setInterval(function () { addVisual(); if (++attempts >= 20) clearInterval(timer); }, 500); })();.my-contact-visual, .my-devis-zone::before { display: none !important; }.my-devis-zone { min-height: 0; }.my-devis-zone > .elementor-widget-container { padding-right: 0; }.my-devis-zone .my-devis-v2 { max-width: 880px; margin: 0 auto; }.my-devis-zone > .elementor-widget-container { padding-left: 0 !important; padding-right: 0 !important; }.my-devis-zone .my-devis-v2 { box-sizing: border-box; width: 100%; max-width: 760px; margin-left: auto !important; margin-right: auto !important; }.my-devis-zone .my-devis-step h3 { text-align: center; }.my-devis-zone .elementor-widget-container, .my-devis-zone .wpcf7, .my-devis-zone form.wpcf7-form { box-sizing: border-box !important; width: 100% !important; max-width: 100% !important; padding-left: 0 !important; padding-right: 0 !important; margin-left: auto !important; margin-right: auto !important; }.my-devis-zone .my-devis.my-devis-v2 { box-sizing: border-box !important; width: 100% !important; max-width: 760px !important; margin-left: auto !important; margin-right: auto !important; float: none !important; }
    .my-devis-v2 { --my-color: #20b5bd; --my-dark: #06485b; max-width: 760px; margin: 24px auto; padding: 28px; background: #fff; border: 1px solid #e4ecee; border-radius: 24px; box-shadow: 0 12px 40px #06485b12; color: var(--my-dark); } .my-devis-v2 *, .my-devis-v2 *::before { box-sizing: border-box; } .my-devis-v2 [hidden] { display: none !important; } .my-devis-v2 h3 { font-size: 24px; text-align: center; margin: 24px 0; } .my-devis-v2 .wpcf7-radio { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .my-devis-v2 .wpcf7-list-item { margin: 0; min-width: 0; } .my-devis-v2 .wpcf7-list-item label { position: relative; display: block; height: 100%; cursor: pointer; } .my-devis-v2 input[type="radio"] { position: absolute; width: 1px; height: 1px; opacity: 0; } .my-devis-v2 .wpcf7-list-item-label { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; height: 100%; min-height: 135px; padding: 18px 12px; border: 2px solid #e4e8ec; border-radius: 18px; background: #f8fafb; text-align: center; font-size: 17px; line-height: 1.35; } .my-devis-v2 .wpcf7-list-item-label::before, .my-devis-v2 .wpcf7-list-item-label::after { content: none; } .my-devis-v2 .my-icon { display: block; font-size: 34px; line-height: 1.2; } .my-devis-v2 input:checked + .wpcf7-list-item-label { border-color: var(--my-color); background: #eafafb; box-shadow: 0 5px 16px #20b5bd20; } .my-devis-v2 input:focus-visible + .wpcf7-list-item-label { outline: 3px solid var(--my-dark); outline-offset: 3px; } .my-devis-v2 .my-progress { height: 7px; background: #edf1f3; border-radius: 20px; overflow: hidden; } .my-devis-v2 .my-progress span { display: block; height: 100%; background: var(--my-color); transition: width .2s; } .my-devis-v2 .my-count { margin: 10px 0; text-align: center; font-size: 14px; } .my-devis-v2 .my-nav { display: flex; justify-content: space-between; gap: 12px; margin-top: 24px; } .my-devis-v2 .my-nav button, .my-devis-v2 input[type="submit"] { padding: 14px 22px; border: 0; border-radius: 12px; background: var(--my-dark); color: #fff; font: inherit; font-weight: 600; cursor: pointer; } .my-devis-v2 .my-nav .my-next { margin-left: auto; background: var(--my-color); } .my-devis-v2 .my-devis-step > label, .my-devis-v2 .my-name-row label { display: block; margin: 14px 0; } .my-devis-v2 .my-name-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .my-devis-v2 input[type="text"], .my-devis-v2 input[type="email"], .my-devis-v2 input[type="tel"] { width: 100%; margin-top: 6px; padding: 13px; border: 1px solid #cddcde; border-radius: 10px; background: #fff; font: inherit; } .my-devis-v2 input[type="file"] { display: block; width: 100%; margin-top: 10px; font: inherit; } .my-devis-v2 .my-error { color: #b42318; text-align: center; } @media (max-width: 600px) { .my-devis-v2 { padding: 18px 12px; } .my-devis-v2 h3 { font-size: 21px; } .my-devis-v2 .wpcf7-list-item-label { font-size: 15px; min-height: 125px; padding: 14px 8px; } }(function () { function init() { document.querySelectorAll(".my-devis-v2").forEach(function (box) { if (box.dataset.myV2Ready) return;const steps = Array.from( box.querySelectorAll(".my-devis-step") ); const form = box.closest("form"); if (!form || steps.length !== 8) return;box.dataset.myV2Ready = "1"; let current = 0; let timer;const branches = { "Toiture": [ "Démoussage de toiture", "Nettoyage de toiture", "Hydrofuge de toiture", "Réparation de couverture", "Pose de couverture neuve", "Autre demande pour la toiture" ], "Façade": [ "Démoussage de façade", "Nettoyage de façade", "Hydrofuge de façade", "Autre demande pour la façade" ], "Isolation": [ "Isolation des combles aménagés", "Isolation des combles perdus" ] };const icons = [ ["🏠","🧱","🌡️","🏢","☀️","🪵","🔆","🌧️", "🪟","🌳","🏭","📦","💧","🧹","🔧"], ["🌿","🧹","💧","🔧","🏠","❓", "🌿","🧹","💧","❓","🏠","🪵","✓"], ["🏠","🏢","🏪","🏭"], ["📏","📐","🏡","🏭"], ["✅","🪜","🏗️","❓"], ["⚡","📅","🗓️","🕒"], ["📍","📍","📍","📍"] ];steps.forEach(function (step, index) { const heading = step.querySelector("h3"); if (heading) heading.tabIndex = -1;step.querySelectorAll( ".wpcf7-list-item-label" ).forEach(function (label, n) { const icon = document.createElement("span"); icon.className = "my-icon"; icon.setAttribute("aria-hidden", "true"); icon.textContent = (icons[index] || [])[n] || "✓"; label.prepend(icon); }); });const header = document.createElement("div"); header.innerHTML = '
    ' + '

    '; box.prepend(header);const error = document.createElement("p"); error.className = "my-error"; error.setAttribute("role", "alert"); box.append(error);const nav = document.createElement("div"); nav.className = "my-nav"; nav.innerHTML = '' + ''; box.append(nav);const back = nav.querySelector(".my-back"); const next = nav.querySelector(".my-next");function category() { const selected = steps[0].querySelector( 'input[type="radio"]:checked' ); return selected ? selected.value : ""; }function route() { return branches[category()] ? [0,1,2,3,4,5,6,7] : [0,2,3,4,5,6,7]; }function configure() { const allowed = branches[category()]; steps[1].querySelectorAll( 'input[type="radio"]' ).forEach(function (input) { const visible = !!allowed && allowed.includes(input.value); input.closest(".wpcf7-list-item").hidden = !visible;if (allowed) { if (!visible) input.checked = false; } else { input.checked = input.value === "Sans précision"; } });const heading = steps[1].querySelector("h3"); heading.textContent = category() === "Isolation" ? "Quels combles souhaitez-vous isoler ?" : category() === "Façade" ? "Quelle prestation pour votre façade ?" : "Quelle prestation pour votre toiture ?"; }function show(index, focus) { clearTimeout(timer); current = index; const path = route(); const position = path.indexOf(current);steps.forEach(function (step, n) { step.hidden = n !== current; }); back.hidden = current === 0; next.hidden = current === 7; error.textContent = "";header.querySelector(".my-count").textContent = "Étape " + (position + 1) + " sur " + path.length; header.querySelector(".my-progress span").style.width = ((position + 1) / path.length * 100) + "%";if (focus) { const heading = steps[current].querySelector("h3"); if (heading) { heading.focus({preventScroll: true}); heading.scrollIntoView({ behavior: "smooth", block: "center" }); } } }function advance() { if (current === 7) return; if (!steps[current].querySelector( 'input[type="radio"]:checked' )) { error.textContent = "Choisissez une réponse pour continuer."; return; } if (current === 0) configure(); const path = route(); show(path[path.indexOf(current) + 1], true); }back.addEventListener("click", function () { const path = route(); const position = path.indexOf(current); show(path[Math.max(0, position - 1)], true); }); next.addEventListener("click", advance);box.addEventListener("change", function (event) { if (event.target.name === "travaux") { configure(); } });box.addEventListener("click", function (event) { if (!event.target.matches('input[type="radio"]')) return; const index = steps.indexOf( event.target.closest(".my-devis-step") ); if (index !== current) return; clearTimeout(timer); timer = setTimeout(advance, 200); });form.addEventListener("submit", function (event) { configure(); const missing = route().find(function (index) { return index !== 7 && !steps[index].querySelector( 'input[type="radio"]:checked' ); }); if (missing !== undefined || current !== 7) { event.preventDefault(); event.stopImmediatePropagation(); show(missing !== undefined ? missing : current, true); error.textContent = "Répondez aux questions avant l’envoi."; } }, true);const wrapper = form.closest(".wpcf7"); if (wrapper) { wrapper.addEventListener("wpcf7invalid", function () { setTimeout(function () { const invalid = box.querySelector(".wpcf7-not-valid"); if (!invalid) return; const index = steps.indexOf( invalid.closest(".my-devis-step") ); if (route().includes(index)) show(index, true); }, 0); }); }configure(); show(0, false); }); }init(); if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); }let attempts = 0; const loading = setInterval(function () { init(); if (++attempts >= 30) clearInterval(loading); }, 500); })();