/* Portal Vifer v3 · LLAVE MAESTRA: consola del equipo Vifer, ficha de cliente, editor del portal y la banda que
   avisa dentro del portal del cliente. Ambar = equipo Vifer (se distingue siempre del cliente). */

.vf { min-height: 100vh; background: var(--bg); }
.vf-top { position: sticky; top: 0; z-index: 30; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px clamp(16px, 3vw, 32px); border-bottom: 1px solid rgba(240, 179, 74, 0.3); background: rgba(var(--paper-rgb), 0.94); }
.vf-top__brand { display: inline-flex; align-items: center; gap: 12px; color: var(--fg); text-decoration: none; }
.vf-top__tag { padding: 3px 8px; border-radius: 4px; background: rgba(240, 179, 74, 0.16); color: var(--warning); font-size: 11px; letter-spacing: 0.12em; }
.vf-top__r { display: flex; align-items: center; gap: 12px; }
.vf-top__who { display: inline-flex; align-items: center; gap: 6px; color: var(--warning); font-size: 13px; }
.vf-main { max-width: 1400px; margin: 0 auto; padding: 24px clamp(16px, 3vw, 32px) 80px; }
.vf-main:focus { outline: none; }
.vf-load { padding: 40px 0; }
.vf-screen { display: grid; gap: 18px; }
.vf-head h1, .vf-file__h h1 { margin: 4px 0 6px; font-size: clamp(28px, 3.2vw, 40px); letter-spacing: -0.02em; }
.vf-head .eyebrow, .vl-grid .eyebrow { color: var(--warning); }

.vf-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; margin: 0; padding: 0; list-style: none; }
.vf-kpi { display: grid; gap: 4px; padding: 12px 14px; border: 1px solid var(--border-subtle); border-radius: 10px; background: var(--surface-2); }
.vf-kpi__l { color: var(--fg-muted); font-size: 12.5px; }
.vf-kpi b { font-size: 24px; }
.vf-kpi.is-ok b { color: var(--success); } .vf-kpi.is-watch b { color: var(--warning); } .vf-kpi.is-risk b { color: var(--danger); }

