/* =====================================================
   VARIABLES — PALETA NEXA
===================================================== */
:root{
  --bg-main:#080808; --bg-card:#101010; --bg-sidebar:#0c0c0c;
  --bg-sidebar-hover:#1c1c1c; --header-bg:rgba(6,6,6,0.98);
  --gold-primary:#c8a02a; --gold-secondary:#f0d060;
  --text-color:#e8e8e8; --text-muted:#636363;
  --border-color:rgba(255,255,255,0.07); --border-input:rgba(255,255,255,0.08);
  --bg-input:#080808; --text-input:#e8e8e8; --text-placeholder:#444;
  --border-gold:rgba(200,160,42,0.20);
  --active-bg:linear-gradient(90deg,rgba(200,160,42,0.22),rgba(200,160,42,0.08));
  --active-border:#c8a02a; --card-border:rgba(255,255,255,0.07);
  --row-border:rgba(255,255,255,0.04); --row-hover:rgba(255,255,255,0.03);
  --btn-outline-border:rgba(255,255,255,0.12); --btn-outline-text:#e8e8e8;
  --chip-border:rgba(255,255,255,0.1); --chip-text:#888;
  --sidebar-w:260px; --sidebar-compact:85px;
}
body.light{
  --bg-main:#f5f3ef; --bg-card:#fff; --bg-sidebar:#faf7f1;
  --bg-sidebar-hover:#ece4d6; --header-bg:#fff;
  --gold-primary:#9a6a00; --gold-secondary:#7b5300;
  --text-color:#2a2418; --text-muted:#7a6a4d;
  --border-color:rgba(122,90,20,0.15); --border-input:rgba(122,90,20,0.20);
  --bg-input:#f0ece4; --text-input:#2a2418; --text-placeholder:#a0906e;
  --active-bg:linear-gradient(90deg,rgba(154,106,0,0.18),rgba(154,106,0,0.06));
  --active-border:#8a5c00; --card-border:rgba(122,90,20,0.12);
  --row-border:rgba(122,90,20,0.08); --row-hover:rgba(122,90,20,0.04);
  --btn-outline-border:rgba(122,90,20,0.25); --btn-outline-text:#4a3a20;
  --chip-border:rgba(122,90,20,0.20); --chip-text:#7a6a4d;
}

/* =====================================================
   RESET & BASE
===================================================== */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}
html,body{width:100%;height:100%;}
body{font-family:'Segoe UI',sans-serif;background:var(--bg-main);color:var(--text-color);font-size:16px;transition:background .3s,color .3s;}

/* =====================================================
   LOGIN SCREEN
===================================================== */
#login-screen{
  position:fixed;inset:0;z-index:9999;
  background:var(--bg-main);
  display:flex;align-items:center;justify-content:center;
  transition:opacity .4s;
}
#login-screen.oculto{opacity:0;pointer-events:none;}
.login-card{
  background:var(--bg-card);border:1px solid var(--card-border);
  border-radius:22px;padding:44px 40px;width:100%;max-width:420px;
  text-align:center;box-shadow:0 24px 60px rgba(0,0,0,.5);
}
.login-logo-img{display:block;height:64px;width:auto;object-fit:contain;margin:0 auto 14px;}
.login-logo{font-size:2.5rem;font-weight:900;letter-spacing:4px;color:var(--gold-primary);margin-bottom:4px;}
.login-sub{font-size:.7rem;color:var(--text-muted);letter-spacing:2.5px;text-transform:uppercase;margin-bottom:32px;}
.login-field{position:relative;margin-bottom:14px;}
.login-field i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--text-muted);font-size:.9rem;}
.login-field input{
  width:100%;background:var(--bg-input);border:1px solid var(--border-input);
  border-radius:10px;padding:13px 14px 13px 42px;color:var(--text-input);
  font-size:.88rem;outline:none;transition:.2s;
}
.login-field input:focus{border-color:var(--gold-primary);}
.login-field input::placeholder{color:var(--text-placeholder);}
.login-btn{
  width:100%;padding:14px;margin-top:6px;
  background:linear-gradient(135deg,var(--gold-primary),var(--gold-secondary));
  border:none;border-radius:10px;font-size:.95rem;font-weight:700;
  color:#0d0a04;cursor:pointer;transition:.2s;
}
.login-btn:hover{opacity:.9;transform:translateY(-1px);}
.login-forgot{display:block;font-size:.75rem;color:var(--text-muted);margin-top:14px;cursor:pointer;transition:.2s;}
.login-forgot:hover{color:var(--gold-primary);}
.login-error{background:rgba(192,57,43,.12);border:1px solid rgba(192,57,43,.3);color:#e57373;border-radius:8px;padding:9px 14px;font-size:.8rem;margin-top:10px;display:none;}

/* =====================================================
   LAYOUT PRINCIPAL
===================================================== */
#portal{display:none;}
#portal.visible{display:grid;grid-template-rows:70px 1fr;grid-template-columns:var(--sidebar-w) 1fr;height:100vh;transition:grid-template-columns .35s ease;}
/* Estado inicial correcto antes de que app.js corra (ver script inline en <head>) */
html.nexa-sesion-activa #login-screen{display:none;}
html.nexa-sesion-activa #portal{display:grid;grid-template-rows:70px 1fr;grid-template-columns:var(--sidebar-w) 1fr;height:100vh;}
/* Oculta antes del primer pintado los módulos restringidos por rol (evita el
   destello de ver módulos de admin/soporte con roles compraventa/CI). La
   clase nexa-rol-<ROL> la agrega el script inline en <head> decodificando el
   JWT; aplicarRol()/aplicarRestriccionCVInactiva() en app.js vuelven a
   aplicar lo mismo después con la sesión real ya cargada. */
html.nexa-rol-compraventa #mn-compraventas,
html.nexa-rol-compraventa #mn-usuarios,
html.nexa-rol-compraventa #mn-configuracion,
html.nexa-rol-compraventa #mn-auditoria,
html.nexa-rol-compraventa #mod-cv-quick,
html.nexa-rol-compraventa #cv-tabs,
html.nexa-rol-CI #mn-compraventas,
html.nexa-rol-CI #mn-usuarios,
html.nexa-rol-CI #mn-configuracion,
html.nexa-rol-CI #mn-auditoria,
html.nexa-rol-CI #mod-cv-quick,
html.nexa-rol-CI #cv-tabs,
html.nexa-rol-CI #mn-dashboard,
html.nexa-rol-CI #mn-proveedores,
html.nexa-rol-CI #mn-compras,
html.nexa-rol-CI #mn-reportes,
html.nexa-rol-soporte #mn-configuracion
{display:none;}
/* La especificidad debe superar a `html.nexa-sesion-activa #portal` (define el ancho base del
   sidebar): si no, esa regla gana y la barra nunca encoge/oculta aunque se oculten los nombres. */
html.nexa-sesion-activa #portal.compact,
#portal.visible.compact{grid-template-columns:var(--sidebar-compact) 1fr;}
html.nexa-sesion-activa #portal.hidden-sb,
#portal.visible.hidden-sb{grid-template-columns:0px 1fr;}

/* =====================================================
   HEADER
===================================================== */
.header{
  grid-column:1/-1;position:sticky;top:0;height:70px;
  display:flex;align-items:center;padding:0 20px;gap:16px;
  background:var(--header-bg);border-bottom:1px solid var(--border-color);
  backdrop-filter:blur(10px);z-index:1000;
}
.menu-btn{font-size:1.4rem;color:var(--gold-primary);cursor:pointer;background:none;border:none;transition:.3s;padding:6px;}
.menu-btn:hover{color:var(--gold-secondary);transform:scale(1.08);}
.logo{display:flex;align-items:center;gap:10px;margin-left:4px;}
.logo-img{height:40px;width:auto;object-fit:contain;}
.logo-text{font-size:1.2rem;font-weight:800;letter-spacing:2px;color:var(--gold-primary);}
.header-right{margin-left:auto;display:flex;align-items:center;gap:10px;}
.price-badge{display:flex;align-items:center;gap:8px;border:1px solid var(--border-color);border-radius:50px;padding:6px 14px;font-size:.8rem;font-weight:600;color:var(--gold-secondary);}
.pulse{width:8px;height:8px;border-radius:50%;background:var(--gold-secondary);animation:pulse 1.5s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.3;transform:scale(.6);}}
.user-badge{display:flex;align-items:center;gap:8px;border:1px solid var(--border-color);border-radius:50px;padding:6px 14px;font-size:.8rem;cursor:pointer;position:relative;}
.user-badge i{color:var(--gold-primary);}
.role-tag{font-size:.62rem;color:var(--text-muted);background:rgba(200,160,42,.1);border-radius:10px;padding:2px 8px;}
.theme-btn{background:none;border:1px solid var(--border-color);border-radius:50px;padding:6px 14px;color:var(--gold-primary);font-size:.8rem;cursor:pointer;transition:.3s;}
.theme-btn:hover{border-color:var(--gold-primary);color:var(--gold-secondary);}

