
.book {
    transform-style: preserve-3d;
    position: relative;
    height: 400px;
    cursor: pointer;
    backface-visibility: visible;
}

.front, .back, .page1, .page2, .page3, .page4, .page5, .page6 {
    transform-style: preserve-3d;
    position: absolute;
    width: 400px;
    height: 100%;
    top: 0;
    left: 0;
    transform-origin: left center;
    transition: transform .5s ease-in-out, box-shadow .35s ease-in-out;
}

.front, .back {
    background: #448c74;
}

.front, .page1, .page3, .page5 {
    border-bottom-right-radius: .5em;
    border-top-right-radius: .5em;
}

.back, .page2, .page4, .page6 {
    border-bottom-right-radius: .5em;
    border-top-right-radius: .5em;
}

.front {
    animation: rotate_front 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.page1 {
    background: #efefef;
    animation: rotate_page1 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.page2 {
    background: #efefef;
    animation: rotate_page2 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.page3 {
    background: #f5f5f5;
    animation: rotate_page3 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.page4 {
    background: #f5f5f5;
    animation: rotate_page4 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.page5 {
    padding: 1rem;
    background: #fafafa;
    animation: rotate_page5 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}


.page6 {
    background: #fdfdfd;
    animation: rotate_page6 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.back {
    background: #fdfdfd;
    animation: rotate_back 1.3s linear;
    animation-play-state: paused;
    animation-delay: calc(var(--scroll) * -1.3s);
    animation-fill-mode: forwards;
}

.fade-in-section {
    opacity: 0;
    transform: translateY(20vh);
    visibility: hidden;
    transition: opacity 0.6s ease-out, transform 1.2s ease-out;
    will-change: opacity, visibility;
}

.fade-in-section.active {
    opacity: 1;
    transform: none;
    visibility: visible;
}


:root {
    --scroll: 0;
}
.hero-grass {
    bottom: 0px !important;
}

@media (min-width: 768px) and (max-width: 1199px) {
    .hero-section {
        min-height: max(calc(100vh - 4rem), 900px) !important;
    }
    .hero-grass {
        top: 0;
        bottom: 0 !important;
        height: auto !important;
    }
}

@media (min-width: 768px) and (max-width: 991px) {
    .book {
        width: 400px;
        margin: 0 auto;
    }
}

@media (max-width: 767px) {
    .book {
        transform: scale(0.75);
        transform-origin: top center;
        margin-bottom: -100px;
    }
}

@media (max-width: 575px) {
    .hero-book-sticky {
        position: relative !important;
    }
    .book {
        transform: scale(0.6);
        transform-origin: top center;
        margin-bottom: -160px;
    }
}


@keyframes rotate_front {
    to {
        transform: rotateY(-160deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);

    }
}

@keyframes rotate_page1 {
    to {
        transform: rotateY(-150deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);
    }
}

@keyframes rotate_page2 {
    to {
        transform: rotateY(-30deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);
    }
}

@keyframes rotate_page3 {
    to {
        transform: rotateY(-140deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);
    }
}

@keyframes rotate_page4 {
    to {
        transform: rotateY(-40deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);
    }
}

@keyframes rotate_page5 {
    to {
        transform: rotateY(-130deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);
    }
}

@keyframes rotate_page6 {
    to {
        transform: rotateY(-50deg) scale(1.1);
        box-shadow: 0 1em 3em 0 rgba(0, 0, 0, .2);
    }
}

@keyframes rotate_back {
    to {
        transform: rotateY(-20deg) scale(1.1);
    }
}


.page-loading {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 100%;
    -webkit-transition: all .4s .2s ease-in-out;
    transition: all .4s .2s ease-in-out;
    background-color: #fff;
    opacity: 0;
    visibility: hidden;
    z-index: 9999;
}

.dark-mode .page-loading {
    background-color: #121519;
}

.page-loading.active {
    opacity: 1;
    visibility: visible;
}

.page-loading-inner {
    position: absolute;
    top: 50%;
    left: 0;
    width: 100%;
    text-align: center;
    -webkit-transform: translateY(-50%);
    transform: translateY(-50%);
    -webkit-transition: opacity .2s ease-in-out;
    transition: opacity .2s ease-in-out;
    opacity: 0;
}

.page-loading.active > .page-loading-inner {
    opacity: 1;
}

.page-loading-inner > span {
    display: block;
    font-family: 'Inter', sans-serif;
    font-size: 1rem;
    font-weight: normal;
    color: #6f788b;
}

.dark-mode .page-loading-inner > span {
    color: #fff;
    opacity: .6;
}

.page-spinner {
    display: inline-block;
    width: 2.75rem;
    height: 2.75rem;
    margin-bottom: .75rem;
    vertical-align: text-bottom;
    background-color: #d7dde2;
    border-radius: 50%;
    opacity: 0;
    -webkit-animation: spinner .75s linear infinite;
    animation: spinner .75s linear infinite;
}

.dark-mode .page-spinner {
    background-color: rgba(255, 255, 255, .25);
}

@-webkit-keyframes spinner {
    0% {
        -webkit-transform: scale(0);
        transform: scale(0);
    }
    50% {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}

@keyframes spinner {
    0% {
        -webkit-transform: scale(0);
        transform: scale(0);
    }
    50% {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}

.highlightTextarea {
    position: relative;
    width: 100% !important;
}

/* Decoratieve bomen in de desktop-hero (homepage): één WebP-achtergrond die
   de browser maar één keer laadt, i.p.v. vijf <img>'s van tree.png (980 KB).
   De instanties positioneren zichzelf via inline left/right/top en spiegelen
   eventueel met transform: scaleX(-1). 658x700 = de beeldverhouding van de
   bron (4810x5122) op de getoonde hoogte. De afbeelding komt uit
   generated_static/ (manage.py generate_webp). */
.tree-decoration {
    position: absolute;
    width: 658px;
    height: 700px;
    background: url("../img/components/tree-768.bea3e10766b9.webp") no-repeat center / contain;
    z-index: 2;
    pointer-events: none;
}

/* Damion self-hosted (was Google Fonts): op marketing alleen gebruikt voor de
   boektekst-preview in het 3D-boek op de homepage. Latin-subset dekt Nederlands.
   De editor laadt Damion nog via zijn eigen Google-Fonts-call
   (import_editor_top.html); dubbel gedeclareerd is onschadelijk. */
@font-face {
    font-family: 'Damion';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/damion-regular-latin.b18fec5f5597.woff2") format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Voorbeelden-carrousel op de homepage: twee identieke kaartgroepen in één
   track die 50% opschuift, dus de loop is naadloos. Pauzeert bij hover; op
   touch togglet homepage.js .is-paused bij een tik op de carrousel. */
.voorbeelden-marquee {
    overflow: hidden;
    -webkit-mask-image: linear-gradient(to right, transparent, #000 4%, #000 96%, transparent);
    mask-image: linear-gradient(to right, transparent, #000 4%, #000 96%, transparent);
}
.voorbeelden-track {
    display: flex;
    width: max-content;
    animation: voorbeelden-loop 75s linear infinite;
}
.voorbeelden-groep { display: flex; }
.voorbeelden-kaart {
    width: 21rem;
    max-width: 82vw;
    flex-shrink: 0;
    margin-right: 1.5rem;
}
@keyframes voorbeelden-loop {
    to { transform: translateX(-50%); }
}
.voorbeelden-marquee:hover .voorbeelden-track,
.voorbeelden-marquee.is-paused .voorbeelden-track {
    animation-play-state: paused;
}
/* Zonder animatie (systeemvoorkeur): gewone horizontale scroll-strip, de
   dubbele groep verdwijnt. */
@media (prefers-reduced-motion: reduce) {
    .voorbeelden-track { animation: none; }
    .voorbeelden-marquee { overflow-x: auto; -webkit-mask-image: none; mask-image: none; }
    .voorbeelden-groep[aria-hidden="true"] { display: none; }
}

/* CTA op de voorbeeldkaarten: standaard alleen een pijl-icoon; het label
   schuift uit als je over de kaart hovert (of de knop toetsenbord-focus
   krijgt). Op touch-apparaten is er geen hover, dus daar staat het label er
   altijd. */
.voorbeelden-cta { display: inline-flex; align-items: center; }
.voorbeelden-cta .voorbeelden-cta-label {
    max-width: 0;
    overflow: hidden;
    white-space: nowrap;
    opacity: 0;
    margin-right: 0;
    transition: max-width .25s ease, opacity .2s ease, margin-right .25s ease;
}
.voorbeelden-kaart:hover .voorbeelden-cta-label,
.voorbeelden-cta:focus-visible .voorbeelden-cta-label {
    max-width: 12rem;
    opacity: 1;
    margin-right: .5rem;
}
@media (hover: none) {
    .voorbeelden-cta .voorbeelden-cta-label { max-width: none; opacity: 1; margin-right: .5rem; }
}
