/* ==================================================
   COMPONENTES REUTILIZABLES
   ACACHETE LOGISTICS

   Piezas que usan varias secciones: página, tarjeta, buscador,
   botones, avisos, tabla, etiquetas, avatar, formularios y ventanas.
   Cada pieza tiene aquí su estructura, texto y animación juntos.

   Cómo usarlas: poner la clase en el HTML de la sección, ej.
       <button class="boton boton-principal">Guardar</button>
   Si una sección necesita algo distinto, lo cambia en su propio
   CSS (css/secciones/<nombre>.css), que se carga después y gana.

   Colores y medidas: css/variables.css
   Animaciones (@keyframes): css/animaciones.css
   ================================================== */

/* ==================================================
   PÁGINA (contenedor de cada sección)
   ================================================== */

.pagina {
    min-height: 100%;
    max-width: var(--ancho-max-pagina); /* centrada en monitores ultra anchos */
    margin-inline: auto;
    padding: 1.333rem 1.556rem;
    background-color: var(--color-fondo);
    display: flex;
    flex-direction: column;
    gap: 0.889rem;
}

/* Fila superior: título a la izquierda, acciones a la derecha */
.pagina-cabecera {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap; /* en pantallas angostas las acciones bajan */
    gap: 0.889rem;
}

.pagina-titulo {
    margin: 0;
    font-size: 1.5rem;
    font-weight: 600;
    color: var(--color-texto);
}

.pagina-subtitulo {
    margin: 0.222rem 0 0;
    font-size: 0.9rem;
    color: var(--color-gris);
}

.pagina-acciones {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.667rem;
}

/* Caja blanca con borde y sombra suave */
.tarjeta {
    padding: 1.556rem;
    background-color: var(--color-blanco);
    border: 1px solid var(--color-borde);
    border-radius: var(--radio-grande);
    box-shadow: var(--sombra-tarjeta);
}

/* ==================================================
   BUSCADOR (icono + campo)
   ================================================== */

.buscador {
    display: flex;
    align-items: center;
    gap: 0.444rem;
    width: 16.667rem; /* ancho del buscador */
    max-width: 100%;
    height: 2.222rem;
    padding: 0 0.667rem;
    background-color: var(--color-blanco);
    border: 1px solid var(--color-borde);
    border-radius: var(--radio);
    transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
}

.buscador:focus-within {
    border-color: var(--color-azul);
    box-shadow: var(--sombra-foco);
}

.buscador > i {
    color: var(--color-gris);
}

.buscador-input {
    flex: 1;
    height: 100%;
    padding: 0;
    border: none;
    outline: none;
    background: transparent;
    font-family: inherit;
    font-size: 0.9rem;
    color: var(--color-texto);
}

/* ==================================================
   BOTONES
   .boton + un color: .boton-principal | .boton-secundario | .boton-peligro
   Tamaño más bajo: .boton-chico
   ================================================== */

.boton {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.444rem;
    height: 2.222rem;
    padding: 0 0.889rem;
    border: 1px solid transparent;
    border-radius: var(--radio);
    cursor: pointer;
    font-family: inherit;
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--color-blanco);
    text-decoration: none; /* por si el botón es un enlace <a class="boton"> */
    transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;
}

/* Botones ocultos con el atributo hidden (sin esta regla,
   display: inline-flex le ganaría a hidden) */
.boton[hidden] {
    display: none;
}

/* Mientras se guarda (el JS lo deshabilita) */
.boton:disabled {
    cursor: wait;
    opacity: 0.7;
}

.boton-chico {
    height: 1.889rem;
    padding: 0 0.667rem;
}

/* Naranja: acción principal (Nuevo, Guardar) */
.boton-principal {
    background-color: var(--color-naranja);
}

.boton-principal:hover:not(:disabled) {
    background-color: var(--color-naranja-oscuro);
    transform: translateY(-1px);
    box-shadow: var(--sombra-boton);
}

/* Blanco con borde: Cancelar, acciones secundarias */
.boton-secundario {
    background-color: var(--color-blanco);
    border-color: var(--color-borde);
    color: var(--color-azul-marino);
}

.boton-secundario:hover {
    background-color: var(--color-fondo);
}

/* Rojo: Eliminar */
.boton-peligro {
    background-color: var(--color-rojo);
}

