/* ═══════════════════════════════════════════════════════════════════════
   ✦ DESIGN SYSTEM · Presta+ ✦
   Etapa 9 (2026-06-05) — Refactor a tokens centralizados.

   Filosofía: TODOS los componentes usan tokens semánticos.
   Cambiar un tema = solo redefinir tokens. La app se actualiza automágicamente.

   Categorías:
     1. Superficies (bg-page / card / overlay / input)
     2. Texto (text / text-muted / text-subtle / text-inverse)
     3. Bordes (border / border-strong / border-focus)
     4. Acento (accent / accent-soft / accent-strong)
     5. Semánticos (danger/warning/success/info + -soft variants)
     6. Sombras (sm/md/lg + inset para neumorfismo)
     7. Radios (sm/md/lg/pill)
     8. Tipografía (font-display/body/mono)
     9. Espaciado (--space-N, 16px-based)

   Cómo crear un tema nuevo:
     body.theme-X { --bg-page: ...; --card: ...; --accent: ...; }
     (no hace falta tocar componentes — los tokens se propagan en cascada)
   ═══════════════════════════════════════════════════════════════════════ */

:root {
  /* ──── 1. SUPERFICIES ──── */
  --bg-page:        #f0eee6;    /* fondo de la app entera */
  --card:           #ffffff;    /* fondo de cards/contenedores principales */
  --card-soft:      #f9fafb;    /* card más sutil (panel interno) */
  --card-strong:    #f3f4f6;    /* card destacada (hover/secciones) */
  --input-bg:       #ffffff;    /* fondo de inputs/selects */
  --overlay:        rgba(0,0,0,.45); /* fondo de modales */

  /* ──── 2. TEXTO ──── */
  --text:           #1f2937;    /* texto principal */
  --text-muted:     #6b7280;    /* texto secundario */
  --text-subtle:    #9ca3af;    /* terciario / placeholder */
  --text-inverse:   #ffffff;    /* sobre fondos oscuros */

  /* ──── 3. BORDES ──── */
  --border:         #e5e7eb;    /* borde sutil */
  --border-strong:  #d1d5db;    /* borde definido */
  --border-focus:   var(--accent); /* borde de focus */

  /* ──── 4. ACENTO (color de marca — gestionado por theme.js) ──── */
  --accent:         #d97757;    /* verde Presta por default */
  --accent-soft:    #f5e2d8;    /* tinte sutil de accent */
  --accent-strong:  #c6613f;    /* accent intensificado */
  --accent-rgb:     217, 119, 87; /* para rgba() inline */

  /* ──── 5. SEMÁNTICOS ──── */
  --danger:         #f87171;
  --danger-soft:    #fee2e2;
  --warning:        #f59e0b;
  --warning-soft:   #fef3c7;
  --success:        #10b981;
  --success-soft:   #d1fae5;
  --info:           #3b82f6;
  --info-soft:      #dbeafe;

  /* ──── 6. SOMBRAS ──── */
  --shadow-sm:      0 1px 3px rgba(0,0,0,.06);
  --shadow:         0 2px 8px rgba(0,0,0,.08);
  --shadow-md:      0 4px 14px rgba(0,0,0,.10);
  --shadow-lg:      0 12px 40px rgba(0,0,0,.12);
  /* Sombras inset para neumorfismo (usadas en .ag-pb.on, .ag-cav.on, etc.) */
  --shadow-inset:   inset 4px 4px 10px rgba(0,0,0,.10), inset -2px -2px 8px rgba(255,255,255,.6);

  /* ──── 7. RADIOS ──── */
  --radius-sm:      8px;
  --radius:         12px;
  --radius-md:      14px;
  --radius-lg:      20px;
  --radius-pill:    99px;

  /* ──── 8. TIPOGRAFÍA ──── */
  --font-display:   'Bricolage Grotesque', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-body:      -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', sans-serif;
  --font-mono:      'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;
  --font-serif:     Georgia, 'Times New Roman', serif;

  /* ──── 8b. ESCALA TIPOGRÁFICA (ESTÁNDAR ÚNICO) ────
     Regla del proyecto: NUNCA usar px crudo para font-size.
     Usar estos tokens o las clases .t-* (ver más abajo).
     Los tamaños son independientes del tema (no cambian por tema). */
  --fs-micro:    10px;   /* badges, contadores, pies de tarjeta */
  --fs-caption:  11px;   /* labels chicos, metadatos */
  --fs-sm:       12px;   /* texto secundario */
  --fs-body:     13px;   /* CUERPO base (default del body) */
  --fs-md:       14px;   /* énfasis, inputs visuales, botones */
  --fs-lg:       16px;   /* títulos de card, subtítulos */
  --fs-xl:       18px;   /* títulos de sección */
  --fs-2xl:      22px;   /* título de página (.pg-title) */
  --fs-3xl:      28px;   /* números grandes / hero chico */
  --fs-4xl:      36px;   /* display grande */
  /* Altura de línea (opcional, para acompañar) */
  --lh-tight:    1.15;
  --lh-snug:     1.35;
  --lh-normal:   1.5;

  /* ──── 8c. MAPA DE ROLES (un tamaño por rol, igual en TODO el sistema) ────
     Cada componente apunta a su ROL, no a un px. Para cambiar "todos los
     títulos de sección" a la vez, se cambia acá y listo. */
  --fs-role-title:    var(--fs-2xl);   /* título de página */
  --fs-role-section:  var(--fs-lg);    /* título de sección */
  --fs-role-card:     var(--fs-md);    /* título de card */
  --fs-role-kpi:      var(--fs-2xl);   /* número de KPI — ÚNICO tamaño para todo */
  --fs-role-kpi-sm:   var(--fs-role-kpi); /* (unificado: igual que kpi) */
  --fs-role-body:     var(--fs-body);  /* texto base / item de lista */
  --fs-role-meta:     var(--fs-sm);    /* secundario / detalle de lista */
  --fs-role-label:    var(--fs-caption); /* labels chiquitos / subtítulo de item */
  --fs-role-micro:    var(--fs-micro); /* micro / badges / sub-KPI */

  /* ──── 8d. PATRÓN DE LISTA (jerarquía ESTÁNDAR, igual en TODAS las pantallas) ────
     Toda lista de items (clientes, créditos, pagos, cuotas…) usa estos roles.
     Referencia: la lista de Agenda. */
  --fs-role-item:     var(--fs-sm);    /* 12 · nombre/título del item (bold) */
  --fs-role-amount:   var(--fs-body);  /* 13 · monto/destacado (bold, mismo tamaño que el nombre) */
  /* nombre del item = 12 (decisión del usuario) · subtítulo → label(11) · badge → micro(10) */

  /* ──── 8e. PATRÓN DE TABLA (espeja el de lista; mismos roles) ────
     Encabezado (th) → --fs-role-label (11)
     Celda nombre/primario → --fs-role-item (13 bold)
     Celda monto/destacado → --fs-role-amount (13 bold)
     Celda dato normal     → --fs-role-meta (12)
     Sub-texto en celda    → --fs-role-label (11)
     Badge / estado        → --fs-role-micro (10)
     Así "nombre"=13 y "monto"=13 sea en tarjeta o en tabla. */

  /* ──── 9. ESPACIADO (existente, mantener) ──── */
  --space-0:     0;
  --space-1:     4px;
  --space-2:     8px;
  --space-3:    12px;
  --space-4:    16px;
  --space-5:    20px;
  --space-6:    24px;
  --space-8:    32px;
  --space-10:   40px;
  --space-12:   48px;

  /* ──── COMPONENTES (existente) ──── */
  --input-padding:  var(--space-3) var(--space-4);
  --button-padding: var(--space-3) var(--space-4);
  --card-padding:   var(--space-6);
  --form-gap:       var(--space-4);
  --section-gap:    var(--space-8);

  /* ═══ ALIAS para compatibilidad backwards ═══
     Código viejo que use estas variables sigue funcionando.
     Migración progresiva: ir reemplazando estos por sus equivalentes nuevos. */
  --white:      var(--bg-page);       /* el viejo "--white" → mismo color que el fondo del main #f0eee6 */
  --muted:      var(--text-muted);
  --surface:    var(--card-soft);
  --surface2:   var(--card-strong);
  --accent2:    var(--accent-strong);
  --accent-lt:  var(--accent-soft);
  --danger-lt:  var(--danger-soft);
  --warning-lt: var(--warning-soft);
  --blue:       var(--info);
  --blue-lt:    var(--info-soft);
  --green:      var(--success);
  --green-lt:   var(--success-soft);
  --purple:     #8b5cf6;       /* no hay equivalente semántico, queda como decoración */
  --purple-lt:  #ede9fe;
  --r:          var(--radius);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;scrollbar-width:none;-ms-overflow-style:none;}

/* ════════════════════════════════════════════════════════════════
   TIPOGRAFÍA — ESTÁNDAR DEL SISTEMA
   Default del cuerpo + clases semánticas. Lo nuevo hereda esto solo.
   Regla: usar .t-* o var(--fs-*); nunca px crudo en font-size.
   ════════════════════════════════════════════════════════════════ */
body { font-size: var(--fs-body); }

/* Clases semánticas: cada una apunta a su ROL (fuente única). */
.t-display   { font-size: var(--fs-4xl);          font-weight: 800; line-height: var(--lh-tight); }
.t-title     { font-size: var(--fs-role-title);   font-weight: 800; line-height: var(--lh-tight); }   /* título de página */
.t-section   { font-size: var(--fs-role-section); font-weight: 800; line-height: var(--lh-snug); }    /* título de sección */
.t-card-title{ font-size: var(--fs-role-card);    font-weight: 700; line-height: var(--lh-snug); }    /* título de card */
.t-num       { font-size: var(--fs-role-kpi);     font-weight: 800; line-height: var(--lh-tight); }    /* número/KPI grande */
.t-body      { font-size: var(--fs-role-body);    line-height: var(--lh-normal); }                     /* texto base */
.t-meta      { font-size: var(--fs-role-meta);  }                                                      /* secundario */
.t-label     { font-size: var(--fs-role-label);   font-weight: 700; color: var(--muted); }             /* labels */
.t-caption   { font-size: var(--fs-role-label);   color: var(--muted); }
.t-micro     { font-size: var(--fs-role-micro); }
.t-lg        { font-size: var(--fs-lg);  }
.t-sm        { font-size: var(--fs-sm);  }
*::-webkit-scrollbar{display:none;}
.tbl-wrap{scrollbar-width:thin;-ms-overflow-style:auto;scrollbar-color:var(--border) var(--white);}
.tbl-wrap::-webkit-scrollbar{display:block;height:5px;width:5px;}
.tbl-wrap::-webkit-scrollbar-track{background:var(--white);}
.tbl-wrap::-webkit-scrollbar-thumb{background:var(--border);border-radius:99px;}

/* RESPONSIVE: Reducir espaciado en mobile */
@media (max-width: 768px) {
  :root {
    /* Reducir espaciado en tablets */
    --space-3:    10px;      /* De 12px a 10px */
    --space-4:    14px;      /* De 16px a 14px */
    --space-5:    18px;      /* De 20px a 18px */
    --space-6:    20px;      /* De 24px a 20px */
    --space-8:    28px;      /* De 32px a 28px */
  }
}

@media (max-width: 480px) {
  :root {
    /* Reducir más en mobile */
    --space-3:     8px;      /* De 12px a 8px */
    --space-4:    12px;      /* De 16px a 12px */
    --space-5:    16px;      /* De 20px a 16px */
    --space-6:    18px;      /* De 24px a 18px */
    --space-8:    24px;      /* De 32px a 24px */
  }
}
input, textarea, select { font-size: 16px; }
html,body{
  height:100vh;
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  background:var(--white);
  color:var(--text);
  overflow:hidden;
}

#app{
  display:flex;
  min-height:100dvh;
  background:var(--white);
}

#app.login-mode,
body:has(#app.login-mode){
  background:#1a1613;
}

/* ══ LAYOUT ══ */
#app.login-mode .sidebar{display:none!important;}

#app.login-mode #main-content{
  margin-left:0!important;
  flex:1;
  overflow:hidden;
  background:#1a1613;
}

/* ══ SIDEBAR ══ */
.sidebar{
  width:var(--nav-w);min-width:var(--nav-w);height:100vh;
  background:var(--white);border-right:0.60px solid var(--border);
  display:flex;flex-direction:column;
  box-shadow:2px 0 12px rgba(0,0,0,0.04);
  flex-shrink:0;
  position:sticky;top:0;align-self:flex-start;
  transition:width .25s ease;overflow:hidden;
}
.s-logo{padding:20px 18px;border-bottom:0.60px solid var(--border);display:flex;align-items:center;gap:11px;cursor:pointer;flex-shrink:0;}
.s-logo-ico{width:38px;height:38px;flex-shrink:0;background:linear-gradient(135deg,var(--accent),var(--accent2));border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:18px;box-shadow:0 4px 12px rgba(var(--accent-rgb),0.3);}
.s-logo-txt{font-size:20px;font-weight:800;white-space:nowrap;overflow:hidden;}
.s-logo-txt span{color:var(--accent);}
.s-nav{padding:8px 8px;flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none;overscroll-behavior:contain;}
.s-nav::-webkit-scrollbar{display:none;}
.s-lbl{font-size:10px;color:var(--muted);letter-spacing:1.4px;text-transform:capitalize;padding:0 10px;margin:10px 0 2px;white-space:nowrap;}
.s-item{display:flex;align-items:center;gap:10px;padding:7px 12px;border-radius:11px;cursor:pointer;transition:all .18s;font-size:13px;color:var(--muted);font-weight:500;margin-bottom:1px;white-space:nowrap;}
.s-item:hover{background:var(--surface2);color:var(--text);}
.s-item.active{background:var(--accent-lt);color:var(--accent);font-weight:700;}
.s-ico{width:22px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.s-badge{margin-left:auto;background:var(--danger);color:white;font-size:10px;font-weight:700;padding:2px 7px;border-radius:20px;flex-shrink:0;}
.s-footer{padding:14px;border-top:0.60px solid var(--border);flex-shrink:0;}
.s-user{display:flex;align-items:center;gap:10px;}
.s-av{width:34px;height:34px;border-radius:10px;flex-shrink:0;background:linear-gradient(135deg,var(--accent),var(--accent2));display:flex;align-items:center;justify-content:center;font-weight:800;font-size:12px;color:white;}
.s-uname{font-size:13px;font-weight:600;white-space:nowrap;}
.s-urole{font-size:11px;color:var(--accent);font-weight:500;}

/* ══ MAIN CONTENT ══ */
#main-content{
  flex:1;
  height:100vh;
  max-height:100vh;
  overflow:hidden;
  background:var(--white);
  position:relative;
}

/* ══ PAGE ══ */
.page{padding:28px;height:100%;min-height:100%;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;display:none;background:var(--bg-page);scrollbar-width:none;-ms-overflow-style:none;}
.page::-webkit-scrollbar{display:none;}
@media(max-width:768px){.page{padding:var(--topbar-h, 100px) 14px calc(env(safe-area-inset-bottom) + 72px);height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;}}
.page.active{display:block;height:100%;}
.page.active.page-leaving{display:none;}

/* ── Fondo degradé SOLO en Centro de Control (Opción 3) ──
   Verde fuerte arriba que se desvanece a TRANSPARENT (se funde con el fondo
   real del main, sea cual sea el tema). Scopeado a #page-dashboard → NO afecta
   ninguna otra pantalla. z-index:-1 lo deja detrás del contenido; el z-index:0
   del page crea un contexto de apilamiento propio (no se filtra al resto). */
/* Degradé verde FIJO al tope de la pantalla (Opción A): va como background-image
   del contenedor con attachment:scroll (default) → queda anclado al MARCO del
   scroll y NO se desplaza con el contenido. Al arrastrar, el verde se queda
   arriba y el contenido pasa por debajo. Scopeado a #page-dashboard. */
#page-dashboard{
  background-image:linear-gradient(to bottom,
    rgba(var(--accent-rgb, var(--accent-rgb)),1) 0%,
    rgba(var(--accent-rgb, var(--accent-rgb)),1) 30%,
    rgba(var(--accent-rgb, var(--accent-rgb)),.8) 60%,
    transparent 100%);
  background-repeat:no-repeat;
  background-size:100% 240px;   /* termina ~donde termina el Meta card, no llega a los KPIs */
  background-position:top center;
  background-attachment:scroll;
  overscroll-behavior-y:none;   /* sin rebote elástico en el tope (solo dashboard) */
}

/* Pull-to-refresh: 3 puntos rebotando en píldora glass (Three Dots Bounce) */
.ptr-indicator{position:fixed;top:calc(var(--topbar-h,58px) + var(--banner-h,0px));left:50%;transform:translateX(-50%) translateY(-60px);z-index:900;display:flex;gap:6px;align-items:center;padding:10px 14px;background:rgba(0,0,0,0.5);backdrop-filter:blur(10px) saturate(180%);-webkit-backdrop-filter:blur(10px) saturate(180%);border:0.6px solid var(--border);border-radius:100px;box-shadow:0 4px 16px rgba(0,0,0,0.3);opacity:0;transition:opacity .2s,transform .2s;pointer-events:none;}
.ptr-indicator.visible{opacity:1;transform:translateX(-50%) translateY(8px);}
.ptr-dot{width:8px;height:8px;background:var(--accent);border-radius:50%;opacity:0.35;transition:opacity .15s ease;}
.ptr-indicator.spinning .ptr-dot{animation:ptrDotBounce 1.2s ease-in-out infinite;}
.ptr-indicator.spinning .ptr-dot:nth-child(2){animation-delay:0.15s;}
.ptr-indicator.spinning .ptr-dot:nth-child(3){animation-delay:0.3s;}
@keyframes ptrDotBounce{0%,80%,100%{transform:translateY(0);opacity:0.4;}40%{transform:translateY(-6px);opacity:1;}}

/* ══ LOGIN PAGE — Aurora V5 ══ */
#page-login{
  display:none;
  padding:0;
  background:#1a1613;
  width:100%;
  align-items:stretch;
  justify-content:stretch;
  position:fixed;
  top:0;left:0;right:0;bottom:0;
  overflow:hidden;
  z-index:50;
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  color:#fff;
}

#page-login.active{display:flex;}
#page-login *{box-sizing:border-box;}

