﻿:root{--bg:#f4f7fb;--panel:#fff;--text:#172033;--muted:#697386;--primary:#0f5bd7;--primary2:#0a46aa;--border:#e3e8ef;--ok:#15925f;--warn:#d98200;--danger:#c93f3f;--sidebar:#0b1730;--soft:#f8fafc}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,"Segoe UI",Arial,sans-serif;background:var(--bg);color:var(--text)}button,input,select,textarea{font:inherit}a{text-decoration:none;color:inherit}
.app{display:grid;grid-template-columns:285px 1fr;min-height:100vh}.sidebar{background:var(--sidebar);color:#fff;height:100vh;position:sticky;top:0;overflow:auto;padding:17px 13px}.brand{display:flex;gap:11px;align-items:center;padding:7px 10px 20px}.brandmark{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,#69a8ff,#0f5bd7);display:grid;place-items:center;font-weight:800}.brand small{display:block;color:#91a7d1;margin-top:2px}.group{border-top:1px solid rgba(255,255,255,.08)}.group-head{width:100%;border:0;background:transparent;color:#e4ecff;display:flex;justify-content:space-between;align-items:center;padding:11px 10px;cursor:pointer;font-weight:700}.group-head:hover{background:#142b52;border-radius:9px}.group-head span:first-child{display:flex;gap:9px;align-items:center}.arrow{transition:.2s}.group.open .arrow{transform:rotate(180deg)}.submenu{display:none;padding:0 6px 8px 34px}.group.open .submenu{display:block}.submenu a{display:block;width:100%;text-align:left;border:0;background:transparent;color:#b9c9ea;padding:7px;border-radius:7px;font-size:12.5px;cursor:pointer}.submenu a:hover,.submenu a.active{background:#173560;color:#fff}.main{min-width:0}.topbar{height:66px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:20}.top-title{font-weight:700}.crumb{font-size:12px;color:var(--muted);margin-left:12px}.user{display:flex;align-items:center;gap:12px;color:#667085;font-size:13px}.avatar{width:34px;height:34px;border-radius:50%;background:#dbeafe;color:#1d4ed8;display:grid;place-items:center;font-weight:700}.content{padding:23px}.page-title{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:17px}.page-title h1{font-size:25px;margin:0 0 5px}.page-title p{margin:0;color:var(--muted);font-size:13px}.btn{display:inline-block;border:1px solid var(--border);background:#fff;color:var(--text);padding:9px 14px;border-radius:8px;cursor:pointer}.btn:hover{filter:brightness(.98)}.btn.primary,.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.success,.btn-success{background:var(--ok);border-color:var(--ok);color:#fff}.btn.danger,.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.toolbar{display:flex;gap:8px;flex-wrap:wrap}.grid{display:grid;gap:15px}.cards{grid-template-columns:repeat(5,minmax(0,1fr))}.two{grid-template-columns:1.2fr .8fr}.three{grid-template-columns:repeat(3,1fr)}.card{background:#fff;border:1px solid var(--border);border-radius:13px;padding:17px;box-shadow:0 3px 13px rgba(20,40,70,.04)}.kpi .label{color:var(--muted);font-size:13px}.kpi .value{font-size:27px;font-weight:800;margin:7px 0}.kpi .delta{font-size:12px;color:var(--ok)}.chart{height:220px;display:flex;align-items:flex-end;gap:12px;padding:20px 8px 6px}.bar{flex:1;background:linear-gradient(#6ea8ff,#0f5bd7);border-radius:8px 8px 2px 2px;position:relative;min-width:24px}.bar span{position:absolute;bottom:-22px;left:50%;transform:translateX(-50%);font-size:11px;color:#667085}.donut{width:170px;height:170px;border-radius:50%;margin:15px auto;position:relative}.donut:after{content:"";position:absolute;inset:28px;background:#fff;border-radius:50%}.legend{display:grid;gap:7px;font-size:12px}.legend div{display:flex;justify-content:space-between}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:10px;background:#fff}.table,table{width:100%;border-collapse:collapse;min-width:800px}.table th,.table td,th,td{padding:10px 11px;border-bottom:1px solid var(--border);text-align:left;font-size:12px}.table th,th{background:#f8fafc;color:#566176;font-weight:700}.badge{padding:4px 8px;border-radius:999px;font-size:11px;font-weight:700;display:inline-block}.badge.ok{background:#e8f7f0;color:#08724a}.badge.pending{background:#fff3dc;color:#9c6100}.badge.cancel{background:#feeaea;color:#a52929}.badge.blue{background:#e8f1ff;color:#14529a}.filters{display:grid;grid-template-columns:repeat(5,minmax(140px,1fr));gap:12px}.field label{display:block;font-size:12px;font-weight:700;margin-bottom:6px;color:#4b5563}.field input,.field select,.field textarea,.input{width:100%;padding:9px 10px;border:1px solid #d4dbe4;border-radius:8px;background:#fff}.field textarea{min-height:80px;resize:vertical}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.full{grid-column:1/-1}.section-title{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:#1e5ea4;border-bottom:1px solid #e6ebf1;padding-bottom:7px;margin:0 0 12px}.quick{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}.quick a,.quick button{border:1px solid var(--border);background:#fff;padding:14px;border-radius:10px;text-align:left;cursor:pointer;display:block}.quick b{display:block;margin-bottom:4px;color:#16569d}.quick small{color:var(--muted)}.notice{padding:12px 14px;border-radius:9px;background:#eef5ff;border:1px solid #cfe0ff;color:#244a87;font-size:12px}.message{display:block;padding:11px 13px;border-radius:9px;background:#eef5ff;border:1px solid #cfe0ff;color:#244a87;margin-bottom:13px}.action-link{border:0;background:transparent;color:#0f5bd7;cursor:pointer;padding:3px 6px}.totals{margin-left:auto;width:320px}.totals div{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid #edf0f4}.totals .grand{font-size:16px;font-weight:800;color:var(--primary)}
.invoice-wrap{background:#dfe5ee;padding:22px;border-radius:14px;overflow:auto}.invoice-paper{width:900px;min-height:1160px;background:#fff;margin:auto;padding:36px;box-shadow:0 8px 30px rgba(0,0,0,.13);color:#111827}.inv-head{display:flex;justify-content:space-between;gap:30px;border-bottom:3px solid var(--primary);padding-bottom:18px}.logo-box{width:220px;height:90px;border:1px dashed #cbd5e1;border-radius:10px;display:grid;place-items:center;overflow:hidden}.inv-title{text-align:right}.inv-title h2{margin:0;font-size:28px;color:var(--primary)}.inv-section{margin-top:18px}.inv-section h3{font-size:12px;color:var(--primary);text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid #dbe4ef;padding-bottom:6px}.inv-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;font-size:12px}.inv-meta div{padding:8px;background:#f8fafc;border-radius:7px}.stamp{font-size:9px;word-break:break-all;background:#f8fafc;padding:10px;border:1px solid #e5e7eb;border-radius:7px}.footer-inv{margin-top:22px;font-size:9px;color:#64748b;text-align:center}
/* Login igual al demo */.login-screen{position:fixed;inset:0;z-index:9999;display:grid;grid-template-columns:1.1fr .9fr;background:#eef3f9}.login-brand{background:linear-gradient(145deg,#09152d,#12396b 58%,#0f5bd7);color:#fff;display:flex;align-items:center;justify-content:center;padding:50px;position:relative;overflow:hidden}.login-brand:before,.login-brand:after{content:"";position:absolute;border:1px solid rgba(255,255,255,.15);border-radius:50%}.login-brand:before{width:520px;height:520px;right:-220px;top:-100px}.login-brand:after{width:330px;height:330px;left:-120px;bottom:-90px}.login-copy{max-width:560px;position:relative;z-index:2}.login-logo{width:70px;height:70px;border-radius:18px;background:#fff;color:#0f5bd7;display:grid;place-items:center;font-size:24px;font-weight:900;margin-bottom:25px}.login-copy h1{font-size:46px;margin:0 0 12px}.login-copy p{color:#d9e5ff;font-size:17px;line-height:1.6}.login-points{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:28px}.login-points div{background:rgba(255,255,255,.08);padding:14px;border-radius:12px;border:1px solid rgba(255,255,255,.08);font-size:13px}.login-points div:before{content:"\2713";font-weight:800;margin-right:5px}.login-form-wrap{display:flex;align-items:center;justify-content:center;padding:45px}.login-card{width:min(440px,94vw);background:#fff;border-radius:18px;padding:34px;box-shadow:0 25px 70px rgba(24,43,74,.14)}.login-card h2{margin:0 0 7px;font-size:28px}.login-card>p{margin:0 0 25px;color:var(--muted)}.login-card .field{margin-bottom:15px}.demo-user{margin-top:18px;padding:11px;border-radius:9px;background:#eef5ff;border:1px solid #d4e4ff;color:#28528b;font-size:12px;line-height:1.5}.login-message{display:block;padding:10px 12px;border-radius:8px;background:#feecec;border:1px solid #f5c2c2;color:#a52b2b;margin-bottom:15px}.btn-login{width:100%;margin-top:8px;background:var(--primary);border:1px solid var(--primary);color:#fff;padding:11px;border-radius:8px;cursor:pointer}
@media(max-width:1100px){.cards,.three{grid-template-columns:repeat(2,1fr)}.two{grid-template-columns:1fr}.filters{grid-template-columns:repeat(3,1fr)}}@media(max-width:800px){.app{grid-template-columns:1fr}.sidebar{position:relative;height:auto}.cards,.three,.form-grid,.filters,.quick{grid-template-columns:1fr}.full{grid-column:auto}.topbar{position:relative}.content{padding:14px}.login-screen{grid-template-columns:1fr}.login-brand{display:none}}@media print{body *{visibility:hidden}.invoice-paper,.invoice-paper *{visibility:visible}.invoice-paper{position:absolute;left:0;top:0;width:100%;box-shadow:none;margin:0}.sidebar,.topbar,.page-title,.toolbar{display:none!important}}


/* V1.3 - Modales de catálogos y secciones colapsables */
.catalog-modal{display:none;position:fixed;inset:0;background:rgba(15,23,42,.55);z-index:3000;align-items:center;justify-content:center;padding:24px}.catalog-modal.open{display:flex}.catalog-modal-box{width:min(980px,97vw);max-height:92vh;overflow:auto;background:#fff;border-radius:14px;box-shadow:0 25px 80px rgba(0,0,0,.28)}.catalog-modal-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);background:#fff}.catalog-modal-head h3{margin:0}.catalog-modal-body{padding:20px}.catalog-modal-foot{position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border);background:#fff}.modal-close{border:0;background:transparent;font-size:25px;cursor:pointer;color:#64748b}.collapse-card{background:#fff;border:1px solid var(--border);border-radius:13px;margin-bottom:14px;box-shadow:0 3px 13px rgba(20,40,70,.04);overflow:hidden}.collapse-head{width:100%;border:0;background:#fff;padding:15px 18px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;color:#1e5ea4;font-weight:800;text-transform:uppercase;letter-spacing:.05em;font-size:13px}.collapse-head:hover{background:#f8fafc}.collapse-arrow{transition:.2s}.collapse-card.open .collapse-arrow{transform:rotate(180deg)}.collapse-body{display:none;padding:4px 18px 18px}.collapse-card.open .collapse-body{display:block}.readonly-box{background:#f5f7fa!important;color:#556070!important}.invoice-part-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.invoice-actions{position:sticky;bottom:0;z-index:10;background:rgba(244,247,251,.96);border-top:1px solid var(--border);padding:12px 0;display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.total-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:14px}.total-strip>div{background:#f8fafc;border:1px solid var(--border);border-radius:9px;padding:11px}.total-strip span{display:block;color:var(--muted);font-size:11px}.total-strip b{font-size:17px}.total-strip .grand{background:#eef5ff;border-color:#cfe0ff;color:#14529a}@media(max-width:1050px){.invoice-part-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.invoice-part-grid,.total-strip{grid-template-columns:1fr}}

/* V1.4 - Vista de comprobante y modal estable */
body.modal-open{overflow:hidden}.doc-preview-toolbar{display:flex;justify-content:flex-end;gap:8px;margin-bottom:12px}.modern-preview{min-height:1080px}.modern-preview .issuer-block{margin-top:12px;font-size:12px;line-height:1.35}.modern-preview .inv-title{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.modern-preview .inv-title small{color:#64748b}.modern-preview .preview-table{border:0;border-radius:0}.modern-preview .preview-table table{min-width:0}.preview-totals{width:320px;margin:18px 0 0 auto}.preview-totals>div{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #e5e7eb}.preview-totals .grand{font-size:16px;color:#0f5bd7}.status-detail{margin-top:10px;padding:10px 12px;background:#f8fafc;border:1px solid #e5e7eb;border-radius:8px}.logo-box img{max-width:100%;max-height:100%;object-fit:contain}

/* V1.5 UX: loading, mensajes y formularios */
.loading-overlay{display:none;position:fixed;inset:0;z-index:9000;background:rgba(11,23,48,.44);backdrop-filter:blur(2px);align-items:center;justify-content:center}.loading-overlay.open{display:flex}.loading-card{width:240px;background:#fff;border-radius:15px;padding:25px;box-shadow:0 25px 80px rgba(0,0,0,.25);display:flex;flex-direction:column;align-items:center;gap:8px}.loading-card small{color:var(--muted)}.spinner{width:42px;height:42px;border:4px solid #dbeafe;border-top-color:var(--primary);border-radius:50%;animation:spin .75s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.app-message-modal{display:none;position:fixed;inset:0;z-index:9100;background:rgba(15,23,42,.5);align-items:center;justify-content:center;padding:20px}.app-message-modal.open{display:flex}.app-message-box{width:min(420px,95vw);background:#fff;border-radius:16px;padding:25px;text-align:center;box-shadow:0 25px 80px rgba(0,0,0,.25)}.app-message-icon{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;margin:0 auto 12px;background:#e8f1ff;color:#14529a;font-weight:900;font-size:22px}.app-message-box.success .app-message-icon{background:#e8f7f0;color:#08724a}.app-message-box.error .app-message-icon{background:#feeaea;color:#a52929}.app-message-box.warning .app-message-icon{background:#fff3dc;color:#9c6100}.app-message-box h3{margin:0 0 8px}.app-message-box p{color:#64748b;white-space:pre-line}
.config-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.file-upload-box{border:1px dashed #aebfd4;background:#f8fafc;border-radius:10px;padding:16px}.preview-logo{max-width:260px;max-height:110px;object-fit:contain;border:1px solid var(--border);padding:8px;border-radius:8px;background:#fff}.actions-inline{display:flex;gap:6px;flex-wrap:wrap}.btn-icon{border:0;background:#eef5ff;color:#14529a;border-radius:7px;padding:6px 8px;cursor:pointer}.btn-icon.danger{background:#feeaea;color:#a52929}.nomina-columns{display:grid;grid-template-columns:1fr 1fr;gap:15px;align-items:start}.detail-entry{display:grid;grid-template-columns:1fr 1fr 1.4fr 1fr auto;gap:8px;align-items:end;margin-bottom:10px}.special-detail{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.hidden{display:none!important}@media(max-width:1050px){.config-grid,.nomina-columns,.special-detail{grid-template-columns:1fr 1fr}.detail-entry{grid-template-columns:1fr 1fr}}@media(max-width:700px){.config-grid,.nomina-columns,.special-detail,.detail-entry{grid-template-columns:1fr}}

/* V1.5.2 - layout responsive sin desbordamiento horizontal */
html,body{width:100%;max-width:100%;overflow-x:hidden}
.app{width:100%;max-width:100%;grid-template-columns:minmax(230px,285px) minmax(0,1fr);overflow-x:hidden}
.main,.content{width:100%;max-width:100%;min-width:0;overflow-x:hidden}
.grid,.card,.table-wrap,.quick,.nomina-columns{min-width:0;max-width:100%}
.table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
.quick{grid-template-columns:repeat(2,minmax(0,1fr))}
.quick a,.quick button{min-width:0;overflow-wrap:anywhere}
.two{grid-template-columns:minmax(0,1.55fr) minmax(260px,.75fr)}
.nomina-columns{grid-template-columns:repeat(2,minmax(0,1fr))}
.nomina-columns>.card,.nomina-columns>div{min-width:0;width:100%}
.detail-entry{grid-template-columns:minmax(90px,1fr) minmax(90px,1fr) minmax(150px,1.4fr) minmax(100px,1fr) auto}
@media(max-width:1250px){.two{grid-template-columns:1fr}.quick{grid-template-columns:repeat(3,minmax(0,1fr))}.nomina-columns{grid-template-columns:1fr}.detail-entry{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:900px){.app{grid-template-columns:1fr}.sidebar{position:relative;width:100%;height:auto}.topbar{position:relative;height:auto;min-height:66px;flex-wrap:wrap;gap:10px;padding:12px 16px}.user{flex-wrap:wrap}.quick{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.quick,.detail-entry{grid-template-columns:1fr}.content{padding:12px}.page-title{flex-direction:column}}

/* ============================================================================
   V1.5.3 FINAL - Layout estable a 100% de zoom, Nómina y vista embebida
   ============================================================================ */
html,body{width:100%;max-width:100%;overflow-x:hidden}

/* Escritorio: sidebar siempre cubre el alto completo del viewport. El scroll
   del menú es independiente del contenido principal. */
@media (min-width:901px){
  .app{display:block;min-height:100vh;width:100%}
  .sidebar{
    position:fixed;
    left:0;
    top:0;
    bottom:0;
    width:285px;
    height:100vh;
    height:100dvh;
    overflow-y:auto;
    overflow-x:hidden;
    z-index:60;
  }
  .main{
    margin-left:285px;
    width:calc(100% - 285px);
    max-width:calc(100% - 285px);
    min-width:0;
  }
  .topbar{width:100%;max-width:100%}
  .content{width:100%;max-width:100%;min-width:0}
}

/* Todos los hijos de grids pueden encogerse; evita que inputs/tablas obliguen
   al contenedor a crecer más que la ventana. */
.grid>* ,.form-grid>* ,.nomina-columns>* ,.detail-entry>* ,.special-detail>*{min-width:0;max-width:100%}
.card{min-width:0;max-width:100%;overflow:hidden}
.field{min-width:0;max-width:100%}
.field input,.field select,.field textarea,.input,
.detail-entry input,.detail-entry select,.detail-entry textarea{
  display:block;
  min-width:0;
  max-width:100%;
  width:100%;
}

/* Nómina: cada tarjeta conserva dos columnas internas. Esto evita que cuatro
   controles + botón compitan por el ancho de media pantalla. */
.nomina-columns{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
.nomina-columns .detail-entry{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.nomina-columns .detail-entry>.btn,
.nomina-columns .detail-entry>input[type=submit]{grid-column:1/-1;justify-self:end;width:auto;min-width:42px}
.nomina-columns .table-wrap{width:100%;max-width:100%;overflow-x:auto}
.nomina-columns .table{min-width:560px}

/* Dashboard: el panel de accesos rápidos nunca empuja el layout. */
.grid.two{grid-template-columns:minmax(0,1.55fr) minmax(300px,.45fr)}
.grid.two>*{min-width:0}
.quick{grid-template-columns:repeat(2,minmax(0,1fr));width:100%;max-width:100%}

/* Vista limpia para iframe/correo. La clase se coloca en <html> desde
   VistaComprobante.aspx cuando querystring embed=1. */
.preview-clean body{background:#edf2f7;overflow-x:hidden}
.preview-clean .sidebar,
.preview-clean .topbar,
.preview-clean .doc-preview-toolbar,
.preview-clean #appLoading,
.preview-clean #appMessageModal{display:none!important}
.preview-clean .app{display:block!important;min-height:100vh!important}
.preview-clean .main{margin-left:0!important;width:100%!important;max-width:100%!important}
.preview-clean .content{padding:0!important;width:100%!important;max-width:100%!important}
.preview-clean .invoice-wrap{border-radius:0!important;padding:16px!important;min-height:100vh;overflow-x:hidden}
.preview-clean .invoice-paper{width:min(900px,100%)!important;min-height:auto!important;margin:0 auto!important;box-shadow:0 6px 24px rgba(15,23,42,.12)}
.preview-clean .preview-table .table{min-width:0!important}

@media (max-width:1250px){
  .grid.two{grid-template-columns:1fr}
  .quick{grid-template-columns:repeat(2,minmax(0,1fr))}
  .nomina-columns{grid-template-columns:1fr}
}
@media (max-width:900px){
  .app{display:block;min-height:100vh}
  .sidebar{position:relative;left:auto;top:auto;bottom:auto;width:100%;height:auto;max-height:none}
  .main{margin-left:0;width:100%;max-width:100%}
  .nomina-columns{grid-template-columns:1fr}
}
@media (max-width:650px){
  .nomina-columns .detail-entry{grid-template-columns:1fr}
  .nomina-columns .detail-entry>.btn,
  .nomina-columns .detail-entry>input[type=submit]{grid-column:auto;width:100%}
  .quick{grid-template-columns:1fr}
}

/* V1.5.4 - Control visual de timbres */
.stamp-progress{height:7px;background:#e8edf5;border-radius:999px;overflow:hidden;margin-top:10px}.stamp-progress span{display:block;height:100%;background:linear-gradient(90deg,#0f5bd7,#4f8cf0);border-radius:999px;transition:width .25s ease}.stamp-progress.large{height:10px;margin:14px 0 8px}.stamp-summary{margin-top:8px}.stamps-kpi .value{color:#0f5bd7}.readonly{background:#f5f7fa!important;color:#596579}.muted{color:var(--muted);font-size:12px}
@media(max-width:1300px){.cards{grid-template-columns:repeat(3,minmax(0,1fr))}}


/* ============================================================================
   V1.5.5 FINAL MOBILE NAVIGATION
   Menú off-canvas tipo Bootstrap para tablet/teléfono, sin dependencia externa.
   ============================================================================ */
.mobile-menu-toggle{display:none;width:42px;height:42px;flex:0 0 42px;border:1px solid var(--border);border-radius:10px;background:#fff;align-items:center;justify-content:center;flex-direction:column;gap:5px;cursor:pointer;padding:0}
.mobile-menu-toggle span{display:block;width:20px;height:2px;border-radius:2px;background:#27364c;transition:transform .2s ease,opacity .2s ease}
.mobile-menu-backdrop{display:none}
.topbar-left{display:flex;align-items:center;gap:12px;min-width:0}
.topbar-left>div{min-width:0}

@media(max-width:900px){
  body{overflow-x:hidden}
  body.mobile-menu-open{overflow:hidden}
  .app{display:block!important;min-height:100vh;width:100%;overflow:visible}
  .main{margin-left:0!important;width:100%!important;max-width:100%!important;min-height:100vh}
  .topbar{position:sticky!important;top:0!important;z-index:80!important;height:auto;min-height:64px;padding:10px 12px!important;flex-wrap:nowrap!important;background:#fff}
  .topbar-left{flex:1 1 auto;max-width:calc(100% - 80px)}
  .top-title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .crumb{display:block;margin-left:0!important;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .mobile-menu-toggle{display:flex;position:relative;z-index:82}
  .sidebar{
    position:fixed!important;
    left:0!important;
    top:0!important;
    bottom:0!important;
    width:min(310px,86vw)!important;
    height:100vh!important;
    height:100dvh!important;
    max-height:none!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
    z-index:100!important;
    transform:translateX(-105%);
    transition:transform .25s ease;
    box-shadow:10px 0 30px rgba(3,12,29,.25);
    overscroll-behavior:contain;
  }
  body.mobile-menu-open .sidebar{transform:translateX(0)}
  .mobile-menu-backdrop{
    display:block;
    position:fixed;
    inset:0;
    z-index:90;
    background:rgba(5,18,43,.48);
    opacity:0;
    visibility:hidden;
    pointer-events:none;
    transition:opacity .25s ease,visibility .25s ease;
  }
  body.mobile-menu-open .mobile-menu-backdrop{opacity:1;visibility:visible;pointer-events:auto}
  body.mobile-menu-open .mobile-menu-toggle span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  body.mobile-menu-open .mobile-menu-toggle span:nth-child(2){opacity:0}
  body.mobile-menu-open .mobile-menu-toggle span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
  .user{flex:0 0 auto;gap:7px!important}
  .user>span:first-child,.user>span:nth-child(2),.user>.avatar+span{display:none}
  .user .avatar{width:32px;height:32px}
  .user .btn{padding:7px 9px;font-size:12px}
  .content{padding:14px!important;width:100%;max-width:100%}
}

@media(max-width:520px){
  .sidebar{width:min(300px,90vw)!important}
  .topbar{padding:9px 10px!important}
  .mobile-menu-toggle{width:40px;height:40px;flex-basis:40px}
  .top-title{font-size:14px}
  .crumb{font-size:10px}
  .user .avatar{display:none}
  .content{padding:10px!important}
}


/* ========================================================================== */
/* V1.6.0 RESPONSIVE CONSOLIDADO - overrides finales                         */
/* ========================================================================== */
html,body{max-width:100%;overflow-x:hidden}.app,.main,.content,.card,.grid,.table-wrap{min-width:0;max-width:100%}.content{overflow-x:hidden}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.table{width:100%;max-width:100%}.field input,.field select,.field textarea{width:100%;max-width:100%;min-width:0}.toolbar{display:flex;gap:8px;flex-wrap:wrap}.page-title{gap:12px}.page-title>div{min-width:0}.page-title h1,.page-title p{overflow-wrap:anywhere}.cards{grid-template-columns:repeat(5,minmax(0,1fr))}.quick{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}

/* Login: el panel deja de ser fixed para permitir viewport dinámico móvil. */
.login-screen{min-height:100vh;min-height:100dvh;position:relative;inset:auto;width:100%;overflow:auto}.login-brand,.login-form-wrap,.login-card{min-width:0}.login-card{max-width:100%}

@media(max-width:1300px){.cards{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.two{grid-template-columns:1fr}.quick{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:1050px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}.config-grid,.special-detail{grid-template-columns:repeat(2,minmax(0,1fr))}.nomina-columns{grid-template-columns:1fr}.detail-entry{grid-template-columns:repeat(2,minmax(0,1fr))}.invoice-part-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:900px){
  .app{display:block!important;grid-template-columns:none!important;min-height:100vh}
  .main{width:100%!important;margin:0!important;min-width:0}
  .sidebar{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:min(310px,88vw)!important;height:100vh!important;height:100dvh!important;max-height:none!important;overflow-y:auto!important;overflow-x:hidden!important;z-index:100!important;transform:translateX(-105%);transition:transform .24s ease;padding-bottom:30px;box-shadow:10px 0 30px rgba(3,12,29,.28)}
  body.mobile-menu-open .sidebar{transform:translateX(0)}
  .mobile-menu-backdrop{display:block!important;position:fixed;inset:0;z-index:90;background:rgba(5,18,43,.52);opacity:0;visibility:hidden;pointer-events:none;transition:.24s}
  body.mobile-menu-open .mobile-menu-backdrop{opacity:1;visibility:visible;pointer-events:auto}
  .mobile-menu-toggle{display:flex!important}
  .topbar{position:sticky!important;top:0!important;height:auto!important;min-height:62px!important;z-index:80!important;padding:9px 12px!important;gap:8px;flex-wrap:nowrap!important}
  .topbar-left{display:flex;align-items:center;min-width:0;gap:9px;flex:1}.topbar-left>div{min-width:0}
  .top-title,.crumb{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.crumb{margin-left:0!important;margin-top:2px}
  .user{flex:0 0 auto;gap:6px!important}.user>span:first-child,.user>span:nth-child(2),.user>.avatar+span{display:none!important}.user .btn{padding:7px 9px;font-size:12px}
  .content{padding:14px!important;width:100%!important;max-width:100vw!important}
  .page-title{align-items:flex-start;flex-direction:column}.page-title .toolbar{width:100%}.page-title .toolbar .btn{flex:1 1 auto;text-align:center}
  .filters,.form-grid,.invoice-part-grid,.total-strip,.config-grid,.special-detail,.detail-entry{grid-template-columns:1fr!important}
  .cards{grid-template-columns:repeat(2,minmax(0,1fr))}.quick{grid-template-columns:repeat(2,minmax(0,1fr))}
  .catalog-modal{padding:10px}.catalog-modal-box{width:100%;max-height:96dvh;border-radius:12px}.catalog-modal-body{padding:14px}.catalog-modal-foot{padding:12px 14px;flex-wrap:wrap}.catalog-modal-foot>.btn,.catalog-modal-foot>input{flex:1 1 140px}
  .invoice-actions{position:static;justify-content:stretch}.invoice-actions .btn{flex:1 1 150px}
}
@media(max-width:650px){
  .login-brand{display:none!important}.login-screen{display:flex!important;align-items:center;justify-content:center;padding:18px;background:linear-gradient(145deg,#09152d,#12396b 60%,#0f5bd7)}.login-form-wrap{padding:0!important;width:100%;display:flex;justify-content:center}.login-card{width:100%!important;max-width:460px;padding:24px 18px;border-radius:16px}.login-card h2{font-size:24px}.demo-user{font-size:11px}
  .cards,.quick{grid-template-columns:1fr!important}.card{padding:14px}.kpi .value{font-size:27px}.chart{min-width:520px}.donut{margin-left:auto;margin-right:auto}.legend{width:100%}
  .table{font-size:12px}.table th,.table td{padding:9px 8px;white-space:nowrap}.table-wrap{width:100%}
  .top-title{font-size:14px}.crumb{font-size:10px}.user .avatar{display:none}.content{padding:10px!important}
  .btn{min-height:40px}.field label{font-size:12px}
}
@media(max-width:420px){.login-screen{padding:10px}.login-card{padding:20px 14px}.mobile-menu-toggle{width:40px;height:40px}.sidebar{width:92vw!important}.page-title h1{font-size:23px}.toolbar{width:100%}.toolbar .btn{width:100%;flex:1 1 100%}}

/* ========================================================================== */
/* V1.6.1 - Toasts + buscador de catálogos SAT                                */
/* ========================================================================== */
.toast-container{position:fixed;top:82px;right:18px;z-index:12000;display:flex;flex-direction:column;gap:10px;width:min(420px,calc(100vw - 28px));pointer-events:none}.saci-toast{opacity:0;transform:translateX(30px);transition:opacity .22s ease,transform .22s ease;background:#fff;border-radius:12px;box-shadow:0 14px 38px rgba(15,23,42,.22);overflow:hidden;border-left:5px solid #0f5bd7;pointer-events:auto}.saci-toast.show{opacity:1;transform:translateX(0)}.saci-toast.success{border-left-color:#129568}.saci-toast.warning{border-left-color:#e59a18}.saci-toast.error,.saci-toast.danger{border-left-color:#d64545}.saci-toast.primary{border-left-color:#0f5bd7}.saci-toast-body{display:grid;grid-template-columns:1fr auto;column-gap:10px;row-gap:3px;padding:13px 14px}.saci-toast-body strong{font-size:14px;color:#142239}.saci-toast-body span{grid-column:1;color:#5e6d83;font-size:12px;line-height:1.45;white-space:pre-line}.saci-toast-close{grid-column:2;grid-row:1/3;border:0;background:transparent;font-size:22px;color:#7d8999;cursor:pointer;align-self:center}.sat-modal-box{width:min(820px,96vw)}.sat-search-bar{display:grid;grid-template-columns:1fr auto;gap:10px}.sat-search-bar input{width:100%;min-height:42px;border:1px solid var(--border);border-radius:8px;padding:9px 12px}.sat-search-results{margin-top:14px;max-height:55vh;overflow:auto;border:1px solid var(--border);border-radius:10px}.sat-result-list{display:flex;flex-direction:column}.sat-result{display:grid;grid-template-columns:115px 1fr;gap:12px;text-align:left;padding:12px 14px;border:0;border-bottom:1px solid #e7ecf3;background:#fff;cursor:pointer}.sat-result:last-child{border-bottom:0}.sat-result:hover{background:#f2f7ff}.sat-result b{color:#0f5bd7}.sat-result span{color:#35445b}.sat-empty,.sat-search-loading{padding:22px;color:#67758a;text-align:center}.sat-empty.error{color:#b62f2f}.sat-picker{display:grid;grid-template-columns:1fr auto;gap:8px}.sat-picker .btn{white-space:nowrap}.sat-description{display:block;margin-top:5px;color:#64748b;font-size:11px;min-height:16px}.readonly-total{background:#f5f7fa!important;color:#374151}.pac-test-actions{display:flex;gap:8px;flex-wrap:wrap}
@media(max-width:650px){.toast-container{top:70px;right:10px}.sat-search-bar{grid-template-columns:1fr}.sat-result{grid-template-columns:1fr}.sat-picker{grid-template-columns:1fr}.sat-picker .btn{width:100%}}

/* SACI V1.6.2 - organización visual de partidas CFDI */
.invoice-part-grid-organized{grid-template-columns:repeat(12,minmax(0,1fr));gap:14px 16px;align-items:start}
.invoice-part-grid-organized>.field{min-width:0}
.invoice-part-grid-organized>.part-product{grid-column:span 5}
.invoice-part-grid-organized>.part-qty{grid-column:span 2}
.invoice-part-grid-organized>.part-price{grid-column:span 5}
.invoice-part-grid-organized>.part-prod-sat{grid-column:span 5}
.invoice-part-grid-organized>.part-unit{grid-column:span 3}
.invoice-part-grid-organized>.part-object{grid-column:span 4}
.invoice-part-grid-organized>.part-base{grid-column:span 2}
.invoice-part-grid-organized>.part-pct{grid-column:span 2}
.invoice-part-grid-organized>.part-discount{grid-column:span 2}
.invoice-part-grid-organized>.part-tax{grid-column:span 3}
.invoice-part-grid-organized>.part-total{grid-column:span 3}
.invoice-part-grid-organized>.full{grid-column:1/-1}
.invoice-part-grid-organized .field label{margin-bottom:7px}
.invoice-part-grid-organized .sat-picker{grid-template-columns:minmax(0,1fr) auto}
.invoice-part-grid-organized .metric-field input{font-weight:700}
.invoice-part-grid-organized .part-grand-total{background:#eef5ff!important;color:#0f5bd7!important;border-color:#bfd5fb!important;font-weight:800}
@media(max-width:1100px){.invoice-part-grid-organized{grid-template-columns:repeat(6,minmax(0,1fr))}.invoice-part-grid-organized>.part-product,.invoice-part-grid-organized>.part-price,.invoice-part-grid-organized>.part-prod-sat,.invoice-part-grid-organized>.part-unit,.invoice-part-grid-organized>.part-object,.invoice-part-grid-organized>.part-total{grid-column:span 3}.invoice-part-grid-organized>.part-qty,.invoice-part-grid-organized>.part-base,.invoice-part-grid-organized>.part-pct,.invoice-part-grid-organized>.part-discount,.invoice-part-grid-organized>.part-tax{grid-column:span 2}.invoice-part-grid-organized>.full{grid-column:1/-1}}
@media(max-width:700px){.invoice-part-grid-organized{grid-template-columns:1fr!important}.invoice-part-grid-organized>.field,.invoice-part-grid-organized>.part-product,.invoice-part-grid-organized>.part-qty,.invoice-part-grid-organized>.part-price,.invoice-part-grid-organized>.part-prod-sat,.invoice-part-grid-organized>.part-unit,.invoice-part-grid-organized>.part-object,.invoice-part-grid-organized>.part-base,.invoice-part-grid-organized>.part-pct,.invoice-part-grid-organized>.part-discount,.invoice-part-grid-organized>.part-tax,.invoice-part-grid-organized>.part-total,.invoice-part-grid-organized>.full{grid-column:1/-1!important}.invoice-part-grid-organized .sat-picker{grid-template-columns:1fr}.invoice-part-grid-organized .sat-picker .btn{width:100%}}


/* ==========================================================================
   V1.6.6 - UX captura de documentos / detalle CFDI / confirmación de timbrado
   ========================================================================== */
.content{background:#f3f8fd}
.content .collapse-card{background:#f8fbff;border:1px solid #dbe9f6;box-shadow:0 3px 12px rgba(42,91,140,.055)}
.content .collapse-card.open .collapse-body{background:#fff;border-top:1px solid #e5eef7}
.content .collapse-head{background:#f5faff}
.invoice-detail-section{margin-top:22px;background:#eaf6ff;border:1px solid #b9dcf5;border-radius:14px;padding:16px;box-shadow:0 7px 20px rgba(37,99,148,.08)}
.invoice-detail-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:12px}
.invoice-detail-heading h3{margin:2px 0 0;color:#173b5c;font-size:18px}
.invoice-detail-kicker{font-size:11px;font-weight:800;letter-spacing:.11em;color:#2475ad}
.invoice-detail-hint{font-size:11px;color:#55758e;text-align:right;max-width:420px}
.invoice-detail-table{background:#fff;border:1px solid #c8e2f4;border-radius:10px;overflow:auto}
.invoice-detail-table .table{margin:0}
.invoice-detail-table .table th{background:#d7efff;color:#173b5c;border-bottom:1px solid #b9d9ee}
.invoice-detail-table .table td{background:#fff;border-bottom:1px solid #e4eff7}
.invoice-detail-table .table tr:nth-child(even) td{background:#f8fcff}
.stamp-confirm-modal{display:none;position:fixed;inset:0;z-index:13000;background:rgba(8,28,49,.55);padding:18px;align-items:center;justify-content:center}
.stamp-confirm-modal.open{display:flex}
.stamp-confirm-card{width:min(500px,96vw);background:#fff;border-radius:18px;padding:28px;box-shadow:0 25px 70px rgba(0,0,0,.28);text-align:center}
.stamp-confirm-icon{width:54px;height:54px;margin:0 auto 12px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#e8f8f1;color:#14835e;font-size:27px;font-weight:800}
.stamp-confirm-card h3{margin:0 0 8px;color:#172c42}
.stamp-confirm-card p{margin:0 0 14px;color:#4e6175}
.stamp-confirm-warning{background:#fff8e7;border:1px solid #f0d58c;color:#72551a;border-radius:10px;padding:11px 13px;font-size:12px;line-height:1.5;text-align:left}
.stamp-confirm-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:20px}
@media(max-width:650px){.invoice-detail-heading{align-items:flex-start;flex-direction:column}.invoice-detail-hint{text-align:left}.invoice-detail-section{padding:11px}.stamp-confirm-actions{flex-direction:column-reverse}.stamp-confirm-actions .btn{width:100%}}

/* V1.6.7 - branding FSG/SACI */
.login-logo-image{width:150px;height:78px;padding:8px 12px;background:#fff}
.login-logo-image img{display:block;width:100%;height:100%;object-fit:contain}
.brandmark-image{width:68px;height:48px;padding:4px 6px;background:#fff;border-radius:9px}
.brandmark-image img{display:block;width:100%;height:100%;object-fit:contain}

/* V1.6.7 - orden de captura de partidas */
.invoice-part-grid-organized>.part-product{grid-column:span 4}
.invoice-part-grid-organized>.part-prod-sat{grid-column:span 4}
.invoice-part-grid-organized>.part-unit{grid-column:span 4}
.invoice-part-grid-organized>.part-object{grid-column:span 4}
.invoice-part-grid-organized>.part-qty{grid-column:span 4}
.invoice-part-grid-organized>.part-price{grid-column:span 4}
@media(max-width:1100px){
 .invoice-part-grid-organized>.part-product,.invoice-part-grid-organized>.part-prod-sat,.invoice-part-grid-organized>.part-unit,
 .invoice-part-grid-organized>.part-object,.invoice-part-grid-organized>.part-qty,.invoice-part-grid-organized>.part-price{grid-column:span 3}
}

/* V1.6.8 Cancelaciones */
.cancel-search-row{display:grid!important;grid-template-columns:minmax(280px,1fr) auto!important;align-items:end!important;gap:10px!important}
.cancel-search-row .actions-inline{align-self:end;display:flex;align-items:flex-end}
.cancel-search-row .actions-inline .btn{height:38px}
.warning-icon{background:#fff2cc!important;color:#8a6200!important}
@media(max-width:700px){.cancel-search-row{grid-template-columns:1fr!important}.cancel-search-row .actions-inline .btn{width:100%}}

/* V1.6.9 Seguridad */
.role-modal-box{width:min(920px,96vw)}
.permission-toolbar{display:flex;gap:8px;margin:15px 0 10px}
.permission-matrix{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:52vh;overflow:auto;padding:4px}
.permission-item{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid #dbe7f2;border-radius:10px;background:#f8fbff}
.permission-item input{margin-top:4px}.permission-item b{display:block;font-size:12px;color:#17466e}.permission-item small{display:block;margin-top:2px;color:#657b90}
.profile-check-list{display:flex;flex-wrap:wrap;gap:9px 18px}.profile-check-list span{display:inline-flex;gap:5px;align-items:center}
.access-denied-page{min-height:100vh;display:grid;place-items:center;background:#eef5fb;padding:20px}
.access-denied-card{width:min(480px,95vw);background:#fff;border-radius:18px;padding:36px;text-align:center;box-shadow:0 20px 60px rgba(22,55,88,.15)}
.access-denied-icon{width:58px;height:58px;margin:0 auto 14px;border-radius:50%;display:grid;place-items:center;background:#fff1d6;color:#9a6500;font-size:30px;font-weight:800}
@media(max-width:720px){.permission-matrix{grid-template-columns:1fr}}