.vf-tools { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.vf-search { max-width: 300px; }
.vf-tbl td { vertical-align: middle; }
.vf-client { display: grid; gap: 2px; color: var(--fg); text-decoration: none; }
.vf-client:hover b, .vf-client:focus-visible b { color: var(--warning); }
.vf-client .dim { font-size: 12.5px; }
.vf-stage.is-marcha { color: var(--success); } .vf-stage.is-construccion { color: var(--cyan-bright); } .vf-stage.is-diagnostico { color: var(--fg-muted); }
.vf-score { display: inline-flex; align-items: baseline; gap: 8px; }
.vf-score b { font-size: 20px; }
.vf-score span { font-size: 12px; }
.vf-score.is-ok b, .vf-score.is-ok span { color: var(--success); } .vf-score.is-watch b, .vf-score.is-watch span { color: var(--warning); } .vf-score.is-risk b, .vf-score.is-risk span { color: var(--danger); }
.vf-tbl tr.is-risk { box-shadow: inset 3px 0 0 var(--danger); }
.vf-tbl tr.is-watch { box-shadow: inset 3px 0 0 var(--warning); }
.vf-delta { margin-left: 6px; font-size: 12px; } .vf-delta.is-up { color: var(--success); } .vf-delta.is-down { color: var(--danger); }
.vf-tbl .chip.is-ok { color: var(--success); }
.vf-act { text-align: right; }

/* Ficha */
.vf-file__h { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 16px; }
.vf-big { display: grid; justify-items: end; gap: 2px; }
.vf-big b { font-size: 56px; line-height: 1; letter-spacing: -0.03em; }
.vf-big.is-ok b, .vf-big.is-ok > span:nth-child(2) { color: var(--success); } .vf-big.is-watch b, .vf-big.is-watch > span:nth-child(2) { color: var(--warning); } .vf-big.is-risk b, .vf-big.is-risk > span:nth-child(2) { color: var(--danger); }
.vf-enter { display: grid; grid-template-columns: minmax(0, 1fr) minmax(200px, 300px) auto auto; gap: 12px; align-items: end; padding: 14px 16px; border: 1px solid rgba(240, 179, 74, 0.35); border-radius: 12px; background: rgba(240, 179, 74, 0.05); }
.vf-enter__r { display: grid; gap: 4px; }
.vf-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 460px), 1fr)); gap: 14px; align-items: start; }
.vf-comp { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; font-size: 13.5px; }
.vf-comp li { display: grid; grid-template-columns: minmax(130px, 34%) minmax(0, 1fr) 110px; gap: 10px; align-items: center; }
.vf-comp li > b { text-align: right; }
.vf-comp__t { height: 10px; border-radius: 3px; background: rgba(var(--ink-rgb), 0.06); overflow: hidden; }
.vf-comp__f { display: block; height: 100%; background: var(--success); transform-origin: left; transform: scaleX(var(--p, 0)); }
.vf-comp li.is-low .vf-comp__f { background: var(--warning); } .vf-comp li.is-low > span:first-child { color: var(--warning); }
.vf-reasons { margin-top: 12px; padding: 10px 12px; border-left: 3px solid var(--warning); border-radius: 0 8px 8px 0; background: rgba(240, 179, 74, 0.06); }
.vf-reasons ul { display: grid; gap: 6px; margin: 4px 0 0; padding: 0; list-style: none; font-size: 13.5px; }
.vf-reasons li { display: grid; gap: 2px; }
.vf-tl { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; font-size: 13.5px; }
.vf-tl li { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 10px; padding: 7px 0 7px 10px; border-left: 2px solid var(--border-subtle); }
.vf-tl li.is-live, .vf-tl li.is-done { border-left-color: var(--success); } .vf-tl li.is-incident { border-left-color: var(--danger); }
.vf-tl li.is-staffEnter, .vf-tl li.is-staffLayout { border-left-color: var(--warning); color: var(--warning); }
.vf-pieces { display: grid; gap: 6px; margin: 0 0 8px; padding: 0; list-style: none; font-size: 13.5px; }
.vf-pieces li { display: flex; align-items: center; gap: 8px; }
.vf-notes { display: grid; gap: 8px; margin: 10px 0 0; padding: 0; list-style: none; }
.vf-notes p { margin: 2px 0 0; }