.login-bg{
  position:fixed;
  top:0;left:0;right:0;bottom:0;
  /* H "Premium + viñeta": glow cálido arriba (radial) + viñeta oscura abajo */
  background:radial-gradient(130% 90% at 50% 0%, #241d17 0%, #120f0c 70%);
  box-shadow:inset 0 -160px 140px -70px rgba(0,0,0,.55);
  z-index:0;
}

/* Aurora blobs — ocultos en el diseño "Premium + viñeta" (limpio, sin manchas) */
.login-aurora{position:absolute;pointer-events:none;border-radius:50%;z-index:1;display:none;}
.login-aurora.a1{top:18%;left:-20%;width:520px;height:520px;background:radial-gradient(circle,rgba(var(--accent-rgb, var(--accent-rgb)),.55) 0%,transparent 55%);filter:blur(30px);}
.login-aurora.a2{top:10%;right:-30%;width:460px;height:460px;background:radial-gradient(circle,rgba(var(--accent-rgb, var(--accent-rgb)),.40) 0%,transparent 55%);filter:blur(40px);}
.login-aurora.a3{bottom:-15%;left:10%;width:400px;height:400px;background:radial-gradient(circle,rgba(var(--accent-rgb, var(--accent-rgb)),.30) 0%,transparent 55%);filter:blur(50px);}

.login-orb{display:none;}

/* Container */
.login-card{
  position:relative;
  z-index:10;
  width:100%;
  max-width:440px;
  margin:0 auto;
  padding:48px 28px 28px;
  padding-top:calc(48px + env(safe-area-inset-top, 0px));
  padding-bottom:calc(28px + env(safe-area-inset-bottom, 0px));
  display:flex;
  flex-direction:column;
  background:transparent;
  border:none;
  border-radius:0;
  min-height:100dvh;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
}
@media(min-width:900px){
  #page-login{align-items:center;justify-content:center;}
  .login-card{
    max-width:1000px;width:100%;
    flex-direction:row;align-items:stretch;gap:80px;
    min-height:auto;padding:56px 64px;
    background:rgba(34,29,23,.55);border-radius:28px;
    border:0.60px solid rgba(255,255,255,.07);
    backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  }
  .login-hero{
    margin-top:0;flex:1;
    display:flex;flex-direction:column;
    justify-content:flex-start;
  }
  .login-hero .login-brand-row{margin-bottom:52px;}
  .login-hero-title{font-size:68px;letter-spacing:-3px;line-height:.92;}
  .login-hero-sub{font-size:15px;max-width:360px;margin-top:20px;}
  .login-form-card{margin-top:0;padding-top:0;width:320px;flex-shrink:0;display:flex;flex-direction:column;justify-content:center;}
  .login-input{padding:22px 38px 8px 38px;font-size:13px;}
  .login-float-lbl{font-size:13px;}
  .login-btn{padding:12px;font-size:13.5px;border-radius:12px;}
}

/* Brand header */
.login-brand-row{display:flex;align-items:center;gap:10px;}
.login-logo-icon{
  width:48px;height:48px;border-radius:14px;overflow:hidden;flex-shrink:0;
  background:linear-gradient(135deg,var(--accent2),var(--accent));
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 8px 20px rgba(0,0,0,.35);
}
.login-logo-icon img{width:100%;height:100%;object-fit:cover;}
.login-brand-name{font-size:20px;font-weight:800;letter-spacing:-.4px;color:#fff;}
.login-logo-title{display:none;}
.login-logo-sub{display:none;}

/* Hero type moment */
.login-hero{margin-top:72px;}
.login-eyebrow{
  font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;
  color:var(--accent2);margin-bottom:14px;
  display:inline-flex;align-items:center;gap:8px;
}
.login-eyebrow::before{content:"";display:inline-block;width:24px;height:1px;background:var(--accent2);}
.login-hero-title{
  font-size:44px;font-weight:800;letter-spacing:-2px;line-height:.96;
  margin:0;color:#fff;
}
.login-hero-title .accent{color:var(--accent2);}
.login-hero-sub{
  margin-top:16px;font-size:13.5px;color:rgba(226,232,240,.6);
  line-height:1.55;max-width:280px;
}

/* Glass form card */
.login-form-card{
  margin-top:120px;padding-top:0;
}
.login-form-glass{
  background:rgba(26,22,18,.72);
  backdrop-filter:blur(20px) saturate(160%);
  -webkit-backdrop-filter:blur(20px) saturate(160%);
  border:0.60px solid rgba(255,255,255,.08);
  border-radius:20px;
  padding:12px;
  display:flex;flex-direction:column;gap:8px;
}
/* Labels (hidden visually — we use placeholders) */
.login-form-lbl{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0;
}
/* Input row — Floating labels */
.login-input-wrap{
  position:relative;margin-bottom:0;
  background:rgba(255,255,255,.04);
  border:1.5px solid rgba(255,255,255,.07);
  border-radius:14px;
  transition:border-color .2s;
}
.login-input-wrap:last-child{margin-bottom:0;}
.login-input-wrap:focus-within{
  border-color:color-mix(in srgb, var(--accent) 55%, transparent);
  background:rgba(255,255,255,.05);
}

.login-input-ico{
  position:absolute;left:14px;top:50%;transform:translateY(-50%);
  color:#64748b;pointer-events:none;
  display:flex;align-items:center;justify-content:center;
  transition:color .18s;
}
.login-input-wrap:focus-within .login-input-ico{color:var(--accent2);}

/* Floating label — empieza como placeholder, sube al escribir */
.login-float-lbl{
  position:absolute;left:44px;top:50%;transform:translateY(-50%);
  font-size:14px;color:#64748b;pointer-events:none;
  transition:top .18s, font-size .18s, color .18s, transform .18s, font-weight .18s, letter-spacing .18s;
}
/* Flota arriba cuando hay foco O cuando tiene valor (:not(:placeholder-shown)) */
.login-input:focus + .login-float-lbl,
.login-input:not(:placeholder-shown) + .login-float-lbl{
  top:9px;transform:none;
  font-size:10px;font-weight:700;
  color:var(--accent2);letter-spacing:.06em;text-transform:uppercase;
}

.login-input{
  width:100%;padding:24px 44px 8px 44px;
  background:transparent;
  border:none;
  border-radius:14px;
  font-family:inherit;font-size:14px;font-weight:500;color:#fff;
  outline:none;
}
.login-input::placeholder{color:transparent;}
.login-input:-webkit-autofill,
.login-input:-webkit-autofill:focus{
  -webkit-text-fill-color:#fff !important;
  transition:background-color 9999s;
}
.login-input:-webkit-autofill,
.login-input:-webkit-autofill:hover,
.login-input:-webkit-autofill:focus{
  -webkit-box-shadow:0 0 0 1000px rgba(26,22,18,.96) inset !important;
  -webkit-text-fill-color:#fff !important;
  border-color:rgba(255,255,255,.06) !important;
  transition:background-color 9999s ease-out 0s;
}

.login-toggle-pass{
  position:absolute;right:10px;top:50%;transform:translateY(-50%);
  background:transparent;border:none;color:#64748b;
  padding:6px;border-radius:6px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:color .15s;
}
.login-toggle-pass:hover{color:#94a3b8;}

/* Inline error under the glass card */
.login-err{
  display:none;font-size:12px;color:#f87171;font-weight:500;
  margin-top:8px;padding:0 4px;
}
.login-err.show{display:block;}

/* Buttons row */
.login-actions{display:flex;gap:10px;margin-top:12px;}
.login-btn{
  flex:1;padding:15px;border:none;border-radius:14px;
  background:var(--accent2);color:#0a1a14;
  font-size:14.5px;font-weight:700;font-family:inherit;letter-spacing:-.1px;
  cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:7px;
  box-shadow:0 14px 40px -10px rgba(0,0,0,.4);
  transition:transform .12s,box-shadow .15s;
}
.login-btn:hover{box-shadow:0 18px 48px -10px rgba(0,0,0,.5);}
.login-btn:active{transform:scale(.98);}
.login-btn-arrow{width:15px;height:15px;flex-shrink:0;}

.login-btn-bio{
  width:56px;padding:15px;border:0.60px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);border-radius:14px;color:var(--accent2);
  cursor:pointer;
  display:flex;align-items:center;justify-content:center;
}
.login-btn-bio:hover{background:rgba(255,255,255,.07);}

/* Options row (remember + forgot) */
.login-opts{
  display:flex;justify-content:center;align-items:center;gap:6px;
  margin-top:14px;font-size:12px;color:rgba(226,232,240,.4);
}
.login-remember{
  display:flex;align-items:center;gap:8px;cursor:pointer;color:rgba(226,232,240,.55);
  user-select:none;
}
.login-chk{
  width:14px;height:14px;border-radius:4px;
  border:0.60px solid rgba(255,255,255,.25);background:transparent;
  display:inline-flex;align-items:center;justify-content:center;
  transition:all .15s;
}
.login-chk.on{background:var(--accent2);border-color:var(--accent2);}
.login-chk.on::after{content:"";width:6px;height:3px;border-left:2px solid #0a1a14;border-bottom:2px solid #0a1a14;transform:rotate(-45deg) translate(1px,-1px);}

.login-forgot{color:var(--accent2);font-weight:600;cursor:pointer;text-decoration:none;}
.login-forgot:hover{text-decoration:underline;}

/* Success overlay (kept functional) */
.login-success-overlay{
  position:fixed;top:0;left:0;right:0;bottom:0;
  background:#1a1613;
  display:none;flex-direction:column;align-items:center;justify-content:center;
  z-index:9999;gap:0;
}
.login-success-overlay.show{display:flex;animation:fadeIn .4s ease;}
.login-success-check{display:none;}
.login-success-text{font-size:32px;font-weight:800;color:#fff;letter-spacing:-.5px;margin-bottom:6px;}
.login-success-text span{color:var(--accent2);}
.login-success-sub{font-size:18px;color:var(--accent2);font-weight:600;margin-bottom:6px;}
.login-success-rol{font-size:13px;color:rgba(255,255,255,.4);margin-bottom:40px;}
.login-success-bar-wrap{width:160px;height:3px;background:rgba(255,255,255,.1);border-radius:99px;overflow:hidden;}
.login-success-bar{height:100%;width:0%;background:var(--accent2);border-radius:99px;animation:loadBar 1.5s ease forwards;}
@keyframes loadBar{0%{width:0%}100%{width:100%}}
@keyframes fadeIn{from{opacity:0;}to{opacity:1;}}

/* Small screens */
@media (max-height:700px){
  .login-hero{margin-top:36px;}
  .login-hero-title{font-size:36px;}
  .login-form-card{padding-top:24px;}
}
@media (max-width:380px){
  .login-hero-title{font-size:38px;letter-spacing:-1.5px;}
}

/* ══ PÁGINA HEADER ══ */
.pg-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:24px;flex-wrap:wrap;gap:12px;}
.pg-title{font-size:var(--fs-2xl);font-weight:800;}
.pg-sub{font-size:var(--fs-body);color:var(--muted);margin-top:3px;}
.btn-hdr-ico{display:none;}

/* ══ KPI GRID ══ */
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:12px;padding:10px;margin-left:-10px;margin-right:-10px;}
.kpi{background:var(--white);border:0.60px solid var(--border);border-radius:var(--r);padding:22px 18px 18px;box-shadow:var(--shadow);position:relative;overflow:hidden;transition:transform .2s,box-shadow .2s;}
.kpi:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);}
.kpi::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;border-radius:var(--r) var(--r) 0 0;}
.kpi.k-green::before{background:linear-gradient(90deg,var(--accent),var(--accent));}
.kpi.k-yellow::before{background:linear-gradient(90deg,#f59e0b,#f97316);}
.kpi.k-teal::before{background:linear-gradient(90deg,#0d9488,#14b8a6);}
.kpi.k-red::before{background:linear-gradient(90deg,#ef4444,#f87171);}
.kpi.k-blue::before{background:linear-gradient(90deg,#3b82f6,#60a5fa);}
.kpi.k-purple::before{background:linear-gradient(90deg,#8b5cf6,#a78bfa);}
.kpi.k-orange::before{background:linear-gradient(90deg,#f97316,#fb923c);}
.kpi-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
.kpi-ico{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:20px;}
.kpi-trend{font-size:11px;font-weight:700;padding:4px 9px;border-radius:20px;}
.kpi-trend.up{background:#dcfce7;color:#15803d;}
.kpi-trend.down{background:var(--danger-lt);color:var(--danger);}
.kpi-trend.neutral{background:var(--surface2);color:var(--muted);}
.kpi-lbl{font-size:var(--fs-role-meta);color:var(--text);font-weight:700;text-transform:capitalize;letter-spacing:0;margin-bottom:5px;}
.kpi-val{font-size:26px;font-weight:800;letter-spacing:-.8px;margin-bottom:4px;line-height:1;}
.kpi-val.green{color:var(--accent);} .kpi-val.yellow{color:#f59e0b;} .kpi-val.teal{color:#0d9488;}
.kpi-val.red{color:#f87171;} .kpi-val.blue{color:#3b82f6;} .kpi-val.purple{color:#8b5cf6;} .kpi-val.orange{color:#f97316;}
.kpi-micro{font-size:var(--fs-role-label);color:var(--muted);}
.kpi-micro strong{color:var(--text);font-weight:700;}

/* ══ NEUMORFISMO — fuente única de verdad para TODAS las cards ══
   Cambiar aquí = cambia kpi-modern + dash-sec-card + card + nc-tipo-opt + ag-section en simultáneo
   Page claro=var(--bg-page) #f0eee6 · Card claro=var(--card) #e3dacc (= bg de .mob-topbar)
   Page oscuro=#0c0c0c · Card oscuro=#141414 · sombras fuerte/glow
   Antes las cards usaban var(--bg-page) y se fundían con el page; ahora
   usan var(--card) (oat) para destacarse como capa superior, alineadas
   con la .mob-topbar. Las sombras D4 siguen igual. */
.kpi-modern,.dash-sec-card,.card,.nc-tipo-opt{
  background:var(--card);
  border:none;
  border-radius:16px;
  /* D4 sin halo blanco: el #ffffff arriba-izquierda se exageraba sobre el
     oat (#e3dacc). Queda solo la sombra cálida abajo-derecha. */
  box-shadow: 4px 4px 8px var(--neu-d);
}
/* ══ CARD — propiedades específicas ══ */
.card{overflow:hidden;margin-bottom:var(--space-4);}
.card-head{padding:var(--space-4);border-bottom:0.60px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.card-title{font-size:var(--fs-md);font-weight:700;display:flex;align-items:center;gap:var(--space-2);}
.card-foot{padding:var(--space-4);border-top:0.60px solid var(--border);}
/* .card-ico unificado al patrón del sistema: fondo SÓLIDO de color + ícono BLANCO.
   Estructura común (tamaño/forma). Los estilos `style="background:..."` inline
   se mapean a sólido + ícono blanco con attribute selectors abajo. */
.card-ico{
  width:26px;height:26px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;font-size:13px;
  box-shadow: 0 2px 6px rgba(20,20,19,.12);
  color: #fff;
}
.card-ico svg{ stroke: #fff !important; }
.card-ico svg [fill]:not([fill="none"]):not([fill="currentColor"]) { fill: #fff !important; }
/* Mapeo: cada background tintado viejo (rgba ~0.18 / -lt token) → mismo color SÓLIDO */
.card-ico[style*="rgba(59,130,246"]                       { background: #3b82f6 !important; } /* azul */
.card-ico[style*="rgba(168,85,247"], .card-ico[style*="139,92,246"] { background: #8b5cf6 !important; } /* púrpura */
.card-ico[style*="rgba(217,119,6"]                        { background: #f59e0b !important; } /* ámbar */
.card-ico[style*="rgba(245,158,11"]                       { background: #f59e0b !important; } /* warning */
.card-ico[style*="rgba(248,113,113"]                      { background: #ef4444 !important; } /* rojo */
.card-ico[style*="rgba(0,184,148"]                        { background: var(--accent) !important; }
.card-ico[style*="rgba(6,182,212"]                        { background: #06b6d4 !important; } /* cyan */
.card-ico[style*="rgba(100,116,139"]                      { background: #64748b !important; } /* slate */
.card-ico[style*="rgba(var(--accent-rgb)"], .card-ico[style*="background:var(--accent-lt)"], .card-ico[style*="background:var(--accent-soft)"] { background: var(--accent) !important; }
.card-ico[style*="background:var(--warning-lt)"], .card-ico[style*="background:var(--warning-soft)"]   { background: var(--warning) !important; }
.card-ico[style*="background:var(--danger-lt)"]           { background: var(--danger) !important; }
.card-ico[style*="background:var(--success-soft)"]        { background: var(--success) !important; }
.card-ico[style*="background:var(--blue-lt)"]             { background: #3b82f6 !important; }
.card-ico[style*="background:var(--purple-lt)"]           { background: #8b5cf6 !important; }
.card-ico[style*="background:var(--surface2)"]            { background: var(--accent) !important; }
.card-body{padding:var(--card-padding);}
.card-action{font-size:12px;color:var(--accent);cursor:pointer;font-weight:600;}

/* ══ TABLE ══ */
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
/* Breathing room + esquinas redondeadas para tablas directas dentro de .card.
   NO usamos overflow:hidden porque rompe el scroll horizontal de tablas anchas.
   En su lugar aplicamos border-radius a las CELDAS de las esquinas superiores
   del header (las unicas que tienen background visible que podria desbordar). */
.card > .tbl-wrap,
.card > div:not(.card-head):not(.card-body) > .tbl-wrap {
  margin: 0 12px 12px;
  border-radius: 10px;
}
/* Esquinas redondeadas en los <th> de las esquinas (tablas tipo Cobrado Hoy, Mora, etc.) */
.card > .tbl-wrap thead tr:first-child th:first-child,
.card > div:not(.card-head):not(.card-body) > .tbl-wrap thead tr:first-child th:first-child { border-top-left-radius: 10px; }
.card > .tbl-wrap thead tr:first-child th:last-child,
.card > div:not(.card-head):not(.card-body) > .tbl-wrap thead tr:first-child th:last-child { border-top-right-radius: 10px; }
/* Esquinas redondeadas en los .sort-th de las esquinas (tabla grid-based de Proximos a culminar) */
.card > .tbl-wrap > div:first-child > .sort-th:first-child,
.card > div:not(.card-head):not(.card-body) > .tbl-wrap > div:first-child > .sort-th:first-child { border-top-left-radius: 10px; }
.card > .tbl-wrap > div:first-child > .sort-th:last-child,
.card > div:not(.card-head):not(.card-body) > .tbl-wrap > div:first-child > .sort-th:last-child { border-top-right-radius: 10px; }
/* Si la tbl-wrap es el PRIMER elemento del card (sin card-head antes que provea
   espacio superior), agregar margin-top tambien — sino quedaba pegada al borde
   superior del card. Aplica a los detalles del dashboard (Vencimientos 48h,
   Potenciales, Cobrado Hoy, Mora, Por Cobrar, Proximos a culminar). */
.card > .tbl-wrap:first-child,
.card > div:first-child:not(.card-head):not(.card-body) > .tbl-wrap:first-child { margin-top: 12px; }
table{width:100%;border-collapse:collapse;}
.dash-table{table-layout:fixed;}
/* Override de tamano/padding para uniformar con .sort-th (headers) y divs (rows)
   de Proximos a culminar — toda tabla de dashboard con class=dash-table queda
   visualmente identica a esa: headers 11px/8px-12px, rows 12px/9px-12px */
.dash-table th{padding:8px 12px;font-size:var(--fs-role-label);letter-spacing:0.04em;}
.dash-table td{padding:9px 12px;font-size:var(--fs-role-meta);}
.dash-table tfoot td{padding:9px 12px;font-size:var(--fs-role-meta);}
/* Tablas de detalle del dashboard: columnas auto-ajustables + header del mismo
   color que la tabla (Próximos Vencimientos, Por Cobrar, Vencido, Próx. culminar, Potenciales) */
#vencimientos-48h-detalle .dash-table,
#dash-porcobrar-detalle .dash-table,
#dash-mora-detalle .dash-table,
#proximos-culminando-detalle .dash-table,
#potenciales-detalle .dash-table { table-layout: auto; }
/* Tablas: filas SIN lineas (separacion por padding), pero el header SI tiene
   borde top y bottom para enmarcarlo visualmente. Usamos 1px solido (no 0.60px
   hairline) para que se vea consistente en mobile y desktop. */
th{padding:10px 14px;text-align:left;font-size:10.5px;font-weight:700;color:var(--muted);text-transform:capitalize;letter-spacing:.7px;background:var(--card);white-space:nowrap;cursor:pointer;user-select:none;border-top:1px solid var(--border);border-bottom:1px solid var(--border);}
th:hover{} /* hover sin cambio de color — los headers de tabla no se "iluminan" al pasar mouse o tap */
th.center{text-align:center !important;}
th.right{text-align:right !important;}
td{padding:12px 14px;font-size:13px;vertical-align:middle;}
td.center{text-align:center !important;}
td.right{text-align:right !important;font-weight:700;}
tbody tr:hover td{cursor:pointer;} /* hover sin cambio de bg — uniforme con divs de Proximos a culminar */
tfoot td{padding:10px 14px;font-size:13px;font-weight:800;} /* tfoot sin bg destacado — uniforme con look de Proximos a culminar (sin footer) */
tfoot td.right{text-align:right !important;}
.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:11px;font-weight:700;cursor:pointer;}
.badge:hover{opacity:.8;}
.b-pagada{background:var(--green-lt);color:#15803d;}
.b-pendiente{background:var(--warning-lt);color:#92400e;}
.b-vencida{background:var(--danger-lt);color:var(--danger);}
.b-activo{background:var(--accent-lt);color:var(--accent);}
.b-mora{background:var(--danger-lt);color:var(--danger);}
.b-al-dia{background:var(--accent-lt);color:var(--accent);}
.b-sin{background:var(--surface2);color:var(--muted);}

/* ══ TOOLBAR ══ */
.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap;}
.search-box{display:flex;align-items:center;gap:8px;flex:1;min-width:200px;background:var(--white);border:0.60px solid var(--border);border-radius:11px;padding:0 14px;transition:border-color .2s;}
.search-box:focus-within{border-color:var(--accent);}
.search-box input{border:none;background:transparent;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13.5px;padding:10px 0;outline:none;width:100%;color:var(--text);}
.filter-sel{padding:10px 14px;border:0.60px solid var(--border);border-radius:11px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;background:var(--white);outline:none;cursor:pointer;color:var(--text);}
.filter-sel:focus{border-color:var(--accent);}
.clear-btn{padding:9px 14px;border-radius:11px;border:0.60px solid var(--border);background:var(--white);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;transition:all .2s;white-space:nowrap;}
.clear-btn:hover{border-color:var(--danger);color:var(--danger);}
.date-inp{padding:9px 13px;border:0.60px solid var(--border);border-radius:11px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;color:var(--text);background:var(--white);outline:none;transition:border-color .2s;cursor:pointer;}
.date-inp:focus{border-color:var(--accent);}

/* ══ AVATAR ══ */
.av{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:11px;color:white;flex-shrink:0;}

/* ══ BOTONES ══ */
.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;min-height:44px;border-radius:12px;background:linear-gradient(135deg,var(--accent),var(--accent2));border:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:14px;font-weight:700;color:white;cursor:pointer;box-shadow:0 4px 14px rgba(var(--accent-rgb),0.3);transition:all .2s;-webkit-tap-highlight-color:transparent;}
.btn-primary:hover{transform:translateY(-2px);}
.btn-primary:disabled{opacity:.5;cursor:not-allowed;transform:none;}
.btn-ghost{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:11px;background:var(--white);border:0.60px solid var(--border);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;transition:all .2s;}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent);}
.btn-danger{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:11px;background:var(--danger-lt);border:0.60px solid var(--danger);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;font-weight:700;color:var(--danger);cursor:pointer;transition:all .2s;}

/* ══ MODAL ══ */
.modal-ov{position:fixed;inset:0;background:rgba(0,0,0,.45);backdrop-filter:blur(6px);z-index:1100;display:none;align-items:center;justify-content:center;padding:20px;}
.modal-ov.open{display:flex;}
/* Modal box: el SCROLL ahora vive en .modal-body (antes en .modal-box).
   Asi el .modal-head y .modal-foot quedan SIEMPRE visibles aunque el
   contenido sea largo (caso tipico: cronograma con muchas cuotas).
   Resultado: el usuario siempre tiene la X de cerrar a mano sin importar
   donde este parado en el scroll. */
.modal-box{background:var(--white);border-radius:22px;width:100%;max-width:520px;max-height:85vh;
  box-shadow:var(--shadow-lg);animation:popIn .28s ease;
  display:flex;flex-direction:column;overflow:hidden;}
.modal-box.wide{max-width:720px;}
.modal-box.floating{max-width:600px;max-height:80vh;}
@keyframes popIn{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
.modal-head{padding:22px 24px;border-bottom:0.60px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;}
.modal-title{font-size:17px;font-weight:800;}
.modal-close{width:32px;height:32px;border-radius:9px;background:var(--surface2);border:none;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;}
.modal-body{padding:20px 24px;overflow-y:auto;flex:1;}
.modal-foot{padding:16px 24px;border-top:0.60px solid var(--border);display:flex;gap:10px;justify-content:flex-end;flex-shrink:0;}

/* ─── Anti-zoom de iOS/Chrome móvil en inputs ────────────────────
   iOS Safari auto-zoomea cualquier input con font-size <16px al recibir
   focus, lo que hace que toda la pantalla "salte" hacia arriba.
   Fix universal: forzar 16px en mobile. Solo aplica a viewports <=768px
   (en desktop no hace falta y queremos preservar el tamaño visual original). */
@media (max-width: 768px) {
  input[type="text"],
  input[type="number"],
  input[type="email"],
  input[type="tel"],
  input[type="search"],
  input[type="password"],
  input[type="url"],
  input[type="date"],
  input[type="datetime-local"],
  input[type="time"],
  textarea,
  select {
    font-size: 16px !important;
  }
}

/* ══ FORM ══ */
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4);margin-bottom:var(--space-4);}
.form-row.full{grid-template-columns:1fr;}
.form-group{display:flex;flex-direction:column;gap:var(--space-2);}
.form-label{font-size:12px;font-weight:700;color:var(--text);}
.form-input{padding:var(--input-padding);border:0.60px solid var(--border);border-radius:11px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13.5px;color:var(--text);background:var(--bg-page);outline:none;transition:border-color .2s;min-height:44px;display:flex;align-items:center;}
/* Filter inputs (Créditos, Agenda, etc.) — fondo del sistema, no blanco por default del navegador */
.cred-filter-inp,
.agenda-filter-inp{
  background:var(--bg-page);
  border:0.60px solid var(--border);
  border-radius:10px;
  color:var(--text);
  padding:0 12px;
  outline:none;
  font-family:inherit;
}
.cred-filter-inp:focus,
.agenda-filter-inp:focus{ border-color:var(--accent); }
.form-input:focus{border-color:var(--accent);}
.form-input.error{border-color:var(--danger);}
.form-select{padding:10px 13px;border:0.60px solid var(--border);border-radius:11px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13.5px;color:var(--text);background:var(--white);outline:none;cursor:pointer;}
.form-select:focus{border-color:var(--accent);}
.form-hint{font-size:11px;color:var(--muted);}
.form-err{font-size:11px;color:var(--danger);display:none;}
.form-err.show{display:block;}

/* ══ EMPTY ══ */
.empty{text-align:center;padding:60px 20px;color:var(--muted);}
.empty-ico{font-size:48px;margin-bottom:14px;}
.empty-title{font-size:16px;font-weight:700;margin-bottom:6px;color:var(--text);}

/* ══ SPINNER ══ */
.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;margin:0 auto;}
@keyframes spin{to{transform:rotate(360deg)}}

/* ══ SKELETONS — Wave Diagonal (estilo Airbnb / Notion / Linear) ══
   Banda de luz pasa diagonal sobre fondo gris. Premium look.
   Light: bg gris #d8d8d8 + banda blanca 60% opacidad
   Dark:  bg gris #2a2a2a + banda blanca 8% opacidad */
.skel{
  position:relative;
  background:#d8d8d8;
  overflow:hidden;
  border-radius:8px;
}
.skel::after{
  content:'';
  position:absolute;
  top:0;left:0;right:0;bottom:0;
  background:linear-gradient(110deg, transparent 35%, rgba(255,255,255,.6) 50%, transparent 65%);
  animation: skelWave 1.6s linear infinite;
}
@keyframes skelWave{
  from { transform: translateX(-100%); }
  to   { transform: translateX(100%); }
}
.skel-kpi{height:120px;border-radius:var(--r);}
.skel-row{height:44px;margin-bottom:8px;}

/* ══ HERO CAPITAL ══ */
.cap-hero{background:linear-gradient(135deg,#0f2027,#1a3a2e 55%,#0f2027);border-radius:var(--r);padding:28px 32px;color:white;margin-bottom:20px;position:relative;overflow:hidden;box-shadow:0 10px 30px rgba(0,0,0,.2);}
.cap-hero::before{content:'';position:absolute;top:-60px;right:-60px;width:200px;height:200px;border-radius:50%;background:rgba(0,200,150,.08);}
.cap-lbl{font-size:11px;opacity:.6;text-transform:capitalize;letter-spacing:1.2px;margin-bottom:6px;}
.cap-val{font-size:36px;font-weight:800;letter-spacing:-1px;line-height:1;}
.cap-sub{font-size:13px;opacity:.65;margin-top:5px;}
.cap-chips{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px;}
.cap-chip{background:rgba(255,255,255,.1);border:0.60px solid rgba(255,255,255,.15);border-radius:10px;padding:10px 16px;}
.cap-chip-lbl{font-size:10px;opacity:.55;text-transform:capitalize;letter-spacing:.8px;margin-bottom:4px;}
.cap-chip-val{font-size:15px;font-weight:700;}
.roi-badge{background:rgba(0,200,150,.2);border:0.60px solid rgba(0,200,150,.4);border-radius:12px;padding:10px 20px;text-align:right;}
.roi-val{font-size:28px;font-weight:800;color:#6ee7b7;}
.roi-lbl{font-size:10px;opacity:.55;letter-spacing:.8px;margin-top:2px;}

/* ══ AGENDA GRUPOS ══ */
.grupo-header{background:var(--surface2);padding:9px 16px;font-size:11px;font-weight:700;color:var(--muted);text-transform:capitalize;letter-spacing:.8px;border-bottom:0.60px solid var(--border);display:flex;align-items:center;justify-content:space-between;}

/* ══ PAGO CUOTA ITEM ══ */
.cuota-item{display:flex;align-items:center;gap:12px;padding:13px;border-radius:13px;border:0.60px solid var(--border);margin-bottom:8px;cursor:pointer;transition:all .2s;user-select:none;}
.cuota-item:hover{border-color:var(--accent);background:var(--accent-lt);}
.cuota-item.selected{border-color:var(--accent);background:var(--accent-lt);}
.cuota-item.vencida{border-color:var(--danger);background:var(--danger-lt);}
.cuota-item.vencida.selected{background:#fee2e2;border-color:var(--danger);}
.ci-check{width:22px;height:22px;border-radius:6px;border:0.60px solid var(--border);display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0;font-size:13px;}
.cuota-item.selected .ci-check{background:var(--accent);border-color:var(--accent);color:white;}
.cuota-item.vencida.selected .ci-check{background:var(--danger);border-color:var(--danger);color:white;}

/* ════════════════════════════════════════════════════════════════
   MODAL CRONOGRAMA DE PAGOS — estilo "Mockup 05 / calca confirmation"
   Header sticky (gracias al refactor de .modal-box -> flex), resumen
   centrado (cifra grande + sub + info), tabla limpia sin zebra.
   ════════════════════════════════════════════════════════════════ */
.cron-summary{
  text-align:center;padding:2px 0 16px;
}
.cron-amount{
  font-size:26px;font-weight:700;color:var(--text);letter-spacing:-.5px;margin-bottom:4px;
}
.cron-sub{
  font-size:13px;color:var(--text);margin-bottom:2px;
}
.cron-info{
  font-size:12px;color:var(--muted);
}
.cron-table{
  width:100%;border-collapse:collapse;font-size:11.5px;
}
.cron-table thead th{
  padding:9px 6px;background:#fafafa;font-size:9.5px;color:var(--muted);
  text-transform:uppercase;letter-spacing:.05em;font-weight:700;text-align:right;
  border-top:1px solid var(--border);border-bottom:1px solid var(--border);
  position:sticky;top:0;z-index:2;
}
.cron-table thead th.l{text-align:left;}
.cron-table thead th.c{text-align:center;}
.cron-table tbody td{
  padding:8px 6px;text-align:right;color:var(--text);font-weight:600;
}
.cron-table tbody td.l{text-align:left;color:var(--muted);font-weight:500;}
.cron-table tbody td.c{text-align:center;font-weight:700;color:var(--accent);}
.cron-table tbody td.pur{color:var(--purple);}
.cron-table tbody td.blu{color:var(--blue);}
.cron-table tbody td.acc{color:var(--accent);}
.cron-table tfoot td{
  padding:11px 6px;font-weight:800;border-top:1.5px solid var(--border);
  background:#fafafa;text-align:right;
}
.cron-table tfoot td.l{text-align:left;}
.cron-table tfoot td.pur{color:var(--purple);}
.cron-table tfoot td.blu{color:var(--blue);}
.cron-table tfoot td.acc{color:var(--accent);}

/* ══ CRONOGRAMA ══ */
.crono-table{width:100%;border-collapse:collapse;font-size:13px;}
.crono-table th{padding:9px 12px;text-align:left;font-size:10px;font-weight:700;color:var(--muted);text-transform:capitalize;background:var(--card);border-bottom:0.60px solid var(--border);}
.crono-table td{padding:9px 12px;border-bottom:0.60px solid var(--border);}
.crono-table tr:last-child td{border-bottom:none;}

/* ══ NUEVO CRÉDITO STEPPER ══ */
.stepper{display:flex;align-items:center;margin-bottom:28px;gap:0;}
.step{display:flex;flex-direction:column;align-items:center;gap:5px;flex:1;position:relative;}
.step-num{width:34px;height:34px;border-radius:50%;border:0.60px solid var(--border);background:var(--white);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:var(--muted);transition:all .3s;z-index:2;}
.step.active .step-num{border-color:var(--accent);background:var(--accent);color:white;box-shadow:0 0 0 4px rgba(var(--accent-rgb),.2);}
.step.done .step-num{border-color:var(--accent);background:var(--accent);color:white;}
.step-label{font-size:11px;color:var(--muted);font-weight:600;text-align:center;}
.step.active .step-label{color:var(--accent);}
.step.done .step-label{color:var(--accent);}
.step-line{flex:1;height:2.5px;background:var(--border);transition:background .3s;margin-top:-17px;}
.step-line.done{background:var(--accent);}

/* ══ SECTION BLOCK ══ */
.section-block{display:none;animation:fadeUp .3s ease;}
.section-block.show{display:block;}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}

/* ══ GRID DE CUOTAS (Registrar Pago paso 3) ══ */
/* El grid ya vive en un .card-body (que pad ~20-24px) + un wrapper interno con
   padding propio → daba doble margen. Anulamos el padding del card-body. */
#pago-cal-container{padding:0;}
.pago-grid-cuotas{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;}
.pago-cal-cell{
  height:66px;border-radius:10px;
  display:flex;flex-direction:column;align-items:flex-start;justify-content:center;
  font-weight:700;position:relative;
  -webkit-tap-highlight-color:transparent;
  padding:5px 8px;gap:2px;transition:all .15s;
}
/* Estado base (pendiente normal — no vencida, no hoy) → verde muy suave */
.pago-cal-cell.cuota{
  cursor:pointer;border:0.60px solid #bbf7d0;background:#f0fdf4;color:#166534;
}
.pago-cal-cell.cuota:active{transform:scale(.95)}
.pago-cal-nro{font-size:15px;font-weight:800;line-height:1;color:inherit;width:100%;text-align:center}
.pago-cal-dia{font-size:9px;font-weight:600;line-height:1;color:inherit;opacity:.7;width:100%;text-align:center}
.pago-cal-monto{font-size:10.5px;font-weight:600;line-height:1;white-space:nowrap;color:inherit;opacity:.85;width:100%;text-align:center}
/* Vencida → rojo muy suave */
.pago-cal-cell.vencida{border-color:#fca5a5;background:#fef2f2;color:#b91c1c}
/* Hoy → amarillo muy suave */
.pago-cal-cell.hoy{border-color:#fcd34d;background:#fffbeb;color:#a16207}
/* Parcial → naranja muy suave */
.pago-cal-cell.parcial{border-color:#fed7aa;background:#fff7ed;color:#c2410c}
/* Próxima → celeste muy suave */
.pago-cal-cell.proxima{border-color:#bae6fd;background:#f0f9ff;color:#0369a1}
/* Pagada → gris desaturado y tachada */
.pago-cal-cell.pagada{
  background:rgba(71,85,105,.10);border-color:transparent;
  cursor:not-allowed;opacity:.55;color:var(--muted);
}
.pago-cal-cell.pagada .pago-cal-nro,
.pago-cal-cell.pagada .pago-cal-dia,
.pago-cal-cell.pagada .pago-cal-monto{text-decoration:line-through;}
/* SELECTED → solo se enciende el botón sup-der, el recuadro no cambia */
.pago-cal-badge{
  display:inline-flex;align-items:center;
  padding:1px 5px;border-radius:20px;
  font-size:8px;font-weight:700;letter-spacing:.03em;line-height:1.6;
}
.pago-cal-sel{
  position:absolute;top:5px;right:5px;
  width:14px;height:14px;border-radius:50%;
  border:0.60px solid currentColor;background:transparent;
  opacity:.35;transition:all .15s;
}
.pago-cal-cell.selected .pago-cal-sel{
  background:currentColor;opacity:1;
}

/* ══ FREQ PILLS ══ */
.freq-pill{padding:8px 16px;border-radius:20px;border:0.60px solid var(--border);background:var(--white);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;transition:all .18s;}
.freq-pill.active{background:var(--accent);border-color:var(--accent);color:white;}

/* ══ CRONOGRAMA PREVIEW ══ */
.cuota-row{display:flex;align-items:center;padding:8px 0;border-bottom:0.60px solid var(--border);font-size:13px;gap:8px;}
.cuota-row:last-child{border-bottom:none;}
.cuota-num{width:28px;height:28px;border-radius:8px;background:var(--accent-lt);color:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;flex-shrink:0;}
.cuota-fecha{flex:1;color:var(--muted);}
.cuota-cap{color:var(--text);font-weight:600;}
.cuota-int{color:var(--purple);font-size:12px;}
.cuota-total{color:var(--accent);font-weight:700;}

/* ══ BUSQUEDA CLIENTE ══ */
.search-result-item{display:flex;align-items:center;gap:12px;padding:12px;border-radius:12px;border:0.60px solid var(--border);cursor:pointer;margin-bottom:8px;transition:all .2s;}
/* Hover solo en dispositivos con puntero real (desktop). En touch (mobile/
   tablet) el :hover se queda pegado tras tap, mostrando un rosado que el
   usuario interpretaba como "selección permanente". */
@media (hover: hover) {
  .search-result-item:hover{border-color:var(--accent);}
}
.client-pill{display:flex;align-items:center;gap:12px;padding:14px 16px;background:var(--accent-lt);border:0.60px solid var(--accent);border-radius:13px;margin-top:10px;}
.cp-name{font-size:14px;font-weight:700;}
.cp-det{font-size:12px;color:var(--muted);margin-top:2px;}

/* ══ RESUMEN CRÉDITO ══ */
.resumen-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px;}
.res-card{background:var(--surface2);border-radius:12px;padding:14px;}
.res-card-lbl{font-size:11px;color:var(--muted);font-weight:600;text-transform:capitalize;letter-spacing:.5px;margin-bottom:5px;}
.res-card-val{font-size:22px;font-weight:800;}
.res-card.cap .res-card-val{color:var(--accent);}
.res-card.int .res-card-val{color:var(--purple);}
.total-row{display:flex;justify-content:space-between;align-items:center;padding:14px;background:linear-gradient(135deg,#0f2027,#1a3a2e);border-radius:14px;color:white;margin-bottom:14px;}
.total-lbl{font-size:11px;opacity:.6;text-transform:capitalize;letter-spacing:.8px;margin-bottom:4px;}
.total-val{font-size:28px;font-weight:800;}

/* ══ CIERRE CAJA ══ */
.cob-card{border:0.60px solid var(--border);border-radius:14px;margin-bottom:14px;overflow:hidden;transition:border-color .2s;}
.cob-card.cerrado{border-color:var(--green);}
.cob-card-head{padding:16px 18px;display:flex;align-items:center;gap:14px;cursor:pointer;}
.cob-pills{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;}
.cpill{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:700;}
.cp-base{background:var(--blue-lt);color:var(--blue);}
.agenda-btn-txt{display:inline;}
.agenda-btn-ico{display:none;}
.cred-filtros-fila1{display:flex;gap:10px;align-items:flex-end;margin-bottom:0!important;}
.cred-filtros-fila2{display:flex;gap:10px;align-items:center;margin-top:10px;}
.cred-btn-txt{display:inline;}
.cred-btn-ico{display:none;}
.cred-filtros-desktop{display:flex!important;}
.cred-filtros-movil{display:none!important;}

.cp-credito{background:var(--danger-lt);color:var(--danger);}
.entregar-lbl{font-size:10px;color:var(--muted);font-weight:700;text-transform:capitalize;letter-spacing:.7px;}
.entregar-val{font-size:20px;font-weight:800;color:var(--purple);}
.check-btn{display:inline-flex;align-items:center;gap:7px;padding:9px 18px;border-radius:11px;border:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:13px;font-weight:700;cursor:pointer;transition:all .2s;}
.check-btn.pend{background:var(--accent);color:white;box-shadow:0 4px 12px rgba(var(--accent-rgb),.3);}
.check-btn.done{background:var(--green-lt);color:#15803d;border:0.60px solid var(--green);cursor:default;}
.base-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:11px;border:0.60px solid var(--border);background:var(--surface2);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:12px;font-weight:700;color:var(--blue);cursor:pointer;transition:all .2s;}
.base-btn:hover{border-color:var(--blue);background:var(--blue-lt);}
.cob-det{display:none;border-top:0.60px solid var(--border);background:var(--surface2);}
.cob-det.open{display:block;}
.cob-det-inner{padding:16px 18px;}
.det-block{margin-bottom:14px;}
.det-block-head{display:flex;justify-content:space-between;margin-bottom:8px;font-size:11px;font-weight:700;color:var(--muted);text-transform:capitalize;letter-spacing:.7px;}
.det-item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:var(--white);border-radius:9px;border:0.60px solid var(--border);margin-bottom:5px;font-size:13px;}
.formula-box{background:var(--white);border:0.60px solid var(--border);border-radius:12px;padding:14px 16px;margin-top:10px;}
.f-row{display:flex;justify-content:space-between;font-size:13px;padding:4px 0;}
.f-sep{border:none;border-top:0.60px solid var(--border);margin:8px 0;}
.f-total{display:flex;justify-content:space-between;font-size:14px;font-weight:800;}


/* ══ PAGINACIÓN ══ */
.pagination{display:flex;align-items:center;justify-content:center;gap:4px;padding:14px 16px;border-top:0.60px solid var(--border);flex-wrap:wrap;}
.pg-btn{min-width:34px;height:34px;border-radius:8px;border:0.60px solid var(--border);background:var(--white);color:var(--text);font-size:13px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;padding:0 8px;}
.pg-btn:hover{border-color:var(--accent);color:var(--accent);}
.pg-btn.active{background:var(--accent);border-color:var(--accent);color:white;}
.pg-btn:disabled{opacity:.4;cursor:not-allowed;}
.pg-info{font-size:12px;color:var(--muted);margin:0 8px;}
/* ══ ESTADO CUENTA ══ */
.ec-search-phase{max-width:600px;margin:0 auto;}
.ec-result-phase{display:none;}
.ec-hero{background:linear-gradient(135deg,#0f2027,#1a3a2e);border-radius:var(--r);padding:22px 24px;color:white;margin-bottom:16px;display:flex;align-items:center;gap:16px;}
.ec-av{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:18px;color:white;flex-shrink:0;}
.ec-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;background:transparent;}
input[type="date"]{text-align:left;}
input[type="date"]::-webkit-date-and-time-value{text-align:left;width:100%;}
.ec-stat{background:var(--white);padding:14px;text-align:center;}
.ec-stat-val{font-size:17px;font-weight:700;}
.ec-stat-lbl{font-size:11px;color:var(--muted);margin-top:2px;}

/* ══ COBRADORES ══ */
.cob-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;margin-bottom:24px;}
.cobrador-card{background:var(--white);border:0.60px solid var(--border);border-radius:var(--r);padding:20px;box-shadow:var(--shadow);transition:all .2s;position:relative;overflow:hidden;}
.cobrador-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);}
.cobrador-card::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;border-radius:var(--r) var(--r) 0 0;}
.cs-val{font-size:17px;font-weight:800;margin-bottom:2px;}
.cs-lbl{font-size:10px;color:var(--muted);font-weight:600;text-transform:capitalize;letter-spacing:.4px;}
.meta-bar{height:7px;background:var(--surface2);border-radius:20px;overflow:hidden;margin-top:6px;}
.meta-fill{height:100%;border-radius:20px;transition:width .8s ease;}

/* ══ STICKY FOOTER NAV (sólo mobile) ══ */
.sticky-footer-nav{display:none;position:fixed;left:16px;right:16px;bottom:max(12px, calc(env(safe-area-inset-bottom) - 12px));background:#e3dacc;border-radius:100px;z-index:1002;padding:4px 6px;transform:translateZ(0);-webkit-transform:translateZ(0);transition:transform .7s cubic-bezier(0.22, 0.61, 0.36, 1), opacity .7s ease-out;}
.sticky-footer-nav.nav-hidden{transform:translate3d(0, calc(100% + 30px), 0);opacity:0;pointer-events:none;}
.sticky-footer-nav button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;padding:10px 4px 8px;background:transparent;border:none;color:#141413;font-family:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;position:relative;}
.sticky-footer-nav button.active{color:#141413;}
.sticky-footer-nav button.active::after{content:"";position:absolute;bottom:4px;width:4px;height:4px;border-radius:50%;background:#d97757;}
.sticky-footer-nav button:focus,.sticky-footer-nav button:active{outline:none;background:transparent;}
.sticky-footer-nav button span{font-size:10px;font-weight:600;letter-spacing:-0.005em;display:inline-block;}
.sticky-footer-nav svg{shape-rendering:geometricPrecision;}
.sticky-footer-nav button.footer-fab{padding:0 4px;transition:transform .15s;color:#141413;}
.sticky-footer-nav button.footer-fab:active{transform:scale(0.92);}
#app.login-mode .sticky-footer-nav{display:none!important;}

/* ══ MOBILE ══ */
.mob-topbar{display:none;position:fixed;top:0;left:0;right:0;z-index:1001;background:#e3dacc;color:#141413;padding:env(safe-area-inset-top) 16px 4px;align-items:center;gap:12px;transition:transform .7s cubic-bezier(0.22, 0.61, 0.36, 1), opacity .7s ease-out;}
.mob-topbar.nav-hidden{transform:translate3d(0, calc(-100% - 10px), 0);pointer-events:none;}
.mob-topbar img{box-shadow:0 2px 8px rgba(var(--accent-rgb, var(--accent-rgb)),0.4);}
.mob-topbar.visible{display:flex;}
.mob-menu{width:36px;height:36px;border:0.60px solid var(--border);border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px;}

/* ── BOTTOM NAV MÓVIL ── */

.drawer-grid-btn{transition:background .15s, transform .15s;}
.drawer-grid-btn:focus,.drawer-grid-btn:focus-visible{outline:none;background:transparent!important;border:none!important;-webkit-tap-highlight-color:transparent;}
.drawer-grid-btn:active{outline:none;background:transparent!important;border:none!important;transform:scale(0.92)!important;-webkit-tap-highlight-color:transparent;}
/* Iconos del drawer: mismo neumorfismo que kpi-modern / dash-sec-card / card */
.drawer-grid-icon{
  width:68px; height:68px; border-radius:16px;
  display:flex; align-items:center; justify-content:center;
  background:var(--bg-page);
  box-shadow:
    8px 8px 18px var(--neu-d),
    -4px -4px 12px var(--neu-l);
}
.drawer-grid-icon svg{ width:44px; height:44px; }
.drawer-grid-btn:active .drawer-grid-icon{
  box-shadow:
    inset 4px 4px 10px var(--neu-d),
    inset -3px -3px 8px var(--neu-l);
}
/* ══ RESPONSIVE MÓVIL COMPLETO ══ */
@media(min-width:769px){
  .mob-topbar, .sticky-footer-nav{display:none!important;}
  .dash-saludo-mobile{display:none!important;}
}
@media(max-width:768px){
  .sidebar{display:none!important;}
  .mob-topbar.visible{display:flex!important;}
  .sticky-footer-nav{display:flex!important;}
  #main-content{overflow-x:hidden;overflow-y:visible;}
  .kpi-grid{grid-template-columns:repeat(2,1fr);}
  .form-row{grid-template-columns:1fr;}
  .resumen-grid{grid-template-columns:1fr;}
  /* Padding-bottom: deja espacio para que el sticky footer no tape contenido + respeta home indicator */
  /* Padding-top: altura del topbar + 16px de respiro entre header y contenido */
  .page{padding:calc(var(--topbar-h, 100px) + 16px) 14px calc(env(safe-area-inset-bottom) + 72px);height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;}
  /* En mobile el icono + titulo de cada pantalla se muestran en el topbar, no aqui */
  .pg-title{display:none;}
  /* El SVG del topbar se escala a 42x42 (el original es 26x26) */
  #mobTopbarIcon svg{width:42px;height:42px;}
  /* Cambio 1: ocultar pg-header de Centro de Control (el contenido sube) */
  #page-dashboard .pg-header{display:none;}
  /* Dashboard: usa el mismo padding-top que las demás pantallas (.page, arriba),
     así el contenido cae debajo del topbar fijo. */
  /* Cambio 2: ocultar pg-header de Estado Financiero (el contenido sube) */
  #page-mi_capital .pg-header{display:none;}
  /* Cambio 3b: ocultar pg-header de Agenda (oculta el subtitulo y el toggle viejo) */
  #page-agenda .pg-header{display:none;}
  /* Cambio 4: ocultar pg-header de Creditos (mismo patron que Agenda) */
  #page-creditos .pg-header{display:none;}
  /* Quitar sombras de elementos no-card para rendimiento mobile */
  .page *:not(.kpi-modern):not(.dash-sec-card):not(.card):not(.cobrador-card):not(.kpi):not(.nc-tipo-opt):not(.hero-search-input):not(.ag-pb):not(.ag-pb-ic):not(.ag-chip):not(.ag-cli):not(.ag-chip-av):not(.ag-chip-dot):not(.ag-neuro):not(.ag-cal):not(.ag-cal-nav):not(.ag-day-badge):not(.ag-skel):not(.ag-kc):not(.ag-col-title):not(.ag-cav):not(.ag-cav-ring):not(.ag-glass):not(.ag-glass-dot):not(.ag-glass-av):not(.ag-apply):not(.ag-cli-cob-av):not(.cred-filtros-card):not(.ag-tab):not(.ec2-tab):not(.ec2-tabs):not(.ec2-kpi):not(.ec2-score):not(.ec2-saldo):not(.ec2-call):not(.ec2-av):not(.ec2-back):not(.ec2-dt):not(.ec-nfab):not(.ec-nsheet):not(.ec-search-box):not(.drawer-grid-icon):not(.cli-selbar):not(.dash-meta-coin){box-shadow:none!important;}
  .pg-header{flex-direction:column;align-items:flex-start;gap:10px;}
  .pg-header .btn-primary{width:100%;justify-content:center;}
  .pg-header.pg-hdr-inline{flex-direction:row;align-items:center;flex-wrap:nowrap;}
  .pg-header.pg-hdr-inline .btn-primary{width:auto;padding:10px 14px;min-width:44px;}
  .pg-header.pg-hdr-inline .btn-hdr-ico{display:inline;font-size:18px;font-weight:700;}
  .pg-header.pg-hdr-inline .btn-hdr-txt{display:none;}
  .cap-hero{padding:20px;}
  .cap-chips{gap:8px;}
  .cap-chip{padding:8px 12px;}
  .roi-badge{padding:8px 14px;}
  .roi-val{font-size:22px;}
  .kpi-val{font-size:22px;}
  table{font-size:12px;}
  th,td{padding:9px 10px;}
  .modal-box{margin:0;border-radius:22px 22px 0 0;position:fixed;bottom:var(--footer-h, 0);left:0;right:0;max-height:calc(92vh - var(--footer-h, 0px));max-width:100%!important;}
  .modal-box.floating{position:relative;bottom:auto;left:auto;right:auto;border-radius:22px;max-width:calc(100vw - 32px)!important;max-height:80vh;margin:16px;}
  
  .modal-foot{flex-direction:column;}
  .modal-foot .btn-primary,.modal-foot .btn-ghost{width:100%;justify-content:center;}
  .ec-stats{grid-template-columns:repeat(2,1fr);}
  /* ── KPI modern en móvil: fuente más pequeña y alineado izquierda ── */
  .kpi-modern{padding:10px 12px;}
  .kpi-modern-head{margin-bottom:8px;}
  .kpi-modern-val{font-size:var(--fs-role-kpi)!important;}
  .kpi-modern-label{font-size:var(--fs-role-card);letter-spacing:0;}
  .kpi-modern-sub{font-size:var(--fs-role-micro);}
  .agenda-search-bar{display:none!important;}
  .agenda-filter-inp{height:42px;font-size:var(--fs-body);box-sizing:border-box;width:100%;}
  input[type="date"].agenda-filter-inp{-webkit-appearance:none;appearance:none;height:42px;min-height:42px;max-height:42px;padding:0 10px;line-height:42px;}
  .agenda-btn-buscar{height:42px;padding:0 14px;white-space:nowrap;}
  .agenda-btn-txt{display:none;}
  .agenda-btn-ico{display:inline;}
  /* ── Créditos filtros móvil ── */
  .cred-filtros-fila1{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
  .cred-filtros-fila2{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:flex-end;}
  .cred-filter-inp{height:42px;font-size:13px;box-sizing:border-box;width:100%;}
  input[type="date"].cred-filter-inp{-webkit-appearance:none;appearance:none;height:42px;min-height:42px;max-height:42px;padding:0 10px;line-height:42px;}
  .cred-btn-buscar{height:42px;padding:0 14px;white-space:nowrap;}
  .cred-btn-txt{display:none;}
  .cred-btn-ico{display:inline;}
  /* ── Nuevo Crédito: 2 cols uniformes en móvil ── */
  #page-nuevo_credito .form-row{grid-template-columns:1fr 1fr;gap:8px;align-items:start;}
  #page-nuevo_credito .form-row.full{grid-template-columns:1fr;}
  #page-nuevo_credito .form-group{display:flex;flex-direction:column;}
  /* Jerarquia tipografica del card "Condiciones del Credito":
     labels mas grandes y legibles que los datos. Antes labels 10px (casi
     ilegibles en mobile) e inputs 13px — invertia la jerarquia. Ahora
     labels 13.5px (visibles y bold) e inputs 12.5px (compactos, no chocan). */
  #page-nuevo_credito .form-label{font-size:13.5px;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  #page-nuevo_credito .form-input,
  #page-nuevo_credito .form-select{height:42px;font-size:12.5px;padding:0 10px;box-sizing:border-box;width:100%;}
  #page-nuevo_credito input[type="date"].form-input{-webkit-appearance:none;appearance:none;height:42px;min-height:42px;max-height:42px;line-height:42px;padding:0 10px;width:100%;box-sizing:border-box;font-size:12.5px;}
  #page-registrar_pago input[type="date"]{-webkit-appearance:none;appearance:none;height:42px;min-height:42px;max-height:42px;line-height:42px;padding:0 10px;width:100%;box-sizing:border-box;}
  #page-agenda input[type="date"]{-webkit-appearance:none;appearance:none;height:42px;min-height:42px;max-height:42px;line-height:42px;padding:0 10px;width:100%;box-sizing:border-box;}
  #page-creditos input[type="date"]{-webkit-appearance:none;appearance:none;height:42px;min-height:42px;max-height:42px;line-height:42px;padding:0 10px;width:100%;box-sizing:border-box;}
  .nc-auto-hidden{display:none!important;}
  .cob-grid{grid-template-columns:1fr;}
  .cob-card-head{flex-wrap:wrap;gap:10px;}
  .freq-pill{padding:7px 12px;font-size:12px;}
  .stepper{gap:0;}
  .step-label{font-size:10px;}
  .total-row{flex-direction:column;gap:10px;text-align:center;}
  .total-val{font-size:22px;}
  .cap-hero .roi-badge{margin-top:10px;text-align:center;}
  #page-login{
    padding:0;
    align-items:stretch;
    justify-content:stretch;
    background:#1a1613;
  }

  .login-card{
    margin:0;
    width:100%;
    max-width:none;
    min-height:100dvh;
    max-height:none;
    border-radius:0;
    padding:32px 22px;
    padding-top:calc(32px + env(safe-area-inset-top));
    padding-bottom:calc(var(--footer-h, calc(80px + env(safe-area-inset-bottom))) + 12px);
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
  }
}
@media(max-width:480px){
  .kpi-grid{grid-template-columns:repeat(2,1fr);}
  .kpi-val{font-size:20px;}
  .pg-title{font-size:19px;}
}


/* Safe area para iPhone con notch */


/* ── HERO SEARCH ── */
.hero-search-wrap {
  min-height: calc(100vh - 120px);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 20px 16px;
  background: linear-gradient(160deg, #f0fdf9 0%, #f8fafc 60%, #f0f4ff 100%);
  border-radius: 16px;
}
.hero-search-icon {
  font-size: 48px;
  margin-bottom: 12px;
  animation: pulse-icon 2s ease-in-out infinite;
}
@keyframes pulse-icon {
  0%,100% { transform: scale(1); }
  50% { transform: scale(1.08); }
}
.hero-search-title {
  font-size: 22px;
  font-weight: 800;
  color: var(--text);
  margin-bottom: 6px;
  text-align: center;
}
.hero-search-sub {
  font-size: 13px;
  color: var(--muted);
  margin-bottom: 28px;
  text-align: center;
}
.hero-search-box {
  width: 100%;
  max-width: 560px;
  position: relative;
}
/* Input de busqueda con estilo NEUMORFICO (mismo que kpi-modern, dash-sec-card, card, etc.)
   Page claro=var(--bg-page) · Input claro=var(--bg-page) · sombras claras/oscuras
   Page oscuro=#0c0c0c · Input oscuro=#141414 · sombras fuerte/glow */
.hero-search-input {
  width: 100%;
  padding: 16px 56px 16px 20px;
  font-size: 16px;
  font-family: inherit;
  border: none;
  border-radius: 16px;
  background: var(--card);   /* oat — mismo que el container del resultado */
  color: var(--text);
  outline: none;
  box-shadow:
    8px 8px 18px var(--neu-d),
    -4px -4px 12px var(--neu-l);
  transition: box-shadow 0.2s;
}
.hero-search-input:focus {
  box-shadow:
    8px 8px 18px var(--neu-d),
    -4px -4px 10px var(--neu-l),
    inset 0 0 0 1.5px var(--accent);
}
.hero-search-btn {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  background: var(--accent);
  color: white;
  border: none;
  border-radius: 10px;
  padding: 8px 16px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  font-family: inherit;
  transition: background 0.2s;
}
.hero-search-btn:hover, .hero-search-btn:active, .hero-search-btn:focus { background: var(--accent2); outline: none; }
.hero-search-results {
  width: 100%;
  max-width: 560px;
  margin-top: 12px;
  background: var(--card);  /* oat, mismo que el topbar/cards — consistente con Nuevo Crédito */
  border-radius: 14px;
  border: 0.60px solid var(--border);
  box-shadow: 0 8px 32px rgba(0,0,0,0.10);
  overflow: hidden;
}
.hero-result-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  cursor: pointer;
  border-bottom: 0.60px solid var(--border);
  transition: background 0.15s;
}
.hero-result-item:last-child { border-bottom: none; }
.hero-result-item:hover { background: var(--accent-lt); }
.hero-result-name { font-size: 14px; font-weight: 700; }
.hero-result-meta { font-size: 12px; color: var(--muted); margin-top: 1px; }
.hero-search-tips {
  display: flex;
  gap: 10px;
  margin-top: 16px;
  flex-wrap: wrap;
  justify-content: center;
}
.hero-tip {
  background: var(--white);
  border: 0.60px solid var(--border);
  border-radius: 99px;
  padding: 6px 14px;
  font-size: 12px;
  color: var(--muted);
  cursor: pointer;
  transition: all 0.15s;
}
.hero-tip:hover { border-color: var(--accent); color: var(--accent); }


.sort-th{cursor:pointer;user-select:none;white-space:nowrap;padding:8px 12px;background:var(--card);font-size:var(--fs-role-label);font-weight:700;color:var(--muted);text-transform:capitalize;letter-spacing:0.04em;border-bottom:0.60px solid var(--border);}
/* hover sin cambio de color/bg — los headers no se "iluminan" al pasar mouse o tap */
.sort-th:hover{}
.sort-ico{margin-left:3px;font-size:10px;color:var(--muted);}

/* ── KPI MODERNO — propiedades específicas (bevel viene del selector global) ── */
.kpi-modern{
  padding:14px 16px;
  position:relative;
  transition:transform .2s, box-shadow .2s;
}
.kpi-modern:hover,.dash-sec-card:hover,.nc-tipo-opt:hover{
  transform:translateY(-1px);
  /* Hover: sombra un toque más larga (6/12) para sentir el "lift" */
  box-shadow:
    6px 6px 12px var(--neu-d),
    -6px -6px 12px var(--neu-l);
}
/* Franja vertical de color FLOTANTE (no toca el borde, no mueve el texto).
   Alto completo: del ícono (arriba) a la descripción (abajo). Color = --kc de la card.
   Va en el padding-left existente (16px), así el contenido NO se corre. */
.kpi-modern::before,
.dash-sec-card::before{
  content:none;
}
/* ── Cabecera: caja de ícono + label ── */
.kpi-modern-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.kpi-ico-box{
  width:26px;height:26px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
/* Reglas genéricas — usan var(--kc) que se define abajo por .km-*
   ESTILO #1: fondo sólido del color identitario + icono blanco
   (más vibrante, estilo fintech moderno tipo Revolut/Wise) */
[class*="km-"] .kpi-ico-box {
  background: rgb(var(--kc));
  color: #fff;
  box-shadow: 0 2px 6px rgba(var(--kc), 0.3);
}
[class*="km-"] .kpi-modern-val {
  color: rgb(var(--kc));
}
.kpi-modern-label{font-size:var(--fs-role-card);font-weight:700;color:var(--text);letter-spacing:0;}
.kpi-modern-val{font-size:var(--fs-role-kpi);font-weight:800;line-height:1.1;margin-bottom:2px;}
.kpi-modern-sub{font-size:var(--fs-role-micro);color:var(--muted);}
/* ── Section tiles — propiedades específicas (bevel viene del selector global) ── */
.dash-sec-card{position:relative;transition:transform .2s,box-shadow .2s;padding:14px 16px;}

/* ═════════════════════════════════════════════════════════════
   SISTEMA DE COLORES IDENTITARIOS — UNA SOLA FUENTE DE VERDAD
   ─────────────────────────────────────────────────────────────
   Cada .km-* define UN solo color (rgb triplet) en --kc.
   Todo lo demás (icono, valor, franja vertical, glow) lee de
   ahí automáticamente. Para agregar un color nuevo: 1 línea.
   ═════════════════════════════════════════════════════════════ */
.km-green   { --kc: 0,212,160;   }   /* verde brillante (= color del valor) */
.km-red     { --kc: 248,113,113; }   /* rojo coral */
.km-orange  { --kc: 217,119,6;   }   /* ámbar oscuro (= color del valor) */
.km-blue    { --kc: 59,130,246;  }   /* azul */
.km-purple  { --kc: 139,92,246;  }   /* púrpura */
.km-cyan    { --kc: 6,182,212;   }   /* cyan — Potenciales (color que ya tenía inline) */

/* (Glow neón de colores ELIMINADO — los cards usan solo el bevel neumórfico
    base definido en .kpi-modern/.dash-sec-card, sin halo de color.) */

/* Ocultar ojito nativo del navegador en campo contraseña */
#loginPass::-ms-reveal { display: none !important; }
#loginPass::-ms-clear { display: none !important; }
#loginPass::-webkit-credentials-auto-fill-button { display: none !important; }
#loginPass::-webkit-textfield-decoration-container { display: none !important; }
#loginPass::-webkit-contact-info-suggestion-label { display: none !important; }

/* ── MULTI-SELECT DROPDOWN ── */
.ms-container { position: relative; width: 100%; text-align: left; }
.ms-btn { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 0 14px; border: 0.60px solid var(--border); border-radius: 11px; background: var(--white); font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; font-size: 13px; color: var(--text); cursor: pointer; user-select: none; transition: border-color 0.2s; height: 42px; outline: none; }
.ms-btn:focus { border-color: var(--accent); }
.ms-btn-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; text-align: left; }
.ms-menu { position: absolute; top: calc(100% + 4px); left: 0; right: 0; background: var(--white); border: 0.60px solid var(--border); border-radius: 12px; box-shadow: var(--shadow-lg); z-index: 100; max-height: 250px; overflow-y: auto; display: none; padding: 6px; }
.ms-container.open .ms-menu { display: block; }
.ms-opt { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 8px; cursor: pointer; transition: background 0.15s; font-size: 13px; color: var(--text); }
.ms-opt:hover { background: var(--surface2); }
.ms-opt input { cursor: pointer; width: 16px; height: 16px; accent-color: var(--accent); margin: 0; flex: none; padding: 0; }

/* ── ACCORDION GROUPING (AGENDA) ── */
.ag-group { margin-bottom: 8px; border: 0.60px solid var(--border); border-radius: 12px; overflow: hidden; background: var(--white); }
.ag-summary { display: grid; grid-template-columns: 2fr 1fr 1fr 1.5fr auto; gap: 12px; align-items: center; padding: 14px 16px; cursor: pointer; transition: background 0.2s; user-select: none; }
@media(max-width: 768px) {
  .ag-summary { grid-template-columns: 1fr auto; }
  .ag-col.hide-mob { display: none; }
}
.ag-summary:hover { background: var(--surface2); }
.ag-summary.open { border-bottom: 0.60px solid var(--border); background: var(--surface2); }
.ag-det-wrap { display: none; padding: 0; background: var(--surface); }
.ag-group.open .ag-det-wrap { display: block; }
.ag-icon { transition: transform 0.2s; font-size:var(--fs-sm); color: var(--muted); display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 8px; background: var(--border); flex-shrink: 0; }
.ag-group.open .ag-icon { transform: rotate(180deg); background: var(--accent); color: white; }
.ag-client-name { font-weight: 800; font-size:var(--fs-body); display: flex; align-items: center; gap: 6px; color: var(--text); }
.ag-client-cred { font-size:var(--fs-caption); color: var(--accent); background: var(--accent-lt); padding: 2px 8px; border-radius: 6px; font-weight: 700; white-space: nowrap; }
.ag-col { display: flex; flex-direction: column; }
.ag-lbl { font-size:var(--fs-micro); color: var(--muted); font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; }
.ag-val { font-size:var(--fs-body); font-weight: 700; color: var(--text); }
.ag-val.monto { font-size:var(--fs-md); color: var(--accent); font-weight: 800; }

.agenda-filter-row { display: grid; grid-template-columns: 1fr 1fr 1fr auto; gap: 8px; align-items: flex-end; }
@media (max-width: 768px) {
  .agenda-filter-row { grid-template-columns: 1fr 1fr; }
  .agenda-filter-row .agenda-btn-buscar { width: 100%; justify-content: center; }
}

/* Custom toggle switch */
.toggle-switch { position: relative; display: inline-block; width: 36px; height: 20px; flex-shrink: 0; }
.toggle-switch input { opacity: 0; width: 0; height: 0; }
.toggle-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--border); border-radius: 20px; transition: .2s; }
.toggle-dot { position: absolute; height: 14px; width: 14px; left: 3px; bottom: 3px; background-color: white; border-radius: 50%; transition: .2s; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
.toggle-switch input:checked + .toggle-slider { background-color: var(--accent); }
.toggle-switch input:checked + .toggle-slider .toggle-dot { transform: translateX(16px); }

/* ── Patrimonio flip card ── */
.patrimonio-flip { perspective: 1200px; cursor: pointer; }
.patrimonio-flip-inner { position: relative; transition: transform 0.55s cubic-bezier(0.4,0.2,0.2,1); transform-style: preserve-3d; }
.patrimonio-flip.flipped .patrimonio-flip-inner { transform: rotateY(180deg); }
.patrimonio-flip-front, .patrimonio-flip-back { border-radius: 16px; backface-visibility: hidden; -webkit-backface-visibility: hidden; }
.patrimonio-flip-back { position: absolute; inset: 0; transform: rotateY(180deg); }

.cartera-flip { perspective: 1200px; }
.cartera-flip-inner { position: relative; transition: transform 0.35s cubic-bezier(0.32,0.72,0,1); transform-style: preserve-3d; }
.cartera-flip.flipped .cartera-flip-inner { transform: rotateX(180deg); }
.cartera-flip-front, .cartera-flip-back { border-radius: 16px; backface-visibility: hidden; -webkit-backface-visibility: hidden; }
.cartera-flip-back { position: absolute; inset: 0; transform: rotateX(180deg); }
.rep-bar-row { border-radius: 8px; transition: background 150ms ease; padding: 8px 6px; }
.rep-bar-row:hover { background: var(--surface2); }

/* ── KPI FLIP (ROA/ROE/Default — flip horizontal con click) ── */
.kpi-flip { perspective: 1000px; cursor: pointer; }
.kpi-flip-inner { position: relative; width: 100%; transition: transform 0.5s; transform-style: preserve-3d; }
.kpi-flip.flipped .kpi-flip-inner { transform: rotateY(180deg); }
.kpi-flip-front { backface-visibility: hidden; -webkit-backface-visibility: hidden; }
.kpi-flip-back { position: absolute; inset: 0; transform: rotateY(180deg); backface-visibility: hidden; -webkit-backface-visibility: hidden; }
.kpi-flip-front .kpi-modern, .kpi-flip-back .kpi-modern { height: 100%; box-sizing: border-box; margin: 0; }
.kpi-flip-back .kpi-modern { display: flex; align-items: center; padding: 14px 16px; }

/* ── PLACEHOLDERS más oscuros (no parecen valores reales) ── */
input::placeholder, textarea::placeholder, select::placeholder {
  color: #9ca3af !important;
  opacity: 0.55 !important;
  font-style: italic;
}
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
  color: #9ca3af !important; opacity: 0.55 !important; font-style: italic;
}
input::-moz-placeholder, textarea::-moz-placeholder {
  color: #9ca3af !important; opacity: 0.55 !important; font-style: italic;
}

/* ══ CRÉDITOS — KPI CAROUSEL ══ */
/* Nota: overflow-x:auto implícitamente convierte overflow-y:visible → auto (CSS spec).
   Por eso usamos padding generoso para que las sombras neumórficas quepan DENTRO
   del padding-box del contenedor y no se corten. */
/* ── DOTS (indicadores de página) del .kpi-carousel ──────────────────── */
.kpi-carousel-dots {
  display: none;
  justify-content: center;
  align-items: center;
  gap: 6px;
  margin-top: 6px !important;   /* aire visible entre los KPI y los dots */
}
.kpi-carousel-dot {
  width: 7px; height: 7px;
  border-radius: 99px;
  background: var(--border);
  transition: background .25s, width .25s, border-radius .25s;
  cursor: pointer;
  flex-shrink: 0;
}
.kpi-carousel-dot.active {
  background: var(--accent);
  width: 20px;
}

/* ══ KPI ESTADO SPLIT (4° card) ══ */
.kpi-modern.km-purple::before { background: linear-gradient(180deg, #8b5cf6, #a78bfa); }
.km-purple .kpi-modern-val { color: #8b5cf6; }
.cred-estado-split {
  display: flex;
  align-items: center;
  margin-top: 4px;
}
.cred-estado-item {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 8px;
}
.cred-estado-divider {
  width: 1px; height: 30px;
  background: var(--border);
  margin: 0 10px;
  flex-shrink: 0;
}
.cred-estado-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}
.cred-estado-num {
  font-size: 22px;
  font-weight: 800;
  line-height: 1.1;
  margin-bottom: 1px;
}
.cred-estado-lbl {
  font-size: 11px;
  color: var(--muted);
  font-weight: 600;
}

/* ══ FILTROS COLAPSABLES ══ */
/* Hereda fondo/borde/sombra/radius del .card del sistema. Aquí solo el COMPORTAMIENTO
   específico (header colapsable, body que se anima, chevron rotativo). */
.cred-filtros-card {
  overflow: visible;
}
.cred-filtros-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 13px 16px;
  cursor: pointer;
  user-select: none;
  border-radius: 16px;
  transition: background .15s;
  -webkit-tap-highlight-color: transparent;
}
/* (hover oscuro removido — el header queda neutro al pasar el mouse / tap) */
.cred-filtros-card.open .cred-filtros-head {
  border-radius: var(--r) var(--r) 0 0;
  border-bottom: 0.60px solid var(--border);
}
.cred-filtros-head-left {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
}
.cred-filtros-badge {
  background: var(--accent);
  color: white;
  font-size: 10px;
  font-weight: 700;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 20px;
  display: none;
  align-items: center;
  justify-content: center;
}
.cred-filtros-badge.show { display: inline-flex; }
.cred-filtros-chevron {
  width: 28px; height: 28px;
  border-radius: 8px;
  background: var(--surface2);
  display: flex; align-items: center; justify-content: center;
  transition: transform .2s ease;
  color: var(--muted);
  flex-shrink: 0;
  will-change: transform;
}
.cred-filtros-card.open .cred-filtros-chevron {
  transform: rotate(180deg);
  background: var(--accent-lt);
  color: var(--accent);
}
.cred-filtros-body {
  display: none;
  opacity: 0;
  transition: opacity .18s ease;
}
.cred-filtros-card.open .cred-filtros-body {
  display: block;
  opacity: 1;
}
.cred-filtros-body-inner { min-height: 0; }
.cred-filtros-inner { padding: 14px 16px 16px; }
/* (Override de inputs blancos eliminado — ahora heredan el sistema:
    background var(--bg-page) igual que el resto del sistema.) */
/* layout interno del filtro */
.cf-row-dates {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-bottom: 8px;
}
.cred-search-main { margin-bottom: 8px; }
.cf-field-full {
  width: 100%;
  margin-bottom: 8px;
  flex: none;
}

/* ══ RESPONSIVE CAROUSEL + FILTROS ══ */
@media (max-width: 768px) {
  /* Full-bleed como la Agenda: el margen negativo cancela el padding horizontal
     de la página (14px) para que el carrusel cubra TODO el ancho (borde a borde).
     El padding-left/right del carrusel (16px) mantiene la 1er/última card
     separadas del borde y le deja aire a la sombra. */
  .kpi-carousel { margin-left: -14px !important; margin-right: -14px !important; }
  .kpi-carousel-dots { display: flex; }
  /* Override del look del KPI cuando vive en este carrusel (fonts más finos para mobile) */
  .kpi-carousel .kpi-modern-val { font-size:var(--fs-role-kpi) !important; white-space: normal; }
  .kpi-carousel .kpi-modern-label { font-size:var(--fs-role-meta); letter-spacing: 0; }
  .kpi-carousel .kpi-modern-sub { font-size:var(--fs-role-micro); }
  .cred-estado-num { font-size: 22px; }
  .cred-filtros-grid { grid-template-columns: 1fr 1fr; }
  .cred-filtros-row3 { grid-template-columns: 1fr 1fr auto; }
}

.kpi-modern-ghost { display: none; }

/* ══ FILTROS NUEVOS: SEARCH + CF-FIELDS ══ */
.cred-search-main {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--bg-page);
  border: 0.60px solid var(--border);
  border-radius: 13px;
  padding: 0 16px;
  height: 48px;
  margin-bottom: 10px;
  transition: border-color .2s, box-shadow .2s, background .2s;
}
.cred-search-main:focus-within {
  border-color: var(--accent);
  background: var(--bg-page);
  box-shadow: 0 0 0 3px rgba(var(--accent-rgb),.1);
}
.cred-search-main svg { color: var(--muted); flex-shrink: 0; transition: color .2s; }
.cred-search-main:focus-within svg { color: var(--accent); }
.cred-search-main input {
  flex: 1; border: none; background: transparent;
  font-family: inherit; font-size: 14px; color: var(--text); outline: none;
}
.cred-search-main input::placeholder { color: var(--muted); }

.cred-filter-row {
  display: flex;
  gap: 8px;
  align-items: stretch;
}
.cf-field {
  flex: 1;
  display: flex;
  align-items: center;
  height: 42px;
  border: 0.60px solid var(--border);
  border-radius: 11px;
  background: var(--white);
  overflow: hidden;
  transition: border-color .2s, box-shadow .2s;
  min-width: 0;
}
.cf-field:focus-within {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(var(--accent-rgb),.08);
}
.cf-pre {
  display: flex;
  align-items: center;
  gap: 5px;
  padding: 0 8px 0 11px;
  flex-shrink: 0;
  border-right: 0.60px solid var(--border);
  height: 100%;
  background: var(--card);
}
.cf-pre svg { color: var(--muted); flex-shrink: 0; }
.cf-pre-lbl {
  font-size: 10px;
  font-weight: 700;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: .5px;
  white-space: nowrap;
}
.cf-field input,
.cf-field select {
  flex: 1; border: none; background: transparent;
  font-family: inherit; font-size: 13px; color: var(--text);
  outline: none; padding: 0 10px; height: 100%; min-width: 0;
}
.cf-field-ms { overflow: visible; }
.cf-field input[type="checkbox"] { flex: none; padding: 0; height: 16px; width: 16px; }
.cf-ms-wrap { flex: 1; position: relative; min-width: 0; }
.cf-ms-btn {
  width: 100%;
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 10px; height: 40px;
  border: none; background: transparent;
  font-family: inherit; font-size: 13px; color: var(--text);
  cursor: pointer; outline: none;
}
.cf-ms-btn .ms-btn-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; text-align: left; }
.cf-ms-wrap .ms-menu { z-index: 300; }
.ms-container.ms-up .ms-menu { top: auto; bottom: calc(100% + 4px); }

/* Responsive filtros */
@media (max-width: 768px) {
  .cf-row-dates { grid-template-columns: 1fr 1fr; }
  .cred-search-main { height: 46px; }
}

/* Charts de Estado Financiero (Interés por Mes / Flujo de Caja):
   En desktop las barras se estiran al ancho disponible en lugar de
   quedar agrupadas a la izquierda. Mobile mantiene scroll horizontal. */
@media (min-width: 900px) {
  #gan-scroll-wrap,
  #flujo-scroll-wrap {
    overflow-x: visible !important;
  }
  #gan-scroll-wrap > div,
  #flujo-scroll-wrap > div {
    width: 100% !important;
  }
  #gan-scroll-wrap > div > div,
  #flujo-scroll-wrap > div > div {
    flex: 1 1 0 !important;
    width: auto !important;
    min-width: 0 !important;
  }
  /* La barra coloreada (real) tenía margen fijo de 3px que era invisible al
     escalar la columna. Lo cambiamos a 10% por lado para que el "techo
     proyectado" gris siga asomando a los costados como en mobile. */
  #gan-scroll-wrap .cap-bar-anim,
  #flujo-scroll-wrap .cap-bar-anim {
    left: 10% !important;
    right: 10% !important;
  }
}

/* Barra de proyección (target) en gráficos de capital — adaptativa al tema */
.cap-proj-bar {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  border-radius: 5px 5px 0 0;
  border: none;
  background: rgba(0,0,0,.07);
}

/* ══════════════════════════════════════════════════════════════
   FASE 4 — Plan / Trial Banner + sidebar Pro badge
   ══════════════════════════════════════════════════════════════ */

.plan-banner {
  /* Posicionado relativo a #main-content (que tiene position:relative) — en
     desktop arranca después del sidebar lateral; en mobile abarca todo el ancho */
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;            /* justo abajo del mob-topbar (1001) */
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 16px;
  font-size: 13px;
  font-weight: 500;
  border-bottom: 0.6px solid rgba(255,255,255,.08);
  backdrop-filter: blur(20px) saturate(180%);
  -webkit-backdrop-filter: blur(20px) saturate(180%);
}

/* Mobile: empuja el banner debajo del mob-topbar fijo */
@media (max-width: 768px) {
  .plan-banner {
    top: var(--topbar-h, 58px);
  }
}

/* Banner del plan: el espacio se reserva via clase body.show-plan-banner.
   - Sin clase (Pro permanente o no logueado): --banner-h = 0
   - Con body.show-plan-banner (Free/Trial): --banner-h = altura real
   - body.on-dashboard cancela el espacio (banner no se ve en dashboard)
   Asi no hay layout shift: la reserva es ESTATICA desde el login. */
:root {
  --banner-h-real: 36px;  /* default razonable; JS ajusta tras 1a medicion */
  --banner-h: 0px;        /* default: sin banner */
}
body.show-plan-banner:not(.on-dashboard) {
  --banner-h: var(--banner-h-real);
}

/* .page tiene que empujar su contenido para no quedar tapada por el banner */
.page {
  padding-top: calc(28px + var(--banner-h, 0px));
}
@media (max-width: 768px) {
  .page {
    padding-top: calc(var(--topbar-h, 100px) + var(--banner-h, 0px) + 16px);
  }
}

.plan-banner-ico {
  font-size: 16px;
  flex-shrink: 0;
}

.plan-banner-msg {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.plan-banner-msg strong {
  font-weight: 700;
}

.plan-banner-cta {
  flex-shrink: 0;
  border: none;
  border-radius: 8px;
  padding: 6px 12px;
  font-size: 12.5px;
  font-weight: 700;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .2s ease;
  white-space: nowrap;
}
.plan-banner-cta:hover { transform: translateY(-1px); }
.plan-banner-cta:active { transform: translateY(0); }

/* Trial activo: tono verde/teal — sigue siendo Pro */
.plan-banner-trial {
  background: linear-gradient(90deg, rgba(var(--accent-rgb),.14), rgba(14,165,233,.14));
  color: var(--text);
}
.plan-banner-trial .plan-banner-cta {
  background: linear-gradient(135deg, var(--accent), #0ea5e9);
  color: white;
  box-shadow: 0 2px 8px rgba(var(--accent-rgb),.25);
}

/* Free: tono ámbar suave — invita a upgradear */
.plan-banner-free {
  background: linear-gradient(90deg, rgba(245,158,11,.12), rgba(239,68,68,.10));
  color: var(--text);
}
.plan-banner-free .plan-banner-cta {
  background: linear-gradient(135deg, #f59e0b, #ef4444);
  color: white;
  box-shadow: 0 2px 8px rgba(245,158,11,.25);
}

/* Mobile: banner más compacto */
@media (max-width: 640px) {
  .plan-banner {
    padding: 8px 12px;
    font-size: 12px;
    gap: 8px;
  }
  .plan-banner-msg {
    font-size: 12px;
  }
  .plan-banner-cta {
    padding: 5px 10px;
    font-size: 11.5px;
  }
}

/* ─── FASE 26: Banner sticky con contadores en vivo (Plan Gratis) ─── */
.plan-banner-tag {
  display: inline-block;
  background: rgba(245,158,11,.18);
  color: #b45309;
  font-weight: 800;
  font-size: 11px;
  letter-spacing: 0.3px;
  padding: 2px 8px;
  border-radius: 6px;
  text-transform: uppercase;
  flex-shrink: 0;
}

.plan-banner-sep {
  color: var(--muted);
  opacity: 0.55;
  margin: 0 6px;
  font-weight: 400;
  flex-shrink: 0;
}

.plan-metric {
  font-weight: 500;
  color: var(--text);
  white-space: nowrap;
}
.plan-metric strong {
  font-weight: 700;
}

.plan-metric-ok { color: var(--text); }
.plan-metric-warn {
  color: #b45309;
}
.plan-metric-limit {
  color: #b91c1c;
}

.plan-metric-tope {
  background: #b91c1c;
  color: #fff;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.4px;
  padding: 1px 5px;
  border-radius: 4px;
  margin-left: 4px;
  vertical-align: 1px;
}

/* Cuando hay al menos un tope alcanzado: CTA más prominente */
.plan-banner-attn .plan-banner-cta {
  box-shadow: 0 2px 8px rgba(239,68,68,.45), 0 0 0 2px rgba(239,68,68,.18);
  animation: planBannerPulse 2.4s ease-in-out infinite;
}
@keyframes planBannerPulse {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.04); }
}

/* Modal de upgrade Pro — chico, angosto y centrado en TODOS los anchos.
   IMPORTANTE: en mobile (<=768px) el style.css default convierte TODOS los
   .modal-box en bottom-sheet anclado al fondo con esquinas inferiores
   cuadradas. Sobreescribimos eso para que el modal de upgrade Pro siempre
   sea un modal centrado tradicional. */
.plan-upgrade-modal {
  max-width: 340px !important;
  position: relative;
}
@media (max-width: 768px) {
  .modal-box.plan-upgrade-modal {
    position: relative !important;
    bottom: auto !important;
    left: auto !important;
    right: auto !important;
    margin: auto !important;                          /* fuerza centrado vs el margin:0 del bottom-sheet */
    border-radius: 22px !important;                   /* redondea las 4 esquinas (no bottom-sheet) */
    max-width: min(320px, calc(100vw - 48px)) !important;
    max-height: 85vh !important;
  }
}

/* En modo Pro modal: ocultamos el modal-head para que el bait preview
   ocupe el top sin espacio en blanco. El botón close se reposiciona
   como flotante sobre el bait (que es oscuro), con estilo translúcido. */
.plan-upgrade-modal .modal-head {
  padding: 0;
  height: 0;
  border: none;
  position: relative;
  overflow: visible;
}
.plan-upgrade-modal .modal-title { display: none; }
.plan-upgrade-modal .modal-close {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: rgba(255,255,255,.18);
  color: #fff;
  font-size: 14px;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,.18);
  z-index: 3;
  transition: background .15s, transform .15s;
}
.plan-upgrade-modal .modal-close:hover {
  background: rgba(255,255,255,.3);
  transform: scale(1.05);
}

/* ─── Bait preview (modal "esta función es Pro") ─── */
.bait-preview {
  position: relative;
  height: 100px;
  margin: -20px -24px 14px;   /* sangrar a los bordes del card del modal (body tiene padding 20px 24px) */
  background:
    linear-gradient(180deg, transparent 45%, var(--white) 100%),
    linear-gradient(135deg, #1e293b, #475569);
  overflow: hidden;
  border-radius: 22px 22px 0 0;   /* coincide con el border-radius del .modal-box */
}
.bait-bars,
.bait-people,
.bait-rows,
.bait-notifs {
  position: absolute; inset: 12px;
  filter: blur(5px);
  -webkit-filter: blur(5px);
}

/* CHART — para analisis, reportes, mi_capital, egresos */
.bait-bars {
  display: flex; align-items: flex-end; gap: 7px;
}
.bait-bar {
  flex: 1;
  background: linear-gradient(180deg, var(--accent), #0ea5e9);
  border-radius: 4px 4px 0 0;
  opacity: 0.85;
}

/* PEOPLE — para cobradores, usuarios */
.bait-people {
  display: flex; gap: 12px;
  align-items: center; justify-content: center;
}
.bait-person {
  flex: 1; display: flex; flex-direction: column;
  align-items: center; gap: 6px;
}
.bait-avatar {
  width: 34px; height: 34px; border-radius: 50%;
  background: linear-gradient(135deg, var(--accent), #0ea5e9);
}
.bait-lines { display: flex; flex-direction: column; gap: 4px; width: 100%; align-items: center; }
.bait-lines > div {
  background: rgba(255,255,255,.45);
  border-radius: 2px;
  height: 6px;
}
.bait-lines > div:first-child { width: 75%; }
.bait-lines > div:last-child  { width: 50%; }

/* ROWS — para cierre_caja, control_acceso */
.bait-rows {
  display: flex; flex-direction: column;
  gap: 7px; justify-content: center;
}
.bait-row {
  display: flex; align-items: center; gap: 8px;
}
.bait-dot {
  width: 18px; height: 18px; border-radius: 50%;
  background: linear-gradient(135deg, var(--accent), #0ea5e9);
  flex-shrink: 0;
}
.bait-line {
  height: 7px; border-radius: 4px;
  background: rgba(255,255,255,.4);
}
.bait-pill {
  margin-left: auto;
  width: 36px; height: 13px;
  border-radius: 6px;
  background: rgba(255,255,255,.3);
  flex-shrink: 0;
}

/* NOTIFS — para notificaciones */
.bait-notifs {
  display: flex; flex-direction: column;
  gap: 6px; justify-content: center;
}
.bait-notif {
  display: flex; align-items: center; gap: 9px;
  background: rgba(255,255,255,.1);
  border-radius: 7px;
  padding: 5px 9px;
}
.bait-bell {
  width: 18px; height: 18px; border-radius: 5px;
  background: linear-gradient(135deg, var(--accent), #0ea5e9);
  flex-shrink: 0;
}
.bait-notif-text {
  flex: 1; display: flex; flex-direction: column; gap: 4px;
}
.bait-notif-text > div {
  background: rgba(255,255,255,.45);
  height: 5px; border-radius: 2px;
}
.bait-notif-text > div:first-child { width: 80%; }
.bait-notif-text > div:last-child  { width: 55%; }

/* Mobile: contadores compactos para que entren en una línea */
@media (max-width: 640px) {
  .plan-banner-tag {
    font-size: 10px;
    padding: 2px 6px;
  }
  .plan-banner-sep { margin: 0 4px; }
  .plan-metric { font-size: 11.5px; }
  .plan-metric-tope { font-size: 9px; padding: 1px 4px; }
}
/* Mobile angosto: abreviar "Clientes" → "Cl." y "Créditos" → "Cr." */
@media (max-width: 380px) {
  .plan-metric { font-size: 11px; }
  .plan-banner-tag { display: none; }       /* libera ancho */
  .plan-banner-sep:first-of-type { display: none; }
}

/* ─── Sidebar: items Pro bloqueados (badge "Pro") ─── */
.s-pro-badge {
  margin-left: auto;
  font-size: 9.5px;
  font-weight: 800;
  letter-spacing: 0.5px;
  padding: 2px 7px;
  border-radius: 6px;
  background: linear-gradient(135deg, var(--accent), #0ea5e9);
  color: white;
  text-transform: uppercase;
  box-shadow: 0 1px 4px rgba(var(--accent-rgb),.25);
  flex-shrink: 0;
}

.s-item-pro-locked .s-ico {
  opacity: 0.55;
}
.s-item-pro-locked span {
  opacity: 0.7;
}
.s-item-pro-locked:hover {
  background: var(--accent-lt);
}

/* ─── Chip de uso de límite (Free) — visible en headers de páginas con cuota ─── */
.plan-usage-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 5px 10px 5px 8px;
  border-radius: 99px;
  background: var(--surface2);
  border: 0.6px solid var(--border);
  font-size: 11.5px;
  color: var(--muted);
  cursor: pointer;
  transition: all .15s ease;
  vertical-align: middle;
  margin-left: 8px;
}
.plan-usage-chip:hover {
  border-color: var(--accent);
  background: var(--accent-lt);
  color: var(--accent);
}
.plan-usage-chip.plan-usage-full {
  background: rgba(245,158,11,.10);
  border-color: rgba(245,158,11,.35);
  color: #b45309;
}
.plan-usage-bar {
  display: inline-block;
  width: 32px;
  height: 4px;
  border-radius: 99px;
  background: var(--border);
  overflow: hidden;
  position: relative;
}
.plan-usage-fill {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, var(--accent), #0ea5e9);
  border-radius: 99px;
  transition: width .25s ease;
}
.plan-usage-full .plan-usage-fill {
  background: linear-gradient(90deg, #f59e0b, #ef4444);
}
.plan-usage-txt strong {
  font-weight: 800;
  color: var(--text);
}
.plan-usage-full .plan-usage-txt strong {
  color: #b45309;
}

/* Botón deshabilitado por límite Free */
.plan-locked-btn {
  opacity: 0.55 !important;
  cursor: not-allowed !important;
  pointer-events: none;
}

/* ══════════════════════════════════════════════════════════════
   FASE 12 — Landing publico (estructura Claude Chat adaptada,
   datos reales del sistema, marca VERDE conservada)
   ══════════════════════════════════════════════════════════════ */

/* Reset del .page base aplicable solo al landing */
#page-landing.page {
  padding: 0 !important;
  background: #f0eee6;           /* ivory-medium — fondo REAL anthropic.com (verificado en DevTools) */
  color: #141413;                /* slate-dark · texto principal */
  overflow-y: auto;
  overflow-x: hidden;
  font-family: 'Bricolage Grotesque', -apple-system, BlinkMacSystemFont, sans-serif;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
@media (max-width: 768px) {
  #page-landing.page { padding: 0 !important; }
}

/* Variables internas del landing — Etapa 8: paleta Anthropic
   (ivory · slate · clay + acentos cactus/manilla/heather/coral/sky/olive/fig) */
#page-landing {
  --lp-bg: #f0eee6;              /* ivory-medium — fondo REAL anthropic.com */
  --lp-bg-2: #f0eee6;            /* mismo bg para cards (regla "fondo uniforme") */
  --lp-bg-3: #faf9f5;            /* ivory-light — sub-paneles internos elevados */
  --lp-ink: #141413;             /* slate-dark — texto principal */
  --lp-ink-dim: #5e5d59;         /* slate-light — texto secundario */
  --lp-ink-dimmer: #87867f;      /* cloud-dark — texto desactivado */
  --lp-accent: #d97757;          /* clay — el acento signature */
  --lp-accent-bright: #c6613f;   /* accent rojizo — hover de CTAs */
  --lp-accent-deep: #a04d2e;     /* más oscuro para active states */
  --lp-yellow: #d4a27f;          /* kraft (reemplaza al amarillo brillante) */
  --lp-border: rgba(20,20,19,0.08);
  --lp-border-strong: rgba(20,20,19,0.15);
  /* Paleta de acentos para diferenciar cards individuales */
  --lp-manilla: #ebdbbc;
  --lp-cactus:  #bcd1ca;
  --lp-heather: #cbcadb;
  --lp-coral:   #ebcece;
  --lp-sky:     #6a9bcc;
  --lp-olive:   #788c5d;
  --lp-fig:     #c46686;
  --lp-oat:     #e3dacc;
}

/* ============ BRAND ============ */
#page-landing .lp-brand {
  display: inline-flex;
  align-items: baseline;
  font-family: 'Bricolage Grotesque', sans-serif;
  font-weight: 700;
  letter-spacing: -0.035em;
}
/* Header (nav oscuro): "Presta" en crema para que se note sobre el fondo casi negro
   (antes heredaba el texto oscuro #141413 y quedaba invisible). El footer va sobre
   fondo claro, así que no se toca. */
#page-landing .lp-nav .lp-brand {
  color: #faf9f5;
}
#page-landing .lp-plus {
  display: inline-block;
  color: var(--lp-yellow);
  font-weight: 800;
  font-size: 1em;
  line-height: 1;
  margin-left: 0.05em;
  transform: translateY(-0.15em);
}
#page-landing .lp-logo-mark {
  width: 44px; height: 44px;
  background: var(--lp-accent);
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-family: 'Bricolage Grotesque', sans-serif;
  font-weight: 800;
  font-size: 1.15rem;
  letter-spacing: -0.04em;
  flex-shrink: 0;
}
#page-landing .lp-logo-mark .lp-plus {
  color: var(--lp-yellow);
  font-size: 1em;
  margin-left: 0.02em;
}

/* ============ NAV ============ */
#page-landing .lp-nav {
  position: sticky;
  top: 0;
  z-index: 50;
  padding: 1.1rem 2rem;
  padding-top: calc(1.1rem + env(safe-area-inset-top, 0px));
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: rgba(10,10,10,0.85);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border-bottom: 1px solid var(--lp-border);
}
#page-landing .lp-logo {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  font-size: 1.25rem;
}
#page-landing .lp-nav-links {
  display: flex;
  gap: 2rem;
  align-items: center;
  font-size: 0.875rem;
  color: var(--lp-ink-dim);
}
#page-landing .lp-nav-link, #page-landing .lp-nav-cta {
  color: inherit;
  text-decoration: none;
  transition: color 0.2s, transform 0.2s, background 0.2s;
}
#page-landing .lp-nav-link:hover { color: var(--lp-ink); }
#page-landing .lp-nav-cta {
  background: var(--lp-ink);            /* slate-dark */
  color: var(--lp-bg) !important;
  padding: 0.55rem 1.1rem;
  border-radius: 100px;
  font-weight: 600;
}
#page-landing .lp-nav-cta:hover {
  background: var(--lp-accent);          /* clay al hover */
  transform: translateY(-1px);
}
@media (max-width: 700px) {
  #page-landing .lp-nav-link { display: none; }
  #page-landing .lp-nav { padding: 0.9rem 1.25rem; padding-top: calc(0.9rem + env(safe-area-inset-top, 0px)); }
}

/* ============ HERO ============ */
#page-landing .lp-hero {
  min-height: 90vh;
  padding: 6rem 2rem 4rem;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
#page-landing .lp-hero-content {
  position: relative;
  max-width: 1200px;
  margin: 0 auto;
  width: 100%;
}
#page-landing .lp-hero-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.4rem 0.9rem;
  border: 1px solid var(--lp-border-strong);
  border-radius: 100px;
  font-size: 0.78rem;
  color: var(--lp-ink-dim);
  margin-bottom: 2rem;
  font-family: 'JetBrains Mono', monospace;
  animation: lpFadeUp 0.8s ease-out;
}
#page-landing .lp-dot {
  width: 6px; height: 6px;
  background: var(--lp-accent);
  border-radius: 50%;
  box-shadow: 0 0 8px var(--lp-accent);
  animation: lpPulse 2s ease-in-out infinite;
}
@keyframes lpPulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
@keyframes lpFadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

#page-landing .lp-hero-title {
  font-size: clamp(2.5rem, 6.5vw, 5.5rem);
  line-height: 1;
  letter-spacing: -0.04em;
  font-weight: 600;
  margin-bottom: 1.5rem;
  animation: lpFadeUp 0.9s ease-out 0.1s backwards;
}
#page-landing .lp-accent-italic {
  font-family: 'Instrument Serif', serif;
  font-style: italic;
  font-weight: 400;
  color: var(--lp-accent);
}
#page-landing .lp-hero-sub {
  font-size: clamp(1rem, 1.5vw, 1.15rem);
  color: var(--lp-ink-dim);
  max-width: 600px;
  margin-bottom: 2.5rem;
  animation: lpFadeUp 0.9s ease-out 0.2s backwards;
}
#page-landing .lp-hero-actions {
  display: flex; gap: 1rem; flex-wrap: wrap;
  animation: lpFadeUp 0.9s ease-out 0.3s backwards;
}
#page-landing .lp-btn {
  padding: 0.95rem 1.6rem;
  border-radius: 100px;
  font-size: 0.95rem;
  font-weight: 600;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  transition: all 0.25s ease;
  border: 1px solid transparent;
  cursor: pointer;
  font-family: inherit;
}
#page-landing .lp-btn-primary {
  background: var(--lp-ink);             /* slate-dark — botón principal en negro suave */
  color: var(--lp-bg);
}
#page-landing .lp-btn-primary:hover {
  background: var(--lp-accent);           /* clay al hover — pop cálido */
  transform: translateY(-2px);
  box-shadow: 0 10px 30px rgba(217,119,87,0.30);
}
#page-landing .lp-btn-ghost {
  background: transparent;
  color: var(--lp-ink);
  border-color: var(--lp-ink);          /* outline slate-dark */
}
#page-landing .lp-btn-ghost:hover {
  background: var(--lp-bg-3);
  border-color: var(--lp-accent);
}

#page-landing .lp-stats {
  margin-top: 4rem;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--lp-border);
  border-bottom: 1px solid var(--lp-border);
  animation: lpFadeUp 0.9s ease-out 0.5s backwards;
}
#page-landing .lp-stat { padding: 1.5rem 1rem; border-right: 1px solid var(--lp-border); }
#page-landing .lp-stat:last-child { border-right: none; }
#page-landing .lp-stat-num {
  font-size: clamp(1.6rem, 3vw, 2.5rem);
  font-weight: 600;
  letter-spacing: -0.03em;
  color: var(--lp-accent);
}
#page-landing .lp-stat-label {
  font-size: 0.72rem;
  color: var(--lp-ink-dim);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-family: 'JetBrains Mono', monospace;
  margin-top: 0.3rem;
}
@media (max-width: 700px) {
  #page-landing .lp-stats { grid-template-columns: repeat(2, 1fr); }
  #page-landing .lp-stat:nth-child(2) { border-right: none; }
  #page-landing .lp-stat:nth-child(1), #page-landing .lp-stat:nth-child(2) { border-bottom: 1px solid var(--lp-border); }
}

/* ============ SECTIONS ============ */
#page-landing .lp-section {
  padding: 6rem 2rem;
  position: relative;
}
#page-landing .lp-container { max-width: 1200px; margin: 0 auto; }

#page-landing .lp-section-tag {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--lp-accent);
  margin-bottom: 1rem;
  display: flex; align-items: center; gap: 0.7rem;
}
#page-landing .lp-section-tag::before {
  content:''; width: 24px; height: 1px; background: var(--lp-accent);
}
#page-landing .lp-section-tag.lp-center { justify-content: center; }

