/* ============================================================
   Estimaciones Conservación SECIP — Sistema visual compartido
   Tokens y componentes de "Design System.dc.html" (Parte 1 y C1–C9)
   + app-shell (topbar, rieles, layout). Todas las pantallas
   enlazan este archivo: un solo sistema, una sola fuente de verdad.
   ============================================================ */

:root{
  --bg:#FAF9F7; --surface:#FFFFFF; --border:#E5E0D8; --border-strong:#CFC8BC;
  --ink:#211D17; --ink-2:#6E675C; --ink-3:#9B948A;
  --accent:#1E5AA8; --accent-hover:#174A8C; --accent-bg:#EBF1F9; --accent-border:#B9CDE6;
  --ok:#1F7A3D; --ok-bg:#E9F4EC; --ok-border:#BBDCC5;
  --warn:#A85B00; --warn-bg:#FCF1E2; --warn-border:#EBCFA4;
  --bad:#B3261E; --bad-bg:#FBECEA; --bad-border:#EDBEBA;
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{font-family:'IBM Plex Sans',sans-serif;color:var(--ink)}

/* ---- utilidades base ---- */
.mono{font-family:'IBM Plex Mono',monospace}
.tnum,.num{font-variant-numeric:tabular-nums;font-feature-settings:'tnum'}
.frac{font-family:'IBM Plex Mono',monospace;font-size:12.5px}
.tok{font-size:12px;color:var(--ink-2)}
.tok b{color:var(--ink);font-weight:600}
.muted{color:var(--ink-2)}
.muted-3{color:var(--ink-3)}
.state-lbl{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-bottom:8px}
.divider{height:1px;background:var(--border);border:none;margin:0}

.fx{display:flex}.ac{align-items:center}.as{align-items:flex-start}.ab{align-items:baseline}
.jb{justify-content:space-between}.je{justify-content:flex-end}.jc{justify-content:center}
.col{flex-direction:column}.wrp{flex-wrap:wrap}.grow{flex:1}.ml-a{margin-left:auto}.none{flex:none}
.gap4{gap:4px}.gap6{gap:6px}.gap8{gap:8px}.gap10{gap:10px}.gap12{gap:12px}.gap16{gap:16px}.gap20{gap:20px}.gap24{gap:24px}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}

