/* ============================================================
   Arcosto (antes Kubo, Cubica y OpusRea) — sistema visual
   Taller sobre papel: superficie clara, riel azul de plano,
   tipografía DIN (Bahnschrift) para claves y cifras.
   ============================================================ */

:root{
  /* superficies y tinta */
  --papel:#F3F4F6; --superficie:#FFFFFF; --superficie-2:#EBEEF2; --superficie-3:#E1E5EA;
  --tinta:#1B2430; --tinta-2:#4A5563; --tinta-3:#7B8794;
  --linea:#DCE1E7; --linea-2:#C5CCD5;
  /* riel (explorador de vistas) */
  --riel:#14324F; --riel-2:#1B4066; --riel-tinta:#E3ECF6; --riel-tenue:#8EA6C2; --riel-activo:#2D6FD6;
  /* acento y semántica */
  --acento:#1F5FBF; --acento-tinta:#FFFFFF; --acento-suave:#E4EDFB; --acento-linea:#9BBCEB;
  --ok:#1E7F4F; --ok-suave:#E0F2E7;
  --aviso:#9A6400; --aviso-suave:#FBF0D6;
  --peligro:#B23B3B; --peligro-suave:#FBE5E5;
  --prop:#5A4BB5; --prop-suave:#ECE8FA;
  /* hoja: banda de agrupador y celda con cantidad (como en OPUS) */
  --partida-fondo:#FBF5E6; --partida-fondo-2:#F5ECD4; --celda-dato:#E8F5EC;
  /* forma */
  --r-s:4px; --r:6px; --r-l:10px;
  --sombra:0 1px 2px rgba(27,36,48,.06),0 12px 32px -16px rgba(27,36,48,.28);
  --foco:0 0 0 3px rgba(31,95,191,.35);
  /* tipografía */
  --f-ui:"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,sans-serif;
  --f-dato:"Bahnschrift","Segoe UI Variable Display","Roboto Condensed","Arial Narrow",sans-serif;
  /* ritmo */
  --riel-ancho:232px; --cab-alto:56px;
}
@media (prefers-color-scheme: dark){
  :root{
    --papel:#0F1419; --superficie:#171D25; --superficie-2:#1F2731; --superficie-3:#2A3440;
    --tinta:#E7ECF2; --tinta-2:#AAB5C3; --tinta-3:#75818F;
    --linea:#2A3440; --linea-2:#3A4655;
    --riel:#0C1E31; --riel-2:#13304F; --riel-tinta:#E3ECF6; --riel-tenue:#7F97B4; --riel-activo:#3B7FE0;
    --acento:#5B97EA; --acento-tinta:#0B1A2E; --acento-suave:#1B2F4C; --acento-linea:#2F5A94;
    --ok:#5CCB8E; --ok-suave:#15301F; --aviso:#E2B04A; --aviso-suave:#3A2C0F;
    --peligro:#F07878; --peligro-suave:#3D1A1A; --prop:#B3A6F2; --prop-suave:#272047;
    --partida-fondo:#2A2516; --partida-fondo-2:#352E1A; --celda-dato:#17301F;
    --sombra:0 1px 2px rgba(0,0,0,.4),0 12px 32px -16px rgba(0,0,0,.7);
  }
}

