/* =========================================================================
   Componentes. Elevación: superficies de contenido = BORDE; solo lo flotante
   (menús, modales, avisos) = SOMBRA. Todo tematizado (claro / oscuro).
   ========================================================================= */

/* ---------------------------- Botones ---------------------------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:42px;padding:0 18px;border-radius:var(--r-sm);
  font-weight:600;font-size:14px;line-height:1;
  border:1px solid transparent;white-space:nowrap;
  transition:background var(--t-rapida),border-color var(--t-rapida),color var(--t-rapida);
}
.btn:hover{text-decoration:none}
.btn:active:not(:disabled){transform:translateY(1px)}
.btn:disabled,.btn[disabled]{opacity:.5;cursor:not-allowed}
.btn:focus-visible{outline:none;box-shadow:var(--ring)}
.btn i{font-size:13px}

.btn-primario{background:var(--primary);color:var(--primary-ink)}
.btn-primario:hover{background:var(--primary-hover)}
.btn-hueco{background:var(--surface);border-color:var(--border-strong);color:var(--text)}
.btn-hueco:hover{border-color:var(--primary);color:var(--primary-text);background:var(--surface-2)}
.btn-oscuro{background:var(--ink);color:var(--ink-text)}
.btn-oscuro:hover{background:var(--primary);color:#fff}
.btn-peligro{background:var(--danger);color:#fff}
.btn-peligro:hover{filter:brightness(.92)}
.btn-peligro-hueco{background:var(--surface);border-color:var(--danger);color:var(--danger-text)}
.btn-peligro-hueco:hover{background:var(--danger-bg)}
.btn-ambar{background:var(--accent);color:var(--accent-ink)}
.btn-ambar:hover{background:var(--accent-strong)}
.btn-fantasma{background:transparent;color:var(--text-2);min-height:38px;padding:0 12px}
.btn-fantasma:hover{background:var(--surface-3);color:var(--primary-text)}

.btn-sm{min-height:34px;font-size:13px;padding:0 12px;gap:7px}
.btn-lg{min-height:50px;font-size:15.5px;padding:0 26px}
.btn-bloque{width:100%}
.btn-icono{width:38px;min-height:38px;padding:0;flex:none}
.btn-icono.btn-sm{width:32px;min-height:32px}

/* ---------------------------- Panel ---------------------------- */
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.panel + .panel{margin-top:18px}
.panel-cabeza{display:flex;align-items:center;gap:11px;min-height:58px;padding:14px 20px;border-bottom:1px solid var(--border);background:var(--surface-2)}
.panel-cabeza h2,.panel-cabeza h3{margin:0}
.panel-cabeza h3{font-size:13px;color:var(--text);letter-spacing:1px}
.panel-cabeza .icono-titulo{
  width:30px;height:30px;border-radius:var(--r-xs);flex:none;
  background:var(--tint);color:var(--tint-text);
  display:flex;align-items:center;justify-content:center;font-size:13px;
}
.panel-cabeza .cola{margin-left:auto;display:flex;align-items:center;gap:8px}
.panel-cuerpo{padding:22px}
.panel-cuerpo.sin-relleno{padding:0}
.panel-pie{padding:15px 20px;border-top:1px solid var(--border);background:var(--surface-2);display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;align-items:center}
.panel-pie.repartido{justify-content:space-between}

.nota-caja{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-md);padding:14px 16px;font-size:13px;color:var(--text-2);line-height:1.5}

/* ---------------------------- Cifras ---------------------------- */
.cifras{display:flex;flex-wrap:wrap;gap:0;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.cifra{flex:1;min-width:150px;padding:19px 20px;border-right:1px solid var(--border)}
.cifra:last-child{border-right:none}
.cifra .n{font-family:var(--display);font-size:30px;font-weight:800;color:var(--text);line-height:1;letter-spacing:-.02em}
.cifra .r{font-size:11.5px;color:var(--text-2);margin-top:7px;font-weight:700;text-transform:uppercase;letter-spacing:.65px}
.cifra.aviso .n{color:var(--warn-text)}
.cifra.urgente .n{color:var(--danger-text)}
@media(max-width:680px){.cifra{border-right:none;border-bottom:1px solid var(--border)}.cifra:last-child{border-bottom:none}}

/* ---------------------------- Tablas ---------------------------- */
.tabla-envoltura{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-lg)}
.panel .tabla-envoltura{border:none;border-radius:0}
table.tabla{background:var(--surface);font-size:14px}
table.tabla thead th{
  background:var(--surface-2);text-align:left;
  padding:12px 18px;font-size:10.5px;text-transform:uppercase;letter-spacing:.9px;
  color:var(--text-2);font-weight:700;border-bottom:1px solid var(--border);white-space:nowrap;
}
table.tabla tbody td{padding:15px 18px;border-bottom:1px solid var(--border);vertical-align:middle}
table.tabla tbody tr:last-child td{border-bottom:none}
table.tabla tbody tr:hover{background:var(--surface-2)}
table.tabla td .sub{display:block;font-size:12px;color:var(--text-3);margin-top:2px}
table.tabla .col-fin{text-align:right;white-space:nowrap}