/* ---- superficies ---- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px}
.card-title{font-size:13px;font-weight:600;color:var(--ink-2)}
.section-title{font-size:15px;font-weight:600}

/* ---- botones ---- */
.btn{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 16px;border-radius:8px;font-size:14px;font-weight:600;border:1px solid transparent;cursor:pointer;font-family:'IBM Plex Sans',sans-serif;white-space:nowrap}
.btn-sm{height:30px;padding:0 12px;font-size:13px}
.btn-lg{height:42px;padding:0 20px;font-size:15px}
.btn-pri{background:var(--accent);color:#fff}
.btn-pri:hover{background:var(--accent-hover)}
.btn-sec{background:var(--surface);color:var(--ink);border-color:var(--border-strong)}
.btn-sec:hover{background:#F5F2EC}
.btn-danger{background:var(--surface);color:var(--bad);border-color:var(--bad-border)}
.btn-danger:hover{background:var(--bad-bg)}
.btn-dis{background:#EFECE6;color:var(--ink-3);cursor:not-allowed}
.btn-block{width:100%;justify-content:center}
.link{color:var(--accent);font-weight:600;cursor:pointer;text-decoration:none}
.link:hover{text-decoration:underline}

/* ---- inputs ---- */
.inp{height:36px;border:1px solid var(--border-strong);border-radius:8px;padding:0 12px;font-size:14px;font-family:'IBM Plex Sans',sans-serif;background:var(--surface);color:var(--ink);box-sizing:border-box;width:100%}
.tbl .inp{height:32px;border-radius:7px;padding:0 10px;font-size:13px}
.inp-focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}
.inp-err{border-color:var(--bad);box-shadow:0 0 0 3px var(--bad-bg)}
.lbl{font-size:12px;font-weight:600;color:var(--ink-2);margin-bottom:6px;display:block}
.err-msg{font-size:12px;color:var(--bad);margin-top:4px}
.sel{position:relative}
.sel .inp{padding-right:26px}
.caret{position:absolute;right:9px;top:9px;color:var(--ink-3);font-size:11px;pointer-events:none}
.searchbar{display:flex;align-items:center;gap:8px;height:36px;border:1px solid var(--border-strong);border-radius:8px;padding:0 12px;background:var(--surface);color:var(--ink-3);font-size:13.5px;min-width:260px}
.searchbar input{border:none;outline:none;background:transparent;font-size:13.5px;font-family:inherit;color:var(--ink);width:100%}
.upload{border:1.5px dashed var(--border-strong);border-radius:10px;padding:20px;text-align:center;font-size:13px;color:var(--ink-2);background:#FCFBF9}

/* ---- chips de estado ---- */
.chip{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap}
.chip-dot{width:7px;height:7px;border-radius:999px}
.c-capt{background:#F0EDE7;color:#5B5347;border-color:#DCD6CB}
.c-gen{background:var(--accent-bg);color:var(--accent);border-color:var(--accent-border)}
.c-llen{background:#DFE9F6;color:#123C73;border-color:#AECBEA}
.c-lista{background:var(--ok-bg);color:var(--ok);border-color:var(--ok-border)}
.c-pre{background:transparent;color:#7A6A4F;border:1px dashed #BCA97F}
.c-org{background:#F0EDE7;color:#5B5347;border-color:#DCD6CB;height:20px;font-size:11px;padding:0 8px}
.mini-tag{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:#F0EDE7;color:#7A7264;white-space:nowrap}
.tag-soft{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:6px;background:#F0EDE7;color:#5B5347;font-size:11.5px;font-weight:600}
.pillcount{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:999px;background:#F0EDE7;color:#5B5347;font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums}
.reco{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:999px;background:var(--ok-bg);color:var(--ok);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--ok-border)}
.kbd{font-family:'IBM Plex Mono',monospace;font-size:11px;border:1px solid var(--border-strong);border-radius:4px;padding:1px 5px;color:var(--ink-2);background:#FBFAF7}

/* ---- tablas ---- */
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);text-align:left;padding:8px 10px;border-bottom:1px solid var(--border-strong);white-space:nowrap}
.tbl td{padding:7px 10px;border-bottom:1px solid var(--border)}
.tbl .num{text-align:right;white-space:nowrap}
.tbl .tot td{font-weight:700;border-top:2px solid var(--border-strong);border-bottom:none;background:#FBFAF7}
.tbl-hover tbody tr:hover td{background:#F7F5F1}
.row-err td{background:var(--bad-bg)}

/* ---- banners ---- */
.banner{display:flex;gap:12px;align-items:flex-start;border-radius:8px;padding:12px 14px;font-size:13px;border:1px solid}
.b-info{background:var(--accent-bg);border-color:var(--accent-border);color:#173F75}
.b-warn{background:var(--warn-bg);border-color:var(--warn-border);color:#6E3E06}
.b-rule{background:#26221B;border-color:#26221B;color:#F5F2EC}
.b-mark{flex:none;width:20px;height:20px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}

/* ---- fechas límite del mes ---- */
.dates{display:flex;align-items:center;gap:6px;font-size:12px;flex-wrap:wrap}
.d-step{display:flex;flex-direction:column;gap:2px;padding:6px 9px;border:1px solid var(--border);border-radius:8px;background:var(--surface);min-width:76px}
.d-step b{font-size:13px}
.d-next{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}
.d-past{border-color:var(--bad-border);background:var(--bad-bg)}
.d-lbl{font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap}
.d-arrow{color:var(--ink-3)}
.dates-sm{gap:4px}
.dates-sm .d-step{min-width:58px;padding:5px 7px}
.dates-sm .d-arrow{display:none}

/* ---- tarjeta de obra (C2) ---- */
.obra-card{border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:16px;cursor:pointer}
.obra-card:hover{border-color:var(--accent-border);box-shadow:0 2px 10px rgba(30,90,168,.08)}

/* ---- filas de estimación (C3) ---- */
.est-row{display:grid;grid-template-columns:158px 1fr 130px 168px 150px;gap:12px;align-items:center;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13px;background:var(--surface)}
.est-row:hover{background:#F7F5F1}
.est-head{display:grid;grid-template-columns:158px 1fr 130px 168px 150px;gap:12px;padding:8px 14px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);border-bottom:1px solid var(--border-strong)}
.est-arr{opacity:.55;background:#FBFAF7}

/* ---- checklist (C6) ---- */
.chk{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);font-size:13px}
.chk-box{flex:none;width:18px;height:18px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}
.chk-auto{background:var(--ok);color:#fff}
.chk-manual{border:1.5px solid var(--border-strong);background:#fff}
.chk-bad{border:1.5px solid var(--bad);background:var(--bad-bg);color:var(--bad)}
.chk-na{opacity:.55}
.lock{font-size:10px;color:var(--ink-3)}

/* ---- semáforos, validaciones, ISA ---- */
.sem{display:flex;align-items:center;gap:10px;border-radius:8px;padding:10px 14px;font-size:13px;font-weight:600;border:1px solid}
.sem-ok{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}
.sem-warn{background:var(--warn-bg);border-color:var(--warn-border);color:#6E3E06}
.sem-dot{width:10px;height:10px;border-radius:999px}
.val{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border-bottom:1px solid var(--border);font-size:13px}
.val-ic{flex:none;width:18px;height:18px;border-radius:999px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;margin-top:1px}
.v-ok{background:var(--ok);color:#fff}
.v-bad{background:var(--bad);color:#fff}
.isa-total{font-size:34px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.cumple{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.04em}

/* ---- pasos del robot (C8) ---- */
.steps{display:flex;align-items:center;gap:8px;font-size:12.5px;flex-wrap:wrap}
.step{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface)}
.step-ic{width:18px;height:18px;border-radius:999px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700}
.st-done{background:var(--ok);color:#fff}
.st-now{border:2px solid var(--accent);color:var(--accent);background:var(--accent-bg)}
.st-wait{border:1.5px solid var(--border-strong);color:var(--ink-3);background:#fff}

/* ---- tarjeta de documento (C9) ---- */
.doc-card{border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:14px;display:flex;flex-direction:column;gap:10px}
.doc-badge{width:38px;height:44px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;letter-spacing:.03em;color:#fff;flex:none}
.bx{background:#2E7D4F}.bd{background:#2B5FA3}.bp{background:#B0473F}

/* ---- estados de carga ---- */
.skel{background:linear-gradient(90deg,#EFECE6 25%,#F7F5F1 50%,#EFECE6 75%);background-size:200% 100%;animation:sk 1.4s infinite;border-radius:6px}
@keyframes sk{0%{background-position:200% 0}100%{background-position:-200% 0}}
.spin{width:14px;height:14px;border-radius:999px;border:2px solid #D8D2C7;border-top-color:var(--accent);animation:sp .9s linear infinite;flex:none}
.spin-lg{width:20px;height:20px;border-width:2.5px}
@keyframes sp{to{transform:rotate(360deg)}}
.empty{border:1px solid var(--border);border-radius:10px;padding:22px;text-align:center;background:var(--surface)}

/* ---- montos protagonistas ---- */
.amount-xl{font-size:30px;font-weight:600;font-variant-numeric:tabular-nums;font-feature-settings:'tnum';letter-spacing:-.01em}

/* ---- indicadores / kpi ---- */
.kpi{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px 16px}
.kpi-lbl{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.kpi-num{font-size:22px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:6px}
.kpi-sub{font-size:12px;color:var(--ink-3);margin-top:2px}
.progress{height:8px;border-radius:999px;background:#EFECE6;overflow:hidden}
.progress > i{display:block;height:100%;background:var(--accent);border-radius:999px}

/* ============================================================
   APP SHELL — cromo común de todas las pantallas
   ============================================================ */
.app{background:var(--bg);color:var(--ink);min-height:100vh}
.topbar{height:56px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:20}
.brand{display:flex;align-items:center;gap:11px}
.brand-mark{width:32px;height:32px;border-radius:8px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;letter-spacing:.03em;flex:none}
.brand-name{font-size:15px;font-weight:700;letter-spacing:-.01em;line-height:1.1}
.brand-sub{font-size:11px;color:var(--ink-3);letter-spacing:.02em}
.top-actions{display:flex;align-items:center;gap:16px}
.userchip{display:flex;align-items:center;gap:9px;padding:4px 10px 4px 5px;border-radius:999px;border:1px solid var(--border);background:var(--surface)}
.userchip:hover{border-color:var(--border-strong)}
.avatar{width:28px;height:28px;border-radius:999px;background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-border);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:none}
.avatar-lg{width:44px;height:44px;font-size:16px}
.u-name{font-size:12.5px;font-weight:600;line-height:1.15}
.u-role{font-size:11px;color:var(--ink-2)}

.shell{display:grid;grid-template-columns:216px minmax(0,1fr);gap:24px;max-width:1400px;margin:0 auto;padding:24px 28px 72px}
.shell-narrow{max-width:1160px}
.page{max-width:1400px;margin:0 auto;padding:24px 28px 72px}
.page-narrow{max-width:920px}
.content{min-width:0}

.navrail{align-self:start;position:sticky;top:80px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:2px}
.nav-item{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:7px;font-size:13px;color:var(--ink-2);cursor:pointer;text-decoration:none}
.nav-item:hover{background:#F7F5F1}
.nav-on{background:var(--accent-bg);color:var(--accent);font-weight:600}
.nav-on:hover{background:var(--accent-bg)}
.nav-num{width:20px;height:20px;border-radius:999px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex:none;background:#F0EDE7;color:var(--ink-2)}
.nav-on .nav-num{background:var(--accent);color:#fff}
.nav-num.done{background:var(--ok);color:#fff}
.rail-title{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);padding:2px 10px 8px}

.crumb{font-size:12.5px;color:var(--ink-2);margin-bottom:14px}
.crumb a{color:var(--ink-2);text-decoration:none}
.crumb a:hover{color:var(--accent)}
.crumb b{color:var(--ink);font-weight:600}
.crumb .sep{color:var(--ink-3);margin:0 7px}

.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}
.page-title{font-size:22px;font-weight:600;letter-spacing:-.01em}
.page-sub{font-size:13.5px;color:var(--ink-2);margin-top:5px;text-wrap:pretty;max-width:74ch}
.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}

/* franja de identidad de la estimación (pantallas 05–09) */
.est-band{display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:13px 16px;margin-bottom:20px;flex-wrap:wrap}

/* pestañas */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border)}
.tab{padding:9px 14px;font-size:13.5px;font-weight:600;color:var(--ink-2);border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px}
.tab:hover{color:var(--ink)}
.tab-on{color:var(--accent);border-bottom-color:var(--accent)}

/* login */
.login-bg{min-height:100vh;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:40px}
.login-card{width:404px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:30px 30px 26px;box-shadow:0 16px 48px rgba(33,29,23,.08)}
.motto{font-size:12px;color:var(--ink-3);letter-spacing:.02em}
