/* ══════════════════════════════════════════════════════════════════════════════
   El Grecko — capa de marca sobre OneUI 5.12
   ──────────────────────────────────────────────────────────────────────────────
   El rojo de marca YA NO se parchea acá: lo hornea el tema compilado
   (assets/oneui/css/themes/grecko.min.css, fuente en assets/oneui/_src/grecko.scss).
   Recompilar con:  npx gulp css-scss-themes && npx gulp css-min-themes
   en ui_ejemplo/oneui/ — en ese orden, no juntos: gulp los corre en paralelo y el
   minificador se adelanta al compilador.

   Acá quedan solo dos cosas: los huecos del tema, y lo específico de Grecko.
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Hueco del tema de OneUI ──────────────────────────────────────────────────
   El mixin color-theme() no regenera .border-primary: queda con el azul
   #2356d7 literal aunque el resto del tema esté en rojo. Es un bug del template.
   Si en una versión futura lo arreglan, esta regla se puede borrar. */
/* .border-primary { border-color: #bf1a00 !important; } */

/* ── Variables de texto de Grecko → tokens de OneUI ───────────────────────────
   HALLAZGO (2026-07-15): --tx-1..4, --bd, --bg-raised y --bg-2 se usan 388 veces
   entre index.php, grecko.css y grecko.js — y NO ESTÁN DEFINIDAS EN NINGÚN LADO.
   Ni acá ni en producción. Verificado en el browser: var(--tx-1) resuelve a "",
   el var() queda inválido y la propiedad hereda. Resultado: un <h1> con
   color:var(--tx-1) y un <p> con color:var(--tx-4) computan al MISMO gris
   (rgb(51,65,85), el color del body). La jerarquía de texto que el autor quiso
   nunca existió — está todo plano.

   Definirlas acá, mapeadas a los tokens de Bootstrap/OneUI, repara las 388 de una
   sola vez y recupera la jerarquía original, ahora con la paleta del template.
   Alternativa era editar 388 declaraciones a mano; esto es una.

   A medida que se migre cada vista, los estilos inline se van reemplazando por
   clases de OneUI (text-muted, fs-sm…) y este bloque se puede ir achicando. */
:root {
    --tx-1:      var(--bs-emphasis-color);   /* títulos */
    --tx-2:      var(--bs-body-color);       /* texto normal */
    --tx-3:      var(--bs-secondary-color);  /* secundario */
    --tx-4:      var(--bs-tertiary-color);   /* apagado / muted */
    --bd:        var(--bs-border-color);
    --bg-raised: var(--bs-tertiary-bg);
    --bg-2:      var(--bs-body-bg);
    --scs-red: #bf1a00;                    /* rojo de marca (renders JS heredados; --bs-primary sigue azul por un quirk del tema) */
}

/* ── Botón de marca ───────────────────────────────────────────────────────────
   btn-alt-primary de OneUI es un botón "suave" (fondo tenue). Para el CTA de
   marca lo queremos sólido en rojo. */
/* .btn-alt-primary {
    --bs-btn-color:                #fff;
    --bs-btn-bg:                   #bf1a00;
    --bs-btn-border-color:         #bf1a00;
    --bs-btn-hover-color:          #fff;
    --bs-btn-hover-bg:             #b91c1c;
    --bs-btn-hover-border-color:   #b91c1c;
    --bs-btn-active-bg:            #b91c1c;
    --bs-btn-active-border-color:  #b91c1c;
} */

/* Panel de marca del login: el gradiente + halo rojo del UI que le gustó al
   grupo, acá sobre el layout de OneUI en vez de Tailwind. */
