* {
    box-sizing: border-box;
}

body {
    /* or any other parent wrapper */
    margin: 0;
    display: flex;
    height: 100dvh;
    perspective: 2500px; /*1000px*/
    font: 16px/1.4 sans-serif;
    overflow: hidden;
    background-color: #f8f8f8; /*222*/
}

.book {
    display: flex;
    margin: auto;
    width: 560px;
    /*1* let pointer event go trough pages of lower Z than .book */
    pointer-events: none;
    transform-style: preserve-3d;
    transition: translate 1s;
    translate: calc(min(var(--c), 1) * 50%) 0%;
    /* DEMO ONLY: incline on the X axis for pages preview */
    rotate: 1 0 0 30deg;
}

.page {
    /* PS: Don't go below Z thickness of 0.4 to prevent browser's natural "zIndex" stacking */
    --z: 5px;
    
    flex: none;
    display: flex;
    width: 100%;
    /*1* allow pointer events on pages */
    pointer-events: all;
    user-select: none;
    transform-style: preserve-3d;
    border: 1px solid #0008;
    transform-origin: left center;
    transition: transform 1s,
        rotate 1s ease-in
            calc((min(var(--i), var(--c)) - max(var(--i), var(--c))) * 50ms);
    translate: calc(var(--i) * -100%) 0px 0px;
    transform: translateZ(
        calc((var(--c) - var(--i) - 0.5) * var(--z))
    );
    rotate: 0 1 0 calc(clamp(0, var(--c) - var(--i), 1) * -180deg);
}

.front,
.back {
    flex: none;
    width: 100%;
    padding: 2rem;
    backface-visibility: hidden;
    background-color: #fff;
    /* Fix backface visibility Firefox: */
    translate: 0px;
    cursor:pointer;
}

.back {
    background-image: linear-gradient(to right, #fff 80%, #ddd 100%);
    translate: -100% 0;
    rotate: 0 1 0 180deg;
}

.page img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}