/* Pages projet — même langage que la home (site.css) : blanc lumineux, couleur du projet via .p-<id>{--c;--c-soft}. */
.page-projet{background:var(--bg)}
.retour{display:inline-flex;align-items:center;gap:8px;font-weight:600;font-size:14.5px;color:var(--ink-2);text-decoration:none;background:#fff;border:1px solid var(--line);padding:8px 14px;border-radius:99px}
.retour:hover{color:var(--c)}

/* Héros projet */
.p-hero{position:relative;overflow:hidden;isolation:isolate;padding:118px 0 56px;background:var(--c-soft)}
.p-hero::before,.p-hero::after{content:"";position:absolute;z-index:-1;border-radius:50%;filter:blur(60px);opacity:.7}
.p-hero::before{width:460px;height:460px;right:-120px;top:-120px;background:color-mix(in srgb,var(--c) 38%,#fff)}
.p-hero::after{width:320px;height:320px;left:-120px;bottom:-160px;background:#fff}
.p-hero-in{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(24px,4vw,56px);align-items:center}
.p-kicker{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:26px}
.p-kicker .glyph{width:44px;height:44px;border-radius:14px}
.p-kicker .status{font-size:12.5px}
.p-hero h1{font-size:clamp(50px,8vw,100px);font-weight:800;margin:18px 0 18px}
.p-hero h1 .ln{display:block;overflow:hidden;padding-bottom:.06em}
.p-hero h1 .ln>span{display:inline-block;transform:translateY(105%);animation:rise .9s cubic-bezier(.2,.9,.2,1) .05s forwards}
.accroche{font-size:clamp(17px,1.7vw,20px);color:var(--ink-2);max-width:40ch;opacity:0;animation:fade .8s ease .3s forwards}
.p-hero-media{position:relative;opacity:0;animation:up .9s cubic-bezier(.2,.9,.2,1) .35s forwards}
.p-hero-media .ecran,.p-hero-media .shot-view{transform:rotate(1.2deg);box-shadow:0 34px 60px -30px rgba(18,18,23,.55)}
.p-hero-media figcaption{margin-top:10px;font-size:12px;color:var(--ink-2);opacity:.75}
.meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:40px}
.meta div{background:rgba(255,255,255,.82);border-radius:18px;padding:14px 16px;min-width:0}
.meta dt{font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--c)}
.meta dd{margin-top:4px;font-weight:600;font-size:15px;line-height:1.35}
.chiffres{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-top:12px}
.chiffres div{background:var(--ink);color:#fff;border-radius:18px;padding:16px 18px}
.chiffres dt{font-family:var(--display);font-weight:800;font-size:clamp(30px,3.4vw,44px);line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--sun)}
.chiffres dd{margin-top:6px;font-size:13.5px;color:#d9d6e6}
@media(max-width:900px){.p-hero{padding-top:96px}.p-hero-in{grid-template-columns:1fr}.meta{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Sections */
.p-sec{padding:clamp(64px,8vw,104px) 0}
.p-sec.alt{background:var(--bg-2)}
.p-tete{display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:end;margin-bottom:36px}
.p-tete h2{font-size:clamp(30px,4vw,48px)}
.p-tete h2 em{color:var(--c)}
.p-tete .lead{max-width:none}
.p-sec .eyebrow{color:var(--c);background:var(--c-soft)}
@media(max-width:900px){.p-tete{grid-template-columns:1fr;gap:12px}}

/* Récit défilant : étapes à gauche, écran collant à droite */
.recit{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:clamp(24px,4vw,56px)}
.etapes{list-style:none;display:grid}
.etape{min-height:38vh;padding:22px 0 22px 26px;border-left:3px solid var(--line);opacity:.45;cursor:pointer;transition:opacity .35s,border-color .35s}
.etape.active{opacity:1;border-color:var(--c)}
.etape .n{font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.etape.active .n{color:var(--c)}
.etape h3{font-size:clamp(24px,2.4vw,30px);font-weight:800;margin:8px 0 8px}
.etape p{color:var(--ink-2);max-width:38ch}
.etape:focus-visible{outline-offset:-3px}
.recit-media{position:sticky;top:96px;align-self:start;background:var(--c-soft);border-radius:var(--r);padding:18px}
.vues{position:relative;aspect-ratio:16/10}
.vues>.vue{position:absolute;inset:0;opacity:0;transform:scale(.98);transition:opacity .45s,transform .6s cubic-bezier(.2,.85,.2,1);pointer-events:none}
.vues>.vue.active{opacity:1;transform:none;pointer-events:auto}
.vues .ecran,.vues .shot-view{height:100%;aspect-ratio:auto}
.recit-media figcaption{margin-top:10px;font-size:12px;color:var(--ink-2);opacity:.75}
@media(max-width:900px){.recit{grid-template-columns:1fr;gap:18px}.recit-media{top:62px;z-index:5;order:-1;padding:10px;box-shadow:0 18px 30px -24px rgba(18,18,23,.4)}.recit-media figcaption{display:none}.etape{min-height:46vh}}

/* Démarche en quatre temps */
.demarche{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.demarche li{background:#fff;border-radius:22px;padding:22px}
.demarche b{display:grid;place-items:center;width:40px;height:40px;border-radius:14px;background:var(--c);color:#fff;font-weight:800;transform:rotate(-6deg);margin-bottom:14px}
.demarche h3{font-size:20px;font-weight:800;margin-bottom:6px}
.demarche p{color:var(--ink-2);font-size:15px}
.demarche li:nth-child(2){transition-delay:.1s}.demarche li:nth-child(3){transition-delay:.2s}.demarche li:nth-child(4){transition-delay:.3s}
@media(max-width:980px){.demarche{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.demarche{grid-template-columns:1fr}}

/* Carte de démo */
.demo{background:#fff;border-radius:var(--r);padding:clamp(20px,3vw,34px);box-shadow:0 1px 0 rgba(18,18,23,.04),0 24px 50px -36px rgba(18,18,23,.35)}
.demo-grille{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:clamp(20px,3vw,40px);align-items:center}
.demo-grille>*{min-width:0}
.demo h3{font-size:clamp(24px,2.6vw,32px);font-weight:800}
.demo .lead{margin-top:10px;font-size:16px}
.demo-note{margin-top:14px;font-size:13px;color:var(--muted)}
.resultat{margin-top:14px;font-weight:600;min-height:1.5em}
.btn-c{background:var(--c);color:#fff;box-shadow:0 12px 24px -14px var(--c)}
.btn-c[disabled]{opacity:.55;cursor:default;transform:none}
.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}
.puce{display:inline-block;font-size:12.5px;font-weight:600;padding:4px 10px;border-radius:99px;background:var(--c-soft);color:var(--ink-2)}
@media(max-width:900px){.demo-grille{grid-template-columns:1fr}}

/* Ce que ça démontre */
.demontre{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.demontre div{background:#fff;border-radius:22px;padding:22px;border-top:6px solid var(--c)}
.demontre h3{font-size:21px;font-weight:800;margin-bottom:8px}
.demontre p{color:var(--ink-2);font-size:15.5px}
@media(max-width:900px){.demontre{grid-template-columns:1fr}}

/* Projet suivant */
.suivant{display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap;margin-top:40px;padding:26px 30px;border-radius:var(--r);background:var(--c-soft);text-decoration:none;transition:transform .25s}
.suivant:hover{transform:translateY(-3px)}
.suivant small{display:block;font-size:13px;font-weight:600;color:var(--ink-2)}
.suivant strong{display:block;font-family:var(--display);font-size:clamp(28px,3vw,38px);letter-spacing:-.03em;line-height:1.1}
.suivant .fl{width:54px;height:54px;border-radius:50%;display:grid;place-items:center;background:var(--c);color:#fff;font-size:22px;transition:transform .25s}
.suivant:hover .fl{transform:translateX(6px)}

/* Frise des lots (La Ruche) */
.frise{display:grid;grid-template-columns:repeat(11,minmax(0,1fr));gap:6px;margin-top:12px}
.lot{position:relative;overflow:hidden;height:44px;border-radius:12px;display:grid;place-items:center;font-weight:800;font-size:13px;background:#fff;color:var(--muted);border:2px solid var(--line)}
.lot span{position:relative}
.lot.fait{border-color:transparent;color:#fff}
.lot.fait::before{content:"";position:absolute;inset:0;background:var(--c);transform:scaleX(0);transform-origin:left;transition:transform .6s cubic-bezier(.2,.85,.2,1)}
.lot.fait::before{transition-delay:var(--delai,0ms)}
.frise.in .lot.fait::before{transform:none}
.lot.encours{border-style:dashed;border-color:var(--c);color:var(--c)}
.frise-leg{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-top:10px;font-size:14px;color:var(--ink-2)}
@media(max-width:620px){.frise{grid-template-columns:repeat(6,minmax(0,1fr))}}

/* Écosystème en orbite (La Ruche) */
.eco{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:32px;align-items:center}
.eco-toile svg{width:100%;height:auto;display:block;overflow:visible}
.orbite{fill:none;stroke:color-mix(in srgb,var(--c) 30%,transparent);stroke-dasharray:3 7}
.lien{stroke:var(--c);stroke-width:1.4;opacity:.2;transition:opacity .3s}
.lien.vif{opacity:.9;stroke-dasharray:5 5;animation:flux 1s linear infinite}
@keyframes flux{to{stroke-dashoffset:-20}}
.noeud{cursor:pointer}
.noeud circle{fill:#fff;stroke:var(--line);stroke-width:2;transition:stroke .2s,fill .2s}
.noeud text{fill:var(--ink);font:700 12px var(--sans);text-anchor:middle;pointer-events:none}
.noeud:hover circle,.noeud.vif circle,.noeud:focus circle{stroke:var(--c);fill:var(--c-soft)}
.noeud:focus{outline:none}
.coeur circle{fill:var(--c);stroke:none}.coeur .sous{font-size:11px;font-weight:500;opacity:.85}.coeur text{fill:#fff;font-size:15px}
.coeur:hover circle,.coeur.vif circle{fill:var(--c)}
.halo{fill:var(--c);opacity:.14;transform-box:fill-box;transform-origin:center;animation:respire 4s ease-in-out infinite}
@keyframes respire{50%{transform:scale(1.18);opacity:.05}}
.tournant{transform-origin:300px 300px;animation:tourne 110s linear infinite}
.tournant .noeud{transform-box:fill-box;transform-origin:center;animation:tourne 110s linear infinite reverse}
@keyframes tourne{to{transform:rotate(360deg)}}
.eco-toile:hover .tournant,.eco-toile:hover .tournant .noeud,.eco-toile:focus-within .tournant,.eco-toile:focus-within .tournant .noeud{animation-play-state:paused}
.eco-detail{background:#fff;border-radius:22px;padding:24px;min-height:220px;display:grid;gap:10px;align-content:start;border-top:6px solid var(--c)}
.eco-detail h3{font-size:26px;font-weight:800}
.eco-detail p{color:var(--ink-2)}
.puces{display:flex;flex-wrap:wrap;gap:6px}
@media(max-width:900px){.eco{grid-template-columns:1fr}}

/* Cloison (La Ruche) */
.curseur{display:grid;gap:10px;margin-top:22px}
.curseur label{font-weight:700}
.curseur input{width:100%;accent-color:var(--c)}
.grad{display:flex;justify-content:space-between;font-size:12px;font-weight:700;color:var(--muted)}
.prompt{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;background:#191713;color:#ece6da;border-radius:18px;padding:20px;font:13px/1.75 ui-monospace,Menlo,monospace;min-height:230px}
.prompt .l{display:block;transition:filter .3s,opacity .3s}
.prompt .l.tete{color:#9a9285}
.prompt .l.cache{filter:blur(4px);opacity:.35}
.prompt .l.resume{color:#e8b04a}

/* Rythme (La Ruche) */
.rythme{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.jour{background:#fff;border-radius:22px;padding:22px;display:grid;gap:10px}
.jour small{font-size:13px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.jour .val{font-family:var(--display);font-weight:800;font-size:54px;line-height:1;letter-spacing:-.03em;color:var(--c);font-variant-numeric:tabular-nums}
.jour p{color:var(--ink-2)}
.jauge{height:10px;border-radius:99px;background:var(--c-soft);overflow:hidden}
.jauge i{display:block;height:100%;width:100%;border-radius:99px;background:var(--c);transform:scaleX(0);transform-origin:left;transition:transform 1.2s cubic-bezier(.2,.85,.2,1) .2s}
.rythme.in .jauge i{transform:none}
@media(max-width:900px){.rythme{grid-template-columns:1fr}}

/* Priorités + lancement (Atelier) */
.prio{display:grid;gap:10px;margin-top:22px}
.prio button{display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:center;text-align:left;font:inherit;color:inherit;background:#fff;border:2px solid var(--line);border-radius:18px;padding:12px 14px;cursor:pointer;transition:border-color .2s,transform .2s}
.prio button:hover,.prio button[aria-pressed="true"]{border-color:var(--c);transform:translateX(4px)}
.prio .rg{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--c-soft);color:var(--c);font-weight:800}
.prio button[aria-pressed="true"] .rg{background:var(--c);color:#fff}
.prio strong{display:block;font-size:16px}
.prio .raisons{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}
.prio .score{font-family:var(--display);font-weight:800;font-size:22px;color:var(--c);font-variant-numeric:tabular-nums}

/* Contrôle de bordereau (VIGIE) */
.table-wrap{overflow-x:auto;margin-top:18px;border-radius:16px;border:1px solid var(--line)}
.bordereau{width:100%;border-collapse:collapse;font-size:14.5px;min-width:560px}
.bordereau th{text-align:left;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:12px 14px;background:var(--bg-2)}
.bordereau td{padding:12px 14px;border-top:1px solid var(--line);font-variant-numeric:tabular-nums;transition:background .4s}
.bordereau tr.ok td{background:#effaf5}.bordereau tr.ko td{background:var(--c-soft)}
.badge{display:inline-block;font-size:12px;font-weight:700;padding:4px 9px;border-radius:99px;background:var(--bg-2);color:var(--ink-2)}
.badge.ok{background:#dcf5ea;color:#0d7a52}.badge.ko{background:var(--c);color:#fff}
.badge.att{animation:clign 1s ease-in-out infinite}
@keyframes clign{50%{opacity:.4}}

/* Rôles (MAVA Hub) */
.roles{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}
.roles button{font:600 14.5px/1 var(--sans);padding:12px 16px;border-radius:99px;border:2px solid var(--line);background:#fff;cursor:pointer;color:var(--ink-2)}
.roles button[aria-pressed="true"]{background:var(--c);border-color:var(--c);color:#fff}
.modules{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.module{position:relative;border-radius:18px;padding:18px 34px 16px 16px;overflow-wrap:anywhere;hyphens:auto;line-height:1.25;background:var(--c-soft);font-weight:700;min-height:92px;display:grid;align-content:space-between;gap:10px;transition:background .35s,color .35s,transform .35s}
.module small{font-weight:600;font-size:12.5px;color:var(--ink-2)}
.module.verrou{background:var(--bg-2);color:var(--muted);transform:scale(.97)}
.module.verrou small{color:var(--muted)}
.module::after{content:"";position:absolute;right:14px;top:14px;width:12px;height:12px;border-radius:50%;background:var(--mint)}
.module.verrou::after{background:none;border:2px solid var(--muted);border-radius:3px;width:10px;height:9px;top:17px;box-shadow:0 -6px 0 -3px var(--muted)}
@media(max-width:620px){.modules{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Calcul de plus-value (Deklaro) */
.calc{display:grid;gap:10px}
.tx{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;background:var(--bg-2);border-radius:16px;padding:12px 14px;opacity:.45;transition:opacity .4s,background .4s,transform .4s}
.tx.on{opacity:1;background:#fff;box-shadow:0 10px 24px -18px rgba(18,18,23,.4)}
.tx.cur{transform:translateX(6px);outline:2px solid var(--c)}
.tx .sens{font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;padding:5px 9px;border-radius:99px;background:var(--c-soft)}
.tx .sens.v{background:var(--c);color:var(--ink)}
.tx b{font-variant-numeric:tabular-nums}
.formule{margin-top:16px;border-radius:18px;background:var(--ink);color:#fff;padding:18px 20px;font-size:15px;display:grid;gap:8px}
.formule code{font:13.5px/1.6 ui-monospace,Menlo,monospace;color:#d9d6e6}
.formule strong{font-family:var(--display);font-size:30px;color:var(--sun);font-variant-numeric:tabular-nums}

/* Parcours VAE (THOT) */
.parcours{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:8px;margin-top:20px}
.parcours button{font:inherit;display:grid;justify-items:center;gap:8px;text-align:center;background:#fff;border:2px solid var(--line);border-radius:18px;padding:14px 6px;cursor:pointer;font-size:13.5px;font-weight:600;color:var(--ink-2);transition:border-color .2s,transform .2s}
.parcours button b{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--c-soft);color:var(--c);font-weight:800}
.parcours button.fait b{background:var(--c);color:#fff}
.parcours button[aria-pressed="true"]{border-color:var(--c);transform:translateY(-3px)}


/* Parcelles (La Ferme) */
.champ{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:20px}
.champ button{font:inherit;display:grid;gap:6px;justify-items:center;background:#fff;border:2px solid var(--line);border-radius:18px;padding:14px 8px;cursor:pointer;font-weight:700;font-size:14px}
.champ button:hover{border-color:var(--c)}
.champ .plant{width:46px;height:46px}
.champ .plant path,.champ .plant circle{transition:transform .5s cubic-bezier(.2,1.4,.3,1),opacity .4s;transform-box:fill-box;transform-origin:bottom center}
.champ small{font-weight:600;color:var(--muted);font-size:12.5px}
.champ [data-etat="0"] .pousse,.champ [data-etat="0"] .epi,.champ [data-etat="1"] .epi{transform:scale(0);opacity:0}
.champ [data-etat="2"] .batiment,.champ [data-etat="1"] .batiment,.champ [data-etat="0"] .batiment{opacity:0}
.champ [data-etat="3"] .pousse,.champ [data-etat="3"] .epi{opacity:0}
@media(max-width:620px){.champ{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Révélation, sans JS, mouvement réduit */
html:not(.js) .p-hero h1 .ln>span,html:not(.js) .accroche,html:not(.js) .p-hero-media{opacity:1;transform:none;animation:none}
html:not(.js) .etape{opacity:1}
html:not(.js) .vues>.vue{position:relative;opacity:1;transform:none}
html:not(.js) .vues>.vue+.vue{display:none}
html:not(.js) .lot.fait::before,html:not(.js) .jauge i{transform:none}
@media(prefers-reduced-motion:reduce){
  .p-hero h1 .ln>span,.accroche,.p-hero-media{opacity:1!important;transform:none!important}
  .lot.fait::before,.jauge i{transform:none!important}
}

.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