*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  font-family:var(--f-ui);font-size:14px;line-height:1.45;color:var(--tinta);background:var(--papel);
  overflow:hidden;font-variant-numeric:tabular-nums;
}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:none;box-shadow:var(--foco)}
.salto{position:absolute;left:8px;top:-40px;background:var(--acento);color:var(--acento-tinta);padding:6px 10px;border-radius:var(--r);z-index:100}
.salto:focus{top:8px}
.visualmente-oculto{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- disposición general ---------- */
.app{
  display:grid;height:100vh;
  grid-template-columns:var(--riel-ancho) 1fr;grid-template-rows:var(--cab-alto) 1fr;
  grid-template-areas:"riel cabecera" "riel contenido";
}
.riel{grid-area:riel;background:var(--riel);color:var(--riel-tinta);display:flex;flex-direction:column;min-height:0}
.cabecera{grid-area:cabecera;background:var(--superficie);border-bottom:1px solid var(--linea);display:flex;align-items:center;gap:12px;padding:0 20px}
.contenido{grid-area:contenido;overflow:auto;min-height:0}

/* ---------- riel: marca y navegación ---------- */
.marca{display:flex;align-items:center;gap:10px;padding:14px 16px 10px;border-bottom:1px solid rgba(255,255,255,.08)}
.marca-sello{
  width:34px;height:34px;border-radius:var(--r);background:var(--riel-activo);color:#fff;
  display:grid;place-items:center;font-family:var(--f-dato);font-weight:700;font-size:15px;letter-spacing:.5px;
}
.marca b{display:block;font-family:var(--f-dato);font-size:17px;font-weight:600;letter-spacing:.3px;line-height:1.1}
.marca small{display:block;color:var(--riel-tenue);font-size:11.5px}
.nav{flex:1;overflow:auto;padding:8px 10px}
.nav-grupo{margin:12px 8px 4px;font-size:11.5px;color:var(--riel-tenue);font-weight:600}
.nav-item{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:transparent;color:var(--riel-tinta);
  padding:8px 10px;border-radius:var(--r);font-size:13.5px;line-height:1.2;
}
.icono{width:18px;height:18px;flex:none}
.nav-item .icono{opacity:.8}
.nav-item:hover{background:var(--riel-2)}
.nav-item[aria-current="page"]{background:var(--riel-activo);color:#fff;font-weight:600}
.nav-item[aria-current="page"] .icono{opacity:1}
.riel-pie{padding:10px;border-top:1px solid rgba(255,255,255,.08)}
.menu summary{list-style:none;cursor:pointer;padding:8px 10px;border-radius:var(--r);color:var(--riel-tinta);font-size:13.5px;display:flex;align-items:center;gap:10px}
.menu summary::-webkit-details-marker{display:none}
.menu summary:hover{background:var(--riel-2)}
.menu[open] summary{background:var(--riel-2)}
.menu .menu-opciones{display:flex;flex-direction:column;gap:2px;padding:4px 0 0 28px}
.menu .menu-opciones button{text-align:left;border:0;background:transparent;color:var(--riel-tenue);padding:6px 8px;border-radius:var(--r-s);font-size:13px}
.menu .menu-opciones button:hover{color:#fff;background:var(--riel-2)}

.usuario-riel{display:flex;align-items:center;gap:8px;padding:10px 10px 2px;font-size:12.5px;color:var(--riel-tenue)}
.usuario-riel span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.usuario-riel button{background:transparent;border:1px solid var(--riel-2);color:var(--riel-tinta);border-radius:var(--r);padding:4px 9px;font-size:12px}
.usuario-riel button:hover{background:var(--riel-2)}

/* ---------- cabecera: obra activa ---------- */
.obra-sel{display:flex;align-items:center;gap:8px;min-width:0}
.obra-sel span{font-size:12.5px;color:var(--tinta-3)}
.obra-sel select{
  font-family:var(--f-dato);font-size:16px;font-weight:600;border:1px solid transparent;background:transparent;
  padding:4px 28px 4px 6px;border-radius:var(--r);max-width:320px;text-overflow:ellipsis;
  appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' fill='none' stroke='%237B8794' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center;
}
.obra-sel select:hover{border-color:var(--linea-2);background-color:var(--superficie-2)}
.obra-meta{font-size:12.5px;color:var(--tinta-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}
.espacio{flex:1}
.obra-total{text-align:right;line-height:1.1;padding-right:8px;border-right:1px solid var(--linea)}
.obra-total span{display:block;font-size:11.5px;color:var(--tinta-3)}
.obra-total strong{font-family:var(--f-dato);font-size:20px;font-weight:600;color:var(--ok)}

/* ---------- botones ---------- */
.btn{
  display:inline-flex;align-items:center;gap:6px;border:1px solid var(--linea-2);background:var(--superficie);color:var(--tinta);
  padding:7px 12px;border-radius:var(--r);font-size:13px;font-weight:500;white-space:nowrap;
  transition:background .12s,border-color .12s,color .12s;
}
.btn:hover{background:var(--superficie-2);border-color:var(--tinta-3)}
.btn:active{background:var(--superficie-3)}
.btn.primary{background:var(--acento);border-color:var(--acento);color:var(--acento-tinta)}
.btn.primary:hover{filter:brightness(1.08)}
.btn.ghost{background:transparent;border-color:transparent;color:var(--tinta-2)}
.btn.ghost:hover{background:var(--superficie-2);border-color:transparent;color:var(--tinta)}
.btn.small{padding:5px 10px;font-size:12.5px}
.btn.danger{color:var(--peligro)}
.btn.danger:hover{background:var(--peligro-suave);border-color:var(--peligro)}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.45;cursor:not-allowed}
.btn.ocupado{position:relative;color:transparent}
.btn.ocupado::after{content:"";position:absolute;inset:0;margin:auto;width:14px;height:14px;border:2px solid var(--linea-2);border-top-color:var(--acento);border-radius:50%;animation:girar .8s linear infinite}
@keyframes girar{to{transform:rotate(360deg)}}

/* ---------- vistas ---------- */
.view{display:none;padding:20px 24px 48px;max-width:1360px}
.view.active{display:block}
.panel-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:14px;flex-wrap:wrap}
.panel-head h2{font-family:var(--f-dato);font-size:22px;font-weight:600;margin:0;letter-spacing:.2px}
.hint{color:var(--tinta-3);font-size:12.5px;margin:2px 0 0}
.selector{display:flex;flex-direction:column;gap:3px;min-width:260px}
.selector label{font-size:11.5px;color:var(--tinta-3)}
.selector select,.campo-texto{
  background:var(--superficie);border:1px solid var(--linea-2);border-radius:var(--r);padding:7px 9px;font-size:13px;width:100%;
}
.selector select:hover{border-color:var(--tinta-3)}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.chip{display:inline-flex;align-items:center;gap:6px;background:var(--superficie);border:1px solid var(--linea-2);border-radius:var(--r);padding:5px 8px;font-size:12.5px;color:var(--tinta-2)}
.chip select{border:0;background:transparent;font-weight:500;padding:0 4px}
.chk{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--tinta-2);cursor:pointer;padding:6px 4px}
.chk input{accent-color:var(--acento);width:15px;height:15px;margin:0}

/* ---------- tablas (hoja) ---------- */
.table-wrap{background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);overflow:auto;box-shadow:var(--sombra)}
table.grid{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
table.grid th{
  position:sticky;top:0;z-index:1;text-align:left;padding:9px 10px;background:var(--superficie-2);color:var(--tinta-2);
  font-size:12px;font-weight:600;border-bottom:1px solid var(--linea-2);
}
table.grid td{padding:5px 10px;border-bottom:1px solid var(--linea);vertical-align:middle;height:38px}
table.grid tbody tr:hover td{background:var(--superficie-2)}
table.grid .num,table.grid th.num{text-align:right;font-family:var(--f-dato);font-size:13.5px}
table.grid .clave{font-family:var(--f-dato);font-size:13px;color:var(--tinta-2);letter-spacing:.2px;white-space:nowrap}
table.grid .pos{color:var(--ok)}
table.grid .neg{color:var(--peligro)}
table.grid .tenue{color:var(--tinta-3)}
table.grid td input,table.grid td select{
  width:100%;background:transparent;border:1px solid transparent;border-radius:var(--r-s);padding:5px 7px;min-height:30px;
}
table.grid td input:hover,table.grid td select:hover{border-color:var(--linea-2);background:var(--superficie)}
table.grid td input:focus-visible,table.grid td select:focus-visible{border-color:var(--acento);background:var(--superficie);box-shadow:var(--foco)}
table.grid td input.num{text-align:right;font-family:var(--f-dato);font-size:13.5px}
table.grid td input[type=number]::-webkit-inner-spin-button{opacity:0}
table.grid td input[type=number]:hover::-webkit-inner-spin-button{opacity:1}
table.grid tfoot td{position:sticky;bottom:0;background:var(--superficie-2);border-top:1px solid var(--linea-2);border-bottom:0;font-weight:500;height:36px;padding:6px 10px}
tfoot .strong{font-weight:600}
tfoot .total td{font-size:14px}
tfoot .total .num{font-size:16px;font-weight:600}

/* jerarquía de la hoja de presupuesto */
tr.row-partida td{background:var(--partida-fondo);font-weight:600;height:40px}
tr.row-partida:hover td{background:var(--partida-fondo-2)}
table.grid td.fila-num{font-family:var(--f-dato);font-size:12px;color:var(--tinta-3);text-align:center;padding:0 4px;width:44px;background:var(--superficie-2);border-right:1px solid var(--linea)}
tr.row-partida td.fila-num{background:var(--superficie-2)}
table.grid td.num.con-dato{background:var(--celda-dato)}
table.grid th .th-total{display:block;font-family:var(--f-dato);font-size:14px;font-weight:600;color:var(--tinta)}
tr.row-partida .clave{color:var(--tinta);font-size:14px}
.plegar{
  width:26px;height:26px;border:0;border-radius:var(--r-s);background:transparent;color:var(--tinta-2);
  display:inline-grid;place-items:center;transition:transform .15s;
}
.plegar:hover{background:var(--superficie-3);color:var(--tinta)}
.plegar[aria-expanded="false"]{transform:rotate(-90deg)}
tr.row-concepto td.nivel{position:relative}
tr.row-concepto td.nivel::before{content:"";position:absolute;left:18px;top:0;bottom:0;border-left:2px solid var(--linea-2)}
.borrar{
  width:28px;height:28px;border:0;border-radius:var(--r-s);background:transparent;color:var(--tinta-3);
  display:inline-grid;place-items:center;font-size:15px;line-height:1;
}
.borrar:hover,.borrar:focus-visible{background:var(--peligro-suave);color:var(--peligro)}
table.grid td.vacia{text-align:center;color:var(--tinta-3);padding:28px 16px;height:auto}
table.grid td.vacia .btn{margin-left:10px}
table.grid td.error{text-align:center;color:var(--peligro);padding:14px;height:auto}
.vacio{text-align:center;color:var(--tinta-3);padding:36px 16px;background:var(--superficie);border:1px dashed var(--linea-2);border-radius:var(--r-l)}

/* ---------- APU ---------- */
.apu-layout{display:grid;grid-template-columns:300px 1fr;gap:16px;align-items:start}
.apu-sidebar{background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);padding:12px;box-shadow:var(--sombra)}
.apu-sidebar h3{font-size:12.5px;color:var(--tinta-3);margin:0 0 8px;font-weight:600}
.apu-list{width:100%;border:1px solid var(--linea);border-radius:var(--r);padding:4px;background:var(--superficie);font-family:var(--f-dato);font-size:13px;height:420px}
.apu-list option{padding:7px 8px;border-radius:var(--r-s);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.apu-list option:checked{background:var(--acento-suave);color:var(--tinta)}
.apu-detail{display:flex;flex-direction:column;gap:10px;min-width:0}
.apu-head{font-family:var(--f-dato);font-size:17px;font-weight:600}
.apu-head .meta{display:block;font-family:var(--f-ui);font-size:12.5px;color:var(--tinta-3);font-weight:400;margin-top:3px}
.apu-head .meta b{color:var(--ok);font-family:var(--f-dato);font-size:14px}

/* ---------- etiquetas de certeza ---------- */
.pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.5}
.pill.ok{background:var(--ok-suave);color:var(--ok)}
.pill.warn{background:var(--aviso-suave);color:var(--aviso)}
.pill.prop{background:var(--prop-suave);color:var(--prop)}
.pill.no{background:var(--peligro-suave);color:var(--peligro)}
.leyenda{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px;font-size:12.5px;color:var(--tinta-3)}

