:root {
    --app-transition-background: var(--ui-surface, #fcfdf9);
    --app-transition-text: var(--ui-text-soft, #6d7467);
    --app-transition-accent: var(--ui-accent, #aeba3e);
}

html .app-transition-loader {
    position: fixed;
    inset: 0;
    z-index: 10050;
    display: grid;
    min-height: 100dvh;
    place-items: center;
    overflow: hidden;
    visibility: hidden;
    opacity: 0;
    pointer-events: none;
    background:
        radial-gradient(circle at 50% 45%, color-mix(in srgb, var(--app-transition-accent) 18%, transparent), transparent 13rem),
        var(--app-transition-background);
    transition:
        opacity .2s cubic-bezier(.4, 0, .2, 1),
        visibility 0s linear .2s;
}

html.app-transition-pending,
html.app-transition-pending body {
    overflow: hidden;
}

html.app-transition-pending {
    background: var(--app-transition-background);
}

html.app-transition-pending body > :not(.app-transition-loader) {
    visibility: hidden;
}

html.app-transition-pending .app-transition-loader {
    visibility: visible;
    opacity: 1;
    pointer-events: auto;
    transition-delay: 0s;
}

html .app-transition-content {
    display: grid;
    place-items: center;
    gap: 42px;
    max-width: min(88vw, 420px);
    padding: max(24px, env(safe-area-inset-top)) max(24px, env(safe-area-inset-right)) max(24px, env(safe-area-inset-bottom)) max(24px, env(safe-area-inset-left));
    text-align: center;
}

html .app-transition-logo {
    position: relative;
    width: 92px;
    height: 92px;
    display: grid;
    place-items: center;
    border-radius: 28px;
}

html .app-transition-logo::before,
html .app-transition-logo::after {
    position: absolute;
    inset: -12px;
    border: 2px solid color-mix(in srgb, var(--app-transition-accent) 24%, transparent);
    border-radius: 50%;
    content: "";
    pointer-events: none;
}

html .app-transition-logo::after {
    inset: -24px;
    border-width: 1px;
    opacity: .55;
}

html .app-transition-logo img {
    width: 82px;
    height: 82px;
    display: block;
    object-fit: contain;
    filter: drop-shadow(0 12px 28px rgba(87, 101, 29, .16));
}

html .app-transition-tip {
    margin: 0;
    color: var(--app-transition-text);
    font-size: 14px;
    font-weight: 500;
    line-height: 1.7;
    letter-spacing: .02em;
}

@media (prefers-reduced-motion: no-preference) {
    html.app-transition-pending .app-transition-logo img {
        animation: app-logo-breathe 1.05s cubic-bezier(.4, 0, .2, 1) infinite alternate;
    }

    html.app-transition-pending .app-transition-logo::before {
        animation: app-logo-ring 1.25s cubic-bezier(.2, .7, .2, 1) infinite;
    }

    html.app-transition-pending .app-transition-logo::after {
        animation: app-logo-ring 1.25s .22s cubic-bezier(.2, .7, .2, 1) infinite;
    }
}

@keyframes app-logo-breathe {
    from { transform: translateY(2px) scale(.96); }
    to { transform: translateY(-2px) scale(1.04); }
}

@keyframes app-logo-ring {
    from { opacity: .58; transform: scale(.78); }
    to { opacity: 0; transform: scale(1.18); }
}

@media (prefers-color-scheme: dark) {
    :root {
        --app-transition-background: var(--ui-surface, #171d13);
        --app-transition-text: var(--ui-text-soft, #c2c8bb);
    }
}
