:root {
    --qf-bg: #07111f;
    --qf-bg-soft: #0a1626;
    --qf-surface: #0d1b2c;
    --qf-surface-2: #112238;
    --qf-border: rgba(148, 163, 184, 0.16);
    --qf-border-strong: rgba(103, 232, 249, 0.28);
    --qf-text: #edf6ff;
    --qf-muted: #8fa6bd;
    --qf-accent: #59d8ff;
    --qf-accent-2: #7fffd4;
    --qf-success: #4ade80;
    --qf-danger: #fb7185;
    --qf-warning: #fbbf24;
    --qf-shadow: 0 22px 55px rgba(0, 0, 0, 0.28);
}

* {
    box-sizing: border-box;
}

html {
    color-scheme: dark;
}

body {
    margin: 0;
    background: #0d1117;
    color: #e6edf3;
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    -webkit-font-smoothing: antialiased;
}

a {
    text-underline-offset: 3px;
}

/* ------------------------------------------------------------------
   Compatibilidad visual de páginas heredadas
   ------------------------------------------------------------------ */
.header-banner {
    background: radial-gradient(circle at top left, #0b3a7e, #02040a 60%);
    border-bottom: 1px solid #202634;
    padding: 24px 12px;
}

.header-title {
    font-weight: 700;
    font-size: 2rem;
    letter-spacing: .05em;
}

.header-subtitle {
    font-size: .95rem;
    opacity: .85;
}

.tagline-familia {
    font-size: .85rem;
    opacity: .9;
    font-style: italic;
}

.card-custom {
    background: #111b28;
    border: 1px solid rgba(148, 163, 184, .15);
    border-radius: 16px;
    padding: 18px;
    height: 100%;
    box-shadow: 0 14px 30px rgba(0, 0, 0, .18);
}

.card-custom:hover {
    border-color: rgba(89, 216, 255, .32);
}

.title-module {
    font-size: 1.08rem;
    font-weight: 700;
    color: #72ddff;
    display: flex;
    align-items: center;
    gap: 8px;
}

.divider-soft {
    border-top: 1px solid rgba(148, 163, 184, .13);
    margin: 10px 0 12px;
}

.table-dark-custom {
    --bs-table-bg: transparent;
    --bs-table-border-color: rgba(148, 163, 184, .12);
    --bs-table-striped-bg: rgba(255, 255, 255, .018);
    --bs-table-striped-color: #e6edf3;
    --bs-table-hover-bg: rgba(89, 216, 255, .045);
    --bs-table-hover-color: #fff;
}

.small-label {
    font-size: .76rem;
    color: #8fa6bd;
}

.status-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    display: inline-block;
    margin-right: 6px;
}

.status-online { background: #4ade80; }
.status-offline { background: #fb7185; }

/* ------------------------------------------------------------------
   QSOForge shell
   ------------------------------------------------------------------ */
.qsoforge-dashboard {
    min-height: 100vh;
    position: relative;
    background:
        #050d16
        url("../img/qsoforge-radio-bg.webp")
        center top / cover
        fixed
        no-repeat;
    color: var(--qf-text);
}

.qsoforge-dashboard::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    background:
        linear-gradient(180deg,
            rgba(3, 10, 18, .52) 0%,
            rgba(4, 12, 21, .68) 42%,
            rgba(3, 9, 16, .80) 100%),
        radial-gradient(circle at 18% 8%, rgba(22, 128, 184, .10), transparent 38rem);
}

.qsoforge-dashboard::after {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    opacity: .11;
    background-image:
        linear-gradient(rgba(255,255,255,.025) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,.025) 1px, transparent 1px);
    background-size: 42px 42px;
    mask-image: linear-gradient(to bottom, rgba(0,0,0,.72), transparent 76%);
}

.qf-shell,
.qf-footer {
    position: relative;
    z-index: 1;
}

.qf-container {
    max-width: 1540px;
    padding-left: clamp(16px, 3vw, 42px);
    padding-right: clamp(16px, 3vw, 42px);
}

.qf-topbar {
    border-bottom: 1px solid var(--qf-border);
    background: rgba(5, 14, 25, .78);
    backdrop-filter: blur(16px);
    position: sticky;
    top: 0;
    z-index: 1030;
}

.qf-topbar-inner {
    min-height: 78px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}

.qf-brand-group,
.qf-topbar-actions,
.qf-instance-row,
.qf-panel-head,
.qf-resource-top,
.qf-live-footer {
    display: flex;
    align-items: center;
}

.qf-brand-group {
    gap: 13px;
    min-width: 0;
}

.qf-brand-mark {
    width: 45px;
    height: 45px;
    border-radius: 13px;
    display: grid;
    place-items: center;
    position: relative;
    overflow: hidden;
    font-weight: 900;
    letter-spacing: -.09em;
    color: #eaffff;
    background: linear-gradient(145deg, rgba(89,216,255,.2), rgba(127,255,212,.08));
    border: 1px solid rgba(89,216,255,.32);
    box-shadow: inset 0 0 20px rgba(89,216,255,.06);
}

.qf-brand-mark::after {
    content: "";
    position: absolute;
    width: 32px;
    height: 32px;
    border: 1px solid rgba(127,255,212,.18);
    border-radius: 50%;
}

.qf-brand-mark i {
    position: absolute;
    right: 4px;
    bottom: 2px;
    font-size: .65rem;
    color: var(--qf-accent-2);
}

.qf-brand-q,
.qf-brand-f {
    position: relative;
    z-index: 1;
}

.qf-brand-f {
    color: var(--qf-accent);
    margin-left: 1px;
}

.qf-brand-name {
    font-size: 1.08rem;
    font-weight: 850;
    letter-spacing: .02em;
    line-height: 1.05;
}

.qf-brand-name span {
    color: var(--qf-accent);
    font-weight: 700;
}

.qf-brand-subtitle {
    margin-top: 5px;
    color: var(--qf-muted);
    font-size: .72rem;
    letter-spacing: .055em;
    text-transform: uppercase;
}

.qf-topbar-actions {
    gap: 10px;
    flex-wrap: wrap;
    justify-content: flex-end;
}

.qf-language-switch {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px;
    border: 1px solid rgba(132, 167, 195, .17);
    border-radius: 12px;
    background: rgba(4, 13, 24, .64);
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.025),
        0 8px 20px rgba(0,0,0,.12);
    backdrop-filter: blur(9px);
}

.qf-lang-option {
    position: relative;
    isolation: isolate;
    min-width: 42px;
    height: 30px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    padding: 0 10px;
    border: 1px solid transparent;
    border-radius: 8px;
    color: #8293a6;
    background: rgba(255,255,255,.025);
    text-decoration: none;
    transition:
        transform .15s ease,
        color .15s ease,
        border-color .15s ease,
        background .15s ease,
        box-shadow .15s ease,
        filter .15s ease;
}

.qf-lang-code {
    position: relative;
    z-index: 2;
    font-size: .71rem;
    font-weight: 900;
    letter-spacing: .07em;
    line-height: 1;
}

.qf-lang-option:hover {
    color: #eefaff;
    transform: translateY(-1px);
    border-color: rgba(255,255,255,.11);
    background: rgba(255,255,255,.055);
}

.qf-lang-option.active {
    transform: translateY(-1px);
}

/* Español: rojo / amarillo / rojo, inspirado en la bandera española. */
.qf-lang-es.active {
    color: #281200;
    border-color: rgba(255, 205, 57, .58);
    background:
        linear-gradient(
            180deg,
            #a90f22 0%,
            #c9142a 24%,
            #f3c51d 24%,
            #ffd43b 76%,
            #c9142a 76%,
            #a90f22 100%
        );
    box-shadow:
        0 0 0 1px rgba(255, 201, 45, .08),
        0 5px 14px rgba(187, 25, 36, .20),
        0 0 18px rgba(255, 201, 45, .10);
}

.qf-lang-es.active .qf-lang-code {
    text-shadow: 0 1px 0 rgba(255,255,255,.18);
}

/* Inglés: azul / blanco / rojo con estética internacional/UK. */
.qf-lang-en.active {
    color: #07111f;
    border-color: rgba(130, 178, 255, .52);
    background:
        linear-gradient(135deg,
            transparent 0 39%,
            rgba(255,255,255,.94) 39% 45%,
            rgba(198, 30, 55, .96) 45% 52%,
            rgba(255,255,255,.94) 52% 58%,
            transparent 58% 100%
        ),
        linear-gradient(45deg,
            transparent 0 40%,
            rgba(255,255,255,.82) 40% 46%,
            rgba(198, 30, 55, .93) 46% 52%,
            rgba(255,255,255,.82) 52% 58%,
            transparent 58% 100%
        ),
        linear-gradient(90deg,
            transparent 0 42%,
            rgba(255,255,255,.96) 42% 47%,
            #c51f3a 47% 53%,
            rgba(255,255,255,.96) 53% 58%,
            transparent 58% 100%
        ),
        linear-gradient(180deg,
            transparent 0 39%,
            rgba(255,255,255,.96) 39% 45%,
            #c51f3a 45% 55%,
            rgba(255,255,255,.96) 55% 61%,
            transparent 61% 100%
        ),
        #123668;
    box-shadow:
        0 0 0 1px rgba(83, 145, 255, .08),
        0 5px 14px rgba(24, 81, 157, .22),
        0 0 18px rgba(83, 145, 255, .11);
    text-shadow:
        0 1px 0 rgba(255,255,255,.42),
        0 0 4px rgba(255,255,255,.36);
}

.qf-lang-en.active .qf-lang-code {
    color: #07111f;
    font-weight: 900;
}

.qf-lang-option.active:hover {
    filter: brightness(1.06);
}

.qf-status-pill {
    min-height: 34px;
    display: flex;
    align-items: center;
    gap: 7px;
    border-radius: 999px;
    border: 1px solid var(--qf-border);
    padding: 5px 11px;
    background: rgba(255,255,255,.025);
    font-size: .74rem;
    color: var(--qf-muted);
}

.qf-status-pill strong {
    color: var(--qf-text);
    letter-spacing: .04em;
}

.qf-status-led {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--qf-danger);
    box-shadow: 0 0 0 4px rgba(251,113,133,.08);
}

