:root { --acento: #E6532E; --crema: #EDE7DC; --crema2: #F6F2EA; --tinta: #1C1C1E; --gris: #6B6B70; --linea: #DDD6C8; --ok: #0B5E55; --ambar: #C97F04; --rojo: #B3261E; --azul: #0033A0; }
html, body { background: var(--crema2); color: var(--tinta); font-family: Inter, "Segoe UI", system-ui, sans-serif; font-size: 16px; }
body.login { display: flex; min-height: 100vh; align-items: center; justify-content: center; background: var(--tinta); }
.ingreso .tarjeta { background: var(--crema); border-radius: 18px; padding: 36px 32px; width: min(92vw, 380px); text-align: center; }
.marca { font-weight: 700; letter-spacing: .32em; font-size: 15px; }
.marca-sub { font-size: 9px; letter-spacing: .3em; color: var(--gris); margin-bottom: 18px; }
.ingreso h1 { font-size: 28px; font-weight: 700; margin: 0; }
.gris { color: var(--gris); }
.btn-acento { background: var(--acento); color: #fff; border: 0; font-weight: 600; } .btn-acento:hover { background: #c9431f; color: #fff; }
.cab { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; gap: 14px; padding: 10px 18px; background: var(--crema); border-bottom: 1px solid var(--linea); flex-wrap: wrap; }
.cab .izq { display: flex; align-items: center; gap: 8px; white-space: nowrap; } .cab .sep { color: var(--acento); }
.cab .der { margin-left: auto; display: flex; gap: 12px; align-items: center; }
.tabs { display: flex; gap: 4px; flex-wrap: wrap; } .tabs a { padding: 6px 12px; border-radius: 999px; color: var(--tinta); text-decoration: none; font-weight: 500; font-size: 14px; }
.tabs a.activa { background: var(--tinta); color: var(--crema); } .tabs a:hover { background: #e3dccb; } .tabs a.activa:hover { background: var(--tinta); }
.pill { background: var(--acento); color: #fff; border-radius: 999px; padding: 0 7px; font-size: 12px; margin-left: 4px; } .pill.cero { background: var(--gris); }
main { padding: 18px; max-width: 1400px; margin: 0 auto; }
.tab { display: none; } .tab.activa { display: block; }
.intro h1 { font-size: 26px; font-weight: 700; margin-bottom: 4px; } .intro p { max-width: 900px; }
.lista { display: flex; flex-direction: column; gap: 12px; }
.item { background: #fff; border: 1px solid var(--linea); border-radius: 14px; padding: 14px 16px; display: grid; grid-template-columns: 1fr auto; gap: 10px 16px; align-items: start; }
.item .t { font-weight: 600; font-size: 17px; } .item .s { color: var(--gris); font-size: 14px; margin-top: 2px; white-space: pre-wrap; }
.item .cuerpo { grid-column: 1 / -1; font-size: 15px; } .item .cuerpo b { color: var(--tinta); }
.item .reco { background: var(--crema); border-left: 3px solid var(--acento); border-radius: 0 10px 10px 0; padding: 8px 12px; margin-top: 8px; font-size: 14px; }
.item .acciones { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.item .acciones .btn { min-width: 44px; min-height: 40px; font-weight: 600; }
.item .coment { grid-column: 1 / -1; display: flex; gap: 6px; } .item .coment input { flex: 1; }
.item .hist { grid-column: 1 / -1; font-size: 13px; color: var(--gris); white-space: pre-wrap; border-top: 1px dashed var(--linea); padding-top: 6px; }
.badge-e { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: .02em; vertical-align: middle; }
.e-pendiente, .e-revisada { background: #FFF3CD; color: #7A5A00; } .e-aprobada, .e-aprobado, .e-decidida, .e-cumplido, .e-produccion, .e-respondida { background: #D8F0EA; color: var(--ok); }
.e-cambios, .e-en_riesgo { background: #FADBD8; color: var(--rojo); } .e-hablar { background: #E0E7FF; color: #2B3A8C; } .e-construyendo, .e-pruebas, .e-enviada { background: #DCE9FF; color: var(--azul); } .e-borrador { background: #EEE; color: var(--gris); }
.hitos { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 8px; margin-bottom: 16px; }
.hito { flex: 0 0 230px; background: #fff; border: 1px solid var(--linea); border-radius: 12px; padding: 10px 12px; font-size: 13px; } .hito b { display: block; font-size: 14px; margin-bottom: 2px; }
.hito.cumplido { border-color: var(--ok); } .hito.en_riesgo { border-color: var(--rojo); }
.kanban { display: grid; grid-template-columns: repeat(6, minmax(170px, 1fr)); gap: 10px; overflow-x: auto; }
.col { background: var(--crema); border-radius: 12px; padding: 8px; min-height: 120px; } .col h3 { font-size: 13px; letter-spacing: .12em; text-transform: uppercase; color: var(--gris); margin: 4px 6px 8px; }
.card-k { background: #fff; border-radius: 10px; padding: 8px 10px; margin-bottom: 8px; font-size: 13px; border: 1px solid var(--linea); cursor: pointer; } .card-k b { display: block; font-size: 14px; } .card-k:hover { border-color: var(--acento); }
.lector { display: grid; grid-template-columns: 300px 1fr; gap: 16px; min-height: 70vh; }
.lista-docs { background: #fff; border: 1px solid var(--linea); border-radius: 14px; padding: 8px; max-height: 80vh; overflow: auto; position: sticky; top: 70px; }
.lista-docs a { display: block; padding: 8px 10px; border-radius: 8px; color: var(--tinta); text-decoration: none; font-size: 14px; } .lista-docs a:hover { background: var(--crema); } .lista-docs a.activo { background: var(--tinta); color: var(--crema); }
.lista-docs .grupo { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--gris); margin: 10px 10px 4px; }
.panel-doc { background: #fff; border: 1px solid var(--linea); border-radius: 14px; min-width: 0; }
.barra-doc { position: sticky; top: 62px; z-index: 5; background: #fff; border-bottom: 1px solid var(--linea); border-radius: 14px 14px 0 0; padding: 10px 16px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.barra-doc .titulo { font-weight: 700; margin-right: auto; } .barra-doc .btn { min-height: 38px; }
.doc-cuerpo { padding: 18px 26px 40px; font-size: var(--fs, 16px); line-height: 1.6; }
.doc-cuerpo .toc { background: var(--crema2); border-radius: 10px; padding: 10px 16px; margin-bottom: 18px; font-size: 14px; } .doc-cuerpo .toc ul { margin: 0; padding-left: 18px; }
.doc-cuerpo h1 { font-size: 1.6em; } .doc-cuerpo h2 { font-size: 1.3em; margin-top: 1.4em; border-bottom: 1px solid var(--linea); padding-bottom: 4px; } .doc-cuerpo h3 { font-size: 1.1em; margin-top: 1.1em; }
.doc-cuerpo table { border-collapse: collapse; width: 100%; font-size: .92em; margin: 10px 0; display: block; overflow-x: auto; } .doc-cuerpo th, .doc-cuerpo td { border: 1px solid var(--linea); padding: 6px 8px; vertical-align: top; } .doc-cuerpo th { background: var(--crema); text-align: left; }
.doc-cuerpo code { background: var(--crema2); padding: 1px 5px; border-radius: 4px; font-size: .9em; } .doc-cuerpo pre { background: var(--tinta); color: var(--crema); padding: 12px; border-radius: 10px; overflow: auto; } .doc-cuerpo pre code { background: none; color: inherit; }
.doc-cuerpo blockquote { border-left: 3px solid var(--acento); margin: 0; padding: 4px 14px; color: var(--gris); background: var(--crema2); border-radius: 0 8px 8px 0; }
mark.dec { background: #FFF3CD; padding: 1px 5px; border-radius: 4px; } mark.dec.pre { background: #DCE9FF; }
.grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 14px; }
.diseno { background: #fff; border: 1px solid var(--linea); border-radius: 14px; overflow: hidden; } .diseno img { width: 100%; display: block; background: #f4f4f4; } .diseno .cuerpo { padding: 12px 14px; } .diseno .acciones { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
.bit { background: #fff; border: 1px solid var(--linea); border-radius: 10px; padding: 8px 12px; font-size: 14px; display: flex; gap: 10px; flex-wrap: wrap; } .bit .f { color: var(--gris); white-space: nowrap; } .bit .c { font-size: 12px; background: var(--crema); border-radius: 999px; padding: 1px 8px; }
.aviso { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); background: var(--tinta); color: var(--crema); padding: 10px 18px; border-radius: 999px; z-index: 50; font-weight: 500; }
.vacio { color: var(--gris); padding: 24px; text-align: center; background: #fff; border: 1px dashed var(--linea); border-radius: 14px; }
/* Gantt de liberaciones */
:root { --glab: 300px; }
.g-leyenda { display: flex; gap: 16px; flex-wrap: wrap; font-size: 13px; color: var(--gris); margin: 4px 0 10px; } .g-leyenda span { display: inline-flex; align-items: center; gap: 6px; }
.g-leyenda i { display: inline-block; width: 22px; height: 10px; border-radius: 3px; }
.g-leyenda i.g-rombo { width: 10px; height: 10px; background: var(--tinta); transform: rotate(45deg); border-radius: 1px; } .g-leyenda i.g-hoy-l { width: 2px; height: 14px; background: var(--acento); border-radius: 0; } .g-leyenda i.g-banda-l { background: #EFE3F5; }
.gantt-wrap { background: #fff; border: 1px solid var(--linea); border-radius: 14px; overflow: hidden; }
.gantt { overflow-x: auto; }
.g-tabla { position: relative; }
.g-capa { position: absolute; top: 0; bottom: 0; left: var(--glab); pointer-events: none; z-index: 0; }
.g-sem { position: absolute; top: 0; bottom: 0; border-left: 1px solid #F0EBE1; }
.g-banda { position: absolute; top: 0; bottom: 0; background: #EFE3F5; opacity: .7; }
.g-linea { position: absolute; top: 30px; bottom: 0; border-left: 1px dotted #C9BFAE; } .g-linea.contractual { border-left: 1.5px dashed var(--tinta); opacity: .55; }
.g-hoy { position: absolute; top: 0; bottom: 0; border-left: 2px solid var(--acento); z-index: 3; } .g-hoy span { position: absolute; top: 2px; left: 3px; background: var(--acento); color: #fff; font-size: 11px; font-weight: 700; padding: 0 5px; border-radius: 6px; }
.g-fila { display: flex; min-height: 40px; border-bottom: 1px solid #F3EEE5; position: relative; }
.g-fila:hover .g-lab { background: var(--crema); }
.g-lab { position: sticky; left: 0; z-index: 4; flex: 0 0 var(--glab); width: var(--glab); background: #fff; border-right: 1px solid var(--linea); padding: 6px 10px; font-size: 13.5px; line-height: 1.25; }
.g-lab b { color: var(--acento); margin-right: 2px; } .g-lab small { display: block; color: var(--gris); font-size: 11.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .g-lab .badge-e { font-size: 10px; padding: 1px 6px; }
.g-pista { position: relative; flex: 0 0 auto; }
.g-cab { min-height: 30px; } .g-cab .g-lab, .g-cab2 .g-lab { font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--gris); }
.g-semlab { position: absolute; top: 8px; font-size: 11px; color: var(--gris); padding-left: 4px; white-space: nowrap; }
.g-cab2 { min-height: 44px; background: var(--crema2); } .g-cab2 .g-lab { background: var(--crema2); }
.g-hitolab { position: absolute; top: 5px; transform: translateX(-50%); background: var(--tinta); color: var(--crema); font-size: 11px; font-weight: 700; padding: 2px 7px; border-radius: 7px; white-space: nowrap; text-align: center; line-height: 1.15; z-index: 2; }
.g-hitolab small { display: block; font-weight: 400; opacity: .8; } .g-hitolab.cumplido { background: var(--ok); } .g-hitolab.en_riesgo { background: var(--rojo); }
.g-etapa { min-height: 30px; background: var(--crema); } .g-etapa .g-lab { background: var(--crema); font-weight: 700; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; }
.g-bar { position: absolute; top: 11px; height: 18px; border-radius: 5px; z-index: 1; }
.g-bar span { position: absolute; left: 6px; top: 1px; font-size: 11px; font-weight: 700; color: #fff; white-space: nowrap; }
.g-qa, .g-leyenda i.g-qa { background: repeating-linear-gradient(135deg, #D9D3C7 0 5px, #E9E4DA 5px 10px); }
.g-lib, .g-leyenda i.g-lib { background: #F2A88F; } .g-lib.ya { background: var(--acento); }
.g-cond, .g-leyenda i.g-cond { background: #fff; border: 1.5px dashed var(--acento); } .g-cond span { color: var(--acento); }
.g-prod { position: absolute; top: 13px; width: 14px; height: 14px; margin-left: -7px; background: var(--tinta); transform: rotate(45deg); z-index: 2; border-radius: 2px; } .g-prod.cumplido { background: var(--ok); } .g-prod.en_riesgo { background: var(--rojo); }
.g-h2 { font-size: 19px; font-weight: 700; margin: 22px 0 10px; }
.g-fecha.pasada { opacity: .6; }
@media (max-width: 900px) { .lector { grid-template-columns: 1fr; } .lista-docs { position: static; max-height: 40vh; } .kanban { grid-template-columns: repeat(6, 200px); } .item { grid-template-columns: 1fr; } .item .acciones { justify-content: flex-start; } :root { --glab: 170px; } .g-lab small { display: none; } main { padding: 12px; } .doc-cuerpo { padding: 14px; } .barra-doc { top: 0; } }
