:root {
    --fc-primary: #0d6efd;
    --fc-sidebar-bg: #10243e;
    --fc-sidebar-hover: #1b3a5c;
    --fc-sidebar-active: #0d6efd;
    --fc-vencido: #dc3545;
    --fc-proximo: #fd7e14;
    --fc-riesgo: #ffc107;
    --fc-vigente: #198754;
}

html, body {
    height: 100%;
    background-color: #f4f6f9;
}

.fc-wrapper {
    display: flex;
    min-height: 100vh;
}

/* ---------------- Sidebar ---------------- */
.fc-sidebar {
    width: 260px;
    flex-shrink: 0;
    background-color: var(--fc-sidebar-bg);
    color: #fff;
    transition: margin-left .25s ease-in-out;
}

.fc-sidebar .fc-brand {
    padding: 1rem;
    font-weight: 700;
    font-size: 1.15rem;
    border-bottom: 1px solid rgba(255,255,255,.1);
}

.fc-sidebar .nav-link {
    color: rgba(255,255,255,.8);
    padding: .6rem 1rem;
    border-radius: .375rem;
    margin: .1rem .5rem;
    font-size: .92rem;
}

.fc-sidebar .nav-link:hover {
    background-color: var(--fc-sidebar-hover);
    color: #fff;
}

.fc-sidebar .nav-link.active {
    background-color: var(--fc-sidebar-active);
    color: #fff;
}

.fc-sidebar .nav-header {
    color: rgba(255,255,255,.45);
    text-transform: uppercase;
    font-size: .72rem;
    letter-spacing: .05em;
    padding: .75rem 1rem .25rem;
}