/* ---------- casos de prueba ---------- */
.casos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.caso{background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);padding:16px;display:flex;flex-direction:column;box-shadow:var(--sombra)}
.caso .espec{font-size:12px;color:var(--acento);margin-bottom:4px}
.caso h3{margin:0 0 10px;font-family:var(--f-dato);font-size:17px;font-weight:600}
.caso .campo{display:grid;grid-template-columns:120px 1fr;gap:6px;font-size:12.5px;padding:3px 0;border-bottom:1px solid var(--linea)}
.caso .campo b{color:var(--tinta-3);font-weight:500}
.caso .campo .v{font-family:var(--f-dato);font-size:13px}
.caso .result{margin-top:12px;padding:10px 12px;border-radius:var(--r);background:var(--ok-suave);color:var(--ok);font-family:var(--f-dato);font-size:14px;font-weight:600}
.caso .veri{margin-top:6px;font-size:12px;color:var(--tinta-3)}

/* ---------- informe ---------- */
.informe-body{max-width:760px;background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);padding:24px 28px;box-shadow:var(--sombra)}
.informe-body section{margin-bottom:22px}
.informe-body h3{font-family:var(--f-dato);font-size:16px;font-weight:600;margin:0 0 8px}
.informe-body p{font-size:14px;margin:0 0 8px;color:var(--tinta-2)}
.informe-body .flow{font-family:var(--f-dato);font-size:13px;background:var(--superficie-2);border:1px solid var(--linea);border-radius:var(--r);padding:12px 14px;white-space:pre;overflow-x:auto;line-height:1.7}
.informe-body ul{margin:0 0 8px;padding-left:20px;color:var(--tinta-2);font-size:13.5px}
.informe-body a{color:var(--acento)}