#page-landing .lp-section-title {
  font-size: clamp(1.8rem, 4vw, 3.4rem);
  line-height: 1;
  letter-spacing: -0.03em;
  font-weight: 600;
  margin-bottom: 1.5rem;
  max-width: 900px;
}
#page-landing .lp-section-title.lp-center-title {
  text-align: center;
  margin-left: auto; margin-right: auto;
}
#page-landing .lp-section-intro {
  color: var(--lp-ink-dim);
  font-size: 1.05rem;
  max-width: 620px;
  margin-bottom: 4rem;
}
#page-landing .lp-section-intro.lp-center-intro {
  margin-left: auto; margin-right: auto;
  text-align: center;
}

/* ============ BENTO ============ */
#page-landing .lp-bento {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-auto-rows: minmax(220px, auto);
  gap: 1rem;
}
#page-landing .lp-card {
  background: var(--lp-bg-2);
  border: 1px solid var(--lp-border);
  border-radius: 20px;
  padding: 2rem;
  position: relative;
  transition: all 0.3s ease;
}
#page-landing .lp-card:hover {
  border-color: var(--lp-border-strong);
  transform: translateY(-3px);
}
#page-landing .lp-card-big { grid-column: span 4; }
#page-landing .lp-card-mid { grid-column: span 3; }
#page-landing .lp-card-sm { grid-column: span 2; }
@media (max-width: 900px) {
  #page-landing .lp-bento { grid-template-columns: repeat(2, 1fr); }
  #page-landing .lp-card-big,
  #page-landing .lp-card-mid,
  #page-landing .lp-card-sm { grid-column: span 2; }
}