.fc-content {
    flex-grow: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.fc-main {
    flex-grow: 1;
    padding: 1.25rem;
}

@media (max-width: 991.98px) {
    .fc-sidebar {
        position: fixed;
        z-index: 1040;
        height: 100%;
        margin-left: -260px;
    }
    .fc-sidebar.show {
        margin-left: 0;
    }
    .fc-backdrop {
        display: none;
        position: fixed;
        inset: 0;
        background: rgba(0,0,0,.5);
        z-index: 1035;
    }
    .fc-backdrop.show {
        display: block;
    }
}

/* ---------------- Semáforo de vencimiento ---------------- */
.badge.semaforo-anaranjado { color: #000; }
.badge.semaforo-amarillo { color: #000; }

.fc-dot {
    display: inline-block;
    width: .6rem;
    height: .6rem;
    border-radius: 50%;
    margin-right: .35rem;
}
.fc-dot-vencido { background-color: var(--fc-vencido); }
.fc-dot-proximo { background-color: var(--fc-proximo); }
.fc-dot-riesgo  { background-color: var(--fc-riesgo); }
.fc-dot-vigente { background-color: var(--fc-vigente); }

/* ---------------- Utilidades ---------------- */
.fc-card-stat {
    border: none;
    border-radius: .75rem;
    box-shadow: 0 1px 3px rgba(0,0,0,.08);
}

.fc-card-stat .fc-stat-value {
    font-size: 1.75rem;
    font-weight: 700;
}

.table-responsive-fc {
    background: #fff;
    border-radius: .5rem;
    overflow: hidden;
}

.fc-login-wrapper {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, var(--fc-sidebar-bg), #1b3a5c);
}

.fc-login-card {
    max-width: 420px;
    width: 100%;
    border: none;
    border-radius: 1rem;
}

/* Modal de confirmación reutilizable (reemplaza confirm() nativo del navegador en todo el
   sitio; ver #fcConfirmModal en components/footer.php y fcConfirm()/data-confirm en app.js). */
.fc-confirm-modal .modal-content {
    border: none;
    border-radius: 1rem;
}
.fc-confirm-icon {
    font-size: 2.75rem;
    line-height: 1;
}

/* Avisos de fcToast() en la barra superior, a la izquierda de la campana (components/navbar.php):
   ocupan a lo sumo la altura de los botones de la barra para no taparle nada a la página. */
.fc-toast-navbar {
    display: flex;
    align-items: center;
    min-width: 0;
    max-width: 420px;
    z-index: 1090;
}
.fc-toast-navbar:empty {
    display: none;
}
.fc-toast-navbar .toast {
    width: auto;
    max-width: 100%;
    font-size: .875rem;
    box-shadow: none;
}
.fc-toast-navbar .toast-body {
    padding: .375rem .75rem;
    max-height: 2.4rem;
    overflow-y: auto;
}
/* Pantallas angostas: bajo la barra (que es sticky y sirve de referencia), a ancho completo. */
@media (max-width: 767.98px) {
    .fc-toast-navbar {
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        max-width: none;
        margin: 0 !important;
        padding: .5rem .75rem;
    }
    .fc-toast-navbar .toast {
        width: 100%;
        box-shadow: var(--bs-box-shadow);
    }
    .fc-toast-navbar .toast-body {
        max-height: 6rem;
    }
}

/* Barra superior: a la izquierda solo el badge del despacho de la sesión (components/navbar.php),
   recortado con "..." para no desbordar en pantallas angostas. */
.fc-navbar-izquierda {
    min-width: 0;
}
/* Pegado a la izquierda, separado solo por el gap del contenedor (sin márgenes automáticos). */
.fc-navbar-izquierda > * {
    flex: 0 1 auto;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
.fc-despacho-badge {
    font-size: 1rem;
    font-weight: 600;
    padding: .45rem .8rem;
    max-width: 24rem;
    min-width: 0;
    flex-shrink: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.fc-despacho-badge .bi {
    font-size: 1.1rem;
    vertical-align: -.1em;
}
@media (max-width: 991.98px) {
    .fc-despacho-badge {
        max-width: 16rem;
    }
}
@media (max-width: 575.98px) {
    .fc-despacho-badge {
        font-size: .9rem;
        padding: .35rem .55rem;
    }
}
.fc-navbar-izquierda #fcSidebarToggle {
    flex-shrink: 0;
}

/* Encabezado de la pantalla en el contenido (fc_titulo_pagina() en components/ayuda.php):
   título y "?" a la izquierda; en pantallas angostas el título largo se parte en líneas. */
.fc-titulo-pagina {
    min-width: 0;
}
.fc-titulo-pagina h4 {
    min-width: 0;
    overflow-wrap: anywhere;
}
.fc-titulo-pagina .fc-btn-ayuda {
    margin-left: 0 !important;
    flex-shrink: 0;
}

/* .fc-form-compacto (opt-in en la tarjeta del formulario): solo limita el ancho máximo en
   pantallas anchas; NO cambia tamaños de letra ni de controles. En móvil la grilla colapsa sola.
   Usado en acciones de personal, plazas y medicamentos (crear/editar). */
.fc-form-compacto {
    max-width: 1100px;
}

/* Dashboard: dona del semáforo compacta con el total al centro, y altura fija de los gráficos de
   barras (Chart.js con maintainAspectRatio: false toma la altura del contenedor). */
.fc-dona-wrap {
    position: relative;
    height: 220px;
}
.fc-dona-centro {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    pointer-events: none;
}
.fc-dona-total {
    font-size: 1.75rem;
    font-weight: 700;
    line-height: 1;
}
.fc-chart-meses {
    position: relative;
    height: 280px;
}
@media (max-width: 575.98px) {
    .fc-chart-meses {
        height: 240px;
    }
}
.fc-pendiente-item:hover {
    background-color: var(--bs-light);
}

/* Registrar vencimiento: "Medicamento encontrado" con ancho acotado (el nombre completo va en el
   title, el resto se recorta con "..."), sin empujar a los demás controles. En pantallas angostas
   la fila se parte (código + medicamento / fecha + botones) sin scroll horizontal. */
.fc-fila-vencimiento .fc-medicamento-encontrado {
    flex: 0 1 300px;
    max-width: 300px;
    min-width: 0;
}

/* Campos que esperan a que se elija un medicamento (ajuste-cuota/create.php: cuota actual y
   cantidad solicitada): siguen deshabilitados, pero con la misma apariencia que los demás campos,
   sin el fondo gris de Bootstrap. Solo aplica a los que llevan esta clase. */
.form-control.fc-espera-sin-gris:disabled {
    background-color: var(--bs-body-bg);
    opacity: 1;
}

/* Campo obligatorio resaltado mientras está vacío (ajuste-cuota/create.php: justificación). Usa
   :invalid del atributo required, así que vuelve al aspecto normal en cuanto se escribe algo. Solo
   aplica a los campos con esta clase. */
.form-control.fc-resaltar-si-vacio:invalid {
    background-color: var(--bs-warning-bg-subtle);
    border-color: var(--bs-warning-border-subtle);
}
