/* Marketing landing page: opt out of the app-shell scroll lock.
 *
 * global.css pins html/body/#app to height:100% + overflow:hidden so the app
 * shell never scrolls the document. The landing page is a long document and
 * needs the real window scroller — a nested scroll container would break the
 * sticky nav, the router's scrollRestoration and :target anchor jumps.
 *
 * Keyed off a data attribute because CSS-module class names are hashed and
 * cannot be referenced from this static file. :has() keeps it declarative: the
 * rule stops matching the instant React unmounts the landing root, so there is
 * no effect cleanup that could leak a scrollable shell into the app.
 *
 * Wins on specificity alone (html:has(…) is 0,1,1 vs html 0,0,1; the #app
 * variant is 1,1,1 vs 1,0,0), so no !important is needed.
 *
 * min-height is deliberately NOT lifted here — a percentage min-height against
 * an auto-height html collapses. LandingPage's own root carries min-height:100dvh.
 */
html:has([data-landing-page]),
html:has([data-landing-page]) body,
html:has([data-landing-page]) #app {
    height: auto;
    overflow: visible;
}

/* Mantine's respectReducedMotion only reaches its own Transition components,
 * so hand-written motion on the landing page needs its own guard. */
@media (prefers-reduced-motion: no-preference) {
    html:has([data-landing-page]) {
        scroll-behavior: smooth;
    }
}