.boton-peligro:hover:not(:disabled) {
    background-color: var(--color-rojo-oscuro);
    transform: translateY(-1px);
    box-shadow: var(--sombra-boton);
}

/* ---------- Botones de solo icono (lápiz, basurero) ---------- */

.boton-icono {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.889rem;
    height: 1.889rem;
    padding: 0;
    background: none;
    border: 1px solid transparent;
    border-radius: var(--radio);
    cursor: pointer;
    font-size: 1rem;
    transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;
}

.boton-icono:hover:not(:disabled) {
    transform: scale(1.1);
}

.boton-icono:disabled {
    cursor: not-allowed;
    opacity: 0.35;
}

.boton-icono-editar {
    color: var(--color-azul);
}

.boton-icono-editar:hover {
    background-color: var(--color-azul-claro);
    border-color: #C9DDF3;
}

.boton-icono-eliminar {
    color: var(--color-rojo);
}

.boton-icono-eliminar:hover:not(:disabled) {
    background-color: var(--color-rojo-claro);
    border-color: #F5C6C1;
}

/* Revisar una solicitud pendiente (ej. aprobar un cliente) */
.boton-icono-revisar {
    color: var(--color-naranja);
}

.boton-icono-revisar:hover:not(:disabled) {
    background-color: var(--color-naranja-claro);
    border-color: #F8CBA8;
}

/* Ver algo relacionado (ej. clientes de una tienda) */
.boton-icono-ver {
    color: var(--color-azul-marino);
}

.boton-icono-ver:hover:not(:disabled) {
    background-color: var(--color-azul-claro);
    border-color: #C9DDF3;
}

/* ==================================================
   AVISOS ("Usuario creado", errores)
   Ocultos hasta que el JS les pone:  aviso visible ok | aviso visible error
   ================================================== */

.aviso {
    display: none;
    margin: 0;
    padding: 0.556rem 0.778rem;
    border-radius: var(--radio);
    border-left: 0.222rem solid;
    font-size: 0.9rem;
}

.aviso.visible {
    display: block;
    animation: aparecerBajando 0.25s ease-out;
}

.aviso.ok {
    background-color: var(--color-verde-claro);
    border-left-color: var(--color-verde);
    color: var(--color-verde);
}

.aviso.error {
    background-color: var(--color-rojo-claro);
    border-left-color: var(--color-rojo);
    color: var(--color-rojo);
}

/* ==================================================
   TABLA
   <div class="tabla-caja"><table class="tabla">...</table></div>
   ================================================== */

/* Caja blanca con borde; si la tabla es más ancha, aparece scroll horizontal solo aquí */
.tabla-caja {
    background-color: var(--color-blanco);
    border: 1px solid var(--color-borde);
    border-radius: 0.556rem;
    overflow-x: auto;
    box-shadow: var(--sombra-tarjeta);
}

.tabla {
    width: 100%;
    border-collapse: collapse;
}

.tabla th,
.tabla td {
    padding: 0.667rem 0.889rem;
    border-bottom: 1px solid var(--color-borde-suave);
    vertical-align: middle;
}

/* Títulos de las columnas: fondo azul claro, mayúsculas */
.tabla th {
    font-size: 0.75rem;
    font-weight: 700;
    color: var(--color-azul-marino);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    text-align: left;
}

.tabla thead th {
    background-color: var(--color-azul-claro);
    border-bottom: 1px solid var(--color-borde);
}

.tabla td {
    font-size: 0.9rem;
    color: var(--color-texto);
    transition: background-color 0.15s ease;
}

.tabla tbody tr:last-child td {
    border-bottom: none;
}

/* Fila resaltada al pasar el mouse */
.tabla tbody tr:hover td {
    background-color: var(--color-fondo);
}

/* Columna de acciones: angosta y alineada a la derecha */
.tabla-col-acciones {
    width: 6.111rem;
    white-space: nowrap;
}

.tabla th.tabla-col-acciones {
    text-align: right;
}

/* Botones de una fila (el flex va en este div y no en el <td>,
   porque un <td> con flex deja de comportarse como celda) */
.tabla-botones {
    display: flex;
    justify-content: flex-end;
    gap: 0.333rem;
}

/* Mensaje "Aún no hay registros" */
.tabla td.tabla-vacio {
    padding: 1.778rem 0.889rem;
    color: var(--color-gris);
    text-align: center;
}

