/* K434 »Rolig indlæsning« (Kim 31/10): ingen mellemtilstande, ingen pladsholdere der vises og så flytter sig.
   Pladsen holdes fra første øjeblik; det rigtige indhold glider blødt frem (opacity 0 → 1, 200 ms ease-out).
   En ventetekst vises kun ved en reelt langsom første indlæsning (over 0,45 s) – og også den glider frem.
   Rollback: fjern linket til denne fil i _Host.cshtml. */

@keyframes v247-land-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* Indhold, der kommer efter en ventetid */
.v247-land {
    animation: v247-land-in 200ms ease-out both;
}

/* Ventetekst/-indikator: usynlig de første 0,45 s (en hurtig hentning ses aldrig), så blødt frem. Pladsen er der hele tiden. */
.v247-calm-wait {
    animation: v247-land-in 200ms ease-out 450ms both;
}

/* Organisation: fanernes ventetilstand holder samme plads som et typisk indhold, så sidefoden ikke hopper */
.organization-state.v247-calm-wait {
    min-height: 28rem;
}

/* Seneste speaks / Produktioner: pladsholder-rækkerne holder kun pladsen – ingen grå skeletrækker */
html body .speaks-component-shell .speaks-skeleton {
    visibility: hidden !important;
}

/* K631: Produktioner – ventefiguren (O4) over de usynlige pladsholder-rækker; højde 0, så den aldrig skubber noget */
html body .speaks-component-shell .speaks-list-wait {
    position: relative;
    height: 0;
    visibility: visible;
    pointer-events: none;
}
html body .speaks-component-shell .speaks-list-wait > * {
    position: absolute;
    top: 72px;
    left: 50%;
    transform: translateX(-50%);
}

@media (prefers-reduced-motion: no-preference) {
    html body .speaks-component-shell.speaks-component-shell .speaks-compact-list.is-revealed,
    html body .speaks-component-shell.speaks-component-shell .speaks-card-list.is-revealed {
        animation: v247-land-in 200ms ease-out backwards;
    }
}

/* Konto-tjekket før en app-side: ingen synlig »Indlæser konto …«, medmindre det reelt tager tid */
.account-ready-state.account-ready-loading {
    animation: v247-land-in 200ms ease-out 450ms both;
    /* sidefoden står under skærmkanten, mens kontoen tjekkes – den hopper ikke op og ned igen */
    min-height: 100vh;
}

@media (prefers-reduced-motion: reduce) {
    .v247-land,
    .v247-calm-wait,
    .account-ready-state.account-ready-loading {
        animation-duration: 1ms;
    }
    html body .speaks-component-shell.speaks-component-shell .speaks-compact-list.is-revealed,
    html body .speaks-component-shell.speaks-component-shell .speaks-card-list.is-revealed {
        animation: none;
    }
}

/* Lav speak: scenen holder sin plads usynligt, til stemme, mappe, kladde, saldo og Seneste speaks er på plads */
.v247-stage-pending {
    visibility: hidden;
}

.v247-stage-wait {
    position: fixed;
    left: 0;
    right: 0;
    top: 42vh;
    z-index: 1;
    text-align: center;
    font-size: 14px;
    color: var(--v247-design-muted, #5f6b66);
    pointer-events: none;
    /* K541 G1: venteikonet (O4) midt på scenen i stedet for en tekstlinje */
    display: flex;
    justify-content: center;
}

/* Topmenuens punkter (Priser · Organisation · Konto) står usynligt på deres plads, til kontoen er klar */
.v247-nav-pending {
    visibility: hidden;
}

/* App-sider: indholdsområdet fylder mindst skærmhøjden, så sidefoden står under kanten fra start og ikke skubbes
   ned, når siden er tegnet (offentlige sider er uændrede). */
main.v247-main:has(~ .v247-footer.is-app) {
    min-height: 100vh;
}

/* Konto: mens saldo og adgang hentes, holder statusfeltet pladsen – købsblokken nedenunder hopper ikke */
.account-access-status:has(.account-access-status__loading-label.v247-calm-wait) {
    min-height: 70vh;
}