/* ── Campana de alertas de lotes asignados (rol CI) ── */
.campana-wrap{position:relative;}
.campana-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;
  border-radius:50%;border:1px solid var(--border-color);background:none;color:var(--gold-primary);
  font-size:.95rem;cursor:pointer;position:relative;transition:.2s;}
.campana-btn:hover{border-color:var(--gold-primary);color:var(--gold-secondary);}
.campana-badge{position:absolute;top:-4px;right:-4px;background:#e53935;color:#fff;
  font-size:.62rem;font-weight:700;min-width:16px;height:16px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;padding:0 4px;line-height:1;}
.campana-panel{position:absolute;top:calc(100% + 10px);right:0;width:320px;max-width:90vw;
  background:var(--bg-card);border:1px solid rgba(200,160,42,.25);border-radius:12px;
  box-shadow:0 12px 40px rgba(0,0,0,.45);z-index:1500;max-height:360px;
  display:flex;flex-direction:column;overflow:hidden;}
.campana-panel-header{padding:12px 16px;font-size:.82rem;font-weight:700;color:var(--text-color);
  border-bottom:1px solid var(--row-border);}
.campana-panel-list{overflow-y:auto;max-height:300px;}
.campana-item{display:flex;flex-direction:column;gap:2px;padding:12px 16px;cursor:pointer;
  border-bottom:1px solid var(--row-border);transition:.15s;}
.campana-item:last-child{border-bottom:none;}
.campana-item:hover{background:rgba(200,160,42,.08);}
.campana-item-lote{font-size:.86rem;font-weight:600;color:var(--text-color);}
.campana-item-fecha{font-size:.74rem;color:var(--text-muted);}
.campana-panel-empty{padding:20px 16px;text-align:center;color:var(--text-muted);font-size:.84rem;}

/* =====================================================
   SIDEBAR
===================================================== */
.sidebar{
  background:linear-gradient(180deg,#0c0c0c,#080808);
  border-right:1px solid var(--border-color);
  overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;
  transition:.35s ease;
}
body.light .sidebar{background:linear-gradient(180deg,#faf7f1,#f0eadf);}
.sidebar::-webkit-scrollbar{width:3px;}
.sidebar::-webkit-scrollbar-thumb{background:rgba(200,160,42,.2);}
#portal.hidden-sb .sidebar{overflow:hidden;}

.menu{list-style:none;padding-top:14px;flex:1;}
.menu li{width:100%;}
.menu a{
  display:flex;align-items:center;gap:18px;padding:14px 22px;
  text-decoration:none;color:var(--text-color);border-left:4px solid transparent;
  transition:.3s;cursor:pointer;white-space:nowrap;font-size:.9rem;font-weight:500;
}
.menu a:hover{background:var(--bg-sidebar-hover);border-left:4px solid var(--gold-primary);}
.menu a.active{background:var(--active-bg);border-left:4px solid var(--active-border);box-shadow:inset 0 0 12px rgba(200,160,42,.08);font-weight:600;}
body.light .menu a.active{color:#1d1b16;}
.menu i{min-width:24px;text-align:center;font-size:1.15rem;color:var(--gold-primary);flex-shrink:0;}
.menu a.active i{color:var(--gold-secondary);}
.menu span{white-space:nowrap;overflow:hidden;}
.menu-sep{margin:14px 12px;border-top:1px solid var(--border-color);}
.menu-cat{padding:8px 22px;font-size:.7rem;letter-spacing:1px;text-transform:uppercase;color:var(--text-muted);}
#portal.compact .menu span,.portal.compact .menu-cat{display:none;}
#portal.compact .menu-sep{margin:10px 8px;}
#portal.compact .menu a{justify-content:center;padding:14px 0;}
#portal.compact .menu a gap{gap:0;}

.sidebar-footer{
  padding:10px 0;border-top:1px solid var(--border-color);
  position:sticky;bottom:0;z-index:2;
  background:var(--bg-sidebar);
}
body.light .sidebar-footer{background:var(--bg-sidebar);}
.font-row{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 14px;}
#portal.compact .font-row{display:none;}
.font-btn{
  background:var(--bg-input);border:1px solid var(--border-input);
  color:var(--gold-primary);border-radius:6px;padding:5px 12px;
  font-size:.8rem;cursor:pointer;transition:.2s;font-weight:700;line-height:1;
}
.font-btn:hover{border-color:var(--gold-primary);opacity:.85;}
.font-btn:disabled{opacity:.3;cursor:not-allowed;}
.font-lbl{font-size:.72rem;color:var(--text-muted);min-width:38px;text-align:center;}

/* =====================================================
   MAIN CONTENT
===================================================== */
.main{overflow-y:auto;padding:28px 32px;background:var(--bg-main);transition:.35s;}
.main::-webkit-scrollbar{width:4px;}
.main::-webkit-scrollbar-thumb{background:rgba(200,160,42,.15);}
.view{display:none;animation:fadeIn .3s ease;}
.view.active{display:block;}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
.page-title{font-size:1.3rem;font-weight:700;color:var(--gold-primary);letter-spacing:.5px;margin-bottom:4px;}
.page-sub{font-size:.78rem;color:var(--text-muted);margin-bottom:22px;}

/* =====================================================
   STAT CARDS
===================================================== */
.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;margin-bottom:20px;}
.stat{background:var(--bg-card);border:1px solid var(--card-border);border-radius:16px;padding:18px 16px;position:relative;overflow:hidden;transition:border-color .2s;}
.stat:hover{border-color:rgba(200,160,42,.3);}
.stat::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--gold-primary),transparent);}
.stat-lbl{font-size:.68rem;text-transform:uppercase;letter-spacing:1px;color:var(--text-muted);margin-bottom:8px;}
.stat-val{font-size:1.5rem;font-weight:700;color:var(--text-color);}
.stat-ico{position:absolute;right:14px;top:16px;font-size:1.5rem;color:rgba(200,160,42,.15);}
.stat-chg{font-size:.68rem;margin-top:5px;color:#66bb6a;}

/* =====================================================
   SECTION CARD
===================================================== */
.sc{background:var(--bg-card);border:1px solid var(--card-border);border-radius:16px;padding:20px 22px;margin-bottom:16px;transition:border-color .2s;}
.sc:hover{border-color:rgba(200,160,42,.2);}
.sc-title{font-size:.74rem;font-weight:600;color:var(--gold-primary);text-transform:uppercase;letter-spacing:.8px;margin-bottom:16px;display:flex;align-items:center;gap:8px;}
.cfg-tab-guardar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:4px;margin-bottom:16px;}