/* ---------- Tabla agrupada (un <tbody> por grupo) ----------
   Fila de título de cada grupo, ej. "NORTE  NOR ....... 2 tiendas".
   La crea crearFilaGrupo() de js/componentes.js.
   La usan Tiendas (por región) y Pilotos (por tienda). */

.tabla .tabla-grupo th {
    padding-top: 0.556rem;
    padding-bottom: 0.556rem;
    background-color: var(--color-fondo);
    border-top: 1px solid var(--color-borde);
}

/* El primer grupo no necesita línea arriba (ya está el encabezado) */
.tabla tbody:first-of-type .tabla-grupo th {
    border-top: none;
}

/* Código al lado del título (ej. "NOR") */
.tabla-grupo-codigo {
    margin-left: 0.333rem;
    font-family: var(--fuente-codigo);
    color: var(--color-gris);
}

/* Cantidad a la derecha (ej. "2 tiendas") */
.tabla-grupo-cuenta {
    float: right;
    font-weight: 400;
    text-transform: none;
    letter-spacing: 0;
    color: var(--color-gris);
}

/* ==================================================
   TEXTOS ESPECIALES
   ================================================== */

/* Segunda línea pequeña dentro de una celda (ej. "Solicitado por ... el ...") */
.celda-detalle {
    display: block;
    margin-top: 2px;
    font-size: 0.75rem;
    color: var(--color-gris);
}

/* Letra de ancho fijo para usuarios y códigos (ej. cen-001-jperez) */
.texto-codigo {
    font-family: var(--fuente-codigo);
    white-space: nowrap;
}

/* Etiqueta en forma de píldora (ej. el rol en la tabla de usuarios) */
.etiqueta {
    display: inline-block;
    padding: 0.167rem 0.556rem;
    border-radius: 999px;
    white-space: nowrap;
    font-size: 0.8rem;
    font-weight: 600;
}

.etiqueta-naranja {
    background-color: var(--color-naranja-claro);
    color: #B34A07;
}

.etiqueta-azul {
    background-color: var(--color-azul-claro);
    color: var(--color-azul-marino);
}

.etiqueta-verde {
    background-color: var(--color-verde-claro);
    color: var(--color-verde);
}

.etiqueta-morada {
    background-color: #EFE7FA;
    color: #5B2A86;
}

.etiqueta-turquesa {
    background-color: #DDF3F1;
    color: #0E6B63;
}

.etiqueta-rosada {
    background-color: #FCE7F3;
    color: #9D174D;
}

.etiqueta-gris {
    background-color: var(--color-borde-suave);
    color: var(--color-gris);
}

/* ==================================================
   AVATAR (foto redonda o iniciales)
   La imagen o las iniciales las pone js/avatar.js.
   Tamaños: .avatar-chico (tabla) | .avatar-mediano (formulario) | .avatar-grande (perfil)
   ================================================== */

.avatar {
    flex-shrink: 0;
    border-radius: 50%;
    background-color: var(--color-azul-marino);
    background-size: cover;       /* la foto llena el círculo sin deformarse */
    background-position: center;
    display: flex;                /* centra las iniciales */
    align-items: center;
    justify-content: center;
    font-weight: 700;
    color: var(--color-blanco);
}

.avatar-chico {
    width: 1.889rem;
    height: 1.889rem;
    font-size: 0.75rem;
}

.avatar-mediano {
    width: 4rem;
    height: 4rem;
    font-size: 1.3rem;
}

.avatar-grande {
    width: 8.889rem;
    height: 8.889rem;
    border: 0.222rem solid var(--color-blanco);
    box-shadow: 0 0 0 2px var(--color-borde), 0 0.333rem 0.889rem rgba(0, 28, 59, 0.15);
    font-size: 3rem;
    letter-spacing: 2px;
}

/* ==================================================
   FORMULARIOS
   <div class="campos">                       (2 columnas)
     <div class="campo">                      (etiqueta + campo + ayuda)
       <label class="campo-etiqueta">...</label>
       <input class="campo-input">
       <small class="campo-ayuda">...</small>
   .campo-ancho = ocupa las 2 columnas
   ================================================== */

.campos {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.889rem;
}

.campo-ancho {
    grid-column: 1 / -1;
}

.campo {
    display: flex;
    flex-direction: column;
    gap: 0.333rem;
}

.campo-etiqueta {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--color-azul-marino);
}

