/* Animations v2 : titres mot par mot, textes décodés, photos en volet + balayage scanner + parallaxe */
.js .sw .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.08em;margin-bottom:-.08em}
.js .sw .w > span{display:inline-block;transform:translateY(108%) rotate(4deg);transform-origin:0 100%;transition:transform 1.05s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i,0) * 70ms)}
.js .sw.on .w > span{transform:none}

.js .fx-up{opacity:0;transform:translateY(26px);filter:blur(6px);transition:opacity .9s ease,transform 1s cubic-bezier(.16,1,.3,1),filter .9s ease;transition-delay:var(--d,0ms)}
.js .fx-up.on{opacity:1;transform:none;filter:none}

/* Photos toujours visibles : l'animation ne fait que zoomer et balayer */
.cam img{transform:translateY(var(--py,0px)) scale(var(--s,1.08));transition:transform 1.8s cubic-bezier(.16,1,.3,1),filter .5s}
.js .cam.shutter:not(.on) img{--s:1.2;filter:brightness(.7)}
.cam:hover img{transform:translateY(var(--py,0px)) scale(1.14)}
.cam .scan{position:absolute;left:0;right:0;height:24%;top:-30%;z-index:2;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(59,134,255,.28) 55%,rgba(170,205,255,.55) 60%,transparent 62%);mix-blend-mode:screen}
.cam.on .scan{animation:scanIn 1.5s .6s cubic-bezier(.4,0,.2,1) forwards, scanLoop 7s 4s linear infinite}
@keyframes scanIn{to{top:110%}}
@keyframes scanLoop{0%{top:-30%}35%,100%{top:110%}}
.cam .tag{opacity:0;transition:opacity .4s .9s}
.cam.on .tag,.no-js .cam .tag{opacity:1}

.hero h1 em .w > span{background:linear-gradient(90deg,var(--signal),#9CC2FF,var(--signal));background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:sheen 5s linear infinite}
@keyframes sheen{to{background-position:-200% 0}}

.list article svg{transition:transform .5s cubic-bezier(.16,1,.3,1)}
.list article:hover svg{transform:rotate(-8deg) scale(1.12)}
.proto li::after{transform-origin:left;transition:transform 1.2s cubic-bezier(.16,1,.3,1) var(--d,0ms)}
.js .proto li:not(.on)::after{transform:scaleX(0)}

@media (prefers-reduced-motion:reduce){
  .js .sw .w > span,.js .fx-up,.js .cam.shutter img,.cam img{transform:none!important;opacity:1!important;filter:none!important;clip-path:none!important}
  .cam .scan{display:none}
  .cam .tag{opacity:1}
}

/* Vidéo d'origine en fond du hero, 3D en surimpression */
.hero{background:var(--ink)}
.hero-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-4;opacity:1}
.hero::before{content:"";position:absolute;inset:0;z-index:-3;pointer-events:none;background:linear-gradient(90deg,rgba(7,11,22,.8) 0%,rgba(7,11,22,.45) 42%,rgba(7,11,22,.05) 75%)}
.hero::after{background:linear-gradient(180deg,rgba(7,11,22,.5) 0%,rgba(7,11,22,0) 22%,rgba(7,11,22,0) 62%,var(--ink) 100%)}
#scene{opacity:.9;mix-blend-mode:screen}
.hero-video ~ .corners{z-index:-1}
/* Vidéo Edgward dans un cadre téléphone */
.edg-phone{justify-self:center;width:min(230px,62vw);aspect-ratio:320/568;border-radius:28px;padding:8px;background:#0a0f1c;border:1px solid rgba(255,178,30,.4);box-shadow:0 30px 80px -20px rgba(255,178,30,.35);position:relative;overflow:hidden;transform:perspective(900px) rotateY(-12deg) rotateX(4deg);transition:transform .8s cubic-bezier(.16,1,.3,1)}
.edg-phone:hover{transform:perspective(900px) rotateY(0) rotateX(0)}
.edg-phone video{width:100%;height:100%;object-fit:cover;border-radius:21px;display:block}
@media (prefers-reduced-motion:reduce){.edg-phone{transform:none}}
/* Bandeau photo des agents, juste après l'ouverture */
.crew{position:relative;background:var(--ink)}
.crew-cam{margin:0;height:min(80vh,780px);min-height:420px}
.crew-cam img{object-position:50% 62%}
.crew-cam::after{inset:clamp(14px,3vw,32px)}
.crew-cam .tag{left:clamp(28px,4vw,48px);top:clamp(26px,3.5vw,44px)}
.crew::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,var(--ink) 0%,rgba(7,11,22,0) 18%,rgba(7,11,22,0) 50%,rgba(7,11,22,.85) 100%)}
.crew-txt{position:absolute;left:0;right:0;bottom:clamp(28px,6vw,72px);z-index:4}
.crew-txt h2{font-size:clamp(40px,7.5vw,108px);max-width:14ch;text-shadow:0 4px 30px rgba(0,0,0,.45)}
.crew-txt .eyebrow{color:var(--beacon)}
.crew::after{z-index:2}
/* Ajustements bandeau agents */
.crew-cam img{object-position:50% 30%}
.crew::after{background:linear-gradient(180deg,var(--ink) 0%,rgba(7,11,22,0) 14%,rgba(7,11,22,0) 55%,rgba(7,11,22,.92) 100%)}
.crew-txt h2{font-size:clamp(32px,5vw,72px);max-width:24ch}
@media (max-width:640px){.crew-cam{height:72vh;min-height:380px}.crew-cam img{object-position:72% 30%}}