/* ---------- notas ---------- */
.note{background:var(--aviso-suave);border-left:3px solid var(--aviso);border-radius:0 var(--r) var(--r) 0;padding:10px 12px;font-size:12.5px;color:var(--tinta-2);margin-top:12px;max-width:760px}
.note strong{color:var(--aviso)}

/* ---------- modal ---------- */
.modal-backdrop{position:fixed;inset:0;background:rgba(20,50,79,.45);display:grid;place-items:center;z-index:50;padding:24px}
.modal-backdrop[hidden]{display:none}
.modal{background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);padding:20px 22px;width:100%;max-width:480px;max-height:90vh;overflow:auto;box-shadow:var(--sombra)}
.modal h3{margin:0 0 14px;font-family:var(--f-dato);font-size:18px;font-weight:600}
.form-row{display:grid;grid-template-columns:110px 1fr;align-items:center;gap:10px;margin-bottom:10px}
.form-row label{font-size:13px;color:var(--tinta-2)}
.form-row input,.form-row select{background:var(--superficie);border:1px solid var(--linea-2);border-radius:var(--r);padding:8px 10px;width:100%}
.form-row input:focus-visible,.form-row select:focus-visible{border-color:var(--acento)}
.form-row input[aria-invalid="true"]{border-color:var(--peligro)}
.form-error{color:var(--peligro);font-size:12.5px;min-height:18px;margin:2px 0 6px}
.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}

