:root{
  --primary:#139DCB;
  --primary-dark:#0e7ea3;
  --dark:#0f172a;
  --gray:#64748b;
  --light:#f1f5f9;
  --lighter:#f8fafc;
  --border:#cbd5e1;
  --success:#10b981;
  --warning:#f59e0b;
  --danger:#ef4444;
  --teal:#0d9488;
  --purple:#7c3aed;
  --coral:#f97316;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:'Segoe UI',Tahoma,sans-serif;background:#e2e8f0;color:var(--dark);min-height:100vh}
input,textarea,select,button{font-family:inherit}

.view{display:none}
.view.active{display:block}

/* ============ LOGIN ============ */
#view-login{min-height:100vh;display:none;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f172a 0%,#1e293b 100%);padding:20px}
#view-login.active{display:flex}
.login-box{background:#fff;padding:40px;border-radius:14px;box-shadow:0 20px 60px rgba(0,0,0,.3);width:100%;max-width:400px}
.login-brand{text-align:center;margin-bottom:30px}
.logo-box{display:inline-block;padding:12px 28px;border:2px solid var(--primary);color:var(--primary);font-weight:800;font-size:22px;letter-spacing:2px}
.login-brand small{display:block;margin-top:8px;font-size:11px;letter-spacing:1px;color:var(--gray)}
.login-form .field{margin-bottom:14px}
.login-footer{text-align:center;font-size:11px;color:var(--gray);margin-top:24px}

/* ============ TOPNAV ============ */
.topnav{background:var(--dark);color:#fff;padding:12px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 8px rgba(0,0,0,.1);flex-wrap:wrap;gap:10px;position:sticky;top:0;z-index:50}
.topnav .brand{font-size:17px;font-weight:800;color:var(--primary);line-height:1.1}
.topnav .brand small{display:block;font-size:10px;color:#94a3b8;letter-spacing:1px;font-weight:500;margin-top:2px}
.nav-tabs{display:flex;gap:4px;flex-wrap:wrap}
.nav-tab{background:transparent;color:#94a3b8;border:0;padding:9px 14px;border-radius:6px;font-weight:600;cursor:pointer;font-size:13px}
.nav-tab.active{background:var(--primary);color:#fff}
.nav-tab:hover:not(.active){background:#1e293b;color:#fff}
.user-menu{display:flex;align-items:center;gap:8px;font-size:12px;color:#94a3b8}
.admin-only{display:none}
body.is-admin .admin-only{display:inline-block}

/* ============ CONTAINER / PAGE ============ */
.container{max-width:1200px;margin:24px auto;padding:0 20px}
.page{animation:fadeIn .2s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.page h1{font-size:24px;margin-bottom:4px}
.page .sub{color:var(--gray);margin-bottom:20px;font-size:14px}
.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px}

/* ============ CARDS ============ */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:20px}
.module-card{background:#fff;padding:24px;border-radius:12px;cursor:pointer;transition:all .2s;border-top:4px solid var(--primary);position:relative}
.module-card:hover{transform:translateY(-3px);box-shadow:0 10px 30px rgba(0,0,0,.08)}
.module-card .ico{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;margin-bottom:12px;background:var(--light)}
.module-card .ico.teal{background:#ccfbf1;color:var(--teal)}
.module-card .ico.purple{background:#ede9fe;color:var(--purple)}
.module-card .ico.coral{background:#ffedd5;color:var(--coral)}
.module-card h3{font-size:16px;margin-bottom:6px}
.module-card p{font-size:13px;color:var(--gray);line-height:1.5;margin-bottom:10px}
.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.badge-coming{background:#fef3c7;color:#92400e}
.badge-admin{background:#dbeafe;color:#1e40af}
.badge-cm{background:#ede9fe;color:#6b21a8}
.badge-active{background:#d1fae5;color:#065f46}
.badge-inactive{background:#fee2e2;color:#991b1b}

/* ============ EMPTY MODULE ============ */
.empty-module{background:#fff;padding:60px 30px;text-align:center;border-radius:12px;border:2px dashed var(--border)}
.empty-module h3{color:var(--gray);margin-bottom:10px;font-weight:600}
.empty-module p{color:var(--gray);max-width:500px;margin:0 auto;line-height:1.6;font-size:14px}

/* ============ USERS GRID ============ */
.users-grid{display:grid;gap:10px}
.user-card{background:#fff;padding:16px 20px;border-radius:10px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;border-left:4px solid var(--primary)}
.user-card .info h4{font-size:15px;margin-bottom:2px}
.user-card .info .meta{font-size:12px;color:var(--gray)}

/* ============ FORMS ============ */
.field{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.field label{font-size:11px;text-transform:uppercase;color:var(--gray);font-weight:600;letter-spacing:.5px}
.field input,.field textarea,.field select{border:1px solid var(--border);padding:10px 12px;border-radius:6px;font-size:14px;background:#fff;transition:border-color .15s}
.field input:focus,.field textarea:focus,.field select:focus{outline:2px solid var(--primary);border-color:var(--primary)}
.field input:disabled{background:var(--lighter);color:var(--gray)}

/* ============ BUTTONS ============ */
.btn{background:var(--primary);color:#fff;border:0;padding:10px 18px;border-radius:8px;font-weight:600;cursor:pointer;font-size:14px;transition:filter .15s}
.btn:hover{filter:brightness(.92)}
.btn.primary{background:var(--primary)}
.btn.alt{background:#fff;color:var(--dark);border:1px solid var(--border)}
.btn.alt:hover{background:var(--lighter);filter:none}
.btn.danger{background:var(--danger)}
.btn.success{background:var(--success)}
.btn.small{padding:6px 12px;font-size:12px}
.btn.full{width:100%}

/* ============ MODAL ============ */
.modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:100;align-items:center;justify-content:center;padding:20px;overflow-y:auto}
.modal.show{display:flex}
.modal-content{background:#fff;border-radius:12px;padding:28px;max-width:480px;width:100%;max-height:90vh;overflow-y:auto}
.modal h3{margin-bottom:16px;font-size:18px}
.modal h4{font-size:13px;color:var(--gray);text-transform:uppercase;letter-spacing:.5px}
.form-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px;flex-wrap:wrap}

/* ============ MESSAGES ============ */
.error-msg{color:var(--danger);font-size:13px;margin:8px 0;min-height:18px}
.error-msg.success{color:var(--success)}

.toast{position:fixed;bottom:20px;right:20px;background:var(--success);color:#fff;padding:12px 20px;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.15);opacity:0;transform:translateY(20px);transition:all .3s;pointer-events:none;z-index:200;font-weight:600}
.toast.show{opacity:1;transform:translateY(0)}

@media (max-width:720px){
  .topnav{padding:10px 14px}
  .nav-tabs{order:3;width:100%;overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px}
  .container{padding:0 12px;margin-top:16px}
  .cards{grid-template-columns:1fr}
}

/* ============================================================
 * MÓDULO NOTAS E INVENTARIO
 * ============================================================ */

.subnav{display:flex;gap:6px;border-bottom:1px solid var(--border);margin-bottom:20px;flex-wrap:wrap}
.subnav button{background:transparent;color:var(--gray);border:0;padding:10px 16px;cursor:pointer;font-size:13px;font-weight:600;border-bottom:3px solid transparent;margin-bottom:-1px}
.subnav button.active{color:var(--primary);border-bottom-color:var(--primary)}
.subnav button:hover:not(.active){color:var(--dark)}

.toolbar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center}
.toolbar .grow{flex:1;min-width:200px}
.toolbar input,.toolbar select{padding:9px 12px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff}

.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:16px}
.stat-card{background:#fff;padding:14px;border-radius:8px;text-align:center;border-left:4px solid var(--primary)}
.stat-card .num{font-size:24px;font-weight:800;color:var(--primary);line-height:1}
.stat-card .label{font-size:11px;text-transform:uppercase;color:var(--gray);letter-spacing:.5px;margin-top:6px}
.stat-card.green{border-color:var(--success)}.stat-card.green .num{color:var(--success)}
.stat-card.orange{border-color:var(--warning)}.stat-card.orange .num{color:var(--warning)}
.stat-card.red{border-color:var(--danger)}.stat-card.red .num{color:var(--danger)}

table.data-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.05)}
table.data-table th{background:var(--light);text-align:left;padding:10px;font-size:11px;text-transform:uppercase;color:var(--gray);font-weight:700;letter-spacing:.3px}
table.data-table td{padding:11px 10px;border-top:1px solid var(--light);vertical-align:middle}
table.data-table tr.clickable{cursor:pointer}
table.data-table tr.clickable:hover td{background:var(--lighter)}

.badge-cat{background:var(--light);color:var(--dark);padding:3px 8px;border-radius:4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}
.badge-state{padding:3px 8px;border-radius:4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;display:inline-block}
.badge-state.ok{background:#d1fae5;color:#065f46}
.badge-state.bad{background:#fee2e2;color:#991b1b}
.badge-state.rep{background:#dbeafe;color:#1e40af}
.badge-state.warn{background:#fef3c7;color:#92400e}

.empleado-card{background:#fff;padding:16px 20px;border-radius:10px;margin-bottom:10px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-left:4px solid var(--primary);gap:12px;flex-wrap:wrap}
.empleado-card:hover{transform:translateX(2px);box-shadow:0 4px 12px rgba(0,0,0,.06);transition:all .15s}
.empleado-card .info h4{font-size:15px;margin-bottom:3px}
.empleado-card .info .meta{font-size:12px;color:var(--gray)}
.empleado-card .stats{text-align:right;font-size:11px;color:var(--gray);min-width:90px}
.empleado-card .stats strong{display:block;font-size:18px;color:var(--primary);font-weight:800}

.detail-card{background:#fff;border-radius:10px;padding:24px;margin-bottom:16px}
.detail-card .info{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-top:12px;font-size:13px}
.detail-card .info div small{display:block;color:var(--gray);font-size:11px;text-transform:uppercase;letter-spacing:.3px;margin-bottom:2px}

.section-h{font-size:13px;text-transform:uppercase;color:var(--gray);letter-spacing:1px;margin:20px 0 10px;font-weight:700}

.nota-card{background:#fff;padding:14px 18px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;border-left:3px solid var(--success);flex-wrap:wrap;gap:10px;margin-bottom:8px}
.nota-card .info h4{font-size:14px;margin-bottom:2px}
.nota-card .info .date{font-size:11px;color:var(--gray)}

.equip-selected{background:var(--lighter);border:1px solid var(--border);padding:14px;border-radius:8px;margin-top:10px}
.equip-selected .empty{padding:14px;text-align:center;color:var(--gray);font-size:12px}
.equip-item{background:#fff;padding:10px 14px;border-radius:6px;margin-bottom:8px;display:flex;justify-content:space-between;align-items:center;border-left:3px solid var(--primary);font-size:13px;gap:10px}
.equip-item:last-child{margin-bottom:0}
.equip-item .info{flex:1;min-width:0}
.equip-item .info strong{display:block;font-size:13px}
.equip-item .info small{color:var(--gray);font-size:11px}
.equip-item button{padding:4px 10px;font-size:11px;background:var(--danger);color:#fff;border:0;border-radius:4px;cursor:pointer}

.pick-list{max-height:400px;overflow-y:auto;margin-top:8px}
.pick-list .pick-item{background:var(--lighter);padding:10px 14px;border-radius:6px;margin-bottom:6px;display:flex;justify-content:space-between;align-items:center;gap:10px;border-left:3px solid var(--primary)}
.pick-list .pick-item .info{flex:1;min-width:0}
.pick-list .pick-item strong{display:block;font-size:13px}
.pick-list .pick-item small{color:var(--gray);font-size:11px}

/* HOJA IMPRESA (estilo legal de Servienvia) */
.print-sheet{background:#fff;padding:40px 48px;box-shadow:0 4px 24px rgba(0,0,0,.08);border-radius:6px;font-family:'Times New Roman',serif;color:#000;margin-top:20px}
.print-sheet .head{text-align:center;margin-bottom:14px}
.print-sheet .logo-box{display:inline-block;padding:10px 24px;border:2px solid var(--primary);color:var(--primary);font-weight:800;font-size:22px;letter-spacing:2px;font-family:Arial,sans-serif}
.print-sheet .logo-box small{display:block;font-size:10px;color:var(--gray);letter-spacing:1px;font-weight:500}
.print-sheet .nro{text-align:left;font-weight:700;font-size:13px;margin-top:18px}
.print-sheet .city{text-align:left;font-weight:700;font-size:13px;margin-top:6px}
.print-sheet .title{text-align:center;font-weight:700;font-size:15px;text-decoration:underline;margin:18px 0 14px}
.print-sheet .body{font-size:13px;line-height:1.6;text-align:justify}
.print-sheet .body b{font-weight:700}
.sheet-table{width:100%;border-collapse:collapse;margin:14px 0;font-size:12px}
.sheet-table td{border:1px solid #333;padding:6px 10px}
.sheet-table td:first-child{font-weight:700;background:#f5f5f5;width:35%}
.sheet-equip-title{font-weight:700;margin-top:14px;margin-bottom:4px;font-size:12px;text-decoration:underline}
.print-sheet .obs{margin:14px 0;font-size:13px;font-weight:700}
.print-sheet .legal{font-size:11px;line-height:1.5;text-align:justify;margin:14px 0}
.print-sheet .legal-list{font-size:11px;margin:8px 0 8px 20px}
.print-sheet .legal-list li{margin-bottom:4px;font-weight:700}
.print-sheet .signatures{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:50px}
.sig-box{text-align:center}
.sig-canvas{border:1px dashed var(--border);border-radius:4px;width:100%;height:100px;background:#fafafa;cursor:crosshair;display:block;touch-action:none}
.sig-line{border-top:1px solid #000;margin-top:6px;padding-top:6px;font-size:11px;font-weight:700}
.sig-line small{font-weight:400;color:var(--gray);font-family:Arial,sans-serif}
.sig-clear{margin-top:6px;background:#fff;color:var(--gray);border:1px solid var(--border);font-size:10px;padding:3px 8px;border-radius:4px;cursor:pointer}
.ci-field{margin-top:14px;font-size:12px}

@media print{
  body.printing-nota .topnav,
  body.printing-nota .subnav,
  body.printing-nota .toolbar,
  body.printing-nota .form-panel,
  body.printing-nota .form-actions,
  body.printing-nota .back-btn,
  body.printing-nota .sig-clear,
  body.printing-nota .toast{display:none!important}
  body.printing-nota{background:#fff}
  body.printing-nota .container{max-width:100%;margin:0;padding:0}
  body.printing-nota .print-sheet{box-shadow:none;border-radius:0;padding:20mm;margin:0}
  body.printing-nota .sig-canvas{border:none!important;background:#fff!important;border-bottom:1px solid #000!important;border-radius:0!important}
  @page{margin:10mm;size:letter}
}

.form-panel{background:#fff;padding:20px;border-radius:10px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.form-panel h3.subhead{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--primary);margin-bottom:12px;border-bottom:1px solid var(--light);padding-bottom:6px;font-weight:700}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-grid.cols-3{grid-template-columns:1fr 1fr 1fr}
.form-grid .full{grid-column:1/-1}

@media (max-width:700px){
  .form-grid,.form-grid.cols-3{grid-template-columns:1fr}
  .print-sheet{padding:24px}
  .print-sheet .signatures{grid-template-columns:1fr;gap:20px}
}

/* ============================================================
 * MÓDULO PRODUCTIVIDAD CM
 * ============================================================ */

/* Ocultar pestañas non-cm cuando el usuario es community_manager */
body.is-cm .non-cm{display:none}

/* Lista de quincenas */
.quincena-card{background:#fff;padding:18px 22px;border-radius:10px;margin-bottom:12px;cursor:pointer;border-left:4px solid var(--primary);display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;transition:all .15s}
.quincena-card:hover{transform:translateX(2px);box-shadow:0 4px 12px rgba(0,0,0,.06)}
.quincena-card.cerrada{border-left-color:var(--gray);opacity:.85}
.quincena-card .info h3{font-size:16px;margin-bottom:4px}
.quincena-card .info .meta{font-size:12px;color:var(--gray);line-height:1.6}
.quincena-card .counts{display:flex;gap:14px;font-size:11px;color:var(--gray);text-align:center}
.quincena-card .counts strong{display:block;font-size:18px;color:var(--primary);font-weight:800;line-height:1}
.quincena-card .counts .pendientes strong{color:var(--warning)}
.quincena-card .counts .aprobadas strong{color:var(--success)}
.quincena-card .counts .rechazadas strong{color:var(--danger)}

.estado-badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;margin-left:8px}
.estado-badge.abierta{background:#d1fae5;color:#065f46}
.estado-badge.cerrada{background:#e5e7eb;color:#374151}

/* Tabla de publicaciones */
.pub-row{background:#fff;padding:14px 18px;border-radius:8px;margin-bottom:8px;display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;border-left:4px solid var(--gray)}
.pub-row.pendiente{border-left-color:var(--warning)}
.pub-row.aprobada{border-left-color:var(--success)}
.pub-row.rechazada{border-left-color:var(--danger)}
.pub-row .thumb{width:60px;height:60px;border-radius:6px;background:var(--light);display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0}
.pub-row .thumb img{width:100%;height:100%;object-fit:cover}
.pub-row .thumb .ico{font-size:24px;color:var(--gray)}
.pub-row .body h4{font-size:14px;margin-bottom:3px}
.pub-row .body .meta{font-size:11px;color:var(--gray);line-height:1.5}
.pub-row .body .meta a{color:var(--primary);text-decoration:none}
.pub-row .body .meta a:hover{text-decoration:underline}
.pub-row .body .comentario{font-size:11px;color:var(--danger);margin-top:4px;font-style:italic}
.pub-row .actions{display:flex;gap:6px;flex-direction:column;align-items:flex-end}
.pub-row .actions .estado-pill{padding:2px 8px;border-radius:4px;font-size:9px;font-weight:700;text-transform:uppercase}
.pub-row .actions .estado-pill.pendiente{background:#fef3c7;color:#92400e}
.pub-row .actions .estado-pill.aprobada{background:#d1fae5;color:#065f46}
.pub-row .actions .estado-pill.rechazada{background:#fee2e2;color:#991b1b}

/* Tabla resumen tipo Excel */
.resumen-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.05);margin-top:12px}
.resumen-table th,.resumen-table td{padding:10px;text-align:center;border-bottom:1px solid var(--light);border-right:1px solid var(--light)}
.resumen-table th{background:var(--dark);color:#fff;font-size:11px;text-transform:uppercase;letter-spacing:.3px;font-weight:700}
.resumen-table th.group{background:var(--primary)}
.resumen-table td:first-child{text-align:left;font-weight:700;background:var(--lighter);font-size:12px}
.resumen-table tr.total td{background:var(--dark);color:#fff;font-weight:800}
.resumen-table tr.total td:first-child{background:var(--dark)}
.resumen-table .num-aprobada{color:var(--success);font-weight:700}
.resumen-table .num-pendiente{color:var(--warning);font-weight:700}
.resumen-table .num-rechazada{color:var(--danger);font-weight:700}

/* Drag&drop de archivos */
.drop-zone{border:2px dashed var(--border);border-radius:8px;padding:20px;text-align:center;cursor:pointer;background:var(--lighter);transition:all .15s}
.drop-zone:hover,.drop-zone.dragover{border-color:var(--primary);background:#e6f4f9}
.drop-zone .ico{font-size:32px;color:var(--gray);margin-bottom:8px}
.drop-zone p{font-size:12px;color:var(--gray);margin:4px 0}
.drop-zone .file-name{font-size:13px;color:var(--primary);font-weight:600;margin-top:8px}
.drop-zone-preview{margin-top:10px;text-align:center}
.drop-zone-preview img{max-width:100%;max-height:200px;border-radius:6px;border:1px solid var(--border)}

/* Modal review */
.review-modal-content{max-width:600px}
.review-img{max-width:100%;max-height:400px;border-radius:8px;border:1px solid var(--border);display:block;margin:10px auto}
.review-info{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;font-size:13px;margin:14px 0}
.review-info dt{color:var(--gray);font-weight:700;text-transform:uppercase;font-size:11px;letter-spacing:.3px}
.review-info dd{color:var(--dark)}

/* Sub-tabs internos del módulo */
.cm-subtabs{display:flex;gap:6px;border-bottom:1px solid var(--border);margin-bottom:16px;flex-wrap:wrap}
.cm-subtabs button{background:transparent;color:var(--gray);border:0;padding:10px 16px;cursor:pointer;font-size:13px;font-weight:600;border-bottom:3px solid transparent;margin-bottom:-1px}
.cm-subtabs button.active{color:var(--primary);border-bottom-color:var(--primary)}
.cm-subtabs button:hover:not(.active){color:var(--dark)}

@media (max-width:700px){
  .quincena-card{grid-template-columns:1fr}
  .quincena-card .counts{justify-content:space-around;border-top:1px solid var(--light);padding-top:12px;margin-top:8px}
  .pub-row{grid-template-columns:60px 1fr}
  .pub-row .actions{grid-column:1/-1;flex-direction:row;justify-content:flex-end;align-items:center}
  .resumen-table{font-size:11px}
  .resumen-table th,.resumen-table td{padding:6px 4px}
}

/* ============================================================
 * MÓDULO GASTOS Y PAGOS
 * ============================================================ */

/* Dashboard cards (reuso de stat-card existente con variantes) */
.gastos-dash-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:20px}
.gastos-big-card{background:#fff;padding:18px 20px;border-radius:10px;border-left:4px solid var(--primary)}
.gastos-big-card .label{font-size:11px;text-transform:uppercase;color:var(--gray);letter-spacing:.5px;margin-bottom:6px;font-weight:700}
.gastos-big-card .num{font-size:28px;font-weight:800;color:var(--dark);line-height:1}
.gastos-big-card .num .currency{font-size:14px;color:var(--gray);font-weight:600;margin-right:3px}
.gastos-big-card.green{border-color:var(--success)}.gastos-big-card.green .num{color:var(--success)}
.gastos-big-card.orange{border-color:var(--warning)}.gastos-big-card.orange .num{color:var(--warning)}
.gastos-big-card.red{border-color:var(--danger)}.gastos-big-card.red .num{color:var(--danger)}
.gastos-big-card .sub{font-size:11px;color:var(--gray);margin-top:6px}

/* Tarjetas de servicios recurrentes */
.servicio-card{background:#fff;padding:16px 20px;border-radius:10px;margin-bottom:10px;display:grid;grid-template-columns:auto 1fr auto auto;gap:14px;align-items:center;border-left:4px solid var(--primary);cursor:pointer;transition:all .15s}
.servicio-card:hover{transform:translateX(2px);box-shadow:0 4px 12px rgba(0,0,0,.06)}
.servicio-card.urgent{border-left-color:var(--danger)}
.servicio-card.warn{border-left-color:var(--warning)}
.servicio-card.inactive{opacity:.6;border-left-color:var(--gray)}
.servicio-card .icon{font-size:24px;width:40px;text-align:center}
.servicio-card .info h4{font-size:14px;margin-bottom:3px}
.servicio-card .info .meta{font-size:11px;color:var(--gray);line-height:1.5}
.servicio-card .price{text-align:right;font-size:18px;font-weight:800;color:var(--dark)}
.servicio-card .price small{display:block;font-size:10px;color:var(--gray);font-weight:600;text-transform:uppercase}
.servicio-card .vence{text-align:right;font-size:11px;min-width:90px}
.servicio-card .vence strong{display:block;font-size:14px;color:var(--dark)}
.servicio-card .vence.urgent strong{color:var(--danger)}
.servicio-card .vence.warn strong{color:var(--warning)}
.servicio-card .vence.ok strong{color:var(--success)}

/* Lista de gastos */
.gasto-row{background:#fff;padding:14px 18px;border-radius:8px;margin-bottom:8px;display:grid;grid-template-columns:auto 1fr auto auto;gap:14px;align-items:center;border-left:4px solid var(--gray)}
.gasto-row.pendiente{border-left-color:var(--warning)}
.gasto-row.pagado{border-left-color:var(--success)}
.gasto-row.vencido{border-left-color:var(--danger)}
.gasto-row.cancelado{border-left-color:var(--gray);opacity:.6}
.gasto-row .icon{font-size:22px;width:36px;text-align:center}
.gasto-row .info h4{font-size:14px;margin-bottom:3px}
.gasto-row .info .meta{font-size:11px;color:var(--gray);line-height:1.5}
.gasto-row .price{text-align:right;font-size:16px;font-weight:800;color:var(--dark)}
.gasto-row .price small{display:block;font-size:10px;color:var(--gray);font-weight:600;text-transform:uppercase}
.gasto-row .actions{display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.gasto-row .estado-pill{padding:2px 8px;border-radius:4px;font-size:9px;font-weight:700;text-transform:uppercase}
.gasto-row .estado-pill.pendiente{background:#fef3c7;color:#92400e}
.gasto-row .estado-pill.pagado{background:#d1fae5;color:#065f46}
.gasto-row .estado-pill.vencido{background:#fee2e2;color:#991b1b}
.gasto-row .estado-pill.cancelado{background:#e5e7eb;color:#374151}

/* Próximos vencimientos en dashboard */
.venc-list{background:#fff;border-radius:10px;overflow:hidden}
.venc-row{padding:12px 16px;border-bottom:1px solid var(--light);display:grid;grid-template-columns:auto 1fr auto auto;gap:12px;align-items:center}
.venc-row:last-child{border-bottom:0}
.venc-row .icon{font-size:18px}
.venc-row .info h5{font-size:13px;margin-bottom:2px}
.venc-row .info .meta{font-size:10px;color:var(--gray)}
.venc-row .dias{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;padding:3px 8px;border-radius:4px}
.venc-row .dias.urgent{background:#fee2e2;color:#991b1b}
.venc-row .dias.warn{background:#fef3c7;color:#92400e}
.venc-row .dias.ok{background:#d1fae5;color:#065f46}
.venc-row .price{font-size:14px;font-weight:800}

/* Tabla simple para distribución por categoría/empresa */
.dist-table{width:100%;background:#fff;border-radius:10px;overflow:hidden;font-size:13px}
.dist-table tr{border-bottom:1px solid var(--light)}
.dist-table tr:last-child{border-bottom:0}
.dist-table td{padding:10px 16px}
.dist-table td:first-child{font-weight:600}
.dist-table td:last-child{text-align:right;font-weight:800;color:var(--primary)}
.dist-table .bar{height:4px;background:var(--lighter);border-radius:2px;margin-top:4px;overflow:hidden}
.dist-table .bar div{height:100%;background:var(--primary);transition:width .3s}

@media (max-width:700px){
  .servicio-card,.gasto-row{grid-template-columns:auto 1fr;row-gap:8px}
  .servicio-card .price,.servicio-card .vence,.gasto-row .price,.gasto-row .actions{grid-column:2;text-align:left}
  .servicio-card .price,.gasto-row .price{font-size:16px}
}

/* ============================================================
 * MATRIZ TIPO EXCEL DEL MÓDULO CM (filas marcas × columnas fechas)
 * ============================================================ */
.matriz-title{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--primary);font-weight:700;margin:20px 0 8px;padding-bottom:6px;border-bottom:1px solid var(--light)}
.matriz-wrap{overflow-x:auto;background:#fff;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05);margin-bottom:8px}
.matriz-table{border-collapse:collapse;font-size:12px;min-width:100%}
.matriz-table th,.matriz-table td{padding:8px 6px;text-align:center;border-right:1px solid var(--light);border-bottom:1px solid var(--light);white-space:nowrap}
.matriz-table thead th{background:var(--dark);color:#fff;font-size:10px;text-transform:uppercase;letter-spacing:.3px;font-weight:700;position:sticky;top:0}
.matriz-table th.fecha-col{min-width:50px}
.matriz-table th.fecha-col div{font-weight:800;font-size:12px}
.matriz-table th.fecha-col small{display:block;font-size:9px;opacity:.75;font-weight:500;margin-top:2px}
.matriz-table th.total-col{background:var(--primary);min-width:60px}
.matriz-table .marca-cell{text-align:left;font-weight:700;background:var(--lighter);font-size:11px;padding-left:12px;padding-right:12px;min-width:140px}
.matriz-table .sticky-col{text-align:left;font-weight:700;background:var(--lighter);padding-left:12px;padding-right:12px;min-width:140px;position:sticky;left:0;z-index:1}
.matriz-table thead .sticky-col{background:var(--dark);color:#fff;z-index:2}
.matriz-table .cell-empty{color:#cbd5e0;font-size:11px}
.matriz-table .cell-has{background:#e6f4f9;color:var(--primary);font-weight:700}
.matriz-table .total-cell{background:var(--lighter);font-weight:800;color:var(--primary)}
.matriz-table .total-row td{background:var(--dark);color:#fff;font-weight:800}
.matriz-table .total-row .sticky-col{background:var(--dark);color:#fff}
.matriz-table .total-row .total-cell{background:var(--primary);color:#fff}
