/* =========================================================
   Pulso Cotizaciones — paleta "cobre profundo" (misma de Pulso Remuneraciones)
   ========================================================= */
:root {
  --grafito-950: #14181a;
  --grafito-900: #1c2224;
  --grafito-800: #262e31;
  --grafito-700: #384246;
  --grafito-300: #B0A6A5;
  --hueso: #f5f1ea;
  --hueso-dim: #d9d3c7;
  --cobre-300: #e0a878;
  --cobre-500: #c17b45;
  --cobre-600: #a85c32;
  --cobre-700: #8a4726;
  --verde-ok: #4f8c6b;
  --rojo-alerta: #b8503f;
  --azul-hh: #2f6f9f;
  --font-display: "Sora", "Segoe UI", system-ui, sans-serif;
  --font-body: "Inter", "Segoe UI", system-ui, sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, monospace;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: var(--font-body);
  background: #eef0ee;
  color: var(--grafito-900);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, .display {
  font-family: var(--font-display);
  letter-spacing: -0.01em;
  color: var(--grafito-950);
}

a { color: var(--cobre-700); text-decoration: none; }
a:hover { color: var(--cobre-600); text-decoration: underline; }

/* ---------- Auth screens ---------- */
.auth-wrap {
  min-height: 100vh;
  display: flex;
  padding: 1.5rem 1rem;
  background: radial-gradient(1100px 700px at 15% -10%, #2a3336 0%, var(--grafito-950) 55%, #0f1213 100%);
}
.auth-panel {
  margin: auto;
  width: 100%;
  max-width: 420px;
  background: var(--hueso);
  border-radius: 14px;
  padding: 2.5rem 2.25rem 2rem;
  box-shadow: 0 30px 60px -20px rgba(0,0,0,0.5);
}
.auth-logo { display:flex; align-items:center; gap: .75rem; margin-bottom: 1.25rem; }
.auth-logo svg { width: 42px; height: 42px; }
.auth-logo .brand-name { font-family: var(--font-display); font-weight:700; font-size:1.15rem; color: var(--grafito-950); line-height:1.05;}
.auth-logo .brand-sub { font-size: .72rem; letter-spacing:.08em; text-transform:uppercase; color: var(--cobre-700); }

.form-control, .form-select {
  border: 1px solid var(--hueso-dim);
  border-radius: 8px;
  padding: .55rem .75rem;
}
.form-control:focus, .form-select:focus {
  border-color: var(--cobre-500);
  box-shadow: 0 0 0 .2rem rgba(193,123,69,.2);
}
.form-label { font-size: .82rem; font-weight: 600; color: var(--grafito-800); }

.btn-cobre {
  background: linear-gradient(135deg, var(--cobre-500), var(--cobre-700));
  border: none;
  color: var(--hueso);
  font-weight: 600;
  border-radius: 8px;
  padding: .6rem 1rem;
}
.btn-cobre:hover { filter: brightness(1.08); color: var(--hueso); }

/* ---------- App shell ---------- */
.app-shell { display: flex; min-height: 100vh; }

.sidebar {
    width: 250px;
    flex-shrink: 0;
    background: #000028;
    color: var(--hueso-dim);
    display: flex;
    flex-direction: column;
    padding: 1.25rem 1rem;
}
.sidebar .brand { display:flex; align-items:center; gap:.6rem; padding: .25rem .4rem 1.25rem; border-bottom: 1px solid var(--grafito-700); margin-bottom: 1rem;}
.sidebar .brand svg { width: 30px; height:30px; }
.sidebar .brand-name { font-family: var(--font-display); font-weight:700; color: var(--hueso); font-size:1rem; line-height:1.1;}
.sidebar .brand-sub { font-size:.65rem; letter-spacing:.08em; text-transform:uppercase; color: var(--cobre-300);}

.sidebar .nav-section { font-size:.68rem; text-transform:uppercase; letter-spacing:.08em; color: #FFD6A7; margin: 1rem .5rem .35rem; font-weight:700; }
.sidebar .nav-link {
  color: var(--hueso-dim);
  padding: .5rem .65rem;
  border-radius: 8px;
  font-size: .9rem;
  display:flex; align-items:center; gap:.6rem;
  margin-bottom: .15rem;
}
.sidebar .nav-link:hover { background: var(--grafito-800); color: var(--hueso); text-decoration:none; }
.sidebar .nav-link.active { background: var(--cobre-700); color: var(--hueso); }
.sidebar .nav-link .badge { margin-left:auto; }
.sidebar .nav-footer { margin-top:auto; padding-top:1rem; border-top:1px solid var(--grafito-700); font-size:.8rem; }
.sidebar .empresa-chip { background: var(--grafito-800); border-radius:8px; padding:.6rem .7rem; margin-bottom:.6rem; }
.sidebar .empresa-chip .label { font-size:.65rem; text-transform:uppercase; color: var(--grafito-300); letter-spacing:.06em;}
.sidebar .empresa-chip .value { color: var(--hueso); font-weight:600; font-size:.85rem; }

.main-content { flex: 1; min-width: 0; padding: 1.75rem 2rem 3rem; max-width: 1400px; }

.page-header { display:flex; justify-content:space-between; align-items:flex-end; margin-bottom: 1.5rem; flex-wrap: wrap; gap: .75rem;}
.page-header .eyebrow { font-size:.72rem; text-transform:uppercase; letter-spacing:.08em; color: var(--cobre-700); font-weight:600;}
.page-header h1 { font-size: 1.6rem; margin: .1rem 0 0; }

.card-tennet {
  background: #fff;
  border: 1px solid #e3e2dd;
  border-radius: 12px;
  padding: 1.25rem 1.4rem;
}

.col-title { font-size:.72rem; text-transform:uppercase; letter-spacing:.06em; color: var(--cobre-700); font-weight:700; margin-bottom:.5rem;}

.kpi-card { background:#fff; border:1px solid #e3e2dd; border-radius: 12px; padding: 1.1rem 1.25rem; height:100%; }
.kpi-card .kpi-label { font-size:.72rem; text-transform:uppercase; letter-spacing:.06em; color:#7a7568; }
.kpi-card .kpi-value { font-family: var(--font-display); font-size: 1.7rem; font-weight:700; color: var(--grafito-950); }
.kpi-card .kpi-value.accent { color: var(--cobre-700); }

.table-tennet { background:#fff; border-radius:12px; overflow:hidden; border: 1px solid #e3e2dd; }
.table-responsive.table-tennet { overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; }
.table-responsive.table-tennet::-webkit-scrollbar { height: 10px; }
.table-responsive.table-tennet::-webkit-scrollbar-track { background: #eef0ee; }
.table-responsive.table-tennet::-webkit-scrollbar-thumb { background: var(--cobre-500); border-radius: 6px; }
.table-tennet thead th {
  background: var(--grafito-950);
  color: var(--hueso-dim);
  font-size: .72rem;
  text-transform: uppercase;
  letter-spacing: .05em;
  font-weight:600;
  border: none;
  padding: .65rem .85rem;
  white-space: nowrap;
}
.table-tennet td { vertical-align: middle; padding: .6rem .85rem; font-size:.9rem;}
.table-tennet tbody tr:hover { background: #faf8f4; }

.badge-cobre { background: var(--cobre-600); color:#fff; font-weight:500; }
.badge-grafito { background: var(--grafito-700); color:#fff; font-weight:500;}
.badge-ok { background: var(--verde-ok); color:#fff; font-weight:500;}
.badge-alerta { background: var(--rojo-alerta); color:#fff; font-weight:500;}
.badge-hh { background: var(--azul-hh); color:#fff; font-weight:600; }
.badge-mat { background: var(--cobre-600); color:#fff; font-weight:600; }

.btn-outline-cobre { border:1px solid var(--cobre-600); color: var(--cobre-700); background:#fff; }
.btn-outline-cobre:hover { background: var(--cobre-600); color:#fff; }

.numero-monto { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

/* =========================================================
   Grilla de cotización (edición en línea)
   ========================================================= */
.grilla-toolbar { display:flex; gap:.5rem; flex-wrap:wrap; align-items:center; margin-bottom:.75rem; }
.grilla-toolbar .estado-guardado { margin-left:auto; font-size:.8rem; color:#7a7568; }
.grilla-toolbar .estado-guardado.ok { color: var(--verde-ok); }
.grilla-toolbar .estado-guardado.err { color: var(--rojo-alerta); }

.grilla-wrap { display:grid; grid-template-columns: minmax(0,1fr) 280px; gap:1rem; align-items:start; }
@media (max-width: 1200px) { .grilla-wrap { grid-template-columns: 1fr; } }

.grilla { width:100%; border-collapse:separate; border-spacing:0; background:#fff; border:1px solid #e3e2dd; border-radius:12px; }
.grilla thead th:first-child { border-top-left-radius:12px; }
.grilla thead th:last-child { border-top-right-radius:12px; }
.grilla thead th { position: sticky; top: 0; z-index: 2; background: var(--grafito-950); color: var(--hueso-dim); font-size:.7rem; text-transform:uppercase; letter-spacing:.05em; font-weight:600; padding:.55rem .5rem; white-space:nowrap; }
.grilla td { padding:.2rem .35rem; border-bottom:1px solid #efeee9; font-size:.86rem; vertical-align:middle; }
.grilla .c-num { width:62px; font-family:var(--font-mono); font-size:.78rem; color:#7a7568; padding-left:.6rem; }
.grilla .c-tipo { width:80px; }
.grilla select.cell { padding-right:1.2rem; appearance:auto; }
.grilla .c-uni { width:72px; }
.grilla .c-cant { width:96px; }
.grilla .c-pu { width:120px; }
.grilla .c-tot { width:120px; text-align:right; font-family:var(--font-mono); font-variant-numeric: tabular-nums; padding-right:.6rem; }
.grilla .c-acc { width:124px; text-align:right; white-space:nowrap; }

.grilla input.cell, .grilla select.cell {
  width:100%; border:1px solid transparent; background:transparent; border-radius:6px; padding:.3rem .4rem; font-size:.86rem; color:inherit;
}
.grilla input.cell:hover, .grilla select.cell:hover { border-color:#e3e2dd; background:#fff; }
.grilla input.cell:focus, .grilla select.cell:focus { outline:none; border-color: var(--cobre-500); background:#fff; box-shadow:0 0 0 .15rem rgba(193,123,69,.18); }
.grilla input.cell.num { text-align:right; font-family:var(--font-mono); font-variant-numeric: tabular-nums; }
.grilla input.cell:disabled, .grilla select.cell:disabled { color:inherit; opacity:1; }
.grilla input.cell.guardando { background:#fff8ec; }
.grilla input.cell.guardado { background:#eef6f0; transition: background .8s; }
.grilla input.cell.error { border-color: var(--rojo-alerta); background:#fbeeec; }

.grilla tr.fila-partida td { background: var(--hueso); border-top:2px solid var(--grafito-950); font-weight:700; }
.grilla tr.fila-partida input.cell { font-weight:700; }
.grilla tr.fila-partida input.cell[data-col="titulo-p"] { text-transform: uppercase; letter-spacing:.02em; }
.grilla tr.fila-partida .c-num { color: var(--grafito-950); font-weight:700; }
.grilla tr.fila-subtitulo td { background:#faf3ea; font-weight:600; font-style: italic; }
.grilla tr.fila-subtitulo .c-num { color: var(--cobre-700); }
.grilla tr.fila-item.tipo-hh td.c-num { border-left:3px solid var(--azul-hh); }
.grilla tr.fila-item.tipo-mat td.c-num { border-left:3px solid var(--cobre-500); }
.grilla input.cell.vinculado { padding-right:1.4rem; }
.grilla tr.fila-vacia td { color:#9a958a; font-size:.8rem; font-style:italic; padding:.5rem .8rem; }
.grilla tr.oculta { display:none; }

.btn-ico { border:none; background:transparent; padding:.15rem .35rem; border-radius:6px; font-size:.9rem; line-height:1; color: var(--grafito-700); }
.btn-ico:hover { background:#efeee9; }
.btn-ico.peligro:hover { background:#fbeeec; color: var(--rojo-alerta); }
.btn-ico:disabled { opacity:.35; }

.precio-maestro-alerta { display:block; font-size:.68rem; color: var(--cobre-700); cursor:pointer; text-align:right; padding-right:.4rem; white-space:nowrap; }
.precio-maestro-alerta:hover { text-decoration: underline; }

.totales-panel { position: sticky; top: 1rem; background:#fff; border:1px solid #e3e2dd; border-radius:12px; padding:1rem 1.1rem; }
.totales-panel .lin { display:flex; justify-content:space-between; align-items:center; padding:.32rem 0; border-bottom:1px dashed #e3e2dd; font-size:.84rem; gap:.35rem; }
.totales-panel .lin .v { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.totales-panel .lin.total { border-bottom:none; border-top:2px solid var(--grafito-950); font-weight:700; font-size:1.05rem; padding-top:.6rem; margin-top:.3rem; }
.totales-panel .lin.sub { color:#7a7568; font-size:.8rem; }
.totales-panel .lin > span:first-child { min-width:0; }
.totales-panel .lin .v { white-space:nowrap; }
.totales-panel input.pct { width:46px; text-align:right; padding:.15rem .35rem; border-radius:6px; border:1px solid #e3e2dd; font-family:var(--font-mono); font-size:.82rem; }

/* Autocompletar desde maestro */
.ac-lista { position:absolute; z-index:1050; background:#fff; border:1px solid #e3e2dd; border-radius:8px; box-shadow:0 12px 30px -10px rgba(0,0,0,.25); max-height:280px; overflow:auto; min-width:420px; }
.ac-lista .ac-op { padding:.45rem .7rem; cursor:pointer; font-size:.84rem; display:flex; gap:.5rem; align-items:center; border-bottom:1px solid #f3f2ee; }
.ac-lista .ac-op:hover, .ac-lista .ac-op.sel { background:#faf3ea; }
.ac-lista .ac-op .p { margin-left:auto; font-family:var(--font-mono); color: var(--cobre-700); }

/* Búsqueda IA */
.ia-fuente { border:1px solid #e3e2dd; border-radius:8px; padding:.55rem .75rem; margin-bottom:.45rem; display:flex; gap:.75rem; align-items:center; }
.ia-fuente .precio { margin-left:auto; font-family:var(--font-mono); font-weight:600; white-space:nowrap; }
.ia-promedio { background: var(--grafito-950); color: var(--hueso); border-radius:10px; padding:1rem 1.2rem; }
.ia-promedio .valor { font-family: var(--font-display); font-size:1.9rem; font-weight:700; color: var(--cobre-300); }

/* =========================================================
   Documento de cotización (impresión)
   ========================================================= */
.doc-cotizacion { background:#fff; border:1px solid #e3e2dd; border-radius:12px; padding: 2rem 2.2rem; max-width: 1000px; margin: 0 auto; }
.doc-cotizacion .doc-head { display:flex; justify-content:space-between; gap:1rem; border-bottom:3px solid var(--grafito-950); padding-bottom:.9rem; margin-bottom:1rem; }
.doc-cotizacion .doc-titulo { font-family: var(--font-display); font-size:1.35rem; font-weight:700; }
.doc-cotizacion .doc-sub { color: var(--cobre-700); font-weight:700; font-size:.8rem; text-transform:uppercase; letter-spacing:.08em; }
.doc-cotizacion table.doc-tabla { width:100%; border-collapse:collapse; font-size:.82rem; }
.doc-cotizacion table.doc-tabla th { background: var(--grafito-950); color: var(--hueso); font-size:.68rem; text-transform:uppercase; letter-spacing:.05em; padding:.4rem .5rem; }
.doc-cotizacion table.doc-tabla td { padding:.3rem .5rem; border-bottom:1px solid #eee; vertical-align:top; }
.doc-cotizacion table.doc-tabla tr.p td { background: var(--hueso); font-weight:700; text-transform: uppercase; border-top:1.5px solid var(--grafito-950); }
.doc-cotizacion table.doc-tabla tr.s td { background:#faf3ea; font-weight:600; font-style:italic; }
.doc-cotizacion .num { text-align:right; font-family: var(--font-mono); font-variant-numeric: tabular-nums; white-space:nowrap; }
.doc-cotizacion .datos td { padding:.15rem .5rem .15rem 0; font-size:.85rem; vertical-align:top; }
.doc-cotizacion .datos td.k { color:#7a7568; width:120px; }
.doc-cotizacion .doc-totales { margin-left:auto; width: 360px; margin-top: 1rem; font-size:.88rem; }
.doc-cotizacion .doc-totales .lin { display:flex; justify-content:space-between; padding:.25rem 0; border-bottom:1px dashed #e3e2dd; }
.doc-cotizacion .doc-totales .lin.total { background: var(--grafito-950); color: var(--hueso); padding:.45rem .6rem; border:none; font-weight:700; margin-top:.3rem; border-radius:6px; }
.doc-cotizacion .firma { margin-top: 3.5rem; display:flex; justify-content:flex-end; }
.doc-cotizacion .firma div { border-top:1px solid var(--grafito-950); width:260px; text-align:center; padding-top:.35rem; font-size:.82rem; }

.print-body { background:#eef0ee; padding: 1.5rem 1rem; }

@media print {
  .no-print { display: none !important; }
  body, .print-body { background:#fff !important; padding:0 !important; }
  .doc-cotizacion { border: none; padding: 0; max-width:none; }
  .doc-cotizacion table.doc-tabla th, .doc-cotizacion table.doc-tabla tr.p td, .doc-cotizacion table.doc-tabla tr.s td, .doc-cotizacion .doc-totales .lin.total { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .doc-cotizacion table.doc-tabla tr { page-break-inside: avoid; }
  @page { size: letter; margin: 14mm 12mm; }
}

/* Responsive: sidebar arriba en pantallas chicas */
@media (max-width: 860px) {
  .app-shell { flex-direction: column; }
  .sidebar { width: 100%; }
  .main-content { padding: 1.25rem 1rem 2rem; }
}

/* =========================================================
   Programación: carta Gantt y flujo de caja
   ========================================================= */
.gantt { background:#fff; border:1px solid #e3e2dd; border-radius:12px; overflow:hidden; font-size:.8rem; }
.gantt-row { display:grid; grid-template-columns: 250px 150px minmax(0,1fr); align-items:center; border-bottom:1px solid #f0efea; min-height:28px; }
.gantt-row:last-child { border-bottom:none; }
.gantt-head { background: var(--grafito-950); color: var(--hueso-dim); font-size:.7rem; min-height:30px; }
.gantt-head .gantt-track { height:30px; }
.gantt-label { padding:.25rem .6rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.gantt-num { font-family: var(--font-mono); color:#7a7568; margin-right:.25rem; }
.gantt-head .gantt-num { color: var(--hueso-dim); }
.gantt-fechas { padding:.25rem .4rem; font-family: var(--font-mono); font-size:.72rem; white-space:nowrap; color:#5d584e; }
.gantt-head .gantt-fechas { color: var(--hueso-dim); font-family: var(--font-body); }
.gantt-track { position:relative; height:28px; border-left:1px solid #e3e2dd; }
.gantt-tick { position:absolute; top:8px; transform:translateX(2px); font-size:.68rem; white-space:nowrap; }
.gantt-tick::before { content:""; position:absolute; left:-2px; top:-8px; height:30px; border-left:1px solid #384246; }
.gantt-grid { position:absolute; top:0; bottom:0; border-left:1px dotted #e3e2dd; }
.gantt-hoy { position:absolute; top:0; bottom:0; border-left:2px dashed var(--rojo-alerta); z-index:2; }
.gantt-bar { position:absolute; top:6px; height:16px; border-radius:4px; background: linear-gradient(135deg, var(--cobre-300), var(--cobre-600)); z-index:1; overflow:hidden; }
.gantt-bar-txt { font-size:.64rem; color:#fff; padding-left:4px; line-height:16px; white-space:nowrap; font-weight:600; }
.es-partida { background: var(--hueso); font-weight:700; }
.es-partida .gantt-bar { background: var(--grafito-900); top:8px; height:12px; border-radius:2px; }
.es-partida .gantt-bar-txt { line-height:12px; }
.es-sub .gantt-label { padding-left:1.4rem; }
.flujo-svg { width:100%; height:230px; background:#fff; border:1px solid #e3e2dd; border-radius:12px; margin-bottom:.4rem; }
.leyenda { display:inline-block; width:12px; height:10px; border-radius:2px; vertical-align:middle; margin-right:3px; }
.prog-tabla tr.fila-p td { background: var(--hueso); }
.prog-tabla td { vertical-align: middle; }

@media print {
  .gantt, .flujo-svg { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .gantt-row { page-break-inside: avoid; }
  .gantt-row { grid-template-columns: 210px 140px minmax(0,1fr); }
}

/* Planilla de gastos generales: líneas automáticas (HH del itemizado) */
.grilla tr.gg-auto td { background:#f3f7fb; color:#3d4a54; padding-top:.45rem; padding-bottom:.45rem; }
.grilla tr.gg-auto td.c-num { border-left:3px solid var(--azul-hh); }

/* Tipos de ítem del APU: Equipos y Varios; fila de leyes sociales */
.badge-eq { background:#2e7d6f; color:#fff; font-weight:600; }
.badge-var { background:#7a7568; color:#fff; font-weight:600; }
.grilla tr.fila-item.tipo-eq td.c-num { border-left:3px solid #2e7d6f; }
.grilla tr.fila-item.tipo-var td.c-num { border-left:3px solid #7a7568; }
.grilla tr.fila-ls td { background:#f3f7fb; color:#3d4a54; font-style:italic; padding-top:.4rem; padding-bottom:.4rem; }
.grilla tr.fila-ls td.c-num { border-left:3px solid var(--azul-hh); }
.grilla tr.fila-ls.oculta, .grilla tr.fila-ls.d-none { display:none; }
.grilla tr.fila-partida td.c-pu { color:#5d584e; }

/* Logo de la empresa en documentos */
.doc-emisor { display:flex; align-items:center; gap:1rem; }
.doc-logo { max-height:72px; max-width:180px; object-fit:contain; flex-shrink:0; }
.logo-preview { max-height:110px; max-width:260px; object-fit:contain; background:#fff; border:1px dashed #c9c5bb; border-radius:8px; padding:.5rem; }
@media print { .doc-logo { max-height:64px; } }