.grk-hero {
    background:
        radial-gradient(circle at top left, rgba(191,26,0, .20), transparent 40%),
        linear-gradient(135deg, #050505, #101010, #181818);
}
.grk-hero-logo { max-width: 150px; height: auto; }
.grk-hero-ico  { color: #f87171; }

/* El foco de los inputs viene azul del build de OneUI. */
.form-control:focus {
    border-color: #bf1a00;
    box-shadow: 0 0 0 .25rem rgba(191,26,0, .15);
}

/* ── Bloque de sesión del sidebar ─────────────────────────────────────────────
   El .env-badge-side de grecko.css estaba dimensionado para el sidebar viejo
   (.grk-sidebar) y se desborda dentro del #sidebar de OneUI. Esto lo reemplaza. */
.grk-side-sesion { padding: .5rem 1.25rem 1rem; }
.grk-side-env {
    display: inline-flex; align-items: center; gap: .4rem;
    font-size: .72rem; font-weight: 600;
    border-radius: 6px; padding: .25rem .6rem;
    max-width: 100%;
}
.grk-side-env.lab  { background: rgba(245, 158, 11, .12); color: #fbbf24; }
.grk-side-env.prod { background: rgba(22, 163, 74, .12);  color: #4ade80; }

/* El logout es un <button> dentro de un <form>: OneUI espera un <a>. */
#sidebar .nav-main-item form { margin: 0; }
#sidebar .nav-main-item form .nav-main-link { cursor: pointer; }

/* ── Card de sorteo ───────────────────────────────────────────────────────────
   La franja lateral por estado venía de .sorteo-card en grecko.css. Se
   reimplementa acá sobre el .block de OneUI para poder retirar esa hoja.
   Los colores salen de los tokens semánticos, no de hex sueltos. */
.grk-sorteo-card { border-left: 3px solid var(--bs-secondary); }
.grk-sorteo-card.activo  { border-left-color: var(--bs-success); }
.grk-sorteo-card.pausado { border-left-color: var(--bs-warning); }
.grk-sorteo-card.cerrado { border-left-color: var(--bs-secondary); }

/* ── Monitoreo ────────────────────────────────────────────────────────────────
   Estos dos keyframes vivían en grecko.css y son necesarios para que el panel
   de monitoreo funcione: pulse-live late en el badge EN VIVO, y row-flash lo
   dispara grecko.js:4737 cuando entra un pedido nuevo. Se mudan acá para poder
   retirar grecko.css sin matar las animaciones. */
@keyframes pulse-live { 0%, 100% { opacity: 1 } 50% { opacity: .4 } }
@keyframes row-flash  { 0% { background: rgba(52, 211, 153, .25) } 100% { background: transparent } }

.grk-live { animation: pulse-live 2s infinite; letter-spacing: .8px; }
@media (prefers-reduced-motion: reduce) { .grk-live { animation: none } }

.grk-ticker {
    display: flex; align-items: center; gap: .75rem;
    border-radius: 10px; padding: .6rem 1rem; margin-bottom: .75rem;
}
.min-w-0 { min-width: 0; }

/* ── Overlays custom (modales de Vendedores) ──────────────────────────────────
   vendModal y vendDetalleModal no son modales de Bootstrap sino overlays con
   toggle d-none. Antes tenían el fondo hardcodeado (#CACAC9). Estas clases dan
   el look de OneUI sin cambiar el mecanismo de show/hide del JS. */
.grk-overlay {
    position: fixed; inset: 0; z-index: 1050;
    display: flex; align-items: center; justify-content: center;
    padding: 1rem; background: rgba(0, 0, 0, .5);
}
.grk-overlay-box {
    width: 100%; max-width: 700px; max-height: 90vh; overflow-y: auto;
    border-radius: 12px; padding: 1.5rem;
    box-shadow: 0 1rem 3rem rgba(0, 0, 0, .3);
}

/* ── Utilidades genéricas rescatadas de grecko.css ────────────────────────────
   Estas 3 no son "de Grecko viejo", son utilidades neutras y baratas. Se mueven
   acá para que sobrevivan cuando se retire grecko.css. (num-mono 36 usos,
   fade-in 11, empty-state 3). --r → --bs-border-radius para no depender del
   :root de grecko.css. */
.num-mono    { font-family: ui-monospace, "SF Mono", monospace; letter-spacing: .05em; }
.fade-in     { animation: fadeIn .18s ease-out; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .fade-in { animation: none; } }

.empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 3rem 1rem; text-align: center; }
.empty-icon  {
    width: 46px; height: 46px; border-radius: var(--bs-border-radius);
    display: flex; align-items: center; justify-content: center;
    background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color);
    margin-bottom: .65rem;
}

/* ── Tab "Zona de peligro" de Configuración ───────────────────────────────────
   Rojo siempre, para separarlo visualmente del resto de los tabs de settings. */
.cfg-tab-danger            { color: var(--bs-danger) !important; font-weight: 600; }
.cfg-tab-danger:hover      { color: var(--bs-danger) !important; background-color: var(--bs-danger-bg-subtle) !important; }
.nav-tabs-block .nav-link.cfg-tab-danger.active {
    color: var(--bs-danger) !important;
    box-shadow: inset 0 3px 0 var(--bs-danger);
}

/* ── Lightbox del comprobante ─────────────────────────────────────────────────
   Overlay a pantalla completa por encima de todo (los modales de Bootstrap
   llegan a z-index ~1055; este va bien arriba). Click en cualquier lado cierra. */
.grk-lightbox {
    position: fixed; inset: 0; z-index: 2000;
    background: rgba(0, 0, 0, .85);
    display: flex; align-items: center; justify-content: center;
    padding: 2.5rem; cursor: zoom-out;
}
.grk-lightbox img {
    max-width: 100%; max-height: 90vh; border-radius: .5rem;
    box-shadow: 0 8px 40px rgba(0, 0, 0, .5);
}
.grk-lightbox-close { position: absolute; top: 1.25rem; right: 1.25rem; }

/* ── Chip de sorteo (tablas) ──────────────────────────────────────────────────
   Los nombres de sorteo son largos y se repiten fila a fila. El chip muestra el
   premio principal y resume el resto en "+N"; el nombre completo va en title. */
.grk-sorteo-chip {
    display: inline-flex; align-items: center; gap: .35rem;
    max-width: 190px; padding: .25rem .55rem;
    background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color);
    border-radius: .375rem; font-size: .8rem; font-weight: 600;
    color: var(--bs-emphasis-color); white-space: nowrap; cursor: help;
}
.grk-sorteo-mas {
    flex: 0 0 auto; padding: 0 .3rem; border-radius: .25rem;
    background: var(--scs-red); color: #fff; font-size: .68rem; font-weight: 700;
}

/* ── Modal Detalle de Pedido ──────────────────────────────────────────────────
   Componentes propios del modal: bolillas de números, tabs, lista de
   verificación y timeline del ciclo de vida. */

/* Bolilla: círculo blanco con el número en rojo, como la del bolillero. */
.grk-bolilla {
    display: inline-flex; align-items: center; justify-content: center;
    width: 64px; height: 64px; padding: 0;      /* w == h → círculo real */
    flex: 0 0 auto; border-radius: 50%; background: #fff;
    border: 2px solid var(--bs-border-color);
    color: var(--scs-red); font-weight: 800; font-size: .8rem;
    font-family: ui-monospace, "SF Mono", monospace; letter-spacing: -.02em;
    /* Sombra interna arriba-izq + externa: da volumen de bolilla física */
    box-shadow: inset 0 3px 6px rgba(255,255,255,.9), inset 0 -3px 8px rgba(0,0,0,.10),
                0 2px 5px rgba(0,0,0,.12);
    transition: transform .12s ease, box-shadow .12s ease;
}
.grk-bolilla:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0,0,0,.14); }