.campo-input {
    height: 2.333rem;
    padding: 0 0.667rem;
    background-color: var(--color-fondo);
    border: 1px solid var(--color-borde);
    border-radius: var(--radio);
    outline: none;
    font-family: inherit;
    font-size: 0.95rem;
    color: var(--color-texto);
    transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
}

.campo-input::placeholder {
    color: var(--color-placeholder);
}

.campo-input:focus {
    background-color: var(--color-blanco);
    border-color: var(--color-azul);
    box-shadow: var(--sombra-foco);
}

/* Campo desactivado (ej. tienda cuando el rol es Administrador) */
.campo-input:disabled {
    background-color: var(--color-borde-suave);
    cursor: not-allowed;
}

/* Texto de ayuda debajo del campo */
.campo-ayuda {
    font-size: 0.75rem;
    color: var(--color-gris);
}

/* Error del formulario. min-height reserva el espacio
   para que los botones no "salten" al aparecer el mensaje */
.form-error {
    min-height: 1.2em;
    margin: 0.889rem 0 0;
    font-size: 0.85rem;
    color: var(--color-rojo);
}

/* ==================================================
   FILTROS (selectores para filtrar una lista)
   <div class="filtros">
     <select class="campo-input filtro">...</select>
   </div>
   .filtro también se puede usar suelto (ej. en .pagina-acciones)
   ================================================== */

.filtros {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.667rem;
}

/* Misma altura que el buscador y fondo blanco */
.filtro {
    height: 2.222rem;
    min-width: 10rem;
    background-color: var(--color-blanco);
}

/* ==================================================
   PESTAÑAS (ej. una por actividad: Entregas de tienda | Encomiendas)
   <div class="pestanas"></div>  -> los botones los crea crearPestanas()
   de js/componentes.js:
     <button class="pestana activo"><i></i><span>Texto</span><span class="pestana-cuenta">3</span></button>
   .activo = la pestaña elegida. Lo usan Pedidos y Reportes.
   ================================================== */

.pestanas {
    display: flex;
    flex-wrap: wrap;
    gap: 0.222rem;
    border-bottom: 2px solid var(--color-borde);
}

.pestanas[hidden] {
    display: none;
}

.pestana {
    display: inline-flex;
    align-items: center;
    gap: 0.444rem;
    margin-bottom: -2px; /* la línea de la pestaña elegida tapa la línea de abajo */
    padding: 0.556rem 0.889rem;
    background: none;
    border: none;
    border-bottom: 0.167rem solid transparent;
    font-family: inherit;
    font-size: 0.92rem;
    font-weight: 600;
    color: var(--color-gris);
    cursor: pointer;
    transition: color 0.2s ease, border-color 0.2s ease;
}

.pestana:hover {
    color: var(--color-azul-marino);
}

.pestana.activo {
    color: var(--color-azul-marino);
    border-bottom-color: var(--color-naranja);
}

/* Número a la derecha del texto (ej. cuántos pedidos hay) */
.pestana-cuenta {
    min-width: 1.222rem;
    padding: 1px 0.444rem;
    border-radius: 999px;
    background-color: var(--color-borde-suave);
    font-size: 0.75rem;
    text-align: center;
    color: var(--color-gris);
}

.pestana-cuenta[hidden] {
    display: none;
}

.pestana.activo .pestana-cuenta {
    background-color: var(--color-naranja-claro);
    color: #B34A07;
}

/* Pestañas que son enlaces a otra sección (Tiendas | Clientes | Empresas) */
a.pestana {
    text-decoration: none;
}

a.pestana[hidden] {
    display: none;
}

/* Solo para el Desarrollador (ej. pestaña Empresas). El rol lo pone js/permisos.js */
html:not([data-rol="desarrollador"]) [data-solo-desarrollador] {
    display: none !important;
}

.pestanas + .pagina-cabecera {
    margin-top: 0.889rem;
}

/* ==================================================
   MAPA "PUNTO A -> PUNTO B" (lo arma crearMapaRuta() de js/mapa.js)
   Lo usan Pedidos y Cotizador. Barra (Ubicar A / Ubicar B / clic pone),
   resultados de búsqueda, mapa y la distancia abajo.
   ================================================== */

.mapa-ruta {
    display: flex;
    flex-direction: column;
    gap: 0.444rem;
}

.mapa-ruta-barra {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.444rem;
}

