/* Typographies auto-hébergées — plus aucun appel à fonts.googleapis.com /
   fonts.gstatic.com depuis le site. IP visiteur plus transmise à Google.
   Subsets latin (sans extensions pan-européennes), format WOFF2 uniquement.
   Dupliqué inline dans <style> de index.php (landing autonome). */
@font-face{font-family:'Montserrat';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/montserrat-latin-600-normal.woff2') format('woff2')}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/montserrat-latin-700-normal.woff2') format('woff2')}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:800;font-display:swap;src:url('/assets/fonts/montserrat-latin-800-normal.woff2') format('woff2')}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:300;font-display:swap;src:url('/assets/fonts/source-sans-3-latin-300-normal.woff2') format('woff2')}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/source-sans-3-latin-400-normal.woff2') format('woff2')}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/source-sans-3-latin-600-normal.woff2') format('woff2')}
@font-face{font-family:'Source Sans 3';font-style:italic;font-weight:200;font-display:swap;src:url('/assets/fonts/source-sans-3-latin-200-italic.woff2') format('woff2')}
@font-face{font-family:'Source Sans 3';font-style:italic;font-weight:300;font-display:swap;src:url('/assets/fonts/source-sans-3-latin-300-italic.woff2') format('woff2')}
/* Google Sans — utilisée exclusivement par le widget flottant avis Google. */
@font-face{font-family:'Google Sans';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/GoogleSans-Medium.woff2') format('woff2')}
@font-face{font-family:'Google Sans';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/GoogleSans-Bold.woff2') format('woff2')}

:root{
  --bg:#f5f3f0;
  --fg:#111010;
  --dim:#6b6560;
  --line:rgba(17,16,16,.14);
  --soft:#ebe8e3;
  --max:1120px;
  --pad:clamp(20px,5vw,40px);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--bg);color:var(--fg);
  font-family:'Source Sans 3',system-ui,sans-serif;
  font-size:clamp(1.02rem,.45vw + .92rem,1.16rem);
  line-height:1.62;-webkit-font-smoothing:antialiased;
}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--pad)}
h1,h2,h3{font-family:'Montserrat',system-ui,sans-serif;letter-spacing:-.025em;line-height:1.08}
h1{font-size:clamp(2.1rem,5.6vw,4rem);font-weight:800;letter-spacing:-.04em}
h2{font-size:clamp(1.55rem,3.1vw,2.5rem);font-weight:700;margin-bottom:.7em}
h3{font-size:clamp(1.05rem,1.5vw,1.3rem);font-weight:700;margin-bottom:.35em}
p{margin-bottom:1.05em}
p:last-child{margin-bottom:0}
a{color:inherit}
em{font-family:'Source Sans 3',system-ui,sans-serif;font-style:italic;font-weight:200}

/* en-tête */
.nav{
  position:sticky;top:0;z-index:30;background:rgba(245,243,240,.9);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line);
}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;height:64px;gap:16px}
.brand{display:inline-flex;align-items:center;font-family:'Montserrat',sans-serif;font-weight:700;letter-spacing:-.02em;text-decoration:none;font-size:1.02rem;color:inherit;line-height:1}
.brand img{height:30px;width:auto;display:block}
@media(max-width:520px){.brand img{height:26px}}

/* menu d'ancres partage par les 8 pages villes */
.nav-menu{display:flex;align-items:center;gap:clamp(16px,2vw,30px);flex-wrap:nowrap}
.nav-menu a{
  font-size:.86rem;color:var(--dim);text-decoration:none;letter-spacing:.02em;
  padding:6px 0;transition:color .22s ease;white-space:nowrap;
}
.nav-menu a:hover{color:var(--fg)}
.nav-menu a.nav-cta{
  color:var(--bg);background:var(--fg);padding:9px 18px;border-radius:999px;font-weight:600;
}
.nav-menu a.nav-cta:hover{transform:translateY(-1px);color:var(--bg)}
/* mobile : masque les ancres secondaires, garde Accueil + Me contacter */
@media(max-width:720px){
  .nav-menu{gap:12px}
  .nav-menu a:not(.nav-cta):not(:first-child){display:none}
  .nav-menu a.nav-cta{padding:7px 14px;font-size:.8rem}
}
@media(max-width:380px){
  .nav-menu a:first-child{display:none} /* trop à l'étroit : juste le CTA */
}

/* scroll-margin : les ancres respectent la hauteur de la nav sticky */
#services,#realisations,#avis,#faq,#contact{scroll-margin-top:72px}

/* fil d'ariane */
.fil{font-size:.78rem;color:var(--dim);padding-top:26px;letter-spacing:.03em}
.fil a{text-decoration:none}
.fil a:hover{text-decoration:underline}
.fil span{opacity:.5;margin:0 .45em}