.qf-status-pill.is-online .qf-status-led {
    background: var(--qf-success);
    box-shadow: 0 0 0 4px rgba(74,222,128,.08), 0 0 12px rgba(74,222,128,.35);
}

/* ------------------------------------------------------------------
   Navegación compartida
   ------------------------------------------------------------------ */
.qf-nav-shell {
    padding: 16px 0 4px;
}

.qf-nav {
    display: flex;
    align-items: center;
    gap: 7px;
    flex-wrap: wrap;
    padding: 6px;
    border: 1px solid var(--qf-border);
    border-radius: 14px;
    background: rgba(8, 20, 34, .72);
    box-shadow: 0 10px 28px rgba(0,0,0,.12);
}

.qf-nav-link {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-height: 38px;
    padding: 7px 12px;
    border: 1px solid transparent;
    border-radius: 10px;
    color: var(--qf-muted);
    text-decoration: none;
    font-size: .82rem;
    font-weight: 700;
    transition: background .15s ease, color .15s ease, border-color .15s ease;
}

.qf-nav-link:hover {
    color: var(--qf-text);
    background: rgba(255,255,255,.035);
    border-color: var(--qf-border);
}

.qf-nav-link.active {
    color: #eaffff;
    background: rgba(89,216,255,.10);
    border-color: rgba(89,216,255,.25);
}

.qf-nav-spacer {
    flex: 1 1 auto;
}

.qf-nav-link.qf-nav-telegram {
    color: #8bc7ff;
}


.qf-nav-link i {
    transition: color .15s ease, filter .15s ease, transform .15s ease;
}

.qf-nav-dashboard i {
    color: #58dcff;
}

.qf-nav-personalization i {
    color: #c084fc;
}

.qf-nav-settings i {
    color: #fbbf24;
}

.qf-nav-banned i {
    color: #fb7185;
}

.qf-nav-telegram i {
    color: #60a5fa;
}

.qf-nav-link:hover i,
.qf-nav-link.active i {
    filter: drop-shadow(0 0 7px currentColor);
    transform: translateY(-1px);
}

.qf-nav-dashboard.active {
    background: rgba(88, 220, 255, .10);
    border-color: rgba(88, 220, 255, .26);
}

.qf-nav-personalization.active {
    background: rgba(192, 132, 252, .09);
    border-color: rgba(192, 132, 252, .24);
}

.qf-nav-settings.active {
    background: rgba(251, 191, 36, .08);
    border-color: rgba(251, 191, 36, .22);
}

.qf-nav-banned.active {
    background: rgba(251, 113, 133, .08);
    border-color: rgba(251, 113, 133, .22);
}

.nav-nx-controls {
    background: rgba(0,0,0,.35);
    border: 1px solid rgba(255,255,255,.08);
    backdrop-filter: blur(4px);
}

/* ------------------------------------------------------------------
   Hero
   ------------------------------------------------------------------ */
.qf-hero {
    margin-top: 18px;
    display: grid;
    grid-template-columns: minmax(0, 1.55fr) minmax(320px, .75fr);
    gap: 18px;
    align-items: stretch;
}

.qf-hero-main,
.qf-hero-status,
.qf-panel,
.qf-stat-card {
    border: 1px solid var(--qf-border);
    background: linear-gradient(145deg, rgba(16,35,56,.84), rgba(8,20,34,.82));
    box-shadow: var(--qf-shadow);
}

.qf-hero-main {
    position: relative;
    overflow: hidden;
    border-radius: 22px;
    padding: clamp(24px, 4vw, 46px);
}

.qf-hero-main::after {
    content: "";
    position: absolute;
    width: 330px;
    height: 330px;
    right: -115px;
    top: -155px;
    border-radius: 50%;
    border: 1px solid rgba(89,216,255,.11);
    box-shadow:
        0 0 0 42px rgba(89,216,255,.025),
        0 0 0 92px rgba(127,255,212,.018);
}

.qf-eyebrow,
.qf-panel-kicker {
    color: var(--qf-accent);
    text-transform: uppercase;
    letter-spacing: .14em;
    font-weight: 800;
    font-size: .7rem;
}

.qf-eyebrow {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 18px;
}

.qf-kicker-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--qf-accent-2);
    box-shadow: 0 0 14px rgba(127,255,212,.58);
}

.qf-instance-row {
    gap: 18px;
}

.qf-instance-logo {
    width: 72px;
    height: 72px;
    object-fit: contain;
    border-radius: 16px;
    padding: 6px;
    border: 1px solid var(--qf-border);
    background: rgba(255,255,255,.025);
}

.qf-hero h1 {
    margin: 0;
    font-size: clamp(1.65rem, 3.15vw, 3rem);
    line-height: .98;
    letter-spacing: -.045em;
    font-weight: 860;
    color: #f6fbff;
}

.qf-instance-subtitle {
    margin: 9px 0 0;
    color: #b8caDA;
    font-size: clamp(.95rem, 1.8vw, 1.2rem);
}

.qf-tagline {
    max-width: 760px;
    margin: 20px 0 0;
    color: var(--qf-muted);
    font-size: .9rem;
}

.qf-hero-status {
    border-radius: 22px;
    padding: 24px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.qf-hero-status-label {
    margin-bottom: 12px;
    color: var(--qf-muted);
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .12em;
    font-weight: 800;
}

.qf-hero-status-grid {
    display: grid;
    gap: 8px;
}

.qf-mini-status {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    min-height: 48px;
    padding: 10px 13px;
    border-radius: 12px;
    border: 1px solid rgba(148,163,184,.10);
    background: rgba(255,255,255,.025);
}

.qf-mini-status span {
    color: var(--qf-muted);
    font-size: .78rem;
}

.qf-mini-status strong {
    color: #f3f9ff;
    font-size: .82rem;
    text-align: right;
}

/* ------------------------------------------------------------------
   Main dashboard
   ------------------------------------------------------------------ */
.qf-main {
    padding: 18px 0 0;
    display: flex;
    flex-direction: column;
    gap: 18px;
}

/*
 * Ritmo vertical unificado:
 * todos los bloques principales quedan separados exactamente 18 px.
 */
.qf-stat-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
    margin-top: 0;
}

.qf-stat-card {
    min-height: 102px;
    border-radius: 16px;
    padding: 18px;
    display: flex;
    align-items: center;
    gap: 14px;
}

.qf-stat-icon {
    width: 42px;
    height: 42px;
    flex: 0 0 42px;
    display: grid;
    place-items: center;
    border-radius: 12px;
    border: 1px solid rgba(89,216,255,.18);
    color: var(--qf-accent);
    background: rgba(89,216,255,.07);
}


.qf-stat-card {
    position: relative;
    overflow: hidden;
}

.qf-stat-card::after {
    content: "";
    position: absolute;
    left: 18px;
    right: 18px;
    bottom: 0;
    height: 1px;
    opacity: .55;
    background: linear-gradient(90deg, transparent, var(--qf-stat-accent, var(--qf-accent)), transparent);
}

.qf-stat-tx {
    --qf-stat-accent: #58dcff;
}

.qf-stat-users {
    --qf-stat-accent: #c084fc;
}

.qf-stat-time {
    --qf-stat-accent: #fbbf24;
}

.qf-stat-level {
    --qf-stat-accent: #4ade80;
}

.qf-stat-card .qf-stat-icon {
    color: var(--qf-stat-accent, var(--qf-accent));
    border-color: color-mix(in srgb, var(--qf-stat-accent, var(--qf-accent)) 28%, transparent);
    background: color-mix(in srgb, var(--qf-stat-accent, var(--qf-accent)) 9%, transparent);
    box-shadow: inset 0 0 18px color-mix(in srgb, var(--qf-stat-accent, var(--qf-accent)) 5%, transparent);
}

.qf-stat-card .qf-stat-icon i {
    filter: drop-shadow(0 0 7px color-mix(in srgb, var(--qf-stat-accent, var(--qf-accent)) 48%, transparent));
}

.qf-mini-status-clock strong {
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    color: #dff8ff;
}

.qf-stat-value {
    font-size: 1.55rem;
    line-height: 1;
    font-weight: 850;
    letter-spacing: -.025em;
}

.qf-stat-value-time {
    font-variant-numeric: tabular-nums;
    font-size: 1.32rem;
}

.qf-stat-value-level {
    font-size: 1rem;
    color: var(--qf-accent-2);
}

.qf-stat-label {
    margin-top: 7px;
    color: var(--qf-muted);
    font-size: .76rem;
}

.qf-section-row,
.qf-section-block {
    margin-top: 0;
}

/*
 * TX en vivo / Recursos:
 * Bootstrap añadía gutter vertical además de nuestro margen.
 * Dejamos 18 px horizontales exactos y anulamos ese exceso vertical.
 */
.qf-section-row {
    --bs-gutter-x: 18px;
    --bs-gutter-y: 0;
}

.qf-panel {
    border-radius: 18px;
    padding: 20px;
}

.qf-panel-head {
    justify-content: space-between;
    gap: 14px;
    margin-bottom: 17px;
}

.qf-panel-head h2 {
    margin: 5px 0 0;
    display: flex;
    align-items: center;
    gap: 9px;
    color: var(--qf-text);
    font-size: 1.04rem;
    font-weight: 760;
}

.qf-panel-head h2 i {
    color: var(--qf-accent);
}

.qf-panel-live {
    overflow: hidden;
    position: relative;
}

.qf-panel-live::after {
    content: "";
    position: absolute;
    width: 220px;
    height: 220px;
    right: -90px;
    bottom: -120px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(89,216,255,.08), transparent 68%);
    pointer-events: none;
}

.qf-live-badge {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border-radius: 999px;
    padding: 5px 9px;
    font-size: .67rem;
    letter-spacing: .1em;
    font-weight: 850;
    transition:
        color .18s ease,
        border-color .18s ease,
        background .18s ease,
        box-shadow .18s ease;
}

.qf-live-dot {
    width: 7px;
    height: 7px;
    flex: 0 0 7px;
    border-radius: 50%;
    transition:
        background .18s ease,
        box-shadow .18s ease;
}

.qf-live-badge-label {
    width: auto;
    height: auto;
    line-height: 1;
}