/* Editor del portal */
.vl-grid { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 16px; align-items: start; }
.vl-list { display: grid; gap: 4px; margin: 8px 0 0; padding: 0; list-style: none; }
.vl-list--cols { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.vl-row { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border: 1px solid var(--border-subtle); border-radius: 8px; background: var(--surface-2); font-size: 13.5px; }
.vl-row > span:not(.vl-n):not(.vl-move) { flex: 1; min-width: 0; }
.vl-n { width: 20px; color: var(--fg-dim); }
.vl-move { display: inline-flex; gap: 2px; }
.vl-up { transform: rotate(-90deg); }
.vl-labels { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; margin: 8px 0 0; padding: 0; list-style: none; }
.vl-labels li { display: grid; gap: 4px; }
.vl-sticky { position: sticky; top: 76px; display: grid; gap: 10px; border-color: rgba(240, 179, 74, 0.35); }
.vl-prev { display: grid; gap: 4px; margin: 0; padding: 0 0 0 18px; color: var(--fg); font-size: 13.5px; }
.vl-reset { justify-self: start; font-size: 13px; }

/* Banda dentro del portal del cliente */
.staff-bar { position: sticky; top: 0; z-index: 60; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px 14px; padding: 6px 16px; background: var(--warning); color: #140d00; font-size: 13px; }
.staff-bar b { font-weight: 700; }
.staff-bar__a { color: #140d00; font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
.staff-bar__a:hover, .staff-bar__a:focus-visible { text-decoration-thickness: 2px; }

/* Acceso: login y seguridad */
.login__staff { display: grid; gap: 8px; margin-top: 18px; padding-top: 16px; border-top: 1px dashed rgba(240, 179, 74, 0.35); }
.login__staff .eyebrow { color: var(--warning); }
.sg-staff { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 13px; }
.sg-staff li { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 10px; color: var(--warning); }

@media (max-width: 980px) { .vl-grid { grid-template-columns: 1fr; } .vl-sticky { position: static; } .vf-enter { grid-template-columns: 1fr; } }
@media (max-width: 640px) { .vf-comp li { grid-template-columns: minmax(100px, 40%) minmax(0, 1fr) auto; } .vf-big b { font-size: 44px; } .sg-staff li { grid-template-columns: 1fr; } }
.vl-dn { transform: rotate(90deg); }

/* Banda del motor real */
.real-strip { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px 12px; padding: 6px 16px; border-bottom: 1px solid rgba(77, 213, 153, 0.35); background: rgba(77, 213, 153, 0.1); color: var(--success); font-size: 13px; }
.real-strip__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--success); box-shadow: 0 0 0 4px rgba(77, 213, 153, 0.2); }
.login__real .eyebrow { color: var(--success); }

/* Presupuestador interno (Plan 69): propuestas del equipo Vifer. Todo orientativo. */
.pp-advisory { margin: 0; padding: 10px 14px; border: 1px solid rgba(240, 179, 74, 0.4); border-radius: 10px; background: rgba(240, 179, 74, 0.08); color: var(--fg); font-size: 13.5px; }
.pp-advisory b { color: var(--warning); }
.pp-error { margin: 0; padding: 10px 14px; border: 1px solid var(--danger); border-radius: 10px; background: rgba(255, 107, 107, 0.08); color: var(--danger); font-size: 13.5px; overflow-wrap: anywhere; }
.pp-error[hidden], .empty[hidden] { display: none; }
.pp-filter { max-width: 260px; }
.pp-list td { vertical-align: middle; }
.pp-st.is-borrador { color: var(--fg-muted); } .pp-st.is-revision_interna, .pp-st.is-aprobado_envio { color: var(--warning); }
.pp-st.is-enviado { color: var(--cyan-bright); } .pp-st.is-aceptado { color: var(--success); } .pp-st.is-rechazado, .pp-st.is-caducado { color: var(--danger); }
.pp-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; font-size: 13px; }
.pp-trans { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; padding: 10px 14px; border: 1px solid var(--border-subtle); border-radius: 10px; background: var(--surface-2); }
.pp-trans .input { max-width: 280px; min-height: 36px; padding: 6px 10px; }
.pp-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px; align-items: start; }
.pp-form { margin: 0; padding: 0; border: 0; min-width: 0; }
.pp-form legend { padding: 0; }
.pp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 4px 12px; }
.pp-f { display: grid; gap: 2px; align-content: start; }
.pp-f--wide { grid-column: 1 / -1; }
.pp-f small { font-size: 12px; }
.pp-hours { display: grid; gap: 8px; margin-bottom: 8px; }
.pp-hours__row { display: grid; grid-template-columns: minmax(120px, 1.4fr) repeat(3, minmax(80px, 1fr)) auto; gap: 8px; align-items: end; padding: 8px; border: 1px solid var(--border-subtle); border-radius: 10px; background: var(--surface-2); }
.pp-actions { display: grid; gap: 10px; justify-items: start; }
.pp-result { display: grid; gap: 14px; min-width: 0; }
.pp-out { display: grid; gap: 14px; }
.pp-block { display: grid; gap: 6px; min-width: 0; }
.pp-lines { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 13.5px; }
.pp-lines li { display: grid; grid-template-columns: minmax(110px, 1fr) auto minmax(0, 2fr); gap: 4px 12px; align-items: baseline; }
.pp-missing { padding: 10px 14px; border: 1px dashed rgba(240, 179, 74, 0.55); border-radius: 10px; }
.pp-missing ul { margin: 6px 0; padding-left: 18px; }
.pp-tbl td.num { text-align: right; white-space: nowrap; }
.pp-tbl th[scope="row"] { text-align: left; font-weight: 500; }
@media (max-width: 980px) { .pp-cols { grid-template-columns: 1fr; } }
@media (max-width: 640px) { .pp-hours__row { grid-template-columns: 1fr 1fr; } .pp-lines li { grid-template-columns: 1fr; } }
