:root{--beton:#f2f1ee;--beton-2:#e4e2dc;--blanc:#fbfbf9;--graphite:#16181a;--graphite-2:#22262a;--acier:#3d444b;--jaune:#e8b524;--jaune-2:#ffcf4a;--gris:#7b8189;--trait:rgba(22,24,26,.13);--r:4px;--ease:cubic-bezier(.2,.7,.2,1)}
*{box-sizing:border-box}html{scroll-behavior:smooth}
body{margin:0;background:var(--beton);color:var(--graphite);font-family:"Inter",system-ui,-apple-system,sans-serif;font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}
h1,h2,h3,.disp{font-family:"Archivo",Inter,system-ui,sans-serif;font-weight:800;letter-spacing:-.025em;line-height:1.02;margin:0;text-transform:uppercase;font-stretch:condensed}
a{color:inherit}svg{max-width:100%}
.wrap{width:min(1180px,calc(100% - 40px));margin-inline:auto}
@media(max-width:600px){.wrap{width:calc(100% - 32px)}}
.hachure{position:absolute;inset:0;pointer-events:none;opacity:.5;background-image:repeating-linear-gradient(135deg,rgba(232,181,36,.09) 0 2px,transparent 2px 9px)}
/* nav */
.nav{position:sticky;top:0;z-index:50;background:rgba(22,24,26,.94);backdrop-filter:blur(10px);color:var(--beton);border-bottom:2px solid var(--jaune)}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;height:66px;gap:16px}
.logo{display:flex;align-items:center;gap:11px;text-decoration:none}
.logo .m{width:32px;height:32px;background:var(--jaune);display:grid;place-items:center;clip-path:polygon(0 0,100% 0,100% 72%,72% 100%,0 100%)}
.logo .m svg{width:19px;height:19px;color:var(--graphite)}
.logo b{font-family:"Archivo",sans-serif;font-weight:800;font-size:21px;letter-spacing:.01em;line-height:1;text-transform:uppercase}
.logo small{display:block;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--jaune);margin-top:3px}
.nav ul{display:flex;gap:26px;list-style:none;margin:0;padding:0}
.nav ul a{text-decoration:none;font-size:14px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;opacity:.85;position:relative}
.nav ul a::after{content:"";position:absolute;left:0;bottom:-6px;height:2px;width:0;background:var(--jaune);transition:width .3s var(--ease)}
.nav ul a:hover::after{width:100%}
@media(max-width:900px){.nav ul{display:none}}
@media(max-width:620px){.logo small{display:none}.logo b{font-size:19px;white-space:nowrap}.nav .wrap{height:58px}.nav .btn{padding:12px 16px;font-size:13px}.nav .btn .long{display:none}}
.btn{--bg:var(--jaune);--fg:var(--graphite);display:inline-flex;align-items:center;gap:10px;padding:15px 24px;background:var(--bg);color:var(--fg);text-decoration:none;font-weight:700;font-size:15px;letter-spacing:.03em;text-transform:uppercase;border:0;cursor:pointer;position:relative;overflow:hidden;clip-path:polygon(0 0,100% 0,100% 68%,calc(100% - 12px) 100%,0 100%);transition:transform .22s var(--ease),box-shadow .22s var(--ease)}
.btn::before{content:"";position:absolute;inset:0;background:radial-gradient(120px 60px at var(--mx,50%) var(--my,50%),rgba(255,255,255,.4),transparent 60%);opacity:0;transition:opacity .3s}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 26px -12px rgba(232,181,36,.8)}.btn:hover::before{opacity:1}
.btn.sombre{--bg:var(--graphite);--fg:var(--beton)}
.btn.ghost{--bg:transparent;--fg:currentColor;border:2px solid currentColor;clip-path:none}.btn.ghost:hover{box-shadow:none;background:rgba(255,255,255,.07)}
.btn svg{width:17px;height:17px}
/* hero */
/* padding:0 — le hero est un <section> et héritait des 115 px verticaux de la règle
   `section{padding:clamp(70px,9vw,116px) 0}` : 230 px de trop, qui poussaient la coupe
   de terrain sous la ligne de flottaison sur tous les écrans (mesuré 11/09/2026). */