.mapa-ruta-clic {
    display: flex;
    align-items: center;
    gap: 0.333rem;
    margin-left: auto;
    font-size: 0.8rem;
    color: var(--color-gris);
}

.mapa-ruta-lado {
    display: inline-flex;
    align-items: center;
    gap: 0.222rem;
    cursor: pointer;
}

.mapa-ruta-lado b {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.222rem;
    height: 1.222rem;
    border-radius: 50%;
    font-size: 0.75rem;
    color: var(--color-blanco);
}

.mapa-ruta-lado-a b { background-color: var(--color-verde); }
.mapa-ruta-lado-b b { background-color: var(--color-naranja); }

.mapa-ruta-opciones {
    height: 2rem;
    font-size: 0.82rem;
}

.mapa-ruta-opciones[hidden] {
    display: none;
}

/* position + z-index + isolation: las capas del mapa no tapan menús ni ventanas */
.mapa-ruta-mapa {
    position: relative;
    z-index: 0;
    isolation: isolate;
    height: 15.556rem;
    border: 1px solid var(--color-borde);
    border-radius: var(--radio);
    overflow: hidden;
    background-color: var(--color-azul-claro);
}

/* Marcadores A (verde) y B (naranja) en forma de gota */
.mapa-ruta-marca span {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 1.556rem;
    height: 1.556rem;
    border: 2px solid var(--color-blanco);
    border-radius: 50% 50% 50% 0;
    transform: rotate(-45deg);
    box-shadow: 0 2px 0.333rem rgba(0, 0, 0, 0.35);
    font-weight: 700;
    font-size: 0.8rem;
    color: var(--color-blanco);
}

.mapa-ruta-marca-a span { background-color: var(--color-verde); }
.mapa-ruta-marca-b span { background-color: var(--color-naranja); }

.mapa-ruta-estado {
    margin: 0;
    font-size: 0.85rem;
    color: var(--color-gris);
}

.mapa-ruta-estado strong {
    color: var(--color-texto);
}

.mapa-ruta-estado a {
    color: var(--color-azul);
    font-weight: 600;
}

.mapa-ruta-estado.error {
    color: var(--color-rojo);
}

/* "Ampliar mapa": más alto (para poner los puntos con el dedo) */
.mapa-ruta-grande .mapa-ruta-mapa {
    height: min(70vh, 31.111rem);
}

.mapa-ruta-mapa {
    transition: height 0.2s ease;
}

/* ---------- Sugerencias de direcciones (sugerirDirecciones, js/mapa.js) ----------
   Lista bajo el campo mientras se escribe. El contenedor del campo recibe
   .mapa-sugerir-caja (position: relative) para ubicar la lista. */

.mapa-sugerir-caja {
    position: relative;
}

.mapa-sugerencias {
    position: absolute;
    left: 0;
    right: 0;
    z-index: 30;
    max-height: 14.444rem;
    margin: 0;
    padding: 0.222rem 0;
    overflow-y: auto;
    list-style: none;
    background-color: var(--color-blanco);
    border: 1px solid var(--color-borde);
    border-radius: var(--radio);
    box-shadow: 0 0.556rem 1.333rem rgba(0, 28, 59, 0.18);
}

.mapa-sugerencias[hidden] {
    display: none;
}

.mapa-sugerencias li {
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 0.444rem 0.667rem;
    cursor: pointer;
}

.mapa-sugerencias li:hover,
.mapa-sugerencias li.activo {
    background-color: var(--color-azul-claro);
}

.mapa-sugerencias strong {
    font-size: 0.88rem;
    color: var(--color-texto);
}