/* ---------- avisos ---------- */
.avisos{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:8px;z-index:60;max-width:360px}
.avisos-item{
  background:var(--tinta);color:var(--papel);padding:10px 14px;border-radius:var(--r);font-size:13px;box-shadow:var(--sombra);
  border-left:3px solid var(--acento);animation:aparecer .18s ease-out;
}
.avisos-item.ok{border-left-color:var(--ok)}
.avisos-item.error{border-left-color:var(--peligro)}
@keyframes aparecer{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- barras de desplazamiento ---------- */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--linea-2);border-radius:6px;border:2px solid var(--papel)}
::-webkit-scrollbar-track{background:transparent}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* ---------- tableta y móvil ---------- */
@media (max-width:980px){
  .app{grid-template-columns:1fr;grid-template-rows:auto auto 1fr;grid-template-areas:"cabecera" "riel" "contenido"}
  .riel{flex-direction:row;align-items:center;overflow-x:auto;border-bottom:1px solid var(--riel-2)}
  .marca{padding:8px 12px;border:0;flex:none}
  .marca small{display:none}
  .nav{display:flex;gap:2px;padding:6px 8px;overflow:visible;flex:none}
  .nav-grupo{display:none}
  .nav-item{width:auto;padding:7px 10px;font-size:13px}
  .nav-item .icono{display:none}
  .riel-pie{border:0;padding:6px 8px;margin-left:auto;flex:none;display:flex;align-items:center;gap:4px}
  .usuario-riel{padding:0}
  .usuario-riel span{display:none}
  .menu{position:relative}
  .menu .menu-opciones{position:absolute;right:0;top:100%;background:var(--riel);padding:6px;border-radius:var(--r);box-shadow:var(--sombra);min-width:200px;z-index:20}
  .cabecera{height:auto;padding:10px 14px;display:grid;grid-template-columns:1fr auto;grid-template-areas:"obra nueva" "datos total";gap:6px 10px;align-items:center}
  .obra-sel{grid-area:obra;min-width:0}
  .obra-sel span{display:none}
  .obra-sel select{max-width:100%}
  .obra-meta,.espacio{display:none}
  #btnEditarObra{grid-area:datos;justify-self:start;margin-left:-8px}
  .obra-total{grid-area:total;border:0;padding:0}
  #btnNuevaObra{grid-area:nueva}
  table.grid{min-width:860px}
  #tblPresupuesto{min-width:980px}
  #tblCatalogo,#tblEvidencia{min-width:640px}
  .riel{scrollbar-width:none}
  .riel::-webkit-scrollbar{display:none}
  .view{padding:14px 14px 40px}
  .apu-layout{grid-template-columns:1fr}
  .apu-list{height:180px}
  table.grid td,table.grid th{padding-left:6px;padding-right:6px}
  .form-row{grid-template-columns:1fr}
}
@media (max-width:560px){
  .obra-sel select{max-width:180px;font-size:15px}
  .obra-meta{display:none}
  .obra-total strong{font-size:17px}
  table.grid{font-size:12.5px}
  .avisos{left:12px;right:12px;bottom:12px;max-width:none}
}

/* generador: dimensiones que no usa el modo y renglones de descuento */
table.grid td input[tabindex="-1"]{opacity:.35}
tr.descuento td.fila-num{color:var(--peligro)}
tr.descuento td:nth-child(2) input{color:var(--peligro)}

/* catálogo: filtros y columna de fuente */
.filtros{display:flex;gap:10px;flex-wrap:wrap}
.filtros .selector{min-width:200px}
td.celda-fuente{white-space:normal}
td.celda-fuente .pill{margin-right:6px;vertical-align:top}
td.celda-fuente .fuente{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;color:var(--tinta-3);line-height:1.35;margin-top:3px}
@media (max-width:980px){ #tblCatalogo{min-width:900px} .filtros .selector{min-width:0;flex:1} }

/* ============================================================
   Versión 2: funciones F01–F30 del informe
   ============================================================ */
code{font-family:var(--f-dato);font-size:12.5px;background:var(--superficie-2);border:1px solid var(--linea);border-radius:var(--r-s);padding:0 4px}
textarea{font:inherit;color:inherit}

/* modal amplio y formularios agrupados */
.modal.grande{max-width:860px}
.grupo-form{border:1px solid var(--linea);border-radius:var(--r);padding:10px 14px 4px;margin:0 0 12px}
.grupo-form legend{font-size:12.5px;font-weight:600;color:var(--tinta-2);padding:0 6px}
.campo-pers{display:grid;grid-template-columns:1fr 2fr 32px;gap:8px;margin-bottom:6px}
.campo-pers input{background:var(--superficie);border:1px solid var(--linea-2);border-radius:var(--r);padding:7px 9px}
.zona-peligro{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--peligro-suave);background:var(--peligro-suave);border-radius:var(--r);padding:10px 12px;margin-top:12px;font-size:12.5px;color:var(--tinta-2)}
.modal h4{font-family:var(--f-dato);font-size:14px;margin:14px 0 2px}
.form-row .span-2{grid-column:2}

/* hoja de presupuesto: subpartidas */
tr.row-partida.nivel-2 td{background:var(--partida-fondo-2)}
tr.row-partida.nivel-3 td{background:var(--superficie-2)}
td.acciones{white-space:nowrap}
.borrar.mas{font-size:16px;color:var(--acento)}
.borrar.mas:hover{background:var(--acento-suave);color:var(--acento)}
td.nota-sobrecosto{font-size:12px;font-weight:400;height:auto;padding:6px 10px}

