/* =====================================================================
   APP — Cáscara común de las vistas operativas
   Barra lateral, encabezado, tarjetas, filtros y tabla. La usan tanto
   Monitor Logístico como Órdenes de Compra, así las dos pantallas se ven
   iguales sin tener que mantener dos copias.

   Cargar siempre DESPUÉS de base.css. Respecto del css propio de la página:
   · oc.css se escribió para complementar esta hoja, así que va después.
   · index.css arrastra reglas del diseño anterior con los mismos nombres de
     clase (.card, .filters, .app-header). Ahí app.css va AL FINAL, para
     ganarles; lo viejo queda sirviendo solo a la pantalla de acceso.

   Criterios (los mismos de base.css):
   · Esquinas cuadradas en todo. Sin excepción.
   · La jerarquía se marca con borde y contraste, no con sombras.
   · Los colores salen de las fichas de base.css, así el tema día/noche
     funciona solo, sin reglas por pantalla.
   ===================================================================== */

:root {
    --sb-ancho: 232px;
}

/* Fichas propias de la cáscara, en su versión clara. base.css ya trae la
   paleta de acentos; acá solo van las superficies del tablero. */
[data-tema="dia"] {
    --sb-fondo:    #0f2744;   /* la barra queda oscura también de día: es el
                                 ancla visual y separa el menú del contenido */
    --sb-activo:   #1f6feb;
    --panel:       #ffffff;
    --lienzo:      #f4f6fa;
    --linea:       #e4e8ef;
    --tinta:       #16233a;
    --tinta-suave: #5a6678;
}

/* Noche es el tema por defecto (sin atributo o con data-tema="noche"). */
:root:not([data-tema="dia"]) {
    --sb-fondo:    #0d131d;
    --sb-activo:   #2879ff;
    --panel:       #12161f;
    --lienzo:      #0b0e14;
    --linea:       #252c39;
    --tinta:       #ffffff;
    --tinta-suave: #aab3c0;
}

/* ---------------------------------------------------------------------
   ESTRUCTURA
   --------------------------------------------------------------------- */
.app-marco {
    display: flex;
    width: 100%;              /* el <body> de index.css centra con flex para la
                                 pantalla de acceso; sin este ancho el tablero
                                 se encogía al contenido y, mientras cargaba el
                                 camión, quedaba angosto en medio de la pantalla */
    min-height: 100vh;
    background: var(--lienzo);
}
.app-contenido {
    flex: 1;
    min-width: 0;
    padding: 24px 28px 40px;
}

/* ---------------------------------------------------------------------
   BARRA LATERAL
   --------------------------------------------------------------------- */
.app-sidebar {
    width: var(--sb-ancho);
    flex-shrink: 0;
    background: var(--sb-fondo);
    color: #cdd8e8;
    display: flex;
    flex-direction: column;
    padding: 18px 12px;
    position: sticky;
    top: 0;
    height: 100vh;
}
.marca {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 4px 8px 20px;
}
.marca-logo {
    width: 38px;
    height: 38px;
    background: var(--sb-activo);
    color: #fff;
    display: grid;
    place-items: center;
    font-weight: 800;
    font-size: 1.15rem;
}
.marca-txt strong {
    display: block;
    color: #fff;
    font-size: .95rem;
    letter-spacing: .04em;
}
.marca-txt span {
    font-size: .64rem;
    letter-spacing: .18em;
    opacity: .7;
}

.nav {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1;
    overflow-y: auto;
}
.nav-titulo {
    margin: 14px 10px 6px;
    font-size: .62rem;
    letter-spacing: .14em;
    text-transform: uppercase;
    opacity: .5;
}
/* Mismo alto y alineación para enlaces y botones: sin esto los <button>
   quedaban un par de píxeles corridos respecto de los <a>. */