/* Reflector sin TX: rojo = esperando una transmisión. */
.qf-live-badge-idle {
    border: 1px solid rgba(251,113,133,.28);
    background: rgba(251,113,133,.08);
    color: #ff9aad;
    box-shadow: inset 0 0 16px rgba(251,113,133,.025);
}

.qf-live-badge-idle .qf-live-dot {
    background: #fb7185;
    box-shadow: 0 0 10px rgba(251,113,133,.48);
}

/* TX real detectada: verde = transmisión en vivo. */
.qf-live-badge-active {
    border: 1px solid rgba(74,222,128,.26);
    background: rgba(74,222,128,.08);
    color: #9df6bb;
    box-shadow:
        inset 0 0 16px rgba(74,222,128,.025),
        0 0 14px rgba(74,222,128,.035);
}

.qf-live-badge-active .qf-live-dot {
    background: var(--qf-success);
    box-shadow: 0 0 10px rgba(74,222,128,.55);
}

.qf-live-stage {
    min-height: 170px;
    display: grid;
    grid-template-columns: 120px 1fr;
    gap: 24px;
    align-items: center;
    padding: 18px;
    border-radius: 15px;
    border: 1px solid rgba(148,163,184,.09);
    background: rgba(4,13,23,.42);
}

.qf-live-orbit {
    width: 104px;
    height: 104px;
    position: relative;
    display: grid;
    place-items: center;
    color: var(--qf-accent);
}

.qf-live-orbit > span {
    position: absolute;
    inset: 10px;
    border-radius: 50%;
    border: 1px solid rgba(89,216,255,.15);
}

.qf-live-orbit > span:nth-child(2) { inset: 0; opacity: .62; }
.qf-live-orbit > span:nth-child(3) { inset: -10px; opacity: .28; }

.qf-live-orbit i {
    font-size: 2rem;
    filter: drop-shadow(0 0 12px rgba(89,216,255,.25));
}

.qf-live-content {
    min-width: 0;
}

.qf-vu-labels {
    margin-bottom: 7px;
    display: flex;
    justify-content: space-between;
    color: var(--qf-muted);
    font-size: .65rem;
    font-weight: 800;
    letter-spacing: .12em;
}

.vu-container,
.qf-vu-container {
    width: 100%;
    height: 18px;
    border-radius: 999px;
    overflow: hidden;
    border: 1px solid rgba(148,163,184,.16);
    background: rgba(255,255,255,.04);
    margin-top: 0;
}