.persona{display:flex;align-items:center;gap:11px;min-width:0}
.persona .datos{min-width:0}
.persona .datos b{display:block;font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.persona .datos span{display:block;font-size:12px;color:var(--text-3)}

/* ---------------------------- Chips ---------------------------- */
.chip{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 10px 4px 8px;border-radius:var(--r-pill);
  font-size:12px;font-weight:700;letter-spacing:.2px;
  background:var(--surface-3);color:var(--text-2);
}
.chip::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none;opacity:.9}
.chip.verde{background:var(--ok-bg);color:var(--ok-text)}
.chip.ambar{background:var(--warn-bg);color:var(--warn-text)}
.chip.rojo{background:var(--danger-bg);color:var(--danger-text)}
.chip.azul{background:var(--info-bg);color:var(--info-text)}
.chip.gris{background:var(--surface-3);color:var(--text-2)}

.pastilla{display:inline-block;padding:3px 9px;border-radius:var(--r-xs);font-size:12px;font-weight:600;background:var(--surface-3);color:var(--text-2)}
.contador{font-family:var(--mono);font-size:12px;font-weight:700;background:var(--ink);color:var(--ink-accent);padding:2px 9px;border-radius:var(--r-pill)}

/* ---------------------------- Formularios ---------------------------- */
.campo{margin-bottom:16px}
.modal-cuerpo > .campo:last-child,.panel-cuerpo > form > .campo:last-child{margin-bottom:0}
.campo > label,.etiqueta{display:block;font-size:13px;font-weight:600;color:var(--text);margin-bottom:6px}
.campo .req{color:var(--danger)}
.campo .ayuda{font-size:12.5px;color:var(--text-2);margin-top:6px;line-height:1.45}
.campo input[type=text],.campo input[type=email],.campo input[type=password],
.campo input[type=number],.campo input[type=date],.campo input[type=tel],
.campo input[type=search],.campo select,.campo textarea,
input.control,select.control,textarea.control{
  width:100%;padding:11px 13px;min-height:44px;
  border:1.5px solid var(--border-strong);border-radius:var(--r-sm);
  background:var(--surface);color:var(--text);
  font-size:14.5px;
  transition:border-color var(--t-rapida),box-shadow var(--t-rapida);
}
.campo textarea{min-height:92px;resize:vertical;line-height:1.5}
.campo input:focus,.campo select:focus,.campo textarea:focus,.control:focus{outline:none;border-color:var(--primary);box-shadow:var(--ring)}
.campo input:disabled,.control:disabled{background:var(--surface-2);color:var(--text-3);cursor:not-allowed}
.campo.error input,.campo.error select,.campo.error textarea{border-color:var(--danger)}
.campo .msg-error{font-size:12.5px;color:var(--danger-text);margin-top:6px;font-weight:600;display:flex;gap:6px;align-items:center}
.campo-fila{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media(max-width:640px){.campo-fila{grid-template-columns:1fr}}

.check-linea{display:flex;align-items:flex-start;gap:10px;padding:8px 0;font-size:14px;line-height:1.45}
.check-linea input[type=checkbox],.check-linea input[type=radio]{width:18px;height:18px;margin-top:1px;accent-color:var(--primary);flex:none}
.check-linea b{font-weight:600;color:var(--text)}
.check-linea .sub{display:block;color:var(--text-2);font-size:12.5px;margin-top:1px}
.check-linea-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:0 16px}

.buscador{position:relative}
.buscador input{width:100%;padding:11px 14px 11px 40px;min-height:44px;border:1.5px solid var(--border-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--text);font-size:14.5px}
.buscador input:focus{outline:none;border-color:var(--primary);box-shadow:var(--ring)}
.buscador i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--text-3);font-size:13px;pointer-events:none}

