/* Control de obra (Operaciones) */
.ob-cabecera { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:flex-end; gap:10px; margin-bottom:10px; }
.ob-cabecera h1 { margin:0; font-size:21px; color:var(--body-loud-color); font-weight:600; }
.ob-cabecera .ob-sub { color:var(--body-quiet-color); font-size:13px; margin-top:2px; }
.ob-tabs { display:flex; flex-wrap:wrap; gap:4px; border-bottom:2px solid var(--emy-azul); margin:0 0 18px; }
.ob-tabs a:link, .ob-tabs a:visited { padding:8px 14px; border-radius:8px 8px 0 0; color:var(--body-fg); text-decoration:none;
  background:#fff; border:1px solid var(--hairline-color); border-bottom:none; font-weight:500; font-size:13px; }
.ob-tabs a:hover { color:var(--emy-azul); background:var(--emy-azul-claro); }
.ob-tabs a.activo { background:var(--emy-azul); color:#fff; border-color:var(--emy-azul); }
.ob-kpis { display:grid; grid-template-columns:repeat(auto-fill, minmax(190px, 1fr)); gap:12px; margin-bottom:18px; }
.ob-kpi { background:#fff; border:1px solid var(--hairline-color); border-radius:10px; padding:12px 14px; box-shadow:var(--emy-sombra); }
.ob-kpi small { display:block; color:var(--body-quiet-color); font-size:12px; margin-bottom:4px; }
.ob-kpi b { font-size:21px; color:var(--body-loud-color); font-weight:600; }
.ob-kpi em { display:block; font-style:normal; color:var(--body-quiet-color); font-size:12px; margin-top:2px; }
.ob-kpi.rojo { border-left:4px solid #ba2121; } .ob-kpi.verde { border-left:4px solid #2e7d32; }
.ob-kpi.ambar { border-left:4px solid #b26a00; } .ob-kpi.azul { border-left:4px solid #2f6fb0; }
.ob-panel { background:#fff; border:1px solid var(--hairline-color); border-radius:10px; box-shadow:var(--emy-sombra); margin-bottom:18px; overflow:auto; }
.ob-panel > h2 { margin:0; padding:10px 14px; font-size:14px; font-weight:600; color:var(--emy-azul); border-bottom:1px solid var(--hairline-color);
  display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; }
.ob-panel > h2 small { font-weight:400; color:var(--body-quiet-color); }
.ob-panel > .ob-pad { padding:12px 14px; }
.ob-dos { display:grid; grid-template-columns:repeat(auto-fit, minmax(420px, 1fr)); gap:18px; }
.ob-tabla { width:100%; border-collapse:collapse; font-size:13px; }
.ob-tabla th { background:#f1f4f9; font-size:11px; text-transform:uppercase; letter-spacing:.3px; color:#33415a; padding:7px 8px; text-align:left; white-space:nowrap; }
.ob-tabla td { padding:6px 8px; border-top:1px solid var(--hairline-color); vertical-align:middle; }
.ob-tabla td a { white-space:nowrap; }
.ob-tabla .num, .ob-tabla th.num { text-align:right; white-space:nowrap; }
.ob-tabla tr.ob-grupo td { background:var(--emy-azul-claro); font-weight:600; color:var(--emy-azul); }
.ob-tabla tr.ob-total td { background:#f1f4f9; font-weight:700; }
.ob-tabla tr.ob-actual td { background:#fff8e1; }
.ob-tabla tr.ob-futuro td { color:var(--body-quiet-color); }
.ob-tabla input[type=text], .ob-tabla input[type=number], .ob-tabla input:not([type]) { width:85px; text-align:right; }
.ob-tabla input.ob-texto { width:100%; min-width:120px; text-align:left; }
.ob-tabla input[type=date] { width:auto; }
.ob-tabla select { max-width:190px; }
.ob-error { color:#ba2121; font-size:11px; display:block; }
.ob-neg { color:#ba2121; } .ob-pos { color:#2e7d32; }
.ob-quiet { color:var(--body-quiet-color); font-size:12px; }
.ob-barra { display:flex; align-items:center; gap:8px; min-width:150px; }
.ob-barra-fondo { position:relative; flex:1; height:8px; background:#e5e9f0; border-radius:4px; overflow:visible; }
.ob-barra-fondo > span { display:block; height:100%; border-radius:4px; }
.ob-barra b { white-space:nowrap; font-size:12px; }
.ob-marca { position:absolute; top:-3px; width:2px; height:14px; background:#D4842E; }
.ob-insignia { color:#fff; padding:2px 9px; border-radius:10px; font-size:11px; white-space:nowrap; }
.ob-rojo { background:#ba2121; } .ob-gris { background:#7a7a7a; } .ob-azul { background:#2f6fb0; }
.ob-verde { background:#2e7d32; } .ob-ambar { background:#b26a00; }
.ob-acciones { display:flex; flex-wrap:wrap; gap:12px; align-items:flex-end; margin:0 0 14px; }
.ob-acciones label { display:block; font-size:12px; color:var(--body-quiet-color); margin-bottom:3px; }
.ob-botones { display:flex; flex-wrap:wrap; gap:8px; }
a.ob-boton:link, a.ob-boton:visited { display:inline-block; padding:7px 14px; border-radius:6px; background:var(--emy-azul); color:#fff; font-size:13px; text-decoration:none; }
a.ob-boton.sec:link, a.ob-boton.sec:visited { background:#fff; color:var(--emy-azul); border:1px solid var(--emy-azul); }
a.ob-boton:hover { opacity:.9; }
.ob-aviso { background:#fff8e1; border:1px solid #f0d58a; border-radius:8px; padding:10px 14px; margin-bottom:14px; }
/* Gantt */
.ob-gantt td.ob-sem { padding:0; min-width:22px; border-left:1px solid #eef1f6; }
.ob-gantt th.ob-sem { padding:4px 2px; font-size:10px; text-align:center; min-width:22px; }
.ob-gantt th.ob-hoy, .ob-gantt td.ob-hoy { background:#fff3e0; }
.ob-gantt .ob-g { display:block; height:12px; background:#9db7e0; margin:0 -1px; position:relative; }
.ob-gantt .ob-g.real { background:var(--emy-azul); }
.ob-gantt .ob-g.cap { background:#D4842E; height:7px; }
.ob-gantt .ob-ep { color:#D4842E; font-weight:700; }
/* Curva S */
.ob-curva svg { width:100%; height:auto; display:block; }
/* Impresión de EP */
@media print {
  #header, .breadcrumbs, #nav-sidebar, .toggle-nav-sidebar, .ob-tabs, .ob-noprint, .pie, ul.messagelist { display:none !important; }
  #content { padding:0 !important; } .ob-panel { box-shadow:none; border:none; }
}