.mapa-sugerencias small {
    overflow: hidden;
    font-size: 0.74rem;
    color: var(--color-gris);
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* "Buscando..." / "Sin resultados" */
.mapa-sugerencias li.mapa-sugerencias-aviso {
    cursor: default;
    font-size: 0.82rem;
    color: var(--color-gris);
}

.mapa-sugerencias li.mapa-sugerencias-aviso:hover {
    background: none;
}

/* ---------- Tablet: la barra se ordena en 2 filas ---------- */
@media (max-width: 900px) {
    .mapa-ruta-clic {
        order: 3;
        margin-left: 0;
    }

    .mapa-ruta-ampliar {
        margin-left: auto;
    }
}

/* ---------- Celular: botones grandes y a lo ancho, mapa más bajo ---------- */
@media (max-width: 600px) {
    .mapa-ruta-barra {
        display: grid;
        grid-template-columns: 1fr 1fr;
    }

    .mapa-ruta-barra .boton {
        width: 100%;
        min-height: 2.5rem;
        white-space: normal;
        line-height: 1.15;
    }

    .mapa-ruta-clic {
        grid-column: 1 / -1;
        justify-content: center;
        padding: 0.375rem 0;
        font-size: 0.85rem;
    }

    .mapa-ruta-ampliar {
        grid-column: 1 / -1;
        margin-left: 0;
    }

    /* Botones A / B más fáciles de tocar */
    .mapa-ruta-lado b {
        width: 1.875rem;
        height: 1.875rem;
        font-size: 0.85rem;
    }

    .mapa-ruta-mapa {
        height: 15rem;
    }

    .mapa-ruta-grande .mapa-ruta-mapa {
        height: 65vh;
    }

    .mapa-ruta-estado {
        font-size: 0.82rem;
        line-height: 1.5;
    }

    .mapa-sugerencias {
        max-height: 50vh;
    }

    .mapa-sugerencias li {
        padding: 0.625rem 0.75rem; /* más espacio para el dedo */
    }
}

/* ==================================================
   RESUMEN POR ESTADO (cuadros con un número; al presionar uno se filtra)
   <div class="resumen">
     <button class="resumen-item resumen-verde" data-estado="...">
       <span class="resumen-numero">3</span>
       <span class="resumen-texto">Disponibles</span>
     </button>
   </div>
   Colores de la línea izquierda: resumen-verde, -azul, -naranja, -turquesa, -rosada, -gris.
   .activo = el cuadro del filtro elegido. Lo usan Vehículos y Pedidos.
   ================================================== */

.resumen {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(7.778rem, 100%), 1fr));
    gap: 0.667rem;
}