#page-landing .lp-card-icon {
  width: 44px; height: 44px;
  background: var(--lp-accent);    /* clay por default — sobrescrito por color/card en Etapa 8 */
  border: none;
  border-radius: 12px;
  display: grid; place-items: center;
  color: #fff;
  margin-bottom: 1.25rem;
}
#page-landing .lp-card h3 {
  font-size: 1.35rem;
  letter-spacing: -0.02em;
  margin-bottom: 0.6rem;
  font-weight: 600;
}
#page-landing .lp-card p {
  color: var(--lp-ink-dim);
  font-size: 0.95rem;
  line-height: 1.55;
}

#page-landing .lp-kpi-visual {
  margin-top: 1.5rem;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.75rem;
}
#page-landing .lp-kpi-mini {
  background: var(--lp-bg-3);          /* ivory-medium sutil */
  border: 1px solid var(--lp-border);
  border-radius: 10px;
  padding: 0.9rem;
}
#page-landing .lp-kpi-mini-label {
  font-size: 0.65rem; color: var(--lp-ink-dim);
  text-transform: uppercase; letter-spacing: 0.08em;
  font-family: 'JetBrains Mono', monospace;
}
#page-landing .lp-kpi-mini-val {
  font-size: 1.4rem; font-weight: 600;
  margin-top: 0.3rem; letter-spacing: -0.02em;
}
#page-landing .lp-kpi-mini-val.lp-kpi-up { color: var(--lp-olive); }
#page-landing .lp-kpi-mini-val.lp-kpi-accent { color: var(--lp-accent); }
#page-landing .lp-kpi-mini-trend {
  font-size: 0.7rem; color: var(--lp-ink-dim);
  margin-top: 0.2rem; font-family: 'JetBrains Mono', monospace;
}

