/* Variante expérimentale : les palmiers deviennent un rideau végétal d'entrée. */
    body.jungle-entrance .palm-sign.left{
      left:-10%;
      bottom:-3%;
      width:min(45vw,620px);
      height:min(88vh,860px);
    }
    body.jungle-entrance .palm-sign.right{
      right:-11%;
      bottom:-4%;
      width:min(47vw,660px);
      height:min(90vh,880px);
    }
    body.jungle-entrance .jungle-sand-floor{
      position:absolute;
      left:-2%;
      right:-2%;
      bottom:-1px;
      z-index:2;
      height:clamp(96px,15vh,152px);
      pointer-events:none;
      opacity:0;
      transform:translate3d(0,82%,0) scaleY(.72);
      transform-origin:50% 100%;
      transition:opacity .5s ease,transform .78s cubic-bezier(.2,.8,.2,1),visibility 0s;
    }
    body.jungle-entrance .jungle-sand-floor svg{display:block;width:100%;height:100%;overflow:visible}
    body.jungle-entrance .jungle-sand-floor .sand-bed{
      fill:url(#jungleSandFill);
      opacity:.94;
      filter:drop-shadow(0 -7px 16px rgba(255,127,41,.18));
    }
    body.jungle-entrance .jungle-sand-floor .sand-ridge{
      fill:none;
      stroke:url(#jungleSandNeon);
      stroke-linecap:round;
      vector-effect:non-scaling-stroke;
    }
    body.jungle-entrance .jungle-sand-floor .sand-ridge-main{
      stroke-width:4;
      filter:drop-shadow(0 0 2px rgba(255,255,255,.85)) drop-shadow(0 0 8px rgba(255,159,37,.84)) drop-shadow(0 0 18px rgba(255,24,207,.26));
    }
    body.jungle-entrance .jungle-sand-floor .sand-ridge-secondary{stroke-width:2;opacity:.42}
    body.jungle-entrance .jungle-sand-floor .sand-sparks{fill:#ffe525;filter:drop-shadow(0 0 5px #ff7f29);opacity:.72}
    body.jungle-entrance.jungle-gate-active .jungle-sand-floor{
      z-index:7;
      animation:jungleSandReveal 3.6s linear both!important;
    }
    body.jungle-entrance.jungle-gate-complete .jungle-sand-floor{
      opacity:1;
      transform:none;
    }
    body.jungle-entrance.jungle-gate-complete .palm-sign .tube-prepared{
      stroke-dashoffset:0!important;
      opacity:1!important;
    }
    body.jungle-entrance.site-ready:not(.jungle-gate-active):not(.reduce-motion) .hero.is-scene-entering .jungle-sand-floor{
      animation:neonSceneArrival .76s cubic-bezier(.2,.8,.2,1) .16s both!important;
    }
    body.jungle-entrance.site-ready:not(.reduce-motion) .hero.is-scene-exiting .jungle-sand-floor{
      animation:neonSceneArrival .68s cubic-bezier(.2,.8,.2,1) reverse both!important;
    }
    body.jungle-entrance.site-ready .hero:not(.is-section-active):not(.is-scene-exiting) .jungle-sand-floor{
      opacity:0!important;
      visibility:hidden;
      transform:translate3d(0,34%,0) scaleY(.86);
      transition:opacity .28s ease,transform .38s ease,visibility 0s .3s!important;
    }
    body.jungle-entrance.jungle-gate-active .palm-sign{
      z-index:3;
      transition:none!important;
      will-change:transform,opacity;
    }
    body.jungle-entrance.jungle-gate-active .palm-sign.left{
      animation:jungleGateLeft 3.6s linear both!important;
    }
    body.jungle-entrance.jungle-gate-active .palm-sign.right{
      animation:jungleGateRight 3.6s linear both!important;
    }
    body.jungle-entrance.jungle-gate-active .palm-sign svg{animation:none!important}
    body.jungle-entrance.jungle-gate-active .palm-sign [class*="tube-"]{
      animation:none!important;
      stroke-dashoffset:0!important;
      opacity:1!important;
    }
    body.jungle-entrance.jungle-gate-active .hero-center{
      animation:jungleCenterReveal 3.6s linear both!important;
      transition:none!important;
    }
    body.jungle-entrance.jungle-gate-active .neon-bunting{
      z-index:6;
      opacity:1;
      transition:none!important;
    }
    body.jungle-entrance.jungle-gate-active .bunting-cable{
      animation:jungleCableIgnition .48s cubic-bezier(.16,1,.3,1) 1.72s both!important;
    }
    body.jungle-entrance.jungle-gate-active .bunting-flag{
      animation:jungleFlagIgnition .48s linear var(--flag-delay) both!important;
    }
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(1){--flag-delay:1.92s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(2){--flag-delay:2s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(3){--flag-delay:2.08s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(4){--flag-delay:2.16s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(5){--flag-delay:2.24s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(6){--flag-delay:2.32s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(7){--flag-delay:2.4s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(8){--flag-delay:2.48s}
    body.jungle-entrance.jungle-gate-active .bunting-flag:nth-child(9){--flag-delay:2.56s}
    body.jungle-entrance.jungle-gate-active .adobe-sun{
      animation:jungleAdobeIgnition 3.6s linear both!important;
      transition:none!important;
    }
    body.jungle-entrance.jungle-gate-active .adobe-core-halo{animation:jungleSunHaloIgnition .55s cubic-bezier(.16,1,.3,1) 2s both!important}
    body.jungle-entrance.jungle-gate-active .adobe-core-tube{animation:jungleSunDiskIgnition .52s cubic-bezier(.16,1,.3,1) 2.02s both!important}
    body.jungle-entrance.jungle-gate-active .adobe-core-dot{animation:jungleSunDotIgnition .38s linear 2.24s both!important}
    body.jungle-entrance.jungle-gate-active .adobe-ray::before{
      animation:jungleAdobeRayIgnition .46s linear calc(2.25s + var(--sun-step)) both!important;
    }
    body.jungle-entrance.jungle-gate-active .adobe-ray b{
      animation:jungleAdobeLogoIgnition .48s linear calc(2.38s + var(--sun-step)) both!important;
    }
    body.jungle-entrance.jungle-gate-active .adobe-ray:nth-child(1){--sun-step:0s}
    body.jungle-entrance.jungle-gate-active .adobe-ray:nth-child(2){--sun-step:.07s}
    body.jungle-entrance.jungle-gate-active .adobe-ray:nth-child(3){--sun-step:.14s}
    body.jungle-entrance.jungle-gate-active .adobe-ray:nth-child(4){--sun-step:.21s}
    body.jungle-entrance.jungle-gate-active .adobe-ray:nth-child(5){--sun-step:.28s}
    body.jungle-entrance.jungle-gate-active .adobe-ray:nth-child(6){--sun-step:.35s}
    body.jungle-entrance.jungle-gate-active .hero-center h1 span{
      animation:jungleTitleIgnition .62s linear 2.78s both!important;
      transition:none!important;
    }
    body.jungle-entrance.jungle-gate-active .hero-center h1 .outline{animation-delay:2.88s!important}
    body.jungle-entrance.jungle-gate-active .hero-center .hero-tagline{animation:jungleCopyReveal .42s cubic-bezier(.16,1,.3,1) 3.05s both!important;transition:none!important}
    body.jungle-entrance.jungle-gate-active .hero-center .hero-actions{animation:jungleActionReveal .38s cubic-bezier(.16,1,.3,1) 3.16s both!important;transition:none!important}
    @keyframes jungleGateLeft{
      0%{opacity:0;transform:translate3d(-112%,34px,0) rotate(-9deg) scale(1.08);animation-timing-function:cubic-bezier(.16,1,.3,1)}
      40%{opacity:1;transform:translate3d(42%,0,0) rotate(2deg) scale(1.06)}
      55%{opacity:1;transform:translate3d(42%,0,0) rotate(2deg) scale(1.06)}
      58%,60%{opacity:0;transform:translate3d(42%,0,0) rotate(2deg) scale(1.06)}
      60.01%,64%{opacity:0;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      68%{opacity:.84;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      72%{opacity:.16;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      78%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      100%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
    }
    @keyframes jungleGateRight{
      0%{opacity:0;transform:translate3d(112%,34px,0) rotate(9deg) scale(1.08);animation-timing-function:cubic-bezier(.16,1,.3,1)}
      40%{opacity:1;transform:translate3d(-42%,0,0) rotate(-2deg) scale(1.06)}
      55%{opacity:1;transform:translate3d(-42%,0,0) rotate(-2deg) scale(1.06)}
      58%,60%{opacity:0;transform:translate3d(-42%,0,0) rotate(-2deg) scale(1.06)}
      60.01%,64%{opacity:0;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      68%{opacity:.84;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      72%{opacity:.16;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      78%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      100%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
    }
    @keyframes jungleSandReveal{
      0%,62%{opacity:0;transform:translate3d(0,100%,0) scaleY(.72)}
      76%{opacity:.84;transform:translate3d(0,13%,0) scaleY(.92);animation-timing-function:cubic-bezier(.16,1,.3,1)}
      100%{opacity:1;transform:translate3d(0,0,0) scaleY(1)}
    }
    @keyframes jungleCenterReveal{
      0%,58%{opacity:1;transform:translate3d(0,calc(var(--hero-rest-y) + 18px),0) scale(.985)}
      100%{opacity:calc(1 - var(--hero-progress) * .7);transform:translate3d(0,calc(var(--hero-rest-y) + var(--hero-progress) * var(--hero-scroll-shift)),0) scale(calc(1 - var(--hero-progress) * var(--hero-scroll-scale)))}
    }
    @keyframes jungleAdobeIgnition{
      0%,55%{opacity:0;transform:translate3d(0,12px,0) scale(var(--sun-entry-scale))}
      63%,100%{opacity:1;transform:translate3d(0,0,0) scale(var(--sun-rest-scale))}
    }
    @keyframes jungleTitleIgnition{
      0%{opacity:0;transform:translate3d(0,20px,0) scale(.98)}
      24%{opacity:1}
      40%{opacity:.08}
      58%{opacity:.9}
      72%{opacity:.3}
      100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
    }
    @keyframes jungleSunHaloIgnition{from{opacity:0;transform:scale(.72)}to{opacity:1;transform:scale(1)}}
    @keyframes jungleSunDiskIgnition{from{opacity:0;transform:scale(.78)}to{opacity:1;transform:scale(1)}}
    @keyframes jungleSunDotIgnition{0%{opacity:0;transform:scale(0)}35%{opacity:1;transform:scale(1.28)}55%{opacity:.12}76%{opacity:.86}100%{opacity:1;transform:scale(1)}}
    @keyframes jungleAdobeRayIgnition{0%{opacity:0;transform:scaleY(0)}36%{opacity:1}50%{opacity:.1}68%{opacity:.88}80%{opacity:.34}100%{opacity:1;transform:scaleY(1)}}
    @keyframes jungleAdobeLogoIgnition{0%{opacity:0}28%{opacity:1}44%{opacity:.06}62%{opacity:.9}76%{opacity:.28}100%{opacity:1}}
    @keyframes jungleCopyReveal{from{opacity:0;transform:translate3d(0,14px,0)}to{opacity:1;transform:none}}
    @keyframes jungleActionReveal{from{opacity:0;transform:translate3d(0,12px,0) scale(.97)}to{opacity:1;transform:none}}
    @keyframes jungleCableIgnition{from{opacity:0;stroke-dasharray:none;stroke-dashoffset:0}to{opacity:1;stroke-dasharray:none;stroke-dashoffset:0}}
    @keyframes jungleFlagIgnition{0%{opacity:0}22%{opacity:1}43%{opacity:.06}64%{opacity:.88}78%{opacity:.28}100%{opacity:1}}
    @media (max-width:800px){
      body.jungle-entrance .palm-sign.left{left:-48%;bottom:-19%;width:80vw;height:67vh;--palm-rest-opacity:calc(.44 - var(--hero-progress) * .13)}
      body.jungle-entrance .palm-sign.right{right:-51%;bottom:-20%;width:84vw;height:70vh;--palm-rest-opacity:calc(.46 - var(--hero-progress) * .13)}
      body.jungle-entrance.jungle-gate-active .palm-sign.left{animation-name:jungleGateLeftMobile!important}
      body.jungle-entrance.jungle-gate-active .palm-sign.right{animation-name:jungleGateRightMobile!important}
      body.site-ready:not(.jungle-gate-active) .hero.is-section-active:not(.is-scene-entering):not(.is-scene-exiting) h1 span{animation:none!important;opacity:1!important}
      @keyframes jungleGateLeftMobile{
        0%{opacity:0;transform:translate3d(-108%,28px,0) rotate(-8deg) scale(1.05);animation-timing-function:cubic-bezier(.16,1,.3,1)}
        40%{opacity:.92;transform:translate3d(22%,0,0) rotate(1.2deg) scale(1.04)}
        55%{opacity:.92;transform:translate3d(22%,0,0) rotate(1.2deg) scale(1.04)}
        58%,60%{opacity:0;transform:translate3d(22%,0,0) rotate(1.2deg) scale(1.04)}
        60.01%,64%{opacity:0;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        68%{opacity:.76;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        72%{opacity:.12;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        78%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        100%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      }
      @keyframes jungleGateRightMobile{
        0%{opacity:0;transform:translate3d(108%,28px,0) rotate(8deg) scale(1.05);animation-timing-function:cubic-bezier(.16,1,.3,1)}
        40%{opacity:.92;transform:translate3d(-22%,0,0) rotate(-1.2deg) scale(1.04)}
        55%{opacity:.92;transform:translate3d(-22%,0,0) rotate(-1.2deg) scale(1.04)}
        58%,60%{opacity:0;transform:translate3d(-22%,0,0) rotate(-1.2deg) scale(1.04)}
        60.01%,64%{opacity:0;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        68%{opacity:.76;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        72%{opacity:.12;transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        78%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
        100%{opacity:var(--palm-rest-opacity);transform:translate3d(0,calc(var(--hero-progress) * var(--depth-y)),0) rotate(0) scale(1)}
      }
      body.jungle-entrance .jungle-sand-floor{height:clamp(82px,12vh,118px)}
    }
    /* Les badges Adobe restent entièrement dans le disque pendant la rotation. */
    .software-orbit,
    .hero-center,
    .adobe-rays,
    .adobe-ray,
    .adobe-ray b{overflow:visible}
    .adobe-ray b{top:-88px}

    body.reduce-motion.jungle-entrance .palm-sign,
    body.reduce-motion.jungle-entrance .jungle-sand-floor{animation:none!important}

    /* Sur matériel modeste, les entrées restent animées mais les boucles
       décoratives et les flous permanents ne sollicitent plus le processeur. */
    body.motion-lite.site-ready .palm-sign svg,
    body.motion-lite.site-ready .sun-rays,
    body.motion-lite.site-ready .sun-core,
    body.motion-lite.site-ready .sun-sign svg,
    body.motion-lite.site-ready .bunting-flag,
    body.motion-lite.site-ready .menu-columns::before{
      animation:none!important;
    }
    body.motion-lite.site-ready .adobe-rays,
    body.motion-lite.site-ready .adobe-ray b{animation-duration:42s!important}
    body.motion-lite .site-header,
    body.motion-lite .menu-board,
    body.motion-lite .contact-form{backdrop-filter:none}
    body.motion-lite .noise{opacity:0}
