/* INFINEA — couche d'effets spéciaux */

body.fx-ready{animation:fx-page-in .55s ease both}
@keyframes fx-page-in{from{opacity:.72}to{opacity:1}}

/* Halo très léger qui accompagne le pointeur sur ordinateur */
.fx-pointer-glow{position:fixed;z-index:80;top:-210px;left:-210px;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(76,126,232,.13) 0,rgba(201,122,74,.07) 36%,transparent 70%);mix-blend-mode:multiply;opacity:0;pointer-events:none;transition:opacity .35s ease;will-change:transform}
.fx-pointer-glow.is-visible{opacity:1}

/* Barre de progression de lecture */
.fx-progress{position:fixed;z-index:220;top:0;left:0;width:0;height:3px;background:linear-gradient(90deg,var(--blue2,#3a63c4),var(--orange,#c97a4a));box-shadow:0 0 12px rgba(201,122,74,.5);pointer-events:none}

/* Bouton retour en haut */
.fx-top{position:fixed;z-index:210;right:22px;bottom:22px;display:grid;place-items:center;width:48px;height:48px;border:0;border-radius:50%;color:#fff;background:linear-gradient(135deg,#2c4da3,#04175e);box-shadow:0 14px 34px rgba(4,20,80,.35);font-size:1.2rem;cursor:pointer;opacity:0;transform:translateY(18px);transition:.35s;pointer-events:none}
.fx-top.is-on{opacity:1;transform:none;pointer-events:auto}
.fx-top:hover{background:linear-gradient(135deg,#d9925f,#b06038)}

/* Révélations en cascade */
.fx-reveal{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.22,.7,.3,1),transform .8s cubic-bezier(.22,.7,.3,1)}
.fx-reveal.fx-in{opacity:1;transform:none}
.fx-reveal.fx-from-left{transform:translate3d(-46px,18px,0)}
.fx-reveal.fx-from-right{transform:translate3d(46px,18px,0)}
.fx-reveal.fx-from-left.fx-in,.fx-reveal.fx-from-right.fx-in{transform:none}

/* Animation du titre héros mot à mot */
.fx-word{display:inline-block;opacity:0;transform:translateY(.6em) rotate(2deg);animation:fx-word .7s cubic-bezier(.2,.7,.25,1) forwards}
@keyframes fx-word{to{opacity:1;transform:none}}

/* Orbes lumineuses flottantes (héros) */
.fx-orbs{position:absolute;z-index:1;inset:0;overflow:hidden;pointer-events:none}
.fx-orbs i{position:absolute;border-radius:50%;filter:blur(60px);opacity:.5;animation:fx-float 13s ease-in-out infinite}
.fx-orbs i:nth-child(1){top:12%;right:8%;width:340px;height:340px;background:radial-gradient(circle,#4a6fbd,transparent 70%)}
.fx-orbs i:nth-child(2){bottom:6%;right:30%;width:260px;height:260px;background:radial-gradient(circle,#c97a4a,transparent 70%);opacity:.32;animation-delay:-4s;animation-duration:16s}
.fx-orbs i:nth-child(3){top:38%;left:44%;width:220px;height:220px;background:radial-gradient(circle,#5b8fd9,transparent 70%);opacity:.28;animation-delay:-8s;animation-duration:19s}
@keyframes fx-float{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-38px,-46px) scale(1.12)}}

/* Slideshow illustratif du héros */
.hero-slides{position:absolute;inset:0}
.hero-slides .hero-bg{opacity:0;transition:opacity 1.8s ease;will-change:opacity}
.hero-slides .hero-bg.is-active{opacity:1;animation:fx-kenburns 14s ease-in-out both}
.hero-dots{position:absolute;z-index:4;left:max(28px,calc((100vw - var(--max,1220px))/2));bottom:32px;display:flex;gap:9px}
.hero-dots button{width:36px;height:4px;padding:0;border:0;border-radius:3px;background:rgba(255,255,255,.32);cursor:pointer;transition:.35s}
.hero-dots button:hover{background:rgba(255,255,255,.6)}
.hero-dots button.is-active{width:56px;background:#d9925f}
@media(max-width:760px){.hero-dots{left:20px;bottom:20px}}

/* Effet Ken Burns sur les bannières intérieures */
.page-hero-bg{animation:fx-kenburns 22s ease-in-out infinite alternate}
@keyframes fx-kenburns{from{transform:scale(1)}to{transform:scale(1.09) translate(-1.2%, -1%)}}

/* Reflet balayant sur les boutons */
.btn{position:relative;overflow:hidden;transition:transform .3s,box-shadow .3s}
.btn:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(2,16,64,.28)}
.btn:before{content:"";position:absolute;top:0;left:-80%;width:55%;height:100%;background:linear-gradient(105deg,transparent,rgba(255,255,255,.42),transparent);transform:skewX(-20deg);transition:left .55s ease}
.btn:hover:before{left:130%}

/* Cartes : inclinaison 3D + halo suivant le curseur */
.fx-tilt{transform-style:preserve-3d;transition:transform .35s ease,border-color .35s ease,box-shadow .35s ease;will-change:transform}
.fx-tilt:after{content:"";position:absolute;inset:0;z-index:0;border-radius:inherit;opacity:0;background:radial-gradient(420px circle at var(--gx,50%) var(--gy,50%),rgba(201,122,74,.16),transparent 65%);transition:opacity .35s;pointer-events:none}
.fx-tilt:hover:after{opacity:1}
.fx-depth{transform-style:preserve-3d;transition:transform .32s cubic-bezier(.2,.75,.25,1),box-shadow .32s ease;will-change:transform}
.fx-depth:hover{box-shadow:0 24px 65px rgba(5,20,63,.2)}

/* Onde de réaction au clic et au toucher */
.btn,.nav-quote,.arrow-link,.priority-program-cell,.expertise-program-cell,.news-card{isolation:isolate}
.arrow-link{position:relative;overflow:hidden;border-radius:4px}
.fx-ripple{position:absolute;z-index:4;border-radius:50%;background:rgba(255,255,255,.34);opacity:0;pointer-events:none;transform:scale(0);animation:fx-ripple .68s ease-out}
.arrow-link .fx-ripple{background:rgba(42,81,171,.16)}
@keyframes fx-ripple{0%{opacity:.65;transform:scale(0)}70%{opacity:.18}100%{opacity:0;transform:scale(1)}}
.program-grid article,.values article,.tech-metrics article,.innovation-cards article,.carnet-features article{position:relative}
.program-grid article:hover,.values article:hover{border-color:var(--orange,#c97a4a);box-shadow:0 20px 55px rgba(6,24,90,.14)}

/* Pause des défilements au survol */
.ticker:hover div,.logo-rail:hover .logo-track{animation-play-state:paused}

/* Galerie : zoom légende */
.project-grid figcaption{transform:translateY(8px);opacity:.94;transition:.4s}
.project-grid figure:hover figcaption{transform:none;opacity:1;background:rgba(6,24,80,.88)}

/* Lightbox galerie */
.fx-lightbox{position:fixed;z-index:300;inset:0;display:grid;place-items:center;padding:4vmin;background:rgba(2,8,26,.92);backdrop-filter:blur(8px);opacity:0;visibility:hidden;transition:.35s}
.fx-lightbox.is-open{opacity:1;visibility:visible}
.fx-lightbox img{max-width:92vw;max-height:88vh;border-radius:14px;box-shadow:0 40px 120px rgba(0,0,0,.6);transform:scale(.94);transition:transform .35s}
.fx-lightbox.is-open img{transform:none}
.fx-lightbox button{position:absolute;top:18px;right:22px;width:46px;height:46px;border:1px solid rgba(255,255,255,.35);border-radius:50%;color:#fff;background:rgba(255,255,255,.08);font-size:1.5rem;cursor:pointer}
.fx-lightbox button:hover{background:var(--orange,#c97a4a)}

/* Bande chiffres clés (accueil) */
.stats-band{position:relative;overflow:hidden;color:#fff;background:radial-gradient(circle at 12% 0,#2c4da3 0,transparent 34%),linear-gradient(135deg,#030d2e,#062173)}
.stats-band:before{content:"";position:absolute;inset:0;opacity:.16;background-image:linear-gradient(rgba(255,255,255,.16) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.16) 1px,transparent 1px);background-size:56px 56px;mask-image:linear-gradient(115deg,#000,transparent 80%)}
.stats-band .section{position:relative;z-index:1;padding:85px 0}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:35px}
.stats-grid article{position:relative;min-height:190px;padding:26px;border:1px solid rgba(255,255,255,.2);border-radius:16px;background:rgba(255,255,255,.05)}
.stats-grid strong{display:block;color:#e3a97c;font-size:clamp(2.6rem,4vw,3.6rem);letter-spacing:-.03em}
.stats-grid article>span{display:block;margin-top:22px;color:#c4d2f2;font-size:.9rem}

/* Bande équipe (accueil / à propos) */
.team-band{display:grid;grid-template-columns:1.05fr .95fr;min-height:600px;color:#fff;background:#04102e}
.team-band-media{position:relative;overflow:hidden}
.team-band-media img{width:100%;height:100%;object-fit:cover;transition:transform 6s ease}
.team-band:hover .team-band-media img{transform:scale(1.06)}
.team-band-media:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 55%,#04102e)}
.team-band-copy{display:flex;flex-direction:column;justify-content:center;padding:80px max(28px,calc((100vw - var(--max,1220px))/2)) 80px 60px}
.team-band-copy p:not(.section-no,.eyebrow){max-width:520px;color:#c0cdea}

/* Fond animé de la page contact */
.contact-page{background:linear-gradient(130deg,#03102b,#24448f,#03102b,#0a1f56);background-size:280% 280%;animation:fx-grad 18s ease infinite}
@keyframes fx-grad{0%,100%{background-position:0 50%}50%{background-position:100% 50%}}
.contact-page input:focus,.contact-page select:focus,.contact-page textarea:focus,.auto-booking input:focus,.auto-booking select:focus,.auto-booking textarea:focus{outline:2px solid var(--orange,#c97a4a);outline-offset:1px}

@media(max-width:1000px){.stats-grid{grid-template-columns:repeat(2,1fr)}.team-band{grid-template-columns:1fr}.team-band-media{min-height:340px}.team-band-copy{padding:60px 24px}}
@media(max-width:760px){.fx-top{right:14px;bottom:14px;width:42px;height:42px}.stats-grid{grid-template-columns:1fr 1fr;gap:10px}.stats-grid article{min-height:150px;padding:18px}.fx-reveal.fx-from-left{transform:translate3d(-20px,14px,0)}.fx-reveal.fx-from-right{transform:translate3d(20px,14px,0)}.fx-reveal.fx-from-left.fx-in,.fx-reveal.fx-from-right.fx-in{transform:none}.fx-touch-pointer .priority-program-cell:active,.fx-touch-pointer .expertise-program-cell:not(.is-unavailable):active,.fx-touch-pointer .news-card:active,.fx-touch-pointer .btn:active{transform:scale(.985);transition-duration:.12s}.hero-dots button{min-width:42px;height:5px}}

@media(prefers-reduced-motion:reduce){
.fx-reveal,.fx-word{opacity:1;transform:none;animation:none;transition:none}
.page-hero-bg,.fx-orbs i,.contact-page{animation:none}
.btn:before{display:none}
.fx-tilt,.btn{transition:none}
.fx-pointer-glow,.fx-ripple{display:none}
body.fx-ready{animation:none}
}