#page-landing .lp-sim-visual {
  margin-top: 1.25rem;
  background: var(--lp-bg-3);
  border: 1px solid var(--lp-border);
  border-radius: 12px;
  padding: 1rem;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.78rem;
}
#page-landing .lp-sim-row {
  display: flex; justify-content: space-between;
  padding: 0.4rem 0;
  border-bottom: 1px solid var(--lp-border);
  color: var(--lp-ink-dim);
}
#page-landing .lp-sim-row:last-child {
  border-bottom: none;
  color: var(--lp-accent);
  font-weight: 700;
}
#page-landing .lp-sim-row span:last-child { color: var(--lp-ink); }

#page-landing .lp-pwa-card {
  display: flex;
  padding: 0;
  overflow: hidden;
}
#page-landing .lp-pwa-text { padding: 2rem; flex: 1; position: relative; }
#page-landing .lp-pwa-phone {
  flex: 0 0 110px;
  background: var(--lp-bg-3);
  border-left: 1px solid var(--lp-border);
  display: grid; place-items: center;
}
#page-landing .lp-phone-frame {
  width: 80px; height: 160px;
  background: var(--lp-bg);
  border: 2px solid var(--lp-border-strong);
  border-radius: 14px;
  position: relative; overflow: hidden;
}
#page-landing .lp-phone-frame::before {
  content:''; position: absolute;
  top: 6px; left: 50%; transform: translateX(-50%);
  width: 30px; height: 4px;
  background: var(--lp-bg-2); border-radius: 2px;
}
#page-landing .lp-phone-screen {
  margin-top: 14px; padding: 6px;
  display: flex; flex-direction: column; gap: 4px;
}
#page-landing .lp-phone-bar { height: 6px; background: var(--lp-bg-3); border-radius: 2px; }
#page-landing .lp-phone-bar.lp-phone-accent { background: var(--lp-accent); width: 60%; }
#page-landing .lp-phone-bar.lp-phone-short { width: 40%; }
#page-landing .lp-phone-bar.lp-phone-med { width: 75%; }
@media (max-width: 600px) {
  #page-landing .lp-pwa-card { flex-direction: column-reverse; }
  #page-landing .lp-pwa-phone { flex: 0 0 140px; border-left: none; border-top: 1px solid var(--lp-border); }
}

/* ============ PRICING ============ */
#page-landing .lp-pricing-section { background: var(--lp-bg-2); }
#page-landing .lp-pricing-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.5rem;
  max-width: 980px;
  margin: 0 auto;
}
@media (max-width: 800px) {
  #page-landing .lp-pricing-grid { grid-template-columns: 1fr; }
}
#page-landing .lp-plan {
  background: var(--lp-oat);         /* beige arena por default — el plan Pro lo sobreescribe abajo */
  border: 1px solid transparent;
  border-radius: 24px;
  padding: 2.5rem;
  position: relative;
  transition: all 0.3s ease;
}
#page-landing .lp-plan-pro {
  background: var(--lp-ink);          /* slate-dark — highlight card */
  border-color: var(--lp-accent);     /* clay */
  color: var(--lp-bg);
}
#page-landing .lp-plan-pro .lp-plan-headline,
#page-landing .lp-plan-pro .lp-plan-features li { color: var(--lp-oat); }
#page-landing .lp-plan-pro .lp-plan-name { color: var(--lp-yellow); }
#page-landing .lp-plan-pro .lp-plan-currency,
#page-landing .lp-plan-pro .lp-plan-period { color: var(--lp-yellow); }
#page-landing .lp-plan-pro::before {
  content:'';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: var(--lp-accent);
  border-radius: 24px 24px 0 0;
}
#page-landing .lp-plan-badge {
  position: absolute;
  top: -14px; right: 2.5rem;
  background: var(--lp-accent);
  color: #fff;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.7rem;
  font-weight: 700;
  padding: 0.35rem 0.8rem;
  border-radius: 100px;
  text-transform: uppercase;
  letter-spacing: 0.1em;
}
#page-landing .lp-plan-name {
  font-size: 0.85rem;
  color: var(--lp-ink-dim);
  font-family: 'JetBrains Mono', monospace;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  margin-bottom: 0.5rem;
}
#page-landing .lp-plan-headline {
  font-size: 1.6rem;
  font-weight: 600;
  letter-spacing: -0.02em;
  margin-bottom: 1.5rem;
}
#page-landing .lp-plan-price {
  display: flex;
  align-items: baseline;
  gap: 0.4rem;
  margin-bottom: 2rem;
  padding-bottom: 2rem;
  border-bottom: 1px solid var(--lp-border);
}
#page-landing .lp-plan-currency {
  font-size: 1.3rem;
  color: var(--lp-ink-dim);
  font-weight: 500;
}
#page-landing .lp-plan-amount {
  font-size: 4rem;
  font-weight: 700;
  letter-spacing: -0.04em;
  line-height: 1;
}
#page-landing .lp-plan-amount.lp-amount-free { color: var(--lp-ink); }
#page-landing .lp-plan-amount.lp-amount-pro {
  color: var(--lp-accent);
  font-size: 2.5rem;
}
#page-landing .lp-plan-period {
  font-size: 0.95rem;
  color: var(--lp-ink-dim);
}
#page-landing .lp-plan-features {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
  margin-bottom: 2rem;
  padding: 0;
}
#page-landing .lp-plan-features li {
  display: flex;
  align-items: flex-start;
  gap: 0.7rem;
  font-size: 0.95rem;
  color: var(--lp-ink);
  line-height: 1.5;
}
#page-landing .lp-plan-features li.lp-muted { color: var(--lp-ink-dimmer); }
#page-landing .lp-plan-features li::before {
  content:'';
  width: 18px; height: 18px;
  flex-shrink: 0;
  margin-top: 2px;
  background: var(--lp-accent);
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3'%3E%3Cpath d='M5 12l5 5L20 7'/%3E%3C/svg%3E") center/contain no-repeat;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3'%3E%3Cpath d='M5 12l5 5L20 7'/%3E%3C/svg%3E") center/contain no-repeat;
}
#page-landing .lp-plan-features li.lp-muted::before {
  background: var(--lp-ink-dimmer);
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3'%3E%3Cpath d='M5 5l14 14M19 5L5 19'/%3E%3C/svg%3E") center/contain no-repeat;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3'%3E%3Cpath d='M5 5l14 14M19 5L5 19'/%3E%3C/svg%3E") center/contain no-repeat;
}
#page-landing .lp-plan-cta {
  display: block;
  text-align: center;
  padding: 1rem;
  border-radius: 100px;
  font-weight: 600;
  text-decoration: none;
  transition: all 0.2s;
  font-size: 0.95rem;
}
#page-landing .lp-plan-cta-free {
  background: transparent;
  color: var(--lp-ink);
  border: 1px solid var(--lp-ink);     /* outline slate-dark */
}
#page-landing .lp-plan-cta-free:hover { background: var(--lp-bg-3); }
#page-landing .lp-plan-cta-pro {
  background: var(--lp-accent);
  color: #fff;
}
#page-landing .lp-plan-cta-pro:hover {
  background: var(--lp-accent-bright);
  transform: translateY(-1px);
}

/* ============ WORKFLOW ============ */
#page-landing .lp-workflow {
  background: var(--lp-bg-2);
  border-radius: 24px;
  padding: 4rem 3rem;
  border: 1px solid var(--lp-border);
}
#page-landing .lp-workflow-steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 2rem;
  margin-top: 1rem;
  position: relative;
}
#page-landing .lp-workflow-steps::before {
  content:''; position: absolute;
  top: 24px; left: 12%; right: 12%;
  height: 1px;
  background: linear-gradient(90deg, var(--lp-accent), transparent 30%, transparent 70%, var(--lp-accent));
  z-index: 0;
}
@media (max-width: 800px) {
  #page-landing .lp-workflow-steps { grid-template-columns: 1fr; gap: 2rem; }
  #page-landing .lp-workflow-steps::before { display: none; }
  #page-landing .lp-workflow { padding: 3rem 1.5rem; }
}
#page-landing .lp-step { position: relative; z-index: 1; }
#page-landing .lp-step-num {
  width: 48px; height: 48px;
  background: var(--lp-bg);
  border: 1px solid var(--lp-accent);
  border-radius: 50%;
  display: grid; place-items: center;
  font-family: 'Instrument Serif', serif;
  font-size: 1.4rem;
  color: var(--lp-accent);
  margin-bottom: 1.25rem;
}
#page-landing .lp-step h4 {
  font-size: 1.05rem;
  margin-bottom: 0.4rem;
  font-weight: 600;
}
#page-landing .lp-step p {
  font-size: 0.9rem;
  color: var(--lp-ink-dim);
  line-height: 1.5;
}

/* ============ FAQ ============ */
#page-landing .lp-faq-list {
  max-width: 760px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
#page-landing .lp-faq-item {
  background: var(--lp-oat);
  border: 1px solid transparent;
  border-radius: 14px;
  overflow: hidden;
  transition: border-color 0.2s;
}
#page-landing .lp-faq-item[open] { border-color: var(--lp-border-strong); }
#page-landing .lp-faq-item summary {
  padding: 1.25rem 1.5rem;
  cursor: pointer;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-weight: 600;
  font-size: 1rem;
}
#page-landing .lp-faq-item summary::-webkit-details-marker { display: none; }
#page-landing .lp-faq-item summary::after {
  content: '+';
  color: var(--lp-accent);
  font-size: 1.5rem;
  font-weight: 300;
  transition: transform 0.2s;
}
#page-landing .lp-faq-item[open] summary::after { transform: rotate(45deg); }
#page-landing .lp-faq-body {
  padding: 0 1.5rem 1.25rem;
  color: var(--lp-ink-dim);
  font-size: 0.95rem;
  line-height: 1.6;
}

/* ============ CTA FINAL ============ */
#page-landing .lp-final-cta {
  text-align: center;
  padding: 7rem 2rem;
}
#page-landing .lp-final-cta h2 {
  font-size: clamp(2.2rem, 5.5vw, 4.5rem);
  letter-spacing: -0.04em;
  line-height: 1;
  margin-bottom: 1.5rem;
  font-weight: 600;
}
#page-landing .lp-final-cta p {
  color: var(--lp-ink-dim);
  font-size: 1.1rem;
  max-width: 540px;
  margin: 0 auto 2.5rem;
}
#page-landing .lp-final-cta .lp-btn { font-size: 1.05rem; padding: 1.1rem 2rem; }

/* ============ FOOTER ============ */
#page-landing .lp-foot {
  border-top: 1px solid var(--lp-border);
  padding: 3rem 2rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: var(--lp-ink-dim);
  font-size: 0.85rem;
  flex-wrap: wrap;
  gap: 1rem;
}
#page-landing .lp-foot .lp-brand { font-weight: 700; }
#page-landing .lp-made-in {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.75rem;
}
#page-landing .lp-heart { color: var(--lp-accent); }

/* ============ MOBILE ============ */
@media (max-width: 600px) {
  #page-landing .lp-hero { padding: 4rem 1.25rem 3rem; }
  #page-landing .lp-section { padding: 4rem 1.25rem; }
  #page-landing .lp-card { padding: 1.5rem; }
  #page-landing .lp-plan { padding: 2rem 1.5rem; }
  #page-landing .lp-final-cta { padding: 5rem 1.25rem; }
  #page-landing .lp-foot { padding: 2rem 1.25rem; }
  #page-landing .lp-kpi-visual { grid-template-columns: 1fr; }
  #page-landing .lp-stats { margin-top: 3rem; }
}

