
    #ez-entree { display: none; }
    html.ez-entree #ez-entree {
        /* 100lvh et non inset: 0 : aux premières images, Chrome Android
           réserve encore la place d'une barre d'outils et le bas de la page
           dépasserait sous l'écran blanc. */
        display: block; position: fixed; top: 0; left: 0; right: 0;
        height: calc(100vh + 80px); height: calc(100lvh + 80px); z-index: 2147483647;
        overflow: hidden; pointer-events: auto;
        /* filet de sécurité si le script ne va pas au bout : jamais d'écran figé */
        animation: ez-secours 0s 8s forwards;
    }
    /* Opacité 0,996 et non 1 : un écran blanc tout à fait opaque cache la
       page à Chrome, qui ne la dessine qu'au début du fondu — l'affichage se
       figeait alors ~0,3 s (mesuré sur un Pixel 7a). À 0,996, la page se
       prépare derrière pendant le chargement, sans que rien ne se voie. */
    #ez-entree .ez-fond { position: absolute; inset: 0; background: #fff; opacity: .996; }
    /* --ez-cy : le centre de l'écran complet, dans la page (voir le script). */
    #ez-entree .ez-pose {
        position: absolute; left: 50%; top: var(--ez-cy, 50vh);
        width: 132px; height: 99.58px; margin: -93.465px 0 0 -87.4px;
    }
    #ez-entree .ez-logo { position: absolute; inset: 0; transform-origin: 50% 100%; }
    #ez-entree .ez-logo svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
    #ez-entree use { fill: #f85c12; }
    #ez-entree .ez-nom {
        position: absolute; left: 50%; top: var(--ez-cy, 50vh);
        width: 127.67px; height: 29.35px; margin: 24.115px 0 0 -63.835px; fill: #1a1a1a;
    }
    #ez-entree .ez-l { transform-origin: 33.7% 50%; }

    /* Android : on part de l'icône de Chrome (logo centré, 218,4 px). */
    html.ez-depuis-icone #ez-entree .ez-pose { transform: translate(21.4px, 43.675px) scale(1.65455); }
    html.ez-depuis-icone #ez-entree .ez-nom { opacity: 0; }
    html.ez-depuis-icone #ez-entree.ez-arrive .ez-pose { animation: ez-pose 450ms cubic-bezier(.3, 0, .15, 1) both; }
    html.ez-depuis-icone #ez-entree.ez-arrive .ez-nom { animation: ez-nom 320ms 160ms cubic-bezier(.2, .7, .3, 1) both; }
    @keyframes ez-pose { to { transform: none; } }
    @keyframes ez-nom {
        from { opacity: 0; transform: translateY(8px); }
        to   { opacity: 1; transform: none; }
    }

    /* Départ. Le recul et l'inclinaison s'appliquent au logo entier : déformés
       chacun de leur côté, cube et traînées ne se raccordaient plus et le fond
       passait entre eux. Seules les traînées s'allongent, depuis leur base,
       qui reste dans le cube. */
    html.ez-entree #ez-entree.ez-go .ez-nom { animation: ez-fondu 150ms ease-out both; }
    #ez-entree.ez-go .ez-logo { animation: ez-marque 1000ms both; }
    #ez-entree.ez-go .ez-l { animation: ez-trait 1000ms both; }
    #ez-entree.ez-go .ez-l2 { animation-delay: 25ms; }
    #ez-entree.ez-go .ez-l3 { animation-delay: 50ms; }
    #ez-entree.ez-go .ez-fond { animation: ez-fond 1000ms both; }
    @keyframes ez-fondu { from { opacity: 1; } to { opacity: 0; } }
    @keyframes ez-marque {
        0%   { transform: none; animation-timing-function: cubic-bezier(.2, .7, .3, 1); }
        18%  { transform: translateX(-8px) scale(.95, 1.03); animation-timing-function: cubic-bezier(.6, 0, .85, .4); }
        62%, 100% { transform: translateX(calc(50vw + 200px)) skewX(-6deg); }
    }
    @keyframes ez-trait {
        0%   { transform: none; opacity: 1; }
        18%  { transform: scaleX(.6); animation-timing-function: cubic-bezier(.4, 0, .6, 1); }
        46%  { transform: scaleX(2.4); opacity: 1; }
        64%, 100% { transform: scaleX(3); opacity: 0; }
    }
    /* L'écran blanc ne suit pas le colis : il s'efface sur place. */
    @keyframes ez-fond {
        0%, 28% { opacity: .996; animation-timing-function: cubic-bezier(.4, 0, .2, 1); }
        80%, 100% { opacity: 0; }
    }
    @keyframes ez-secours { to { visibility: hidden; pointer-events: none; } }
