* { box-sizing: border-box; }
body {
    font-family: -apple-system, Segoe UI, Arial, sans-serif;
    background: #f4f5f7;
    color: #222;
    margin: 0;
    padding: 0 0 40px;
}
header {
    background: #1f2a44;
    color: #fff;
    padding: 14px 24px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    row-gap: 8px;
}
header > div:first-child {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    row-gap: 8px;
}
header a {
    color: #fff;
    text-decoration: none;
    margin-right: 18px;
    font-weight: 600;
}
header a.active {
    text-decoration: underline;
}
/* Contador junto a "Pendientes" (bolita naranja con el número). */
.nav-badge {
    background: #c98a1f;
    color: #fff;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 700;
    margin-left: 2px;
}
/* Franja de "proyectos abiertos" — a propósito en su PROPIA fila, fuera del
   menú principal. El menú de arriba es contenido fijo (casi nunca cambia de
   tamaño); los proyectos abiertos son variables (cualquier cantidad, cualquier
   largo de nombre). Mezclarlos en una sola fila fue lo que rompía el layout
   con nombres largos en pantallas angostas (8-sep-2026). Mismo criterio que
   usa Chrome (pestañas fijas arriba, barra de direcciones variable debajo).
   Cada proyecto que visitas se agrega como una pestaña (marcar_proyecto_activo()
   en apu.php); la "✕" la cierra sin tocar el proyecto (proyecto_cerrar_pestana.php). */
