/* ============================================================
   PATHFINDER — Capa de diseño compartida (rediseño 2026)
   Eleva el look de todas las páginas SIN tocar el JavaScript.
   Se carga junto con Tailwind (CDN). Define variables de marca,
   pulido global y clases de componente reutilizables (.pf-*).
   ============================================================ */

:root {
  --pf-majorelle: #7145D6;
  --pf-majorelle-dark: #5A34B5;
  --pf-majorelle-light: #8B6CE0;
  --pf-periwinkle: #DBCCFF;
  --pf-ink: #211C33;
  --pf-ink-soft: #4A4560;
  --pf-muted: #7A748C;
  --pf-line: #ECEAF3;
  --pf-surface: #FFFFFF;
  --pf-app-bg: #F4F4F9;

  --pf-grad: linear-gradient(135deg, #7145D6 0%, #8B6CE0 100%);
  --pf-grad-deep: linear-gradient(135deg, #5A34B5 0%, #7145D6 100%);

  --pf-shadow-sm: 0 1px 2px rgba(33,28,51,.05), 0 1px 3px rgba(33,28,51,.04);
  --pf-shadow: 0 2px 8px -2px rgba(33,28,51,.08), 0 1px 3px rgba(33,28,51,.05);
  --pf-shadow-md: 0 10px 28px -8px rgba(33,28,51,.14), 0 2px 6px rgba(33,28,51,.06);
  --pf-shadow-lg: 0 24px 48px -16px rgba(33,28,51,.22);
}

/* ---------- Base / tipografía ---------- */
html { -webkit-text-size-adjust: 100%; }
body {
  font-family: 'Inter', sans-serif;
  color: var(--pf-ink);
  background-color: var(--pf-app-bg);
  background-image:
    radial-gradient(1200px 600px at 100% -10%, rgba(113,69,214,.05), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, rgba(139,108,224,.045), transparent 55%);
  background-attachment: scroll;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
h1, h2, h3, h4, h5, h6 { font-family: 'Montserrat', sans-serif; letter-spacing: -0.01em; }

::selection { background: rgba(113,69,214,.22); color: var(--pf-ink); }

/* ---------- Scrollbar ---------- */
* { scrollbar-width: thin; scrollbar-color: #CfC9DC transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb { background: #D5D0E2; border-radius: 999px; border: 2px solid transparent; background-clip: content-box; }
*::-webkit-scrollbar-thumb:hover { background: #BCB4D2; background-clip: content-box; }

/* ---------- Focus visible (accesibilidad) ---------- */
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--pf-majorelle);
  outline-offset: 2px;
  border-radius: 6px;
}

/* ============================================================
   SIDEBAR
   ============================================================ */
.pf-sidebar {
  background: linear-gradient(180deg, #262036 0%, #1B1728 100%);
  border-right: 1px solid rgba(255,255,255,.06);
}
.pf-sidebar::before {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(600px 300px at 50% -5%, rgba(113,69,214,.22), transparent 70%);
  pointer-events: none;
}
.pf-brand-badge {
  background: var(--pf-grad);
  box-shadow: 0 6px 16px -4px rgba(113,69,214,.6);
}
/* Links del sidebar (aplicar .pf-nav sobre el <a>) */
.pf-nav {
  position: relative;
  color: #A9A2BE;
  transition: color .18s ease, background .18s ease;
}
.pf-nav:hover { color: #fff; background: rgba(255,255,255,.05); }
.pf-nav.pf-nav-active {
  color: #fff;
  background: linear-gradient(90deg, rgba(113,69,214,.28), rgba(113,69,214,.08));
}
.pf-nav.pf-nav-active::before {
  content: ""; position: absolute; left: -12px; top: 50%; transform: translateY(-50%);
  width: 3px; height: 20px; border-radius: 999px; background: var(--pf-majorelle-light);
  box-shadow: 0 0 12px rgba(139,108,224,.8);
}
.pf-nav-section {
  font-size: 10px; letter-spacing: .12em; text-transform: uppercase;
  color: #6D6683; font-weight: 700; padding: 14px 12px 6px;
}

/* ============================================================
   HEADER
   ============================================================ */
.pf-header {
  background: rgba(255,255,255,.78);
  backdrop-filter: saturate(180%) blur(12px);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid var(--pf-line);
}

/* ============================================================
   CARDS / SUPERFICIES
   ============================================================ */
.pf-card {
  background: var(--pf-surface);
  border: 1px solid var(--pf-line);
  border-radius: 1.1rem;
  box-shadow: var(--pf-shadow);
}
.pf-card-hover { transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease; }
.pf-card-hover:hover { transform: translateY(-2px); box-shadow: var(--pf-shadow-md); border-color: rgba(113,69,214,.22); }

/* KPI card */
.pf-kpi {
  position: relative;
  background: var(--pf-surface);
  border: 1px solid var(--pf-line);
  border-radius: 1.1rem;
  box-shadow: var(--pf-shadow);
  transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
  overflow: hidden;
}
.pf-kpi::after {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 3px;
  background: var(--pf-grad); opacity: 0; transition: opacity .2s ease;
}
.pf-kpi:hover { transform: translateY(-3px); box-shadow: var(--pf-shadow-md); border-color: rgba(113,69,214,.22); }
.pf-kpi:hover::after { opacity: 1; }

/* Encabezado de tarjeta (título de sección) */
.pf-card-head {
  border-bottom: 1px solid var(--pf-line);
}

/* ============================================================
   BOTONES
   ============================================================ */
.pf-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  font-weight: 600; font-size: .875rem; line-height: 1;
  padding: .625rem 1rem; border-radius: .7rem;
  transition: transform .15s ease, box-shadow .2s ease, background .2s ease, border-color .2s ease;
  cursor: pointer; white-space: nowrap;
}
.pf-btn:active { transform: translateY(1px); }
.pf-btn-primary { background: var(--pf-grad); color: #fff; box-shadow: 0 8px 20px -8px rgba(113,69,214,.55); }
.pf-btn-primary:hover { box-shadow: 0 12px 26px -8px rgba(113,69,214,.7); filter: brightness(1.04); }
.pf-btn-ghost { background: #fff; color: var(--pf-ink); border: 1px solid var(--pf-line); }
.pf-btn-ghost:hover { border-color: rgba(113,69,214,.35); color: var(--pf-majorelle-dark); background: #FBFAFF; }

/* ============================================================
   BADGES / CHIPS
   ============================================================ */
.pf-chip {
  display: inline-flex; align-items: center; gap: .3rem;
  font-size: .6875rem; font-weight: 600; letter-spacing: .02em;
  padding: .15rem .55rem; border-radius: 999px;
}
.pf-chip-brand { background: rgba(113,69,214,.1); color: var(--pf-majorelle-dark); }

/* ============================================================
   TABLAS
   ============================================================ */
.pf-table { width: 100%; border-collapse: separate; border-spacing: 0; }
.pf-table thead th {
  font-size: .6875rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--pf-muted); text-align: left; padding: .75rem 1rem;
  background: #FAFAFD; border-bottom: 1px solid var(--pf-line);
  position: sticky; top: 0; z-index: 1;
}
.pf-table tbody td { padding: .8rem 1rem; border-bottom: 1px solid var(--pf-line); font-size: .875rem; }
.pf-table tbody tr { transition: background .15s ease; }
.pf-table tbody tr:hover { background: #FBFAFF; }

/* ============================================================
   MODALES (mejora visual, no cambia comportamiento)
   ============================================================ */
.pf-modal-panel {
  border-radius: 1.15rem;
  box-shadow: var(--pf-shadow-lg);
  border: 1px solid var(--pf-line);
}

/* ---------- utilidades ---------- */
.pf-grad-text {
  background: var(--pf-grad); -webkit-background-clip: text; background-clip: text; color: transparent;
}
.pf-divider { height: 1px; background: var(--pf-line); }

/* ============================================================
   EL DASHBOARD EN EL CELULAR
   ============================================================
   Todo lo de abajo es CSS: no cambia ni una funcion del dashboard.
   La unica pieza de JavaScript es pf-mobile.js, y solo crea el boton
   de menu y el fondo oscuro.

   El corte es 1024px. Arriba de eso no cambia absolutamente nada de
   lo que ya conocia el usuario en la computadora. Si se mueve este
   numero, moverlo tambien en pf-mobile.js (CORTE).
   ============================================================ */

/* ---------- Arreglo de fondo: vale en TODOS los tamanos ----------
   <main> es un hijo flex de <body>. Por regla de CSS, un hijo flex no
   puede achicarse mas alla de su contenido (min-width:auto). Con una
   tabla ancha adentro, eso hacia que <main> se estirara y empujara la
   pagina ENTERA hacia la derecha, en vez de que la tabla se deslizara
   dentro de su propia caja .overflow-x-auto.

   Medido en Facturacion: la pagina ocupaba 1776px de ancho aunque la
   pantalla tuviera 1500. En un celular de 375px eran 4,7 pantallas.

   min-width:0 le devuelve el permiso de achicarse. Las tablas anchas
   pasan a deslizarse adentro de su caja, que es lo que siempre se
   quiso. Tambien endereza la vista en la computadora. */
main { min-width: 0; }

/* Que ninguna tabla ancha arrastre la pagina, y que deslizarla no
   dispare el "volver atras" del celular. */
.overflow-x-auto { overscroll-behavior-x: contain; }

/* El boton de menu no existe en la computadora. */
.pf-menu-btn { display: none; }

@media (max-width: 1023.98px) {

  /* ---------- El menu lateral se vuelve un cajon ----------
     Antes ocupaba 256px fijos: en una pantalla de 375px se comia el
     68% del ancho y no habia forma de sacarlo. Ahora esta afuera de
     la pantalla y entra deslizandose cuando se toca el boton. */
  aside.pf-sidebar {
    width: 17rem;
    max-width: 84vw;
    transform: translateX(-100%);
    transition: transform .26s cubic-bezier(.4, 0, .2, 1);
    will-change: transform;
    z-index: 60;
  }
  body.pf-menu-abierto aside.pf-sidebar {
    transform: translateX(0);
    box-shadow: 0 24px 48px -12px rgba(0, 0, 0, .45);
  }

  /* El contenido recupera los 256px que le reservaba el menu. */
  main.ml-64 { margin-left: 0; }

  /* Fondo oscuro detras del cajon. */
  .pf-menu-fondo {
    position: fixed; inset: 0; z-index: 50;
    background: rgba(27, 23, 40, .55);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
    opacity: 0; pointer-events: none;
    transition: opacity .26s ease;
  }
  body.pf-menu-abierto .pf-menu-fondo { opacity: 1; pointer-events: auto; }

  /* Con el cajon abierto la pagina de atras no se mueve. */
  body.pf-menu-abierto { overflow: hidden; }

  /* ---------- El boton de las tres rayas ---------- */
  .pf-menu-btn {
    display: inline-flex; align-items: center; justify-content: center;
    flex: 0 0 auto;
    width: 44px; height: 44px;
    margin-left: -.5rem;              /* alinea el icono con el titulo */
    border-radius: .7rem;
    color: var(--pf-ink);
    background: transparent;
    transition: background .15s ease;
  }
  .pf-menu-btn:active { background: rgba(113, 69, 214, .1); }
  .pf-menu-btn svg { width: 24px; height: 24px; }

  /* ---------- Encabezado ----------
     Los margenes de 32px a los costados se comen medio celular. */
  header.pf-header {
    padding-left: 1rem; padding-right: 1rem;
    padding-top: .75rem; padding-bottom: .75rem;
    flex-wrap: wrap; row-gap: .5rem;
    justify-content: flex-start; gap: .5rem;
  }
  header.pf-header h1 { font-size: 1.05rem; }
  header.pf-header > div > h1 { font-size: 1.05rem; }

  /* En el dashboard la fila esta un nivel mas adentro. */
  header.pf-header > div:only-child { flex-wrap: wrap; row-gap: .5rem; width: 100%; }

  /* Los botones de la pagina (Exportar, Respaldar, Comisiones...) pasan a
     una tira que se desliza con el dedo. Apilarlos haria un encabezado de
     media pantalla; esconderlos detras de un "mas" obligaria a tocar cada
     pagina. Asi se ven todos y no empujan nada. */
  .pf-acciones {
    width: 100%;
    flex-wrap: nowrap !important;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    padding-bottom: 2px;
  }
  .pf-acciones::-webkit-scrollbar { display: none; }
  .pf-acciones > * { flex: 0 0 auto; }

  /* ---------- Filas que no entran ----------
     Filtros ("Estado: Todas / Pagadas / Pendientes"), leyendas y barras
     de herramientas estaban en una sola linea sin permiso de cortarse, y
     empujaban la pagina. Ahora se acomodan en varias lineas.

     Cuando la fila SI entra, esto no cambia nada: flex-wrap solo actua si
     hace falta. Quedan afuera las columnas, las filas marcadas a mano
     como flex-nowrap y la tira de botones del encabezado, que se desliza
     en vez de cortarse. */
  main .flex:not(.flex-col):not(.flex-nowrap):not(.pf-acciones) { flex-wrap: wrap; }

  /* ---------- Aire del contenido ---------- */
  main .p-8 { padding: 1rem; }
  main .px-8 { padding-left: 1rem; padding-right: 1rem; }
  main .p-6 { padding: .875rem; }
  main .gap-6 { gap: .875rem; }
  main .space-y-6 > * + * { margin-top: .875rem; }

  /* ---------- De muchas columnas a dos ----------
     Vale para las tarjetas de numeros Y para los campos de los modales
     (que cuelgan del <body>, no de <main>: por eso la regla arranca en
     body y no en main). En Facturacion, "Agente / Comision / Estado"
     eran tres columnas de 89px — un select de cuatro letras. En dos
     columnas quedan en 139px, que si se puede leer y tocar.

     Se queda en dos y no en una: una sola columna obliga a scrollear el
     doble para ver los totales o llenar la factura.

     Arranca en "body" por especificidad: Tailwind viene del CDN y se
     inyecta DESPUES de este archivo, asi que un .grid-cols-3 pelado
     perderia contra el suyo. */
  body .grid-cols-3,
  body .grid-cols-4,
  body .grid-cols-5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }

  /* ---------- Formularios: que el telefono no haga zoom ----------
     Safari en iPhone hace zoom automatico al tocar un campo con letra
     de menos de 16px, y despues deja la pagina corrida. Es LA razon
     por la que un formulario se siente incomodo en el celular.
     Va con !important porque compite con las clases text-sm/text-xs
     que estan escritas en cada campo del HTML. */
  input:not([type="checkbox"]):not([type="radio"]),
  select,
  textarea {
    font-size: 16px !important;
  }

  /* Nada que haya que tocar con el dedo mas chico que la yema. */
  input:not([type="checkbox"]):not([type="radio"]),
  select,
  textarea { min-height: 44px; }
  button, .pf-btn, a.inline-flex, label > input[type="checkbox"] { min-height: 40px; }
  .pf-nav { min-height: 46px; }

  /* ---------- Tablas ----------
     Se deslizan de lado adentro de su caja (gracias al min-width:0 de
     arriba). La primera columna queda fija para no perder de vista de
     que fila se esta leyendo. */
  .pf-table thead th,
  .pf-table tbody td { padding: .7rem .75rem; }
  .pf-table { font-size: .8125rem; }

  /* ---------- Modales ----------
     Los paneles ya vienen con w-full/max-w-*, asi que entran. Lo que
     faltaba era que no se pasen de alto y que el contenido se pueda
     deslizar. */
  .pf-modal-panel { max-height: 88vh; }

  /* Espacio para la barra de gestos del iPhone. */
  main { padding-bottom: env(safe-area-inset-bottom, 0px); }
  aside.pf-sidebar { padding-bottom: env(safe-area-inset-bottom, 0px); }
}

/* Pantallas muy angostas (iPhone SE y similares). */
@media (max-width: 400px) {
  main .grid-cols-3,
  main .grid-cols-4,
  main .grid-cols-5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  header.pf-header h1 { font-size: 1rem; }
  main .p-8, main .p-6 { padding: .75rem; }
}