.switch{position:relative;display:inline-block;width:44px;height:26px;flex:none}
.switch input{opacity:0;width:0;height:0}
.switch .pista{position:absolute;inset:0;background:var(--border-strong);border-radius:var(--r-pill);transition:var(--t-rapida)}
.switch .pista::before{content:"";position:absolute;height:20px;width:20px;left:3px;top:3px;background:#fff;border-radius:50%;transition:var(--t-rapida)}
.switch input:checked + .pista{background:var(--primary)}
.switch input:checked + .pista::before{transform:translateX(18px)}

/* ---------------------------- Sub-pestañas ---------------------------- */
.subtabs{display:flex;gap:22px;flex-wrap:wrap;background:transparent;padding:0;border-bottom:1px solid var(--border);border-radius:0;margin-bottom:26px;width:100%;max-width:100%}
.subtab{display:inline-flex;align-items:center;gap:7px;padding:10px 2px 12px;border-radius:0;border-bottom:2px solid transparent;margin-bottom:-1px;font-weight:600;font-size:13.5px;color:var(--text-2);white-space:nowrap;transition:border-color var(--t-rapida),color var(--t-rapida)}
.subtab:hover{color:var(--text);text-decoration:none;border-bottom-color:var(--border-strong)}
.subtab[aria-selected="true"]{background:transparent;color:var(--primary-text);border-bottom-color:var(--primary);box-shadow:none}
.subtab .contador{font-size:10.5px;padding:1px 6px}
.pestanas{display:flex;gap:4px;flex-wrap:wrap;background:var(--surface-3);padding:4px;border-radius:var(--r-md);margin-bottom:22px;width:fit-content;max-width:100%}
.pestana{display:inline-flex;align-items:center;gap:7px;padding:8px 15px;border-radius:var(--r-sm);font-weight:600;font-size:13.5px;color:var(--text-2);white-space:nowrap;border:none;transition:background var(--t-rapida),color var(--t-rapida)}
.pestana:hover{color:var(--primary-text);text-decoration:none}
.pestana[aria-selected="true"]{background:var(--surface);color:var(--text);box-shadow:var(--shadow-menu)}
.pestana .contador{font-size:10.5px;padding:1px 6px}
.tab-panel[hidden]{display:none}

/* ---------------------------- Avisos ---------------------------- */
.avisos{position:fixed;bottom:22px;right:22px;z-index:900;display:flex;flex-direction:column;gap:10px;align-items:flex-end}
.avisos > .aviso{
  display:flex;align-items:center;gap:11px;
  padding:13px 18px;border-radius:var(--r-md);color:#fff;font-weight:600;font-size:14px;
  background:var(--ink);color:var(--ink-text);box-shadow:var(--shadow-float);
  opacity:0;transform:translateY(12px);transition:all var(--t-media);max-width:min(90vw,430px);
}
.avisos > .aviso.visible{opacity:1;transform:none}
.avisos > .aviso.exito{background:var(--primary);color:#fff}
.avisos > .aviso.error{background:var(--danger);color:#fff}
.avisos > .aviso.info{background:var(--info);color:#fff}
.avisos > .aviso i{font-size:16px;flex:none}

.alerta{display:flex;gap:12px;padding:14px 16px;border-radius:var(--r-md);font-size:13.5px;line-height:1.5;border:1px solid;margin-bottom:18px}
.alerta i{font-size:16px;margin-top:1px;flex:none}
.alerta b{font-weight:700}
.alerta.exito{background:var(--ok-bg);border-color:var(--ok);color:var(--ok-text)}
.alerta.error{background:var(--danger-bg);border-color:var(--danger);color:var(--danger-text)}
.alerta.info{background:var(--info-bg);border-color:var(--info);color:var(--info-text)}
.alerta.ambar{background:var(--warn-bg);border-color:var(--warn);color:var(--warn-text)}

/* ---------------------------- Timeline ---------------------------- */
.timeline{position:relative;padding-left:24px}
.timeline::before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--border)}
.timeline-item{position:relative;padding-bottom:18px}
.timeline-item:last-child{padding-bottom:0}
.timeline-item::before{content:"";position:absolute;left:-22px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--surface);border:2px solid var(--border-strong)}
.timeline-item.hito::before{background:var(--primary);border-color:var(--primary)}
.timeline-item .hora{font-family:var(--mono);font-size:11px;color:var(--text-3)}
.timeline-item .evento{font-size:14px;color:var(--text);margin-top:2px}
.timeline-item .evento b{font-weight:600}

/* ---------------------------- Progreso ---------------------------- */
.progreso{height:8px;background:var(--surface-3);border-radius:var(--r-pill);overflow:hidden}
.progreso span{display:block;height:100%;background:var(--primary);border-radius:var(--r-pill)}
.progreso.ambar span{background:var(--accent)}
.progreso.rojo span{background:var(--danger)}

/* ---------------------------- Tooltip ---------------------------- */
[data-tip]{position:relative}
[data-tip]:hover::after{
  content:attr(data-tip);position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);
  background:var(--ink);color:var(--ink-text);font-size:11.5px;font-weight:500;white-space:nowrap;
  padding:6px 10px;border-radius:var(--r-xs);z-index:100;box-shadow:var(--shadow-menu);pointer-events:none;
}