/* ============ SCROLL REVEAL (Intersection Observer) ============ */
#page-landing .lp-reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.65s ease, transform 0.65s ease;
}
#page-landing .lp-reveal.lp-visible {
  opacity: 1;
  transform: translateY(0);
}
#page-landing .lp-reveal-d1 { transition-delay: 0.08s; }
#page-landing .lp-reveal-d2 { transition-delay: 0.16s; }
#page-landing .lp-reveal-d3 { transition-delay: 0.24s; }
#page-landing .lp-reveal-d4 { transition-delay: 0.32s; }
#page-landing .lp-reveal-d5 { transition-delay: 0.40s; }
#page-landing .lp-reveal-d6 { transition-delay: 0.48s; }

/* Respeta prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  #page-landing .lp-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* ============ TESTIMONIOS ============ */
#page-landing .lp-testimonios-section { background: var(--lp-bg-2); }

#page-landing .lp-testimonios {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
  margin-top: 1rem;
}
@media (max-width: 900px) {
  #page-landing .lp-testimonios { grid-template-columns: 1fr; }
}

#page-landing .lp-testimonio {
  background: var(--lp-oat);
  border: 1px solid transparent;
  border-radius: 20px;
  padding: 2rem;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  transition: border-color 0.3s ease, transform 0.3s ease;
}
#page-landing .lp-testimonio:hover {
  border-color: var(--lp-border-strong);
  transform: translateY(-4px);
}
#page-landing .lp-testimonio.lp-testimonio-highlight {
  border-color: var(--lp-accent);
  background: linear-gradient(160deg, rgba(217,119,87,0.06) 0%, var(--lp-bg) 60%);
}

#page-landing .lp-testimonio-before {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--lp-ink-dim);
  font-family: 'JetBrains Mono', monospace;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  background: var(--lp-bg-3);
  border: 1px solid var(--lp-border);
  padding: 0.3rem 0.75rem;
  border-radius: 100px;
  width: fit-content;
}
#page-landing .lp-testimonio blockquote {
  font-size: 0.97rem;
  line-height: 1.65;
  color: var(--lp-ink-dim);
  font-style: italic;
  flex: 1;
  margin: 0;
}
#page-landing .lp-testimonio blockquote::before {
  content: '"';
  font-size: 2.5rem;
  color: var(--lp-accent);
  font-family: 'Instrument Serif', Georgia, serif;
  line-height: 0;
  vertical-align: -0.6rem;
  margin-right: 0.2rem;
  opacity: 0.6;
}
#page-landing .lp-testimonio-autor {
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--lp-ink);
  font-family: 'JetBrains Mono', monospace;
  letter-spacing: 0.05em;
  border-top: 1px solid var(--lp-border);
  padding-top: 0.8rem;
}

/* ════════════════════════════════════════════════════════════════
   ETAPA 8 — PALETA ANTHROPIC (overrides finales · tintes por card)
   Regla observada en anthropic.com: el fondo es UNIFORME para toda
   la página. La diferenciación visual vive DENTRO de cards
   individuales (stats con tintes, icon-pills por feature, etc.).
   ════════════════════════════════════════════════════════════════ */

/* Logo mark: cuadrito con clay */
#page-landing .lp-logo-mark { background: var(--lp-accent); }

/* "+" del logo: usar kraft (cálido) en vez del amarillo brillante */
#page-landing .lp-plus { color: var(--lp-yellow); }

/* STATS — cada uno con su propio tinte individual (eran bg uniforme) */
#page-landing .lp-stats {
  border-top: none;
  border-bottom: none;
  gap: 10px;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
}
#page-landing .lp-stat {
  border: none !important;
  border-radius: 14px;
  padding: 1.25rem 0.75rem;
  text-align: center;
}
#page-landing .lp-stat:nth-child(1) { background: var(--lp-manilla); }
#page-landing .lp-stat:nth-child(2) { background: var(--lp-cactus); }
#page-landing .lp-stat:nth-child(3) { background: var(--lp-heather); }
#page-landing .lp-stat:nth-child(4) { background: var(--lp-coral); }
#page-landing .lp-stat-num {
  color: var(--lp-ink) !important;     /* slate-dark sobre cada tinte */
  font-family: 'Instrument Serif', Georgia, serif;
}
#page-landing .lp-stat-label {
  color: var(--lp-ink-dim);
}

/* BENTO CARDS — fondo oat (beige cálido) + icon-pill por orden */
#page-landing .lp-card {
  background: var(--lp-oat);           /* #e3dacc — beige arena Anthropic */
  border: 1px solid transparent;
}
#page-landing .lp-card:hover {
  border-color: var(--lp-accent);
  box-shadow: 0 8px 24px rgba(20,20,19,0.08);
  transform: translateY(-3px);
}
/* Cada feature card con su icon-pill de color distinto */
#page-landing .lp-card:nth-of-type(1) .lp-card-icon { background: var(--lp-accent); } /* clay — Dashboard */
#page-landing .lp-card:nth-of-type(2) .lp-card-icon { background: var(--lp-sky); }    /* sky — Cronograma */
#page-landing .lp-card:nth-of-type(3) .lp-card-icon { background: var(--lp-olive); }  /* olive — Agenda */
#page-landing .lp-card:nth-of-type(4) .lp-card-icon { background: var(--lp-fig); }    /* fig — PWA */
#page-landing .lp-card:nth-of-type(5) .lp-card-icon { background: var(--lp-accent-bright); } /* accent — extra */
#page-landing .lp-card:nth-of-type(6) .lp-card-icon { background: var(--lp-yellow); } /* kraft — extra */
#page-landing .lp-card-icon { color: #fff; }
#page-landing .lp-card-icon svg { stroke: #fff; }

/* KPIs dentro de la card big — cada mini con un tinte distinto */
#page-landing .lp-kpi-mini:nth-child(1) { background: var(--lp-manilla); border-color: rgba(20,20,19,0.06); }
#page-landing .lp-kpi-mini:nth-child(2) { background: var(--lp-cactus);  border-color: rgba(20,20,19,0.06); }
#page-landing .lp-kpi-mini:nth-child(3) { background: var(--lp-coral);   border-color: rgba(20,20,19,0.06); }
#page-landing .lp-kpi-mini-val.lp-kpi-accent { color: var(--lp-accent-bright); }

/* PWA phone mock */
#page-landing .lp-pwa-phone { background: var(--lp-bg-3); }
#page-landing .lp-phone-bar.lp-phone-accent { background: var(--lp-accent); }

/* WORKFLOW — fondo oat como las cards */
#page-landing .lp-workflow {
  background: var(--lp-oat);
  border: 1px solid transparent;
}

/* Plan PRO badge: usa clay */
#page-landing .lp-plan-badge { background: var(--lp-accent); }
#page-landing .lp-plan-amount.lp-amount-pro { color: var(--lp-accent); }

/* Steps del workflow: número con clay */
#page-landing .lp-step-num {
  border-color: var(--lp-accent);
  color: var(--lp-accent);
  background: var(--lp-bg);
}
#page-landing .lp-workflow-steps::before {
  background: linear-gradient(90deg, var(--lp-accent), transparent 30%, transparent 70%, var(--lp-accent));
}

/* FAQ items + finales */
#page-landing .lp-faq-item summary::after { color: var(--lp-accent); }
#page-landing .lp-heart { color: var(--lp-accent); }

/* Pricing section: ya usa bg-2 que ahora es ivory-light. Pero quitamos
   el bg-2 explícito por si acaso (consistencia) */
#page-landing .lp-pricing-section,
#page-landing .lp-testimonios-section {
  background: var(--lp-bg);             /* mismo bg que el resto */
}

/* Stats responsive: 2 columnas en mobile */
@media (max-width: 700px) {
  #page-landing .lp-stats { grid-template-columns: repeat(2, 1fr); gap: 8px; }
}



/* ═══════════════════════════════════════════════════════════════
   DASHBOARD: hide topbar (solo en Centro de Control)
   ─────────────────────────────────────────────────────────────
   IMPORTANTE: NO usar `display:none`. El JS (auth.js, nav.js) mide
   `getBoundingClientRect().height` del topbar y guarda ese valor
   en --topbar-h a nivel <html>. Si el topbar está display:none,
   la medición devuelve 0 → --topbar-h:0 se propaga a TODAS las
   páginas y el contenido se sube hasta la barra de estado.

   Usamos `visibility:hidden`: el elemento sigue ocupando su altura
   (la medición sigue siendo correcta), pero no se ve y no recibe
   clicks. Así dashboard queda sin topbar visible y el resto de
   pantallas conservan su padding-top correcto.
   ═══════════════════════════════════════════════════════════════ */
/* Dashboard: el topbar ahora se muestra como en las demás pantallas
   (antes estaba visibility:hidden con un saludo propio que lo reemplazaba). */
body.on-dashboard .mob-topbar {
  visibility: visible !important;
  pointer-events: auto !important;
}

/* Banner de plan: oculto en Centro de Control, visible en todas las demás */
body.on-dashboard .plan-banner {
  display: none !important;
}

/* ══════════════════════════════════════════════════════════════════
   AGENDA DE COBROS — nuevo diseño (Etapa 2)
   KPIs · Período · Estado · Cobrador · lista por cliente
   ══════════════════════════════════════════════════════════════════ */
.ag-flbl { font-size:var(--fs-micro); font-weight: 800; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; margin: 2px 2px 7px; }

/* ═══════════════ KPI CAROUSEL — sistema UNIFICADO (única fuente) ═══════════
   Una sola familia de clases para TODOS los carruseles de KPI del sistema
   (Agenda, Clientes, Cobradores, Créditos, Caja, Egresos, Usuarios,
   Reportes-cuotas, etc.):

     .kpi-carousel-wrap     → contenedor externo (margin-bottom)
     .kpi-carousel          → flex con scroll-snap horizontal, full-bleed
     .kpi-carousel-page     → agrupa 2 KPIs como una "página" (grid 1fr 1fr, gap 9px)
     .kpi-carousel-dots     → barra de indicadores
     .kpi-carousel-dot      → cada punto (.active = página actual)

   Las clases viejas .ag-kpi-*/.cred-kpi-* se ELIMINARON; todos los HTML
   migrados al nombre nuevo.
   ════════════════════════════════════════════════════════════════════════════ */
/* Espacio del WRAP completo (KPIs + pill) al siguiente bloque (filtros, etc.) */
.kpi-carousel-wrap { margin-bottom: 12px !important; }

.kpi-carousel {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  scroll-behavior: smooth;
  scrollbar-width: none;
  /* Padding para que la sombra de las cards no se recorte (top + bottom). */
  padding: 14px 12px 14px;
  /* Margen negativo lateral = full-bleed; sin negativo vertical (los dots
     respiran por sí solos con su margin-top: 6px). */
  margin: -12px -12px 0;
  gap: 24px;
  scroll-padding-left: 12px;
  scroll-padding-right: 12px;
}
.kpi-carousel::-webkit-scrollbar { display: none; }

.kpi-carousel-page {
  flex: 0 0 100%;
  width: 100%;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 9px;
  scroll-snap-align: center;
  scroll-snap-stop: always;
}