/* hero */
.hero{padding-top:34px;padding-bottom:clamp(44px,7vh,74px)}
.hero h1{max-width:16ch;margin-bottom:.46em}
.chapo{font-size:clamp(1.12rem,1.5vw,1.42rem);max-width:62ch;color:#2a2724}
.cta-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:clamp(26px,4vh,38px)}
.btn{
  display:inline-block;padding:15px 28px;border-radius:999px;text-decoration:none;
  font-size:.96rem;font-weight:600;letter-spacing:-.01em;transition:.22s ease;border:1px solid transparent;
}
.btn.solid{background:var(--fg);color:var(--bg)}
.btn.solid:hover{transform:translateY(-2px)}
.btn.ghost{border-color:var(--line)}
.btn.ghost:hover{border-color:var(--fg)}

section{padding:clamp(40px,6.5vh,72px) 0;border-top:1px solid var(--line)}
section > .wrap > h2{max-width:72ch}
.lede{max-width:none}

/* grille services */
.grid{display:grid;gap:clamp(22px,3vw,40px);grid-template-columns:1fr;margin-top:clamp(24px,3.4vh,38px);counter-reset:srv}
@media(min-width:720px){.grid{grid-template-columns:1fr 1fr}}
.card{counter-increment:srv;border-top:2px solid var(--fg);padding-top:14px;position:relative}
.card::before{
  content:counter(srv,decimal-leading-zero);display:block;
  font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.2em;color:var(--dim);
  margin-bottom:10px;
}
.card p{font-size:.98rem;color:#38342f}

/* étapes */
.steps{counter-reset:s;margin-top:clamp(24px,3.4vh,38px);display:grid;gap:20px}
@media(min-width:860px){.steps{grid-template-columns:repeat(4,1fr);gap:28px}}
.step{counter-increment:s;border-top:1px solid var(--line);padding-top:14px}
.step::before{
  content:counter(s,decimal-leading-zero);display:block;
  font-family:'Montserrat',sans-serif;font-size:.74rem;letter-spacing:.2em;color:var(--dim);margin-bottom:8px;
}
.step h3{font-size:1.02rem}
.step p{font-size:.93rem;color:#38342f}

/* faq */
.faq{margin-top:clamp(20px,3vh,32px);max-width:80ch}
details{border-bottom:1px solid var(--line);padding:4px 0}
summary{
  cursor:pointer;list-style:none;padding:16px 36px 16px 0;position:relative;
  font-family:'Montserrat',sans-serif;font-weight:600;font-size:1.02rem;letter-spacing:-.015em;
}
summary::-webkit-details-marker{display:none}
summary::after{
  content:"";position:absolute;right:6px;top:50%;width:9px;height:9px;
  border-right:2px solid var(--dim);border-bottom:2px solid var(--dim);
  transform:translateY(-70%) rotate(45deg);transition:transform .25s ease;
}
details[open] summary::after{transform:translateY(-30%) rotate(-135deg)}
details p{padding:0 0 18px;color:#38342f;max-width:72ch}

/* maillage villes */
.villes{display:flex;flex-wrap:wrap;gap:10px 12px;margin-top:22px}
.villes a{
  display:inline-block;padding:9px 16px;border:1px solid var(--line);border-radius:999px;
  font-size:.88rem;text-decoration:none;transition:.22s ease;
}
.villes a:hover{border-color:var(--fg);background:var(--soft)}

/* contact */
.contact{
  /* theme sombre scope a cette section : tokens redefinis, tout l'interieur suit */
  --bg:#0a0a0a;--fg:#f5f3f0;--dim:#8a847f;--line:rgba(245,243,240,.14);--soft:#141414;
  background:var(--bg);color:var(--fg);border-top:1px solid rgba(10,10,10,.08);
}
.cf{max-width:720px;margin-top:clamp(26px,3.6vh,40px)}
.cf-row{display:grid;grid-template-columns:1fr;gap:24px 28px}
@media(min-width:640px){.cf-row{grid-template-columns:1fr 1fr}}
.f{display:block}
.cf > .f{margin-top:24px}
.f span{display:block;font-size:.66rem;letter-spacing:.2em;text-transform:uppercase;font-weight:600;color:var(--dim);margin-bottom:9px}
.f span i{font-style:normal;opacity:.6;margin-left:.1em}
.f input,.f textarea{
  width:100%;background:none;border:0;border-bottom:1px solid var(--line);
  color:var(--fg);font-family:inherit;font-size:1.05rem;padding:9px 0 12px;outline:none;resize:none;
  transition:border-color .22s ease;
}
.f input::placeholder,.f textarea::placeholder{color:var(--dim);opacity:.8}
.f input:focus,.f textarea:focus{border-bottom-color:var(--fg)}
.f textarea{line-height:1.4}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.g-recaptcha{margin-top:26px;transform-origin:left top}
@media(max-width:400px){.g-recaptcha{transform:scale(.84)}}
.cf-btn{
  display:flex;align-items:center;justify-content:center;gap:.6em;width:100%;margin-top:28px;
  padding:18px 24px;border:0;border-radius:999px;background:var(--fg);color:var(--bg);
  font-family:inherit;font-size:.98rem;font-weight:600;letter-spacing:-.01em;
  cursor:pointer;transition:transform .22s ease,opacity .22s ease;
}
.cf-btn:hover{transform:translateY(-2px)}
.cf-btn[disabled]{opacity:.5;cursor:default;transform:none}
.cf-ico{width:1.05em;height:1.05em;flex:none}
.cf-msg{margin-top:14px;min-height:1.2em;font-size:.85rem;color:var(--dim)}
.cf-msg.ok{color:var(--fg)}
.cf-msg.ko{color:#b3261e}

/* pied */
footer{
  background:#0a0a0a;color:#8a847f;
  border-top:1px solid rgba(245,243,240,.08);
  padding:30px 0 40px;font-size:.78rem;
}
footer .wrap{display:flex;flex-wrap:wrap;gap:10px 18px;justify-content:space-between}
footer a{text-decoration:none;color:inherit}
footer a:hover{color:#f5f3f0}
.foot-l{display:flex;flex-wrap:wrap;gap:5px 14px}

.nap{margin-top:14px;font-size:.8rem;color:var(--dim)}

/* pages simples (mentions légales, plan du site) */
.lede h2{margin:2.2em 0 .6em;font-size:clamp(1.25rem,2.2vw,1.7rem)}
.lede h2:first-child{margin-top:0}
.lede a{color:inherit}
.lede ul{margin:0 0 1.1em 1.1em}
.lede li{margin-bottom:.35em}
ul.pds{list-style:none;margin-left:0}
ul.pds li{border-bottom:1px solid var(--line);padding:12px 0;margin:0}
ul.pds a{text-decoration:none;display:block}
ul.pds a:hover{opacity:.6}

/* --- portfolio : grille sobre, aligne sur le vocabulaire du site --- */
.portfolio{
  display:grid;grid-template-columns:1fr;gap:clamp(26px,3.4vw,44px);
  margin-top:clamp(26px,3.4vh,42px);
}
@media(min-width:640px){.portfolio{grid-template-columns:1fr 1fr}}
@media(min-width:1000px){.portfolio{grid-template-columns:repeat(3,1fr)}}
/* Chaque card suit le pattern .card : border-top noir, pas de radius, pas d'ombre.
   L'image portfolio est deja transparente : on NE met PAS de background pour laisser
   le fond creme du site transparaitre naturellement derriere les ordis. */
.pj{display:block;color:inherit;text-decoration:none;border-top:2px solid var(--fg);padding-top:16px}
.pj-img{position:relative;aspect-ratio:800/560;overflow:hidden;margin-bottom:12px}
.pj-img img{width:100%;height:100%;object-fit:contain;display:block;transition:opacity .25s ease}
.pj:hover .pj-img img{opacity:.78}
.pj-meta{display:flex;flex-direction:column;gap:4px}
.pj-meta h3{font-size:1.05rem;letter-spacing:-.025em;margin:0}
.pj-url{
  display:inline-flex;align-items:center;gap:.35em;font-size:.86rem;color:var(--dim);
}
.pj-url svg{width:11px;height:11px;opacity:.6}

/* --- avis Google : meme grammaire que .card (border-top noir, pas de radius) --- */
.avis-grid{
  display:grid;grid-template-columns:1fr;gap:clamp(26px,3.4vw,44px);
  margin-top:clamp(26px,3.4vh,42px);
}
@media(min-width:720px){.avis-grid{grid-template-columns:1fr 1fr}}
@media(min-width:1100px){.avis-grid{grid-template-columns:repeat(3,1fr)}}
.avis{
  border-top:2px solid var(--fg);padding-top:16px;
  display:flex;flex-direction:column;gap:12px;
}
.avis-head{display:flex;align-items:center;gap:12px}
.avis-avatar{
  width:40px;height:40px;border-radius:50%;object-fit:cover;flex:0 0 40px;
  background:var(--soft);
}
.avis-head > div{flex:1;min-width:0}
.avis-name{
  display:block;font-family:'Montserrat',system-ui,sans-serif;font-weight:700;
  letter-spacing:-.015em;color:var(--fg);text-decoration:none;line-height:1.2;font-size:.88rem;
}
.avis-name:hover{text-decoration:underline}
.avis-date{font-size:.72rem;color:var(--dim);margin-top:2px;letter-spacing:.03em}
.avis-stars{color:#f5b400;letter-spacing:.08em;font-size:.9rem;flex:0 0 auto}
.avis-text{font-size:.94rem;color:#38342f;margin:0;line-height:1.6}