.nav-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    background: #e7edfb;
    border-bottom: 1px solid #d3ddf5;
    padding: 6px 24px;
}
.nav-tab {
    display: flex;
    align-items: center;
    gap: 2px;
    background: #fff;
    border: 1px solid #c7d4f2;
    border-radius: 8px;
    padding: 3px 3px 3px 10px;
    font-size: 13px;
}
.nav-tab.activo {
    background: #cddbf9;
    border-color: #9fb6ea;
}
.nav-tab-nom {
    color: #1c2536;
    font-weight: 600;
    text-decoration: none;
    max-width: 220px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.nav-tab-nom:hover { text-decoration: underline; }
.nav-tab-cerrar {
    flex: none;
    color: #7382a0;
    text-decoration: none;
    font-size: 13px;
    line-height: 1;
    padding: 3px 6px;
    border-radius: 6px;
}
.nav-tab-cerrar:hover { background: #dbe6fb; color: #1c2536; }
main {
    max-width: 1100px;
    margin: 24px auto;
    padding: 0 20px;
}
h1 { font-size: 22px; }
h2 { font-size: 18px; margin-top: 30px; }
table {
    width: 100%;
    border-collapse: collapse;
    background: #fff;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
    margin-top: 10px;
}
th, td {
    padding: 8px 10px;
    border-bottom: 1px solid #e5e7eb;
    text-align: left;
    font-size: 14px;
}
th {
    background: #eef0f4;
    font-weight: 600;
}
tr:hover td { background: #fafbfc; }
form.inline { display: inline; }
input, select, textarea {
    padding: 6px 8px;
    border: 1px solid #ccc;
    border-radius: 4px;
    font-size: 14px;
}
input[type=text], input[type=number], select, textarea { width: 100%; }
button {
    padding: 6px 14px;
    border: none;
    border-radius: 4px;
    background: #2f5fd6;
    color: #fff;
    cursor: pointer;
    font-size: 14px;
}
button.secondary { background: #6b7280; }
button.danger { background: #d6392f; }
button:hover { opacity: 0.9; }
/* Mismo look de boton, pero para un <a> -- para enlaces que abren algo
   (ej. un PDF en pestaña nueva) en vez de disparar una accion con JS. */
a.secondary {
    display: inline-block; padding: 6px 14px; border-radius: 4px;
    background: #6b7280; color: #fff; font-size: 14px; text-decoration: none;
}
a.secondary:hover { opacity: 0.9; }
.card {
    background: #fff;
    padding: 16px 20px;
    border-radius: 6px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
    margin-top: 16px;
}
.form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px;
    align-items: end;
}
.form-grid label {
    display: block;
    font-size: 12px;
    color: #555;
    margin-bottom: 3px;
}
.actions { white-space: nowrap; }
.actions form { display: inline; margin-left: 4px; }
.badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 12px;
    background: #e2e8f0;
}
.msg {
    padding: 10px 14px;
    border-radius: 4px;
    margin-bottom: 14px;
    font-size: 14px;
}
.msg.ok { background: #d1f7dd; color: #14532d; }
.msg.err { background: #fdd; color: #7a1717; }
a.btn-link {
    display: inline-block;
    padding: 6px 14px;
    background: #2f5fd6;
    color: #fff;
    border-radius: 4px;
    text-decoration: none;
    font-size: 14px;
}
.back-link { display:inline-block; margin-bottom: 10px; font-size: 14px; }
.small { font-size: 12px; color: #666; }
.modo-toggle label { font-weight: normal; font-size: 13px; margin-right: 14px; cursor: pointer; }
.chip-var {
    display: inline-block;
    padding: 2px 8px;
    margin: 2px 4px 2px 0;
    border-radius: 10px;
    font-size: 12px;
    background: #e2e8f0;
    border: 1px solid #cbd5e1;
    color: #1f2937;
    cursor: pointer;
}
.chip-var:hover { background: #d5deef; }

/* Impresion global: el menu de navegacion y los links de "volver" no pintan
   nada en papel — cada pantalla imprimible (resumen de proyecto, y a futuro
   el catalogo para el cliente) hereda esto sin tener que repetirlo. */
@media print {
    header, .back-link, .no-imprimir { display: none; }
    body { padding: 0; }
}

/* ============================================================
   Barra de totales fija — el precio de venta siempre visible
   mientras se editan cantidades. El padding-bottom del body
   evita que la barra tape la ultima fila de la tabla.
   ============================================================ */
body { padding-bottom: 84px; }

.totales-bar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    background: #1f2a44;
    color: #fff;
    display: flex;
    align-items: center;
    gap: 28px;
    padding: 10px 24px;
    box-shadow: 0 -2px 8px rgba(0,0,0,0.18);
    z-index: 50;
}
.tb-item { display: flex; flex-direction: column; line-height: 1.35; }
.tb-label { font-size: 11px; color: #aab4c8; text-transform: uppercase; letter-spacing: 0.4px; }
.tb-valor { font-size: 16px; font-variant-numeric: tabular-nums; }
.tb-destacado .tb-valor { font-size: 21px; font-weight: 600; }
.tb-destacado .tb-label { color: #d5deef; }
.tb-acciones { margin-left: auto; flex-direction: row; align-items: center; gap: 12px; }
.tb-estado { font-size: 12px; color: #aab4c8; min-width: 96px; text-align: right; }
.tb-estado.ok { color: #7ee2a8; }
.tb-estado.err { color: #ff9d9d; }

/* Celdas numericas: alineadas a la derecha y con cifras de ancho fijo,
   para que los importes se puedan comparar de un vistazo en columna. */
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; }

/* Cantidad editable en la fila */
input.cant-inline {
    width: 104px;
    text-align: right;
    font-variant-numeric: tabular-nums;
    background: #fffdf3;
    border: 1px solid #d8cfa8;
}
input.cant-inline:focus {
    outline: none;
    border-color: #2f5fd6;
    background: #fff;
    box-shadow: 0 0 0 2px rgba(47,95,214,0.18);
}
input.cant-inline.guardando { opacity: 0.55; }

/* Tarjeta de datos del proyecto, colapsable */
details.card-datos > summary {
    cursor: pointer;
    font-size: 18px;
    font-weight: 600;
    list-style: revert;
}
details.card-datos > summary .small { font-weight: 400; margin-left: 8px; }
details.card-datos[open] > summary { margin-bottom: 14px; }

/* ============================================================
   Secciones del proyecto (Piso / Partida). Reusan el patron
   visual colapsable de "Datos del proyecto" (details.card).
   ============================================================ */
details.seccion-card > summary {
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 12px;
    font-size: 16px;
    font-weight: 600;
    list-style: revert;
}
details.seccion-card[open] > summary { margin-bottom: 12px; }
.seccion-titulo { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }
.seccion-derecha { display: flex; align-items: center; gap: 12px; margin-left: auto; }
.seccion-subtotal { font-variant-numeric: tabular-nums; font-size: 16px; }

/* Inputs dentro del summary: se ven como texto hasta que reciben foco,
   para que el encabezado no parezca un formulario. */
input.seccion-codigo-inline, input.seccion-nombre-inline {
    border: 1px solid transparent;
    background: transparent;
    font-weight: 600;
    font-size: 16px;
    padding: 3px 6px;
}
input.seccion-codigo-inline { width: 70px; text-align: right; color: #555; }
input.seccion-nombre-inline { flex: 1; min-width: 120px; }
input.seccion-codigo-inline:hover, input.seccion-nombre-inline:hover {
    border-color: #d5d8de;
    background: #fff;
}
input.seccion-codigo-inline:focus, input.seccion-nombre-inline:focus {
    outline: none;
    border-color: #2f5fd6;
    background: #fff;
    box-shadow: 0 0 0 2px rgba(47,95,214,0.18);
}

/* Seccion anidada (2o nivel): sangrada y con una guia a la izquierda. */
details.seccion-hija {
    margin-left: 26px;
    border-left: 3px solid #d5deef;
    box-shadow: none;
    background: #fbfcfd;
}
details.seccion-hija > summary { font-size: 15px; }
details.seccion-hija .seccion-subtotal { font-size: 15px; }

/* Bloque de conceptos sin seccion, cuando el proyecto si usa secciones. */
details.seccion-suelta > summary { color: #6b7280; }

/* Codigo de renglon, editable en la fila */
input.codigo-inline {
    width: 72px;
    text-align: right;
    font-variant-numeric: tabular-nums;
    background: #fffdf3;
    border: 1px solid #d8cfa8;
    padding: 4px 6px;
}
input.codigo-inline:focus {
    outline: none;
    border-color: #2f5fd6;
    background: #fff;
    box-shadow: 0 0 0 2px rgba(47,95,214,0.18);
}

/* Selector de seccion dentro de la fila */
select.seccion-inline { width: auto; max-width: 190px; font-size: 12px; padding: 3px 6px; }

/* ============================================================
   Importar catalogo del cliente y mapeo a la biblioteca
   ============================================================ */
table.tabla-preview td, table.tabla-preview th { font-size: 12px; padding: 5px 7px; vertical-align: top; }
table.tabla-preview .celda-preview { max-width: 380px; }
textarea.ta-desc-manual { resize: none; overflow: hidden; min-height: 30px; line-height: 1.35; }
tr.fila-seccion  td { background: #eef3fb; font-weight: 600; }
tr.fila-ignorar  td { background: #f3f4f6; color: #9aa1ab; text-decoration: line-through; }
.badge-seccion { background: #d5deef; }
.badge-repetido { background: #ffe9b8; }
.crear-concepto-nuevo { margin-top: 10px; }
.crear-concepto-nuevo > summary { cursor: pointer; }
.crear-concepto-nuevo[open] { border: 1px dashed #ccc; border-radius: 6px; padding: 10px; margin-top: 10px; }
tr.fila-receta td { background: #f7f8fa; padding: 10px; }
table.tabla-receta-inline { margin-top: 0; box-shadow: none; }
table.tabla-receta-inline td, table.tabla-receta-inline th { font-size: 12px; padding: 5px 7px; }
table.tabla-receta-inline tfoot td { border-top: 2px solid #e5e7eb; border-bottom: none; }
.crear-concepto-nuevo[open] > summary { margin-bottom: 8px; }

.renglon-pendiente { border-left: 3px solid #d6392f; }
.renglon-cabecera { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; }
.descripcion-cliente { margin: 0 0 10px; font-size: 13px; line-height: 1.45; }
.buscador-mapeo { display: flex; gap: 8px; align-items: center; }
.buscador-mapeo .input-buscar { flex: 1; }
.resultados-mapeo table { margin-top: 8px; }
.resultados-mapeo td, .resultados-mapeo th { font-size: 12px; padding: 5px 7px; }
.estado-mapeo { margin-top: 6px; color: #666; }

/* Advertencia: no es un error, pero conviene resolverlo antes de enviar.
   Se distingue del rojo (.msg.err) para no confundir "incompleto" con "mal". */
.msg.warn { background: #fff4d6; color: #6b4b00; border-left: 3px solid #e0a52f; }

/* ============================================================
   Listado por categorias colapsables + filtro instantaneo
   (insumos.php, conceptos.php)
   ============================================================ */
.catbar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 14px 0 4px; }
.catbar input[type=search] { width: 320px; }
.catbar .lnk {
    background: none; border: 1px solid #c8d2e2; border-radius: 6px;
    padding: 5px 11px; font-size: 12px; color: #41506b; cursor: pointer;
}
.catbar .lnk:hover { background: #eef2f8; }
.catgrp {
    background: #fff; border-radius: 6px; box-shadow: 0 1px 3px rgba(0,0,0,.1);
    margin-top: 10px; overflow: hidden;
}
.catgrp > summary {
    list-style: none; cursor: pointer; padding: 10px 16px; font-weight: 700;
    font-size: 14px; background: #eef0f4; display: flex; align-items: center; gap: 10px;
}
.catgrp > summary::-webkit-details-marker { display: none; }
.catgrp > summary::before { content: "\25B8"; color: #8894a8; font-size: 12px; }
.catgrp[open] > summary::before { content: "\25BE"; }
.catgrp > summary .n { margin-left: auto; font-weight: 600; color: #7a869c; font-size: 12px; }
.catrow {
    display: flex; align-items: center; gap: 12px; padding: 8px 16px;
    border-top: 1px solid #eef0f4; font-size: 14px;
}
.catrow:hover { background: #f7f9fc; }
.catrow.inactivo { opacity: .5; }
.catrow .clave {
    font-variant-numeric: tabular-nums; font-size: 12px; color: #5b6b86;
    width: 92px; flex: none;
}
.catrow .nom { flex: 1; min-width: 0; }
.catrow .nom .meta { color: #8894a8; font-size: 12px; }
.catrow .col { flex: none; font-size: 13px; color: #444; }
.catrow .acc {
    flex: none; white-space: nowrap; display: flex; gap: 6px; align-items: center;
}
.catrow .acc a { font-size: 13px; }
.catrow .acc form { display: inline; margin: 0; }
.catrow .acc button { padding: 3px 9px; font-size: 12px; }
.catrow.oculto, .catgrp.oculto { display: none; }
@media (max-width: 720px) {
    .catbar input[type=search] { width: 100%; }
    .catrow { flex-wrap: wrap; gap: 6px 12px; }
    .catrow .acc { width: 100%; }
}

/* ============================================================
   Espacio de trabajo de proyecto (proyecto_layout.php) — Opción B:
   una franja de contexto + pestañas horizontales. El acabado visual
   (tablas, tarjetas, tipografía) va bajo .pw-body, solo pantallas de
   proyecto — el resto de la app no se toca.  (4-sep-2026)
   ============================================================ */
:root { --pw-linea: #e6e8ec; --pw-tinta: #1c2536; --pw-tinta2: #5b6675; --pw-tenue: #8b95a3; --pw-azul: #2f5fd6; }
.pw { max-width: 1220px; margin: 0 auto; }

/* --- franja de contexto: todo en una línea --- */
.pw-bar {
    display: flex; align-items: center; gap: 10px 12px; flex-wrap: wrap;
    padding: 9px 22px; border-bottom: 1px solid var(--pw-linea); background: #fbfbfc;
    font-size: 13px;
}
.pw-bar-back { color: var(--pw-tenue); text-decoration: none; font-size: 15px; line-height: 1; }
.pw-bar-back:hover { color: var(--pw-azul); }
.pw-bar-nom { font-weight: 600; color: var(--pw-tinta); }
.pw-bar-meta { color: var(--pw-tenue); }
a.pw-bar-badge {
    padding: 2px 10px; border-radius: 20px; font-size: 11px; color: #fff;
    font-weight: 600; text-decoration: none; white-space: nowrap;
}
.pw-bar-lock { font-size: 12px; }
.pw-bar-sep { flex: 1; }
.pw-bar-kpi { color: var(--pw-tenue); white-space: nowrap; }
.pw-bar-kpi b { color: var(--pw-tinta); font-weight: 600; font-variant-numeric: tabular-nums; }
.pw-bar-kpi-fuerte b { color: var(--pw-azul); }
.pw-estado, .tb-estado { font-size: 12px; color: var(--pw-tenue); white-space: nowrap; }
.pw-estado.ok, .tb-estado.ok { color: #0f7b52; }
.pw-estado.err, .tb-estado.err { color: #b3352c; }
.tb-estado.guardando { color: #b45309; }

/* --- pestañas --- */
.pw-tabs {
    display: flex; gap: 2px; padding: 0 14px; border-bottom: 1px solid var(--pw-linea);
    overflow-x: auto; background: #fff;
}
.pw-tabs a {
    padding: 9px 13px; font-size: 13px; color: var(--pw-tinta2); text-decoration: none;
    white-space: nowrap; border-bottom: 2px solid transparent; margin-bottom: -1px;
}
.pw-tabs a:hover { color: var(--pw-tinta); }
.pw-tabs a.on { color: var(--pw-azul); font-weight: 600; border-bottom-color: var(--pw-azul); }

/* --- cuerpo + acabado visual (solo dentro de .pw-body) --- */
.pw-body { padding: 18px 22px 60px; color: var(--pw-tinta); }
.pw-body h1 { font-size: 18px; margin: 0 0 14px; }
.pw-body h2 { font-size: 14px; margin: 22px 0 10px; color: var(--pw-tinta2); letter-spacing: .01em; }
.pw-body h2:first-child, .pw-body h1:first-child { margin-top: 0; }
.pw-body h3 { font-size: 13px; margin: 16px 0 8px; }
.pw-body .small { font-size: 12px; color: var(--pw-tenue); }

.pw-body table {
    box-shadow: none; border: 1px solid var(--pw-linea); border-radius: 8px;
    overflow: hidden; margin-top: 10px;
}
.pw-body th {
    background: #f7f8fa; font-size: 11px; text-transform: uppercase; letter-spacing: .04em;
    color: var(--pw-tenue); font-weight: 600; padding: 8px 11px; border-bottom: 1px solid var(--pw-linea);
}
.pw-body td { padding: 7px 11px; border-bottom: 1px solid #f0f1f4; font-size: 13px; }
.pw-body tbody tr:last-child td, .pw-body tr:last-child td { border-bottom: none; }
.pw-body tr:hover td { background: #f8f9fb; }

.pw-body .card, .pw-body details.card {
    background: #fff; border: 1px solid var(--pw-linea); box-shadow: none;
    border-radius: 10px; padding: 14px 16px; margin-top: 14px;
}
.pw-body details.card > summary { font-size: 15px; }
.pw-body .msg { border-radius: 8px; font-size: 13px; padding: 9px 13px; }
.pw-body .form-grid { gap: 8px 12px; }
.pw-body .badge { font-size: 11px; }

/* botones: la acción principal se queda azul; los secundarios y btn-link
   pasan a un estilo más discreto para que la pantalla no sea un mar de azul */
.pw-body a.btn-link {
    background: #eef1f6; color: var(--pw-azul); font-weight: 500; padding: 5px 12px;
}
.pw-body a.btn-link:hover { background: #e3e8f1; }
.pw-body button.secondary { background: #eef1f6; color: var(--pw-tinta2); }
.pw-body button.secondary:hover { background: #e3e8f1; opacity: 1; }

@media (max-width: 720px) {
    .pw-bar { padding: 8px 14px; }
    .pw-bar-sep { display: none; }
    .pw-body { padding: 12px 14px 50px; }
}
@media print {
    .pw-bar, .pw-tabs { display: none !important; }
    .pw-body { padding: 0; }
}