/* Card individual: fondo soft + icon-label inline arriba + número grande */
.ag-kc {
  border-radius: 14px;
  padding: 11px;
  position: relative;
  overflow: hidden;
  min-height: 84px;
}
.ag-kc-head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
.ag-kc-ico {
  width: 22px; height: 22px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.ag-kl { font-size:var(--fs-micro); font-weight: 800; text-transform: uppercase; letter-spacing: .55px; }
.ag-kv { font-size:var(--fs-role-kpi); font-weight: 900; letter-spacing: -.03em; line-height: 1; }
.ag-kn { font-size:var(--fs-micro); margin-top: 3px; opacity: .7; }

/* Tonos por categoría — modo claro (más saturados, con borde de color) */
.ag-kc-r { background: linear-gradient(160deg, #fecaca 0%, #fca5a5 100%); color: #7f1d1d; box-shadow: 0 4px 10px rgba(220,38,38,.18), inset 0 0 0 1px rgba(220,38,38,.18); }
.ag-kc-r .ag-kc-ico { background: rgba(220,38,38,.28); color: #991b1b; }
.ag-kc-a { background: linear-gradient(160deg, #fde68a 0%, #fcd34d 100%); color: #78350f; box-shadow: 0 4px 10px rgba(245,158,11,.20), inset 0 0 0 1px rgba(180,83,9,.22); }
.ag-kc-a .ag-kc-ico { background: rgba(180,83,9,.28); color: #78350f; }
.ag-kc-b { background: linear-gradient(160deg, #bfdbfe 0%, #93c5fd 100%); color: #1e3a8a; box-shadow: 0 4px 10px rgba(59,130,246,.20), inset 0 0 0 1px rgba(29,78,216,.18); }
.ag-kc-b .ag-kc-ico { background: rgba(29,78,216,.28); color: #1e3a8a; }
.ag-kc-g { background: linear-gradient(160deg, #a7f3d0 0%, #6ee7b7 100%); color: #064e3b; box-shadow: 0 4px 10px rgba(5,150,105,.20), inset 0 0 0 1px rgba(5,150,105,.18); }
.ag-kc-g .ag-kc-ico { background: rgba(5,150,105,.28); color: #064e3b; }

/* (.ag-kpi-pills/.ag-kpi-pill eliminados — Agenda ahora usa .kpi-carousel-dots/-dot
    igual que el resto del sistema, una sola fuente de verdad.) */

@media (max-width: 380px) {
  .ag-kc { padding: 10px 9px; }
  .ag-kv { font-size:var(--fs-role-kpi); }
}

/* ════════════════════════════════════════════════════════════════
   FILTROS AGENDA — Contenedor neumórfico hundido + cards elevadas
   Contenedor: fondo gris claro distinto al page, sombras inset (hueco)
   Botones: blancos elevados con drop shadow visible
   Activo: fondo gris hundido + borde de color
   ════════════════════════════════════════════════════════════════ */
/* Agenda: glow neumórfico al 50% (más suave que el blanco puro) — scopeado
   solo a esta pantalla vía el token. En dark, glow cálido tenue. */
#page-agenda { --neu-l: rgba(255,255,255,.5); }
body.dark-mode #page-agenda { --neu-l: #34291c; }

.ag-neuro {
  background: var(--bg-page);
  border-radius: 18px;
  padding: 14px 12px;
  margin-bottom: 14px;
  /* Recuadro ELEVADO — sombras outset (igual fórmula que los pills) */
  box-shadow:
    5px 5px 12px var(--neu-d),
    -3px -3px 8px var(--neu-l);
}
.ag-neuro .ag-flbl { color: var(--muted); margin: 0 4px 10px; font-size:var(--fs-body); letter-spacing: 0; text-transform: none; font-weight: 700; }
.ag-neuro .ag-flbl:first-child { margin-top: 0; }

/* Período — 3 botones horizontales con icon-pill gradient */
.ag-period { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; margin-bottom: 10px; background: none; border: none; padding: 0; border-radius: 0; }
.ag-pb {
  display: flex;
  align-items: center;
  gap: 6px;
  /* Mismo bg que la página → la sombra se funde con el fondo */
  background: var(--bg-page);
  border: none;
  border-radius: 12px;
  padding: 8px 7px;
  cursor: pointer;
  user-select: none;
  transition: all .22s;
  text-align: left;
  /* Sombras sutiles (opción A) — menor profundidad, mismo look neumórfico */
  box-shadow:
    5px 5px 12px var(--neu-d),
    -3px -3px 8px var(--neu-l);
}
.ag-pb-ic {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  flex-shrink: 0;
  box-shadow: 0 2px 5px rgba(0,0,0,.18);
}
.ag-pb-ic svg { width: 14px; height: 14px; }
.ag-pb[data-p="vencidas"] .ag-pb-ic { background: linear-gradient(135deg, #fca5a5, #ef4444); }
.ag-pb[data-p="hoy"]      .ag-pb-ic { background: linear-gradient(135deg, #fbbf24, #f59e0b); }
.ag-pb[data-p="proximas"] .ag-pb-ic { background: linear-gradient(135deg, #93c5fd, #3b82f6); }
.ag-pb[data-p="7d"]       .ag-pb-ic { background: linear-gradient(135deg, #3b82f6, #0ea5e9); }
.ag-pb[data-p="mes"]      .ag-pb-ic { background: linear-gradient(135deg, #8b5cf6, #ec4899); }
.ag-pb-txt { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.ag-pb-l { font-size:var(--fs-sm); font-weight: 800; color: #0f172a; line-height: 1.1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ag-pb-n { font-size:var(--fs-micro); font-weight: 700; color: #64748b; line-height: 1; margin-top: 2px; }
.ag-pb.on {
  background: var(--bg-page);
  box-shadow:
    inset 4px 4px 10px var(--neu-d),
    inset -2px -2px 8px var(--neu-l);
}
.ag-pb.on .ag-pb-n { color: var(--accent-strong); }

/* Período HORIZONTAL con íconos grandes (ícono arriba, label+contador abajo) */
.ag-period-h { margin-bottom: 16px; }
.ag-period-h .ag-pb { flex-direction: column; align-items: center; text-align: center; gap: 7px; padding: 13px 6px; }
.ag-period-h .ag-pb-ic { width: 42px; height: 42px; }
.ag-period-h .ag-pb-ic svg { width: 21px; height: 21px; }
.ag-period-h .ag-pb-txt { flex-direction: column; align-items: center; flex: none; }
.ag-period-h .ag-pb-l { font-size:var(--fs-body); }
.ag-period-h .ag-pb-n { font-size:var(--fs-micro); display: block; margin-top: 3px; }

/* Período con 4 botones (Vencidas/Hoy/Próximas/Mes) — una sola fila */
.ag-period-4 { grid-template-columns: repeat(4, 1fr); gap: 6px; }
.ag-period-4 .ag-pb { padding: 11px 3px; gap: 6px; }
.ag-period-4 .ag-pb-ic { width: 38px; height: 38px; }
.ag-period-4 .ag-pb-ic svg { width: 19px; height: 19px; }
.ag-period-4 .ag-pb-l { font-size:var(--fs-sm); }
.ag-period-4 .ag-pb-n { font-size:var(--fs-micro); }

/* 2 columnas: Estado de Pago · Cobrador */
.ag-cols2 { grid-template-columns: 1fr 1.1fr; }

/* Chips contenedores — pills en UNA sola fila horizontal con scroll-x */
.ag-chips { margin-bottom: 0; }
.ag-estado-chips,
.ag-cob-chips {
  display: flex;
  flex-wrap: nowrap;
  gap: 8px;
  overflow-x: auto;
  scrollbar-width: none;
  -ms-overflow-style: none;
  -webkit-overflow-scrolling: touch;
  scroll-behavior: smooth;
  /* CRÍTICO: padding generoso para que la sombra (8px offset + 18px blur = 26px)
     se desvanezca dentro del padding-box. Sin esto, overflow-x:auto recorta la
     sombra y se ve un borde duro. Margin negativo cancela el extra hacia los
     bordes del .ag-neuro (que tiene padding 16px), así el primer/último chip
     pueden scrollear hasta el borde sin recorte visible.
     Patrón copiado de .cred-kpi-carousel (Reportes). */
  /* Padding y margin calibrados para distancias uniformes de 10px:
     - margin-top -14 + margin-bottom label (10) + padding-top scroll (14) = 10px label→pill
     - padding-bottom scroll (14) + margin-bottom -4 + margin-top label (0) = 10px pill→label */
  padding: 14px 4px 14px;
  margin: -14px 0 -4px;
  scroll-padding-left: 4px;
  scroll-padding-right: 4px;
}
.ag-estado-chips::-webkit-scrollbar,
.ag-cob-chips::-webkit-scrollbar { display: none; }
/* Override eliminado — el label "Cobrador" usa el genérico margin:0 4px 10px */
/* Los pills no deben encogerse al pasar el límite del contenedor */
.ag-chip { flex-shrink: 0; white-space: nowrap; }

/* Chip base — pill horizontal (Estado + Cobrador), mismo alto que botón Período (~42px) */
.ag-chip {
  /* Mismo bg que la página → la sombra se funde naturalmente con el fondo */
  background: var(--bg-page);
  border: none;
  border-radius: 99px;
  /* Sombras sutiles (opción A) — igual al botón Período */
  box-shadow:
    5px 5px 12px var(--neu-d),
    -3px -3px 8px var(--neu-l);
  padding: 13px 14px 13px 12px;
  cursor: pointer;
  user-select: none;
  display: inline-flex;
  flex-direction: row;
  align-items: center;
  gap: 8px;
  min-height: 42px;
  transition: all .22s;
}

/* Dot color del Estado (a la izquierda) — más grande para igualar visualmente al icon-pill del Período */
.ag-chip-dot { width: 11px; height: 11px; border-radius: 99px; background: #64748b; flex-shrink: 0; transition: all .25s; box-shadow: 0 1px 2px rgba(0,0,0,.18); margin: 0; }
.ag-chip.cv .ag-chip-dot { background: #ef4444; }
.ag-chip.cp .ag-chip-dot { background: #3b82f6; }
.ag-chip.ch .ag-chip-dot { background: #f59e0b; }
.ag-chip.cg .ag-chip-dot { background: var(--accent); }

/* Label y badge-número */
.ag-chip-lbl { font-size:var(--fs-sm); font-weight: 800; color: #0f172a; line-height: 1; letter-spacing: 0; text-transform: none; }
.ag-chip-n   { font-size:var(--fs-caption); font-weight: 800; color: #64748b; background: rgba(15,23,42,.08); padding: 2px 7px; border-radius: 99px; line-height: 1.2; min-width: 18px; text-align: center; margin: 0; opacity: 1; }

/* Estado activo: se hunde + dot con halo de color */
.ag-chip.on {
  background: var(--bg-page);
  box-shadow:
    inset 4px 4px 10px var(--neu-d),
    inset -2px -2px 8px var(--neu-l);
}
.ag-chip.on .ag-chip-dot { transform: scale(1.15); box-shadow: 0 0 0 4px rgba(100,116,139,.18); }
.ag-chip.on.cv .ag-chip-dot { box-shadow: 0 0 0 4px rgba(239,68,68,.18); }
.ag-chip.on.cv .ag-chip-lbl { color: #ef4444; }
.ag-chip.on.cp .ag-chip-dot { box-shadow: 0 0 0 4px rgba(59,130,246,.18); }
.ag-chip.on.cp .ag-chip-lbl { color: #3b82f6; }
.ag-chip.on.ch .ag-chip-dot { box-shadow: 0 0 0 4px rgba(245,158,11,.18); }
.ag-chip.on.ch .ag-chip-lbl { color: #b45309; }
.ag-chip.on.cg .ag-chip-dot { box-shadow: 0 0 0 4px rgba(var(--accent-rgb),.18); }
.ag-chip.on.cg .ag-chip-lbl { color: var(--accent-strong); }

/* Cobrador — variante con avatar (sin dot) — mismo alto 42px */
.ag-cob-chips .ag-chip { padding: 8px 14px 8px 8px; gap: 7px; }
.ag-cob-chips .ag-chip-dot { display: none; }
.ag-chip-av { width: 26px; height: 26px; border-radius: 99px; display: flex; align-items: center; justify-content: center; color: #fff; font-size:var(--fs-micro); font-weight: 800; flex-shrink: 0; box-shadow: 0 2px 4px rgba(0,0,0,.18); }
.ag-cob-chips .ag-chip.on .ag-chip-lbl { color: var(--accent-d, var(--accent-strong)); }
.ag-cob-chips .ag-chip-n { display: none; }

/* ════════════════════════════════════════════════════════════════
   LAYOUT 3 COLUMNAS VERTICALES — Opción D Mejorada
   Período más angosto · Cobrador más ancho con scroll vertical
   Iconos 26px · Texto 12px · Min-height 42px
   ════════════════════════════════════════════════════════════════ */
.ag-cols3 {
  display: grid;
  grid-template-columns: .85fr 1fr 1.15fr;
  gap: 9px;
  align-items: start;
}
.ag-col-title {
  font-size: 11.5px;
  font-weight: 800;
  color: var(--muted);
  letter-spacing: .3px;
  margin-bottom: 9px;
  text-align: center;
  padding-bottom: 6px;
  border-bottom: 1px solid rgba(168, 174, 188, .25);
}
.ag-col-stack {
  display: flex !important;
  flex-direction: column !important;
  flex-wrap: nowrap !important;
  gap: 6px !important;
  overflow: visible !important;
  padding: 0 !important;
  margin: 0 !important;
}
/* Cobrador con scroll vertical interno si hay muchos.
   CRÍTICO: padding generoso para que la sombra outset de los pills (5+12=17px)
   no se recorte por overflow-y:auto (que clip ambos ejes, no solo el Y). */
.ag-cols3 .ag-cob-chips {
  max-height: 280px;
  overflow-y: auto !important;
  overflow-x: visible;
  padding: 10px 12px !important;
  margin: -10px -12px !important;
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.ag-cols3 .ag-cob-chips::-webkit-scrollbar { display: none; }

/* Pills dentro de las 3 columnas: icono a la izq + texto */
.ag-cols3 .ag-pb,
.ag-cols3 .ag-chip {
  width: 100%;
  flex-shrink: 1 !important;
  flex-direction: row;
  justify-content: flex-start;
  align-items: center;
  padding: 9px 8px;
  border-radius: 10px;
  gap: 7px;
  min-height: 42px;
  font-size: 12px;
  font-weight: 700;
  color: #475569;
  background: var(--bg-page);
  box-shadow:
    4px 4px 10px var(--neu-d),
    -3px -3px 8px var(--neu-l);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Período: icon-pill gradient (26px) + texto */
.ag-cols3 .ag-pb-ic {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  flex-shrink: 0;
  box-shadow: 0 2px 5px rgba(0,0,0,.18);
}
.ag-cols3 .ag-pb-ic svg { width: 14px; height: 14px; }
.ag-cols3 .ag-pb-txt { flex-direction: row; align-items: center; min-width: 0; flex: 1; gap: 0; }
.ag-cols3 .ag-pb-l {
  font-size: 12px;
  font-weight: 700;
  color: #0f172a;
  line-height: 1.1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ag-cols3 .ag-pb-n { display: none; }
.ag-cols3 .ag-pb.on .ag-pb-l { color: #0f172a; font-weight: 800; }
/* Estado: dot grande (10px) + label */
.ag-cols3 .ag-chip-dot {
  width: 10px;
  height: 10px;
  box-shadow: 0 1px 2px rgba(0,0,0,.18);
  flex-shrink: 0;
}
.ag-cols3 .ag-chip-lbl {
  font-size: 12px;
  font-weight: 700;
  color: #0f172a;
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ag-cols3 .ag-chip-n { display: none; }
.ag-cols3 .ag-chip.on .ag-chip-lbl { color: #0f172a; font-weight: 800; }
.ag-cols3 .ag-chip.on.cv .ag-chip-lbl { color: #ef4444; }
.ag-cols3 .ag-chip.on.cp .ag-chip-lbl { color: #3b82f6; }
.ag-cols3 .ag-chip.on.ch .ag-chip-lbl { color: #b45309; }
.ag-cols3 .ag-chip.on.cg .ag-chip-lbl { color: var(--accent-strong); }
/* Cobrador: avatar 26px + label */
.ag-cols3 .ag-chip-av {
  width: 26px;
  height: 26px;
  font-size: 9.5px;
  font-weight: 800;
  box-shadow: 0 2px 4px rgba(0,0,0,.18);
}

/* ─── Feedback visual al click ─── */
/* Animación con clase .is-pressing añadida por JS: garantiza 280ms de visibilidad
   aunque el touch en mobile sea de 30ms. :active era frágil en mobile. */
@keyframes ag-press-pulse {
  0%   { transform: scale(1); }
  35%  { transform: scale(0.92); }
  100% { transform: scale(1); }
}
.ag-cols3 .ag-pb.is-pressing,
.ag-cols3 .ag-chip.is-pressing,
.ag-period .ag-pb.is-pressing {
  animation: ag-press-pulse 0.28s ease-out;
}

/* Opción A: un botón SELECCIONADO (.on) siempre se ve hundido, sin importar
   el "modo oculto". Se quitó el atenuado/elevado que pisaba el look de
   presionado al ocultar la lista o al vaciar Estado/Cobrador. La lista se
   oculta con su placeholder, pero los botones nunca se despintan. */
/* Activo: hunde con sombra inset y mantiene neumorfismo */
.ag-cols3 .ag-pb.on,
.ag-cols3 .ag-chip.on {
  background: var(--bg-page);
  box-shadow:
    inset 3px 3px 8px var(--neu-d),
    inset -2px -2px 6px var(--neu-l);
}

/* Lista por cliente */
.ag-loading { text-align: center; padding: 32px 10px; color: var(--muted); font-size:var(--fs-body); }
.ag-empty { text-align: center; padding: 36px 16px; color: var(--muted); }
.ag-empty svg { opacity: .5; margin-bottom: 8px; }
.ag-empty-t { font-size:var(--fs-md); font-weight: 700; color: var(--text); }
.ag-empty-s { font-size:var(--fs-sm); margin-top: 3px; }

.ag-cli { background: var(--white); border-radius: 13px; margin-bottom: 7px; overflow: hidden; box-shadow: 0 1px 6px rgba(15,23,42,.05); border: 0.60px solid var(--border); }
.ag-cli-h { display: flex; align-items: center; gap: 11px; padding: 11px 13px; cursor: pointer; user-select: none; }
.ag-av { width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size:var(--fs-sm); color: #fff; position: relative; }
.ag-dot { position: absolute; top: -1px; right: -1px; width: 11px; height: 11px; border-radius: 50%; border: 2px solid var(--white); }
.ag-dot.red { background: #ef4444; } .ag-dot.amber { background: #f59e0b; } .ag-dot.blue { background: #3b82f6; } .ag-dot.green { background: var(--accent); }
.ag-cli-info { flex: 1; min-width: 0; }
.ag-cli-nm { font-weight: 700; font-size:var(--fs-role-item); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text); }
.ag-cli-mt { font-size:var(--fs-role-label); color: var(--muted); margin-top: 1px; }
.ag-cli-deb { font-weight: 800; font-size:var(--fs-role-amount); color: var(--text); text-align: right; white-space: nowrap; }
.ag-cli-chev { color: #cbd5e1; flex-shrink: 0; transition: transform .2s; }
.ag-cli.open .ag-cli-chev { transform: rotate(90deg); }
.ag-cli-body { display: none; border-top: 0.60px solid var(--border); padding: 6px 13px 11px; background: var(--surface); }
.ag-cli.open .ag-cli-body { display: block; }

.ag-q { display: flex; align-items: center; gap: 8px; padding: 8px 0; font-size:var(--fs-role-meta); border-bottom: 0.60px dashed var(--border); }
.ag-q:last-of-type { border-bottom: none; }
.ag-q-n { color: var(--muted); font-weight: 800; width: 38px; flex-shrink: 0; }
.ag-q-cred { color: var(--accent); font-weight: 700; font-size:var(--fs-role-label); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 78px; }
.ag-q-venc { flex: 1; color: var(--muted); white-space: nowrap; }
.ag-q-m { font-weight: 800; color: var(--text); white-space: nowrap; }
.ag-q-badge { font-size:var(--fs-role-micro); font-weight: 800; padding: 3px 7px; border-radius: 7px; white-space: nowrap; }
.ag-q-badge.br { background: var(--danger-lt); color: var(--danger); }
.ag-q-badge.ba { background: rgba(251,191,36,.18); color: #d97706; }
.ag-q-badge.bb { background: rgba(59,130,246,.15); color: var(--blue); }
.ag-q-badge.bg { background: rgba(16,185,129,.15); color: var(--accent); }

.ag-cobrar-btn { width: 100%; margin-top: 9px; padding: 9px; border: none; border-radius: 9px; background: var(--accent); color: #fff; font-size:var(--fs-sm); font-weight: 800; cursor: pointer; transition: opacity .15s; }
.ag-cobrar-btn:hover { opacity: .9; }
.ag-vermas { text-align: center; font-size:var(--fs-sm); color: var(--accent); font-weight: 800; padding: 12px; cursor: pointer; user-select: none; }

/* ── Detalle como TABLA (Cliente · Estado · Cobr. · Monto) ── */
.ag-tbl { background: transparent; border: .6px solid var(--border); border-radius: 14px; overflow: hidden; margin-top: 4px; }
.ag-tbl-h, .ag-tr-main { display: grid; grid-template-columns: 1fr 62px 58px 66px; gap: 8px; align-items: center; }
.ag-tbl-h { background: var(--card); padding: 8px 12px; font-size: var(--fs-micro); font-weight: 800; color: var(--muted); letter-spacing: .05em; text-transform: uppercase; }
.ag-tbl-h .r { text-align: right; }
.ag-tr { border-top: .6px solid var(--border); }
.ag-tr-main { padding: 9px 12px; cursor: pointer; }
.ag-tr-cli { display: flex; align-items: center; gap: 9px; min-width: 0; }
.ag-rav { width: 30px; height: 30px; border-radius: 50%; background: var(--ic, var(--accent)); color: #fff; font-weight: 800; font-size: var(--fs-sm); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.ag-tr-txt { min-width: 0; }
.ag-tr-nm { font-size: var(--fs-body); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ag-tr-cuo { font-size: var(--fs-micro); color: var(--muted); margin-top: 2px; }
.ag-tr-est { justify-self: start; }
.ag-tr-cob { font-size: var(--fs-caption); font-weight: 600; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ag-tr-deb { font-size: var(--fs-body); font-weight: 800; text-align: right; color: var(--ic, var(--accent)); font-variant-numeric: tabular-nums; }
.ag-tr-exp { display: none; background: var(--surface); padding: 6px 13px 11px; border-top: .6px solid var(--border); }
.ag-tr.open .ag-tr-exp { display: block; }

/* Calendario del "Mes" — N° de cuotas por día */
/* ═══════════ Calendario (recuadro elevado · navegación de meses) ═══════════ */
.ag-cal {
  background: var(--bg-page);
  border-radius: 18px;
  padding: 14px 12px 12px;
  margin-bottom: 14px;
  /* Sombras sutiles (opción A) — igual a los pills */
  box-shadow:
    5px 5px 12px var(--neu-d),
    -3px -3px 8px var(--neu-l);
}
.ag-cal-h { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 11px; font-weight: 800; font-size:var(--fs-md); color: #0f172a; padding: 0 4px; }
.ag-cal-h-title { flex: 1; text-align: center; }
.ag-cal-clear { font-size:var(--fs-caption); font-weight: 700; color: var(--accent-strong); cursor: pointer; margin-left: 6px; }
.ag-cal-nav { width: 28px; height: 28px; border-radius: 9px; background: var(--bg-page); display: flex; align-items: center; justify-content: center; color: #64748b; cursor: pointer; flex-shrink: 0;
  box-shadow: 5px 5px 12px var(--neu-d), -3px -3px 8px var(--neu-l);
  transition: all .15s; }
.ag-cal-nav:hover { color: #0f172a; }
.ag-cal-nav:active { box-shadow: inset 4px 4px 9px var(--neu-d), inset -2px -2px 6px var(--neu-l); }
.ag-cal-nav svg { width: 14px; height: 14px; }
.ag-cal-dow { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; margin-bottom: 4px; }
.ag-cal-dow div { text-align: center; font-size:var(--fs-micro); font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: .4px; padding: 3px 0; }
.ag-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }

/* Cada día: círculo limpio sin fondo */
.ag-day {
  aspect-ratio: 1;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  font-size: 12.5px;
  color: #0f172a;
  cursor: pointer;
  position: relative;
  background: transparent;
  transition: background .15s, color .15s;
  padding-top: 3px;
}
.ag-day:hover { background: rgba(15,23,42,.05); }
.ag-day .ag-day-d { font-size:var(--fs-sm); line-height: 1; margin-top: -3px; }
.ag-day.other { color: #cbd5e1; font-weight: 500; }
.ag-day.other .ag-day-d { color: #cbd5e1; }
.ag-day.today { color: var(--accent-strong); font-weight: 800; }

/* Día seleccionado: cuadrado verde suave */
.ag-day.sel { background: #d1fae5; color: #15803d; font-weight: 800; border-radius: 10px; }
.ag-day.sel.today { background: #d1fae5; color: #15803d; }
.ag-day.sel:hover { background: #a7f3d0; }

/* Badge con número en inferior derecha (estilo Apple Calendar events count) */
.ag-day-badge {
  position: absolute;
  bottom: 1px;
  right: 1px;
  min-width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #64748b;
  color: #fff;
  font-size: 8.5px;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  padding: 0 3px;
}
.ag-day-badge.t { background: #64748b; }
.ag-day-badge.v { background: #ef4444; }
.ag-day-badge.p { background: #3b82f6; }
.ag-day-badge.h { background: #f59e0b; }
.ag-day-badge.g { background: var(--accent); }

/* Leyenda */
.ag-cal-legend {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 11px;
  padding-top: 9px;
  border-top: 1px solid rgba(168,174,188,.25);
  font-size: 9.5px;
  font-weight: 700;
  color: #64748b;
}
.ag-cal-legend .it { display: inline-flex; align-items: center; gap: 4px; }
.ag-cal-legend .sw { width: 10px; height: 10px; border-radius: 50%; }
.ag-cal-legend .sw.t { background: #64748b; }
.ag-cal-legend .sw.v { background: #ef4444; }
.ag-cal-legend .sw.p { background: #3b82f6; }
.ag-cal-legend .sw.h { background: #f59e0b; }
.ag-cal-legend .sw.g { background: var(--accent); }

/* ═══════════ Skeletons (loading shimmer) ═══════════ */
@keyframes ag-shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } }
.ag-skel {
  background: linear-gradient(90deg, #dde0e6 0%, #eef0f3 50%, #dde0e6 100%);
  background-size: 200% 100%;
  animation: ag-shimmer 1.5s infinite;
  border-radius: 14px;
}
.ag-skel-kpis { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; margin-bottom: 14px; }
.ag-skel-kpi  { height: 78px; }
.ag-skel-list { display: flex; flex-direction: column; gap: 7px; margin-top: 14px; }
.ag-skel-item { height: 60px; border-radius: 13px; }

/* ════════════════════════════════════════════════════════════════
   ETAPA 7 — Liquid Glass + Cobrador horizontal + ✓ Saldado
   ════════════════════════════════════════════════════════════════ */

/* Strip horizontal de Cobradores — pill neumórfica compacta */
.ag-cob-strip {
  display: flex; gap: 8px; overflow-x: auto;
  /* Padding generoso evita que el outset shadow se recorte por overflow-x */
  padding: 10px 4px 14px;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}
.ag-cob-strip::-webkit-scrollbar { display: none; }
.ag-cav {
  flex-shrink: 0; scroll-snap-align: start;
  display: inline-flex; flex-direction: row; align-items: center; gap: 7px;
  cursor: pointer;
  padding: 4px 12px 4px 4px;
  border-radius: 99px;
  /* Mismo bg que la página → la sombra se funde con el fondo (neumorfismo) */
  background: var(--bg-page);
  border: none;
  /* Estado ELEVADO: sombras outset suaves */
  box-shadow:
    4px 4px 10px var(--neu-d),
    -2px -2px 6px var(--neu-l);
  /* Stagger en cascada: cada pill cambia su sombra 35ms después de la anterior */
  transition:
    box-shadow .28s ease,
    background-color .22s ease;
  transition-delay: calc(var(--idx, 0) * 32ms);
  position: relative;
}
.ag-cav-ring {
  width: 24px; height: 24px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-weight: 800; font-size: 10px;
  flex-shrink: 0;
  box-shadow: 0 2px 5px rgba(0,0,0,.18);
}
.ag-cav-ring svg { width: 14px; height: 14px; stroke: #fff; }
.ag-cav-nm {
  font-size: 12px; font-weight: 800; color: #0f172a;
  white-space: nowrap;
}

/* Botón "Todos": ícono con gradient distintivo */
.ag-cav-all .ag-cav-ring {
  background: linear-gradient(135deg, #475569, #0f172a);
}
.ag-cav-all.on .ag-cav-ring {
  background: linear-gradient(135deg, var(--accent), var(--accent-strong));
}

/* Estado HUNDIDO: tinte del color del cobrador + sombras inset (neumorfismo) */
.ag-cav.on {
  background: var(--cob-soft, var(--bg-page));
  box-shadow:
    inset 4px 4px 10px var(--neu-d),
    inset -2px -2px 8px var(--neu-l);
}
/* Texto SIEMPRE oscuro (no cambia a verde al activarse) — el feedback de
   selección lo da la sombra inset + el tinte del fondo, no el color del texto. */
.ag-cav.on .ag-cav-nm { color: #0f172a; }

/* Atenuación de los no-seleccionados (cuando hay subset activo) */
.ag-cob-strip.has-sel .ag-cav:not(.on) { opacity: .55; filter: saturate(.5); }

/* ── Animación press/depress: micro hundimiento + retorno con bounce ── */
.ag-cav.is-pressing { animation: agPressTap 320ms cubic-bezier(.34,1.56,.64,1); }
@keyframes agPressTap {
  0%   { transform: scale(1); }
  35%  { transform: scale(.90); }
  100% { transform: scale(1); }
}

/* Botón "Ver resultados" — estilo Diana/Foco (dark premium) */
.ag-apply {
  width: 100%; margin-top: 14px;
  background: linear-gradient(135deg, #1f2937, #0f172a);
  color: #fff; border: 0; border-radius: 14px;
  padding: 12px 14px; font-weight: 800; font-size: 13.5px;
  display: flex; align-items: center; justify-content: center; gap: 10px;
  cursor: pointer;
  box-shadow: none;
  transition: transform .15s, background .2s;
  letter-spacing: .2px;
}
.ag-apply:hover {
  transform: translateY(-1px);
  box-shadow: none;
  background: linear-gradient(135deg, #334155, #1e293b);
}
.ag-apply:active { transform: scale(.98); }
.ag-apply svg { opacity: .95; }



/* ✓ verde de día saldado en el calendario */
.ag-day-badge.ok {
  background: linear-gradient(135deg, #34d399, #10b981);
  color: #fff;
  width: 16px; height: 16px;
  border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0; line-height: 1;
  box-shadow: 0 2px 5px rgba(16,185,129,.4);
  animation: agCheckPop .5s cubic-bezier(.34,1.56,.64,1) backwards;
}
.ag-day-badge.ok svg {
  width: 9px; height: 9px;
  stroke-dasharray: 14; stroke-dashoffset: 14;
  animation: agCheckDraw .4s .15s ease forwards;
}
@keyframes agCheckPop { from { transform: scale(0); } to { transform: scale(1); } }
@keyframes agCheckDraw { to { stroke-dashoffset: 0; } }

/* Leyenda: nuevo color de swatch para "Saldado" */
.ag-cal-legend .it .sw.ok { background: linear-gradient(135deg, #34d399, #10b981); }

/* Header simple de la lista — solo "Detalle" */
.ag-lst-head {
  padding: 10px 4px 8px;
}
.ag-lst-head .ag-lst-t {
  font-size: 10.5px; font-weight: 800; color: #64748b;
  text-transform: uppercase; letter-spacing: .8px;
}

/* ── Identificación visual del cobrador por cliente ── */

/* Borde lateral izquierdo con el color del cobrador (sutil) */
.ag-cli {
  position: relative;
  overflow: hidden; /* para que el ::before respete el border-radius del .ag-cli */
}
.ag-cli::before {
  content: "";
  position: absolute; left: 0; top: 0; bottom: 0;
  width: 3.5px;
  background: var(--cob-edge, transparent);
  border-radius: 4px 0 0 4px;
}

/* Mini-pill del cobrador junto al nombre (solo si >1 cobrador en resultados) */
.ag-cli-cob {
  display: inline-flex; align-items: center; gap: 4px;
  margin-left: 7px;
  padding: 2px 8px 2px 2px;
  border-radius: 99px;
  background: rgba(15,23,42,.05);
  vertical-align: middle;
  font-size: 10px; font-weight: 700;
  position: relative; top: -1px;
}
.ag-cli-cob-av {
  width: 16px; height: 16px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  color: #fff; font-weight: 800; font-size: 7.5px;
  background: var(--cob-bg, #94a3b8);
  box-shadow: 0 1px 2px rgba(0,0,0,.15);
}
.ag-cli-cob-nm {
  color: #475569; font-weight: 700; letter-spacing: 0;
  white-space: nowrap;
}

/* ════════════════════════════════════════════════════════════════
   TEMA "EDITORIAL CÁLIDO" — Paleta Anthropic
   ════════════════════════════════════════════════════════════════
   Se activa cuando body tiene la clase .theme-editorial.
   Cambia: fondo ivory · texto slate · cards oat · neumorfismo cálido
   · acento clay (sobreescribe el --accent del usuario solo en este tema).

   No afecta nada cuando NO está la clase (tema "Clásico" = lo actual).
   ════════════════════════════════════════════════════════════════ */
:root {
  /* ──── TOKENS DEL DESIGN SYSTEM (Etapa 9) ────
     Verificado en anthropic.com — el "main" (fondo real de la página)
     es #f0eee6 (ivory-medium), no #faf9f5. Lo corregimos para coincidir. */
  --bg-page:        #f0eee6;        /* ivory-medium — fondo real Anthropic */
  --card:           #e3dacc;        /* oat — bg de cards (destaca sobre bg-page) */
  --card-soft:      #faf9f5;        /* ivory-light — sub-paneles "elevados" dentro de cards */
  --card-strong:    #ebdbbc;        /* manilla — cards destacadas */
  --input-bg:       #faf9f5;
  --overlay:        rgba(20,20,19,.55);

  --text:           #141413;        /* slate-dark */
  --text-muted:     #5e5d59;        /* slate-light */
  --text-subtle:    #87867f;        /* cloud-dark */
  --text-inverse:   #faf9f5;        /* ivory para sobre slate */

  --border:         rgba(20,20,19,.08);
  --border-strong:  rgba(20,20,19,.15);

  --accent:         #d97757 !important;     /* clay */
  --accent-strong:  #c6613f !important;
  --accent-soft:    #f5e2d8 !important;
  --accent-rgb:     217, 119, 87;

  /* Semánticos: mantener rojos/ámbar/verde/azul (son universales para alertas) */

  --shadow-sm:      0 1px 3px rgba(20,20,19,.04);
  --shadow:         0 4px 14px rgba(20,20,19,.05);
  --shadow-md:      0 8px 24px rgba(20,20,19,.07);
  --shadow-lg:      0 14px 40px rgba(20,20,19,.10);
  /* Inset cálido (#b4a082 en vez de var(--neu-d)) */
  --shadow-inset:   inset 4px 4px 10px rgba(180,160,130,.32), inset -2px -2px 8px rgba(255,255,255,.85);
  /* Color de la sombra neumórfica (lado oscuro). Tokenizado para soportar
     modo oscuro: en dark se cambia a un casi-negro y las cards "flotan" igual. */
  --neu-d:          #cdc2b0;
  /* Glow (lado claro) del neumorfismo. En dark se cambia a un cálido tenue. */
  --neu-l:          #ffffff;

  /* ──── Aliases viejos (compatibilidad backwards) ──── */
  --muted:          var(--text-muted);
  --surface:        var(--bg-page);
  --surface2:       var(--card-soft);
  --white:          var(--bg-page);
  --accent2:        var(--accent-strong);
  --accent-lt:      var(--accent-soft);

  /* ──── Paleta de tintes Anthropic (disponible para componentes específicos) ──── */
  --ivory-light:    #faf9f5;
  --ivory-medium:   #f0eee6;
  --oat:            #e3dacc;
  --manilla:        #ebdbbc;
  --cactus:         #bcd1ca;
  --heather:        #cbcadb;
  --coral:          #ebcece;
  --kraft:          #d4a27f;
  --olive:          #788c5d;
  --sky:            #6a9bcc;
  --fig:            #c46686;
  --slate-dark:     #141413;
  --slate-light:    #5e5d59;
  --clay:           #d97757;   /* ⚠ usado en gradients del topbar */
}

/* ════════════════════════════════════════════════════════════════════
   MODO OSCURO — "Carbón cálido" (Variante A)
   Solo redefine tokens; el accent lo maneja theme.js (reapplyAccentColor).
   ════════════════════════════════════════════════════════════════════ */
body.dark-mode {
  --bg-page:        #1a1613;
  --card:           #251f18;
  --card-soft:      #2c241a;
  --card-strong:    #332a1d;
  --input-bg:       #2c241a;
  --overlay:        rgba(0,0,0,.62);

  --text:           #f1ece3;
  --text-muted:     #a59c8e;
  --text-subtle:    #7d7468;
  --text-inverse:   #1a1613;

  --border:         rgba(255,255,255,.08);
  --border-strong:  rgba(255,255,255,.16);

  /* Sombra neumórfica en oscuro: casi-negro (las cards flotan sobre el carbón) */
  --neu-d:          #100c08;
  --neu-l:          #34291c;
  --shadow-inset:   inset 4px 4px 10px #100c08, inset -2px -2px 8px #34291c;
  --shadow-sm:      0 1px 3px rgba(0,0,0,.4);
  --shadow:         0 4px 14px rgba(0,0,0,.45);
  --shadow-md:      0 8px 24px rgba(0,0,0,.5);
  --shadow-lg:      0 14px 40px rgba(0,0,0,.55);

  /* semánticos un toque más vivos (en oscuro se ven apagados si no) */
  --success:        #34d399;
  --warning:        #fbbf24;
  --danger:         #f87171;
  --info:           #60a5fa;
}
body.dark-mode,
#app.dark-mode:not(.login-mode),
body.dark-mode #app:not(.login-mode),
body.dark-mode html {
  background: #1a1613 !important;
  color: #f1ece3 !important;
}
body.dark-mode .page:not(#page-login):not(#page-signup) { background: #1a1613 !important; }
/* topbar + footer (colores oat hardcodeados) → carbón */
body.dark-mode .mob-topbar { background: #251f18 !important; color: #f1ece3 !important; }
body.dark-mode #mobTopbarTitle { color: #f1ece3 !important; }
body.dark-mode .mob-topbar .tb-btn,
body.dark-mode #push-bell-btn,
body.dark-mode #dark-mode-btn-top { background: rgba(255,255,255,.08) !important; color: #f1ece3 !important; }
body.dark-mode .sticky-footer-nav { background: #251f18 !important; }
body.dark-mode .sticky-footer-nav button { color: #a59c8e !important; }
body.dark-mode .sticky-footer-nav button.active { color: #f1ece3 !important; }

/* ── Overrides de componentes con color claro hardcodeado (pass 2) ── */
/* Agenda: textos slate (#0f172a) → texto del tema */
body.dark-mode .ag-pb-l,
body.dark-mode .ag-cols3 .ag-pb-l,
body.dark-mode .ag-cols3 .ag-pb.on .ag-pb-l,
body.dark-mode .ag-chip-lbl,
body.dark-mode .ag-cols3 .ag-chip-lbl,
body.dark-mode .ag-cols3 .ag-chip.on .ag-chip-lbl,
body.dark-mode .ag-cal-h,
body.dark-mode .ag-cal-nav,
body.dark-mode .ag-cal-nav:hover,
body.dark-mode .ag-cav-nm,
body.dark-mode .ag-cav.on .ag-cav-nm,
body.dark-mode .ag-day { color: var(--text); }

/* Cronograma / tablas: header y celdas con fondo claro fijo */
body.dark-mode .cron-table thead th,
body.dark-mode .cron-table tfoot td { background: var(--card-strong) !important; }
body.dark-mode .cron-table tbody td { color: var(--text); }
body.dark-mode th { background: var(--card-strong) !important; }

/* Inputs / selects / textarea con fondo claro fijo */
body.dark-mode input:not([type="checkbox"]):not([type="radio"]),
body.dark-mode select,
body.dark-mode textarea { background: var(--input-bg) !important; color: var(--text) !important; border-color: var(--border) !important; }
body.dark-mode input::placeholder,
body.dark-mode textarea::placeholder { color: var(--text-subtle); }

/* Riel de la barra de progreso de pagos — verde tenue (mismo tono del relleno),
   así se lee como progreso y combina con la paleta cálida. */
.pago-prog-track { background: rgba(16,185,129,.16); }
body.dark-mode .pago-prog-track { background: rgba(16,185,129,.20); }

/* Fondo de páginas y app shell — usa --bg-page (token oficial DS) que
   ahora vale #f0eee6 (ivory-medium, el "main" real de anthropic.com).
   IMPORTANTE: Login/Signup tienen fondo dark deliberado (aurora effect)
   y NO deben recibir el bg ivory del editorial. Excluidos abajo. */
.page:not(#page-login):not(#page-signup) {
  background: var(--bg-page) !important;
}
body {
  background: var(--bg-page) !important;
  color: var(--slate-dark) !important;
}
#app:not(.login-mode) {
  background: var(--bg-page) !important;
  color: var(--slate-dark) !important;
}
html {
  background: var(--bg-page, #f0eee6) !important;
}
/* ── Feel nativo: sin selección de texto ni callout al mantener presionado el
   dedo (long-press). Se exceptúan inputs/textarea y lo marcado .selectable
   (para poder copiar DNI/teléfono/montos donde queramos). ── */
#app, #app * {
  -webkit-user-select: none;
  -moz-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}
#app input,
#app textarea,
#app [contenteditable="true"],
#app .selectable, #app .selectable * {
  -webkit-user-select: text;
  -moz-user-select: text;
  user-select: text;
  -webkit-touch-callout: default;
}
/* Login/Signup: forzar el dark deliberado del Aurora V5
   incluso cuando el tema editorial está activo */
#page-login,
#page-signup,
#app.login-mode {
  background: #1a1613 !important;
  color: #fff !important;
}


/* Neumorfismo cálido — sombras adaptadas al ivory */
.ag-neuro {
  background: var(--oat) !important;
  box-shadow:
    5px 5px 14px rgba(180,160,130,0.30),
    -3px -3px 10px rgba(255,255,255,0.85) !important;
}
.ag-pb,
.ag-cav {
  background: var(--oat) !important;
  box-shadow:
    4px 4px 10px rgba(180,160,130,0.28),
    -2px -2px 7px rgba(255,255,255,0.85) !important;
}

.kpi-modern .kpi-modern-val { color: var(--slate-dark); }
.kpi-modern .kpi-modern-label,
.kpi-modern .kpi-modern-sub { color: var(--slate-light); }

/* ── Lista de clientes en Agenda — Opción 2 "Lista en gran contenedor" ──
   Los .ag-cli pierden su card individual. Visualmente forman UN gran bloque
   oat con divisores internos (CSS-only, sin tocar el JS).
     · primer cliente: bordes redondeados arriba
     · último cliente: bordes redondeados abajo + sin divisor
     · intermedios: solo border-bottom como separador
     · borde lateral del cobrador (::before) se quita */
.ag-cli {
  background: var(--oat) !important;
  border: none !important;
  border-bottom: 1px solid var(--border) !important;
  border-radius: 0 !important;
  margin-bottom: 0 !important;
  box-shadow: none !important;
}
#agenda-lista .ag-cli:first-of-type {
  border-radius: 14px 14px 0 0 !important;
}
#agenda-lista .ag-cli:last-of-type {
  border-radius: 0 0 14px 14px !important;
  border-bottom: none !important;
}
#agenda-lista .ag-cli:only-of-type {
  border-radius: 14px !important;
  border-bottom: none !important;
}
.ag-cli::before { display: none !important; }
.ag-cli-cob { background: var(--ivory-medium); }

/* Tablas */
table thead { background: var(--ivory-medium); }
table tr:hover { background: var(--ivory-medium); }

/* Botones primarios — siguen usando --accent (clay) */
.btn-primary,
.ag-apply {
  background: var(--slate-dark) !important;
  color: var(--ivory-light) !important;
}
.btn-primary:hover {
  background: var(--accent) !important;
}


/* Headers / pg-header */
.pg-header { color: var(--slate-dark); }


/* Toolbar Liquid Glass (Etapa 7 agenda) — adaptar a paleta */
.ag-glass {
  background: rgba(227,218,204,0.72) !important;   /* oat con alpha */
  border-color: rgba(20,20,19,0.08) !important;
}
.ag-glass-lbl { color: var(--slate-dark); }
.ag-glass-lbl small { color: var(--slate-light); }

/* Calendario agenda */
.ag-cal { background: var(--oat) !important; }
.ag-day.today { background: var(--manilla); color: var(--slate-dark); }
.ag-day.sel { background: var(--clay) !important; color: #fff; }

/* ════════════════════════════════════════════════════════════════
   FILTRO AGENDA — Rediseño editorial (mockup nuevo)
   ════════════════════════════════════════════════════════════════ */

/* En clásico ocultar los nuevos elementos (icon-pill + subtítulo + dropdown trigger) */
.ag-col-header { display: block; }
.ag-col-ico,
.ag-col-sub,
.ag-cob-trigger { display: none; }

/* En editorial: el wrapper externo es transparente — cada sección
   (Período / Cobrador) es su propia card independiente. */
#agenda-filtros {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* Header de cada bloque (Período / Cobrador) con icon-pill violeta */
.ag-col-header {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
}
.ag-col-ico {
  display: flex !important;
  width: 44px; height: 44px;
  border-radius: 50%;
  background: var(--heather);
  color: #6d28d9;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.ag-col-ico svg {
  width: 20px; height: 20px;
}
.ag-col-txts { flex: 1; min-width: 0; }
.ag-col-title {
  font-size: 18px !important;
  font-weight: 800 !important;
  color: var(--text) !important;
  margin: 0 !important;
  letter-spacing: -.01em;
  text-transform: none !important;
}
.ag-col-sub {
  display: block !important;
  font-size: 12.5px;
  color: var(--text-muted);
  margin-top: 2px;
  line-height: 1.3;
}

/* Cards GRANDES verticales de Período */
.ag-period.ag-period-4 {
  grid-template-columns: repeat(4, 1fr) !important;
  gap: 10px !important;
  margin-bottom: 4px !important;
}
.ag-pb {
  flex-direction: column !important;
  align-items: center !important;
  text-align: center !important;
  padding: 2px 4px !important;
  /* background/box-shadow/border/border-radius vienen de .card (regla compartida
     .kpi-modern,.dash-sec-card,.card,.nc-tipo-opt en línea ~634). Eliminados de aquí
     en el cierre del refactor 8b2e6d7 — antes los machacaban con !important. */
  transition: opacity .2s !important;
  position: relative !important;
  gap: 5px !important;
}
.ag-pb:hover {
  transform: none;
}
.ag-pb .ag-pb-ic {
  width: 50px !important;
  height: 50px !important;
}
.ag-pb .ag-pb-ic svg {
  width: 25px !important; height: 25px !important;
}
.ag-pb-txt {
  flex-direction: column !important;
  align-items: center !important;
  gap: 3px !important;
}
.ag-pb-l {
  font-size: var(--fs-sm) !important;
  font-weight: 800 !important;
  color: var(--text) !important;
}
.ag-pb-n {
  font-size: var(--fs-caption) !important;
  font-weight: 600 !important;
  color: var(--text-muted) !important;
  margin-top: 1px !important;
  white-space: nowrap !important;
}

/* Mobile: padding más chico + font reducido para que "107 cuotas" entre */
@media (max-width: 600px) {
  .ag-pb,
  .ag-pb.on {
    padding: 8px 6px !important;   /* espacio para que la sombra neumórfica respire */
  }
  .ag-pb .ag-pb-ic {
    width: 40px !important;
    height: 40px !important;
  }
  .ag-pb .ag-pb-ic svg {
    width: 20px !important; height: 20px !important;
  }
  .ag-pb-l {
    font-size: var(--fs-caption) !important;
  }
  .ag-pb-n {
    font-size: var(--fs-micro) !important;
  }
  .ag-period.ag-period-4 {
    gap: 16px !important;   /* espacio entre cards para que la sombra neumórfica se vea entre ellas */
  }
  .ag-section {
    padding: var(--space-4) 14px 14px !important;
  }
}

/* Card seleccionada: manilla suave + check mark naranja arriba derecha.
   Usamos outline (no border) para que la card NO cambie de tamaño al
   seleccionarse — el outline vive "afuera" del box model. */
.ag-period .ag-pb { opacity: 1 !important; }
/* Look NEUMÓRFICO igual a los íconos del drawer "Más": sombra cálida abajo-der +
   highlight blanco arriba-izq. Reducimos el padding para que la sombra "respire"
   y se vea bien (no quede pegada al borde del card contenedor). */
.ag-period .ag-pb {
  background: var(--card) !important;       /* oat — mismo color que el topbar */
  box-shadow:
    8px 8px 18px var(--neu-d),
    -4px -4px 12px var(--neu-l) !important;
  border: none !important;
  border-radius: 14px !important;
  padding: 8px 6px !important;
}
/* Estado presionado: sombra invertida (efecto "hundido hacia adentro") */
.ag-period .ag-pb.on {
  box-shadow:
    inset 4px 4px 10px var(--neu-d),
    inset -3px -3px 8px var(--neu-l) !important;
}
.ag-pb.on .ag-pb-l { color: var(--accent) !important; }
.ag-pb.on .ag-pb-n {
  color: var(--accent) !important;
  font-weight: 700 !important;
}

/* (sin separador entre secciones — ahora son cards independientes con gap) */

/* Cobrador DROPDOWN TRIGGER (estado colapsado por default) */
.ag-cob-trigger {
  display: flex !important;
  align-items: center;
  gap: 12px;
  width: 100%;
  padding: 12px 16px;
  border-radius: 99px;
  background: var(--card-soft);
  border: none;
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  transition: all .2s;
}
.ag-cob-trigger:hover {
  border-color: var(--text-muted);
}
.ag-cob-trigger-ico {
  width: 30px; height: 30px;
  border-radius: 50%;
  background: var(--heather);
  color: #6d28d9;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.ag-cob-trigger-ico svg { width: 15px; height: 15px; }
.ag-cob-trigger-text {
  flex: 1;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text);
}
.ag-cob-trigger-chev {
  width: 22px; height: 22px;
  color: var(--text-muted);
  transition: transform .25s;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.ag-cob-trigger-chev svg { width: 18px; height: 18px; }
#agenda-cob-col.ag-cob-open .ag-cob-trigger-chev {
  transform: rotate(180deg);
}

/* Strip de cobradores oculto por default, visible cuando dropdown está abierto */
.ag-cob-strip {
  display: none !important;
}
#agenda-cob-col.ag-cob-open .ag-cob-strip {
  display: flex !important;
  margin-top: 10px;
  animation: cobSlideDown .25s ease;
}
@keyframes cobSlideDown {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Pills de cobrador (look mockup: planas grandes con border) */
.ag-cav {
  background: none !important;
  box-shadow: none !important;
  border: none !important;
  padding: 4px 10px 4px 4px !important;
  border-radius: 99px !important;
  gap: 8px !important;
}
.ag-cav .ag-cav-ring {
  width: 26px !important;
  height: 26px !important;
  font-size: var(--fs-caption) !important;
}
.ag-cav .ag-cav-nm {
  font-size: var(--fs-sm) !important;
  font-weight: 700 !important;
  color: var(--text) !important;
}
.ag-cav.on {
  background: none !important;
  border: none !important;
  outline: none !important;
  box-shadow: none !important;
}
.ag-cav.on .ag-cav-nm { color: var(--accent) !important; }
.ag-cav-all .ag-cav-ring {
  background: var(--text) !important;
}

/* ════════════════════════════════════════════════════════════════
   AGENDA · PERÍODO = cards con ícono brillante + HUNDIDO 3D al elegir
   (override final: gana sobre las capas previas de .ag-pb)
   ════════════════════════════════════════════════════════════════ */
/* ════════════════════════════════════════════════════════════════
   CARD UNIFICADA "Filtros" — Período arriba + Cobradores abajo
   Sin tabs: ambas secciones se ven a la vez, separadas por gap.
   ════════════════════════════════════════════════════════════════ */
.ag-section-body {
  padding: 0 var(--space-4) var(--space-4);
}
.ag-section-body + .ag-section-body {
  padding-top: 4px;
}

/* El grid .ag-period vive dentro de .ag-section-body, que provee padding
   lateral. Anulamos el padding propio del grid para evitar doblar. */
.ag-section-body .ag-period {
  padding: 0 !important;
}

/* Subtítulo de cada sub-sección dentro de la card.
   Alineado a la DERECHA — mismo eje que la frase "Seleccioná el período"
   del .card-head, para que el ojo lea como una columna de "labels" verticales. */
.ag-cob-sub {
  font-size: var(--fs-caption);
  color: var(--text-muted);
  font-weight: 600;
  text-align: right;
  margin: 0 0 10px 0;
}

/* ────────────── GRID DE COBRADORES — 2 columnas, cards con check ──────────────
   El JS sigue renderizando <div class="ag-cav"><span class="ag-cav-ring"/>
   <span class="ag-cav-nm"/></div>. Acá los rediseñamos como cards verticales:
   avatar arriba centrado, nombre debajo, indicador circular arriba-derecha. */
.ag-cob-grid {
  display: grid !important;
  grid-template-columns: repeat(4, 1fr);     /* 4 por fila (1 sola fila en móvil) */
  gap: 6px;
  padding: 4px 2px 2px !important;
  overflow: visible !important;
  scroll-snap-type: none !important;
}
.ag-cob-grid .ag-cav {
  display: flex !important;
  flex-direction: column !important;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 10px 4px !important;
  border-radius: 11px !important;
  background: var(--bg-page) !important;     /* ivory clarito sobre el oat */
  box-shadow: 0 1px 4px rgba(20,20,19,.06) !important;
  position: relative;
  overflow: hidden;
  cursor: pointer;
  transition: background .18s, box-shadow .18s, transform .12s;
  min-height: 78px;
}
.ag-cob-grid .ag-cav:active { transform: scale(.97); }

/* Avatar (ring) compacto para entrar 4 por fila */
.ag-cob-grid .ag-cav-ring {
  width: 32px !important;
  height: 32px !important;
  font-size: 11px !important;
  box-shadow: 0 2px 6px rgba(20,20,19,.18) !important;
}
.ag-cob-grid .ag-cav-ring svg {
  width: 16px !important;
  height: 16px !important;
}
/* Nombre debajo del avatar — una sola línea con ellipsis para que no rompa
   la grilla cuando hay nombres largos. */
.ag-cob-grid .ag-cav-nm {
  font-size: 10.5px !important;
  font-weight: 700 !important;
  color: var(--text) !important;
  white-space: nowrap !important;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
  text-align: center;
  line-height: 1.15;
}

/* Indicador circular arriba-derecha — más chico para no robar espacio:
   - ::before = círculo (borde gris cuando off, fondo accent cuando on)
   - ::after  = checkmark (solo visible cuando .on) */
.ag-cob-grid .ag-cav::before {
  content: "";
  position: absolute;
  top: 5px; right: 5px;
  width: 13px; height: 13px;
  border-radius: 50%;
  border: 1.5px solid rgba(20,20,19,.18);
  background: transparent;
  transition: background .15s, border-color .15s;
}
.ag-cob-grid .ag-cav.on::before {
  background: var(--accent);
  border-color: var(--accent);
}
.ag-cob-grid .ag-cav.on::after {
  content: "";
  position: absolute;
  top: 8px; right: 7.5px;
  width: 7px; height: 4px;
  border-left: 1.8px solid #fff;
  border-bottom: 1.8px solid #fff;
  transform: rotate(-45deg);
}

/* Estado seleccionado: tinte suave del color del cobrador en el fondo */
.ag-cob-grid .ag-cav.on {
  background: var(--cob-soft, rgba(var(--accent-rgb), 0.10)) !important;
  box-shadow: none !important;
}

/* Sin atenuar los no-seleccionados — en el grid quedan tan visibles como los
   demás; el indicador circular ya distingue cuál está activo. */
.ag-cob-grid.has-sel .ag-cav:not(.on) {
  opacity: 1 !important;
  filter: none !important;
}

/* Wrapper del botón "Ver resultados" cuando vive DENTRO de la card.
   El .ag-apply tiene margin-top:14px global pensado para cuando flotaba
   fuera de la card; acá lo neutralizamos y solo dejamos el padding del
   .ag-section-body padre (var(--space-4)). */
.ag-apply-wrap {
  padding-top: 6px !important;
}
.ag-apply-wrap .ag-apply {
  margin-top: 0 !important;
}

/* Skeleton de cobrador (loading state). Mismo tamaño que un .ag-cav real
   para que el grid no salte cuando llega la data. Pulso de gradient suave. */
.ag-cav-skel {
  min-height: 78px;
  border-radius: 11px;
  background:
    linear-gradient(90deg,
      var(--bg-page) 0%,
      #e8dfd0 50%,
      var(--bg-page) 100%);
  background-size: 220% 100%;
  animation: agCavSkelPulse 1.3s ease-in-out infinite;
  box-shadow: 0 1px 4px rgba(20,20,19,.06);
}
@keyframes agCavSkelPulse {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* Mini cards del Período: heredan TODO del .card del sistema (fondo, borde,
   sombra D4, radius). Aquí solo se define el COMPORTAMIENTO específico:
   estructura columna centrada, padding propio y transición de press. */
.ag-period .ag-pb {
  flex-direction: column !important;
  align-items: center !important;
  text-align: center !important;
  gap: 8px !important;
  padding: 12px 6px 11px !important;
  margin-bottom: 0 !important;        /* el .card trae margin-bottom; en grid no aplica */
  opacity: 1 !important;
  cursor: pointer;
  transition: background .15s !important;
}
/* elegida: tinte suave del color del ícono + HUNDIDO 3D (D4 invertido).
   Es el espejo del box-shadow elevado del .card del sistema:
   elevado = 4px 4px 8px var(--neu-d)  →  hundido = inset 4px 4px 8px var(--neu-d)
   (sin el halo blanco — alineado con el cambio en linea 634). */
.ag-period .ag-pb.on {
  box-shadow: inset 4px 4px 8px var(--neu-d) !important;
  border-color: transparent !important;
  outline: none !important;
}
.ag-period .ag-pb[data-p="vencidas"].on { background: rgba(248,113,113,.15) !important; }
.ag-period .ag-pb[data-p="hoy"].on      { background: rgba(217,119,6,.12) !important; }
.ag-period .ag-pb[data-p="proximas"].on { background: rgba(59,130,246,.12) !important; }
.ag-period .ag-pb[data-p="mes"].on      { background: rgba(139,92,246,.12) !important; }
.ag-period .ag-pb.on::after { content: none !important; }
.ag-period .ag-pb.on .ag-pb-l { color: var(--text) !important; }
/* ícono: cuadrado sólido sin sombra */
.ag-period .ag-pb-ic {
  width: 36px !important; height: 36px !important;
  border-radius: 10px !important;
  color: #fff !important;
  box-shadow: none !important;
}
.ag-period .ag-pb-ic svg { width: 18px !important; height: 18px !important; stroke: #fff !important; }
.ag-period .ag-pb[data-p="vencidas"] .ag-pb-ic { background: rgb(248,113,113) !important; }
.ag-period .ag-pb[data-p="hoy"]      .ag-pb-ic { background: rgb(217,119,6) !important; }
.ag-period .ag-pb[data-p="proximas"] .ag-pb-ic { background: rgb(59,130,246) !important; }
.ag-period .ag-pb[data-p="mes"]      .ag-pb-ic { background: rgb(139,92,246) !important; }
/* label + conteo */
.ag-period .ag-pb-l { font-size: var(--fs-sm) !important; font-weight: 800 !important; color: var(--text) !important; }
.ag-period .ag-pb-n { font-size: var(--fs-micro) !important; font-weight: 600 !important; color: var(--text-muted) !important; }

/* ════════════════════════════════════════════════════════════════
   TEMA EDITORIAL · OVERRIDES MASIVOS → ELIMINADOS (Etapa 9 final)
   Los 253 líneas de "parches" se borraron porque la mayoría de
   componentes ya usan tokens del DS (ver migración de 90 hardcoded en
   pages/*.js). Si algo no se ve correcto, migrar el hardcoded del JS
   correspondiente — no agregar overrides de nuevo.
   ════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════
   DASHBOARD (Centro de Control) — fixes específicos
   ════════════════════════════════════════════════════════════════ */

/* Saludo móvil: blanco era invisible sobre ivory → slate-dark */
.dash-saludo-mobile > div {
  color: var(--slate-dark) !important;
}
.dash-saludo-mobile > div:nth-child(2) {
  color: var(--slate-light) !important;
}

/* Meta hero card (frente): espresso cálido que combina con la pantalla ivory/oat.
   Re-scopeamos --text/--muted/--border-strong a crema para que TODO el texto inline
   (título, stats, hint, pista del anillo) se vea claro sobre el fondo oscuro sin
   tocar el JS. El #id con !important gana sobre el flatten global de sombras (L1088). */
#meta-front {
  background: linear-gradient(145deg, #1d1b17, #302d27 58%, #161410) !important;
  box-shadow: var(--shadow-md) !important;
  --text: #faf9f5;
  --muted: rgba(250,249,245,.62);
  --border-strong: rgba(250,249,245,.18);
}

/* Meta back card (reverso del flip): gradient verde claro → ivory editorial */
#meta-back,
[style*="background:linear-gradient(160deg,#e8faf4"] {
  background: linear-gradient(160deg, var(--oat) 0%, var(--ivory-medium) 60%, var(--ivory-light) 100%) !important;
  border-color: rgba(217,119,87,0.2) !important;
}

/* Resumen diario modal header (línea 1493 dashboard.js) — verde oscuro → slate */
[style*="background:linear-gradient(135deg,#0f2027"] {
  background: linear-gradient(135deg, var(--slate-dark), #2a2a26) !important;
}

/* "Ya cobraste/Falta cobrar" colores hardcoded del statsHTML — ya están sobre fondo oscuro, OK */

/* ════════════════════════════════════════════════════════════════
   PÁGINAS GENÉRICAS — overrides extra que afectan a múltiples pantallas
   ════════════════════════════════════════════════════════════════ */

/* Sub-headers de página (saludo en mobile, fecha) que tienen color:#fff inline */
.page > div > [style*="color:#fff"]:not([style*="background"]):not(.topbar *):not(#meta-front *):not(#meta-back *),
.page > div > [style*="color: #fff"]:not([style*="background"]):not(.topbar *):not(#meta-front *):not(#meta-back *) {
  color: var(--slate-dark) !important;
}

/* Cards con border verde claro (var(--accent-lt)) → border clay claro */
[style*="border:1px solid var(--accent)"] {
  border-color: var(--clay) !important;
}

/* Bordes hardcoded de rojo/naranja claros que decoran semánticos — mantener */
/* Nada que hacer aquí — los #fca5a5, #fed7aa, #f87171 son borders deliberados */






/* Tema único Anthropic: ocultar botones de modo oscuro (deshabilitado) */
#dark-mode-btn-sidebar { display:none !important; }

/* ── Manito del saludo "Hola, [usuario] 👋": animación de wave al tocar ── */
.dash-wave-hand { transition: transform .15s; }
.dash-wave-hand:hover { transform: rotate(8deg); }
.dash-wave-hand.is-waving { animation: dashHandWave 1.1s ease-in-out; }
@keyframes dashHandWave {
  0%   { transform: rotate(0deg); }
  15%  { transform: rotate(-18deg); }
  30%  { transform: rotate(20deg); }
  45%  { transform: rotate(-15deg); }
  60%  { transform: rotate(17deg); }
  75%  { transform: rotate(-10deg); }
  90%  { transform: rotate(8deg); }
  100% { transform: rotate(0deg); }
}

/* ── Clientes · modal "Opciones de Clientes" (Importar/Exportar Excel) ── */
.cli-opt-list { display: flex; flex-direction: column; gap: 10px; }
.cli-opt-row {
  display: flex; align-items: center; gap: 13px; width: 100%;
  padding: 13px 14px; border: 0.6px solid var(--border); border-radius: 12px;
  background: var(--card-soft); cursor: pointer; text-align: left;
  transition: border-color .15s, background .15s, transform .08s;
}
.cli-opt-row:hover { border-color: var(--accent); background: var(--card); }
.cli-opt-row:active { transform: scale(.99); }
.cli-opt-ico {
  flex: 0 0 auto; width: 42px; height: 42px; border-radius: 11px;
  display: inline-flex; align-items: center; justify-content: center;
}
.cli-opt-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cli-opt-ttl { font-size: var(--fs-md); font-weight: 700; color: var(--text); }
.cli-opt-sub { font-size: var(--fs-sm); color: var(--muted); line-height: 1.35; }

/* ── Rutas de cobro ── */
.ruta-row {
  display: flex; align-items: center; gap: 12px;
  padding: 13px 4px; border-bottom: 0.6px solid var(--border);
}
.ruta-row:last-child { border-bottom: none; }
.ruta-dot { width: 13px; height: 13px; border-radius: 50%; flex: 0 0 auto; }
.ruta-row-txt { flex: 1; min-width: 0; }
.ruta-row-nom { font-size: var(--fs-md); font-weight: 700; color: var(--text); }
.ruta-row-sub { font-size: var(--fs-sm); color: var(--muted); margin-top: 1px; }
.ruta-act {
  flex: 0 0 auto; width: 34px; height: 34px; border-radius: 9px;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--card-soft); border: 0.6px solid var(--border);
  color: var(--muted); cursor: pointer; transition: color .15s, border-color .15s;
}
.ruta-act:hover { color: var(--accent); border-color: var(--accent); }
.ruta-act-del:hover { color: var(--danger); border-color: var(--danger); }
.ruta-sw-row { display: flex; flex-wrap: wrap; gap: 10px; }
.ruta-sw {
  width: 34px; height: 34px; border-radius: 50%; cursor: pointer;
  border: 2px solid transparent; outline: 0.6px solid var(--border); outline-offset: -0.6px;
  transition: transform .1s;
}
.ruta-sw:active { transform: scale(.92); }
.ruta-sw.sel { border-color: var(--text); outline: none; }

/* ── Barra de selección masiva (Clientes → asignar ruta) ── */
.cli-selbar {
  position: sticky; bottom: 12px; z-index: 5;
  display: flex; align-items: center; gap: 12px;
  margin-top: 12px; padding: 12px 16px;
  background: var(--card); border: 0.6px solid var(--border);
  border-radius: 14px; box-shadow: 0 8px 24px rgba(0,0,0,.14);
}
.cli-selbar-count { font-size: var(--fs-md); font-weight: 700; color: var(--text); }
@media(max-width:768px){
  .cli-selbar { bottom: calc(env(safe-area-inset-bottom) + 78px); }
}

/* ── Cobrador en moto animado de la barra de meta (Centro de Control) ── */
.dash-meta-coin {
  position: absolute; top: 50%;            /* left se setea inline (= % de progreso) */
  width: 26px; height: 26px; border-radius: 50%;
  background: #3b82f6; box-shadow: 0 1px 6px rgba(0,0,0,.35);
  display: flex; align-items: center; justify-content: center;
  color: #fff; z-index: 3;
  transform: translate(-50%, -50%) rotate(-6deg);
  animation: dashMotoIdle 3.2s ease-in-out infinite;
}
.dash-meta-coin svg { width: 16px; height: 16px; }
/* reposo: leve balanceo (suave) */
@keyframes dashMotoIdle {
  0%, 100% { transform: translate(-50%, -50%) rotate(-6deg); }
  50%      { transform: translate(-50%, -58%) rotate(-6deg); }
}
/* cobro: acelerón con caballito (wheelie) y vibración */
.dash-meta-coin.celebrate { animation: dashMotoCele .9s ease-in-out; }
@keyframes dashMotoCele {
  0%   { transform: translate(-50%, -50%) rotate(-6deg);  }
  20%  { transform: translate(-44%, -78%) rotate(-20deg); }
  45%  { transform: translate(-56%, -60%) rotate(-2deg);  }
  70%  { transform: translate(-46%, -74%) rotate(-16deg); }
  100% { transform: translate(-50%, -50%) rotate(-6deg);  }
}

/* ── Tour de onboarding ── */
.tour-overlay { position: fixed; inset: 0; z-index: 3000; }
.tour-hole {
  position: fixed; border-radius: 14px; pointer-events: none;
  box-shadow: 0 0 0 9999px rgba(15,12,9,.72);
  border: 2px solid var(--accent);
  transition: top .25s ease, left .25s ease, width .25s ease, height .25s ease;
}
.tour-tip {
  position: fixed; left: 16px; right: 16px; max-width: 380px; margin: 0 auto;
  background: var(--card); border: 0.6px solid var(--border); border-radius: 16px;
  padding: 16px; z-index: 3001; box-shadow: 0 14px 44px rgba(0,0,0,.34);
}
.tour-tip-ico {
  width: 26px; height: 26px; border-radius: 8px; flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--accent-lt); color: var(--accent);
}
.tour-dots { display: flex; align-items: center; gap: 5px; }
.tour-dot { width: 6px; height: 6px; border-radius: 99px; background: var(--border); transition: all .2s; }
.tour-dot.on { width: 16px; background: var(--accent); }
.tour-skip { background: none; border: none; color: var(--muted); font-size: var(--fs-sm); font-weight: 600; cursor: pointer; padding: 8px 6px; }
.tour-next { background: var(--accent); color: #fff; border: none; font-size: var(--fs-sm); font-weight: 700; cursor: pointer; padding: 9px 16px; border-radius: 99px; }
.tour-next:active { transform: scale(.97); }
