.centered-element {
    display: block;
    margin: 0 auto;
}

.centering-container {
    align-items: center;
    display: flex;
    justify-content: center;
    width: 100%;
    height: 100dvh;
}

.centering-container-inapp {
    align-items: center;
    display: flex;
    width: 100%;
    height: calc(100dvh - 80px);
}

/* Scroll region holding a single goal's form (Goals page). Height is
   handled here rather than inline so it can flex on small screens. */
.goal-form-scroll {
    overflow-y: auto;
    width: 100%;
    height: calc(100dvh - 160px);
}

.text-response {
    font-size: 1.2em;
    /* Unbroken strings (URLs, mashed-together words) must wrap instead of
       clipping at the card edge - especially on phone-width message cards. */
    overflow-wrap: anywhere;
}

    .text-response ol,
    .text-response ul {
        padding-left: 20px;
        margin-bottom: 1em;
    }

        .text-response ol li,
        .text-response ul li {
            margin-bottom: 0.5em;
            /* the markdown library is suppressing the bullet point  */
            list-style-type: disc;
        }

    .text-response p {
        margin-bottom: 1em;
    }

/* ---------- Mobile / small-screen tuning ----------
   The participant interview and goals views are the primary mobile
   surfaces. On phones the side-by-side layouts collapse to a single
   column (see MudHidden usage in TopNav / GoalsPage), and these rules
   tighten spacing and type so the conversation fills the screen. */
@media (max-width: 600px) {
    .text-response {
        font-size: 1.05em;
    }

    /* Reclaim the container gutters for the chat column on phones. */
    .interview-container {
        padding-left: 8px !important;
        padding-right: 8px !important;
        padding-top: 8px !important;
    }

    /* Top tabs on mobile leave less vertical room than the desktop rail. */
    .goal-form-scroll {
        height: calc(100dvh - 215px);
    }

    /* Tighten the goal form for phones: the on-screen keyboard eats
       roughly half the vertical space, so every row of padding counts. */
    .goal-form-scroll .mud-typography-h5 {
        font-size: 1.05rem;
        margin-top: 6px !important;
        margin-bottom: 2px !important;
    }

    .goal-form-scroll .mud-typography-h6 {
        font-size: 1.1rem;
    }

    .goal-form-scroll .mud-input-control > .mud-input-control-input-container > div.mud-input.mud-input-outlined > input.mud-input-slot,
    .goal-form-scroll .mud-input-slot {
        padding-top: 8px;
        padding-bottom: 8px;
    }

    /* Compact the goals category icon tabs so all five read as one strip. */
    .goals-tabs-mobile .mud-tab {
        min-width: 48px;
        min-height: 40px;
        padding: 6px 10px;
    }
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }
