/*
Theme Name: Vitruve 3D
Theme URI: https://vitruve.tech
Author: Vitruve 3D
Description: Theme vitrine sur mesure pour Vitruve 3D (releves 3D, patrimoine et environnement). Couleur dominante #2c5c6a, cible de photogrammetrie en decoupe, effet verre depoli.
Version: 1.0.0
Requires at least: 6.0
Requires PHP: 8.0
License: GNU General Public License v2 or later
Text Domain: vitruve
*/
@font-face{font-family:"Futura Book";src:url(fonts/FuturaBook.ttf) format("truetype");font-display:swap;}
@font-face{font-family:"Space Grotesk";font-weight:500;font-style:normal;src:url(fonts/SpaceGrotesk-500.woff2) format("woff2");font-display:swap;}
@font-face{font-family:"Space Grotesk";font-weight:600;font-style:normal;src:url(fonts/SpaceGrotesk-600.woff2) format("woff2");font-display:swap;}
@font-face{font-family:"JetBrains Mono";font-weight:500;font-style:normal;src:url(fonts/JetBrainsMono-500.woff2) format("woff2");font-display:swap;}
@font-face{font-family:"JetBrains Mono";font-weight:600;font-style:normal;src:url(fonts/JetBrainsMono-600.woff2) format("woff2");font-display:swap;}
:root{
  --teal-900:#0b262c; --teal-800:#17454f; --teal-700:#2c5c6a; --teal-600:#3f7180;
  --sage:#81b1ae; --sage-dark:#598280; --gold:#c89f41;
  --terracotta:#c06a4d; --terracotta-deep:#95482f; --stone:#efe7da; --stone-line:#dcc9ad;
  --ink:#1b2a2e; --muted:#5c6b6e; --line:#dfe7e6; --bg:#f7f9f9; --white:#fff; --grey-outer:#0b262c; --mist:#dbe8e6;
  --header-h:78px; --footer-h:56px;
  --font:"Futura Book","Century Gothic","Futura",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-mono:"JetBrains Mono","SFMono-Regular","Consolas",monospace;
  --font-title:"Space Grotesk","Futura Book",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;}
