[hidden] { display: none !important; }
/* ERP OpenSystem - estilos */
:root {
  --fondo: #f3f5f8; --panel: #fff; --borde: #dde2ea; --texto: #1f2a37; --suave: #6b7686;
  --side: #14202e; --side2: #1c2c3e; --sideTxt: #c5d0dc;
  --acento: #0f8b8d; --acento2: #0b6e70; --mal: #c0392b; --ok: #1e8e4e; --aviso: #b7791f; --info: #2b6cb0;
  --radio: 8px; --sombra: 0 1px 3px rgba(20,32,46,.08);
}
* { box-sizing: border-box; }
html, body { margin: 0; }
body { font: 14px/1.45 "Segoe UI", system-ui, -apple-system, Roboto, Arial, sans-serif; color: var(--texto); background: var(--fondo); }
a { color: var(--acento2); }
h1, h2, h3 { margin: 0 0 .6em; font-weight: 600; }
h2 { font-size: 17px; } h3 { font-size: 15px; }

.app { display: flex; min-height: 100vh; }
.side { width: 250px; background: var(--side); color: var(--sideTxt); flex-shrink: 0; position: sticky; top: 0; height: 100vh; overflow-y: auto; }
.marca { display: flex; gap: 10px; align-items: center; padding: 16px; color: #fff; text-decoration: none; border-bottom: 1px solid #23364c; }
.marca small { display: block; font-size: 11px; color: var(--sideTxt); font-weight: 400; }
.logo { background: var(--acento); color: #fff; font-weight: 700; border-radius: 8px; width: 36px; height: 36px; display: grid; place-items: center; letter-spacing: .5px; }
.side nav { padding: 8px 0 30px; }
.grupo > summary { list-style: none; cursor: pointer; padding: 9px 16px; font-weight: 600; color: #e6edf4; display: flex; align-items: center; gap: 8px; }
.grupo > summary::-webkit-details-marker { display: none; }
.grupo > summary::after { content: '▸'; margin-left: auto; font-size: 11px; transition: transform .15s; }
.grupo[open] > summary::after { transform: rotate(90deg); }
.grupo > summary:hover { background: var(--side2); }
.ic { width: 20px; text-align: center; }
.item { display: block; padding: 6px 16px 6px 44px; color: var(--sideTxt); text-decoration: none; font-size: 13px; }
.item:hover { background: var(--side2); color: #fff; }
.item.on { background: var(--acento); color: #fff; }
.subt { padding: 6px 16px 2px 44px; font-size: 11px; text-transform: uppercase; letter-spacing: .6px; color: #7f93a8; }
.subg > summary { list-style: none; cursor: pointer; padding: 6px 16px 6px 44px; font-size: 12px; text-transform: uppercase; letter-spacing: .5px; color: #9fb2c6; display: flex; align-items: center; gap: 6px; }
.subg > summary::-webkit-details-marker { display: none; }
.subg > summary::before { content: '▸'; font-size: 10px; transition: transform .15s; }
.subg[open] > summary::before { transform: rotate(90deg); }
.subg > summary:hover { background: var(--side2); color: #fff; }
.subg > summary .n { margin-left: auto; font-size: 10px; background: #23364c; border-radius: 8px; padding: 0 6px; }
.subg .item { padding-left: 58px; }
.busca-menu { padding: 10px 12px 2px; position: sticky; top: 0; background: var(--side); z-index: 1; }
.busca-menu input { width: 100%; box-sizing: border-box; background: #0f1d2c; border: 1px solid #2a3f57; color: #e6edf4; border-radius: 6px; padding: 7px 10px; font-size: 13px; }
.busca-menu input::placeholder { color: #7f93a8; }
.item mark { background: #f6d365; color: #10202f; border-radius: 2px; padding: 0 1px; }
.vacio-menu { padding: 10px 16px; font-size: 12px; color: #7f93a8; }

.main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.top { display: flex; align-items: center; gap: 12px; padding: 10px 20px; background: var(--panel); border-bottom: 1px solid var(--borde); position: sticky; top: 0; z-index: 5; }
.top h1 { font-size: 18px; margin: 0; flex: 1; }
.usr { display: flex; gap: 14px; align-items: center; font-size: 13px; }
.usr small { color: var(--suave); display: block; font-size: 11px; }
.usr a { text-decoration: none; }
.usr .emp { text-align: right; border-right: 1px solid var(--borde); padding-right: 14px; }
.emp-sel select { max-width: 260px; font-size: 12px; padding: 4px 6px; }
.hamb { display: none; background: none; border: 0; font-size: 20px; cursor: pointer; }
.cont { padding: 18px 20px 40px; }

.panel { background: var(--panel); border: 1px solid var(--borde); border-radius: var(--radio); padding: 16px; box-shadow: var(--sombra); margin-bottom: 16px; }
.panel.estrecho { max-width: 460px; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px 14px; }
.grid .doble { grid-column: span 2; }
label { display: flex; flex-direction: column; gap: 3px; font-size: 12px; color: var(--suave); font-weight: 600; }
label.check { flex-direction: row; align-items: center; gap: 6px; color: var(--texto); font-weight: 400; font-size: 13px; }
input, select, textarea { font: inherit; color: var(--texto); padding: 6px 8px; border: 1px solid var(--borde); border-radius: 6px; background: #fff; min-width: 0; }
input:focus, select:focus, textarea:focus { outline: 2px solid rgba(15,139,141,.25); border-color: var(--acento); }
input[readonly], input:disabled, select:disabled, textarea[readonly] { background: #f1f3f6; }
input.num { text-align: right; }

.btn { display: inline-flex; align-items: center; gap: 6px; padding: 7px 14px; border-radius: 6px; border: 1px solid var(--borde); background: #fff; color: var(--texto); cursor: pointer; text-decoration: none; font: inherit; font-weight: 600; font-size: 13px; white-space: nowrap; }
.btn:hover { border-color: #b8c2cf; }
.btn.prim { background: var(--acento); border-color: var(--acento); color: #fff; }
.btn.prim:hover { background: var(--acento2); }
.btn.mal { color: var(--mal); border-color: #e7b4ae; }
.btn.chico { padding: 3px 8px; font-size: 12px; }
.btn.ancho { width: 100%; justify-content: center; }
.acciones { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 14px; }

.barra { display: flex; flex-wrap: wrap; gap: 10px; justify-content: space-between; align-items: flex-end; margin-bottom: 12px; }
.filtros { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; }
.filtros label { font-size: 11px; }
.botones { display: flex; gap: 8px; flex-wrap: wrap; }

.tabla-wrap { overflow-x: auto; background: var(--panel); border: 1px solid var(--borde); border-radius: var(--radio); box-shadow: var(--sombra); }
.tabla { width: 100%; border-collapse: collapse; font-size: 13px; }
.tabla th { background: #eef2f6; text-align: left; padding: 8px 10px; font-weight: 600; color: #3d4a5a; border-bottom: 1px solid var(--borde); white-space: nowrap; position: sticky; top: 0; }
.tabla td { padding: 7px 10px; border-bottom: 1px solid #edf0f4; vertical-align: middle; }
.tabla tr.clic { cursor: pointer; }
.tabla tr.clic:hover td { background: #f3fafa; }
.tabla .der, .der { text-align: right; }
.tabla tfoot td { font-weight: 700; background: #f7f9fb; }
.tabla td.vacio { text-align: center; color: var(--suave); padding: 24px; }
.tabla.det td { padding: 4px 6px; }
.tabla.det input, .tabla.det select { width: 100%; padding: 5px 6px; }
.tabla tr.titulo td { font-weight: 600; color: #2d3b4d; background: #fafbfc; }

.chip { display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: 11px; font-weight: 600; background: #e9edf2; color: #45525f; }
.chip.ok { background: #dff3e8; color: var(--ok); }
.chip.mal { background: #fbe3e0; color: var(--mal); }
.chip.info { background: #e1ecf8; color: var(--info); }
.chip.aviso { background: #fbf0d9; color: var(--aviso); }

.alerta { padding: 10px 14px; border-radius: 6px; margin-bottom: 14px; border: 1px solid; }
.alerta.ok { background: #e8f6ee; border-color: #b6e0c6; color: #17663a; }
.alerta.error { background: #fdecea; border-color: #f2c1bb; color: #8e2a1f; }
.alerta.info { background: #e8f1fb; border-color: #bcd4ef; color: #22517f; }

.totales { margin-left: auto; width: 300px; max-width: 100%; }
.totales div { display: flex; justify-content: space-between; padding: 4px 0; }
.totales .gran { font-size: 16px; font-weight: 700; border-top: 1px solid var(--borde); padding-top: 8px; }
.pie-doc { display: flex; gap: 20px; flex-wrap: wrap; align-items: flex-start; margin-top: 12px; }
.pie-doc .obs { flex: 1; min-width: 240px; }

.tarjetas { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 16px; }
.tarjeta { background: var(--panel); border: 1px solid var(--borde); border-radius: var(--radio); padding: 14px; box-shadow: var(--sombra); }
.tarjeta small { color: var(--suave); display: block; font-size: 12px; }
.tarjeta b { font-size: 22px; display: block; margin-top: 4px; }

.relmap { width: 100%; overflow-x: auto; }
.relmap svg { display: block; margin: 0 auto; }
.relmap .nodo rect { fill: #fff; stroke: #b7c2cf; stroke-width: 1.2; }
.relmap .nodo.actual rect { stroke: var(--acento); stroke-width: 2.5; fill: #eefafa; }
.relmap .nodo.X rect { stroke-dasharray: 4 3; fill: #fbf1f0; }
.relmap .nodo { cursor: pointer; }
.relmap .nodo:hover rect { fill: #f3fafa; }
.relmap text { font: 12px "Segoe UI", system-ui, sans-serif; fill: #1f2a37; }
.relmap text.t { font-weight: 700; }
.relmap text.s { fill: #6b7686; font-size: 11px; }
.relmap path { fill: none; stroke: #8fa0b3; stroke-width: 1.5; }

.modal-fondo { position: fixed; inset: 0; background: rgba(15,25,35,.45); display: none; align-items: center; justify-content: center; z-index: 50; padding: 16px; }
.modal-fondo.on { display: flex; }
.modal { background: #fff; border-radius: 10px; padding: 18px; width: 900px; max-width: 100%; max-height: 90vh; overflow: auto; }
.modal h2 { display: flex; justify-content: space-between; }

.pestanas { display: flex; gap: 4px; border-bottom: 1px solid var(--borde); margin-bottom: 12px; flex-wrap: wrap; }
.pestanas a, .pestanas button { padding: 8px 14px; text-decoration: none; color: var(--suave); border: 0; background: none; font: inherit; cursor: pointer; border-bottom: 2px solid transparent; font-weight: 600; }
.pestanas .on { color: var(--acento2); border-bottom-color: var(--acento); }
.matriz td, .matriz th { text-align: center; }
.matriz td:first-child, .matriz th:first-child { text-align: left; }
.muted { color: var(--suave); }
.mono { font-family: Consolas, monospace; }
.nivel-1 { font-weight: 700; } .nivel-2 { padding-left: 16px !important; font-weight: 600; } .nivel-3 { padding-left: 32px !important; } .nivel-4 { padding-left: 48px !important; } .nivel-5 { padding-left: 64px !important; }

.login-body { min-height: 100vh; display: grid; place-items: center; background: linear-gradient(135deg, #14202e, #0f4e57); }
.login { background: #fff; padding: 28px; border-radius: 12px; width: 340px; display: flex; flex-direction: column; gap: 12px; box-shadow: 0 10px 40px rgba(0,0,0,.3); }
.marca.grande { color: var(--texto); border: 0; padding: 0 0 8px; }
.marca.grande small { color: var(--suave); }

@media (max-width: 860px) {
  .side { position: fixed; left: -260px; z-index: 20; transition: left .2s; }
  .velo-menu.on { display: block; }
  .top { padding: 8px 12px; gap: 8px; }
  .top h1 { font-size: 16px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .usr { gap: 10px; }
  .usr .emp, .emp-sel { display: none; }
  .barra { flex-direction: column; align-items: stretch; }
  .filtros { flex-wrap: wrap; }
  .acciones { flex-wrap: wrap; }
  .tarjetas { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .modal { max-width: calc(100vw - 24px); max-height: calc(100vh - 40px); overflow: auto; }
  .side.abierto { left: 0; box-shadow: 4px 0 20px rgba(0,0,0,.3); }
  .hamb { display: block; }
  .usr span { display: none; }
  .cont { padding: 12px; }
  .grid .doble { grid-column: span 1; }
}
@media print {
  .side, .top, .acciones, .barra, .no-print { display: none !important; }
  .cont { padding: 0; } .panel { box-shadow: none; border: 0; }
}

.side .ver { padding: 10px 16px 18px; font-size: 11px; color: #6f8399; }

/* Acceso a módulos por perfil: grupos contraíbles */
tbody.gacc tr.titulo { cursor: pointer; user-select: none; }
tbody.gacc tr.titulo:hover td { background: #e8f1f4; }
tbody.gacc tr[data-g] { display: none; }
tbody.gacc.abierto tr[data-g] { display: table-row; }
tbody.gacc .flecha { display: inline-block; transition: transform .15s; font-size: 11px; }
tbody.gacc.abierto .flecha { transform: rotate(90deg); }
tbody.gacc .cuenta { font-weight: 400; margin-left: 6px; }

/* Fotos de artículos */
img.mini, .mini.vacia { width: 36px; height: 36px; object-fit: cover; border-radius: 4px; border: 1px solid var(--borde); display: inline-grid; place-items: center; color: var(--suave); font-size: 11px; background: #f6f8fa; vertical-align: middle; }
.foto-cab { float: right; width: 96px; height: 96px; object-fit: cover; border-radius: 8px; border: 1px solid var(--borde); margin: 0 0 8px 12px; }
.zona-fotos { border: 2px dashed var(--borde); border-radius: 8px; padding: 14px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-bottom: 14px; }
.zona-fotos.sobre { border-color: var(--acento); background: #eef8f8; }
.zona-fotos #estFotos { flex-basis: 100%; }
.galeria { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px; }
.galeria figure { margin: 0; border: 1px solid var(--borde); border-radius: 8px; overflow: hidden; background: #fff; display: flex; flex-direction: column; }
.galeria figure.principal { border-color: var(--acento); box-shadow: 0 0 0 1px var(--acento); }
.galeria img { width: 100%; aspect-ratio: 1; object-fit: cover; display: block; background: #f6f8fa; }
.galeria figcaption { padding: 6px 8px; font-size: 12px; display: flex; justify-content: space-between; gap: 6px; }
.galeria figcaption span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.galeria figcaption small { color: var(--suave); white-space: nowrap; }
.galeria .acc { display: flex; gap: 6px; padding: 0 8px 8px; }
.celda-art { display: flex; gap: 3px; align-items: center; }
.celda-art .art { flex: 1; min-width: 0; width: auto; }
.celda-art .compat { padding: 2px 5px; flex-shrink: 0; white-space: nowrap; }

/* ---------- Aplicación móvil (PWA) ---------- */
.velo-menu { display: none; position: fixed; inset: 0; background: rgba(15,25,35,.4); z-index: 19; }
html.modo-app .top { padding-top: max(10px, env(safe-area-inset-top)); }
.btn-app { margin-top: 10px; text-align: center; display: block; box-sizing: border-box; }
.app-body { background: var(--fondo, #f3f5f8); margin: 0; }
.app-desc { max-width: 860px; margin: 0 auto; padding: 24px 16px 40px; }
.app-cab { display: flex; gap: 16px; align-items: center; margin-bottom: 18px; }
.app-cab img { border-radius: 18px; box-shadow: 0 4px 14px rgba(15,139,141,.3); }
.app-cab h1 { margin: 0; font-size: 24px; }
.app-cab p { margin: 4px 0 0; color: var(--suave); }
.app-panel { background: var(--panel, #fff); border: 1px solid var(--borde); border-radius: 10px; padding: 16px; margin-bottom: 14px; }
.app-btn { font-size: 16px; padding: 12px 22px; }
.app-pasos { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 14px; }
.app-pasos article { border: 1px solid var(--borde); border-radius: 8px; padding: 12px 14px; }
.app-pasos article.actual { border-color: var(--acento); box-shadow: 0 0 0 1px var(--acento); }
.app-pasos h2 { font-size: 16px; margin: 0 0 6px; }
.app-pasos ol { margin: 0; padding-left: 20px; line-height: 1.55; font-size: 14px; }
.ico-comp { display: inline-block; border: 1px solid var(--borde); border-radius: 4px; padding: 0 5px; font-size: 12px; }
.app-qr { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
.app-qr .qr svg { width: 200px; height: 200px; display: block; border: 1px solid var(--borde); border-radius: 8px; }
.app-qr h2 { margin: 0 0 6px; font-size: 17px; }
.app-qr > div:last-child { flex: 1; min-width: 240px; }
.app-qr input { width: 100%; box-sizing: border-box; }
.app-comp { display: flex; gap: 8px; flex-wrap: wrap; }
.app-pie { text-align: center; }
.lnk-app { white-space: nowrap; }