.vu-bar {
    height: 100%;
    width: 5%;
    border-radius: inherit;
    background: linear-gradient(90deg, #45e4a4 0%, #63dcff 62%, #ffd166 84%, #ff758f 100%);
    box-shadow: 0 0 18px rgba(89,216,255,.24);
    transition: width .25s ease-in-out;
}

.vu-active {
    box-shadow: 0 0 20px rgba(255,117,143,.30);
}

.qf-tx-info {
    margin-top: 13px;
    min-height: 44px;
    color: #c3d4e4;
    font-size: .84rem;
    line-height: 1.65;
}

.qf-tx-info strong {
    color: #f3fbff;
}

.qf-live-footer {
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
    margin-top: 14px;
    color: var(--qf-muted);
    font-size: .71rem;
}

.qf-live-footer strong {
    margin-left: 5px;
    color: #cfe1ef;
    font-weight: 700;
}

.qf-resource-list {
    display: grid;
    gap: 18px;
}

.qf-resource-top {
    justify-content: space-between;
    margin-bottom: 7px;
    font-size: .78rem;
}

.qf-resource-top span { color: var(--qf-muted); }
.qf-resource-top strong { color: var(--qf-text); }

.qf-progress {
    height: 7px;
    border-radius: 999px;
    background: rgba(255,255,255,.045);
}

.qf-progress .progress-bar {
    border-radius: 999px;
    background: linear-gradient(90deg, var(--qf-accent), var(--qf-accent-2));
}

.qf-resource small {
    display: block;
    margin-top: 7px;
    color: var(--qf-muted);
    font-size: .67rem;
}

.qf-panel-head-table {
    margin-bottom: 10px;
}

.qf-count-chip,
.qf-history-limit {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    border: 1px solid var(--qf-border);
    border-radius: 999px;
    padding: 6px 9px;
    background: rgba(255,255,255,.025);
    color: var(--qf-muted);
    font-size: .7rem;
}

.qf-count-chip strong {
    color: var(--qf-accent-2);
}

.qf-history-limit::before {
    color: var(--qf-muted);
    font-size: .58rem;
    letter-spacing: .12em;
}

html[lang="es"] .qf-history-limit::before {
    content: "ÚLTIMAS";
}

html[lang="en"] .qf-history-limit::before {
    content: "LAST";
}

.qf-table-wrap {
    border-radius: 12px;
    overflow: hidden;
    border: 1px solid rgba(148,163,184,.10);
}

.qf-history-wrap {
    max-height: 430px;
    overflow-y: auto;
}

.qf-table {
    font-size: .79rem;
}

.qf-table > :not(caption) > * > * {
    padding: .68rem .75rem;
}

.qf-table thead th {
    position: sticky;
    top: 0;
    z-index: 2;
    color: #9fb4c7;
    background: #0b1929;
    border-bottom-color: rgba(148,163,184,.14);
    text-transform: uppercase;
    font-size: .62rem;
    letter-spacing: .08em;
    font-weight: 800;
    white-space: nowrap;
}

.qf-callsign-link {
    color: #7de4ff;
    text-decoration: none;
    font-weight: 800;
}

.qf-callsign-link:hover {
    color: #c6f5ff;
    text-decoration: underline;
}

.qf-callsign-dot {
    width: 6px;
    height: 6px;
    display: inline-block;
    margin-right: 7px;
    border-radius: 50%;
    background: var(--qf-success);
    box-shadow: 0 0 8px rgba(74,222,128,.36);
    vertical-align: middle;
}

.qf-mono {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: .75rem;
}

.qf-tg-chip {
    display: inline-block;
    padding: 3px 7px;
    border-radius: 7px;
    background: rgba(89,216,255,.07);
    border: 1px solid rgba(89,216,255,.13);
    color: #8ce9ff;
    font-size: .68rem;
    font-weight: 800;
}

/* ------------------------------------------------------------------
   Footer compartido
   ------------------------------------------------------------------ */
.qf-footer {
    max-width: 1540px;
    margin: 18px auto 0;
    padding: 22px clamp(16px, 3vw, 42px) 30px;
    color: #71879b;
    font-size: .68rem;
    text-align: center;
    line-height: 1.7;
}

.qf-footer strong {
    color: #9eb3c6;
}

.qf-footer-brand {
    color: #d9f7ff !important;
}

/* ------------------------------------------------------------------
   Login responsive heredado
   ------------------------------------------------------------------ */
.login-page {
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
}

.login-wrap {
    width: 100%;
    max-width: 380px;
}

.login-card {
    width: 100%;
    max-width: 100% !important;
    padding: 18px !important;
}

.login-card .title-module {
    font-size: 1.1rem !important;
    line-height: 1.2;
    margin-bottom: 6px;
}

.login-card .small-label { font-size: .85rem; }
.login-card .form-control { padding: .55rem .75rem; font-size: .95rem; }
.login-card .btn { padding: .6rem .9rem; font-size: .95rem; }

/* ------------------------------------------------------------------
   Responsive
   ------------------------------------------------------------------ */

/*
 * Al apilar TX en vivo y Recursos por debajo de XL mantenemos
 * exactamente los mismos 18 px de separación vertical.
 */
@media (max-width: 1199.98px) {
    .qf-section-row > [class*="col-"] + [class*="col-"] {
        margin-top: 18px;
    }
}

@media (max-width: 1100px) {
    .qf-hero {
        grid-template-columns: 1fr;
    }

    .qf-hero-status-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .qf-mini-status {
        align-items: flex-start;
        flex-direction: column;
        gap: 4px;
    }

    .qf-mini-status strong {
        text-align: left;
    }
}

@media (max-width: 850px) {
    .qf-stat-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .qf-nav-spacer {
        display: none;
    }

    .qf-live-stage {
        grid-template-columns: 82px 1fr;
        gap: 15px;
    }

    .qf-live-orbit {
        width: 76px;
        height: 76px;
    }
}

@media (max-width: 650px) {
    .qsoforge-dashboard {
        background-attachment: scroll;
        background-position: 45% top;
    }
    .qf-topbar-inner {
        min-height: auto;
        padding: 12px 0;
        align-items: flex-start;
        flex-direction: column;
    }

    .qf-topbar-actions {
        width: 100%;
        justify-content: space-between;
    }

    .qf-brand-subtitle {
        display: none;
    }

    .qf-nav {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .qf-nav-link {
        justify-content: flex-start;
    }

    .qf-hero-main,
    .qf-hero-status,
    .qf-panel {
        border-radius: 16px;
    }

    .qf-hero-status-grid {
        grid-template-columns: 1fr;
    }

    .qf-instance-row {
        align-items: flex-start;
    }

    .qf-instance-logo {
        width: 56px;
        height: 56px;
    }

    .qf-stat-grid {
        grid-template-columns: 1fr 1fr;
        gap: 9px;
    }

    .qf-stat-card {
        min-height: 86px;
        padding: 13px;
        gap: 10px;
    }

    .qf-stat-icon {
        width: 36px;
        height: 36px;
        flex-basis: 36px;
    }

    .qf-stat-value {
        font-size: 1.18rem;
    }

    .qf-stat-value-time {
        font-size: .96rem;
    }

    .qf-stat-value-level {
        font-size: .84rem;
    }

    .qf-live-stage {
        display: block;
        min-height: 0;
    }

    .qf-live-orbit {
        display: none;
    }

    .qf-panel-head {
        align-items: flex-start;
    }

    .qf-panel-head-table {
        flex-wrap: wrap;
    }

    .qf-table {
        min-width: 620px;
    }

    .header-title img {
        height: 70px !important;
    }

    .header-title div div:first-child {
        font-size: 1.5rem !important;
    }
}

@media (max-width: 360px) {
    .login-wrap { max-width: 320px; }
    .login-card { padding: 14px !important; }
    .login-card .title-module { font-size: 1rem !important; }

    .qf-stat-grid {
        grid-template-columns: 1fr;
    }
}

/* ==================================================================
   QSOForge NXDN · Personalización
   Este bloque está aislado de la portada congelada.
   ================================================================== */

.qsoforge-admin-page .qf-nav-shell { padding-top: 16px; }

.qf-admin-session { white-space: nowrap; }

.qf-admin-logout {
    min-height: 34px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 6px 11px;
    border: 1px solid rgba(251,113,133,.22);
    border-radius: 999px;
    background: rgba(251,113,133,.055);
    color: #ff9aad;
    text-decoration: none;
    font-size: .74rem;
    font-weight: 750;
    transition: .15s ease;
}
.qf-admin-logout:hover {
    color: #ffdbe1;
    border-color: rgba(251,113,133,.38);
    background: rgba(251,113,133,.11);
    transform: translateY(-1px);
}

.qf-admin-hero {
    min-height: 220px;
    margin-top: 18px;
    display: grid;
    grid-template-columns: minmax(0,1.4fr) minmax(240px,.55fr);
    overflow: hidden;
    border: 1px solid rgba(192,132,252,.18);
    border-radius: 20px;
    background:
        radial-gradient(circle at 82% 18%, rgba(192,132,252,.11), transparent 24rem),
        linear-gradient(145deg, rgba(15,31,51,.90), rgba(6,17,30,.88));
    box-shadow: var(--qf-shadow);
    backdrop-filter: blur(12px);
}
.qf-admin-hero-copy {
    padding: clamp(24px,4vw,46px);
    align-self: center;
}
.qf-admin-kicker,
.qf-admin-section-tag,
.qf-login-kicker {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: #c9a8ff;
    font-size: .67rem;
    font-weight: 900;
    letter-spacing: .13em;
    text-transform: uppercase;
}
.qf-admin-hero h1 {
    margin: 10px 0 8px;
    color: #f6fbff;
    font-size: clamp(2rem,4vw,3.3rem);
    line-height: 1;
    font-weight: 900;
    letter-spacing: -.04em;
}
.qf-admin-hero p {
    max-width: 780px;
    margin: 0;
    color: #a6bbcf;
    font-size: .94rem;
    line-height: 1.65;
}
.qf-admin-module-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 22px;
}
.qf-admin-module-chips span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-height: 31px;
    padding: 5px 10px;
    border: 1px solid rgba(148,163,184,.13);
    border-radius: 999px;
    background: rgba(255,255,255,.025);
    color: #9cb0c4;
    font-size: .71rem;
    font-weight: 750;
}
.qf-admin-module-chips .is-visual i { color: #c084fc; }
.qf-admin-module-chips .is-dvref i { color: #58dcff; }
.qf-admin-module-chips .is-guard i { color: #4ade80; }
.qf-admin-module-chips .is-telegram i { color: #60a5fa; }

.qf-admin-hero-art {
    min-height: 220px;
    display: grid;
    place-items: center;
    position: relative;
    background:
        linear-gradient(90deg, transparent, rgba(89,216,255,.025)),
        radial-gradient(circle at center, rgba(192,132,252,.08), transparent 55%);
}
.qf-admin-hero-art::before {
    content: "";
    position: absolute;
    inset: 14% 10%;
    opacity: .17;
    background-image:
        linear-gradient(rgba(255,255,255,.04) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,.04) 1px, transparent 1px);
    background-size: 24px 24px;
    mask-image: radial-gradient(circle at center,#000 15%,transparent 70%);
}
.qf-admin-radar {
    width: 150px;
    height: 150px;
    display: grid;
    place-items: center;
    position: relative;
}
.qf-admin-radar-core {
    width: 64px;
    height: 64px;
    display: grid;
    place-items: center;
    position: relative;
    z-index: 3;
    border: 1px solid rgba(192,132,252,.32);
    border-radius: 18px;
    color: #d8c0ff;
    background: rgba(192,132,252,.08);
    box-shadow: 0 0 34px rgba(192,132,252,.12);
    font-size: 1.55rem;
}
.qf-admin-radar-ring {
    position: absolute;
    border: 1px solid rgba(89,216,255,.17);
    border-radius: 50%;
}
.qf-admin-radar-ring.ring-one { width: 104px; height: 104px; }
.qf-admin-radar-ring.ring-two {
    width: 150px;
    height: 150px;
    border-style: dashed;
    opacity: .65;
}

.qf-admin-main { padding-top: 18px; }
.qf-admin-grid {
    display: grid;
    grid-template-columns: repeat(2,minmax(0,1fr));
    gap: 18px;
}
.qf-admin-span-all { grid-column: 1 / -1; }

.qf-admin-panel {
    min-width: 0;
    overflow: hidden;
    border: 1px solid rgba(148,163,184,.14);
    border-radius: 18px;
    padding: 20px;
    background: linear-gradient(145deg, rgba(13,29,48,.88), rgba(7,18,31,.88));
    box-shadow: 0 16px 36px rgba(0,0,0,.19);
    backdrop-filter: blur(11px);
}
.qf-admin-panel-identity { border-top-color: rgba(192,132,252,.40); }
.qf-admin-panel-dvref { border-top-color: rgba(88,220,255,.40); }
.qf-admin-panel-guard { border-top-color: rgba(74,222,128,.40); }
.qf-admin-panel-telegram { border-top-color: rgba(96,165,250,.40); }

.qf-admin-panel-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 18px;
    margin-bottom: 18px;
}
.qf-admin-panel-head-status { align-items: center; }
.qf-admin-panel-title {
    display: flex;
    align-items: flex-start;
    gap: 13px;
    min-width: 0;
}
.qf-admin-panel-icon {
    width: 42px;
    height: 42px;
    flex: 0 0 42px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(148,163,184,.16);
    border-radius: 12px;
    background: rgba(255,255,255,.025);
    font-size: 1.08rem;
}
.qf-admin-panel-identity .qf-admin-panel-icon { color:#c084fc; border-color:rgba(192,132,252,.22); background:rgba(192,132,252,.06); }
.qf-admin-panel-dvref .qf-admin-panel-icon { color:#58dcff; border-color:rgba(88,220,255,.22); background:rgba(88,220,255,.06); }
.qf-admin-panel-guard .qf-admin-panel-icon { color:#4ade80; border-color:rgba(74,222,128,.22); background:rgba(74,222,128,.06); }
.qf-admin-panel-telegram .qf-admin-panel-icon { color:#60a5fa; border-color:rgba(96,165,250,.22); background:rgba(96,165,250,.06); }

.qf-admin-panel-title h2 {
    margin: 3px 0 0;
    color: #edf7ff;
    font-size: 1.05rem;
    font-weight: 850;
}
.qf-admin-panel-title p {
    margin: 5px 0 0;
    color: #849bb0;
    font-size: .76rem;
    line-height: 1.5;
}
.qf-admin-panel-identity .qf-admin-section-tag { color:#c9a8ff; }
.qf-admin-panel-dvref .qf-admin-section-tag { color:#7ce6ff; }
.qf-admin-panel-guard .qf-admin-section-tag { color:#76e99b; }
.qf-admin-panel-telegram .qf-admin-section-tag { color:#8ebdff; }

.qf-admin-panel-intro {
    margin: -7px 0 18px 55px;
    color: #8198ad;
    font-size: .76rem;
    line-height: 1.55;
}

.qf-admin-form { display:grid; gap:14px; }
.qf-form-label {
    display:block;
    margin-bottom:6px;
    color:#91a8bd;
    font-size:.71rem;
    font-weight:800;
    letter-spacing:.035em;
}
.qsoforge-admin-page .form-control,
.qsoforge-admin-page .input-group-text,
.qf-login-page .form-control {
    min-height:42px;
    border-color:rgba(148,163,184,.15);
    background:rgba(3,12,22,.58);
    color:#eef8ff;
    box-shadow:none;
}
.qsoforge-admin-page .form-control:focus,
.qf-login-page .form-control:focus {
    border-color:rgba(89,216,255,.42);
    background:rgba(3,12,22,.78);
    color:#fff;
    box-shadow:0 0 0 3px rgba(89,216,255,.07);
}
.qsoforge-admin-page .form-control::placeholder,
.qf-login-page .form-control::placeholder { color:#50667a; }
.qsoforge-admin-page .input-group-text { color:#8ca3b8; }
.qsoforge-admin-page input[type="file"].form-control { padding-top:8px; }
.qsoforge-admin-page input[type="file"]::file-selector-button {
    border:0;
    border-right:1px solid rgba(148,163,184,.14);
    margin-right:12px;
    background:rgba(89,216,255,.07);
    color:#a9eaff;
}

.qf-admin-field-hint,
.qf-admin-subpanel-hint {
    color:#70879b;
    font-size:.69rem;
    line-height:1.5;
}
.qf-admin-logo-block {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:16px;
    padding:12px;
    border:1px solid rgba(148,163,184,.12);
    border-radius:13px;
    background:rgba(255,255,255,.018);
}
.qf-admin-logo-preview {
    width:104px;
    height:68px;
    display:grid;
    place-items:center;
    flex:0 0 104px;
    overflow:hidden;
    border:1px solid rgba(148,163,184,.13);
    border-radius:11px;
    background:rgba(1,8,15,.50);
}
.qf-admin-logo-preview img {
    max-width:92px;
    max-height:58px;
    object-fit:contain;
}

.qf-btn-primary {
    min-height:42px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    border:1px solid rgba(89,216,255,.23);
    border-radius:11px;
    padding:9px 14px;
    background:rgba(89,216,255,.09);
    color:#b9efff;
    font-size:.78rem;
    font-weight:800;
    transition:.15s ease;
}
.qf-btn-primary:hover {
    transform:translateY(-1px);
    color:#effcff;
    background:rgba(89,216,255,.14);
    border-color:rgba(89,216,255,.40);
}
.qf-btn-visual { border-color:rgba(192,132,252,.25); background:rgba(192,132,252,.08); color:#d9c3ff; }
.qf-btn-visual:hover { border-color:rgba(192,132,252,.42); background:rgba(192,132,252,.13); }
.qf-btn-dvref { border-color:rgba(88,220,255,.25); }
.qf-btn-guard { border-color:rgba(74,222,128,.25); background:rgba(74,222,128,.07); color:#aaf3c0; }
.qf-btn-guard:hover { border-color:rgba(74,222,128,.42); background:rgba(74,222,128,.12); }
.qf-btn-telegram { border-color:rgba(96,165,250,.25); background:rgba(96,165,250,.07); color:#afd0ff; }
.qf-btn-telegram:hover { border-color:rgba(96,165,250,.42); background:rgba(96,165,250,.12); }

.qf-admin-state {
    display:inline-flex;
    align-items:center;
    gap:7px;
    flex:0 0 auto;
    border:1px solid rgba(148,163,184,.13);
    border-radius:999px;
    padding:5px 9px;
    font-size:.66rem;
    font-weight:900;
    letter-spacing:.08em;
}
.qf-admin-state span { width:7px; height:7px; border-radius:50%; }
.qf-admin-state.is-active { border-color:rgba(74,222,128,.23); background:rgba(74,222,128,.06); color:#9df6bb; }
.qf-admin-state.is-active span { background:#4ade80; box-shadow:0 0 9px rgba(74,222,128,.5); }
.qf-admin-state.is-disabled { border-color:rgba(148,163,184,.18); background:rgba(148,163,184,.05); color:#8da0b2; }
.qf-admin-state.is-disabled span { background:#708499; }

.qf-guard-form { display:grid; gap:18px; }
.qf-guard-grid {
    display:grid;
    grid-template-columns:minmax(190px,1fr) repeat(3,minmax(150px,.85fr)) minmax(190px,1fr);
    gap:12px;
    align-items:stretch;
}
.qf-guard-field,
.qf-guard-switch-card {
    min-width:0;
    min-height:86px;
    padding:12px;
    border:1px solid rgba(148,163,184,.11);
    border-radius:13px;
    background:rgba(255,255,255,.018);
}
.qf-guard-field {
    display:flex;
    flex-direction:column;
    justify-content:center;
}
.qf-guard-switch-card {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
}
.qf-guard-switch-copy {
    display:flex;
    align-items:center;
    gap:10px;
    min-width:0;
}
.qf-guard-field-icon {
    width:34px;
    height:34px;
    flex:0 0 34px;
    display:grid;
    place-items:center;
    border-radius:10px;
    color:#72e796;
    background:rgba(74,222,128,.06);
}
.qf-guard-switch-copy strong { display:block; color:#dceaf5; font-size:.75rem; }
.qf-guard-switch-copy span:not(.qf-guard-field-icon) { display:block; margin-top:2px; color:#667f95; font-size:.66rem; }
.qf-switch { flex:0 0 auto; margin:0; }

.qsoforge-admin-page .form-check-input {
    cursor:pointer;
    background-color:rgba(3,12,22,.72);
    border-color:rgba(148,163,184,.23);
}
.qsoforge-admin-page .form-check-input:checked {
    background-color:#39b967;
    border-color:#39b967;
}
.qsoforge-admin-page .form-check-input:focus {
    box-shadow:0 0 0 3px rgba(74,222,128,.08);
}
.qf-guard-footer {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:18px;
}
.qf-admin-hot-note {
    display:flex;
    align-items:center;
    gap:9px;
    color:#8199ad;
    font-size:.71rem;
    line-height:1.45;
}
.qf-admin-hot-note i { color:#fbbf24; }

.qf-admin-telegram-grid {
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(0,1fr);
    gap:16px;
}
.qf-admin-subpanel {
    min-width:0;
    padding:16px;
    border:1px solid rgba(148,163,184,.11);
    border-radius:14px;
    background:rgba(255,255,255,.016);
}
.qf-admin-subpanel-title {
    display:flex;
    align-items:center;
    gap:8px;
    margin-bottom:14px;
    color:#dbeeff;
    font-size:.81rem;
    font-weight:850;
}
.qf-admin-subpanel-title i { color:#77adff; }
.qf-admin-subpanel-hint { margin:-5px 0 13px; }

.qf-admin-external-link {
    min-height:38px;
    margin-top:12px;
    display:inline-flex;
    align-items:center;
    gap:8px;
    color:#91bcff;
    text-decoration:none;
    font-size:.72rem;
    font-weight:750;
}
.qf-admin-external-link:hover { color:#c6dcff; }

.qf-admin-action-stack { display:grid; gap:9px; }
.qf-admin-action-stack form { margin:0; }
.qf-admin-action {
    width:100%;
    min-height:42px;
    display:grid;
    grid-template-columns:24px minmax(0,1fr) 18px;
    align-items:center;
    gap:8px;
    border:1px solid rgba(148,163,184,.12);
    border-radius:11px;
    padding:8px 11px;
    background:rgba(255,255,255,.018);
    color:#a7b9c9;
    text-align:left;
    font-size:.72rem;
    font-weight:750;
    transition:.15s ease;
}
.qf-admin-action:hover {
    transform:translateY(-1px);
    color:#eaf6ff;
    background:rgba(255,255,255,.035);
}
.qf-admin-action > i:first-child { font-size:.95rem; }
.qf-admin-action > i:last-child { color:#556b80; font-size:.7rem; }
.qf-admin-action.is-success > i:first-child { color:#4ade80; }
.qf-admin-action.is-info > i:first-child { color:#58dcff; }
.qf-admin-action.is-warning > i:first-child { color:#fbbf24; }
.qf-admin-action.is-primary > i:first-child { color:#60a5fa; }

.qf-admin-log-chip {
    margin-top:13px;
    display:flex;
    align-items:flex-start;
    gap:9px;
    padding:10px 11px;
    border:1px solid rgba(148,163,184,.10);
    border-radius:11px;
    background:rgba(1,8,15,.28);
    color:#7e94a7;
}
.qf-admin-log-chip > i { margin-top:2px; color:#58dcff; }
.qf-admin-log-chip span,
.qf-admin-log-chip strong { display:block; }
.qf-admin-log-chip span { font-size:.63rem; text-transform:uppercase; letter-spacing:.07em; }
.qf-admin-log-chip strong {
    margin-top:3px;
    color:#a8bac9;
    font-size:.68rem;
    font-weight:700;
    overflow-wrap:anywhere;
}

.qf-admin-alert {
    margin-top:18px;
    display:flex;
    align-items:center;
    gap:10px;
    border:1px solid rgba(148,163,184,.13);
    border-radius:13px;
    padding:11px 13px;
    font-size:.76rem;
    font-weight:750;
    backdrop-filter:blur(10px);
}
.qf-admin-alert-success { border-color:rgba(74,222,128,.23); background:rgba(74,222,128,.07); color:#aaf3c0; }
.qf-admin-alert-error { border-color:rgba(251,113,133,.24); background:rgba(251,113,133,.07); color:#ffacba; }

/* Login QSOForge */
.qf-login-page { min-height:100dvh; }
.qf-login-shell { min-height:100dvh; }
.qf-login-stage {
    min-height:100dvh;
    display:grid;
    place-items:center;
    padding:24px;
}
.qf-login-panel {
    width:min(100%,430px);
    position:relative;
    overflow:hidden;
    border:1px solid rgba(192,132,252,.20);
    border-radius:20px;
    padding:24px;
    background:
        radial-gradient(circle at 85% 0%, rgba(192,132,252,.10), transparent 18rem),
        linear-gradient(145deg, rgba(13,29,48,.94), rgba(5,15,27,.94));
    box-shadow:0 28px 70px rgba(0,0,0,.38);
    backdrop-filter:blur(14px);
}
.qf-login-brand { display:flex; align-items:center; gap:12px; }
.qf-login-language { position:absolute; top:22px; right:22px; }
.qf-login-kicker { color:#d2b5ff; }
.qf-login-icon {
    width:58px;
    height:58px;
    margin:30px 0 15px;
    display:grid;
    place-items:center;
    border:1px solid rgba(192,132,252,.24);
    border-radius:16px;
    background:rgba(192,132,252,.07);
    color:#d1b2ff;
    font-size:1.4rem;
}
.qf-login-panel h1 { margin:0; color:#f2f8ff; font-size:1.55rem; font-weight:900; letter-spacing:-.025em; }
.qf-login-panel > p { margin:8px 0 20px; color:#8299ad; font-size:.78rem; line-height:1.55; }
.qf-login-form { display:grid; gap:13px; }
.qf-input-icon { position:relative; }
.qf-input-icon > i {
    position:absolute;
    z-index:2;
    left:13px;
    top:50%;
    transform:translateY(-50%);
    color:#60798f;
}
.qf-input-icon .form-control { padding-left:38px; }
.qf-login-back {
    margin-top:16px;
    display:inline-flex;
    align-items:center;
    gap:7px;
    color:#7f96aa;
    text-decoration:none;
    font-size:.72rem;
    font-weight:750;
}
.qf-login-back:hover { color:#c1d4e5; }

@media (max-width:1180px) {
    .qf-guard-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .qf-guard-switch-card:last-child { grid-column:span 2; }
}
@media (max-width:900px) {
    .qf-admin-hero { grid-template-columns:1fr; }
    .qf-admin-hero-art { display:none; }
    .qf-admin-grid,
    .qf-admin-telegram-grid { grid-template-columns:1fr; }
    .qf-admin-span-all { grid-column:auto; }
}
@media (max-width:650px) {
    .qf-admin-hero-copy { padding:22px 18px; }
    .qf-admin-hero h1 { font-size:2rem; }
    .qf-admin-panel { padding:16px; }
    .qf-admin-panel-head,
    .qf-admin-panel-head-status,
    .qf-guard-footer {
        align-items:flex-start;
        flex-direction:column;
    }
    .qf-admin-panel-intro { margin-left:0; }
    .qf-guard-grid { grid-template-columns:1fr; }
    .qf-guard-switch-card:last-child { grid-column:auto; }
    .qf-admin-logo-block { align-items:flex-start; flex-direction:column; }
    .qf-login-stage { padding:14px; }
    .qf-login-panel { padding:18px; }
    .qf-login-language {
        position:static;
        width:max-content;
        margin-top:16px;
    }
}

/* ==================================================================
   QSOForge NXDN · Configuración
   Extensión aislada; no altera Portada ni Personalización.
   ================================================================== */

.qsoforge-config-page .qf-admin-hero {
    border-color: rgba(251,191,36,.18);
    background:
        radial-gradient(circle at 82% 18%, rgba(251,191,36,.09), transparent 24rem),
        linear-gradient(145deg, rgba(15,31,51,.90), rgba(6,17,30,.88));
}

.qsoforge-config-page .qf-admin-kicker {
    color: #ffd76a;
}

.qsoforge-config-page .qf-admin-module-chips .qf-config-chip-reflector i { color:#58dcff; }
.qsoforge-config-page .qf-admin-module-chips .qf-config-chip-system i { color:#fbbf24; }
.qsoforge-config-page .qf-admin-module-chips .qf-config-chip-network i { color:#60a5fa; }
.qsoforge-config-page .qf-admin-module-chips .qf-config-chip-security i { color:#fb7185; }

.qf-config-refresh-pill {
    min-height: 34px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 6px 10px;
    border: 1px solid rgba(251,191,36,.18);
    border-radius: 999px;
    background: rgba(251,191,36,.045);
    color: #9d8d62;
    font-size: .69rem;
    font-weight: 750;
    white-space: nowrap;
}

.qf-config-refresh-pill i {
    color: #fbbf24;
}

.qf-config-refresh-pill strong {
    color: #e9c861;
    font-size: .68rem;
}

.qf-config-hero .qf-admin-hero-art {
    background:
        linear-gradient(90deg, transparent, rgba(251,191,36,.018)),
        radial-gradient(circle at center, rgba(251,191,36,.075), transparent 55%);
}

.qf-config-hero-console {
    width: 178px;
    height: 132px;
    position: relative;
    display: grid;
    place-items: center;
    border: 1px solid rgba(251,191,36,.12);
    border-radius: 20px;
    background:
        linear-gradient(rgba(255,255,255,.018) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,.018) 1px, transparent 1px),
        rgba(2,10,18,.24);
    background-size: 18px 18px;
}

.qf-config-console-core {
    width: 58px;
    height: 58px;
    display: grid;
    place-items: center;
    position: relative;
    z-index: 3;
    border: 1px solid rgba(251,191,36,.28);
    border-radius: 17px;
    background: rgba(251,191,36,.065);
    color: #ffd76a;
    box-shadow: 0 0 32px rgba(251,191,36,.08);
    font-size: 1.35rem;
}

.qf-config-console-line {
    position: absolute;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(88,220,255,.28), transparent);
}

.qf-config-console-line.line-one {
    width: 135px;
    transform: rotate(18deg);
}

.qf-config-console-line.line-two {
    width: 128px;
    transform: rotate(-24deg);
}

.qf-config-console-dot {
    width: 7px;
    height: 7px;
    position: absolute;
    border-radius: 50%;
    background: #58dcff;
    box-shadow: 0 0 10px rgba(88,220,255,.45);
}

.qf-config-console-dot.dot-one { top:22px; left:31px; }
.qf-config-console-dot.dot-two { right:29px; top:36px; background:#fbbf24; box-shadow:0 0 10px rgba(251,191,36,.42); }
.qf-config-console-dot.dot-three { right:42px; bottom:24px; background:#4ade80; box-shadow:0 0 10px rgba(74,222,128,.40); }

.qf-config-panel-reflector { border-top-color: rgba(88,220,255,.40); }
.qf-config-panel-system { border-top-color: rgba(251,191,36,.40); }
.qf-config-panel-network { border-top-color: rgba(96,165,250,.40); }
.qf-config-panel-security { border-top-color: rgba(251,113,133,.40); }

.qf-config-panel-reflector .qf-admin-panel-icon {
    color:#58dcff;
    border-color:rgba(88,220,255,.22);
    background:rgba(88,220,255,.06);
}
.qf-config-panel-system .qf-admin-panel-icon {
    color:#fbbf24;
    border-color:rgba(251,191,36,.22);
    background:rgba(251,191,36,.06);
}
.qf-config-panel-network .qf-admin-panel-icon {
    color:#60a5fa;
    border-color:rgba(96,165,250,.22);
    background:rgba(96,165,250,.06);
}
.qf-config-panel-security .qf-admin-panel-icon {
    color:#fb7185;
    border-color:rgba(251,113,133,.22);
    background:rgba(251,113,133,.06);
}

.qf-config-panel-reflector .qf-admin-section-tag { color:#7ce6ff; }
.qf-config-panel-system .qf-admin-section-tag { color:#ffd76a; }
.qf-config-panel-network .qf-admin-section-tag { color:#8ebdff; }
.qf-config-panel-security .qf-admin-section-tag { color:#ff9aad; }

.qf-config-form-grid {
    display: grid;
    grid-template-columns: repeat(2,minmax(0,1fr));
    gap: 13px;
}

.qf-config-span-two {
    grid-column: 1 / -1;
}

.qf-btn-config {
    border-color: rgba(251,191,36,.25);
    background: rgba(251,191,36,.07);
    color: #f4d981;
}

.qf-btn-config:hover {
    border-color: rgba(251,191,36,.42);
    background: rgba(251,191,36,.12);
    color: #fff0ba;
}

.qf-config-system-grid {
    display: grid;
    grid-template-columns: repeat(2,minmax(0,1fr));
    gap: 10px;
}

.qf-config-readout {
    min-width: 0;
    padding: 11px 12px;
    border: 1px solid rgba(148,163,184,.105);
    border-radius: 12px;
    background: rgba(255,255,255,.016);
}

.qf-config-readout span,
.qf-config-readout strong {
    display: block;
}

.qf-config-readout span {
    display: flex;
    align-items: center;
    gap: 7px;
    color: #71889d;
    font-size: .65rem;
    font-weight: 750;
    letter-spacing: .025em;
}

.qf-config-readout span i {
    color: #f2c94e;
}

.qf-config-readout strong {
    margin-top: 5px;
    color: #dceaf5;
    font-size: .76rem;
    font-weight: 750;
    line-height: 1.45;
    overflow-wrap: anywhere;
}

.qf-config-log {
    margin-top: 12px;
    overflow: hidden;
    border: 1px solid rgba(148,163,184,.11);
    border-radius: 12px;
    background: rgba(1,7,13,.36);
}

.qf-config-log-title {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 11px;
    border-bottom: 1px solid rgba(148,163,184,.08);
    color: #8198ad;
    font-size: .67rem;
    font-weight: 800;
}

.qf-config-log-title i {
    color: #58dcff;
}

.qf-config-log pre {
    max-height: 148px;
    margin: 0;
    padding: 11px;
    overflow: auto;
    background: transparent;
    color: #91a9bd;
    font-size: .65rem;
    line-height: 1.55;
    white-space: pre-wrap;
}

.qf-config-service-actions {
    display: grid;
    grid-template-columns: repeat(3,minmax(0,1fr));
    gap: 9px;
    margin-top: 14px;
}

.qf-config-service-actions form,
.qf-config-reboot-form {
    margin: 0;
}

.qf-config-action,
.qf-config-reboot {
    width: 100%;
    min-height: 40px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    border-radius: 10px;
    font-size: .72rem;
    font-weight: 800;
    transition: .15s ease;
}

.qf-config-action:hover,
.qf-config-reboot:hover {
    transform: translateY(-1px);
}

.qf-config-action.is-start {
    border: 1px solid rgba(74,222,128,.24);
    background: rgba(74,222,128,.065);
    color: #9df6bb;
}

.qf-config-action.is-restart {
    border: 1px solid rgba(251,191,36,.24);
    background: rgba(251,191,36,.065);
    color: #f5d778;
}

.qf-config-action.is-stop {
    border: 1px solid rgba(251,113,133,.24);
    background: rgba(251,113,133,.065);
    color: #ff9aad;
}

.qf-config-reboot-form {
    margin-top: 9px;
}

.qf-config-reboot {
    border: 1px solid rgba(251,113,133,.18);
    background: rgba(251,113,133,.035);
    color: #c6818d;
}

.qf-config-network-layout {
    display: grid;
    grid-template-columns: minmax(260px,.72fr) minmax(0,1.28fr);
    gap: 16px;
}

.qf-config-current-network {
    display: grid;
    gap: 10px;
}

.qf-config-current-network .qf-config-readout span {
    color: #7f98ae;
}

.qf-config-current-network .qf-config-readout strong {
    color: #d7ebff;
    font-size: .86rem;
}

.qf-config-warning {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    margin-bottom: 13px;
    padding: 10px 11px;
    border: 1px solid rgba(251,191,36,.16);
    border-radius: 11px;
    background: rgba(251,191,36,.035);
    color: #a99762;
    font-size: .68rem;
    line-height: 1.5;
}

.qf-config-warning i {
    margin-top: 1px;
    color: #fbbf24;
}

.qf-btn-network {
    border-color: rgba(96,165,250,.25);
    background: rgba(96,165,250,.07);
    color: #afd0ff;
}

.qf-btn-network:hover {
    border-color: rgba(96,165,250,.42);
    background: rgba(96,165,250,.12);
    color: #d8e8ff;
}

.qf-config-net-note {
    margin-top: 12px;
}

.qf-admin-alert-warning {
    border-color: rgba(251,191,36,.23);
    background: rgba(251,191,36,.07);
    color: #e3c977;
}

.qf-config-security-layout {
    display: grid;
    grid-template-columns: minmax(240px,.85fr) minmax(0,1.15fr);
    gap: 18px;
    align-items: center;
}

.qf-config-security-copy {
    display: flex;
    align-items: center;
    gap: 12px;
}

.qf-config-security-icon {
    width: 42px;
    height: 42px;
    flex: 0 0 42px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(251,113,133,.20);
    border-radius: 12px;
    background: rgba(251,113,133,.055);
    color: #ff91a4;
}

.qf-config-security-copy strong,
.qf-config-security-copy span {
    display: block;
}

.qf-config-security-copy strong {
    color: #e7f1fa;
    font-size: .78rem;
}

.qf-config-security-copy span {
    margin-top: 4px;
    color: #72899d;
    font-size: .68rem;
    line-height: 1.45;
}

.qf-config-password-form {
    display: grid;
    grid-template-columns: minmax(0,1fr) auto;
    gap: 10px;
}

.qf-btn-security {
    min-width: 180px;
    border-color: rgba(251,113,133,.24);
    background: rgba(251,113,133,.065);
    color: #ffabba;
}

.qf-btn-security:hover {
    border-color: rgba(251,113,133,.42);
    background: rgba(251,113,133,.11);
    color: #ffd8df;
}

.qf-login-panel-config {
    border-color: rgba(251,191,36,.19);
    background:
        radial-gradient(circle at 85% 0%, rgba(251,191,36,.09), transparent 18rem),
        linear-gradient(145deg, rgba(13,29,48,.94), rgba(5,15,27,.94));
}

.qf-login-panel-config .qf-login-kicker {
    color: #ffd76a;
}

.qf-login-icon-config {
    border-color: rgba(251,191,36,.22);
    background: rgba(251,191,36,.06);
    color: #ffd76a;
}

@media (max-width: 900px) {
    .qf-config-network-layout,
    .qf-config-security-layout {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 650px) {
    .qf-config-form-grid,
    .qf-config-system-grid,
    .qf-config-service-actions,
    .qf-config-password-form {
        grid-template-columns: 1fr;
    }

    .qf-config-span-two {
        grid-column: auto;
    }

    .qf-btn-security {
        min-width: 0;
    }

    .qf-config-refresh-pill {
        display: none;
    }
}

/* ==================================================================
   QSOForge NXDN · Configuración v1.4
   Sistema: resumen más limpio + visor de log ampliado.
   ================================================================== */

.qsoforge-config-page .qf-config-panel-system .qf-config-system-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.qsoforge-config-page .qf-config-log-expanded {
    margin-top: 14px;
}

.qsoforge-config-page .qf-config-log-expanded pre {
    min-height: 230px;
    max-height: 320px;
    padding: 14px;
    font-size: .68rem;
    line-height: 1.62;
}

@media (max-width: 650px) {
    .qsoforge-config-page .qf-config-log-expanded pre {
        min-height: 190px;
        max-height: 260px;
    }
}

/* ==================================================================
   QSOForge NXDN · Baneados
   Extensión aislada; Portada, Personalización y Configuración quedan
   visualmente congeladas.
   ================================================================== */

.qsoforge-ban-page .qf-admin-hero {
    border-color: rgba(251,113,133,.20);
    background:
        radial-gradient(circle at 82% 18%, rgba(251,113,133,.10), transparent 24rem),
        linear-gradient(145deg, rgba(15,31,51,.90), rgba(6,17,30,.88));
}

.qsoforge-ban-page .qf-admin-kicker {
    color: #ff91a4;
}

.qsoforge-ban-page .qf-admin-module-chips .qf-ban-chip-guard i {
    color: #fb7185;
}

.qsoforge-ban-page .qf-admin-module-chips .qf-ban-chip-hot i {
    color: #fbbf24;
}

.qsoforge-ban-page .qf-admin-module-chips .qf-ban-chip-telegram i {
    color: #60a5fa;
}

.qf-ban-reflector-pill {
    min-height: 34px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 6px 10px;
    border: 1px solid rgba(148,163,184,.14);
    border-radius: 999px;
    background: rgba(255,255,255,.025);
    color: #8095a9;
    font-size: .69rem;
    font-weight: 750;
    white-space: nowrap;
}

.qf-ban-reflector-pill strong {
    font-size: .68rem;
    letter-spacing: .05em;
}

.qf-ban-reflector-pill.is-online {
    border-color: rgba(74,222,128,.20);
    background: rgba(74,222,128,.05);
}

.qf-ban-reflector-pill.is-online .qf-status-led {
    background: #4ade80;
    box-shadow: 0 0 10px rgba(74,222,128,.50);
}

.qf-ban-reflector-pill.is-online strong {
    color: #9df6bb;
}

.qf-ban-reflector-pill.is-offline {
    border-color: rgba(251,113,133,.20);
    background: rgba(251,113,133,.05);
}

.qf-ban-reflector-pill.is-offline .qf-status-led {
    background: #fb7185;
    box-shadow: 0 0 10px rgba(251,113,133,.48);
}

.qf-ban-reflector-pill.is-offline strong {
    color: #ff9aad;
}

.qf-ban-hero .qf-admin-hero-art {
    background:
        linear-gradient(90deg, transparent, rgba(251,113,133,.018)),
        radial-gradient(circle at center, rgba(251,113,133,.075), transparent 55%);
}

.qf-ban-hero-shield {
    width: 168px;
    height: 168px;
    display: grid;
    place-items: center;
    position: relative;
}

.qf-ban-shield-core {
    width: 68px;
    height: 68px;
    display: grid;
    place-items: center;
    position: relative;
    z-index: 3;
    border: 1px solid rgba(251,113,133,.30);
    border-radius: 20px;
    background: rgba(251,113,133,.07);
    color: #ff9aad;
    box-shadow: 0 0 36px rgba(251,113,133,.11);
    font-size: 1.55rem;
}

.qf-ban-orbit {
    position: absolute;
    border-radius: 50%;
    border: 1px solid rgba(251,113,133,.15);
}

.qf-ban-orbit.orbit-one {
    width: 112px;
    height: 112px;
}

.qf-ban-orbit.orbit-two {
    width: 164px;
    height: 164px;
    border-style: dashed;
    opacity: .62;
}

.qf-ban-node {
    width: 7px;
    height: 7px;
    position: absolute;
    z-index: 4;
    border-radius: 50%;
    background: #fb7185;
    box-shadow: 0 0 10px rgba(251,113,133,.48);
}

.qf-ban-node.node-one {
    top: 21px;
    left: 43px;
}

.qf-ban-node.node-two {
    top: 42px;
    right: 26px;
    background: #fbbf24;
    box-shadow: 0 0 10px rgba(251,191,36,.45);
}

.qf-ban-node.node-three {
    right: 46px;
    bottom: 22px;
    background: #60a5fa;
    box-shadow: 0 0 10px rgba(96,165,250,.42);
}

.qf-ban-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0,1fr));
    gap: 12px;
    margin-top: 18px;
    margin-bottom: 0;
}

.qf-ban-stat {
    min-width: 0;
    min-height: 84px;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px;
    border: 1px solid rgba(148,163,184,.13);
    border-radius: 15px;
    background: linear-gradient(145deg, rgba(13,29,48,.84), rgba(7,18,31,.84));
    box-shadow: 0 12px 28px rgba(0,0,0,.15);
    backdrop-filter: blur(10px);
}

.qf-ban-stat-icon {
    width: 38px;
    height: 38px;
    flex: 0 0 38px;
    display: grid;
    place-items: center;
    border-radius: 11px;
    border: 1px solid rgba(148,163,184,.14);
    background: rgba(255,255,255,.025);
}

.qf-ban-stat strong,
.qf-ban-stat > div > span {
    display: block;
}

.qf-ban-stat strong {
    color: #edf7ff;
    font-size: 1.08rem;
    font-weight: 900;
    line-height: 1.1;
}

.qf-ban-stat > div > span {
    margin-top: 5px;
    color: #72889c;
    font-size: .66rem;
    font-weight: 750;
    letter-spacing: .025em;
}

.qf-ban-stat.is-total .qf-ban-stat-icon {
    color: #fb7185;
    border-color: rgba(251,113,133,.20);
    background: rgba(251,113,133,.055);
}

.qf-ban-stat.is-node .qf-ban-stat-icon {
    color: #fbbf24;
    border-color: rgba(251,191,36,.20);
    background: rgba(251,191,36,.055);
}

.qf-ban-stat.is-app .qf-ban-stat-icon {
    color: #60a5fa;
    border-color: rgba(96,165,250,.20);
    background: rgba(96,165,250,.055);
}

.qf-ban-stat.is-status .qf-ban-stat-icon {
    color: #4ade80;
    border-color: rgba(74,222,128,.20);
    background: rgba(74,222,128,.055);
}

.qf-ban-panel {
    border-top-color: rgba(251,113,133,.42);
}

.qf-ban-panel .qf-admin-panel-icon {
    color: #fb7185;
    border-color: rgba(251,113,133,.22);
    background: rgba(251,113,133,.06);
}

.qf-ban-panel .qf-admin-section-tag {
    color: #ff91a4;
}

.qf-ban-panel-head {
    align-items: center;
}

.qf-ban-count {
    min-width: 42px;
    min-height: 30px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 5px 9px;
    border-radius: 999px;
    font-size: .69rem;
    font-weight: 900;
}

.qf-ban-count.has-bans {
    border: 1px solid rgba(251,113,133,.24);
    background: rgba(251,113,133,.07);
    color: #ff9aad;
}

.qf-ban-count.is-clear {
    border: 1px solid rgba(74,222,128,.22);
    background: rgba(74,222,128,.06);
    color: #9df6bb;
}

.qf-ban-table-wrap {
    width: 100%;
    overflow-x: auto;
    border: 1px solid rgba(148,163,184,.09);
    border-radius: 13px;
    background: rgba(1,8,15,.22);
}

.qf-ban-table {
    width: 100%;
    min-width: 920px;
    border-collapse: collapse;
    color: #c8d7e4;
    font-size: .72rem;
}

.qf-ban-table thead th {
    padding: 11px 13px;
    border-bottom: 1px solid rgba(148,163,184,.11);
    background: rgba(255,255,255,.022);
    color: #71879b;
    font-size: .62rem;
    font-weight: 900;
    letter-spacing: .075em;
    text-transform: uppercase;
    white-space: nowrap;
}

.qf-ban-table tbody td {
    padding: 12px 13px;
    border-bottom: 1px solid rgba(148,163,184,.07);
    vertical-align: middle;
}

.qf-ban-table tbody tr:last-child td {
    border-bottom: 0;
}

.qf-ban-table tbody tr {
    transition: background .15s ease;
}

.qf-ban-table tbody tr:hover {
    background: rgba(255,255,255,.023);
}

.qf-ban-id-cell {
    display: flex;
    align-items: center;
    gap: 9px;
}

.qf-ban-id-cell strong {
    color: #e8f2fb;
    font-size: .75rem;
    font-weight: 850;
}

.qf-ban-type {
    min-width: 42px;
    display: inline-flex;
    justify-content: center;
    padding: 4px 6px;
    border-radius: 7px;
    font-size: .57rem;
    font-weight: 900;
    letter-spacing: .06em;
}

.qf-ban-type.is-node {
    border: 1px solid rgba(251,191,36,.18);
    background: rgba(251,191,36,.055);
    color: #e7c866;
}

.qf-ban-type.is-app {
    border: 1px solid rgba(96,165,250,.18);
    background: rgba(96,165,250,.055);
    color: #94bdff;
}

.qf-ban-callsign {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    color: #69ddff;
    text-decoration: none;
    font-weight: 850;
}

.qf-ban-callsign:hover {
    color: #b5efff;
}

.qf-ban-callsign i {
    font-size: .58rem;
    opacity: .65;
}

.qf-ban-ip {
    margin-top: 4px;
    display: flex;
    align-items: center;
    gap: 5px;
    color: #61798e;
    font-size: .62rem;
}

.qf-ban-reason {
    color: #9fb1c0;
    line-height: 1.45;
}

.qf-ban-date {
    color: #8298aa;
    white-space: nowrap;
}

.qf-ban-status {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 1px solid rgba(251,113,133,.21);
    border-radius: 999px;
    padding: 4px 8px;
    background: rgba(251,113,133,.055);
    color: #ff9aad;
    font-size: .60rem;
    font-weight: 900;
    letter-spacing: .055em;
}

.qf-ban-status > span {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: #fb7185;
    box-shadow: 0 0 8px rgba(251,113,133,.46);
}

.qf-ban-action-col {
    text-align: right;
    white-space: nowrap;
}

.qf-ban-action-col form {
    margin: 0;
}

.qf-ban-unban {
    min-height: 34px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    border: 1px solid rgba(74,222,128,.23);
    border-radius: 9px;
    padding: 6px 10px;
    background: rgba(74,222,128,.06);
    color: #9df6bb;
    font-size: .66rem;
    font-weight: 850;
    transition: .15s ease;
}

.qf-ban-unban:hover {
    transform: translateY(-1px);
    border-color: rgba(74,222,128,.40);
    background: rgba(74,222,128,.11);
    color: #d8ffe4;
}

.qf-ban-empty {
    min-height: 220px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 28px;
    text-align: center;
}

.qf-ban-empty-icon {
    width: 62px;
    height: 62px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(74,222,128,.20);
    border-radius: 18px;
    background: rgba(74,222,128,.055);
    color: #72e796;
    font-size: 1.45rem;
}

.qf-ban-empty strong {
    margin-top: 14px;
    color: #e4f0f8;
    font-size: .92rem;
    font-weight: 900;
}

.qf-ban-empty p {
    max-width: 500px;
    margin: 6px 0 0;
    color: #71889b;
    font-size: .70rem;
    line-height: 1.5;
}

.qf-ban-muted {
    color: #63788b;
}

.qf-login-panel-ban {
    border-color: rgba(251,113,133,.20);
    background:
        radial-gradient(circle at 85% 0%, rgba(251,113,133,.09), transparent 18rem),
        linear-gradient(145deg, rgba(13,29,48,.94), rgba(5,15,27,.94));
}

.qf-login-panel-ban .qf-login-kicker {
    color: #ff91a4;
}

.qf-login-icon-ban {
    border-color: rgba(251,113,133,.23);
    background: rgba(251,113,133,.065);
    color: #ff91a4;
}

.qf-btn-ban-login {
    border-color: rgba(251,113,133,.24);
    background: rgba(251,113,133,.065);
    color: #ffabba;
}

.qf-btn-ban-login:hover {
    border-color: rgba(251,113,133,.42);
    background: rgba(251,113,133,.11);
    color: #ffd8df;
}

@media (max-width: 900px) {
    .qf-ban-stats {
        grid-template-columns: repeat(2, minmax(0,1fr));
    }
}

@media (max-width: 650px) {
    .qf-ban-stats {
        grid-template-columns: 1fr;
    }

    .qf-ban-panel-head {
        align-items: flex-start;
    }

    .qf-ban-count {
        align-self: flex-start;
    }
}

/* ==================================================================
   QSOForge NXDN · Lista pública de baneados v1
   Extensión aislada; no modifica la lógica ni la presentación de
   Portada, Personalización, Configuración o gestor Baneados.
   ================================================================== */

.qsoforge-public-ban-page .qf-admin-hero {
    border-color: rgba(251,113,133,.20);
}

.qf-public-readonly-pill {
    min-height: 34px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 11px;
    border: 1px solid rgba(96,165,250,.20);
    border-radius: 999px;
    background: rgba(96,165,250,.055);
    color: #91c7ff;
    font-size: .68rem;
    letter-spacing: .045em;
    white-space: nowrap;
}

.qf-public-readonly-pill i {
    color: #60a5fa;
}

.qf-public-chip-readonly i {
    color: #60a5fa;
}

.qf-public-chip-refresh i {
    color: #4ade80;
}

.qf-public-ban-head-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 9px;
    flex-wrap: wrap;
}

.qf-public-admin-link {
    min-height: 31px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 5px 9px;
    border: 1px solid rgba(148,163,184,.17);
    border-radius: 9px;
    background: rgba(255,255,255,.025);
    color: #7f96aa;
    text-decoration: none;
    font-size: .64rem;
    font-weight: 800;
    transition: .15s ease;
}

.qf-public-admin-link:hover {
    border-color: rgba(192,132,252,.28);
    background: rgba(192,132,252,.055);
    color: #d6b8ff;
}

.qf-public-ban-search {
    margin: 16px 0;
    padding: 14px;
    border: 1px solid rgba(148,163,184,.09);
    border-radius: 13px;
    background: rgba(2,10,18,.25);
}

.qf-public-ban-search > label {
    display: block;
    margin-bottom: 8px;
    color: #8299ad;
    font-size: .67rem;
    font-weight: 850;
    letter-spacing: .035em;
}

.qf-public-ban-search-row {
    display: grid;
    grid-template-columns: minmax(220px,1fr) auto auto;
    gap: 8px;
    align-items: center;
}

.qf-public-ban-search-input .form-control {
    min-height: 39px;
    border-color: rgba(148,163,184,.13);
    background: rgba(5,17,29,.82);
    color: #e8f2fb;
    font-size: .75rem;
}

.qf-public-ban-search-input .form-control::placeholder {
    color: #526b80;
}

.qf-public-ban-search-input .form-control:focus {
    border-color: rgba(251,113,133,.30);
    box-shadow: 0 0 0 .16rem rgba(251,113,133,.07);
}

.qf-public-ban-search-button,
.qf-public-ban-clear {
    min-height: 39px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    padding: 7px 12px;
    border-radius: 9px;
    font-size: .68rem;
    font-weight: 850;
    text-decoration: none;
    white-space: nowrap;
}

.qf-public-ban-search-button {
    border: 1px solid rgba(251,113,133,.24);
    background: rgba(251,113,133,.07);
    color: #ff9aad;
}

.qf-public-ban-search-button:hover {
    border-color: rgba(251,113,133,.42);
    background: rgba(251,113,133,.12);
    color: #ffd7df;
}

.qf-public-ban-clear {
    border: 1px solid rgba(148,163,184,.15);
    background: rgba(255,255,255,.025);
    color: #8197aa;
}

.qf-public-ban-clear:hover {
    border-color: rgba(148,163,184,.28);
    background: rgba(255,255,255,.045);
    color: #c5d5e2;
}

.qf-public-ban-search-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-top: 9px;
    color: #60788d;
    font-size: .61rem;
}

.qf-public-ban-search-meta span {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.qf-public-ban-search-meta i {
    color: #4ade80;
}

.qf-public-ban-search-meta strong {
    color: #9eb2c3;
    font-weight: 850;
}

.qf-public-ban-table {
    min-width: 790px;
}

.qf-public-ban-message {
    min-height: 190px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 26px;
    text-align: center;
}

.qf-public-ban-message > span {
    width: 56px;
    height: 56px;
    display: grid;
    place-items: center;
    border-radius: 16px;
    font-size: 1.3rem;
}

.qf-public-ban-message strong {
    margin-top: 13px;
    color: #e4f0f8;
    font-size: .90rem;
    font-weight: 900;
}

.qf-public-ban-message p {
    max-width: 520px;
    margin: 6px 0 0;
    color: #71889b;
    font-size: .69rem;
    line-height: 1.5;
}

.qf-public-ban-message.is-clear > span {
    border: 1px solid rgba(74,222,128,.20);
    background: rgba(74,222,128,.055);
    color: #72e796;
}

.qf-public-ban-message.is-error > span {
    border: 1px solid rgba(251,191,36,.20);
    background: rgba(251,191,36,.055);
    color: #f6cc58;
}

.qf-public-ban-footer-info {
    display: grid;
    grid-template-columns: repeat(2, minmax(0,1fr));
    gap: 12px;
    margin-top: 18px;
}

.qf-public-ban-footer-info > div {
    min-height: 66px;
    display: grid;
    grid-template-columns: 34px 1fr auto;
    align-items: center;
    gap: 10px;
    padding: 12px 14px;
    border: 1px solid rgba(148,163,184,.11);
    border-radius: 13px;
    background: linear-gradient(145deg, rgba(13,29,48,.80), rgba(7,18,31,.80));
}

.qf-public-ban-footer-info > div > i {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(251,113,133,.18);
    border-radius: 10px;
    background: rgba(251,113,133,.05);
    color: #fb7185;
}

/*
 * El contador de "Baneados actuales" debe mostrar únicamente
 * la cifra. Si una versión anterior del marcado conserva un
 * icono dentro de la pastilla, se oculta para evitar el efecto
 * visual de icono doble.
 */
.qf-public-ban-footer-info .qf-ban-count > i {
    display: none !important;
}

.qf-public-ban-footer-info span {
    color: #71889b;
    font-size: .66rem;
    font-weight: 750;
}

.qf-public-ban-footer-info strong {
    color: #e5f0f8;
    font-size: .84rem;
    font-weight: 900;
}

@media (max-width: 750px) {
    .qf-public-ban-search-row {
        grid-template-columns: 1fr;
    }

    .qf-public-ban-search-button,
    .qf-public-ban-clear {
        width: 100%;
    }

    .qf-public-ban-search-meta {
        align-items: flex-start;
        flex-direction: column;
    }

    .qf-public-ban-footer-info {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 650px) {
    .qf-public-ban-head-actions {
        width: 100%;
        justify-content: flex-start;
    }
}