.hero{position:relative;overflow:hidden;padding:0;background:var(--graphite);color:var(--beton);min-height:min(86vh,800px);display:flex;align-items:center}
.hero .wrap{position:relative;z-index:1;padding:38px 0 clamp(120px,16vh,168px);width:min(1180px,calc(100% - 40px))}
@media(max-width:620px){.hero .wrap{padding-bottom:120px}}
.sur{display:inline-flex;align-items:center;gap:10px;font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--jaune);margin-bottom:16px;font-weight:700}
.sur::before{content:"";width:32px;height:2px;background:currentColor}
.h1{font-size:clamp(32px,5.6vw,70px);max-width:16ch}
.h1 .l{display:block;overflow:hidden}.h1 .l span{display:inline-block;transform:translateY(105%);animation:monte .9s var(--ease) forwards}
.h1 .l:nth-child(2) span{animation-delay:.1s}.h1 .l:nth-child(3) span{animation-delay:.2s}
.h1 em{font-style:normal;color:var(--jaune)}
@keyframes monte{to{transform:none}}
.lead{font-size:clamp(16px,1.4vw,19px);max-width:46ch;color:rgba(242,241,238,.82);margin:20px 0 26px;animation:fondu 1s .5s both}
@keyframes fondu{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.cta{display:flex;gap:14px;flex-wrap:wrap;animation:fondu 1s .7s both;position:relative;z-index:2}
.badges{display:flex;gap:22px;flex-wrap:wrap;margin:26px 0 0;font-size:13px;letter-spacing:.04em;text-transform:uppercase;color:rgba(242,241,238,.65);animation:fondu 1s .9s both;position:relative;z-index:2}
.badges b{color:var(--jaune);font-weight:700}
/* la coupe de terrain */
.coupe{position:absolute;left:0;right:0;bottom:0;height:clamp(112px,15vh,160px);pointer-events:none;z-index:0}
@media(max-width:620px){.coupe{height:110px;opacity:.75}}
.coupe svg{position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:min(1180px,100vw);height:100%}
.coupe .sol{fill:#2b3036}.coupe .sol2{fill:#343a41}.coupe .roche{fill:#3f464e}
.coupe .surface{fill:none;stroke:var(--jaune);stroke-width:2.5;stroke-dasharray:2400;stroke-dashoffset:2400;animation:trace 2.8s .4s var(--ease) forwards}
.coupe .niveau{fill:none;stroke:rgba(232,181,36,.55);stroke-width:1.5;stroke-dasharray:7 6;opacity:0;animation:fondu 1s 2.4s forwards}
.coupe .cote{stroke:rgba(242,241,238,.4);stroke-width:1}
.coupe text{font-family:"Inter",sans-serif;font-size:11px;letter-spacing:.12em;fill:rgba(242,241,238,.55);text-transform:uppercase;opacity:0;animation:fondu .8s 2.8s forwards}
@keyframes trace{to{stroke-dashoffset:0}}
/* ruban */
.ruban{background:var(--jaune);color:var(--graphite);overflow:hidden;white-space:nowrap;font-family:"Archivo",sans-serif;font-weight:800;font-size:14px;letter-spacing:.12em;text-transform:uppercase;padding:13px 0}
.ruban div{display:inline-block;animation:defile 42s linear infinite}
.ruban span{padding:0 24px}.ruban span::after{content:"▮";margin-left:24px;font-size:8px;vertical-align:middle;opacity:.5}
@keyframes defile{to{transform:translateX(-50%)}}
section{padding:clamp(70px,9vw,116px) 0;position:relative}
.h2{font-size:clamp(30px,4.4vw,54px);max-width:19ch}
.kick{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--jaune);margin-bottom:16px;font-weight:700}
.sombre .kick{color:var(--jaune)}
.intro{font-size:clamp(16px,1.35vw,19px);max-width:58ch;color:var(--acier);margin-top:18px}
.grille{display:grid;gap:2px;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));margin-top:46px;background:var(--trait)}
.carte{background:var(--blanc);padding:32px 28px;position:relative;transition:background .3s var(--ease),transform .3s var(--ease)}
.carte::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--jaune);transform:scaleY(0);transform-origin:top;transition:transform .45s var(--ease)}
.carte:hover{background:#fff;transform:translateY(-3px)}.carte:hover::before{transform:none}
.carte .ic{width:54px;height:54px;color:var(--graphite);margin-bottom:18px}
.carte .ic .d{stroke-dasharray:280;stroke-dashoffset:280;transition:stroke-dashoffset 1.2s var(--ease)}
.carte.in .ic .d,.carte:hover .ic .d{stroke-dashoffset:0}
.carte h3{font-size:24px;margin-bottom:10px}.carte p{margin:0 0 14px;color:var(--acier)}
.carte ul{margin:0;padding:0;list-style:none;font-size:15px;color:var(--acier)}
.carte li{padding:7px 0;border-top:1px solid var(--trait);display:flex;gap:10px}
.carte li::before{content:"";width:7px;height:2px;background:var(--jaune);margin-top:11px;flex:none}
.sombre{background:var(--graphite);color:var(--beton)}.sombre .intro{color:rgba(242,241,238,.72)}
.etapes{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;margin-top:44px;background:rgba(242,241,238,.14)}
@media(max-width:780px){.etapes{grid-template-columns:1fr}}
.etape{background:var(--graphite);padding:30px 26px;position:relative}
.etape i{display:block;font-family:"Archivo",sans-serif;font-style:normal;font-weight:800;font-size:46px;line-height:1;color:rgba(242,241,238,.16);margin-bottom:12px;transition:color .5s var(--ease)}
.etapes.in .etape i{color:var(--jaune)}
.etapes.in .etape:nth-child(2) i{transition-delay:.35s}.etapes.in .etape:nth-child(3) i{transition-delay:.7s}
.etape h3{font-size:21px;margin-bottom:10px}.etape p{margin:0;color:rgba(242,241,238,.76);font-size:15.5px}
/* zone : deux bases */
.zones{display:grid;grid-template-columns:1fr 1fr;gap:2px;margin-top:44px;background:var(--trait)}
@media(max-width:820px){.zones{grid-template-columns:1fr}}
.zone{background:var(--blanc);padding:30px 28px}
.zone h3{font-size:22px;margin-bottom:4px}
.zone .ray{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--jaune);font-weight:700;margin-bottom:18px}
.zone ul{list-style:none;margin:0;padding:0}
.zone li{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:11px 0;border-top:1px solid var(--trait)}
.zone li a{text-decoration:none;font-weight:600}
.zone li small{color:var(--gris);font-variant-numeric:tabular-nums;font-size:13px;white-space:nowrap}
.zone li:hover a{color:var(--jaune)}
/* prix */
.postes{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:2px;margin-top:40px;background:rgba(242,241,238,.14)}
.poste{background:var(--graphite);padding:26px 24px}
.poste b{display:block;font-family:"Archivo",sans-serif;font-weight:800;text-transform:uppercase;font-size:15px;letter-spacing:.04em;color:var(--jaune);margin-bottom:8px}
.poste p{margin:0;font-size:15px;color:rgba(242,241,238,.78)}
/* devis */
.devis{background:var(--graphite-2);color:var(--beton)}
.devis .box{display:grid;grid-template-columns:.9fr 1.1fr;gap:46px;align-items:start}
@media(max-width:900px){.devis .box{grid-template-columns:1fr}}
.devis .intro{color:rgba(242,241,238,.78)}
form.f{background:var(--blanc);color:var(--graphite);padding:28px;border-top:3px solid var(--jaune)}
.f .prog{display:flex;gap:5px;margin-bottom:22px}
.f .prog i{flex:1;height:3px;background:var(--beton-2);position:relative;overflow:hidden}
.f .prog i::after{content:"";position:absolute;inset:0;background:var(--jaune);transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease)}
.f .prog i.on::after{transform:none}
.f fieldset{border:0;padding:0;margin:0;display:none}.f fieldset.on{display:block;animation:fondu .45s both}
.f legend{font-family:"Archivo",sans-serif;font-size:21px;font-weight:800;text-transform:uppercase;margin-bottom:14px}
.chips{display:flex;flex-wrap:wrap;gap:9px}.chips label{cursor:pointer}.chips input{position:absolute;opacity:0;pointer-events:none}
.chips span{display:inline-block;padding:11px 16px;border:1.5px solid var(--trait);background:#fff;font-weight:600;font-size:15px;transition:all .22s var(--ease)}
.chips input:checked+span{background:var(--graphite);color:var(--beton);border-color:var(--graphite)}
.f .row{display:grid;gap:12px;margin-top:14px}
.f label.t{display:block;font-size:13px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin:12px 0 6px;color:var(--acier)}
.f input[type=text],.f input[type=tel],.f input[type=email],.f textarea,.f select{width:100%;padding:13px 14px;border:1.5px solid var(--trait);background:#fff;font:inherit;color:inherit;transition:border-color .2s,box-shadow .2s}
.f input:focus,.f textarea:focus,.f select:focus{outline:0;border-color:var(--jaune);box-shadow:0 0 0 3px rgba(232,181,36,.25)}
.f textarea{min-height:118px;resize:vertical}
.f .act{display:flex;justify-content:space-between;gap:12px;margin-top:22px;align-items:center}
.f .retour{background:none;border:0;font:inherit;color:var(--gris);cursor:pointer;padding:8px 0}
.f .erreur{color:#b03a24;font-size:14px;margin-top:10px;min-height:1.2em}
.f .ok{display:none;text-align:center;padding:28px 10px}.f.ok fieldset,.f.ok .prog,.f.ok .act{display:none}.f.ok .ok{display:block;animation:fondu .55s both}
.f .ok svg{width:66px;height:66px;color:var(--jaune);margin-bottom:12px}
.f .ok .d{stroke-dasharray:80;stroke-dashoffset:80;animation:trace 1s .2s var(--ease) forwards}
.f .ok h3{font-size:23px;margin-bottom:8px}
.devis .args{display:grid;gap:16px;margin-top:26px}
.devis .args div{display:flex;gap:13px;align-items:flex-start}
.devis .args svg{width:24px;height:24px;color:var(--jaune);flex:none;margin-top:2px}
.devis .args p{margin:0;font-size:15.5px}
details{border-top:1px solid var(--trait)}details:last-of-type{border-bottom:1px solid var(--trait)}
summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:19px 0;font-family:"Archivo",sans-serif;font-weight:800;text-transform:uppercase;font-size:17px;letter-spacing:-.01em}
summary::-webkit-details-marker{display:none}
summary i{width:26px;height:26px;border:1.5px solid var(--trait);display:grid;place-items:center;flex:none;transition:transform .32s var(--ease),background .32s;font-style:normal;font-weight:400;font-family:Inter,sans-serif}
details[open] summary i{transform:rotate(45deg);background:var(--jaune);border-color:var(--jaune)}
details p{margin:0 0 18px;color:var(--acier);max-width:72ch}
footer{background:var(--graphite);color:rgba(242,241,238,.7);padding:54px 0 110px;font-size:14px;border-top:2px solid var(--jaune)}
footer .wrap{display:grid;gap:22px;grid-template-columns:1.2fr 1fr 1fr}
@media(max-width:780px){footer .wrap{grid-template-columns:1fr}}
footer b{color:var(--beton);font-family:"Archivo",sans-serif;font-size:17px;text-transform:uppercase;display:block;margin-bottom:8px}
footer a{color:inherit}footer ul{list-style:none;padding:0;margin:0}footer li{padding:3px 0}
.barre{position:fixed;left:0;right:0;bottom:0;z-index:60;display:none;padding:10px 12px calc(10px + env(safe-area-inset-bottom));background:rgba(22,24,26,.95);backdrop-filter:blur(8px);gap:10px}
.barre .btn{flex:1;justify-content:center}@media(max-width:780px){.barre{display:flex}}
.rv{opacity:0;transform:translateY(24px);transition:opacity .75s var(--ease),transform .75s var(--ease)}
.rv.in{opacity:1;transform:none}
.rv.d1{transition-delay:.09s}.rv.d2{transition-delay:.18s}.rv.d3{transition-delay:.27s}
.tete{background:var(--graphite);color:var(--beton);padding:74px 0 58px;position:relative;overflow:hidden}
.tete .h1{font-size:clamp(32px,5.2vw,66px);max-width:19ch}.tete .lead{animation:none}
.fil{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:rgba(242,241,238,.6);margin-bottom:16px}.fil a{text-decoration:none}
.texte{max-width:70ch;font-size:17.5px;color:#2c3238}.texte p{margin:0 0 18px}
.mini{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:2px;margin-top:34px;background:var(--trait)}
.mini a{display:block;padding:20px;text-decoration:none;background:var(--blanc);transition:background .25s,transform .25s var(--ease)}
.mini a:hover{background:#fff;transform:translateY(-3px)}
.mini b{font-family:"Archivo",sans-serif;font-weight:800;text-transform:uppercase;font-size:16px;display:block;letter-spacing:-.01em}
.mini small{color:var(--gris);font-size:13px}
.tel-only{display:none}body.a-tel .tel-only{display:inline-flex}

/* Galerie — colonnes façon magazine (11/09/2026). La grille en 7/5 alignait mal : une photo
   portrait à côté d'une paysage laissait 140 px de vide sous la première. Des COLONNES
   respectent le cadrage réel de chaque photo (aucun recadrage) et s'équilibrent seules. */
.gal{column-count:2;column-gap:clamp(12px,1.6vw,20px);margin-top:clamp(38px,5vw,60px)}
.gal figure{margin:0 0 clamp(12px,1.6vw,20px);break-inside:avoid;position:relative}
.gal .cadre{position:relative;overflow:hidden;background:#22262a;line-height:0}
.gal .cadre::before{content:"";position:absolute;right:0;top:0;width:36px;height:36px;z-index:2;
  background:var(--jaune);clip-path:polygon(100% 0,100% 100%,0 0);opacity:0;transform:translate(7px,-7px);
  transition:opacity .45s var(--ease),transform .45s var(--ease)}
.gal figure:hover .cadre::before{opacity:1;transform:none}
.gal img{width:100%;height:auto;display:block;transition:transform 1.2s var(--ease)}
.gal figure:hover img{transform:scale(1.04)}
.gal figcaption{display:flex;gap:11px;align-items:baseline;margin-top:10px;font-size:14px;
  color:rgba(242,241,238,.72);line-height:1.4}
.gal figcaption b{font-family:"Archivo",sans-serif;font-weight:800;font-size:12px;letter-spacing:.1em;
  color:var(--jaune);flex:none}
@media(max-width:640px){.gal{column-count:1}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.rv{opacity:1;transform:none}.h1 .l span{transform:none}.coupe .surface{stroke-dashoffset:0}.coupe .niveau,.coupe text{opacity:1}}
