:root{--azul:#2D81BF;--marino:#0B3C7A;--negro:#111111;--rojo:#E02B2B;--texto:#22313F;--suave:#5B6B7B;--fondo:#F3F6FA;--linea:#DDE5EE;--blanco:#fff;--verde:#1E9E6A;--ambar:#D98A00;--radio:12px}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:Poppins,"Segoe UI",Arial,sans-serif;color:var(--texto);background:var(--fondo);font-size:14px;line-height:1.45}
button,input,select,textarea{font:inherit;color:inherit}
h1,h2,h3,p{margin:0}
.app{display:grid;grid-template-columns:240px 1fr;min-height:100vh}
aside{background:var(--blanco);border-right:1px solid var(--linea);padding:18px 14px;display:flex;flex-direction:column;gap:18px;position:sticky;top:0;height:100vh}
.logo{display:block;width:150px;margin:0 auto}
.lema{text-align:center;font-size:11px;color:var(--suave)}
nav{display:flex;flex-direction:column;gap:4px}
nav button{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;border:0;background:none;padding:10px 12px;border-radius:9px;text-align:left;cursor:pointer;font-weight:500}
nav button:hover{background:var(--fondo)}
nav button.activo{background:var(--marino);color:#fff}
.conteo{background:var(--rojo);color:#fff;border-radius:20px;padding:0 7px;font-size:11px;font-weight:600}
.nota-demo{margin-top:auto;font-size:11px;color:var(--suave);background:var(--fondo);border-radius:9px;padding:10px}
main{padding:24px 28px 90px;min-width:0}
.cabecera{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.cabecera h1{font-size:24px;font-weight:700;color:var(--marino);line-height:1.2}
.cabecera p{color:var(--suave);font-size:13px}
.btn{border:1px solid var(--linea);background:#fff;border-radius:9px;padding:8px 13px;font-weight:500;cursor:pointer;display:inline-block;text-decoration:none;color:var(--texto)}
.btn:hover{border-color:var(--azul)}
.btn.primario{background:var(--marino);border-color:var(--marino);color:#fff}
.btn.primario:hover{background:#0a3267}
.btn.peligro{color:var(--rojo)}
.btn.mini{padding:4px 9px;font-size:12px}
.grid{display:grid;gap:14px}
.kpis{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin-bottom:16px}
.kpi{background:#fff;border:1px solid var(--linea);border-radius:var(--radio);padding:14px 16px}
.kpi b{display:block;font-size:26px;font-weight:700;color:var(--marino);line-height:1.2}
.kpi span{font-size:12px;color:var(--suave)}
.kpi.alerta b{color:var(--rojo)}
.dos{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.tarjeta{background:#fff;border:1px solid var(--linea);border-radius:var(--radio);padding:16px;min-width:0}
.tarjeta h2{font-size:15px;font-weight:600;color:var(--marino);margin-bottom:10px}
.fila{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 0;border-top:1px solid var(--linea)}
.fila:first-of-type{border-top:0}
.fila small,.tenue{color:var(--suave);font-size:12px}
.vacio{color:var(--suave);padding:14px 0}
.chip{display:inline-block;border-radius:20px;padding:1px 9px;font-size:11px;font-weight:600;white-space:nowrap;background:#EAF1F8;color:var(--marino)}
.chip.verde{background:#E2F5EC;color:#137A50}
.chip.amarillo{background:#FCF0D8;color:#946000}
.chip.rojo{background:#FCE4E4;color:#B51E1E}
.filtros{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.filtros input,.filtros select,.campo input,.campo select,.campo textarea{background:#fff;border:1px solid var(--linea);border-radius:9px;padding:8px 10px}
.filtros input{flex:1;min-width:190px}
.tabla-caja{overflow-x:auto;background:#fff;border:1px solid var(--linea);border-radius:var(--radio)}
table{width:100%;border-collapse:collapse;min-width:720px}
th{text-align:left;font-size:12px;color:var(--suave);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--linea);white-space:nowrap}
td{padding:10px 12px;border-bottom:1px solid var(--linea);vertical-align:middle}
tr:last-child td{border-bottom:0}
tbody tr.clic{cursor:pointer}
tbody tr.clic:hover{background:#F8FAFD}
.barra{height:8px;background:#E7EDF4;border-radius:8px;overflow:hidden;min-width:80px}
.barra i{display:block;height:100%;background:var(--azul)}
.tablero{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(230px,1fr);gap:12px;overflow-x:auto;padding-bottom:8px}
.columna{background:#E9EFF6;border-radius:var(--radio);padding:10px;min-height:200px}
.columna h3{font-size:13px;font-weight:600;color:var(--marino);display:flex;justify-content:space-between;margin-bottom:8px}
.nota{background:#fff;border:1px solid var(--linea);border-radius:10px;padding:10px;margin-bottom:8px}
.nota b{font-weight:600}
.nota select{width:100%;margin-top:8px;border:1px solid var(--linea);border-radius:7px;padding:4px 6px;background:#fff;font-size:12px}
.fondo{position:fixed;inset:0;background:rgba(11,30,55,.45);display:flex;justify-content:flex-end;z-index:10}
.fondo.centro{justify-content:center;align-items:center;padding:16px}
.panel{background:var(--fondo);width:min(560px,100%);height:100%;overflow:auto;padding:20px}
.modal{background:#fff;border-radius:14px;width:min(520px,100%);max-height:92vh;overflow:auto;padding:20px}
.modal h2{font-size:18px;color:var(--marino);margin-bottom:12px}
.campo{display:flex;flex-direction:column;gap:4px;margin-bottom:10px;font-size:12px;font-weight:500}
.campo input,.campo select,.campo textarea{font-size:14px;font-weight:400;width:100%}
.check{flex-direction:row;align-items:center;gap:8px}
.check input{width:auto}
.acciones{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;margin-top:12px}
.titulo-panel{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;margin-bottom:12px}
.titulo-panel h2{font-size:20px;color:var(--marino);line-height:1.25}
.pila{display:flex;flex-direction:column;gap:12px}
.calc{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;align-items:end}
.total{font-size:22px;font-weight:700;color:var(--marino)}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--negro);color:#fff;padding:9px 16px;border-radius:9px;z-index:20}
.oculto-escritorio{display:none}
[hidden]{display:none!important}
.logo-btn{border:0;background:none;padding:0;cursor:pointer;display:block;width:100%;border-radius:9px}
.logo-btn:hover{opacity:.82}
.usuario-caja{margin-top:auto;border-top:1px solid var(--linea);padding-top:10px;font-size:12px}
.usuario-caja b{display:block;font-weight:600;font-size:13px}
.usuario-caja small{color:var(--suave);display:block;margin-bottom:6px}
.usuario-caja .btn{margin:0 4px 4px 0}
.nota-demo{margin-top:0}
aside{overflow-y:auto}
.acceso{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;background:var(--fondo)}
.acceso-caja{background:#fff;border:1px solid var(--linea);border-radius:14px;width:min(400px,100%);padding:24px}
.acceso-caja .logo{width:170px;margin-bottom:14px}
.acceso-caja h1{font-size:20px;color:var(--marino);margin-bottom:4px}
.acceso-caja>p{color:var(--suave);font-size:13px;margin-bottom:14px}
.acceso-caja .btn{width:100%;margin-top:6px;text-align:center}
.enlace{border:0;background:none;color:var(--azul);cursor:pointer;padding:8px 0 0;font-weight:500;display:block;margin:0 auto}
.msg{border-radius:9px;padding:8px 10px;font-size:13px;margin-bottom:10px;background:#FCE4E4;color:#B51E1E}
.msg.bien{background:#E2F5EC;color:#137A50}
.caja-demo{background:var(--fondo);border-radius:9px;padding:10px;font-size:12px;color:var(--suave);margin-top:14px}
.caja-demo b{color:var(--texto)}
.estados{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin-bottom:14px}
.estado-filtro{background:#fff;border:1px solid var(--linea);border-radius:var(--radio);padding:10px 12px;text-align:left;cursor:pointer}
.estado-filtro b{display:block;font-size:22px;color:var(--marino);line-height:1.2}
.estado-filtro span{font-size:12px;color:var(--suave)}
.estado-filtro[aria-pressed="true"]{border-color:var(--marino);box-shadow:inset 0 0 0 1px var(--marino)}
.barra-acciones{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.barra-acciones input{flex:1;min-width:190px;background:#fff;border:1px solid var(--linea);border-radius:9px;padding:8px 10px}
.selector{display:inline-flex;background:#E9EFF6;border-radius:9px;padding:3px;gap:2px}
.selector button{border:0;background:none;border-radius:7px;padding:5px 12px;cursor:pointer;font-weight:500}
.selector button[aria-pressed="true"]{background:#fff;color:var(--marino)}
.obras-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px}
.obra-card{background:#fff;border:1px solid var(--linea);border-radius:var(--radio);padding:14px;cursor:pointer;display:flex;flex-direction:column;gap:6px;min-width:0}
.obra-card:hover,.obra-card:focus-visible{border-color:var(--azul)}
.obra-card .cab{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.obra-card b{font-weight:600}
.crono{background:#fff;border:1px solid var(--linea);border-radius:var(--radio);overflow-x:auto}
.crono-fila{display:grid;grid-template-columns:230px 1fr;min-width:680px;border-bottom:1px solid var(--linea)}
.crono-fila:last-child{border-bottom:0}
.crono-fila.clic{cursor:pointer}
.crono-fila.clic:hover{background:#F8FAFD}
.crono-nombre{padding:8px 12px;min-width:0}
.crono-nombre b{font-weight:600;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crono-pista{position:relative;min-height:46px;border-left:1px solid var(--linea)}
.crono-mes{position:absolute;top:24px;font-size:11px;color:var(--suave);padding-left:4px;border-left:1px solid var(--linea)}
.crono-barra{position:absolute;top:16px;height:14px;border-radius:4px;min-width:6px}
.crono-hoy{position:absolute;top:0;bottom:0;width:2px;background:var(--marino)}
.crono-hoy em{position:absolute;top:2px;left:-16px;font-style:normal;font-size:10px;font-weight:600;background:var(--marino);color:#fff;border-radius:6px;padding:0 6px}
.s-en-fecha{background:#1E9E6A}.s-en-riesgo{background:#D98A00}.s-atrasada{background:#E02B2B}.s-entregada{background:#2D81BF}
.hist-lista{list-style:none;margin:0;padding:0}
.hist-lista>li{border-left:2px solid var(--linea);padding:0 0 12px 12px}
.hist-lista b{font-weight:600}
.hist-lista ul{margin:4px 0 0;padding-left:16px;font-size:13px}
.hist-lista p{font-size:13px;margin-top:4px}
.pestanas{margin-bottom:12px}
.rep-grid{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:14px;align-items:start;margin-bottom:14px}
.leyenda{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px;font-size:12px;color:var(--suave)}
.leyenda i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px}
.graf-fila{display:grid;grid-template-columns:minmax(90px,30%) 1fr;gap:10px;align-items:center;padding:5px 0;position:relative}
.graf-fila:hover,.graf-fila:focus{background:#F8FAFD;outline:none}
.graf-nombre{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.graf-pista{display:flex;align-items:center;gap:6px;min-width:0}
.graf-pila{display:flex;gap:2px;height:16px;min-width:2px}
.graf-pila i{display:block;min-width:2px}
.graf-pila i:last-child{border-radius:0 4px 4px 0}
.graf-total{font-size:12px;font-weight:600;white-space:nowrap}
.tip{display:none;position:absolute;left:30%;bottom:100%;background:var(--negro);color:#fff;border-radius:8px;padding:8px 10px;font-size:12px;z-index:4;min-width:150px;pointer-events:none}
.tip div{display:flex;justify-content:space-between;gap:14px}
.graf-fila:hover .tip,.graf-fila:focus .tip{display:block}
.matriz select{border:1px solid var(--linea);border-radius:7px;padding:4px 6px;background:#fff;font-size:12px}
.alerta-espera{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;background:#FCE4E4;border:1px solid #F3B9B9;border-radius:var(--radio);padding:12px 14px;margin-bottom:14px;color:#8E1616}
.alerta-espera b{font-weight:600}
.hitos{list-style:none;margin:0;padding:0}
.hitos li{display:grid;grid-template-columns:18px 1fr auto;gap:10px;align-items:start;padding:0 0 12px;position:relative}
.hitos li:not(:last-child)::before{content:"";position:absolute;left:6px;top:16px;bottom:0;width:2px;background:var(--linea)}
.hitos i{width:14px;height:14px;border-radius:50%;background:#fff;border:2px solid #9AA7B4;margin-top:3px;position:relative;z-index:1}
.hitos .hecho i{background:#1E9E6A;border-color:#1E9E6A}
.hitos .tarde i{background:#D98A00;border-color:#D98A00}
.hitos .vencido i{background:#E02B2B;border-color:#E02B2B}
.hitos b{font-weight:600;display:block}
.fechas-hito{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media print{aside,.no-imprimir,.toast{display:none!important}.app{display:block}main{padding:0}}
@media (max-width:820px){
 .rep-grid{grid-template-columns:1fr}
 aside{justify-content:space-between!important}
 .logo-btn{width:auto}
 .usuario-caja{margin:0;border:0;padding:0;text-align:right}
 .usuario-caja b,.usuario-caja small{display:none}
 .usuario-caja .btn{margin:0 0 0 4px}
 .app{grid-template-columns:1fr}
 aside{position:static;height:auto;border-right:0;border-bottom:1px solid var(--linea);padding:10px 16px;flex-direction:row;align-items:center;justify-content:center}
 .logo{width:96px;margin:0}.lema,.nota-demo{display:none}
 nav{position:fixed;bottom:0;left:0;right:0;flex-direction:row;background:#fff;border-top:1px solid var(--linea);padding:6px;gap:2px;overflow-x:auto;z-index:5}
 nav button{flex:0 0 auto;width:auto;padding:8px 10px;font-size:12px}
 main{padding:16px 16px 84px}
 .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
 .kpi{padding:12px}
 .kpi b{font-size:clamp(17px,5.4vw,22px);overflow-wrap:anywhere}
 .oculto-escritorio{display:block;font-size:11px;color:var(--suave);margin-bottom:10px}
}
.titulo-seccion{font-size:15px;font-weight:600;color:var(--marino);margin:16px 0 10px}
.s-sin-entrega-prometida{background:#7C8CA0}
.obra-card .falta{color:#946000;font-size:12px;font-weight:500}