/* controles compactos dentro de chips */
.chip input{border:0;background:transparent;font:inherit;font-weight:500;padding:0 4px}
.chip-num{width:86px;text-align:right;font-family:var(--f-dato)}
.chip input[type=date]{width:auto}

/* tarjetas y rejillas de campos */
.tarjeta{background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);padding:14px 16px;box-shadow:var(--sombra);margin-bottom:14px;min-width:0}
.tarjeta h3{font-family:var(--f-dato);font-size:15px;font-weight:600;margin:0 0 10px}
.dos-columnas{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}
.rejilla-campos{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px 14px}
.campo{display:flex;flex-direction:column;gap:3px;font-size:12.5px;color:var(--tinta-2);min-width:0}
.campo input,.campo select{background:var(--superficie);border:1px solid var(--linea-2);border-radius:var(--r);padding:7px 9px;width:100%;font-size:13px}
.campo input.num{text-align:right;font-family:var(--f-dato)}
.campo small{color:var(--tinta-3);font-size:11.5px;line-height:1.3}
.campo code{margin-left:4px}
.fila-campos{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end}
.fila-campos .campo{flex:1 1 150px}
.fila-campos .campo.ancho{flex-basis:100%}
.dato-grande{font-family:var(--f-dato);font-size:20px;color:var(--ok);font-weight:600}
table.grid.compacta td{height:32px;padding:3px 6px}
table.grid.compacta th{position:static}
td small.sub{display:block;color:var(--tinta-3);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:420px}

/* listas laterales (matrices, estimaciones, órdenes, contratos) */
.lista-botones{display:flex;flex-direction:column;gap:4px;max-height:460px;overflow:auto}
.lista-botones button{position:relative;text-align:left;border:1px solid transparent;background:transparent;border-radius:var(--r);padding:8px 10px;font-family:var(--f-dato);font-size:13.5px;color:var(--tinta)}
.lista-botones button small{display:block;font-family:var(--f-ui);font-size:11.5px;color:var(--tinta-3)}
.lista-botones button .pill{position:absolute;right:8px;top:8px;font-size:11px}
.lista-botones button:hover{background:var(--superficie-2)}
.lista-botones button[aria-selected="true"]{background:var(--acento-suave);border-color:var(--acento-linea)}

/* matrices paramétricas */
.descripcion-generada{margin:12px 0 0;font-size:13px;color:var(--tinta-2)}
.opciones-integrar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px}
.opciones-integrar .campo-texto{width:auto;max-width:340px}

/* estimaciones */
tr.excede td{background:var(--peligro-suave)}

/* programa de obra (Gantt) */
table.gantt td.fecha{font-family:var(--f-dato);font-size:12.5px;white-space:nowrap}
table.gantt tr.critica td.fila-num{color:var(--peligro);font-weight:700}
.celda-gantt{position:relative;padding:0 8px!important}
.gantt-fila{position:relative;height:22px}
.gantt-barra{position:absolute;top:4px;height:14px;border-radius:3px;background:var(--acento);opacity:.85}
.gantt-barra.critica{background:var(--peligro)}
.gantt-barra.estado-hecha{opacity:.45}
.gantt-hoy{position:absolute;top:-6px;bottom:-6px;border-left:2px dashed var(--aviso)}
.gantt-escala{position:relative;height:16px}
.gantt-escala span{position:absolute;transform:translateX(-50%);font-family:var(--f-dato);font-size:11px;color:var(--tinta-3);white-space:nowrap}

/* Kanban */
.kanban{display:grid;grid-template-columns:repeat(4,minmax(220px,1fr));gap:12px;align-items:start;overflow-x:auto}
.kanban-col{background:var(--superficie-2);border:1px solid var(--linea);border-radius:var(--r-l);padding:10px;min-height:220px;transition:background .12s}
.kanban-col.sobre{background:var(--acento-suave);border-color:var(--acento-linea)}
.kanban-col h3{display:flex;justify-content:space-between;font-family:var(--f-dato);font-size:14px;margin:2px 4px 10px}
.kanban-col h3 span{color:var(--tinta-3)}
.tarjeta-kanban{background:var(--superficie);border:1px solid var(--linea);border-left:3px solid var(--acento);border-radius:var(--r);padding:8px 10px;margin-bottom:8px;cursor:grab;box-shadow:var(--sombra)}
.tarjeta-kanban.critica{border-left-color:var(--peligro)}
.tarjeta-kanban b{display:block;font-size:13px;font-weight:600;line-height:1.3}
.tarjeta-kanban small{display:block;color:var(--tinta-3);font-size:11.5px;margin-top:2px}
.tarjeta-acciones{display:grid;grid-template-columns:auto 1fr auto;gap:4px;align-items:center;margin-top:6px}
.tarjeta-acciones input{min-width:0;border:1px solid var(--linea);border-radius:var(--r-s);background:var(--superficie);padding:3px 6px;font-size:12px}
.vacio-col{text-align:center;padding:20px 0}
.kpi-mini{text-align:right;line-height:1.1}
.kpi-mini span{display:block;font-size:11.5px;color:var(--tinta-3)}
.kpi-mini strong{font-family:var(--f-dato);font-size:24px;color:var(--ok)}

