/* Restrained, browser-native reveal motion for selected municipal content. */
/* Only hide reveal candidates after JavaScript has successfully initialised.
   This fail-open gate prevents blank content in fresh/incognito sessions. */
html.scroll-reveal-ready .scroll-reveal:not(.is-revealed) {
    opacity: 0;
    transform: translate3d(0, 22px, 0);
    transition:
        opacity .78s cubic-bezier(.22, 1, .36, 1) var(--reveal-delay, 0ms),
        transform .78s cubic-bezier(.22, 1, .36, 1) var(--reveal-delay, 0ms);
    will-change: opacity, transform;
    backface-visibility: hidden;
}

.scroll-reveal.is-revealed {
    opacity: 1;
    transform: translate3d(0, 0, 0);
    will-change: auto;
}

/* Pre-footer information strips move gently from left to right. */
html.scroll-reveal-ready .scroll-reveal.scroll-reveal--right:not(.is-revealed) {
    transform: translate3d(-22px, 0, 0);
}

.scroll-reveal.scroll-reveal--right.is-revealed {
    transform: translate3d(0, 0, 0);
}

@media (prefers-reduced-motion: reduce) {
    .scroll-reveal,
    .scroll-reveal.is-revealed {
        opacity: 1;
        transform: none;
        transition: none;
    }
}

@media print {
    .scroll-reveal,
    .scroll-reveal.is-revealed {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}
