:root{
  /* Paleta corporativa OxoHotel (Manual de marca 2024) */
  --bg:#33454f; --panel:#ffffff; --ink:#454545; --muted:#8a877f; --line:#e4e1da;
  --primary:#49677a; --primary-d:#37505f; --ok:#5f6d5f; --warn:#c19528; --err:#b3453f;
  --teal:#7c93a1; --soft:#ececea;
}
*{box-sizing:border-box}
body{margin:0;font-family:'Montserrat','Segoe UI',system-ui,Arial,sans-serif;color:var(--ink);background:var(--soft)}
.top{display:flex;flex-direction:column;gap:.5rem;
  background:linear-gradient(180deg,#2a3a41,var(--bg));color:#fff;padding:.7rem 1.4rem .6rem;
  border-bottom:1px solid #26343b;box-shadow:0 2px 10px rgba(0,0,0,.18)}
.top-row{display:flex;justify-content:space-between;align-items:center;gap:1.2rem;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:.75rem}
.logo-badge{display:inline-flex;align-items:center;justify-content:center;width:2.35rem;height:2.35rem;
  border-radius:9px;background:linear-gradient(135deg,var(--primary),var(--warn));color:#fff;
  font-weight:800;font-size:.85rem;letter-spacing:.02em;flex:none;box-shadow:0 2px 6px rgba(73,103,122,.35)}
.brand-text{display:flex;flex-direction:column;gap:.05rem;line-height:1.15}
.logo{font-weight:800;letter-spacing:.01em;font-size:1.15rem;color:#fff}
.sub{color:#a9b6bd;font-size:.78rem}
.top-right{display:flex;align-items:center;gap:.9rem;font-size:.85rem;color:#c7d0d4;white-space:nowrap}
.ver{color:#7e8f96;font-size:.75rem;white-space:nowrap}
.user-box{display:flex;align-items:center;gap:.6rem}
.user-email{font-size:.8rem;color:#c7d0d4;white-space:nowrap}
.top-toolbar{display:flex;align-items:center;gap:.8rem;padding-top:.5rem;border-top:1px solid rgba(255,255,255,.08)}
.top-toolbar[hidden]{display:none}
.prop-field{display:flex;align-items:center;gap:.5rem;background:#2a3a41;border:1px solid #435b68;
  border-radius:8px;padding:.3rem .5rem .3rem .7rem}
.prop-field label{color:#9fb0b7;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}
.top-toolbar select{padding:.3rem .5rem;border-radius:6px;border:1px solid #435b68;background:#22323a;color:#fff;font-size:.85rem}
#scanBtn{white-space:nowrap}

/* ---- Login ---- */
.login-screen{position:fixed;inset:0;background:var(--soft);display:flex;align-items:center;justify-content:center;z-index:50}
.login-screen[hidden]{display:none}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:2rem 2.2rem;
  width:22rem;max-width:90vw;box-shadow:0 4px 24px rgba(0,0,0,.1);display:flex;flex-direction:column;align-items:center;text-align:center}
.login-badge{width:3rem;height:3rem;font-size:1.05rem;margin-bottom:.7rem}
.login-card h1{font-size:1.3rem;margin:.2rem 0 .1rem;color:var(--ink)}
.login-field{display:flex;flex-direction:column;align-items:flex-start;gap:.3rem;width:100%;margin-bottom:.9rem;font-size:.78rem;font-weight:600;color:var(--muted)}
.login-field input{width:100%;padding:.55rem .7rem;border:1px solid var(--line);border-radius:8px;font-size:.9rem;font-family:inherit}
.login-field input:focus{outline:none;border-color:var(--primary)}
.login-card .btn{width:100%;padding:.65rem;font-size:.9rem;margin-top:.2rem}
.login-card .msg.err{width:100%;text-align:left;margin-bottom:.6rem}
.btn{border:0;border-radius:7px;padding:.5rem .9rem;font-size:.85rem;font-weight:600;cursor:pointer;background:#e7e4de;color:var(--ink)}
.btn:hover{filter:brightness(.97)}
.btn-primary{background:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-d)}
.btn-ok{background:var(--ok);color:#fff}
.btn-ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
.btn:disabled{opacity:.5;cursor:not-allowed}

.layout{display:grid;grid-template-columns:minmax(300px,340px) minmax(0,1fr);gap:1rem;padding:1rem;align-items:start}
.layout[hidden]{display:none}
.list,.detail{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:1rem;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.list{padding:.85rem}
.list-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.6rem}
h2{font-size:1rem;margin:0}
.muted{color:var(--muted);font-size:.85rem}

.grid{width:100%;border-collapse:collapse;font-size:.85rem}
.grid th,.grid td{text-align:left;padding:.5rem .5rem;border-bottom:1px solid var(--line)}
.grid th{color:var(--muted);font-weight:600;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}
.grid .num{text-align:right}
.grid tbody tr{cursor:pointer}
.grid tbody tr:hover{background:var(--soft)}
.grid tbody tr.sel{background:#e8eef0}

.badge{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.72rem;font-weight:700}
.b-EN_REVISION{background:#f6ecd3;color:#8a6d1a}
.b-APROBADO{background:#e6ebe3;color:#3f4a3f}
.b-ENVIADO{background:#e2eaee;color:#2f4a57}
.b-ERROR{background:#f6e5e3;color:#7a332e}
.dot{font-weight:700}
.dot.ok{color:var(--ok)} .dot.no{color:var(--err)}

.detail .empty{padding:3rem 1rem;text-align:center}
.dhead{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap;margin-bottom:.6rem}
.dtitle{font-size:1.05rem;font-weight:700}
.actions{display:flex;gap:.5rem;flex-wrap:wrap}
.cards{display:flex;gap:.6rem;flex-wrap:wrap;margin:.6rem 0}
.card{background:var(--soft);border:1px solid var(--line);border-radius:9px;padding:.55rem .8rem;min-width:120px}
.card .k{font-size:.72rem;color:var(--muted)}
.card .v{font-size:1.05rem;font-weight:700}

.diag{margin:.7rem 0}
.diag h3{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:.4rem 0}
.msg{border-radius:7px;padding:.45rem .65rem;font-size:.82rem;margin:.3rem 0;border-left:4px solid}
.msg.err{background:#f7e9e7;border-color:var(--err)}
.msg.warn{background:#faf3e0;border-color:var(--warn)}
.msg.info{background:#f1efe9;border-color:#a39d8f}
.msg .code{font-weight:700;font-family:ui-monospace,monospace;font-size:.75rem}

.recon{border-radius:8px;padding:.5rem .7rem;font-size:.85rem;margin:.5rem 0}
.recon.ok{background:#e6ebe3;color:#3f4a3f}
.recon.diff{background:#f6ecd3;color:#8a6d1a}

.lines{max-height:340px;overflow:auto;border:1px solid var(--line);border-radius:8px;margin-top:.5rem}
.lines table{width:100%;border-collapse:collapse;font-size:.78rem}
.lines th{position:sticky;top:0;background:#f1efe9}
.lines th,.lines td{padding:.35rem .5rem;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.lines td.num{text-align:right;font-variant-numeric:tabular-nums}
.k-ABONOS{color:#49677a} .k-DEPOSITO{color:#5f6d5f} .k-DEPOSITO_TX{color:#c19528}

.toast{position:fixed;bottom:1.2rem;left:50%;transform:translateX(-50%);background:#33454f;color:#fff;
  padding:.6rem 1rem;border-radius:8px;font-size:.85rem;opacity:0;transition:opacity .25s;pointer-events:none}
.toast.show{opacity:1}

/* ---- Módulo 2: estado de interfaces (multi-proceso) ---- */
.ifaces{font-size:.8rem;font-weight:600;color:var(--muted)}
.ifaces.ok{color:var(--ok)} .ifaces.no{color:var(--err)}
.dot.warn{color:var(--warn)}
.b-VACIO{background:#eae7e1;color:#8a877f}
.sect{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:.9rem 0 .5rem}
.ifgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:.6rem}
.iface{border:1px solid var(--line);border-radius:10px;padding:.6rem .7rem;cursor:pointer;background:var(--soft);transition:.12s}
.iface:hover{border-color:var(--primary);box-shadow:0 1px 4px rgba(73,103,122,.16)}
.iface.sel{border-color:var(--primary);background:#e8eef0;box-shadow:0 0 0 1px var(--primary) inset}
.iface.st-ERROR{border-left:3px solid var(--err)} .iface.st-EN_REVISION{border-left:3px solid var(--warn)}
.iface.st-APROBADO{border-left:3px solid var(--ok)} .iface.st-ENVIADO{border-left:3px solid var(--teal)}
.iface.st-VACIO{opacity:.62}
.if-top{display:flex;justify-content:space-between;align-items:center;gap:.4rem}
.if-name{font-weight:700;font-size:.92rem}
.if-sub{font-size:.72rem;margin:.1rem 0 .35rem}
.if-meta{font-size:.75rem;display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}
.phead{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin:1rem 0 .5rem;padding-top:.8rem;border-top:1px solid var(--line)}
.two{display:grid;grid-template-columns:minmax(260px,1fr) 1.4fr;gap:1rem;align-items:start}
.doclist{min-width:0;overflow-x:auto}
.doclist table,.docprev table{width:100%;border-collapse:collapse;font-size:.8rem}
.doclist th,.doclist td{padding:.3rem .4rem;border-bottom:1px solid var(--line);text-align:left}
.doclist tbody tr{cursor:pointer} .doclist tbody tr:hover{background:var(--soft)}
.doclist tr.sel{background:#e8eef0}
.docprev{border-left:1px solid var(--line);padding-left:1rem;min-height:120px}
.dprev-head{display:flex;justify-content:space-between;align-items:center;gap:.6rem;margin-bottom:.5rem}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:.78rem}
.btn-sm{padding:.28rem .55rem;font-size:.75rem}
.empty{padding:1.2rem;text-align:center}
@media(max-width:1100px){.two{grid-template-columns:1fr}.docprev{border-left:0;padding-left:0;border-top:1px solid var(--line);padding-top:.8rem}}

/* ---- Nav de vistas + editor de equivalencias ---- */
.viewnav{display:flex;gap:.3rem;margin-left:1.4rem}
.navbtn{background:transparent;border:0;color:#9fb0b7;font-size:.9rem;font-weight:600;padding:.35rem .7rem;border-radius:6px;cursor:pointer}
.navbtn:hover{color:#fff;background:#2a3a41}
.navbtn.active{color:#fff;background:var(--primary)}
.equivview{max-width:1500px;margin:1rem auto;padding:0 1rem}
.eq-head{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:.8rem}
.eq-head h2{margin:0 0 .2rem}
.eq-tools{display:flex;gap:.6rem;align-items:center}
.eq-search{padding:.5rem .7rem;border:1px solid var(--line);border-radius:8px;font-size:.85rem;width:16rem}
.eq-tablewrap{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:auto;max-height:calc(100vh - 190px)}
.eqtable{width:100%;border-collapse:collapse;font-size:.8rem}
.eqtable thead th{position:sticky;top:0;background:#f1efe9;text-align:left;padding:.5rem .5rem;border-bottom:2px solid var(--line);white-space:nowrap;z-index:1}
.eqtable td{padding:.25rem .4rem;border-bottom:1px solid var(--line)}
.eqtable tbody tr:hover{background:var(--soft)}
.eqtable input,.eqtable select{border:1px solid transparent;background:transparent;padding:.25rem .3rem;border-radius:5px;font-size:.8rem;font-family:inherit}
.eqtable input[type=checkbox]{width:1.05rem;height:1.05rem;accent-color:var(--primary);cursor:pointer}
.eqtable input:focus,.eqtable select:focus{border-color:var(--primary);background:#fff;outline:none}
.eqtable input:hover,.eqtable select:hover{border-color:var(--line)}
.eq-actions{white-space:nowrap;display:flex;gap:.3rem}
.eq-new{background:#eef1ea}
.eq-new td{border-bottom:1px solid #c3cbbe}

/* ---- Calendario de días ---- */
.cal-nav{display:flex;align-items:center;justify-content:center;gap:.6rem;margin:.1rem 0 .4rem}
.cal-label{font-weight:700;font-size:.8rem;min-width:7rem;text-align:center}
.cal-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem;margin-bottom:.2rem}
.cal-weekdays span{text-align:center;font-size:.6rem;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.02em}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem}
.cal-day{position:relative;aspect-ratio:1/1;border-radius:7px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;font-size:.68rem;background:transparent;border:1px solid transparent}
.cal-day.empty{background:transparent}
.cal-day.nodata-future{color:#dedad2;cursor:default}
.cal-day.nodata-past{cursor:pointer;color:var(--muted);border:1px dashed var(--line);transition:.12s}
.cal-day.nodata-past:hover{border-color:var(--primary);background:var(--soft)}
.cal-day.has-data{cursor:pointer;background:var(--soft);border-color:var(--line);transition:.12s}
.cal-day.has-data:hover{border-color:var(--primary);box-shadow:0 1px 4px rgba(73,103,122,.18)}
.cal-day.sel{border-color:var(--primary);background:#e8eef0;box-shadow:0 0 0 1px var(--primary) inset}
.cal-day.cd-ok{border-left:3px solid var(--ok)}
.cal-day.cd-err{border-left:3px solid var(--err)}
.cal-day.cd-pending{border-left:3px solid var(--warn)}
.cal-num{font-weight:700;font-size:.75rem}
.cal-sub{font-size:.56rem;color:var(--muted)}
.cal-badge{position:absolute;top:1px;right:2px;background:var(--err);color:#fff;font-size:.5rem;font-weight:700;border-radius:999px;padding:0 .3rem;line-height:1.25}
.cal-legend{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:.5rem;font-size:.68rem;color:var(--muted)}
.cal-legend span{display:inline-flex;align-items:center;gap:.3rem}
.cal-legend i{width:.5rem;height:.5rem;border-radius:2px;display:inline-block}

/* ---- Conciliador de Ingresos ---- */
.conc-tabs{display:flex;gap:.4rem;margin-bottom:1rem}
.conc-tab{background:var(--soft);color:var(--muted);font-size:.85rem;font-weight:700;padding:.55rem 1.1rem;border-radius:8px 8px 0 0;border:1px solid var(--line);border-bottom:none}
.conc-tab.active{background:var(--panel);color:var(--primary);box-shadow:0 -1px 0 var(--primary) inset}
.conc-panel{display:none;background:var(--panel);border:1px solid var(--line);border-radius:0 10px 10px 10px;padding:1.2rem;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.conc-panel.active{display:block}
.conc-files{display:flex;flex-direction:column;gap:.6rem;margin-bottom:.4rem}
.conc-file{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--soft);transition:.15s}
.conc-file.loaded{border-color:var(--ok);box-shadow:0 1px 6px rgba(95,109,95,.15)}
.conc-file-top{display:flex;align-items:center;gap:.7rem;padding:.6rem .9rem;cursor:pointer;position:relative}
.conc-file-top input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.conc-file-icon{width:2rem;height:2rem;border-radius:8px;background:var(--panel);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:1rem;flex:none}
.conc-file.loaded .conc-file-icon{border-color:var(--ok);background:#e6ebe3}
.conc-file-txt{flex:1;min-width:0}
.conc-file-txt .t{font-weight:700;font-size:.85rem}
.conc-file-txt .s{font-size:.72rem;color:var(--muted);margin-top:.1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conc-file-pill{font-size:.7rem;font-weight:700;padding:.2rem .55rem;border-radius:999px;background:var(--line);color:var(--muted);flex:none;white-space:nowrap}
.conc-file.loaded .conc-file-pill{background:#e6ebe3;color:var(--ok)}
.conc-run{margin-top:.6rem}
.conc-result{margin-top:1rem}
.conc-stats{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:.8rem}
.conc-sheetnav{display:flex;gap:.25rem;flex-wrap:wrap;margin-bottom:.5rem}
.conc-sheettab{font-size:.78rem;font-weight:700;color:var(--muted);background:var(--soft);border:1px solid var(--line);padding:.35rem .7rem;border-radius:7px 7px 0 0}
.conc-sheettab.active{color:var(--primary);background:var(--panel);box-shadow:0 -1px 0 var(--primary) inset}
.conc-sheetpane{display:none}
.conc-sheetpane.active{display:block}
.conc-info{margin-top:.8rem;padding:.6rem .8rem;background:var(--soft);border:1px solid var(--line);border-radius:8px;font-size:.75rem;color:var(--muted);line-height:1.7}
.lines tr.row-ok td{background:#e6ebe3}
.lines tr.row-warn td{background:#faf3e0}
.lines tr.row-err td{background:#f7e9e7}

/* documentos descartados */
.doclist tr.descartado td:not(.doc-accion){opacity:.45;text-decoration:line-through}
.doc-accion{white-space:nowrap}
.doc-accion .btn-sm{padding:.2rem .5rem;font-size:.72rem}