/* tablero */
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-bottom:14px}
.kpi{background:var(--superficie);border:1px solid var(--linea);border-top:3px solid var(--acento);border-radius:var(--r-l);padding:10px 12px;box-shadow:var(--sombra)}
.kpi span{display:block;font-size:12px;color:var(--tinta-3)}
.kpi strong{display:block;font-family:var(--f-dato);font-size:22px;font-weight:600;margin:2px 0}
.kpi small{font-size:11.5px;color:var(--tinta-2)}
.kpi.bien{border-top-color:var(--ok)} .kpi.bien strong{color:var(--ok)}
.kpi.alerta{border-top-color:var(--aviso)} .kpi.alerta strong{color:var(--aviso)}
.kpi.mal{border-top-color:var(--peligro)} .kpi.mal strong{color:var(--peligro)}
.grafica{width:100%;height:auto;display:block}
.grafica .eje-guia{stroke:var(--linea);stroke-width:1}
.grafica .eje-texto{fill:var(--tinta-3);font-family:var(--f-dato);font-size:11px}
.grafica .linea-corte{stroke:var(--aviso);stroke-width:1.5;stroke-dasharray:4 3}
.grafica .serie-pv{fill:none;stroke:var(--acento);stroke-width:2}
.grafica .serie-ev{fill:none;stroke:var(--ok);stroke-width:2.2}
.grafica .serie-ac{fill:none;stroke:var(--peligro);stroke-width:2;stroke-dasharray:5 3}
.grafica .punto-ev{fill:var(--ok)}
.grafica .barra-80{fill:var(--acento)} .grafica .barra-resto{fill:var(--linea-2)}
.leyenda-grafica{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--tinta-2);margin-top:6px}
.leyenda-grafica span::before{content:"";display:inline-block;width:14px;height:3px;margin-right:6px;vertical-align:middle;border-radius:2px}
.l-pv::before{background:var(--acento)} .l-ev::before{background:var(--ok)} .l-ac::before{background:var(--peligro)}
.barras{display:flex;flex-direction:column;gap:6px}
.barra-fila{display:grid;grid-template-columns:minmax(0,1.3fr) 2fr 64px;gap:8px;align-items:center;font-size:12.5px}
.barra-etiqueta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--tinta-2)}
.barra-pista{background:var(--superficie-2);border-radius:3px;height:12px}
.barra{display:block;height:100%;background:var(--acento);border-radius:3px}
.barra-valor{text-align:right;font-family:var(--f-dato)}

/* contratos */
.area-plantilla{width:100%;background:var(--superficie);border:1px solid var(--linea-2);border-radius:var(--r);padding:10px;font:12.5px/1.55 var(--f-ui);resize:vertical}
.vista-contrato{white-space:pre-wrap;font:13px/1.6 Georgia,"Times New Roman",serif;margin:0;max-height:520px;overflow:auto;background:var(--superficie-2);border-radius:var(--r);padding:14px}