.resumen-item {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 0.778rem 1rem;
    background-color: var(--color-blanco);
    border: 1px solid var(--color-borde);
    border-left: 0.222rem solid var(--color-azul-marino);
    border-radius: var(--radio-grande);
    box-shadow: var(--sombra-tarjeta);
    font-family: inherit;
    text-align: left;
    cursor: pointer;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

/* Cuadro oculto (ej. "En bodega" en una actividad que no usa bodega) */
.resumen-item[hidden] {
    display: none;
}

.resumen-verde    { border-left-color: var(--color-verde); }
.resumen-azul     { border-left-color: var(--color-azul); }
.resumen-naranja  { border-left-color: var(--color-naranja); }
.resumen-turquesa { border-left-color: #0E6B63; }
.resumen-rosada   { border-left-color: #9D174D; }
.resumen-gris     { border-left-color: var(--color-gris); }
.resumen-morada   { border-left-color: #6D28D9; }

.resumen-item:hover {
    box-shadow: 0 0.333rem 1rem rgba(0, 28, 59, 0.12);
}

.resumen-item.activo {
    background-color: var(--color-azul-claro);
}

.resumen-numero {
    font-size: 1.6rem;
    font-weight: 700;
    color: var(--color-texto);
    line-height: 1.1;
}

.resumen-texto {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--color-gris);
}

/* ==================================================
   VENTANAS (<dialog>, se abren con showModal())
   .dialogo-chico = ventana angosta (confirmaciones)
   ================================================== */

.dialogo {
    width: min(31.111rem, calc(100vw - 1.778rem)); /* ancho de la ventana */
    max-height: calc(100vh - 1.778rem);
    overflow-y: auto; /* si no cabe en pantallas bajas, aparece scroll dentro */
    padding: 0;
    border: none;
    border-radius: var(--radio-grande);
    background-color: var(--color-blanco);
    box-shadow: 0 1.111rem 2.778rem rgba(0, 0, 0, 0.3);
}

.dialogo-chico {
    width: min(23.333rem, calc(100vw - 1.778rem));
    padding: 1.333rem;
}

/* Aparece creciendo; el fondo oscuro con un fundido */
.dialogo[open] {
    animation: abrirDialogo 0.2s ease-out;
}

.dialogo::backdrop {
    background-color: rgba(0, 28, 59, 0.55);
}

.dialogo[open]::backdrop {
    animation: fundido 0.2s ease-out;
}

/* Formulario dentro de la ventana */
.dialogo-form {
    padding: 1.333rem;
}

.dialogo-titulo {
    margin: 0 0 1.111rem;
    font-size: 1.2rem;
    font-weight: 600;
    color: var(--color-texto);
}

.dialogo-texto {
    margin: 0;
    font-size: 0.95rem;
    color: var(--color-texto);
    line-height: 1.5;
}

/* Botones de la ventana, a la derecha */
.dialogo-botones {
    display: flex;
    justify-content: flex-end;
    gap: 0.556rem;
    margin-top: 1.111rem;
}

/* ==================================================
   PANTALLAS ANGOSTAS
   ================================================== */

@media (max-width: 600px) {
    .pagina {
        padding: 1rem;
    }

    .campos {
        grid-template-columns: 1fr; /* formulario en 1 columna */
    }

    .buscador {
        width: 100%;
    }

    .filtro {
        flex: 1 1 100%; /* cada filtro a lo ancho */
    }
}

/* ==================================================
   QR (js/qr.js): lector con la cámara, QR para ver / imprimir,
   ficha del piloto validado y ventana con la información del pedido
   ================================================== */

.qr-dialogo {
    width: min(32rem, calc(100vw - 1.25rem));
}

.qr-camara {
    position: relative;
    overflow: hidden;
    aspect-ratio: 4 / 3;
    border-radius: var(--radio-grande);
    background-color: var(--color-fondo-oscuro);
}

.qr-camara[hidden] {
    display: none;
}

.qr-camara video {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.qr-marco {
    position: absolute;
    inset: 18%;
    border: 0.188rem solid rgba(255, 255, 255, 0.9);
    border-radius: var(--radio-grande);
    box-shadow: 0 0 0 100vmax rgba(0, 28, 59, 0.35);
    pointer-events: none;
}

.qr-sin-camara {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    padding: 1.25rem;
    font-size: 0.9rem;
    text-align: center;
    color: var(--color-blanco);
    background-color: var(--color-fondo-oscuro);
}

.qr-estado {
    margin: 0.75rem 0 0;
    padding: 0.625rem 0.75rem;
    border-radius: var(--radio);
    background-color: var(--color-fondo);
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--color-texto);
}

.qr-estado:empty {
    display: none;
}

.qr-estado.ok    { background-color: var(--color-verde-claro); color: var(--color-verde); }
.qr-estado.error { background-color: var(--color-rojo-claro);  color: var(--color-rojo); }

/* Ficha del piloto validado: foto grande y nombre */
.qr-ficha {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.5rem;
    margin-top: 0.75rem;
    text-align: center;
}

.qr-ficha-nombre {
    font-size: 1.2rem;
    color: var(--color-texto);
}

.qr-ficha-tienda {
    font-size: 0.85rem;
    color: var(--color-gris);
}

/* Horario que se marcará al validar (QR del piloto, js/qr.js) */
.qr-ficha-horario {
    font-weight: 600;
    color: var(--color-texto);
}

.qr-ficha-tarde {
    color: var(--color-naranja-oscuro);
}

.qr-ficha .qr-justificar {
    align-self: stretch;
    text-align: left;
}

/* Marca tardía: "¿Por qué llegas tarde?" dentro del lector */
.qr-justificar {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.qr-justificar .campo-input {
    height: auto;
    padding: 0.5rem 0.75rem;
    resize: vertical;
}

/* QR para ver, descargar o imprimir */
.qr-ver {
    text-align: center;
}

.qr-subtitulo {
    margin: -0.5rem 0 0.75rem;
    font-size: 0.85rem;
    color: var(--color-gris);
}

.qr-persona {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    margin-bottom: 0.75rem;
    font-size: 1.05rem;
}

.qr-persona[hidden] {
    display: none;
}

.qr-lienzo {
    display: block;
    width: min(18rem, 100%);
    height: auto;
    margin: 0 auto;
    image-rendering: pixelated;
    border: 1px solid var(--color-borde);
    border-radius: var(--radio);
}

.qr-nota {
    margin: 0.75rem 0 0;
    font-size: 0.85rem;
    color: var(--color-gris);
}

/* Ventana con la información del pedido (al escanear su QR, js/qr.js mostrarPedidoQr):
   cabecera y botones fijos; en medio los grupos Cliente, Entrega, Cobro, Notas y Mercadería */
.qr-pedido-dialogo {
    width: min(34rem, calc(100vw - 1.25rem));
    overflow: hidden; /* el scroll va solo en el cuerpo */
}

.qr-pedido {
    display: flex;
    flex-direction: column;
    max-height: calc(100vh - 1.778rem);
    max-height: calc(100dvh - 1.778rem);
}

.qr-pedido-cabeza {
    padding: 1.111rem 1.333rem 0.667rem;
    border-bottom: 1px solid var(--color-borde);
}

.qr-pedido-cabeza .qr-subtitulo {
    margin: 0;
}

.qr-pedido-titulo {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.333rem;
}

.qr-pedido-cuerpo {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding: 0.778rem 1.333rem;
    display: flex;
    flex-direction: column;
    gap: 0.667rem;
}

.qr-pedido-cuerpo > * {
    flex-shrink: 0; /* cada grupo con su alto: el scroll lo hace el cuerpo */
}

.qr-pedido-botones {
    margin: 0;
    padding: 0.778rem 1.333rem;
    border-top: 1px solid var(--color-borde);
    background-color: var(--color-fondo);
}

.qr-bloque {
    padding: 0.667rem 0.778rem;
    border: 1px solid var(--color-borde);
    border-radius: var(--radio);
}

.qr-bloque-titulo {
    margin: 0 0 0.5rem;
    font-size: 0.8rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--color-azul-marino);
}

.qr-datos {
    display: grid;
    grid-template-columns: minmax(5.5rem, max-content) minmax(0, 1fr);
    gap: 0.333rem 0.889rem;
    margin: 0;
    font-size: 0.9rem;
    line-height: 1.35;
}

.qr-datos dt {
    font-weight: 600;
    color: var(--color-gris);
}

.qr-datos dd {
    margin: 0;
    color: var(--color-texto);
    overflow-wrap: anywhere;
}

.qr-tel {
    color: var(--color-azul);
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

/* Total a cobrar, destacado */
.qr-total {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem 0.667rem;
    margin-top: 0.556rem;
    padding: 0.556rem 0.667rem;
    border-radius: var(--radio);
    background-color: var(--color-azul-claro);
}

.qr-total-texto {
    flex: 1 1 100%;
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--color-azul-marino);
}

.qr-total-monto {
    font-size: 1.35rem;
    color: var(--color-texto);
}

.qr-alerta {
    margin: 0;
    padding: 0.5rem 0.667rem;
    border-left: 0.222rem solid var(--color-naranja);
    border-radius: var(--radio);
    background-color: var(--color-naranja-claro);
    font-size: 0.85rem;
    font-weight: 600;
    color: #B34A07;
}

.qr-notas {
    margin: 0;
    font-size: 0.9rem;
    white-space: pre-line;
    overflow-wrap: anywhere;
}

.qr-mercaderia {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.85rem;
}

.qr-mercaderia th {
    padding: 0 0.333rem 0.333rem;
    font-size: 0.75rem;
    font-weight: 600;
    text-align: left;
    color: var(--color-gris);
    border-bottom: 1px solid var(--color-borde);
}

.qr-mercaderia td {
    padding: 0.333rem;
    vertical-align: top;
    border-bottom: 1px solid var(--color-borde);
}

.qr-mercaderia tr:last-child td {
    border-bottom: none;
}

.qr-mercaderia td small {
    display: block;
    color: var(--color-gris);
}

.qr-mercaderia .qr-num {
    text-align: right;
    white-space: nowrap;
}

@media (max-width: 600px) {
    .qr-pedido-cabeza,
    .qr-pedido-cuerpo,
    .qr-pedido-botones {
        padding-left: 0.889rem;
        padding-right: 0.889rem;
    }

    .qr-datos {
        grid-template-columns: minmax(4.5rem, max-content) minmax(0, 1fr);
        gap: 0.278rem 0.667rem;
        font-size: 0.875rem;
    }

    .qr-pedido-botones .boton {
        flex: 1 1 0;
        justify-content: center;
    }
}

/* ==================================================
   ACCESIBILIDAD: "reducir movimiento" del sistema operativo
   ================================================== */

@media (prefers-reduced-motion: reduce) {
    .aviso.visible,
    .dialogo[open] {
        animation: none;
    }

    .boton-principal:hover:not(:disabled),
    .boton-peligro:hover:not(:disabled),
    .boton-icono:hover:not(:disabled) {
        transform: none;
    }
}