.nav-item {
    display: flex;
    align-items: center;
    gap: 11px;
    width: 100%;
    padding: 10px 12px;
    border: none;
    background: transparent;
    color: inherit;
    font: inherit;
    font-size: .84rem;
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    transition: background .15s, color .15s;
}
.nav-item i {
    width: 17px;
    text-align: center;
    font-size: .92rem;
    opacity: .85;
}
.nav-item:hover { background: rgba(255, 255, 255, .08); color: #fff; }
.nav-item.activo { background: var(--sb-activo); color: #fff; font-weight: 600; }
.nav-item.activo i { opacity: 1; }

.sidebar-pie {
    border-top: 1px solid rgba(255, 255, 255, .12);
    padding-top: 12px;
    margin-top: 10px;
}
.usuario {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 4px 10px 10px;
}
.usuario-ini {
    width: 34px;
    height: 34px;
    background: rgba(255, 255, 255, .14);
    color: #fff;
    display: grid;
    place-items: center;
    font-size: .78rem;
    font-weight: 700;
}
.usuario-txt span { font-size: .78rem; color: #fff; }

/* ---------------------------------------------------------------------
   ENCABEZADO
   --------------------------------------------------------------------- */
.app-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 20px;
    margin-bottom: 20px;
    background: transparent;
    border: none;
    padding: 0;
    box-shadow: none;
}
/* El botón de plegar va pegado al menú, no perdido entre las acciones de la
   derecha: manda sobre la barra, así que vive al lado de ella. */
.header-izq {
    display: flex;
    align-items: center;
    gap: 14px;
    min-width: 0;
}
.btn-menu {
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    display: grid;
    place-items: center;
    background: transparent;
    border: 1px solid var(--linea);
    color: var(--tinta-suave);
    font-size: 1rem;
    cursor: pointer;
    /* index.css le aplica filter: brightness() a todo <button>; de noche eso
       dejaba el hover lavado en vez de resaltarlo. */
    filter: none;
    transition: background .15s, border-color .15s, color .15s;
}
.btn-menu:hover {
    background: var(--sb-activo);
    border-color: var(--sb-activo);
    color: #fff;
    filter: none;
}

.header-titulo h1 {
    margin: 0;
    font-size: 1.7rem;
    font-weight: 800;
    color: var(--tinta);
}
.header-titulo p {
    margin: 3px 0 0;
    font-size: .85rem;
    color: var(--tinta-suave);
}
.header-actions { display: flex; align-items: center; gap: 10px; }
.header-actions .user-badge {
    background: var(--panel);
    border: 1px solid var(--linea);
    padding: 9px 14px;
    font-size: .82rem;
    color: var(--tinta);
    white-space: nowrap;
}
.btn-tema,
.logout-btn {
    background: var(--panel);
    border: 1px solid var(--linea);
    color: var(--tinta);
    padding: 9px 14px;
    font: inherit;
    font-size: .82rem;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    transition: border-color .15s, color .15s;
}
.btn-tema { padding: 9px 11px; }
/* El filter: none es a propósito: index.css aclara TODO <button> al pasar el
   mouse, y sobre panel oscuro eso lava el botón en vez de destacarlo. */
.logout-btn:hover,
.btn-tema:hover {
    border-color: var(--sb-activo);
    color: var(--sb-activo);
    filter: none;
}

/* ---------------------------------------------------------------------
   TARJETAS — bajas, con el ícono al costado
   --------------------------------------------------------------------- */
.stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px;
    margin-bottom: 18px;
}
.card {
    display: flex;
    align-items: center;
    gap: 13px;
    background: var(--panel);
    border: 1px solid var(--linea);
    padding: 14px 16px;
    min-height: 0;
    box-shadow: none;
    transition: border-color .15s;
}
.card::before, .card::after { content: none; }   /* apaga adornos heredados */
.card[onclick] { cursor: pointer; }
.card[onclick]:hover { border-color: var(--sb-activo); }
.card-ico {
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    display: grid;
    place-items: center;
    font-size: 1.05rem;
}
.ico-ruta      { background: #e8f0fe; color: #1f6feb; }
.ico-entregado { background: #e7f7ee; color: #15803d; }
.ico-chofer    { background: #eee9fd; color: #6d43d1; }
.ico-monto     { background: #fdf3e2; color: #b45309; }
.ico-oc        { background: #e8f0fe; color: #1f6feb; }
.ico-lineas    { background: #eee9fd; color: #6d43d1; }
.ico-proveedor { background: #e7f7ee; color: #15803d; }
/* De noche los pasteles quedaban como parches encendidos: mismo tono, fondo
   apenas teñido y el ícono en el color vivo de la paleta. */
:root:not([data-tema="dia"]) .ico-ruta,
:root:not([data-tema="dia"]) .ico-oc        { background: #16243c; color: #2879ff; }
:root:not([data-tema="dia"]) .ico-entregado,
:root:not([data-tema="dia"]) .ico-proveedor { background: #10281b; color: #00b442; }
:root:not([data-tema="dia"]) .ico-chofer,
:root:not([data-tema="dia"]) .ico-lineas    { background: #1e1b33; color: #a98bff; }
:root:not([data-tema="dia"]) .ico-monto     { background: #2a2110; color: #bf9100; }

.card-datos { min-width: 0; }
.card-title { font-size: .78rem; color: var(--tinta-suave); margin: 0 0 1px; }
.card-value { font-size: 1.5rem; font-weight: 800; color: var(--tinta); line-height: 1.1; }
.card-sub   { font-size: .76rem; color: var(--tinta-suave); margin-top: 1px; }

/* ---------------------------------------------------------------------
   FILTROS — una fila pareja y los botones a la derecha
   --------------------------------------------------------------------- */
.filters {
    background: var(--panel);
    border: 1px solid var(--linea);
    padding: 16px 18px;
    margin-bottom: 18px;
    box-shadow: none;
}
.filters-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(152px, 1fr));
    gap: 14px;
    align-items: end;                 /* los campos quedan a ras, no escalonados */
}
.filter-group {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin: 0;
}
.filter-group label {
    font-size: .78rem;
    color: var(--tinta-suave);
    font-weight: 500;
}
.filter-group input,
.filter-group select {
    height: 40px;                     /* misma altura en fechas, texto y listas */
    padding: 0 11px;
    border: 1px solid var(--linea);
    background: var(--panel);
    color: var(--tinta);
    font: inherit;
    font-size: .85rem;
    width: 100%;
}
.filter-group input::placeholder { color: var(--tinta-suave); opacity: .8; }
.filter-group input:focus,
.filter-group select:focus { outline: none; border-color: var(--sb-activo); }

.filter-buttons {
    display: flex;
    justify-content: center;      /* centrados bajo la fila de campos */
    gap: 10px;
    margin-top: 14px;
    padding: 0;
}
.filter-buttons button,
.btn-pri,
.btn-sec {
    height: 40px;                     /* todos los botones, del mismo porte */
    padding: 0 16px;
    border: 1px solid var(--linea);
    background: var(--panel);
    color: var(--tinta);
    font: inherit;
    font-size: .84rem;
    font-weight: 500;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: background .15s, border-color .15s, color .15s;
}
.btn-pri {
    background: var(--sb-activo);
    border-color: var(--sb-activo);
    color: #fff;
    font-weight: 600;
}
.btn-pri:hover { filter: brightness(1.08); }
.btn-sec:hover { border-color: var(--sb-activo); color: var(--sb-activo); filter: none; }
.filter-info {
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--linea);
    text-align: center;
    font-size: .82rem;
    color: var(--tinta-suave);
}

/* ---------------------------------------------------------------------
   TABLA
   --------------------------------------------------------------------- */
.table-container {
    background: var(--panel);
    border: 1px solid var(--linea);
    box-shadow: none;
    overflow: auto;
}

/* ---------------------------------------------------------------------
   MENÚ PLEGADO — a mano con el botón, o solo en pantallas angostas
   No desaparece del todo: queda la tira de íconos, así se gana el ancho
   sin perder la navegación. El nombre de cada vista pasa al globo de ayuda
   (lo pone /js/menu.js).
   --------------------------------------------------------------------- */
.app-marco.menu-compacto .app-sidebar { width: 64px; padding: 14px 8px; }
.app-marco.menu-compacto .marca       { justify-content: center; padding: 4px 0 20px; }
.app-marco.menu-compacto .usuario     { justify-content: center; padding: 4px 0 10px; }
.app-marco.menu-compacto .marca-txt,
.app-marco.menu-compacto .nav-item span,
.app-marco.menu-compacto .nav-titulo,
.app-marco.menu-compacto .usuario-txt { display: none; }
.app-marco.menu-compacto .nav-item    { justify-content: center; padding: 11px 0; }

/* ---------------------------------------------------------------------
   PANTALLAS ANGOSTAS — se pliega sola, sin esperar el botón
   --------------------------------------------------------------------- */
@media (max-width: 1100px) {
    .app-sidebar { width: 64px; padding: 14px 8px; }
    .marca { justify-content: center; padding: 4px 0 20px; }
    .usuario { justify-content: center; padding: 4px 0 10px; }
    .marca-txt,
    .nav-item span,
    .nav-titulo,
    .usuario-txt { display: none; }
    .nav-item { justify-content: center; padding: 11px 0; }
    .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Fila de una guía rechazada: teñida del rojo de la paleta, no de un rosa
   fijo que en modo noche quedaba casi blanco bajo la letra clara. */
tr.fila-rechazada > td {
    background: color-mix(in srgb, var(--rojo) 10%, transparent);
}

/* ---------------------------------------------------------------------
   RECHAZAR — acción puntual de una fila, no la protagonista
   Pasa de bloque rojo lleno a botón de contorno. El rojo pleno de la
   paleta sobre fondo oscuro encandila, así que de noche va uno más suave.
   --------------------------------------------------------------------- */
.btn-rechazar {
    height: 30px;
    padding: 0 14px;
    border: 1px solid #e6b3b3;
    background: transparent;
    color: #c62828;
    font: inherit;
    font-size: .78rem;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: background .15s, color .15s, border-color .15s;
}
.btn-rechazar:hover {
    background: #c62828;
    border-color: #c62828;
    color: #fff;
    transform: none;          /* el salto del diseño anterior sobraba */
}
:root:not([data-tema="dia"]) .btn-rechazar {
    border-color: #5c3535;
    background: rgba(255, 107, 107, .08);
    color: #ff8f8f;
}
:root:not([data-tema="dia"]) .btn-rechazar:hover {
    background: #b03434;
    border-color: #b03434;
    color: #fff;
}