/* ---------------------------- Menú contextual ---------------------------- */
.menu-ctx{position:relative;display:inline-block}
.menu-ctx-lista{
  position:absolute;right:0;top:calc(100% + 6px);z-index:120;min-width:210px;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);
  box-shadow:var(--shadow-float);padding:6px;display:none;
}
.menu-ctx.abierto .menu-ctx-lista{display:block}
.menu-ctx-lista button,.menu-ctx-lista a{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 10px;border-radius:var(--r-sm);font-size:13.5px;color:var(--text)}
.menu-ctx-lista button:hover,.menu-ctx-lista a:hover{background:var(--surface-2);text-decoration:none}
.menu-ctx-lista .sep{height:1px;background:var(--border);margin:5px 0}
.menu-ctx-lista .peligro{color:var(--danger-text)}
.menu-ctx-lista .peligro:hover{background:var(--danger-bg)}

/* ---------------------------- Modal ---------------------------- */
.velo{position:fixed;inset:0;z-index:800;background:rgba(0,0,0,.55);backdrop-filter:blur(2px);display:none;align-items:flex-start;justify-content:center;padding:7vh 20px 20px;overflow-y:auto}
.velo.abierto{display:flex}
.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);width:100%;max-width:520px;box-shadow:var(--shadow-float);animation:modal-sube var(--t-media);overflow:hidden;position:relative}
.modal.ancho{max-width:820px}
@keyframes modal-sube{from{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:none}}
.modal-cabeza{padding:22px 24px 0}
.modal-cabeza h2,.modal-cabeza h3{font-size:20px}
.modal-cabeza p{color:var(--text-2);font-size:13.5px;margin-top:6px}
.modal-cuerpo{padding:18px 24px}
.modal-pie{padding:16px 24px 22px;display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}
.modal-cerrar{position:absolute;top:14px;right:14px}

/* ---------------------------- Estado vacío ---------------------------- */
.vacio{text-align:center;padding:48px 24px}
.vacio .glifo{width:56px;height:56px;border-radius:var(--r-md);margin:0 auto 16px;background:var(--tint);color:var(--tint-text);display:flex;align-items:center;justify-content:center;font-size:22px}
.vacio h3{color:var(--text);font-size:17px;text-transform:none;letter-spacing:0;margin-bottom:6px}
.vacio p{font-size:13.5px;max-width:44ch;margin:0 auto;color:var(--text-2)}
.vacio .btn{margin-top:18px}

/* ---------------------------- Definición ---------------------------- */
.datos-def{display:grid;grid-template-columns:auto 1fr;gap:11px 20px;font-size:14px}
.datos-def dt{color:var(--text-2);font-size:12px;font-weight:600;padding-top:2px}
.datos-def dd{color:var(--text)}

/* ---------------------------- Copiar ---------------------------- */
.copia-caja{display:flex;gap:8px;align-items:stretch;flex-wrap:wrap}
.copia-caja input{flex:1;min-width:220px;font-family:var(--mono);font-size:13px;background:var(--surface-2);color:var(--text);border:1.5px solid var(--border-strong);border-radius:var(--r-sm);padding:11px 13px}

/* ---------------------------- Métrica (compat) ---------------------------- */
.metrica{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:19px 20px}
.metrica .rotulo{font-size:11.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--text-2);font-weight:700}
.metrica .valor{font-family:var(--display);font-size:31px;font-weight:800;color:var(--text);line-height:1.05;margin-top:8px;letter-spacing:-.02em}
.metrica .pie{font-size:12px;color:var(--text-3);margin-top:4px}
.metrica.acento .valor{color:var(--primary-text)}
.metrica.alerta .valor{color:var(--warn-text)}
.metrica.peligro .valor{color:var(--danger-text)}
.metrica.dinero .valor{font-size:21px;line-height:1.2}
a.metrica{display:block;text-decoration:none;transition:border-color var(--t-rapida),background var(--t-rapida)}
a.metrica:hover{border-color:var(--primary);background:var(--surface-2);text-decoration:none}
a.metrica:focus-visible{outline:none;box-shadow:var(--ring)}

.icono-titulo.advertencia{background:var(--warn-bg);color:var(--warn-text)}
.vacio.compacto{padding:28px 20px}
.texto-ayuda{font-size:13.5px;line-height:1.65}

.greca{height:1px;background:var(--border);width:100%;border:none;opacity:1}