/* =====================================================
   TABLA
===================================================== */
.tbl-wrap{overflow-x:auto;}
.tbl{width:100%;border-collapse:collapse;font-size:.8rem;}
.tbl th{padding:9px 10px;text-align:left;color:var(--text-muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.8px;border-bottom:1px solid var(--card-border);}
.tbl td{padding:11px 10px;border-bottom:1px solid var(--row-border);vertical-align:middle;}
.tbl tr:hover td{background:var(--row-hover);}
.tbl-empty{text-align:center;padding:30px;color:var(--text-muted);font-size:.85rem;}
.gv{color:var(--gold-secondary);font-weight:700;}

/* =====================================================
   BADGES
===================================================== */
.bd{display:inline-block;padding:3px 10px;border-radius:12px;font-size:.68rem;font-weight:600;}
.bd-ok{background:rgba(76,175,80,.12);color:#66bb6a;border:1px solid rgba(76,175,80,.25);}
.bd-warn{background:rgba(200,160,42,.12);color:var(--gold-primary);border:1px solid rgba(200,160,42,.25);}
.bd-off{background:rgba(229,115,115,.1);color:#ef9a9a;border:1px solid rgba(229,115,115,.2);}
.bd-info{background:rgba(33,150,243,.1);color:#90caf9;border:1px solid rgba(33,150,243,.25);}
.bd-ci{background:rgba(156,39,176,.12);color:#ce93d8;border:1px solid rgba(156,39,176,.25);}

/* =====================================================
   BOTONES
===================================================== */
.btn{display:inline-flex;align-items:center;gap:8px;padding:9px 18px;border-radius:8px;font-size:.8rem;font-weight:600;cursor:pointer;transition:.2s;border:none;text-decoration:none;}
.btn-gold{background:linear-gradient(135deg,var(--gold-primary),var(--gold-secondary));color:#0d0a04;}
.btn-gold:hover{opacity:.9;transform:translateY(-1px);}
.btn-outline{background:transparent;border:1px solid var(--btn-outline-border);color:var(--btn-outline-text);}
.btn-outline:hover{border-color:var(--gold-primary);color:var(--gold-primary);}
.btn-sm{padding:5px 11px;font-size:.74rem;}
.btn-danger{background:rgba(192,57,43,.15);border:1px solid rgba(192,57,43,.3);color:#e57373;}
.btn-danger:hover{background:rgba(192,57,43,.25);}
.btn-icon{padding:6px 10px;border-radius:6px;}

/* =====================================================
   BÚSQUEDA
===================================================== */
.search-bar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center;}
.search-wrap{position:relative;flex:1;min-width:200px;max-width:360px;}
.search-wrap i{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-muted);font-size:.8rem;}
.search-wrap input{width:100%;background:var(--bg-input);border:1px solid var(--border-input);border-radius:8px;padding:9px 12px 9px 34px;color:var(--text-input);font-size:.8rem;outline:none;transition:.2s;}
.search-wrap input:focus{border-color:var(--gold-primary);}
.search-wrap input::placeholder{color:var(--text-placeholder);}
.search-select{background:var(--bg-input);border:1px solid var(--border-input);border-radius:8px;padding:9px 12px;color:var(--text-input);font-size:.8rem;outline:none;cursor:pointer;}
.search-select:focus{border-color:var(--gold-primary);}

.pager{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:12px;font-size:.82rem;color:var(--text-muted);}

/* =====================================================
   FORMULARIO
===================================================== */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.form-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;}
.form-full{grid-column:1/-1;}
.fg{display:flex;flex-direction:column;gap:6px;}
.fg label{font-size:.68rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.8px;}
.fg input,.fg select,.fg textarea{
  background:var(--bg-input);border:1px solid var(--border-input);border-radius:8px;
  padding:10px 12px;color:var(--text-input);font-size:.85rem;outline:none;transition:.2s;
  font-family:inherit;
}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--gold-primary);}
.fg input::placeholder,.fg textarea::placeholder{color:var(--text-placeholder);}
.fg input:read-only{opacity:.6;cursor:not-allowed;}
.form-actions{display:flex;gap:10px;margin-top:20px;justify-content:flex-end;}

/* ── Botones período del gráfico ── */
.rep-periodo-btn.active{
  border-color:var(--gold-primary) !important;
  background:rgba(200,160,42,.18) !important;
  color:var(--gold-secondary) !important;
  font-weight:700;
}

/* ── Validación de campos obligatorios ── */
.fg.campo-error input,
.fg.campo-error select,
.fg.campo-error textarea{
  border-color:#ef4444 !important;
  box-shadow:0 0 0 3px rgba(239,68,68,.18);
  background:rgba(239,68,68,.04);
}
.fg.campo-error label{color:#f87171;}
.campo-error-msg{
  font-size:.72rem;font-weight:600;color:#f87171;
  display:flex;align-items:center;gap:4px;
  animation:fadeInDown .18s ease;
}
.campo-error-msg i{font-size:.7rem;}
@keyframes fadeInDown{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}

/* =====================================================
   TABS
===================================================== */
.tabs{display:flex;gap:6px;margin-bottom:18px;border-bottom:1px solid var(--border-color);padding-bottom:0;}
.tab-btn{padding:9px 20px;font-size:.82rem;font-weight:600;border:none;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);cursor:pointer;transition:.2s;}
.tab-btn.active{color:var(--gold-primary);border-bottom-color:var(--gold-primary);}
.tab-pane{display:none;}
.tab-pane.active{display:block;}

/* =====================================================
   DOCS CHIPS
===================================================== */
.docs-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}
.doc-chip{display:flex;align-items:center;gap:6px;padding:6px 14px;border:1px solid var(--chip-border);border-radius:20px;font-size:.74rem;cursor:pointer;transition:.2s;color:var(--chip-text);position:relative;}
.doc-chip:hover{border-color:var(--gold-primary);color:var(--gold-primary);}
.doc-chip i{font-size:.74rem;color:var(--gold-primary);}
.doc-chip.uploaded{border-color:rgba(76,175,80,.4);color:#66bb6a;}
.doc-chip.uploaded i{color:#66bb6a;}
.doc-chip input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;}

/* =====================================================
   UPLOAD ZONE
===================================================== */
.upload-zone{border:2px dashed rgba(200,160,42,.25);border-radius:12px;padding:36px;text-align:center;cursor:pointer;transition:.2s;position:relative;}
.upload-zone:hover{border-color:var(--gold-primary);background:rgba(200,160,42,.03);}
.upload-zone i{font-size:2.2rem;color:rgba(200,160,42,.35);margin-bottom:12px;display:block;}
.upload-zone p{font-size:.8rem;color:var(--text-muted);}
.upload-zone input{position:absolute;inset:0;opacity:0;cursor:pointer;}

/* =====================================================
   BIO CARDS
===================================================== */
.bio-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:10px;}
.bio-card{border:2px dashed rgba(200,160,42,.30);border-radius:14px;padding:22px 16px 18px;text-align:center;cursor:pointer;transition:.25s;position:relative;background:transparent;}
.bio-card:hover{border-color:var(--gold-primary);background:rgba(200,160,42,.04);}
.bio-card .bio-icon{font-size:2rem;color:rgba(200,160,42,.45);margin-bottom:10px;transition:.25s;}
.bio-card .bio-label{font-size:.82rem;font-weight:600;color:var(--text-muted);letter-spacing:.4px;transition:.25s;}
.bio-card .bio-filename{font-size:.7rem;color:var(--text-muted);margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;opacity:0;transition:.2s;}
.bio-card input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;}
.bio-card.uploaded{border-color:rgba(76,175,80,.55);border-style:solid;background:rgba(76,175,80,.04);}
.bio-card.uploaded .bio-icon{color:#66bb6a;}
.bio-card.uploaded .bio-label{color:#66bb6a;}
.bio-card.uploaded .bio-filename{opacity:1;color:#66bb6a;}
.bio-card.uploaded .bio-check{display:inline-block;}
.bio-check{display:none;position:absolute;top:10px;right:12px;color:#66bb6a;font-size:.85rem;}
@media(max-width:480px){.bio-grid{grid-template-columns:1fr 1fr;}}

/* =====================================================
   TOGGLE SWITCH (configuración)
===================================================== */
.cfg-toggle{display:inline-flex;align-items:center;gap:12px;cursor:pointer;user-select:none;}
.cfg-toggle input[type=checkbox]{display:none;}
.cfg-toggle-track{width:44px;height:24px;border-radius:12px;background:var(--card-border);transition:background .2s;position:relative;flex-shrink:0;}
.cfg-toggle-track::after{content:'';position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .2s;box-shadow:0 1px 4px rgba(0,0,0,.25);}
.cfg-toggle input:checked ~ .cfg-toggle-track{background:var(--gold-primary);}
.cfg-toggle input:checked ~ .cfg-toggle-track::after{transform:translateX(20px);}
.cfg-toggle-text{font-size:.85rem;color:var(--text-color);line-height:1.4;}

/* =====================================================
   DOC CARDS (pequeño)
===================================================== */
.doc-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-top:10px;}
.doc-card{border:2px dashed rgba(200,160,42,.28);border-radius:10px;padding:14px 8px 12px;text-align:center;cursor:pointer;transition:.22s;position:relative;background:transparent;}
.doc-card:hover{border-color:var(--gold-primary);background:rgba(200,160,42,.04);}
.doc-card .dc-icon{font-size:1.25rem;color:rgba(200,160,42,.5);margin-bottom:7px;transition:.22s;}
.doc-card .dc-label{font-size:.72rem;font-weight:600;color:var(--text-muted);letter-spacing:.3px;line-height:1.2;transition:.22s;}
.doc-card .dc-filename{font-size:.62rem;color:var(--text-muted);margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;opacity:0;transition:.2s;}
.doc-card input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;}
.doc-card.uploaded{border-color:rgba(76,175,80,.5);border-style:solid;background:rgba(76,175,80,.04);}
.doc-card.uploaded .dc-icon{color:#66bb6a;}
.doc-card.uploaded .dc-label{color:#66bb6a;}
.doc-card.uploaded .dc-filename{opacity:1;color:#66bb6a;}
.doc-card.uploaded .dc-check{display:inline-block;}
.dc-check{display:none;position:absolute;top:7px;right:9px;color:#66bb6a;font-size:.75rem;}
.dc-link-btn{position:absolute;top:5px;left:6px;z-index:2;background:transparent;border:none;color:rgba(200,160,42,.6);cursor:pointer;font-size:.72rem;padding:3px;line-height:1;}
.dc-link-btn:hover{color:var(--gold-primary);}
@media(max-width:900px){.doc-grid{grid-template-columns:repeat(3,1fr);}}
@media(max-width:480px){.doc-grid{grid-template-columns:repeat(2,1fr);}}

/* =====================================================
   GRAMOS INDICADOR
===================================================== */
.grams-card{background:var(--bg-card);border:1px solid var(--card-border);border-radius:12px;padding:16px 20px;margin-bottom:16px;}
.grams-title{font-size:.72rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.8px;margin-bottom:10px;}
.grams-row{display:flex;gap:20px;flex-wrap:wrap;}
.gram-item{flex:1;min-width:100px;text-align:center;}
.gram-val{font-size:1.3rem;font-weight:700;color:var(--gold-secondary);}
.gram-lbl{font-size:.7rem;color:var(--text-muted);margin-top:2px;}
.gram-bar-wrap{margin-top:10px;background:rgba(255,255,255,.05);border-radius:20px;height:6px;overflow:hidden;}
.gram-bar{height:100%;border-radius:20px;background:linear-gradient(90deg,var(--gold-primary),var(--gold-secondary));transition:.5s;}

/* =====================================================
   MODAL
===================================================== */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:2000;display:none;align-items:center;justify-content:center;padding:20px;}
.modal-overlay.open{display:flex;}
#modal-doc-preview{z-index:3000;}
.modal{background:var(--bg-card);border:1px solid var(--card-border);border-radius:20px;width:100%;max-width:680px;max-height:90vh;overflow-y:auto;padding:28px 30px;}
.modal::-webkit-scrollbar{width:3px;}
.modal::-webkit-scrollbar-thumb{background:rgba(200,160,42,.2);}
.modal-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;}
.modal-title{font-size:1rem;font-weight:700;color:var(--gold-primary);}
.modal-close{background:none;border:none;color:var(--text-muted);font-size:1.2rem;cursor:pointer;transition:.2s;}
.modal-close:hover{color:var(--text-color);}
.modal-sm{max-width:420px;}

/* =====================================================
   ACCESOS RÁPIDOS DASHBOARD
===================================================== */
.mods{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.mod{background:var(--bg-card);border:1px solid var(--card-border);border-radius:14px;padding:18px 12px;text-align:center;cursor:pointer;transition:.2s;}
.mod:hover{border-color:var(--gold-primary);transform:translateY(-2px);}
.mod i{font-size:1.6rem;color:var(--gold-primary);display:block;margin-bottom:10px;}
.mod-l{font-size:.74rem;font-weight:600;color:var(--text-color);text-transform:uppercase;letter-spacing:.6px;margin-bottom:4px;}
.mod-s{font-size:.68rem;color:var(--text-muted);}

/* =====================================================
   BACKDROP SIDEBAR MÓVIL
===================================================== */
#sb-backdrop{
  display:none;position:fixed;inset:0;z-index:499;
  background:rgba(0,0,0,.55);backdrop-filter:blur(2px);
}
#sb-backdrop.visible{display:block;}

/* =====================================================
   RESPONSIVE — TABLET  (< 1024px)
===================================================== */
@media(max-width:1280px){
  .stats{grid-template-columns:repeat(3,1fr);}}
@media(max-width:1024px){
  .stats{grid-template-columns:repeat(2,1fr);}
  .mods {grid-template-columns:repeat(2,1fr);}
  .form-grid-3{grid-template-columns:1fr 1fr;}
}

/* =====================================================
   RESPONSIVE — MÓVIL  (< 768px)
===================================================== */
@media(max-width:768px){
  #portal.visible,
  #portal.compact,
  #portal.hidden-sb{grid-template-columns:1fr!important;}

  .sidebar{
    position:fixed;top:70px;left:-280px;
    width:260px!important;height:calc(100vh - 70px);
    z-index:500;transition:.3s ease;box-shadow:none;
  }
  .sidebar.mobile-open{left:0;box-shadow:6px 0 24px rgba(0,0,0,.4);}

  .header{padding:0 14px;gap:10px;}
  .logo-text{display:none;}
  .price-badge{padding:5px 10px;gap:6px;}
  #precio-hora{display:none;}
  .user-badge{padding:5px 10px;gap:6px;}
  .role-tag{display:none;}
  .theme-btn{padding:5px 10px;}
  .campana-btn{width:32px;height:32px;}
  .campana-panel{position:fixed;top:64px;right:10px;left:10px;width:auto;}

  .main{padding:14px;}
  .stats{grid-template-columns:repeat(2,1fr);gap:10px;}
  .mods {grid-template-columns:repeat(2,1fr);gap:10px;}
  .form-grid,.form-grid-3{grid-template-columns:1fr;}
  .sc{padding:16px 14px;}
  .grams-row{gap:10px;}

  .search-bar{flex-direction:column;align-items:stretch;}
  .search-wrap{max-width:100%;}
  .search-select{width:100%;}

  .modal-overlay{padding:0;align-items:flex-end;}
  .modal{border-radius:20px 20px 0 0;max-height:92vh;max-width:100%;}
  .modal.modal-sm{max-width:100%;}

  .tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .tbl{min-width:520px;}

  .login-card{padding:32px 24px;border-radius:16px;}

  /* Evita el auto-zoom de iOS/Safari al enfocar un campo (requiere font-size >= 16px) */
  input,select,textarea{font-size:16px!important;}
}

/* =====================================================
   RESPONSIVE — MÓVIL PEQUEÑO  (< 480px)
===================================================== */
@media(max-width:480px){
  .stats{grid-template-columns:1fr;}
  .mods {grid-template-columns:1fr;}
  .header{height:60px;padding:0 12px;}
  .sidebar{top:60px;height:calc(100vh - 60px);}
  #portal.visible{grid-template-rows:60px 1fr;}
  .main{padding:12px;}
  .page-title{font-size:1.1rem;}
  .stat-val{font-size:1.25rem;}

  .tbl .hide-xs{display:none;}
  .btn-icon span{display:none;}
  .price-badge .fa-coins{display:none;}
}

/* =====================================================
   DETALLE PROVEEDOR — VISTA VISUAL
===================================================== */
.prov-detail{display:flex;flex-direction:column;gap:18px;}

.prov-header{
  display:flex;align-items:center;gap:18px;
  background:linear-gradient(135deg,rgba(200,160,42,.12),rgba(200,160,42,.04));
  border:1px solid rgba(200,160,42,.25);border-radius:16px;padding:22px 24px;
}
.prov-avatar{
  width:64px;height:64px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,var(--gold-primary),var(--gold-secondary));
  display:flex;align-items:center;justify-content:center;
  font-size:1.6rem;font-weight:800;color:#0d0a04;
}
.prov-header-info{flex:1;min-width:0;}
.prov-header-name{font-size:1.15rem;font-weight:700;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.prov-header-doc{font-size:.8rem;color:var(--gold-primary);font-weight:600;margin-top:3px;}
.prov-header-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;}
.prov-badge{font-size:.68rem;padding:3px 10px;border-radius:20px;font-weight:600;}
.prov-badge.activo{background:rgba(102,187,106,.15);color:#66bb6a;border:1px solid rgba(102,187,106,.3);}
.prov-badge.inactivo{background:rgba(239,83,80,.12);color:#ef9a9a;border:1px solid rgba(239,83,80,.25);}
.prov-badge.tipo{background:rgba(200,160,42,.12);color:var(--gold-secondary);border:1px solid rgba(200,160,42,.2);}

.prov-sections{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.prov-section{background:var(--bg-main);border:1px solid var(--card-border);border-radius:14px;padding:16px 18px;}
.prov-section-title{font-size:.68rem;text-transform:uppercase;letter-spacing:1px;color:var(--gold-primary);font-weight:700;margin-bottom:12px;display:flex;align-items:center;gap:7px;}
.prov-field{display:flex;flex-direction:column;margin-bottom:10px;}
.prov-field:last-child{margin-bottom:0;}
.prov-label{font-size:.68rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:2px;}
.prov-value{font-size:.85rem;color:var(--text-color);font-weight:500;}

.prov-gnes{grid-column:1/-1;background:linear-gradient(135deg,rgba(200,160,42,.08),rgba(200,160,42,.02));border:1px solid rgba(200,160,42,.2);border-radius:14px;padding:16px 18px;}
.prov-gnes-dates{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-top:10px;}
.prov-gnes-item{text-align:center;background:var(--bg-card);border-radius:10px;padding:12px 8px;border:1px solid var(--card-border);}
.prov-gnes-val{font-size:.9rem;font-weight:700;color:var(--gold-secondary);}
.prov-gnes-lbl{font-size:.65rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-top:4px;}

.prov-gramos-bar{margin-top:8px;}
.prov-gramos-num{font-size:1.5rem;font-weight:800;color:var(--gold-primary);}
.prov-gramos-unit{font-size:.8rem;color:var(--text-muted);margin-left:4px;}

.prov-actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;}

/* Botones de acción del detalle */
.btn-print{background:rgba(255,255,255,.07);border:1px solid var(--border-color);color:var(--text-color);border-radius:10px;padding:9px 18px;font-size:.82rem;cursor:pointer;display:flex;align-items:center;gap:8px;transition:.2s;}
.btn-print:hover{border-color:var(--gold-primary);color:var(--gold-primary);}
.btn-pdf{background:rgba(239,83,80,.12);border:1px solid rgba(239,83,80,.3);color:#ef9a9a;border-radius:10px;padding:9px 18px;font-size:.82rem;cursor:pointer;display:flex;align-items:center;gap:8px;transition:.2s;}
.btn-pdf:hover{background:rgba(239,83,80,.2);}

/* =====================================================
   PRINT — FICHA DE PROVEEDOR
===================================================== */
@media print {
  @page { size: A4 portrait; margin: 12mm; }
  html, body { height: auto !important; overflow: visible !important; background: #fff !important; }
  /* Ocultar TODO menos el área de impresión (display:none libera el espacio → sin páginas en blanco) */
  body > *:not(#print-area) { display: none !important; }
  #print-area {
    display: block !important;
    position: static; width: 100%;
    background: white; color: #111; padding: 0;
    font-family: 'Segoe UI', sans-serif;
  }
  .print-logo { font-size: 1.4rem; font-weight: 900; letter-spacing: 3px; color: #9a6a00; margin-bottom: 4px; }
  .print-subtitle { font-size: .75rem; color: #888; letter-spacing: 1.5px; text-transform: uppercase; margin-bottom: 24px; border-bottom: 2px solid #c8a02a; padding-bottom: 12px; }
  .print-nombre { font-size: 1.3rem; font-weight: 700; color: #111; margin-bottom: 4px; }
  .print-doc { font-size: .85rem; color: #9a6a00; font-weight: 600; margin-bottom: 20px; }
  .print-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 32px; margin-bottom: 20px; }
  .print-field { margin-bottom: 8px; }
  .print-lbl { font-size: .65rem; text-transform: uppercase; letter-spacing: .5px; color: #888; }
  .print-val { font-size: .85rem; color: #111; font-weight: 500; }
  .print-section-title { font-size: .7rem; text-transform: uppercase; letter-spacing: 1px; color: #9a6a00; font-weight: 700; margin: 16px 0 8px; border-bottom: 1px solid #ddd; padding-bottom: 4px; }
  .print-footer { margin-top: 32px; font-size: .65rem; color: #aaa; text-align: center; border-top: 1px solid #eee; padding-top: 12px; }
  /* Comprobante en impresión: una sola hoja, sin cortes */
  .comprobante { color: #111 !important; background: #fff !important; page-break-inside: avoid; break-inside: avoid; padding: 0 !important; }
  .comprobante * { background: transparent !important; }
  .cmp-firma-img { background: #fff !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .cmp-logo, .cmp-numero strong { color: #9a6a00 !important; }
  .cmp-total td { background: #f3e9c9 !important; color: #6b4e00 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}

/* =====================================================
   COMPROBANTE DE COMPRA
===================================================== */
.comprobante{
  font-family:'Segoe UI',sans-serif;color:var(--text-color);
  background:var(--bg-main);border-radius:12px;padding:6px 4px;
}
.cmp-header{text-align:center;border-bottom:2px solid var(--gold-primary);padding-bottom:14px;margin-bottom:16px;}
.cmp-logo{font-size:1.8rem;font-weight:900;letter-spacing:5px;color:var(--gold-primary);}
.cmp-sub{font-size:.72rem;text-transform:uppercase;letter-spacing:2px;color:var(--text-muted);margin-top:4px;}
.cmp-numero{
  display:flex;justify-content:space-between;align-items:center;
  background:rgba(200,160,42,.1);border:1px solid rgba(200,160,42,.3);
  border-radius:8px;padding:10px 14px;margin-bottom:16px;
}
.cmp-numero span{font-size:.7rem;text-transform:uppercase;letter-spacing:1px;color:var(--text-muted);}
.cmp-numero strong{font-size:1rem;color:var(--gold-secondary);font-family:monospace;}
.cmp-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 20px;margin-bottom:16px;}
.cmp-field span{display:block;font-size:.62rem;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:2px;}
.cmp-field div{font-size:.86rem;font-weight:600;color:var(--text-color);}
.cmp-table{width:100%;border-collapse:collapse;margin-bottom:18px;}
.cmp-table td{padding:9px 12px;border-bottom:1px solid var(--border-color);font-size:.86rem;}
.cmp-table .cmp-num{text-align:right;font-variant-numeric:tabular-nums;}
.cmp-total td{
  background:rgba(200,160,42,.14);font-weight:800;font-size:1rem;
  color:var(--gold-secondary);border-top:2px solid var(--gold-primary);border-bottom:none;
}
.cmp-firmas{display:flex;gap:40px;margin:28px 0 14px;align-items:flex-end;}
.cmp-firma{flex:1;text-align:center;font-size:.72rem;color:var(--text-muted);display:flex;flex-direction:column;align-items:center;}
.cmp-linea{border-top:1px solid var(--text-muted);margin-bottom:6px;height:46px;width:100%;}
.cmp-firma-img{max-height:60px;max-width:170px;object-fit:contain;margin-bottom:4px;border-bottom:1px solid var(--text-muted);padding:4px 6px;background:#fff;border-radius:4px;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
.cmp-firma-lbl{display:block;}
.cmp-footer{text-align:center;font-size:.62rem;color:var(--text-muted);border-top:1px solid var(--border-color);padding-top:10px;}

/* =====================================================
   TOOLTIP PERSONALIZADO — PRECIO ORO
===================================================== */
#oro-tooltip{
  display:none;position:fixed;z-index:9999;
  background:var(--bg-card);border:1px solid rgba(200,160,42,.35);
  border-radius:14px;padding:16px 18px;min-width:290px;max-width:340px;
  box-shadow:0 12px 40px rgba(0,0,0,.5);
  font-size:.78rem;line-height:1.55;color:var(--text-color);
  pointer-events:none;
}
#oro-tooltip.visible{display:block;}
.ot-titulo{font-size:.82rem;font-weight:700;color:var(--gold-primary);margin-bottom:8px;}
.ot-sep{border:none;border-top:1px solid rgba(200,160,42,.2);margin:10px 0;}
.ot-fila{display:flex;justify-content:space-between;gap:16px;margin-bottom:4px;}
.ot-lbl{color:var(--text-muted);}
.ot-val{font-weight:600;color:var(--text-color);}
.ot-subtitulo{font-size:.7rem;text-transform:uppercase;letter-spacing:.8px;color:var(--gold-primary);margin:8px 0 6px;}
.ot-fuente{display:flex;align-items:center;justify-content:space-between;
  padding:7px 10px;border-radius:8px;margin-bottom:5px;
  border:1px solid var(--border-color);}
.ot-fuente.activa{background:rgba(200,160,42,.1);border-color:rgba(200,160,42,.3);}
.ot-fuente-nombre{font-weight:600;font-size:.76rem;}
.ot-fuente-precio{font-size:.76rem;color:var(--gold-secondary);font-weight:700;}
.ot-fuente-g{font-size:.68rem;color:var(--text-muted);}
.ot-check{color:var(--gold-primary);font-size:.7rem;margin-left:6px;}

/* =====================================================
   BUSCADOR PROVEEDOR — AUTOCOMPLETE COMPRAS
===================================================== */
.prov-search-wrap{position:relative;}
.prov-search-input{width:100%;background:var(--bg-input);border:1px solid var(--border-input);
  border-radius:10px;padding:12px 14px 12px 42px;color:var(--text-input);font-size:.9rem;
  outline:none;transition:.2s;}
.prov-search-input:focus{border-color:var(--gold-primary);box-shadow:0 0 0 3px rgba(200,160,42,.12);}
.prov-search-input::placeholder{color:var(--text-placeholder);}
.prov-search-ico{position:absolute;left:14px;top:50%;transform:translateY(-50%);
  color:var(--text-muted);font-size:.9rem;pointer-events:none;}
.prov-search-clear{position:absolute;right:12px;top:50%;transform:translateY(-50%);
  background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:.85rem;
  display:none;padding:4px;}
.prov-search-clear:hover{color:var(--gold-primary);}

.prov-dropdown{
  position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:500;
  background:var(--bg-card);border:1px solid rgba(200,160,42,.25);
  border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.45);
  max-height:320px;overflow-y:auto;display:none;
}
.prov-dropdown.open{display:block;}
.prov-dropdown::-webkit-scrollbar{width:4px;}
.prov-dropdown::-webkit-scrollbar-thumb{background:rgba(200,160,42,.2);border-radius:4px;}

.prov-dd-item{
  display:flex;align-items:center;gap:14px;padding:12px 16px;
  cursor:pointer;border-bottom:1px solid var(--row-border);transition:.15s;
}
.prov-dd-item:last-child{border-bottom:none;}
.prov-dd-item:hover,.prov-dd-item.focused{background:rgba(200,160,42,.08);}
.prov-dd-avatar{
  width:36px;height:36px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,var(--gold-primary),var(--gold-secondary));
  display:flex;align-items:center;justify-content:center;
  font-size:.75rem;font-weight:800;color:#0d0a04;
}
.prov-dd-info{flex:1;min-width:0;}
.prov-dd-nombre{font-size:.86rem;font-weight:600;color:var(--text-color);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.prov-dd-doc{font-size:.74rem;color:var(--text-muted);margin-top:2px;}
.prov-dd-muni{font-size:.72rem;color:var(--gold-primary);margin-top:1px;}

.prov-dd-empty{padding:18px 16px;text-align:center;color:var(--text-muted);font-size:.84rem;}
.prov-dd-loading{padding:16px;text-align:center;color:var(--text-muted);font-size:.82rem;}

.prov-seleccionado{
  display:flex;align-items:center;gap:14px;padding:14px 16px;
  background:rgba(200,160,42,.08);border:1px solid rgba(200,160,42,.25);
  border-radius:12px;margin-top:14px;
}
.prov-sel-info{flex:1;}
.prov-sel-nombre{font-size:.92rem;font-weight:700;color:var(--text-color);}
.prov-sel-doc{font-size:.78rem;color:var(--text-muted);margin-top:3px;}
.prov-sel-cambiar{background:none;border:1px solid var(--border-color);color:var(--text-muted);
  border-radius:8px;padding:6px 12px;font-size:.75rem;cursor:pointer;transition:.2s;white-space:nowrap;}
.prov-sel-cambiar:hover{border-color:var(--gold-primary);color:var(--gold-primary);}

/* =====================================================
   LISTAS DE CONTROL — Tarjeta proveedor seleccionado
===================================================== */
.listas-contact-card{
  display:flex;align-items:center;gap:20px;
  padding:20px 22px;border-radius:16px;
  background:linear-gradient(135deg,rgba(200,160,42,.1) 0%,rgba(200,160,42,.04) 100%);
  border:1px solid rgba(200,160,42,.35);
  border-left:4px solid var(--gold-primary);
  box-shadow:0 4px 24px rgba(200,160,42,.08);
  position:relative;overflow:hidden;
}
.listas-contact-card::before{
  content:'';position:absolute;top:-40px;right:-40px;
  width:120px;height:120px;border-radius:50%;
  background:radial-gradient(circle,rgba(200,160,42,.12) 0%,transparent 70%);
  pointer-events:none;
}
.listas-avatar{
  width:60px;height:60px;min-width:60px;border-radius:50%;
  background:linear-gradient(135deg,var(--gold-primary),var(--gold-secondary));
  display:flex;align-items:center;justify-content:center;
  font-size:1.3rem;font-weight:800;color:#000;
  box-shadow:0 4px 14px rgba(200,160,42,.35);
  flex-shrink:0;
}
.listas-contact-info{flex:1;min-width:0;}
.listas-contact-nombre{font-size:1rem;font-weight:700;color:var(--text-color);margin-bottom:4px;}
.listas-contact-badges{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;}
.listas-badge{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:600;
  background:rgba(255,255,255,.06);border:1px solid var(--border-color);
  color:var(--text-muted);
}
.listas-badge.gold{background:rgba(200,160,42,.12);border-color:rgba(200,160,42,.3);color:var(--gold-secondary);}
.listas-badge.green{background:rgba(74,222,128,.1);border-color:rgba(74,222,128,.25);color:#4ade80;}
.listas-contact-cambiar{
  background:none;border:1px solid rgba(200,160,42,.3);
  color:var(--gold-secondary);border-radius:10px;
  padding:8px 16px;font-size:.78rem;font-weight:600;
  cursor:pointer;transition:.2s;white-space:nowrap;display:flex;align-items:center;gap:6px;
}
.listas-contact-cambiar:hover{background:rgba(200,160,42,.12);border-color:var(--gold-primary);}

/* =====================================================
   MODAL VISTA PREVIA DE DOCUMENTO
===================================================== */
.preview-body-img{
  display:flex;align-items:center;justify-content:center;
  padding:8px;background:var(--bg-main);border-radius:8px;
  min-height:300px;
}
.preview-body-img img{
  max-width:100%;max-height:70vh;object-fit:contain;
  border-radius:6px;display:block;
}
.preview-body-pdf{
  width:100%;height:72vh;border:none;border-radius:8px;
  background:var(--bg-main);display:block;
}
.preview-no-soporte{
  text-align:center;padding:40px 20px;color:var(--text-muted);
}
.preview-no-soporte i{font-size:2.5rem;color:var(--gold-primary);margin-bottom:12px;}

/* =====================================================
   TARJETA GRAMOS — COMPRAS
===================================================== */
.gramos-card{
  background:var(--bg-main);border:1px solid var(--card-border);
  border-radius:14px;padding:18px 20px;margin-top:14px;
}
.gramos-card-title{font-size:.72rem;text-transform:uppercase;letter-spacing:.8px;
  color:var(--gold-primary);font-weight:700;margin-bottom:14px;
  display:flex;align-items:center;gap:7px;}
.gramos-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px;}
.gramos-item{text-align:center;background:var(--bg-card);border-radius:10px;
  padding:12px 8px;border:1px solid var(--card-border);}
.gramos-item.disponible{border-color:rgba(102,187,106,.35);background:rgba(102,187,106,.06);}
.gramos-item.disponible .gramos-val{color:#66bb6a;}
.gramos-item.agotado{border-color:rgba(239,83,80,.35);background:rgba(239,83,80,.06);}
.gramos-item.agotado .gramos-val{color:#ef9a9a;}
.gramos-val{font-size:1.2rem;font-weight:800;color:var(--gold-primary);}
.gramos-lbl{font-size:.65rem;color:var(--text-muted);text-transform:uppercase;
  letter-spacing:.5px;margin-top:4px;}
.gramos-bar-wrap{
  height:10px;background:rgba(255,255,255,.06);border-radius:20px;
  overflow:hidden;border:1px solid var(--card-border);
  position:relative;
}
.gramos-bar-fill{
  height:100%;border-radius:20px;
  transition:width .9s cubic-bezier(.4,0,.2,1);
  position:relative;overflow:hidden;
  /* Degradado termómetro: el background-size se calcula en JS para que
     el degradado siempre abarque el 100% del track, no el 100% del fill.
     Así a 30% de llenado se ve verde-amarillo, a 70% verde-naranja, etc. */
  background:linear-gradient(90deg,
    #2e7d32 0%,
    #43a047 12%,
    #7cb342 25%,
    #c6cc33 38%,
    #fdd835 50%,
    #ffa000 63%,
    #fb8c00 74%,
    #e53935 87%,
    #b71c1c 100%
  );
  background-position:0% 0%;
  animation:gramosPulse 2.5s ease-in-out infinite;
}
@keyframes gramosPulse{
  0%,100%{ filter:brightness(1)   drop-shadow(0 0 0px transparent); }
  50%    { filter:brightness(1.18) drop-shadow(0 0 4px rgba(255,220,100,.35)); }
}
/* Brillo deslizante tipo lente sobre la barra */
.gramos-bar-fill::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(90deg,
    transparent 0%,
    rgba(255,255,255,.30) 45%,
    rgba(255,255,255,.08) 55%,
    transparent 100%
  );
  background-size:55% 100%;
  animation:gramosShine 2.2s ease-in-out infinite;
}
@keyframes gramosShine{
  0%  { background-position:-55% 0; }
  100%{ background-position:165% 0; }
}
.gramos-bar-lbl{display:flex;justify-content:space-between;font-size:.68rem;
  color:var(--text-muted);margin-top:6px;}

/* =====================================================
   LOTES
===================================================== */
.lote-badge{
  display:inline-flex;align-items:center;gap:5px;
  padding:4px 10px;border-radius:8px;font-size:.78rem;font-weight:700;
  background:rgba(200,160,42,.12);color:var(--gold-primary);
  border:1px solid rgba(200,160,42,.25);
}
.lote-badge i{font-size:.72rem;}
.lote-preview-box{
  background:linear-gradient(135deg,rgba(200,160,42,.08),rgba(200,160,42,.04));
  border:1px solid rgba(200,160,42,.25);border-radius:14px;
  padding:20px;text-align:center;margin-top:8px;
}
/* Comprobante de lote */
.cmpl-header{text-align:center;margin-bottom:18px;padding-bottom:14px;border-bottom:2px solid var(--gold-primary);}
.cmpl-logo{font-size:1.8rem;font-weight:900;letter-spacing:3px;color:var(--gold-primary);}
.cmpl-sub{font-size:.78rem;color:var(--text-muted);letter-spacing:1.5px;text-transform:uppercase;margin-top:4px;}
.cmpl-numero{
  display:flex;align-items:center;justify-content:space-between;
  background:linear-gradient(90deg,rgba(200,160,42,.12),rgba(200,160,42,.05));
  border:1px solid var(--border-gold);border-radius:10px;
  padding:12px 18px;margin-bottom:14px;
}
.cmpl-numero span{font-size:.8rem;color:var(--text-muted);}
.cmpl-numero strong{font-size:1.2rem;color:var(--gold-primary);}
.cmpl-cv-grid{
  display:grid;grid-template-columns:repeat(2,1fr);gap:8px;
  margin-bottom:14px;
}
.cmpl-cv-field span{font-size:.68rem;color:var(--text-muted);display:block;margin-bottom:2px;}
.cmpl-cv-field div{font-size:.82rem;font-weight:600;}
/* table-layout:fixed + porcentajes explícitos por columna (nth-child) — determinista en
   cualquier navegador, a diferencia de "auto" (que concentraba todo el espacio sobrante en
   una sola columna de forma impredecible). La tabla siempre llena el 100% del contenedor
   (pantalla) o de la hoja (impresión/descarga), sin espacio vacío ni columnas infladas. */
.cmpl-table{width:100%;table-layout:fixed;border-collapse:collapse;margin:14px 0;font-size:.8rem;}
.cmpl-table th{background:rgba(200,160,42,.12);padding:8px 10px;text-align:left;font-weight:700;font-size:.72rem;color:var(--gold-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cmpl-table td{padding:7px 10px;border-bottom:1px solid var(--row-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cmpl-table .cmpl-num{text-align:right;font-variant-numeric:tabular-nums;}
.cmpl-table tfoot td{font-weight:700;background:rgba(200,160,42,.07);border-top:2px solid var(--gold-primary);}
/* Columnas 1-6: #, Proveedor, G. Brutos, Ley, G. Finos, Valor Total. Las 10 columnas de
   documentos (9 + ANM) comparten 5% cada una vía .cmpl-doc-col. Suma total: 100%. */
.cmpl-table th:nth-child(1),.cmpl-table td:nth-child(1){width:2%;}
.cmpl-table th:nth-child(2),.cmpl-table td:nth-child(2){width:20%;}
.cmpl-table th:nth-child(3),.cmpl-table td:nth-child(3){width:7%;}
.cmpl-table th:nth-child(4),.cmpl-table td:nth-child(4){width:5%;}
.cmpl-table th:nth-child(5),.cmpl-table td:nth-child(5){width:7%;}
.cmpl-table th:nth-child(6),.cmpl-table td:nth-child(6){width:9%;}
.cmpl-table .cmpl-doc-col{width:5%;}
.cmpl-footer{text-align:center;font-size:.68rem;color:var(--text-muted);margin-top:16px;padding-top:12px;border-top:1px solid var(--border-color);}
.cmpl-doc-btns{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px;}
.cmpl-doc-btn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:6px;background:rgba(200,160,42,.12);color:var(--gold-primary);font-size:.72rem;border:1px solid rgba(200,160,42,.25);transition:background .15s;}
.cmpl-doc-btn:hover{background:rgba(200,160,42,.28);}
@media print{
  .cmpl-footer{color:#888;}
  .cmpl-table th{background:#f0d060!important;color:#0d0a04!important;}
  .cmpl-table tfoot td{background:#fdf5dc!important;}
  .no-print{display:none!important;}
  /* Sin las 10 columnas de documentos (ocultas por .no-print), las 6 restantes deben
     repartirse el 100% de la hoja entre ellas — mismos porcentajes relativos, escalados. */
  .cmpl-table th:nth-child(1),.cmpl-table td:nth-child(1){width:4%;}
  .cmpl-table th:nth-child(2),.cmpl-table td:nth-child(2){width:38%;}
  .cmpl-table th:nth-child(3),.cmpl-table td:nth-child(3){width:14%;}
  .cmpl-table th:nth-child(4),.cmpl-table td:nth-child(4){width:10%;}
  .cmpl-table th:nth-child(5),.cmpl-table td:nth-child(5){width:14%;}
  .cmpl-table th:nth-child(6),.cmpl-table td:nth-child(6){width:20%;}
}

/* =====================================================
   NEXABOT — Widget de chat
===================================================== */
.nexabot-fab{
  position:fixed;right:24px;bottom:24px;z-index:10000;
  width:56px;height:56px;border-radius:50%;border:none;cursor:pointer;
  background:linear-gradient(135deg,var(--gold-secondary),var(--gold-primary));
  color:#0d0a04;font-size:1.4rem;box-shadow:0 8px 24px rgba(0,0,0,.35);
  display:flex;align-items:center;justify-content:center;transition:transform .2s;
}
.nexabot-fab:hover{transform:scale(1.06);}
.nexabot-panel{
  position:fixed;right:24px;bottom:92px;z-index:10000;
  width:340px;max-width:calc(100vw - 32px);height:480px;max-height:calc(100vh - 140px);
  background:var(--bg-card);border:1px solid var(--card-border);border-radius:16px;
  box-shadow:0 20px 50px rgba(0,0,0,.45);display:none;flex-direction:column;overflow:hidden;
}
.nexabot-panel.open{display:flex;}
.nexabot-hdr{
  display:flex;align-items:center;justify-content:space-between;padding:14px 16px;
  background:linear-gradient(135deg,var(--gold-secondary),var(--gold-primary));color:#0d0a04;
}
.nexabot-hdr-title{font-weight:800;letter-spacing:.3px;display:flex;align-items:center;gap:8px;}
.nexabot-close{background:none;border:none;color:#0d0a04;font-size:1rem;cursor:pointer;opacity:.75;}
.nexabot-close:hover{opacity:1;}
.nexabot-mensajes{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:10px;}
.nexabot-msg{max-width:85%;padding:9px 12px;border-radius:12px;font-size:.82rem;line-height:1.4;white-space:pre-wrap;word-break:break-word;}
.nexabot-msg.bot{align-self:flex-start;background:var(--bg-sidebar-hover);color:var(--text-color);border-bottom-left-radius:2px;}
.nexabot-msg.usuario{align-self:flex-end;background:var(--gold-primary);color:#0d0a04;border-bottom-right-radius:2px;}
.nexabot-msg.cargando{align-self:flex-start;color:var(--text-muted);font-style:italic;}
.nexabot-msg a{color:inherit;text-decoration:underline;font-weight:600;}
.nexabot-msg.usuario a{color:#0d0a04;}
.nexabot-msg.bot a{color:var(--gold-primary);}
.nexabot-input-wrap{display:flex;gap:8px;padding:12px;border-top:1px solid var(--card-border);}
.nexabot-input-wrap input{
  flex:1;background:var(--bg-input);color:var(--text-input);border:1px solid var(--border-input);
  border-radius:20px;padding:9px 14px;font-size:.82rem;outline:none;
}
.nexabot-input-wrap button{
  width:38px;height:38px;border-radius:50%;border:none;cursor:pointer;flex-shrink:0;
  background:var(--gold-primary);color:#0d0a04;display:flex;align-items:center;justify-content:center;
}
@media (max-width:480px){
  .nexabot-panel{right:16px;bottom:86px;}
  .nexabot-fab{right:16px;bottom:16px;}
}