/* reportes */
.reportes{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.reporte p{font-size:13px;color:var(--tinta-2);margin:0 0 10px}
.reporte .toolbar{margin:0}

/* planos DXF */
.herramientas .resultado-medicion{font-family:var(--f-dato);font-size:15px;font-weight:600;color:var(--ok);min-width:140px}
.visor-plano{background:var(--superficie);border:1px solid var(--linea);border-radius:var(--r-l);box-shadow:var(--sombra);margin-bottom:12px;overflow:hidden}
#svgPlano{display:block;width:100%;height:min(62vh,620px);background:var(--superficie);touch-action:none;cursor:grab}
#svgPlano.herr-longitud,#svgPlano.herr-area,#svgPlano.herr-piezas{cursor:crosshair}
#svgPlano path{fill:none;stroke-width:1;vector-effect:non-scaling-stroke}
#svgPlano .trazo-medicion{stroke:var(--aviso);stroke-width:2.5;fill:rgba(226,176,74,.18)}
#svgPlano .vertice-medicion{fill:var(--aviso);stroke:none}
#svgPlano .marca-pieza{fill:var(--peligro);stroke:none;opacity:.8}
.visor-ayuda{padding:6px 12px;border-top:1px solid var(--linea);margin:0}
.muestra{display:inline-block;width:10px;height:10px;border-radius:2px}
tr.de-plano td.fila-num{color:var(--acento)}

@media (max-width:980px){
  .dos-columnas{grid-template-columns:1fr}
  .kanban{grid-template-columns:repeat(4,minmax(240px,1fr))}
  .modal.grande{max-width:100%}
  table.gantt{min-width:1000px}
  .campo-pers{grid-template-columns:1fr 1fr 32px}
}
.gantt-escala span:first-child{transform:none}
.grafica{max-height:300px}
@media (max-width:560px){ .kpis{grid-template-columns:1fr 1fr} .kpi strong{font-size:19px} }

/* módulo de IA (concurso y memoria de cálculo) */
.pasos-ia{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px;padding:0;list-style:none;counter-reset:paso}
.pasos-ia li{counter-increment:paso;font-size:12.5px;color:var(--tinta-3);background:var(--superficie);border:1px solid var(--linea);border-radius:999px;padding:4px 12px}
.pasos-ia li::before{content:counter(paso) ". ";font-family:var(--f-dato);font-weight:600}
.pasos-ia li.hecho{color:var(--ok);border-color:var(--ok);background:var(--ok-suave)}
.celda-ia{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12.5px}
.ocupado-ia{font-size:12.5px;color:var(--acento);font-weight:500}
.ocupado-ia::before{content:"";display:inline-block;width:11px;height:11px;margin-right:6px;vertical-align:-1px;border:2px solid var(--acento-linea);border-top-color:var(--acento);border-radius:50%;animation:girar .8s linear infinite}
.memoria-ia h4{font-family:var(--f-dato);font-size:13.5px;margin:12px 0 4px}
.memoria-ia ul{margin:0 0 6px;padding-left:20px;font-size:13px;color:var(--tinta-2)}
.memoria-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 8px;font-size:12px}
.memoria-datos{display:grid;grid-template-columns:90px 1fr;gap:4px 10px;margin:0;font-size:13px}
.memoria-datos dt{color:var(--tinta-3)}
.memoria-datos dd{margin:0}
#apuMemoria .tarjeta{margin-top:4px}

/* ---------- panel de administración (public/vistas/admin.js) ---------- */
/* página aparte /admin (public/admin/): cabecera con el título de la sección y enlace a la app en el riel */
.cabecera-admin b{font-family:var(--f-dato);font-size:17px;font-weight:600}
.enlace-riel{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r);color:var(--riel-tinta);font-size:13.5px;text-decoration:none}
.enlace-riel:hover{background:var(--riel-2)}
.enlace-riel[hidden]{display:none}
.pill.neutro{background:var(--superficie-2);color:var(--tinta-2)}
.pill.acento{background:var(--acento-suave);color:var(--acento)}
.filtros-admin .filtro{width:auto;min-width:160px}
.filtros-admin input[type=search].filtro{min-width:240px}
table.grid tr.clicable{cursor:pointer}
table.grid .cliente-celda{line-height:1.25}
table.grid .cliente-celda b{display:block;font-weight:600}
table.grid .cliente-celda small{color:var(--tinta-3);font-size:12px}
table.grid small.tenue,table.grid small.neg{font-size:11.5px}
table.grid small.neg{color:var(--peligro)}
.alerta-texto{color:var(--aviso);font-weight:600}
table.grid .acciones-fila{text-align:right;white-space:nowrap}
table.grid .acciones-fila .btn{margin-left:4px}
table.grid .celda-notas,table.grid .celda-detalle{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.grid.compacta td{height:34px}
.actividad{list-style:none;margin:0;padding:0}
.actividad li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid var(--linea);font-size:12.5px}
.actividad li:last-child{border-bottom:0}
.actividad .que{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tinta-2)}
.actividad .que b{color:var(--tinta);font-weight:600}
.actividad time{color:var(--tinta-3);white-space:nowrap;font-family:var(--f-dato);font-size:12px}
.datos-sistema{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px 18px;margin:0}
.datos-sistema dt{font-size:11.5px;color:var(--tinta-3)}
.datos-sistema dd{margin:2px 0 0;font-family:var(--f-dato);font-size:14px}
.ficha-cliente{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:-6px 0 12px}
.ficha-cliente .correo{color:var(--tinta-2)}
.ficha-cliente .hint{flex-basis:100%;margin:0}
.kpis-modal{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));margin-bottom:12px}
.kpis-modal .kpi{box-shadow:none}
.kpis-modal .kpi strong{font-size:18px}
.modal .table-wrap{box-shadow:none;margin-bottom:4px}
.modal table.grid{min-width:0}
.planes-admin .tarjeta h3{display:flex;align-items:center;gap:8px}
.lista-funciones{margin:4px 0 12px;padding-left:18px;font-size:13px;color:var(--tinta-2);line-height:1.6}
.cargando{padding:20px 0}
@media (max-width:980px){
  .cabecera.cabecera-admin{display:flex}
  .riel-pie .enlace-riel span{display:none}
  .modal table.grid{min-width:640px}
  .filtros-admin .filtro,.filtros-admin input[type=search].filtro{min-width:0;flex:1 1 160px}
}