/* Tabs del modal: el activo se marca con una barra de acento arriba. */
.mdp-tabs .nav-link          { font-weight: 600; color: var(--bs-secondary-color); border-top: 3px solid transparent; }
.mdp-tabs .nav-link:hover    { color: var(--scs-red); background-color: var(--bs-tertiary-bg); }
.mdp-tabs .nav-link.active   { color: var(--scs-red); border-top-color: var(--scs-red); background-color: #fff; }
.mdp-tabs .nav-link i        { opacity: .75; }
.mdp-tabs .nav-link.active i { opacity: 1; }

/* Lista de verificación bancaria: pares clave/valor con guía punteada. */
.mdp-verif-row {
    display: flex; align-items: baseline; gap: .75rem;
    padding: .6rem 0; border-bottom: 1px dashed var(--bs-border-color);
}
.mdp-verif-row:last-child { border-bottom: 0; }
.mdp-verif-k { flex: 0 0 auto; min-width: 120px; color: var(--bs-secondary-color); font-size: .875rem; }
.mdp-verif-v { flex: 1 1 auto; text-align: right; word-break: break-word; }

/* Thumb del comprobante: se muestra solo, sin click. */
.mdp-comprobante-thumb {
    max-width: 100%; max-height: 260px; border-radius: .5rem;
    border: 2px solid var(--bs-border-color); cursor: zoom-in;
    transition: border-color .15s ease, transform .15s ease;
}
.mdp-comprobante-thumb:hover { border-color: var(--scs-red); transform: scale(1.02); }

/* Timeline vertical del ciclo de vida: rail + nodos. */
.mdp-timeline { position: relative; padding-left: 2.75rem; }
.mdp-timeline::before {
    content: ''; position: absolute; left: 1.05rem; top: .5rem; bottom: .5rem;
    width: 2px; background: var(--bs-border-color);
}
.mdp-tl-item { position: relative; padding-bottom: 1.5rem; }
.mdp-tl-item:last-child { padding-bottom: 0; }
.mdp-tl-dot {
    position: absolute; left: -2.75rem; top: 0;
    width: 2.25rem; height: 2.25rem; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: .85rem; background: var(--bs-body-bg);
    border: 2px solid var(--bs-border-color); color: var(--bs-secondary-color);
    z-index: 1;
}
.mdp-tl-item.is-done    .mdp-tl-dot { background: var(--scs-red); border-color: var(--scs-red); color: #fff; }
.mdp-tl-item.is-current .mdp-tl-dot { border-color: var(--scs-red); color: var(--scs-red); border-width: 3px; }
.mdp-tl-item.is-error   .mdp-tl-dot { background: var(--bs-danger); border-color: var(--bs-danger); color: #fff; }
.mdp-tl-card {
    background: var(--bs-tertiary-bg); border-radius: .5rem; padding: .75rem 1rem;
    border-left: 3px solid transparent;
}
.mdp-tl-item.is-done    .mdp-tl-card { border-left-color: var(--scs-red); }
.mdp-tl-item.is-current .mdp-tl-card { border-left-color: var(--bs-warning); }
.mdp-tl-item.is-error   .mdp-tl-card { border-left-color: var(--bs-danger); }

/* ── Zona de peligro (Config) ─────────────────────────────────────────────────
   Caja de acciones destructivas. Usa los tokens danger-subtle de Bootstrap 5.3
   para adaptarse a claro/oscuro sin hornear hex. (danger-zone 3 usos en Config). */
.danger-zone {
    background: var(--bs-danger-bg-subtle);
    border: 1px solid var(--bs-danger-border-subtle);
    border-radius: var(--bs-border-radius-lg);
    overflow: hidden;
}
.danger-zone-header {
    padding: .6rem 1rem;
    border-bottom: 1px solid var(--bs-danger-border-subtle);
    display: flex; align-items: center; gap: .5rem;
}

/* ── Badges semánticos de Grecko (ESTÁNDAR v3.01) ────────────────────────────
   Clases re-utilizables para estados del dominio. Tienen forma propia, así
   sirven SOLAS (<span class="badge-activo">) igual que los badge-* viejos de
   grecko.css, y también combinadas con .badge de Bootstrap.
   La forma va ANTES de los colores para que el border-color de cada clase gane. */
.badge-activo, .badge-pausado, .badge-cerrado, .badge-lab, .badge-prod,
.badge-aprobado, .badge-pendiente, .badge-rechazado {
    display: inline-block; padding: .35em .65em;
    font-size: .75rem; font-weight: 600; line-height: 1;
    border-radius: .375rem; white-space: nowrap; vertical-align: baseline;
    border: 1px solid transparent;
}
/* Pills claros (fondo suave + borde) */
.badge-activo   { background: #f0fdf4; color: #15803d; border-color: #86efac; }
.badge-pausado  { background: #fffbeb; color: #92400e; border-color: #fcd34d; }
.badge-cerrado  { background: #f3f4f6; color: #6b7280; border-color: #d1d5db; }
.badge-lab      { background: #fffbeb; color: #92400e; border-color: #fcd34d; }
.badge-prod     { background: #f0fdf4; color: #15803d; border-color: #86efac; }
/* Sólidos (estados de pedido) */
.badge-aprobado { background: #61A100; color: #fff; }
.badge-pendiente{ background: #fcd34d; color: #78350f; }
.badge-rechazado{ background: #BE2E2E; color: #fff; }

/* ── Preview flotante de fila de pedido (hover, sin abrir el detalle) ─────────
   Card fijo que sigue al cursor. pointer-events:none para no robar el
   mouseleave de la fila. El panel está fijado en tema light. */
.grk-preview {
    position: fixed;
    z-index: 3000;
    width: 300px;
    max-width: 88vw;
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: .55rem;
    box-shadow: 0 12px 34px rgba(0, 0, 0, .18);
    padding: .7rem .8rem;
    pointer-events: none;
    font-size: .8rem;
    color: #1f2937;
}
.grk-preview-head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .3rem; }
.grk-preview-name { font-weight: 800; color: #111827; line-height: 1.15; }
.grk-preview-nro  { color: #9ca3af; font-size: .72rem; margin-bottom: .4rem; }
.grk-preview-row  { display: flex; align-items: center; gap: .45rem; padding: .12rem 0; }
.grk-preview-row i { width: 14px; text-align: center; color: #9ca3af; font-size: .72rem; flex-shrink: 0; }
.grk-preview-lbl  { color: #9ca3af; min-width: 52px; }
.grk-preview-val  { color: #1f2937; font-weight: 600; margin-left: auto; text-align: right;
                    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 190px; }
.grk-preview-nota { margin-top: .4rem; padding-top: .4rem; border-top: 1px dashed #e5e7eb;
                    color: #6b7280; font-size: .74rem; white-space: normal; }