body{font-family:var(--font);color:var(--ink);background:var(--grey-outer);line-height:1.65;-webkit-font-smoothing:antialiased;display:flex;justify-content:center;min-height:100vh;}
.box{width:100%;min-width:0;max-width:1080px;background:var(--white);box-shadow:0 0 90px rgba(0,0,0,.45);overflow:hidden;padding:var(--header-h) 0 var(--footer-h);}
img{max-width:100%;height:auto;display:block;}
a{color:inherit;text-decoration:none;}
.wrap{max-width:100%;margin:0;padding:0 clamp(24px,4vw,56px);}
.eyebrow{font-size:.78rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage-dark);font-weight:600;margin-bottom:14px;}
h1,h2,h3{line-height:1.15;font-weight:600;letter-spacing:.01em;}
.eyebrow,.hero .coords b,.pipeline .num,.media-tag,footer.site h4,.contact .glass h4{font-family:var(--font-mono);letter-spacing:.12em;}
.hero h1,.section-head h2,.split .txt h2,.founder h2{font-family:var(--font-title);letter-spacing:.02em;}
.btn{display:inline-block;padding:14px 30px;border-radius:2px;font-size:.82rem;letter-spacing:.13em;text-transform:uppercase;transition:.25s;cursor:pointer;border:1px solid transparent;}
.btn-gold{background:var(--gold);color:#221a06;font-weight:600;}
.btn-gold:hover{filter:brightness(1.08);}
.btn-ghost{border-color:rgba(255,255,255,.6);color:#fff;}
.btn-ghost:hover{background:rgba(255,255,255,.12);}

/* GLASS — verre dépoli (repris du CSS d'origine), à utiliser par-dessus une image */
.glass{background:rgba(255,255,255,.12);-webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px);border:1px solid rgba(255,255,255,.22);box-shadow:0 8px 32px rgba(11,38,44,.3);border-radius:12px;}
.glass-sage{background:rgba(129,177,174,.28);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(156,192,191,.45);box-shadow:0 8px 32px rgba(11,38,44,.3);}

/* HEADER */
header.site{position:fixed;top:0;left:0;right:0;margin:0 auto;width:100%;max-width:1080px;height:var(--header-h);z-index:60;background:rgba(44,92,106,.92);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid rgba(255,255,255,.12);}
header.site .wrap{height:var(--header-h);}
header.site .wrap{display:flex;align-items:center;justify-content:space-between;gap:28px;height:var(--header-h);padding:0 clamp(16px,3vw,34px);}
header.site .logo img{height:36px;width:auto;}
header.site .logo{transition:opacity .5s ease;}
body.at-hero header.site .logo,
body.video-en-cours header.site .logo{opacity:0;pointer-events:none;}
nav.main ul{display:flex;flex-wrap:nowrap;gap:20px;list-style:none;}
nav.main a{color:#dbe6e6;font-size:.82rem;letter-spacing:.03em;white-space:nowrap;padding:6px 0;position:relative;}
nav.main a::after{content:"";position:absolute;left:0;bottom:0;width:0;height:2px;background:var(--gold);transition:.25s;}
nav.main a:hover{color:#fff;} nav.main a:hover::after{width:100%;}
nav.main a.cta{color:var(--gold);}
nav.main li.current-menu-item>a{color:var(--gold);}
/* Bouton du menu mobile : cree par js/nav-mobile.js, invisible au-dessus de 900 px */
.nav-burger{display:none;flex-direction:column;align-items:center;justify-content:center;gap:5px;width:44px;height:44px;margin-right:-10px;padding:0;border:0;background:transparent;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.nav-burger span{display:block;width:22px;height:2px;border-radius:2px;background:#dbe6e6;transition:translate .25s ease,rotate .25s ease,opacity .18s ease;}
.nav-burger:focus-visible{outline:2px solid var(--gold);outline-offset:3px;}
body.nav-ouvert .nav-burger span:nth-child(1){translate:0 7px;rotate:45deg;}
body.nav-ouvert .nav-burger span:nth-child(2){opacity:0;}
body.nav-ouvert .nav-burger span:nth-child(3){translate:0 -7px;rotate:-45deg;}

/* Echelle typographique reduite sur petit ecran : tout le site etant
   dimensionne en rem, la racine suffit. */
@media(max-width:900px){html{font-size:90%;}}
@media(max-width:480px){html{font-size:86%;}}

/* HERO */
.hero{position:relative;min-height:80vh;display:flex;align-items:center;color:#fff;overflow:hidden;}
.hero::before{content:"";position:absolute;inset:0;background:var(--teal-800) url(images/hero-cloitre.webp) center/cover no-repeat;z-index:0;}
.hero-overlay{position:absolute;left:0;top:0;bottom:0;width:57%;z-index:2;background:rgba(44,92,106,.9);
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);
  -webkit-mask-image:linear-gradient(#000 0 0),url(images/target.png);
  mask-image:linear-gradient(#000 0 0),url(images/target.png);
  -webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;
  -webkit-mask-position:0 0,81% 64%;mask-position:0 0,81% 64%;
  -webkit-mask-size:100% 100%,100px;mask-size:100% 100%,100px;
  -webkit-mask-composite:xor;mask-composite:exclude;}
.hero .wrap{position:relative;z-index:3;}
.hero .wrap{padding-top:60px;padding-bottom:60px;}
.hero-logo{height:56px;width:auto;display:block;margin-bottom:22px;}
.hero h1{font-size:clamp(1.75rem,4vw,3.1rem);max-width:18ch;margin-bottom:22px;font-weight:600;transition:opacity .55s ease,transform .55s ease;transition-delay:.45s;}
.hero p.lede{font-size:clamp(1.05rem,1.6vw,1.3rem);max-width:52ch;color:#e6efee;margin-bottom:34px;}
.hero .cta-row{display:grid;grid-template-columns:max-content;gap:16px;}
.hero .cta-row .btn{display:block;text-align:center;}
.hero .coords{margin-top:40px;display:inline-flex;gap:40px;flex-wrap:wrap;font-size:.9rem;color:#eaf3f2;}
.hero .coords.glass{padding:20px 28px;border-radius:14px;}
.hero .coords b{display:block;color:var(--gold);letter-spacing:.14em;text-transform:uppercase;font-size:.72rem;margin-bottom:6px;font-weight:600;}
.hero-inner{max-width:54%;}
.hero-copy{min-width:0;}
/* Enfants de grille et d'etirement : sans min-width:0 leur taille minimale
   automatique vaut min-content, ce qui elargit la page sur petit ecran. */
.split>*,.pcar,.pcar-viewport,.pcar-col{min-width:0;}
/* Vidéo d'intro du hero (par-dessus, révèle le hero designé à la fin) */
.hero-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;z-index:1;opacity:0;pointer-events:none;transition:opacity .7s ease;}
.hero.hv-playing .hero-video{opacity:1;}
/* Pendant la vidéo : panneau translucide + texte estompé, mais logo + titre restent */
.hero-copy>*{transition:opacity .55s ease,transform .55s ease;transition-delay:.45s;}
/* Pas de délai à l'estompage (au démarrage vidéo) ; le délai ne joue qu'à la révélation (fin vidéo) */
.hero.hv-playing .hero-copy>*{transition-delay:0s;}
.hero.hv-playing .hero-overlay{opacity:.35;transition:opacity .5s ease;}
/* Pendant la vidéo, les éléments estompés sont décalés vers le bas ; ils montent en fondu à la fin */
.hero.hv-playing .hero-copy>*:not(.hero-logo):not(h1):not(.eyebrow){opacity:0;transform:translateY(16px);}
/* Titre : blanc légèrement transparent + léger décalage pendant la vidéo, blanc plein en place à la fin */
.hero.hv-playing h1{opacity:.65;transform:translateY(6px);}
.hero-controls{position:absolute;z-index:5;left:clamp(24px,4vw,56px);bottom:92px;display:flex;gap:10px;opacity:0;transition:opacity .4s;}
.hero.hv-ready .hero-controls{opacity:1;}
.hv-btn{width:42px;height:42px;border-radius:50%;border:1px solid rgba(255,255,255,.35);background:rgba(11,38,44,.5);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s;}
.hv-btn:hover{background:rgba(11,38,44,.72);}
.hero.hv-playing .hv-replay{display:none;}
.hero:not(.hv-playing) .hv-skip{display:none;}
@media(max-width:820px){.hero-inner{max-width:100%;}
  .hero-overlay{left:0;width:100%;background:linear-gradient(180deg,rgba(44,92,106,.82),rgba(44,92,106,.94));-webkit-mask-image:none;mask-image:none;-webkit-backdrop-filter:none;backdrop-filter:none;}}

/* TECHNIQUES band */
.techband{background:var(--teal-800);color:#dfeceb;}
.techband .wrap{display:flex;justify-content:center;gap:20px;flex-wrap:wrap;padding:22px 28px;font-size:.95rem;letter-spacing:.04em;}
.techband span{display:flex;align-items:center;gap:12px;}
.techband span+span::before{content:"";}
.techband .dot{width:7px;height:7px;border-radius:50%;background:var(--gold);display:inline-block;}

/* Page Solutions (accueil) : sections plein écran + scroll-snap */
.home .box{height:100dvh;overflow:hidden;}
.snap{height:100%;overflow-y:auto;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch;}
.snap>*{position:relative;scroll-snap-align:start;scroll-snap-stop:always;height:100%;overflow:hidden;}
.home .hero{height:100%;display:flex;flex-direction:column;align-items:stretch;}
.home .hero .wrap{flex:1;display:flex;align-items:center;}
.home .hero .techband{position:relative;z-index:2;}
.home .snap section.block,.home .snap .contact{display:flex;flex-direction:column;justify-content:center;padding:40px 0;}

/* Flèches de défilement */
.snap-arrow{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);z-index:6;width:44px;height:44px;display:flex;align-items:center;justify-content:center;border:0;border-radius:50%;cursor:pointer;color:#fff;background:rgba(11,38,44,.62);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:.2s;}
.snap-arrow svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.35));}
.snap-arrow:hover{background:rgba(11,38,44,.78);transform:translateX(-50%) translateY(3px);}
.snap-arrow.up{transform:translateX(-50%) rotate(180deg);}
.snap-arrow.up:hover{transform:translateX(-50%) rotate(180deg) translateY(3px);}
.home .hero .snap-arrow{bottom:92px;}

/* Indicateur de sections */
.snap-dots{position:fixed;top:50%;right:max(19px,calc(50vw - 540px + 19px));transform:translateY(-50%);z-index:55;display:flex;flex-direction:column;gap:13px;padding:12px 9px;border-radius:30px;background:rgba(11,38,44,.32);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);}
.snap-dot{position:relative;width:11px;height:11px;padding:0;border:0;border-radius:50%;cursor:pointer;background:rgba(255,255,255,.55);transition:.2s;}
.snap-dot:hover{background:#fff;}
.snap-dot.is-active{background:var(--gold);transform:scale(1.3);box-shadow:0 0 10px rgba(200,159,65,.7);}
.snap-dot .lbl{position:absolute;right:22px;top:50%;transform:translateY(-50%);white-space:nowrap;font-size:.72rem;letter-spacing:.06em;color:#fff;background:rgba(11,38,44,.9);padding:4px 10px;border-radius:4px;opacity:0;pointer-events:none;transition:.2s;}
.snap-dot:hover .lbl{opacity:1;}
@media(max-width:820px){.snap-dots,.snap-arrow{display:none;}}
@media(max-width:820px){
  .home .box{height:auto;overflow:visible;}
  .snap{height:auto;overflow:visible;scroll-snap-type:none;}
  .snap>*{height:auto;min-height:0;overflow:visible;}
  /* Le hero et son bandeau de techniques occupent exactement un ecran :
     colonne, contenu centre, bandeau cale en bas. 100svh est la hauteur
     avec la barre d'adresse visible, donc rien n'est coupe au chargement ;
     100vh sert de repli aux navigateurs anciens. Le bloc peut depasser si
     le contenu ne tient pas, d'ou min-height et non height. */
  .home .hero{height:auto;display:flex;flex-direction:column;justify-content:space-between;
    min-height:calc(100vh - var(--header-h) - 70px);
    min-height:calc(100svh - var(--header-h) - 70px);}
  .home .hero>.wrap{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;}
  .home .hero>.techband{flex:0 0 auto;}
  .home .snap section.block,.home .snap .contact{padding:64px 0;}
}

/* SECTION base */
section.block{padding:96px 0;}
.block.dark{background:var(--teal-700);}
.block.dark .section-head h2{color:#fff;}
.block.dark .section-head p{color:#c3d8d6;}
.block.dark .eyebrow{color:var(--sage);}
.block.light{background:var(--white);}
.block.light .section-head h2{color:var(--teal-700);}
.section-head{max-width:720px;margin:0 auto 56px;text-align:center;}
.page-intro{max-width:900px;margin:0 auto;text-align:center;}

/* En-tete de page standard : surtitre, titre ample, filet de separation */
.page-head{margin-bottom:32px;padding-bottom:22px;border-bottom:1px solid var(--line);}
.page-head .eyebrow{margin-bottom:12px;}
.page-title{font-family:var(--font-title);font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.12;letter-spacing:.01em;color:var(--teal-700);margin:0;}

/* Chapo et ligne de caution en ouverture de contenu */
.entry-content .chapo{font-size:1.12rem;line-height:1.62;color:var(--ink);margin-bottom:20px;}
.entry-content .signature{border-left:2px solid var(--gold);padding-left:16px;margin:0 0 6px;font-size:.94rem;line-height:1.55;color:var(--muted);text-align:left;hyphens:manual;}

/* Bandeau d'ouverture de page : image pleine largeur sous le chapo */
.page-hero-band{height:clamp(190px,26vw,360px);margin-top:36px;background:var(--white) url(images/hero-rions.webp) center 50%/cover no-repeat;}

.section-head h2{font-size:clamp(1.7rem,3vw,2.5rem);margin-bottom:16px;}
.section-head p{color:var(--muted);font-size:1.05rem;}

/* Contenu éditorial des pages/articles */
.entry-content{font-size:1.02rem;color:var(--ink);}
.entry-content h2{font-family:var(--font-title);font-size:1.5rem;color:var(--teal-700);margin:38px 0 12px;letter-spacing:.02em;}
.entry-content h3{font-size:1.12rem;color:var(--teal-700);margin:24px 0 8px;}
.entry-content p{margin-bottom:16px;}
.entry-content ul{list-style:disc;margin:0 0 18px;padding-left:1.35em;}
.entry-content li{margin-bottom:6px;}
.entry-content a{color:var(--terracotta-deep);text-decoration:underline;}

/* JUSTIFICATION DU TEXTE COURANT (regle generale du site).
   Ne vise que les conteneurs de texte suivi : les blocs volontairement
   centres (.section-head, .card, .domain-tile, .step, footer) conservent
   leur alignement propre.
   hyphens:auto est indispensable en francais : sans cesure, la justification
   creuse des rivieres blanches dans les colonnes etroites. Il s'appuie sur
   le lang="fr-FR" pose par language_attributes() dans header.php. */
.entry-content p,
.split .txt p,
.intro-portrait p,
.page-intro p{
  text-align:justify;
  -webkit-hyphens:auto;
  hyphens:auto;
  overflow-wrap:break-word;
}

/* PAGE CARTOGRAPHIE : les quatre verbes du SIG */

/* PAGE CONTACT : bande d'ouverture et coordonnees en panneaux */
.entry-content .contact-hero{position:relative;overflow:hidden;border-radius:6px;aspect-ratio:2/1;margin:0 0 30px;background:var(--teal-800);}
.entry-content .contact-hero-img{position:absolute;inset:0;background:url(images/contact-chateau.webp) center 50%/cover no-repeat;transform-origin:50% 62%;}
/* entree franche au chargement, puis derive lente qui prend le relais */
.entry-content .contact-hero-img{
  animation:contact-entree 1.6s cubic-bezier(.2,.7,.3,1) both,
            contact-derive 22s ease-in-out 1.6s infinite alternate;
}
@media (prefers-reduced-motion: reduce){
  .entry-content .contact-hero-img{animation:none;transform:scale(1.04);}
}
@keyframes contact-entree{
  from{transform:scale(1.20) translateY(1.6%);}
  to{transform:scale(1.04) translateY(0.8%);}
}
@keyframes contact-derive{
  from{transform:scale(1.04) translateY(0.8%);}
  to{transform:scale(1.14) translateY(-1%);}
}

/* Coordonnees : filets fins, aucun aplat, les deux acces mis en avant */
.entry-content .contact-reach{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:4px 0 16px;}
.entry-content .reach{display:block;padding:20px 0;text-decoration:none;}
.entry-content .reach + .reach{border-left:1px solid var(--line);padding-left:30px;}
.entry-content .reach span{display:block;font-family:var(--font-mono);font-size:.67rem;font-weight:600;letter-spacing:.17em;text-transform:uppercase;color:var(--sage-dark);margin-bottom:8px;}
.entry-content .reach b{display:block;font-family:var(--font-title);font-size:clamp(1.02rem,2.1vw,1.32rem);font-weight:600;letter-spacing:.01em;color:var(--teal-700);transition:color .2s;}
.entry-content .reach:hover b{color:var(--terracotta-deep);}
.entry-content .contact-who{font-size:.95rem;color:var(--muted);text-align:left;hyphens:manual;}

.entry-content .contact-places{display:grid;grid-template-columns:1fr 1fr;gap:30px;margin-top:6px;}
.entry-content .place .pl{font-family:var(--font-mono);font-size:.67rem;font-weight:600;letter-spacing:.17em;text-transform:uppercase;color:var(--terracotta-deep);margin-bottom:9px;}
.entry-content .place address{font-style:normal;line-height:1.7;color:#40514f;}
@media(max-width:640px){
  .entry-content .contact-reach{grid-template-columns:1fr;}
  .entry-content .reach + .reach{border-left:0;border-top:1px solid var(--line);padding-left:0;}
  .entry-content .contact-places{grid-template-columns:1fr;gap:22px;}
}

/* Sequence d'echelles dans une reference : du territoire a l'objet */
.entry-content .echelles{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:26px 0 30px;}
.entry-content .ech img{display:block;width:100%;aspect-ratio:1;object-fit:cover;border:1px solid var(--line);border-radius:6px;background:var(--white);}
.entry-content .ech span{display:block;margin-top:9px;font-family:var(--font-mono);font-size:.65rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;line-height:1.45;color:var(--teal-700);text-align:center;}
.entry-content .ech span br+*{font-weight:400;}
@media(max-width:640px){.entry-content .echelles{grid-template-columns:repeat(2,1fr);}}

/* PAGE REFERENCES : grille de fiches et page de reference */
.refs-intro{max-width:760px;margin:0 0 40px;}
.refs{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;}
.ref-card{display:flex;flex-direction:column;background:var(--white);border:1px solid var(--line);border-radius:8px;overflow:hidden;box-shadow:0 10px 26px -20px rgba(12,42,48,.5);transition:transform .28s ease,box-shadow .28s ease,border-color .28s ease;}
.ref-card:hover{transform:translateY(-6px);box-shadow:0 22px 46px -24px rgba(12,42,48,.45);border-color:var(--terracotta);}
.ref-img{position:relative;aspect-ratio:4/3;overflow:hidden;background:var(--stone);}
.ref-img img{width:100%;height:100%;object-fit:cover;display:block;transition:scale .5s ease;}
.ref-card:hover .ref-img img{scale:1.04;}
.ref-img-vide{display:flex;align-items:center;justify-content:center;}
.ref-img-vide img{width:64px;height:auto;object-fit:contain;opacity:.28;}
.ref-txt{padding:18px 20px 22px;display:flex;flex-direction:column;gap:7px;}
.ref-dom{font-family:var(--font-mono);font-size:.66rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--sage-dark);}
.ref-txt h2{font-family:var(--font-title);font-size:1.06rem;font-weight:600;line-height:1.25;color:var(--teal-700);transition:color .28s ease;}
.ref-card:hover .ref-txt h2{color:var(--terracotta-deep);}
.ref-txt p{font-size:.87rem;line-height:1.5;color:var(--muted);}

/* Une reference */
.ref-hero{margin:0 0 30px;}
.ref-hero img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:6px;}
.ref-fiche p{margin-bottom:14px;}
.ref-fiche p strong{font-family:var(--font-mono);font-size:.7rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--terracotta-deep);}
.ref-nav{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:44px;padding-top:20px;border-top:1px solid var(--line);font-size:.86rem;}
.ref-nav a{color:var(--teal-700);}
.ref-nav a:hover{color:var(--terracotta-deep);}
.ref-nav-cote{flex:1;min-width:0;}
.ref-nav-droite{text-align:right;}
.ref-nav a.ref-nav-toutes{display:inline-flex;align-items:center;gap:9px;padding:13px 26px;border-radius:2px;background:var(--teal-700);color:#fff;font-family:var(--font-mono);font-size:.74rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase;white-space:nowrap;box-shadow:0 10px 24px -14px rgba(12,42,48,.7);transition:background .25s ease,transform .25s ease,box-shadow .25s ease;}
.ref-nav a.ref-nav-toutes:hover{background:var(--terracotta-deep);color:#fff;transform:translateY(-2px);box-shadow:0 16px 30px -14px rgba(12,42,48,.6);}
.ref-nav a.ref-nav-toutes span{transition:transform .25s ease;}
.ref-nav a.ref-nav-toutes:hover span{transform:translateX(-4px);}

/* Pagination */
.pagination{margin-top:44px;display:flex;justify-content:center;}
.pagination .nav-links{display:flex;align-items:center;gap:10px;}
.pagination .page-numbers{display:flex;align-items:center;justify-content:center;min-width:34px;height:34px;padding:0 9px;border:1px solid var(--line);border-radius:4px;font-size:.85rem;color:var(--teal-700);transition:.2s;}
.pagination .page-numbers:hover{border-color:var(--terracotta);color:var(--terracotta-deep);}
.pagination .page-numbers.current{background:var(--teal-700);border-color:var(--teal-700);color:#fff;}

@media(max-width:900px){.refs{grid-template-columns:repeat(2,1fr);}}
@media(max-width:560px){.refs{grid-template-columns:1fr;}.ref-nav{flex-direction:column;align-items:stretch;text-align:center;}.ref-nav-droite{text-align:center;}}

/* Citation attribuee dans le corps de page */
.entry-content .citation{margin:34px 0;padding:4px 0 4px 26px;border-left:3px solid var(--gold);}
.entry-content .citation p{font-size:1.06rem;line-height:1.62;color:var(--teal-800);font-style:italic;margin-bottom:12px;}
.entry-content .citation p::before{content:"« ";}
.entry-content .citation p::after{content:" »";}
.entry-content .citation cite{display:block;font-family:var(--font-mono);font-size:.72rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;font-style:normal;color:var(--terracotta-deep);}

/* Figures illustrees dans le corps de page */
.entry-content .fig{margin:28px 0 34px;}
.entry-content .fig img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:6px;background:var(--white);}
.entry-content .fig video{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:6px;background:var(--teal-900);}
.entry-content .figc{margin-top:9px;font-family:var(--font-mono);font-size:.71rem;letter-spacing:.03em;line-height:1.5;color:var(--muted);}
.entry-content .figc sup{font-size:.8em;}
.entry-content .fig-band{margin:26px 0 42px;}
.entry-content .fig-portrait{max-width:520px;margin-left:auto;margin-right:auto;}

/* Sommaire des volets : quatre filets dores, sans cadre ni aplat */
.entry-content .verbes{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;margin:32px 0 8px;}
.entry-content .verbe{display:block;border-top:2px solid var(--gold);padding-top:13px;text-decoration:none;color:inherit;transition:border-color .25s ease;}
.entry-content .verbe:hover{border-top-color:var(--terracotta);}
.entry-content .verbe b{display:block;font-family:var(--font-mono);font-size:.66rem;font-weight:600;letter-spacing:.18em;color:var(--sage-dark);margin-bottom:7px;}
.entry-content .verbe span{display:block;font-family:var(--font-title);font-size:1.02rem;font-weight:600;line-height:1.2;letter-spacing:.01em;color:var(--teal-700);margin-bottom:5px;transition:color .25s ease;}
.entry-content .verbe:hover span{color:var(--terracotta-deep);}
.entry-content .verbe em{display:block;font-style:normal;font-size:.78rem;line-height:1.42;color:var(--muted);}
/* variante non cliquable du meme bloc : les univers de Tegula */
.entry-content .univers .verbe{cursor:default;}
.entry-content .univers .verbe:hover{border-top-color:var(--gold);}
.entry-content .univers .verbe:hover span{color:var(--teal-700);}
.entry-content .univers .verbe span{margin-bottom:6px;}

/* Les quatre univers reprennent les couleurs du produit Tegula */
.entry-content .univers .verbe:nth-child(1){--filet:#D96A38;}
.entry-content .univers .verbe:nth-child(2){--filet:#2F8C5D;}
.entry-content .univers .verbe:nth-child(3){--filet:#3F7FBF;}
.entry-content .univers .verbe:nth-child(4){--filet:#C51B7D;}
.entry-content .univers .verbe,.entry-content .univers .verbe:hover{border-top-width:3px;border-top-color:var(--filet);}
.entry-content .univers .verbe span,.entry-content .univers .verbe:hover span{color:var(--filet);}

/* ---- Les deux niveaux d'usage : metier et mediation ---- */
.entry-content .niveaux{display:grid;grid-template-columns:1fr 1fr;gap:0 40px;margin:0 0 42px;}
.entry-content .niv{--filet:var(--teal-700);border-top:2px solid var(--filet);padding-top:17px;}
.entry-content .niv:nth-child(2){--filet:var(--terracotta);}
.entry-content .niv .niv-t{font-family:var(--font-title);font-size:1.1rem;font-weight:600;line-height:1.25;color:var(--filet);margin-bottom:11px;}
.entry-content .niv p{margin:0 0 15px;font-size:.9rem;line-height:1.6;color:var(--ink);text-align:left;hyphens:manual;}
.entry-content .niv ul{margin:0;padding:0;list-style:none;}
.entry-content .niv li{position:relative;padding-left:17px;margin:0 0 10px;font-size:.85rem;line-height:1.5;color:var(--muted);}
.entry-content .niv li::before{content:"";position:absolute;left:0;top:.5em;width:6px;height:6px;border-radius:50%;background:var(--filet);}
.entry-content .niveaux.quatre{grid-template-columns:1fr 1fr;gap:30px 40px;margin-bottom:8px;}
@media(max-width:820px){.entry-content .niveaux,.entry-content .niveaux.quatre{grid-template-columns:1fr;gap:32px;}}
.entry-content .niveaux.quatre .niv:nth-child(1){--filet:#D96A38;}
.entry-content .niveaux.quatre .niv:nth-child(2){--filet:#2F8C5D;}
.entry-content .niveaux.quatre .niv:nth-child(3){--filet:#3F7FBF;}
.entry-content .niveaux.quatre .niv:nth-child(4){--filet:#C51B7D;}
.entry-content .evo-fin{margin:26px 0 0;font-size:.9rem;color:var(--muted);}

/* ---- Appel a essayer le visualiseur, au-dessus de l'iframe ---- */
.entry-content .essai{text-align:center;margin:52px 0 14px;}
.entry-content .essai .essai-k{display:block;font-family:var(--font-mono);font-size:.68rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--sage-dark);margin-bottom:10px;}
.entry-content .essai h3{margin:0;font-family:var(--font-title);font-size:1.75rem;font-weight:600;line-height:1.15;color:var(--terracotta-deep);}
.entry-content .essai h3::after{content:"";display:block;width:54px;height:3px;margin:16px auto 0;background:var(--gold);}
.entry-content .essai + .tegula-embed{margin-top:0;}

/* ---- Ouverture de la partie Tegula : attaque + les quatre univers ---- */
.entry-content .groupe{margin:34px 0 44px;padding-bottom:38px;border-bottom:1px solid var(--line);}
.entry-content .groupe p.tete{max-width:64ch;margin:0 0 32px;font-size:1.12rem;line-height:1.62;color:var(--teal-800);text-align:left;hyphens:manual;}
.entry-content .groupe .verbes{margin:0;}
.entry-content .avant-bloc{margin:0 0 16px;font-family:var(--font-title);font-size:1.06rem;font-weight:600;line-height:1.3;color:var(--teal-800);text-align:left;}

/* ---- Page Developpement logiciel : les trois familles de modeles ---- */
.entry-content .modeles{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 38px;border:1px solid var(--line);border-radius:4px;background:var(--bg);overflow:hidden;}
.entry-content .mdl{padding:28px 24px 26px;border-left:1px solid var(--line);}
.entry-content .mdl:first-child{border-left:0;}
.entry-content .mdl svg{display:block;width:58px;height:58px;margin-bottom:18px;color:var(--teal-700);}
.entry-content .mdl span{display:block;font-family:var(--font-title);font-size:1.02rem;font-weight:600;line-height:1.25;color:var(--teal-800);margin-bottom:7px;}
.entry-content .mdl em{display:block;font-style:normal;font-size:.82rem;line-height:1.5;color:var(--muted);margin-bottom:12px;}
.entry-content .mdl b{display:block;font-family:var(--font-mono);font-size:.64rem;font-weight:600;letter-spacing:.11em;color:var(--sage-dark);}

/* ---- Le convertisseur glisse-depose ---- */
.entry-content .conv{display:grid;grid-template-columns:216px 1fr;gap:34px;align-items:center;margin:38px 0 42px;padding:32px 34px;background:var(--teal-900);border-radius:4px;}
.entry-content .conv .drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:148px;border:2px dashed rgba(129,177,174,.55);border-radius:6px;color:var(--sage);}
.entry-content .conv .drop svg{width:40px;height:40px;}
.entry-content .conv .drop b{font-family:var(--font-mono);font-size:.64rem;font-weight:600;letter-spacing:.15em;text-transform:uppercase;}
.entry-content .conv h4{margin:0 0 12px;font-family:var(--font-title);font-size:1.3rem;font-weight:600;line-height:1.2;color:#fff;}
.entry-content .conv p{margin:0 0 18px;font-size:.93rem;line-height:1.62;color:#c6dcda;text-align:left;hyphens:manual;}
.entry-content .conv .flux{display:flex;align-items:center;gap:13px;flex-wrap:wrap;font-family:var(--font-mono);font-size:.67rem;font-weight:600;letter-spacing:.1em;}
.entry-content .conv .flux i{font-style:normal;font-size:.95rem;color:var(--sage);}
.entry-content .conv .flux .in{padding:6px 13px;border:1px solid rgba(129,177,174,.4);border-radius:2px;color:#c6dcda;}
.entry-content .conv .flux .out{padding:6px 13px;border-radius:2px;background:var(--gold);color:#221a06;}

@media(max-width:820px){
  .entry-content .modeles{grid-template-columns:1fr;}
  .entry-content .mdl{border-left:0;border-top:1px solid var(--line);}
  .entry-content .mdl:first-child{border-top:0;}
  .entry-content .conv{grid-template-columns:1fr;gap:26px;padding:28px 24px;}
  .entry-content .conv .drop{min-height:112px;}
}

@media (prefers-reduced-motion: no-preference){
  .entry-content .conv .drop svg{animation:conv-depose 2.8s ease-in-out infinite;}
  @keyframes conv-depose{0%,58%,100%{translate:0 0;opacity:.7;}28%{translate:0 10px;opacity:1;}}
}

/* Titre de verbe : filet epais + numero en mono */
.entry-content .verbe-h{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;border-top:2px solid var(--teal-700);padding-top:15px;margin:54px 0 14px;font-size:1.45rem;}
.entry-content .verbe-k{font-family:var(--font-mono);font-size:.68rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--terracotta-deep);white-space:nowrap;}
.entry-content [id]{scroll-margin-top:calc(var(--header-h) + 24px);}

/* Encart : contraintes d'impression */
.entry-content .encart{background:var(--stone);border-left:3px solid var(--gold);padding:24px 26px 8px;margin:28px 0;}
.entry-content .encart h4{margin-top:0;}
.entry-content .encart li::before{background:var(--gold);}
.entry-content .encart-duo{padding-bottom:24px;}
.entry-content .duo{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.entry-content .duo .fig{margin:0;}
.entry-content .duo .fig img{border-color:var(--stone-line);}
@media(max-width:640px){.entry-content .duo{grid-template-columns:1fr;}}

/* Les questions d'analyse spatiale : la question, puis l'outil en legende */
.entry-content .questions{display:grid;grid-template-columns:repeat(2,1fr);gap:0 34px;margin:26px 0 34px;}
.entry-content .q{border-top:1px solid var(--line);padding:15px 0 16px;}
.entry-content .q p{margin:0 0 7px;font-family:var(--font-title);font-size:.98rem;font-weight:600;line-height:1.35;color:var(--teal-700);text-align:left;hyphens:manual;}
.entry-content .q p::before{content:"« ";}
.entry-content .q p::after{content:" »";}
.entry-content .q .qs{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.04em;line-height:1.45;color:var(--sage-dark);}

@media(max-width:640px){
  .entry-content .verbes{grid-template-columns:repeat(2,1fr);gap:20px;}
  .entry-content .questions{grid-template-columns:1fr;gap:0;}
}

/* Fenetre Tegula embarquee (iframe du visualiseur 3D) */
.tegula-embed{margin:34px 0;}
.tegula-frame{position:relative;width:100%;aspect-ratio:4/3;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--teal-900);box-shadow:0 14px 34px -24px rgba(12,42,48,.6);}
.tegula-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;}
.tegula-embed figcaption{margin-top:10px;text-align:center;font-size:.84rem;line-height:1.5;color:var(--muted);}

/* SERVICES */
.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;}
.card{background:var(--white);border:1px solid var(--line);border-radius:6px;padding:34px 26px;transition:.28s;box-shadow:0 8px 24px -18px rgba(12,42,48,.5);}
.card:hover{transform:translateY(-8px);box-shadow:0 22px 46px -20px rgba(12,42,48,.5);border-color:var(--teal-600);}
.card .ic{width:52px;height:52px;color:var(--teal-600);display:block;margin:0 auto 20px;transition:transform .28s ease,color .28s ease;}
.card:hover .ic{transform:scale(1.12);color:var(--terracotta);}
.card h3{transition:color .28s ease;}
.card:hover h3{color:var(--terracotta-deep);}
.card h3{font-size:1.15rem;margin-bottom:8px;color:var(--teal-700);text-align:center;}
.card .sub{font-style:italic;color:var(--sage-dark);font-size:.9rem;margin-bottom:16px;text-align:center;}
.card ul{list-style:none;font-size:.9rem;color:var(--muted);}
.card li{padding:5px 0 5px 16px;position:relative;}
.card li::before{content:"";position:absolute;left:0;top:13px;width:6px;height:6px;background:var(--sage);border-radius:50%;}
/* Fiche-image : occupe une cellule de la grille .cards au meme gabarit qu'une fiche */
.card-photo{padding:0;overflow:hidden;background:var(--teal-800) url(images/la-reau.webp) center/cover no-repeat;}
/* La fiche-image n'a aucun contenu : sur une grille a une seule colonne, plus
   de voisine pour lui donner sa hauteur, elle s'ecrase en bandeau de quelques
   pixels. On lui impose donc son propre rapport, proche de celui de la photo. */
@media(max-width:560px){.card-photo{aspect-ratio:4/5;}}
/* Bandeau telepilote : panneau photo net a gauche, meme photo floutee sous le texte */
.soln-note{position:relative;display:flex;align-items:stretch;min-height:clamp(190px,24vh,286px);margin:26px 0 0;padding:0;overflow:hidden;background:var(--teal-800);border-top:1px solid rgba(200,159,65,.4);border-bottom:1px solid rgba(200,159,65,.4);}
/* prolongement floute de la photo : donne de la matiere sous le texte */
.soln-note::before{content:"";position:absolute;inset:-28px;z-index:0;background:url(images/drone-facade.webp) center/cover no-repeat;filter:blur(15px) saturate(.82);transform:scale(1.06);}
/* voile teal translucide, de plus en plus dense vers la droite */
.soln-note::after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,rgba(23,69,79,.42) 0%,rgba(23,69,79,.5) 30%,rgba(20,58,67,.72) 47%,rgba(17,50,58,.83) 66%,rgba(15,45,53,.86) 100%);}
.soln-media{position:relative;z-index:2;flex:0 0 clamp(210px,31%,336px);background:var(--teal-800) url(images/drone-facade.webp) center 46%/cover no-repeat;}
/* fondu long du panneau net vers le flou : plus de couture verticale */
.soln-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(23,69,79,0) 36%,rgba(23,69,79,.16) 64%,rgba(23,69,79,.4) 86%,rgba(21,61,70,.52) 100%);}
.soln-note-in{position:relative;z-index:3;flex:1;min-width:0;display:flex;align-items:center;gap:18px;padding:20px clamp(24px,4vw,52px) 20px clamp(20px,4vw,58px);}
.soln-note-ic{width:34px;height:34px;color:var(--gold);flex:0 0 auto;filter:drop-shadow(0 1px 3px rgba(11,38,44,.5));}
.soln-note p{font-size:.94rem;line-height:1.55;color:#e9f1f0;text-align:left;text-shadow:0 1px 3px rgba(11,38,44,.5);}
.soln-note strong{color:#fff;}
.soln-reg{display:inline-block;margin-top:7px;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.03em;color:#a6cbc7;}
@media(max-width:640px){.soln-note{flex-direction:column;min-height:0;}.soln-note::after{background:linear-gradient(180deg,rgba(23,69,79,.42) 0%,rgba(20,58,67,.72) 46%,rgba(15,45,53,.87) 100%);}.soln-media{flex:0 0 190px;}.soln-media::after{background:linear-gradient(180deg,rgba(23,69,79,0) 52%,rgba(23,69,79,.3) 82%,rgba(21,61,70,.55) 100%);}.soln-note-in{flex-direction:column;text-align:center;padding:18px 24px 22px;}.soln-note p{text-align:center;}}

/* le bandeau photo est plus haut que l ancienne pastille : on resserre la section */
#solutions .section-head{margin-bottom:34px;}
#solutions .card{padding:26px 22px;}


/* Révélation au scroll — section « Nos savoir-faire » (cartes en cascade) */
@media (prefers-reduced-motion: no-preference){
  #solutions .section-head,#solutions .card,#solutions .soln-note{opacity:0;transform:translateY(28px);transition:opacity .6s ease,transform .6s ease;}
  #solutions.is-revealed .section-head,#solutions.is-revealed .card,#solutions.is-revealed .soln-note{opacity:1;transform:none;}
  #solutions.is-revealed .soln-note{transition-delay:.5s;}
  #solutions.is-revealed .card:nth-child(1){transition-delay:.12s;}
  #solutions.is-revealed .card:nth-child(2){transition-delay:.22s;}
  #solutions.is-revealed .card:nth-child(3){transition-delay:.32s;}
  #solutions.is-revealed .card:nth-child(4){transition-delay:.42s;}
}

/* Domaines d'application : tuiles à picto */
.domain-grid{display:flex;flex-wrap:wrap;justify-content:center;gap:20px;max-width:940px;margin:0 auto;}
/* Bande specimen : une meme elevation en trois lectures (pleine largeur, sous le titre) */
.phases-band{position:relative;height:clamp(80px,11vh,124px);margin:0 0 28px;overflow:hidden;background:var(--stone) url(images/bati-phases.webp) center/cover no-repeat;border-top:1px solid var(--stone-line);border-bottom:1px solid var(--stone-line);}
#domaines .section-head{margin-bottom:26px;}
.domain-tile{flex:0 0 200px;background:#fff;border:1px solid var(--stone-line);border-radius:8px;padding:26px 18px;text-align:center;transition:transform .28s ease,box-shadow .28s ease,border-color .28s ease;}
.domain-tile svg{width:40px;height:40px;color:var(--teal-600);display:block;margin:0 auto 14px;transition:transform .28s ease,color .28s ease;}
.domain-tile h3{font-size:1rem;color:var(--teal-700);margin-bottom:4px;}
.domain-tile p{font-size:.82rem;color:var(--muted);line-height:1.4;}
.domain-tile:hover{transform:translateY(-6px);box-shadow:0 18px 40px -22px rgba(12,42,48,.4);border-color:var(--terracotta);}
.domain-tile:hover svg{transform:scale(1.12);color:var(--terracotta);}
@media(max-width:560px){.domain-tile{flex:0 0 44%;}}
@media (prefers-reduced-motion: no-preference){
  #domaines .section-head,#domaines .phases-band{opacity:0;transform:translateY(14px);transition:opacity .6s ease,transform .6s ease;}
  #domaines.is-revealed .phases-band{transition-delay:.06s;}
  #domaines .domain-tile{opacity:0;transform:scale(.82);transition:opacity .5s ease,transform .5s cubic-bezier(.2,.7,.3,1);}
  #domaines.is-revealed .section-head,#domaines.is-revealed .phases-band,#domaines.is-revealed .domain-tile{opacity:1;transform:none;}
  #domaines.is-revealed .domain-tile:nth-child(1){transition-delay:.10s;}
  #domaines.is-revealed .domain-tile:nth-child(2){transition-delay:.16s;}
  #domaines.is-revealed .domain-tile:nth-child(3){transition-delay:.22s;}
  #domaines.is-revealed .domain-tile:nth-child(4){transition-delay:.28s;}
  #domaines.is-revealed .domain-tile:nth-child(5){transition-delay:.34s;}
  #domaines.is-revealed .domain-tile:nth-child(6){transition-delay:.40s;}
  #domaines.is-revealed .domain-tile:nth-child(7){transition-delay:.46s;}
}

/* CHIPS */
/* Fiches materiel illustrees (page Prestations) */
.gear{display:grid;grid-template-columns:repeat(2,1fr);gap:24px;max-width:900px;margin:0 auto;}
.gear-card{background:var(--white);border:1px solid var(--stone-line);border-radius:10px;overflow:hidden;box-shadow:0 10px 26px -20px rgba(12,42,48,.5);transition:transform .28s ease,box-shadow .28s ease,border-color .28s ease;}
.gear-card:hover{transform:translateY(-6px);box-shadow:0 22px 46px -24px rgba(12,42,48,.45);border-color:var(--terracotta);}
.gear-img{aspect-ratio:4/3;background-color:var(--teal-800);background-position:center;background-size:cover;background-repeat:no-repeat;}
.gear-txt{padding:20px 24px 24px;}
.gear-txt h3{font-size:1.08rem;color:var(--teal-700);margin-bottom:8px;}
.gear-txt p{font-size:.92rem;color:var(--muted);line-height:1.55;}
.gear-sub{text-align:center;font-family:var(--font-mono);font-size:.74rem;letter-spacing:.16em;text-transform:uppercase;color:var(--sage-dark);font-weight:600;margin:48px 0 20px;}
.gear-3{grid-template-columns:repeat(3,1fr);max-width:none;}

/* Section collaborations (page L'entreprise) */
.collab{max-width:820px;margin:0 auto;}
.collab h3{font-family:var(--font-title);font-size:1.28rem;color:var(--teal-700);margin-bottom:12px;}
.collab p{color:var(--muted);line-height:1.65;margin-bottom:16px;text-align:justify;-webkit-hyphens:auto;hyphens:auto;}
.collab a{color:var(--terracotta-deep);border-bottom:1px solid var(--terracotta);transition:.2s;}
.collab a:hover{color:var(--teal-700);border-bottom-color:var(--teal-600);}
.collab .case{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--sage-dark);margin:34px 0 0;}
.collab-out{margin-top:26px;color:var(--teal-800)!important;font-weight:600;text-align:left!important;}

/* Partage des roles : une colonne par intervenant */
.roles{display:grid;grid-template-columns:repeat(2,1fr);gap:22px;margin:16px 0 0;}
.role{background:var(--stone);border-left:3px solid var(--teal-600);padding:20px 24px;}
.role.role-alt{border-left-color:var(--gold);}
.role b{display:block;font-family:var(--font-mono);font-size:.72rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--teal-800);margin-bottom:12px;}
.role ul{list-style:none;}
.role li{position:relative;padding-left:16px;margin-bottom:8px;font-size:.92rem;line-height:1.5;color:#4a5a5d;}
.role li:last-child{margin-bottom:0;}
.role li::before{content:"";position:absolute;left:0;top:.62em;width:5px;height:5px;border-radius:50%;background:var(--sage);}
.role.role-alt li::before{background:var(--gold);}

/* Figure du cas Arbanats */
/* Carrousel apparie du cas Arbanats : la donnee Vitruve face au dessin */
.acar{margin:30px 0 0;}
.acar .pcar-viewport{min-height:0;height:auto;}
.acar .pcar-track{height:auto;align-items:stretch;}
.acar .pcar-slide{height:auto;overflow:visible;padding-right:0;}
.acar-title{font-family:var(--font-mono);font-size:.72rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--sage-dark);text-align:center;margin-bottom:14px;}
.acar-pair{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
.acar-f{margin:0;}
.acar-f img{display:block;width:100%;aspect-ratio:4/3;object-fit:contain;background:var(--white);border:1px solid var(--line);border-radius:6px;}
.acar-f figcaption{margin-top:9px;font-size:.8rem;line-height:1.45;color:var(--muted);text-align:center;}
.acar-f figcaption b{display:block;font-family:var(--font-mono);font-size:.68rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase;margin-bottom:3px;}
.acar-v figcaption b{color:var(--teal-700);}
.acar-c figcaption b{color:var(--gold);}
@media(max-width:700px){.acar-pair{grid-template-columns:1fr;}}

@media(max-width:700px){.roles{grid-template-columns:1fr;}}
a.gear-card{display:block;text-decoration:none;color:inherit;}
.gear-more{display:inline-block;margin-top:12px;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--terracotta-deep);border-bottom:2px solid var(--terracotta);padding-bottom:3px;}
.gear-card:hover .gear-more{color:var(--teal-700);border-bottom-color:var(--teal-600);}
@media(max-width:820px){.gear-3{grid-template-columns:repeat(2,1fr);}}
@media(max-width:700px){.gear,.gear-3{grid-template-columns:1fr;}}
.chips{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;max-width:820px;margin:0 auto;}
.chip{border:1px solid var(--terracotta);color:var(--terracotta-deep);padding:9px 18px;border-radius:40px;font-size:.85rem;letter-spacing:.03em;background:#fff;transition:.2s;}
.chip:hover{background:var(--terracotta);color:#fff;}

/* PIPELINE */
.pipeline{background:var(--teal-700);color:#fff;}
/* Fond de section : une image par phase, en fondu croise sous un voile teal */
.pipeline{position:relative;}
.pipe-bg{position:absolute;inset:0;z-index:0;overflow:hidden;}
.pipe-bg-l{position:absolute;inset:0;background-position:center;background-size:cover;background-repeat:no-repeat;opacity:0;transition:opacity .7s ease;}
.pipe-bg-l.is-active{opacity:1;}
.pipe-bg::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(44,92,106,.91) 0%,rgba(44,92,106,.86) 48%,rgba(23,69,79,.9) 100%);}
.pipeline .wrap{position:relative;z-index:1;}
@media (prefers-reduced-motion: reduce){.pipe-bg-l{transition-duration:.001s;}}
.pipeline .steps{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-top:20px;}
.pipeline .step{flex:1;min-width:150px;text-align:center;position:relative;padding:0 8px;}
.pipeline .num{width:48px;height:48px;border-radius:50%;border:2px solid var(--gold);color:var(--gold);display:flex;align-items:center;justify-content:center;font-size:1.1rem;margin:0 auto 16px;font-weight:600;}
.pipeline .step p{font-size:.92rem;color:#d7e6e5;}
.pipeline .section-head h2,.pipeline .section-head p{color:#fff;}

/* Section 4 : chaîne opératoire interactive (stepper + panneau détaillé) */
.pipeline .section-head{margin-bottom:0;}
.pipe{display:flex;flex-direction:column;gap:26px;margin-top:26px;}
.pipe-stepper{display:flex;justify-content:space-between;gap:10px;position:relative;max-width:920px;width:100%;margin:0 auto;}
.pipe-stepper::before{content:"";position:absolute;top:24px;left:9%;right:9%;height:2px;background:rgba(255,255,255,.18);z-index:0;}
.pstep{flex:1;min-width:0;padding:0;background:none;border:0;cursor:pointer;color:#cddedd;font-family:inherit;display:flex;flex-direction:column;align-items:center;gap:10px;position:relative;z-index:1;}
.pstep .num{width:48px;height:48px;border-radius:50%;border:2px solid rgba(255,255,255,.35);color:#fff;background:var(--teal-700);display:flex;align-items:center;justify-content:center;font-size:1.05rem;font-weight:600;transition:transform .25s,border-color .25s,color .25s,background .25s,box-shadow .25s;}
.pstep .plabel{font-size:.82rem;line-height:1.25;text-align:center;transition:color .25s;}
.pstep:hover .num,.pstep:focus-visible .num{border-color:var(--gold);color:var(--gold);transform:translateY(-2px);}
.pstep.is-active .num{background:var(--gold);border-color:var(--gold);color:var(--teal-900);box-shadow:0 0 0 5px rgba(200,159,65,.2);}
.pstep.is-active .plabel{color:#fff;font-weight:600;}
.pipe-panels{position:relative;width:100%;max-width:960px;margin:0 auto;min-height:clamp(210px,34vh,340px);}
.ppanel{position:absolute;inset:0;opacity:0;pointer-events:none;transform:translateY(6px);transition:opacity .55s cubic-bezier(.4,0,.2,1),transform .55s cubic-bezier(.4,0,.2,1);background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:14px;padding:26px clamp(22px,3vw,40px);overflow:auto;box-shadow:0 20px 46px -26px rgba(0,0,0,.55);}
.ppanel.is-active{opacity:1;pointer-events:auto;transform:none;transition-delay:.06s;}
@media (prefers-reduced-motion: reduce){.ppanel{transition-duration:.001s;transform:none;}}
.ppanel h3{font-family:var(--font-title);color:var(--teal-700);font-size:clamp(1.1rem,2vw,1.35rem);margin-bottom:20px;}
.ppanel h3 .pk{font-family:var(--font-mono);color:var(--terracotta-deep);letter-spacing:.1em;font-size:.7em;margin-right:10px;text-transform:uppercase;}
.ppanel ul{list-style:none;margin:0;columns:2;column-gap:44px;}
.ppanel li{position:relative;padding-left:22px;margin-bottom:14px;color:#3a4c50;font-size:.95rem;line-height:1.5;break-inside:avoid;}
.ppanel li::before{content:"";position:absolute;left:0;top:.5em;width:8px;height:8px;border-radius:50%;background:var(--gold);}
@media(max-width:640px){.ppanel ul{columns:1;}.pstep .plabel{font-size:.7rem;}.pstep .num{width:40px;height:40px;}.pipe-stepper::before{top:20px;}}

/* Révélation section 4 : la ligne se trace, les jalons éclosent, le panneau paraît */
@media (prefers-reduced-motion: no-preference){
  #methode .section-head{opacity:0;transform:translateY(-14px);transition:opacity .6s ease,transform .6s ease;}
  #methode .pipe-stepper::before{transform:scaleX(0);transform-origin:left center;transition:transform .85s cubic-bezier(.65,0,.35,1) .15s;}
  #methode .pstep{opacity:0;transform:scale(.5);transition:opacity .5s ease,transform .5s cubic-bezier(.34,1.56,.64,1);}
  #methode .pipe-panels{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease;}
  #methode.is-revealed .section-head{opacity:1;transform:none;}
  #methode.is-revealed .pipe-stepper::before{transform:scaleX(1);}
  #methode.is-revealed .pstep{opacity:1;transform:none;}
  #methode.is-revealed .pstep:nth-child(1){transition-delay:.25s;}
  #methode.is-revealed .pstep:nth-child(2){transition-delay:.40s;}
  #methode.is-revealed .pstep:nth-child(3){transition-delay:.55s;}
  #methode.is-revealed .pstep:nth-child(4){transition-delay:.70s;}
  #methode.is-revealed .pstep:nth-child(5){transition-delay:.85s;}
  #methode.is-revealed .pipe-panels{opacity:1;transform:none;transition-delay:1s;}
}

/* SPLIT features */
.split{display:grid;grid-template-columns:1fr 1fr;gap:0;align-items:stretch;}
.split .media{position:relative;min-height:420px;background-size:cover;background-position:center;}
.media-tag{position:absolute;left:24px;bottom:24px;padding:9px 20px;border-radius:40px;color:#fff;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;font-weight:600;}
/* Portrait encadré (page L'entreprise) */
.intro-portrait{display:grid;grid-template-columns:260px 1fr;gap:48px;align-items:center;max-width:960px;margin:0 auto;}
.intro-portrait img{width:260px;height:auto;border-radius:8px;box-shadow:0 14px 34px -20px rgba(12,42,48,.6);}
.intro-portrait h1,.intro-portrait h2{font-size:1.5rem;line-height:1.15;font-weight:600;margin-bottom:20px;}
.intro-portrait p{margin-bottom:24px;}
@media(max-width:820px){.intro-portrait{grid-template-columns:1fr;text-align:center;gap:28px;}.intro-portrait img{max-width:220px;margin:0 auto;}}
.split .txt{padding:76px 60px;display:flex;flex-direction:column;justify-content:center;}
.split .txt h2{font-size:2rem;margin-bottom:18px;color:var(--teal-700);}
.split .txt p{color:var(--muted);margin-bottom:24px;}
.split .txt a.more{color:var(--terracotta-deep);font-weight:600;letter-spacing:.1em;text-transform:uppercase;font-size:.82rem;border-bottom:2px solid var(--terracotta);padding-bottom:4px;display:inline-block;width:max-content;}
.split .txt a.more::after{content:"\2192";margin-left:.5em;font-family:system-ui,"Segoe UI Symbol","Apple Color Emoji",sans-serif;transition:transform .2s;display:inline-block;}
.split .txt a.more:hover::after{transform:translateX(4px);}

/* Section Patrimoine : carrousel 3 parties (reprend l'ancien défilement) */
@media(min-width:901px){#patrimoine{grid-template-columns:34% 66%;}#environnement{grid-template-columns:47% 53%;}}
.split .txt.pcar-col{padding:38px clamp(28px,3vw,52px);justify-content:flex-start;overflow:hidden;}
.pcar-col>.eyebrow{margin-bottom:12px;flex:0 0 auto;}
.pcar{flex:1;display:flex;flex-direction:column;min-height:0;width:100%;}
.pcar-viewport{flex:1;position:relative;overflow:hidden;min-height:clamp(280px,48vh,520px);}
.pcar-track{display:flex;height:100%;transition:transform .5s cubic-bezier(.4,0,.2,1);}
.pcar-slide{flex:0 0 100%;height:100%;overflow-y:auto;padding-right:12px;}
.split .txt.pcar-col .pcar-slide h2{font-size:1.5rem;margin-bottom:16px;}
.split .txt.pcar-col .pcar-slide p{color:var(--muted);font-size:.9rem;line-height:1.55;margin-bottom:12px;}
.pcar-slide strong{font-weight:700;color:var(--teal-800);}
.pcar-img{display:block;margin:16px auto 4px;width:min(280px,100%);height:auto;border-radius:8px;}
.pcar-list{list-style:none;margin:6px 0 0;}
.pcar-list li{position:relative;padding-left:18px;margin-bottom:10px;color:#3a4c50;font-size:.88rem;line-height:1.5;}
.pcar-list li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;border-radius:50%;background:var(--terracotta);}
.pcar-list li strong{color:var(--teal-800);}
.pcar-box{background:var(--stone);border:1px solid var(--stone-line);border-radius:10px;padding:15px 20px;margin-top:14px;}
.pcar-box h3{font-family:var(--font-title);color:var(--terracotta-deep);font-size:1.02rem;margin-bottom:10px;}
.pcar-box ul{list-style:none;margin:0;}
.pcar-box li{position:relative;padding-left:18px;margin-bottom:9px;color:#3a4c50;font-size:.86rem;line-height:1.5;}
.pcar-box li:last-child{margin-bottom:0;}
.pcar-box li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;border-radius:50%;background:var(--terracotta);}
.pcar-box li strong{color:var(--teal-800);}
.pcar-slide::-webkit-scrollbar{width:7px;}
.pcar-slide::-webkit-scrollbar-thumb{background:var(--stone-line);border-radius:4px;}
.pcar-nav{display:flex;align-items:center;justify-content:center;gap:18px;padding-top:14px;flex:0 0 auto;}
.pcar-arrow{width:38px;height:38px;border-radius:50%;border:1.5px solid var(--terracotta);background:#fff;color:var(--terracotta-deep);font-size:1.3rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s,color .2s;}
.pcar-arrow:hover{background:var(--terracotta);color:#fff;}
.pcar-dots{display:flex;align-items:center;gap:9px;}
.pcar-dot{width:9px;height:9px;padding:0;border:0;border-radius:50%;background:var(--stone-line);cursor:pointer;transition:.25s;}
.pcar-dot.is-active{background:var(--terracotta);width:24px;border-radius:5px;}
.split .txt.pcar-col a.more{margin-top:14px;flex:0 0 auto;align-self:flex-end;}
@media(max-width:900px){.split .txt.pcar-col{overflow:visible;}.pcar-viewport{min-height:66vh;}}

/* Révélation section Patrimoine : l'image se dévoile par balayage, le texte entre par la droite */
@media (prefers-reduced-motion: no-preference){
  #patrimoine .media{clip-path:inset(0 100% 0 0);transform:scale(1.05);transition:clip-path .9s cubic-bezier(.65,0,.35,1),transform 1.1s ease;}
  #patrimoine .media-tag{opacity:0;transform:translateY(10px) scale(.9);transition:opacity .5s ease,transform .5s ease;}
  #patrimoine .pcar-col>.eyebrow{opacity:0;transform:translateY(-10px);transition:opacity .6s ease,transform .6s ease;}
  #patrimoine .pcar{opacity:0;transform:translateX(34px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.3,1);}
  #patrimoine.is-revealed .media{clip-path:inset(0 0 0 0);transform:none;}
  #patrimoine.is-revealed .media-tag{opacity:1;transform:none;transition-delay:.55s;}
  #patrimoine.is-revealed .pcar-col>.eyebrow{opacity:1;transform:none;transition-delay:.2s;}
  #patrimoine.is-revealed .pcar{opacity:1;transform:none;transition-delay:.35s;}
}

/* Révélation section Environnement : miroir de Patrimoine (image à droite) */
@media (prefers-reduced-motion: no-preference){
  #environnement .media{clip-path:inset(0 0 0 100%);transform:scale(1.05);filter:grayscale(1);transition:clip-path .9s cubic-bezier(.65,0,.35,1),transform 1.1s ease,filter 1.6s ease .7s;}
  #environnement .media-tag{opacity:0;transform:translateY(10px) scale(.9);transition:opacity .5s ease,transform .5s ease;}
  #environnement .pcar-col>.eyebrow{opacity:0;transform:translateY(-10px);transition:opacity .6s ease,transform .6s ease;}
  #environnement .pcar{opacity:0;transform:translateX(-34px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.3,1);}
  #environnement.is-revealed .media{clip-path:inset(0 0 0 0);transform:none;filter:grayscale(0);}
  #environnement.is-revealed .media-tag{opacity:1;transform:none;transition-delay:.55s;}
  #environnement.is-revealed .pcar-col>.eyebrow{opacity:1;transform:none;transition-delay:.2s;}
  #environnement.is-revealed .pcar{opacity:1;transform:none;transition-delay:.35s;}
}

/* Révélation section Contact : les panneaux de verre se condensent (mise au point) */
@media (prefers-reduced-motion: no-preference){
  #contact .section-head{opacity:0;transform:translateY(18px) scale(.98);transition:opacity .6s ease,transform .6s ease;}
  #contact .glass{opacity:0;filter:blur(14px);transform:scale(.94);transition:opacity .7s ease,filter .8s ease,transform .8s cubic-bezier(.2,.7,.3,1);}
  #contact.is-revealed .section-head{opacity:1;transform:none;}
  #contact.is-revealed .glass{opacity:1;filter:blur(0);transform:none;}
  #contact.is-revealed .glass:nth-child(1){transition-delay:.25s;}
  #contact.is-revealed .glass:nth-child(2){transition-delay:.42s;}
}
.split.rev .media{order:2;}

/* FOUNDER */
.founder{background:var(--teal-700);color:#eaf3f2;}
.founder .inner{display:grid;grid-template-columns:280px 1fr;gap:48px;align-items:center;max-width:980px;margin:0 auto;}
.founder img{border-radius:6px;filter:grayscale(.15);}
.founder h2{font-size:1.8rem;color:#fff;margin-bottom:8px;}
.founder .role{color:var(--sage);letter-spacing:.1em;text-transform:uppercase;font-size:.8rem;margin-bottom:18px;}
.founder p{color:#c3d8d6;margin-bottom:14px;}

/* FOOTER — barre fine fixe */
footer.site{position:fixed;bottom:0;left:0;right:0;margin:0 auto;width:100%;max-width:1080px;min-height:var(--footer-h);z-index:60;background:var(--teal-900);color:#b9cccb;border-top:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);}
footer.site .wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:var(--footer-h);padding:8px clamp(20px,4vw,56px);font-size:.8rem;flex-wrap:wrap;}
footer.site a{color:#cdd8da;}
footer.site a:hover{color:#fff;}
footer.site .foot-legal{color:#7f9695;}

@media(max-width:1080px){.box{max-width:100%;box-shadow:none;}}
@media(max-width:900px){
  .cards{grid-template-columns:repeat(2,1fr);}
  .split{grid-template-columns:1fr;} .split.rev .media{order:0;}
  .split .txt{padding:48px 32px;}
  .founder .inner{grid-template-columns:1fr;text-align:center;} .founder img{max-width:220px;margin:0 auto;}
  footer.site .foot-contact{display:none;}
  footer.site .wrap{justify-content:center;text-align:center;}
  .box{padding-bottom:70px;}
}

/* ---- Menu principal repliable, sous 900 px ---- */
@media(max-width:900px){
  /* Sans JavaScript, la liste reste affichee et se replie sur plusieurs lignes. */
  nav.main ul{flex-wrap:wrap;justify-content:flex-end;gap:4px 15px;}
  nav.main a{font-size:.76rem;}

  /* Le bouton n'existe que si le script a tourne : sa seule presence suffit,
     inutile de dependre en plus de la classe js-nav. */
  .nav-burger{display:flex;}

  /* Logo du bandeau : le format tres allonge du fichier le rend envahissant
     sur un ecran etroit, on le ramene a la hauteur du bouton. */
  header.site .logo img{height:26px;}

  /* Le logo du hero ferait doublon avec celui du bandeau, qui reste visible
     en permanence sur petit ecran, video comprise. */
  .hero-logo{display:none;}
  body.video-en-cours header.site .logo{opacity:1;pointer-events:auto;}

  /* Hero : le titre et le chapeau restent trop imposants apres la mise a
     l'echelle generale, on les reprend un par un. */
  .hero h1{font-size:clamp(1.5rem,6.5vw,2.1rem);max-width:none;margin-bottom:16px;}
  .hero p.lede{font-size:.95rem;margin-bottom:26px;}
  .hero .coords{margin-top:30px;gap:22px;font-size:.82rem;}
  .hero .coords.glass{padding:16px 20px;}
  .hero .wrap{padding-top:44px;padding-bottom:44px;}
  .eyebrow{font-size:.7rem;margin-bottom:10px;}

  /* Les commandes video passaient par-dessus le bandeau des techniques,
     le hero etant beaucoup plus court sur telephone. */
  .hero-controls{left:auto;right:14px;bottom:auto;top:14px;}

  /* En ligne, les quatre techniques debordent du cadre : on les empile,
     ce qui les rend lisibles et raccourcit le bandeau. */
  .home .techband .wrap,.techband .wrap{display:flex;flex-direction:column;flex-wrap:nowrap;
    align-items:flex-start;justify-content:flex-start;gap:9px;
    padding:16px clamp(24px,4vw,56px);font-size:.88rem;}
  /* Le separateur vide entre deux techniques compte comme un enfant flexible :
     il decalait la pastille de toutes les lignes sauf la premiere. */
  .techband span+span::before{content:none;}

  /* Chapeaux de section : justifies comme le reste des textes suivis, le
     centrage laissant des lignes trop irregulieres sur un ecran etroit. */
  .section-head{margin-bottom:34px;}
  .section-head p{text-align:justify;hyphens:auto;font-size:.95rem;}

  /* Cartes de savoir-faire : resserrees, pictogrammes reduits. */
  .cards{gap:14px;}
  .card{padding:22px 18px;}
  .card .ic{width:36px;height:36px;margin-bottom:12px;}
  .card h3{font-size:1.05rem;margin-bottom:6px;}
  .card .sub{font-size:.85rem;margin-bottom:11px;}
  .card ul{font-size:.85rem;}
  .card li{padding:3px 0 3px 15px;}
  .card li::before{top:11px;}
  .js-nav nav.main{position:fixed;top:var(--header-h);left:0;right:0;width:100%;max-width:1080px;margin:0 auto;
    padding:2px 0 14px;background:rgba(23,69,79,.97);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
    border-bottom:1px solid rgba(255,255,255,.14);box-shadow:0 18px 34px -22px rgba(0,0,0,.75);
    visibility:hidden;opacity:0;translate:0 -10px;
    transition:opacity .22s ease,translate .22s ease,visibility 0s linear .22s;}
  .js-nav nav.main ul{flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;gap:0;padding:0 clamp(16px,3vw,34px);}
  .js-nav nav.main li{border-top:1px solid rgba(255,255,255,.1);}
  .js-nav nav.main li:first-child{border-top:0;}
  .js-nav nav.main a{display:block;padding:15px 2px;font-size:.95rem;letter-spacing:.02em;white-space:normal;}
  .js-nav nav.main a::after{display:none;}
  .js-nav nav.main a:hover,.js-nav nav.main a:focus-visible{color:var(--gold);}
  body.nav-ouvert nav.main{visibility:visible;opacity:1;translate:0 0;
    transition:opacity .22s ease,translate .22s ease;}
}
@media(max-width:900px) and (prefers-reduced-motion:reduce){
  .js-nav nav.main{transition:visibility 0s linear .01s;translate:none;}
  .nav-burger span{transition:none;}
}
@media(max-width:560px){.cards{grid-template-columns:1fr;}}

/* ============ ajouts theme WordPress ============ */
section[id]{scroll-margin-top:0;}
.media-patrimoine{background-image:url(images/architecture1.webp);}
.media-environnement{background-image:url(images/dordogne2.webp);}
#environnement .media-tag{left:auto;right:24px;}
#environnement .pcar-col a.more{align-self:flex-start;}

/* Section contact */
.contact{position:relative;color:#fff;padding:96px 0;
  background:linear-gradient(rgba(11,38,44,.92),rgba(44,92,106,.86)),url(images/architecture3.webp) center/cover;}
.contact .section-head h2{color:#fff;}
.contact .section-head p{color:#cfe0df;}
.contact .eyebrow{color:var(--gold);}
.contact .inner{display:grid;grid-template-columns:1fr 1fr;gap:26px;max-width:900px;margin:0 auto;}
.contact .glass{padding:30px 32px;}
.contact .glass h4{color:var(--gold);letter-spacing:.14em;text-transform:uppercase;font-size:.74rem;margin-bottom:14px;font-weight:600;}
.contact .glass p{margin-bottom:6px;line-height:1.8;}
.contact a{color:#fff;border-bottom:1px solid rgba(255,255,255,.4);}
.contact a:hover{border-color:var(--gold);}
@media(max-width:820px){.contact .inner{grid-template-columns:1fr;}}

/* ============================================================
   REVELATIONS DE LA PAGE PRESTATIONS DE RELEVES
   Un dispositif distinct par section, tous absents de l'accueil.
   Le masquage est conditionne a .js-reveal, posee par reveal.js :
   sans le script, rien n'est cache.
   --rv-d : temporisation d'entree de section. Nulle pour la premiere,
   qui est visible des le chargement et ne doit pas se faire attendre.
   ============================================================ */
[data-reveal]{--rv-d:.2s;}
#prestations{--rv-d:0s;}

@media (prefers-reduced-motion: no-preference){

  /* 1. Bandeau d'ouverture : volet central qui s'ouvre vers les deux bords */
  .js-reveal #prestations:not(.is-revealed) .page-hero-band{clip-path:inset(0 50% 0 50%);}
  .js-reveal #prestations:not(.is-revealed) .page-intro>*{opacity:0;}
  #prestations.is-revealed .page-hero-band{animation:rv-volet 1s cubic-bezier(.6,0,.2,1) calc(var(--rv-d) + .25s) both;}
  #prestations.is-revealed .page-intro>*{animation:rv-monte .6s ease var(--rv-d) both;}
  #prestations.is-revealed .page-intro>*:nth-child(2){animation-delay:calc(var(--rv-d) + .07s);}
  #prestations.is-revealed .page-intro>*:nth-child(3){animation-delay:calc(var(--rv-d) + .14s);}
  #prestations.is-revealed .page-intro>*:nth-child(4){animation-delay:calc(var(--rv-d) + .21s);}

  /* 2. Nos prestations : basculement en perspective depuis la base */
  #pr-savoirfaire .cards{perspective:1100px;}
  .js-reveal #pr-savoirfaire:not(.is-revealed) .card,
  .js-reveal #pr-savoirfaire:not(.is-revealed) .section-head{opacity:0;}
  #pr-savoirfaire.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #pr-savoirfaire.is-revealed .card{transform-origin:50% 100%;animation:rv-bascule .7s cubic-bezier(.2,.8,.3,1) both;}
  #pr-savoirfaire.is-revealed .card:nth-child(1){animation-delay:calc(var(--rv-d) + .10s);}
  #pr-savoirfaire.is-revealed .card:nth-child(2){animation-delay:calc(var(--rv-d) + .17s);}
  #pr-savoirfaire.is-revealed .card:nth-child(3){animation-delay:calc(var(--rv-d) + .24s);}
  #pr-savoirfaire.is-revealed .card:nth-child(4){animation-delay:calc(var(--rv-d) + .31s);}

  /* 3. Nos livrables : allumage par diagonales sur la grille de 4 colonnes */
  .js-reveal #livrables:not(.is-revealed) .card,
  .js-reveal #livrables:not(.is-revealed) .section-head{opacity:0;}
  #livrables.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #livrables.is-revealed .card{animation:rv-diagonale .6s cubic-bezier(.2,.7,.3,1) both;}
  #livrables.is-revealed .card:nth-child(1){animation-delay:calc(var(--rv-d) + .14s);}
  #livrables.is-revealed .card:nth-child(2),
  #livrables.is-revealed .card:nth-child(5){animation-delay:calc(var(--rv-d) + .20s);}
  #livrables.is-revealed .card:nth-child(3),
  #livrables.is-revealed .card:nth-child(6){animation-delay:calc(var(--rv-d) + .26s);}
  #livrables.is-revealed .card:nth-child(4),
  #livrables.is-revealed .card:nth-child(7){animation-delay:calc(var(--rv-d) + .32s);}
  #livrables.is-revealed .card:nth-child(8){animation-delay:calc(var(--rv-d) + .38s);}

  /* 4. Technologies : les deux fiches convergent, puis les pastilles s'allument */
  .js-reveal #pr-technologies:not(.is-revealed) .gear-card,
  .js-reveal #pr-technologies:not(.is-revealed) .gear-sub,
  .js-reveal #pr-technologies:not(.is-revealed) .chip,
  .js-reveal #pr-technologies:not(.is-revealed) .section-head{opacity:0;}
  #pr-technologies.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #pr-technologies.is-revealed .gear-card:nth-child(1){animation:rv-de-gauche .75s cubic-bezier(.2,.8,.3,1) calc(var(--rv-d) + .1s) both;}
  #pr-technologies.is-revealed .gear-card:nth-child(2){animation:rv-de-droite .75s cubic-bezier(.2,.8,.3,1) calc(var(--rv-d) + .1s) both;}
  #pr-technologies.is-revealed .gear-sub{animation:rv-monte .5s ease calc(var(--rv-d) + .42s) both;}
  #pr-technologies.is-revealed .chip{animation:rv-pastille .4s cubic-bezier(.34,1.4,.64,1) both;}
  #pr-technologies.is-revealed .chip:nth-child(1){animation-delay:calc(var(--rv-d) + 0.480s);}
  #pr-technologies.is-revealed .chip:nth-child(2){animation-delay:calc(var(--rv-d) + 0.508s);}
  #pr-technologies.is-revealed .chip:nth-child(3){animation-delay:calc(var(--rv-d) + 0.536s);}
  #pr-technologies.is-revealed .chip:nth-child(4){animation-delay:calc(var(--rv-d) + 0.564s);}
  #pr-technologies.is-revealed .chip:nth-child(5){animation-delay:calc(var(--rv-d) + 0.592s);}
  #pr-technologies.is-revealed .chip:nth-child(6){animation-delay:calc(var(--rv-d) + 0.620s);}
  #pr-technologies.is-revealed .chip:nth-child(7){animation-delay:calc(var(--rv-d) + 0.648s);}
  #pr-technologies.is-revealed .chip:nth-child(8){animation-delay:calc(var(--rv-d) + 0.676s);}
  #pr-technologies.is-revealed .chip:nth-child(9){animation-delay:calc(var(--rv-d) + 0.704s);}
  #pr-technologies.is-revealed .chip:nth-child(10){animation-delay:calc(var(--rv-d) + 0.732s);}
  #pr-technologies.is-revealed .chip:nth-child(11){animation-delay:calc(var(--rv-d) + 0.760s);}
  #pr-technologies.is-revealed .chip:nth-child(12){animation-delay:calc(var(--rv-d) + 0.788s);}

  /* 5. Notre methode : chaque etape se deroule depuis son bord haut */
  .js-reveal #pr-methode:not(.is-revealed) .step,
  .js-reveal #pr-methode:not(.is-revealed) .section-head{opacity:0;}
  #pr-methode.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #pr-methode.is-revealed .step{transform-origin:50% 0;animation:rv-store .6s cubic-bezier(.2,.75,.3,1) both;}
  #pr-methode.is-revealed .step:nth-child(1){animation-delay:calc(var(--rv-d) + .14s);}
  #pr-methode.is-revealed .step:nth-child(2){animation-delay:calc(var(--rv-d) + .21s);}
  #pr-methode.is-revealed .step:nth-child(3){animation-delay:calc(var(--rv-d) + .28s);}
  #pr-methode.is-revealed .step:nth-child(4){animation-delay:calc(var(--rv-d) + .35s);}
  #pr-methode.is-revealed .step:nth-child(5){animation-delay:calc(var(--rv-d) + .42s);}

  /* 6. Appel a l'action : une onde doree se propage une fois autour du bouton */
  .js-reveal #pr-cta:not(.is-revealed) .section-head,
  .js-reveal #pr-cta:not(.is-revealed) .btn{opacity:0;}
  #pr-cta.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #pr-cta.is-revealed .btn{animation:rv-monte .5s ease calc(var(--rv-d) + .18s) both, rv-onde 1.1s ease-out calc(var(--rv-d) + .7s) 1 both;}
}

@keyframes rv-monte{from{opacity:0;translate:0 22px;}to{opacity:1;translate:0 0;}}
@keyframes rv-volet{from{clip-path:inset(0 50% 0 50%);}to{clip-path:inset(0 0 0 0);}}
@keyframes rv-bascule{from{opacity:0;rotate:x -16deg;translate:0 26px;}to{opacity:1;rotate:x 0deg;translate:0 0;}}
@keyframes rv-diagonale{from{opacity:0;scale:.9;translate:0 14px;}to{opacity:1;scale:1;translate:0 0;}}
@keyframes rv-de-gauche{from{opacity:0;translate:-42px 0;}to{opacity:1;translate:0 0;}}
@keyframes rv-de-droite{from{opacity:0;translate:42px 0;}to{opacity:1;translate:0 0;}}
@keyframes rv-pastille{from{opacity:0;scale:.72;}to{opacity:1;scale:1;}}
@keyframes rv-store{from{opacity:0;scale:1 .05;}to{opacity:1;scale:1 1;}}
@keyframes rv-onde{from{box-shadow:0 0 0 0 rgba(200,159,65,.55);}to{box-shadow:0 0 0 18px rgba(200,159,65,0);}}

/* ============================================================
   REVELATIONS DE LA PAGE CARTOGRAPHIE
   Le contenu vient de la base : les objets sont marques par reveal.js
   (voir la constante AUTO), pas annotes dans le contenu.
   ============================================================ */
@media (prefers-reduced-motion: no-preference){

  /* Titres et titres de volet : montee simple */
  .js-reveal .entry-content h2[data-reveal]:not(.is-revealed),
  .js-reveal .entry-content .verbe-h[data-reveal]:not(.is-revealed){opacity:0;}
  .entry-content h2.is-revealed,
  .entry-content .verbe-h.is-revealed{animation:rv-monte .55s ease var(--rv-d) both;}

  /* Triptyque d'ouverture : balayage de gauche a droite, dans l'ordre
     de lecture des trois rendus (ortho, vecteur, relief) */
  .js-reveal .entry-content .fig-band:not(.is-revealed) img{clip-path:inset(0 100% 0 0);}
  .entry-content .fig-band.is-revealed img{animation:rv-balayage 1.15s cubic-bezier(.5,0,.15,1) var(--rv-d) both;}
  .js-reveal .entry-content .fig-band:not(.is-revealed) .figc{opacity:0;}
  .entry-content .fig-band.is-revealed .figc{animation:rv-monte .5s ease calc(var(--rv-d) + .9s) both;}

  /* Figures courantes : le cliche se pose, leger dezoom */
  .js-reveal .entry-content .fig[data-reveal]:not(.is-revealed):not(.fig-band){opacity:0;}
  .entry-content .fig[data-reveal].is-revealed:not(.fig-band){animation:rv-pose .7s cubic-bezier(.2,.75,.3,1) var(--rv-d) both;}

  /* Sommaire des volets : les filets dores se tracent, puis le texte monte */
  .js-reveal .entry-content .verbes:not(.is-revealed) .verbe{border-top-color:transparent;}
  .js-reveal .entry-content .verbes:not(.is-revealed) .verbe>*{opacity:0;}
  .entry-content .verbes.is-revealed .verbe{animation:rv-filet .5s ease both;}
  .entry-content .verbes.is-revealed .verbe>*{animation:rv-monte .45s ease both;}
  .entry-content .verbes.is-revealed .verbe:nth-child(1),
  .entry-content .verbes.is-revealed .verbe:nth-child(1)>*{animation-delay:calc(var(--rv-d) + 0s);}
  .entry-content .verbes.is-revealed .verbe:nth-child(2),
  .entry-content .verbes.is-revealed .verbe:nth-child(2)>*{animation-delay:calc(var(--rv-d) + .09s);}
  .entry-content .verbes.is-revealed .verbe:nth-child(3),
  .entry-content .verbes.is-revealed .verbe:nth-child(3)>*{animation-delay:calc(var(--rv-d) + .18s);}
  .entry-content .verbes.is-revealed .verbe:nth-child(4),
  .entry-content .verbes.is-revealed .verbe:nth-child(4)>*{animation-delay:calc(var(--rv-d) + .27s);}
  .entry-content .verbes.is-revealed .verbe>*:nth-child(2){animation-duration:.5s;}
  .entry-content .verbes.is-revealed .verbe>*:nth-child(3){animation-duration:.55s;}

  /* Les huit questions s'allument une a une */
  .js-reveal .entry-content .questions:not(.is-revealed) .q{opacity:0;}
  .entry-content .questions.is-revealed .q{animation:rv-question .5s cubic-bezier(.2,.7,.3,1) both;}
  .entry-content .questions.is-revealed .q:nth-child(1){animation-delay:calc(var(--rv-d) + 0.00s);}
  .entry-content .questions.is-revealed .q:nth-child(2){animation-delay:calc(var(--rv-d) + 0.06s);}
  .entry-content .questions.is-revealed .q:nth-child(3){animation-delay:calc(var(--rv-d) + 0.12s);}
  .entry-content .questions.is-revealed .q:nth-child(4){animation-delay:calc(var(--rv-d) + 0.18s);}
  .entry-content .questions.is-revealed .q:nth-child(5){animation-delay:calc(var(--rv-d) + 0.24s);}
  .entry-content .questions.is-revealed .q:nth-child(6){animation-delay:calc(var(--rv-d) + 0.30s);}
  .entry-content .questions.is-revealed .q:nth-child(7){animation-delay:calc(var(--rv-d) + 0.36s);}
  .entry-content .questions.is-revealed .q:nth-child(8){animation-delay:calc(var(--rv-d) + 0.42s);}

  /* Encarts : le filet dore se trace du haut vers le bas, puis le contenu parait */
  .js-reveal .entry-content .encart:not(.is-revealed){border-left-color:transparent;}
  .js-reveal .entry-content .encart:not(.is-revealed)>*{opacity:0;}
  .entry-content .encart.is-revealed{animation:rv-filet-vertical .55s ease var(--rv-d) both;}
  .entry-content .encart.is-revealed>*{animation:rv-monte .5s ease calc(var(--rv-d) + .28s) both;}

  /* Focus LiDAR : le sol emerge sous la canopee, balayage vertical du MNT */
  .js-reveal .entry-content .encart:not(.is-revealed) .duo .fig:last-child img{clip-path:inset(100% 0 0 0);}
  .entry-content .encart.is-revealed .duo .fig:last-child img{animation:rv-sol .9s cubic-bezier(.4,0,.2,1) calc(var(--rv-d) + .55s) both;}
}

@keyframes rv-balayage{from{clip-path:inset(0 100% 0 0);}to{clip-path:inset(0 0 0 0);}}
@keyframes rv-pose{from{opacity:0;scale:1.045;translate:0 16px;}to{opacity:1;scale:1;translate:0 0;}}
@keyframes rv-filet{from{border-top-color:transparent;}to{border-top-color:var(--filet,var(--gold));}}
@keyframes rv-filet-vertical{from{border-left-color:transparent;}to{border-left-color:var(--gold);}}
@keyframes rv-question{from{opacity:0;translate:0 12px;}to{opacity:1;translate:0 0;}}
@keyframes rv-sol{from{clip-path:inset(100% 0 0 0);}to{clip-path:inset(0 0 0 0);}}

/* ============================================================
   REVELATIONS DE LA PAGE L'ENTREPRISE
   ============================================================ */
@media (prefers-reduced-motion: no-preference){

  /* 1. Presentation : le portrait est pose de travers puis se redresse */
  .js-reveal #entreprise:not(.is-revealed) .intro-portrait>*{opacity:0;}
  #entreprise.is-revealed .intro-portrait>img{transform-origin:50% 100%;animation:rv-redresse .8s cubic-bezier(.2,.8,.3,1) var(--rv-d) both;}
  #entreprise.is-revealed .intro-portrait>div>*{animation:rv-monte .5s ease both;}
  #entreprise.is-revealed .intro-portrait>div{opacity:1;}
  #entreprise.is-revealed .intro-portrait>div>*:nth-child(1){animation-delay:calc(var(--rv-d) + .18s);}
  #entreprise.is-revealed .intro-portrait>div>*:nth-child(2){animation-delay:calc(var(--rv-d) + .25s);}
  #entreprise.is-revealed .intro-portrait>div>*:nth-child(3){animation-delay:calc(var(--rv-d) + .32s);}
  #entreprise.is-revealed .intro-portrait>div>*:nth-child(4){animation-delay:calc(var(--rv-d) + .39s);}
  #entreprise.is-revealed .intro-portrait>div>*:nth-child(5){animation-delay:calc(var(--rv-d) + .46s);}

  /* 2. Nos domaines : l'image se cadre depuis un zoom, a l'interieur de sa fiche */
  .js-reveal #ent-domaines:not(.is-revealed) .gear-card,
  .js-reveal #ent-domaines:not(.is-revealed) .section-head{opacity:0;}
  #ent-domaines.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #ent-domaines.is-revealed .gear-card{animation:rv-fondu .5s ease both;}
  #ent-domaines.is-revealed .gear-img{animation:rv-cadrage 1s cubic-bezier(.25,.8,.3,1) both;}
  #ent-domaines.is-revealed .gear-card:nth-child(1),
  #ent-domaines.is-revealed .gear-card:nth-child(1) .gear-img{animation-delay:calc(var(--rv-d) + .12s);}
  #ent-domaines.is-revealed .gear-card:nth-child(2),
  #ent-domaines.is-revealed .gear-card:nth-child(2) .gear-img{animation-delay:calc(var(--rv-d) + .22s);}
  #ent-domaines.is-revealed .gear-card:nth-child(3),
  #ent-domaines.is-revealed .gear-card:nth-child(3) .gear-img{animation-delay:calc(var(--rv-d) + .32s);}

  /* 3. Le fondateur : la photo pivote comme un panneau, le texte vient de la gauche */
  #ent-fondateur{perspective:1400px;}
  .js-reveal #ent-fondateur:not(.is-revealed) .media,
  .js-reveal #ent-fondateur:not(.is-revealed) .txt>*{opacity:0;}
  #ent-fondateur.is-revealed .media{transform-origin:100% 50%;animation:rv-panneau .9s cubic-bezier(.2,.8,.25,1) var(--rv-d) both;}
  #ent-fondateur.is-revealed .txt>*{animation:rv-de-la-gauche .55s cubic-bezier(.2,.7,.3,1) both;}
  #ent-fondateur.is-revealed .txt>*:nth-child(1){animation-delay:calc(var(--rv-d) + .16s);}
  #ent-fondateur.is-revealed .txt>*:nth-child(2){animation-delay:calc(var(--rv-d) + .24s);}
  #ent-fondateur.is-revealed .txt>*:nth-child(3){animation-delay:calc(var(--rv-d) + .32s);}
  #ent-fondateur.is-revealed .txt>*:nth-child(4){animation-delay:calc(var(--rv-d) + .40s);}
  #ent-fondateur.is-revealed .txt>*:nth-child(5){animation-delay:calc(var(--rv-d) + .48s);}
  #ent-fondateur.is-revealed .txt>*:nth-child(6){animation-delay:calc(var(--rv-d) + .56s);}

  /* 4. Collaborations : les roles s'egrenent, puis la donnee precede le dessin */
  .js-reveal #collaborations:not(.is-revealed) .section-head,
  .js-reveal #collaborations:not(.is-revealed) .collab>*,
  .js-reveal #collaborations:not(.is-revealed) .role li,
  .js-reveal #collaborations:not(.is-revealed) .acar-f{opacity:0;}
  #collaborations.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #collaborations.is-revealed .collab>*{animation:rv-monte .5s ease calc(var(--rv-d) + .14s) both;}
  #collaborations.is-revealed .role li{animation:rv-egrene .45s ease both;}
  #collaborations.is-revealed .role li:nth-child(1){animation-delay:calc(var(--rv-d) + .30s);}
  #collaborations.is-revealed .role li:nth-child(2){animation-delay:calc(var(--rv-d) + .37s);}
  #collaborations.is-revealed .role li:nth-child(3){animation-delay:calc(var(--rv-d) + .44s);}
  #collaborations.is-revealed .role li:nth-child(4){animation-delay:calc(var(--rv-d) + .51s);}
  #collaborations.is-revealed .acar-v{animation:rv-pose .6s cubic-bezier(.2,.75,.3,1) calc(var(--rv-d) + .45s) both;}
  #collaborations.is-revealed .acar-c{animation:rv-pose .6s cubic-bezier(.2,.75,.3,1) calc(var(--rv-d) + .72s) both;}

  /* 5. Appel a l'action : un eclat balaie le bouton dore */
  .js-reveal #ent-cta:not(.is-revealed) .section-head,
  .js-reveal #ent-cta:not(.is-revealed) .btn{opacity:0;}
  #ent-cta.is-revealed .section-head{animation:rv-monte .55s ease var(--rv-d) both;}
  #ent-cta.is-revealed .btn-gold{
    background-image:linear-gradient(105deg,rgba(255,255,255,0) 38%,rgba(255,255,255,.5) 50%,rgba(255,255,255,0) 62%);
    background-size:250% 100%;background-repeat:no-repeat;
    animation:rv-monte .5s ease calc(var(--rv-d) + .2s) both,
              rv-eclat 1.2s ease-out calc(var(--rv-d) + .8s) 1 both;
  }
}

@keyframes rv-fondu{from{opacity:0;}to{opacity:1;}}
@keyframes rv-redresse{from{opacity:0;rotate:-2.4deg;translate:0 20px;}to{opacity:1;rotate:0deg;translate:0 0;}}
@keyframes rv-cadrage{from{scale:1.16;}to{scale:1;}}
@keyframes rv-panneau{from{opacity:0;rotate:y -16deg;}to{opacity:1;rotate:y 0deg;}}
@keyframes rv-de-la-gauche{from{opacity:0;translate:-26px 0;}to{opacity:1;translate:0 0;}}
@keyframes rv-egrene{from{opacity:0;translate:-12px 0;}to{opacity:1;translate:0 0;}}
@keyframes rv-eclat{from{background-position:-140% 0;}to{background-position:250% 0;}}

/* ============================================================
   REVELATIONS DES REFERENCES (index et fiche)
   ============================================================ */
@media (prefers-reduced-motion: no-preference){

  /* Index : la grille se remplit colonne par colonne, et chaque vignette
     se tire du haut vers le bas, comme une epreuve qui sort du bain. */
  .js-reveal #references:not(.is-revealed) .page-head>*,
  .js-reveal #references:not(.is-revealed) .refs-intro,
  .js-reveal #references:not(.is-revealed) .ref-card,
  .js-reveal #references:not(.is-revealed) .pagination{opacity:0;}
  .js-reveal #references:not(.is-revealed) .ref-img img{clip-path:inset(0 0 100% 0);}

  #references.is-revealed .page-head>*{animation:rv-monte .5s ease var(--rv-d) both;}
  #references.is-revealed .page-head>*:nth-child(2){animation-delay:calc(var(--rv-d) + .07s);}
  #references.is-revealed .refs-intro{animation:rv-monte .5s ease calc(var(--rv-d) + .14s) both;}
  #references.is-revealed .pagination{animation:rv-monte .45s ease calc(var(--rv-d) + .44s) both;}

  #references.is-revealed .ref-card{animation:rv-monte .36s ease both;}
  #references.is-revealed .ref-img img{animation:rv-tirage .5s cubic-bezier(.5,0,.2,1) both;}

  #references.is-revealed .ref-card:nth-child(3n+1){animation-delay:calc(var(--rv-d) + .10s);}
  #references.is-revealed .ref-card:nth-child(3n+1) .ref-img img{animation-delay:calc(var(--rv-d) + .17s);}
  #references.is-revealed .ref-card:nth-child(3n+2){animation-delay:calc(var(--rv-d) + .18s);}
  #references.is-revealed .ref-card:nth-child(3n+2) .ref-img img{animation-delay:calc(var(--rv-d) + .25s);}
  #references.is-revealed .ref-card:nth-child(3n){animation-delay:calc(var(--rv-d) + .26s);}
  #references.is-revealed .ref-card:nth-child(3n) .ref-img img{animation-delay:calc(var(--rv-d) + .33s);}

  /* Fiche : la grande image se tire de la meme facon, puis les rubriques s'egrenent */
  .js-reveal #reference:not(.is-revealed) .page-head>*,
  .js-reveal #reference:not(.is-revealed) .ref-fiche>*,
  .js-reveal #reference:not(.is-revealed) .ref-nav{opacity:0;}
  .js-reveal #reference:not(.is-revealed) .ref-hero img{clip-path:inset(0 0 100% 0);}
  #reference.is-revealed .page-head>*{animation:rv-monte .5s ease var(--rv-d) both;}
  #reference.is-revealed .page-head>*:nth-child(2){animation-delay:calc(var(--rv-d) + .07s);}
  #reference.is-revealed .ref-hero img{animation:rv-tirage .6s cubic-bezier(.5,0,.2,1) calc(var(--rv-d) + .12s) both;}
  #reference.is-revealed .ref-fiche>*{animation:rv-monte .42s ease both;}
  #reference.is-revealed .ref-fiche>*:nth-child(1){animation-delay:calc(var(--rv-d) + .34s);}
  #reference.is-revealed .ref-fiche>*:nth-child(2){animation-delay:calc(var(--rv-d) + .40s);}
  #reference.is-revealed .ref-fiche>*:nth-child(3){animation-delay:calc(var(--rv-d) + .46s);}
  #reference.is-revealed .ref-fiche>*:nth-child(4){animation-delay:calc(var(--rv-d) + .52s);}
  #reference.is-revealed .ref-fiche>*:nth-child(5){animation-delay:calc(var(--rv-d) + .58s);}
  #reference.is-revealed .ref-nav{animation:rv-monte .45s ease calc(var(--rv-d) + .64s) both;}
}

@keyframes rv-tirage{from{clip-path:inset(0 0 100% 0);}to{clip-path:inset(0 0 0 0);}}

/* ============================================================
   DECLENCHEUR ET FENETRE MODALE VIDEO
   ============================================================ */
.videoc{display:block;width:100%;padding:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--teal-900);cursor:pointer;position:relative;text-align:left;transition:border-color .28s ease,box-shadow .28s ease,transform .28s ease;}
.videoc:hover{border-color:var(--terracotta);box-shadow:0 20px 44px -24px rgba(12,42,48,.55);transform:translateY(-3px);}
.videoc img{display:block;width:100%;height:auto;opacity:.86;transition:opacity .28s ease,scale .5s ease;}
.videoc:hover img{opacity:1;scale:1.03;}
.videoc-lect{position:absolute;top:50%;left:50%;translate:-50% -50%;width:74px;height:74px;border-radius:50%;background:rgba(11,38,44,.62);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border:2px solid rgba(255,255,255,.75);display:flex;align-items:center;justify-content:center;transition:background .28s ease,scale .28s ease;}
.videoc:hover .videoc-lect{background:var(--terracotta);scale:1.08;}
.videoc-lect::after{content:"";width:0;height:0;margin-left:5px;border-left:20px solid #fff;border-top:13px solid transparent;border-bottom:13px solid transparent;}
.videoc-lib{position:absolute;left:0;right:0;bottom:0;padding:26px 20px 14px;background:linear-gradient(180deg,rgba(11,38,44,0),rgba(11,38,44,.85));color:#fff;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;}

.modale-ouverte{overflow:hidden;}
.vmodale{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:clamp(14px,3vw,40px);}
.vmodale-fond{position:absolute;inset:0;background:rgba(6,22,26,.88);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:vm-fondu .28s ease both;}
.vmodale-boite{position:relative;width:100%;max-width:1180px;animation:vm-entree .34s cubic-bezier(.2,.8,.3,1) both;}
.vmodale-titre{margin:0 0 10px;padding-right:52px;font-family:var(--font-mono);font-size:.74rem;letter-spacing:.12em;text-transform:uppercase;color:var(--sage);}
.vmodale video{display:block;width:100%;max-height:78vh;background:#000;border-radius:6px;box-shadow:0 30px 70px -30px rgba(0,0,0,.9);}
.vmodale-fermer{position:absolute;top:-6px;right:0;width:42px;height:42px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.32);border-radius:50%;background:rgba(11,38,44,.6);color:#fff;font-size:1.5rem;line-height:1;cursor:pointer;transition:.2s;}
.vmodale-fermer:hover{background:var(--terracotta);border-color:var(--terracotta);}
.vmodale-fermer:focus-visible{outline:2px solid var(--gold);outline-offset:3px;}

@keyframes vm-fondu{from{opacity:0;}to{opacity:1;}}
@keyframes vm-entree{from{opacity:0;scale:.96;translate:0 14px;}to{opacity:1;scale:1;translate:0 0;}}
@media (prefers-reduced-motion: reduce){
  .vmodale-fond,.vmodale-boite{animation:none;}
}

/* ============================================================
   REVELATIONS DE LA PAGE DEVELOPPEMENT LOGICIEL
   Signature propre a cette page : le chargement par tuiles.
   Les blocs se posent par paliers, les pictogrammes se tracent,
   le nuage de points se remplit point par point. Les regles
   generiques (h2, .fig, .verbes) sont surchargees ici, la page
   partageant .entry-content avec Cartographie.
   ============================================================ */
@media (prefers-reduced-motion: no-preference){

  /* 1. Titres : balayage de la gauche vers la droite */
  .js-reveal .entry-content[data-page="developpement-logiciel"] h2[data-reveal]:not(.is-revealed){opacity:1;clip-path:inset(0 100% 0 0);}
  .entry-content[data-page="developpement-logiciel"] h2.is-revealed{animation:rv-balayage-g .75s cubic-bezier(.2,.8,.3,1) var(--rv-d) both;}

  /* 2. Les quatre univers : chaque colonne se decouvre par la gauche */
  .js-reveal .entry-content[data-page="developpement-logiciel"] .verbes:not(.is-revealed) .verbe{border-top-color:transparent;clip-path:inset(0 100% 0 0);}
  .js-reveal .entry-content[data-page="developpement-logiciel"] .verbes:not(.is-revealed) .verbe>*{opacity:1;}
  .entry-content[data-page="developpement-logiciel"] .verbes.is-revealed .verbe{animation:rv-balayage-g .6s cubic-bezier(.2,.8,.3,1) both,rv-filet-uni .6s ease both;}
  .entry-content[data-page="developpement-logiciel"] .verbes.is-revealed .verbe>*{animation:none;}
  .entry-content[data-page="developpement-logiciel"] .verbes.is-revealed .verbe:nth-child(1){animation-delay:calc(var(--rv-d) + 0s);}
  .entry-content[data-page="developpement-logiciel"] .verbes.is-revealed .verbe:nth-child(2){animation-delay:calc(var(--rv-d) + .1s);}
  .entry-content[data-page="developpement-logiciel"] .verbes.is-revealed .verbe:nth-child(3){animation-delay:calc(var(--rv-d) + .2s);}
  .entry-content[data-page="developpement-logiciel"] .verbes.is-revealed .verbe:nth-child(4){animation-delay:calc(var(--rv-d) + .3s);}

  /* 3. Phrases d'attaque et notes : simple montee */
  .js-reveal .entry-content[data-page="developpement-logiciel"] .tete:not(.is-revealed),
  .js-reveal .entry-content[data-page="developpement-logiciel"] .avant-bloc:not(.is-revealed),
  .js-reveal .entry-content[data-page="developpement-logiciel"] .evo-fin:not(.is-revealed){opacity:0;}
  .entry-content[data-page="developpement-logiciel"] .tete.is-revealed,
  .entry-content[data-page="developpement-logiciel"] .avant-bloc.is-revealed,
  .entry-content[data-page="developpement-logiciel"] .evo-fin.is-revealed{animation:rv-monte .55s ease var(--rv-d) both;}

  /* 4. Les trois familles : les cellules se posent, puis les pictogrammes se dessinent */
  .js-reveal .entry-content .modeles:not(.is-revealed) .mdl{opacity:0;}
  .entry-content .modeles.is-revealed .mdl{animation:rv-tuile .6s cubic-bezier(.2,.8,.3,1) both;}
  .entry-content .modeles.is-revealed .mdl:nth-child(1){animation-delay:calc(var(--rv-d) + .05s);}
  .entry-content .modeles.is-revealed .mdl:nth-child(2){animation-delay:calc(var(--rv-d) + .17s);}
  .entry-content .modeles.is-revealed .mdl:nth-child(3){animation-delay:calc(var(--rv-d) + .29s);}
  .js-reveal .entry-content .modeles:not(.is-revealed) .mdl svg path{stroke-dasharray:90;stroke-dashoffset:90;}
  .entry-content .modeles.is-revealed .mdl svg path{stroke-dasharray:90;animation:rv-trace 1s ease both;}
  .entry-content .modeles.is-revealed .mdl:nth-child(1) svg path{animation-delay:calc(var(--rv-d) + .25s);}
  .entry-content .modeles.is-revealed .mdl:nth-child(3) svg path{animation-delay:calc(var(--rv-d) + .49s);}
  .js-reveal .entry-content .modeles:not(.is-revealed) .mdl svg circle{opacity:0;}
  .entry-content .modeles.is-revealed .mdl svg circle{transform-box:fill-box;transform-origin:center;animation:rv-point .32s cubic-bezier(.34,1.5,.64,1) both;}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(1){animation-delay:calc(var(--rv-d) + .37s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(2){animation-delay:calc(var(--rv-d) + .42s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(3){animation-delay:calc(var(--rv-d) + .47s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(4){animation-delay:calc(var(--rv-d) + .52s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(5){animation-delay:calc(var(--rv-d) + .57s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(6){animation-delay:calc(var(--rv-d) + .62s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(7){animation-delay:calc(var(--rv-d) + .67s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(8){animation-delay:calc(var(--rv-d) + .72s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(9){animation-delay:calc(var(--rv-d) + .77s);}
  .entry-content .modeles.is-revealed .mdl svg circle:nth-child(10){animation-delay:calc(var(--rv-d) + .82s);}

  /* 5. Le convertisseur : la zone de depot apparait, le flux part vers la droite */
  .js-reveal .entry-content .conv:not(.is-revealed){opacity:0;}
  .js-reveal .entry-content .conv:not(.is-revealed) .drop{border-color:transparent;}
  .js-reveal .entry-content .conv:not(.is-revealed) .flux>*{opacity:0;}
  .entry-content .conv.is-revealed{animation:rv-tuile .65s cubic-bezier(.2,.8,.3,1) var(--rv-d) both;}
  .entry-content .conv.is-revealed .drop{animation:rv-cadre .6s ease calc(var(--rv-d) + .3s) both;}
  .entry-content .conv.is-revealed .flux>*{animation:rv-flux .45s cubic-bezier(.2,.8,.3,1) both;}
  .entry-content .conv.is-revealed .flux>*:nth-child(1){animation-delay:calc(var(--rv-d) + .45s);}
  .entry-content .conv.is-revealed .flux>*:nth-child(2){animation-delay:calc(var(--rv-d) + .58s);}
  .entry-content .conv.is-revealed .flux>*:nth-child(3){animation-delay:calc(var(--rv-d) + .71s);}

  /* 6. Les deux publics et la feuille de route : le filet se colore, le contenu monte */
  .js-reveal .entry-content .niveaux:not(.is-revealed) .niv{border-top-color:transparent;}
  .js-reveal .entry-content .niveaux:not(.is-revealed) .niv>*{opacity:0;}
  .entry-content .niveaux.is-revealed .niv{animation:rv-filet-uni .55s ease both;}
  .entry-content .niveaux.is-revealed .niv>*{animation:rv-monte .5s ease both;}
  .entry-content .niveaux.is-revealed .niv:nth-child(1),
  .entry-content .niveaux.is-revealed .niv:nth-child(1)>*{animation-delay:calc(var(--rv-d) + .08s);}
  .entry-content .niveaux.is-revealed .niv:nth-child(2),
  .entry-content .niveaux.is-revealed .niv:nth-child(2)>*{animation-delay:calc(var(--rv-d) + .2s);}
  .entry-content .niveaux.is-revealed .niv:nth-child(3),
  .entry-content .niveaux.is-revealed .niv:nth-child(3)>*{animation-delay:calc(var(--rv-d) + .32s);}
  .entry-content .niveaux.is-revealed .niv:nth-child(4),
  .entry-content .niveaux.is-revealed .niv:nth-child(4)>*{animation-delay:calc(var(--rv-d) + .44s);}
  .entry-content .niveaux.is-revealed .niv>*:nth-child(2){animation-duration:.55s;}

  /* 7. Appel a l'essai : le titre monte, le filet d'or s'ouvre depuis le centre */
  .js-reveal .entry-content .essai:not(.is-revealed) h3{opacity:0;}
  .js-reveal .entry-content .essai:not(.is-revealed) h3::after{scale:0 1;}
  .entry-content .essai.is-revealed h3{animation:rv-monte .55s ease var(--rv-d) both;}
  .entry-content .essai.is-revealed h3::after{animation:rv-trait .55s cubic-bezier(.2,.8,.3,1) calc(var(--rv-d) + .3s) both;}

  /* 8. Les videos et l'iframe : la tuile se pose */
  .js-reveal .entry-content[data-page="developpement-logiciel"] .fig:not(.is-revealed),
  .js-reveal .entry-content .tegula-embed:not(.is-revealed){opacity:0;}
  .entry-content[data-page="developpement-logiciel"] .fig.is-revealed,
  .entry-content .tegula-embed.is-revealed{animation:rv-tuile .7s cubic-bezier(.2,.8,.3,1) var(--rv-d) both;}
}

@keyframes rv-balayage-g{from{clip-path:inset(0 100% 0 0);}to{clip-path:inset(0 0 0 0);}}
@keyframes rv-filet-uni{from{border-top-color:transparent;}to{border-top-color:var(--filet);}}
@keyframes rv-tuile{from{opacity:0;scale:.96;translate:0 16px;}to{opacity:1;scale:1;translate:0 0;}}
@keyframes rv-trace{from{stroke-dashoffset:90;}to{stroke-dashoffset:0;}}
@keyframes rv-point{from{opacity:0;scale:0;}to{opacity:1;scale:1;}}
@keyframes rv-flux{from{opacity:0;translate:-16px 0;}to{opacity:1;translate:0 0;}}
@keyframes rv-cadre{from{border-color:transparent;}to{border-color:rgba(129,177,174,.55);}}
@keyframes rv-trait{from{scale:0 1;}to{scale:1 1;}}

/* ---- Carrousels .pcar en mobile : balayage natif et invite visible ----
   Le rail devient un conteneur defilant a accroche : le balayage au doigt
   est natif, avec inertie. Trois signaux disent au visiteur qu'il peut le
   faire : la diapositive suivante depasse sur le bord droit, les pastilles
   et l'invite passent au-dessus des textes, et le rail s'avance une fois
   de quelques pixels a l'apparition (voir js/carousel.js). */
.pcar-invite{display:none;}

@media(max-width:900px){
  .split .txt.pcar-col{padding:26px clamp(20px,4vw,32px);}
  .pcar-viewport{min-height:0;height:auto;overflow:visible;}
  .pcar-track{overflow-x:auto;overflow-y:hidden;height:auto;align-items:flex-start;
    scroll-snap-type:x mandatory;overscroll-behavior-x:contain;
    -webkit-overflow-scrolling:touch;transition:none;transform:none;
    scrollbar-width:none;padding-bottom:2px;
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 30px),transparent);
    mask-image:linear-gradient(to right,#000 calc(100% - 30px),transparent);}
  .pcar-track::-webkit-scrollbar{display:none;}
  /* La diapositive occupe toute la colonne moins un lisere : on devine la
     suivante sans en lire des bouts de phrases, et le fondu du bord droit
     (masque sur le rail) transforme la coupure en degrade voulu. */
  .pcar-slide{flex:0 0 calc(100% - 26px);height:auto;overflow:visible;
    scroll-snap-align:start;padding-right:0;margin-right:14px;}
  /* Sans marge de fin, le rail ne peut pas defiler assez loin pour caler la
     derniere diapositive a gauche : la precedente reste visible sur le bord.
     26 px = exactement le lisere retire a la largeur des diapositives. */
  .pcar-slide:last-child{margin-right:26px;}
  .split .txt.pcar-col .pcar-slide h2{font-size:1.25rem;margin-bottom:12px;}

  /* Pastilles et invite au-dessus des textes : atteignables sans avoir a
     parcourir toute une partie. Les fleches disparaissent, le doigt suffit. */
  .pcar-nav{order:-1;padding:0 0 14px;justify-content:space-between;gap:12px;}
  .pcar-arrow{display:none;}
  .pcar-invite{display:flex;align-items:center;gap:8px;
    font-family:var(--font-mono);font-size:.63rem;font-weight:600;
    letter-spacing:.14em;text-transform:uppercase;color:var(--terracotta-deep);
    transition:opacity .4s ease;}
  .pcar-invite::after{content:"\203A\203A\203A";letter-spacing:.06em;font-size:.9rem;line-height:1;}
  .pcar-invite.is-partie{opacity:0;pointer-events:none;}
}
@media(max-width:900px) and (prefers-reduced-motion:no-preference){
  .pcar-invite::after{animation:pcar-glisse 1.9s ease-in-out infinite;}
}
@keyframes pcar-glisse{0%,100%{opacity:.4;translate:0 0;}50%{opacity:1;translate:5px 0;}}
