    /* ── FULL-SCREEN LOADER ── */
    #loader-main {
        position: fixed;
        inset: 0;
        /* background: #2f2828ff; */
        background: #1d1a1aff;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 1rem;
        z-index: 9999;
        transition: opacity 1s ease, visibility 1s ease;
    }

    #loader-main.hidden {
        opacity: 0;
        visibility: hidden;
        pointer-events: none;
    }

    .dots {
        display: flex;
        gap: 0.8rem;
    }

    .dot {
        width: 13px;
        height: 13px;
        background: #a80000;
        /* deep red */
        border-radius: 50%;
        animation: bounce 1.4s infinite ease-in-out both;
    }

    .dot:nth-child(2) {
        animation-delay: 0.2s;
        background: #d60000;
        /* mid red */
    }

    .dot:nth-child(3) {
        animation-delay: 0.4s;
        background: #ff1a1a;
        /* bright red */
    }

    @keyframes bounce {

        0%,
        80%,
        100% {
            transform: scale(0);
            opacity: 0.4;
        }

        40% {
            transform: scale(1);
            opacity: 1;
        }
    }

    .loading-text {
        color: #ffffffff;
        font-size: .8rem;
        letter-spacing: 1px;
    }

    section.visible {
        opacity: 1;
    }

    /* Online/Offline Style */
    :root {
        --online: #22c55e;
        --offline: #ef4444;
        --bg: #0f172a;
        --text: #e5e7eb;
        --muted: #94a3b8;
    }

    /* Banner */
    #connection-banner {
        position: fixed;
        top: 12px;
        left: 50%;
        transform: translateX(-50%) translateY(-150%);
        min-width: 280px;
        max-width: calc(100% - 24px);
        padding: 10px 16px;
        border-radius: 999px;
        background: rgba(11, 18, 32, 0.93);
        backdrop-filter: blur(12px);
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 12px;
        box-shadow: 0 10px 30px rgba(0, 0, 0, .35);
        opacity: 0;
        transition: transform .4s ease, opacity .4s ease;
        z-index: 1080;
    }

    #connection-banner.show {
        transform: translateX(-50%) translateY(0);
        opacity: 1;
    }

    /* Left side */
    .status {
        display: flex;
        align-items: center;
        gap: 10px;
        font-size: .9rem;
        font-weight: 500;
        white-space: nowrap;
    }

    /* Status dot */
    .dat {
        width: 10px;
        height: 10px;
        border-radius: 50%;
        background: var(--muted);
        box-shadow: 0 0 0 4px rgba(148, 163, 184, .15);
        transition: background .3s ease, box-shadow .3s ease;
    }

    .online .dat {
        background: var(--online);
        box-shadow: 0 0 0 4px rgba(34, 197, 94, .25);
    }

    .offline .dat {
        background: var(--offline);
        box-shadow: 0 0 0 4px rgba(239, 68, 68, .25);
    }

    .btn-close {
        filter: invert(1);
        opacity: .6;
    }

    .btn-close:hover {
        opacity: 1;
    }
    .connection-text {
        color: #fff;
    }