/* ============================================================================
   Organizer portal — app-specific styles ONLY.

   The design system (tokens, MudBlazor normalisation, cards, page headers,
   empty states, metric tiles, pills, nav, prose) now lives in the shared
   /design/cb-design.css, linked into this app's wwwroot at build and loaded
   BEFORE this file.

   Rule: anything used on more than one page, or shared with the attendee/vendor
   app, belongs in cb-design.css — not here. Duplicating it here is how the two
   surfaces drifted apart in the first place.
   ============================================================================ */

/* ── Startup splash (shown until the WASM app renders over #app) ──
   Uses the shared hero's 3-layer treatment; the loader dots are .cb-loader. */
.cb-splash {
    position: fixed;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1.5rem;
    padding: 2rem;
    background:
        radial-gradient(circle at 12% 18%, rgba(249, 115, 22, 0.10) 0%, transparent 45%),
        radial-gradient(circle at 88% 82%, rgba(14, 165, 233, 0.08) 0%, transparent 50%),
        linear-gradient(160deg, #FFFFFF 0%, #FAFAF9 100%);
}
.cb-splash-title {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--cb-secondary);
    letter-spacing: 0.02em;
}
.cb-splash-loader { display: flex; gap: 0.5rem; }
.cb-splash-loader span {
    width: 12px; height: 12px; border-radius: 50%;
    background: var(--cb-primary);
    animation: cb-bounce 1.2s infinite ease-in-out both;
}
.cb-splash-loader span:nth-child(1) { animation-delay: -0.24s; }
.cb-splash-loader span:nth-child(2) { animation-delay: -0.12s; }
@keyframes cb-bounce {
    0%, 80%, 100% { transform: scale(0); opacity: 0.4; }
    40% { transform: scale(1); opacity: 1; }
}

/* ── Dismiss affordance on the welcome hero (portal-only) ── */
.cb-hero-dismiss {
    position: absolute;
    top: 12px; right: 12px;
    display: grid;
    place-items: center;
    width: 32px; height: 32px;
    background: rgba(255, 255, 255, 0.6);
    border: 1px solid var(--cb-divider);
    border-radius: 50%;
    cursor: pointer;
    opacity: 0.6;
    transition: opacity 120ms, background 120ms, transform 120ms;
    color: var(--cb-text-secondary);
    padding: 0;
}
.cb-hero-dismiss:hover { opacity: 1; background: white; transform: scale(1.05); }
.cb-hero-dismiss:focus-visible { outline: 2px solid var(--cb-primary); outline-offset: 2px; }

/* ── Blazor unhandled-error banner ── */
#blazor-error-ui {
    display: none;
    position: fixed;
    bottom: 0; left: 0; right: 0;
    background: var(--cb-error);
    color: #FFFFFF;
    padding: 0.85rem 1.25rem;
    font-size: 0.875rem;
    box-shadow: 0 -10px 30px -10px rgba(220, 38, 38, 0.4);
    z-index: 1000;
}
#blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 1rem;
    top: 0.85rem;
}
