:root{
  --bg:#eef1f4; --surface:#ffffff; --surface-2:#f5f7f9;
  --ink:#16212c; --muted:#5c6773; --faint:#8b97a3;
  --line:#dde3e9; --line-2:#e9edf1;
  --brand:#153d49; --brand-ink:#153d49; --brand-tint:#e7eef1;
  --brand-2:#527988; --brand-wave:#86aabc;
  --verde:#177a4e; --verde-bg:#e3f2ea; --verde-line:#bfe0cd;
  --amarillo:#a7710f; --amarillo-bg:#faf0d6; --amarillo-line:#ecd8a3;
  --rojo:#bb3b2b; --rojo-bg:#f9e4e0; --rojo-line:#eec2ba;
  --shadow:0 1px 2px rgba(20,32,43,.05), 0 10px 30px -14px rgba(20,32,43,.18);
  --radius:12px;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Inter",system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
.mono{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-variant-numeric:tabular-nums}
h1,h2,h3{margin:0;letter-spacing:-.01em}
button{font-family:inherit;font-size:14px;cursor:pointer}
a{color:var(--brand-ink)}

/* top bar */
.top{position:sticky;top:0;z-index:20;background:var(--surface);border-bottom:1px solid var(--line);padding:14px clamp(16px,4vw,40px);display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.top .brand{font-weight:700;font-size:1.05rem;display:flex;align-items:center;gap:9px}
.top .brand .dot{width:10px;height:10px;border-radius:50%;background:var(--brand)}
.top .sub{color:var(--faint);font-size:.82rem}
.top .spacer{flex:1}
.roleswitch{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:3px}
.roleswitch button{border:0;background:transparent;color:var(--muted);padding:6px 14px;border-radius:999px;font-weight:600}
.roleswitch button.on{background:var(--brand);color:#fff}
.refbanner{font-size:.78rem;color:var(--muted);display:flex;gap:14px;flex-wrap:wrap}
.refbanner b{color:var(--ink)}
.refbanner .warn{color:var(--amarillo)}

main{max-width:1140px;margin:0 auto;padding:clamp(16px,3vw,32px)}

/* upload */
.drop{background:var(--surface);border:2px dashed var(--line);border-radius:var(--radius);padding:34px;text-align:center;transition:.15s;box-shadow:var(--shadow)}
.drop.hover{border-color:var(--brand);background:var(--brand-tint)}
.drop h2{font-size:1.1rem;margin-bottom:6px}
.drop p{color:var(--muted);margin:0 0 16px}
.drop .btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.btn{border:1px solid var(--line);background:var(--surface);color:var(--ink);padding:9px 16px;border-radius:9px;font-weight:600}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.small{padding:6px 11px;font-size:.82rem}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* summary chips */
.summary{display:flex;gap:12px;flex-wrap:wrap;margin:22px 0 16px}
.chip{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px;min-width:120px;box-shadow:var(--shadow);cursor:pointer;font-family:inherit;color:var(--ink);text-align:left;transition:transform .12s,box-shadow .12s}
.chip:hover{transform:translateY(-2px)}
.chip.active{outline:2px solid var(--brand-ink);outline-offset:1px}
.facets{display:flex;flex-direction:column;gap:8px;margin:14px 0 4px}
.facetgroup{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.facetlabel{font-size:.64rem;text-transform:uppercase;letter-spacing:.08em;color:var(--faint);font-weight:600;min-width:48px}
.facetrow{display:flex;gap:6px;flex-wrap:wrap}
.facet{border:1px solid var(--line);background:var(--surface);color:var(--muted);padding:5px 11px;border-radius:999px;font-size:.8rem;font-weight:500;cursor:pointer;font-family:inherit;transition:.12s}
.facet:hover{background:var(--surface-2);color:var(--ink)}
.facet.on{background:var(--brand-ink);color:#fff;border-color:var(--brand-ink)}
.facet .fc{opacity:.65;font-variant-numeric:tabular-nums;margin-left:3px}
.facet.on .fc{opacity:.9}

/* ===== repositorio ===== */
.repotools{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.repoinput{padding:8px 12px;border:1px solid var(--line);border-radius:9px;font-family:inherit;font-size:.88rem;background:var(--surface);color:var(--ink)}
.repoinput:focus{outline:2px solid var(--brand-ink);outline-offset:1px}
#repoSearch{min-width:260px}
.repoform{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;padding:14px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius)}
.btn.xsmall{padding:4px 9px;font-size:.76rem}
.btn.danger{color:var(--rojo);border-color:color-mix(in srgb,var(--rojo) 35%,var(--line))}
.btn.danger:hover{background:var(--rojo-bg)}
.unknownbox{background:var(--amarillo-bg);border:1px solid var(--amarillo-line);border-radius:var(--radius);padding:14px 16px;margin-bottom:18px}
.ubhead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;font-size:.9rem;color:var(--ink)}
.ublist{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto}
.ubrow{display:flex;align-items:center;gap:10px;font-size:.84rem;background:var(--surface);border:1px solid var(--line-2);border-radius:8px;padding:6px 10px}
.ubname{color:var(--muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ubcount{color:var(--faint);font-variant-numeric:tabular-nums}
.chip .n{font-size:1.7rem;font-weight:700;line-height:1}
.chip .l{font-size:.76rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-top:5px}
.chip.v{border-top:3px solid var(--verde)} .chip.v .n{color:var(--verde)}
.chip.a{border-top:3px solid var(--amarillo)} .chip.a .n{color:var(--amarillo)}
.chip.r{border-top:3px solid var(--rojo)} .chip.r .n{color:var(--rojo)}
.chip.pend{border-top:3px solid var(--amarillo)} .chip.pend .n{color:var(--amarillo)}
.chip.sent{border-top:3px solid var(--verde)} .chip.sent .n{color:var(--verde)}

.tabs{display:flex;gap:8px;margin:6px 0 14px;flex-wrap:wrap}
.tabs button{border:1px solid var(--line);background:var(--surface);color:var(--muted);padding:7px 14px;border-radius:999px;font-weight:600}
.tabs button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.toolbar .who{color:var(--faint);font-size:.82rem}

/* table */
.tablewrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}
.scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;min-width:720px}
th,td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line-2)}
thead th{font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);background:var(--surface-2);font-weight:600;position:sticky;top:0}
/* --- cabeceras ordenables --- */
thead th.sortable{cursor:pointer;user-select:none;white-space:nowrap;transition:color .12s,background .12s}
thead th.sortable:hover{color:var(--muted);background:var(--line-2)}
thead th.sortable .sortind{display:inline-block;width:.85em;margin-left:.3em;opacity:0;transition:opacity .12s;font-size:.9em}
thead th.sortable:hover .sortind{opacity:.4}
thead th.sortable.sorted{color:var(--ink)}
thead th.sortable.sorted .sortind{opacity:1}
tbody tr{cursor:pointer}
tbody tr:hover{background:var(--surface-2)}
tbody tr:last-child td{border-bottom:0}
.st{display:inline-flex;align-items:center;gap:7px;font-weight:600;font-size:.74rem;padding:4px 10px;border-radius:999px;white-space:nowrap;text-transform:uppercase;letter-spacing:.03em}
.st .d{width:8px;height:8px;border-radius:50%}
.st.verde{color:var(--verde);background:var(--verde-bg)} .st.verde .d{background:var(--verde)}
.st.amarillo{color:var(--amarillo);background:var(--amarillo-bg)} .st.amarillo .d{background:var(--amarillo)}
.st.rojo{color:var(--rojo);background:var(--rojo-bg)} .st.rojo .d{background:var(--rojo)}
.badge{font-size:.68rem;padding:2px 7px;border-radius:6px;background:var(--surface-2);border:1px solid var(--line);color:var(--muted)}
.badge.edit{color:var(--brand-ink);border-color:var(--brand);background:var(--brand-tint)}
.alertn{font-weight:700}
.empty{padding:40px;text-align:center;color:var(--faint)}

/* drawer */
.drawer-bg{position:fixed;inset:0;background:rgba(16,24,32,.4);opacity:0;pointer-events:none;transition:.15s;z-index:40}
.drawer-bg.open{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;height:100%;width:min(560px,94vw);background:var(--surface);box-shadow:-14px 0 40px -20px rgba(0,0,0,.4);transform:translateX(100%);transition:.2s;z-index:50;display:flex;flex-direction:column}
.drawer.open{transform:none}
.drawer header{padding:18px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px}
.drawer header .x{margin-left:auto;border:0;background:var(--surface-2);width:30px;height:30px;border-radius:8px;font-size:1.1rem;color:var(--muted)}
.drawer .body{padding:20px 22px;overflow-y:auto;flex:1}
.sec{margin-bottom:22px}
.sec h3{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--faint);margin-bottom:10px}
/* historial del panel: una entrada por edición, la más antigua arriba */
.histrow{font-size:.8rem;color:var(--muted);padding:6px 0;border-bottom:1px solid var(--line-2)}
.histrow:last-child{border-bottom:0}
.histwhen{display:block;color:var(--faint);font-size:.72rem;margin-bottom:2px}
.kv{display:grid;grid-template-columns:130px 1fr;gap:6px 12px;font-size:.86rem}
.kv dt{color:var(--muted)} .kv dd{margin:0}
.flags{display:flex;flex-direction:column;gap:8px}
.flag{border:1px solid;border-radius:9px;padding:9px 12px;font-size:.85rem;overflow-wrap:anywhere}
.flag.rojo{border-color:var(--rojo-line);background:var(--rojo-bg)}
.flag.amarillo{border-color:var(--amarillo-line);background:var(--amarillo-bg)}
.flag .fh{font-weight:700;font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}
.flag.rojo .fh{color:var(--rojo)} .flag.amarillo .fh{color:var(--amarillo)}
.editgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.field{display:flex;flex-direction:column;gap:4px}
.field label{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--faint)}
.field input,.field select{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-family:inherit;font-size:.86rem;background:var(--surface)}
.drawer footer{padding:14px 22px;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center;flex-wrap:wrap}
/* acciones del panel: las decide la etapa, asi que el numero varia */
.dactions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dactions select{border:1px solid var(--line);background:var(--surface);color:var(--ink);
  padding:8px 10px;border-radius:9px;font-family:inherit;font-size:.85rem}
/* aviso de solo lectura dentro del panel */
.lockbox{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 14px;font-size:.82rem;color:var(--muted)}
.lockbox b{color:var(--ink)}

/* ===== COTEJO: la orden enfrentada a su confirmación ===== */
.conffrm{border:1px solid var(--line);border-radius:var(--radius);padding:14px;background:var(--surface-2)}
.confdoc{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:10px 0}
/* eco del archivo elegido en la confirmación (el input va oculto) */
.conffile{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:.82rem}
.conffile .attname{flex:1;min-width:0;overflow-wrap:anywhere}
.confact{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px}
.confact .hint{flex:1;min-width:160px}
.confhead{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.confres{border-radius:9px;padding:8px 11px;font-size:.82rem;margin-bottom:10px}
.confres.cotejada{background:var(--verde-bg);border:1px solid var(--verde-line)}
.confres.excepcion{background:var(--rojo-bg);border:1px solid var(--rojo-line)}
.confdocs{margin:10px 0}
.confmore{margin-top:14px}
.confmore summary{cursor:pointer;font-size:.8rem;color:var(--muted);padding:4px 0}

/* conflicto de edición: los dos cambios a la vista, decide una persona */
.conflictbox{background:var(--amarillo-bg);border:1px solid var(--amarillo-line);
  border-radius:var(--radius);padding:12px 14px;margin-bottom:14px;font-size:.83rem}
.conflictbox b{display:block;margin-bottom:2px}
.conflictlist{margin:8px 0 0;padding-left:18px}
.conflictlist li{margin:3px 0;font-size:.8rem}

/* tareas de Mesa posteriores a la ejecución (flujograma de la mesa) */
.tasklist{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.taskrow{display:flex;gap:10px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--line-2)}
.taskrow:last-child{border-bottom:0}
.taskrow.done{background:var(--verde-bg)}
.taskmark{width:18px;text-align:center;font-weight:700;color:var(--faint)}
.taskrow.done .taskmark{color:var(--verde)}
.taskrow > div{flex:1;min-width:0}
.taskl{font-size:.85rem;font-weight:600}
.taskh{font-size:.74rem;color:var(--muted)}

/* tabla de comparación: una fila por campo, con el veredicto a la derecha */
table.cmp{width:100%;border-collapse:collapse;font-size:.8rem}
table.cmp th{text-align:left;font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--faint);font-weight:600;padding:4px 6px;border-bottom:1px solid var(--line)}
table.cmp td{padding:5px 6px;border-bottom:1px solid var(--line-2);vertical-align:top}
table.cmp tr.bad td{background:var(--rojo-bg)}
table.cmp .cmpv{text-align:center;width:24px;font-weight:700}
table.cmp tr.ok .cmpv{color:var(--verde)}
table.cmp tr.bad .cmpv{color:var(--rojo)}
table.cmp tr.info .cmpv{color:var(--faint)}
table.cmp tr.cmpnote td{font-size:.74rem;color:var(--muted);border-bottom:1px solid var(--line-2);padding-top:0}
table.cmp tr.cmpnote.bad td{background:var(--rojo-bg)}
.drawer footer .hint{color:var(--faint);font-size:.78rem}

/* toast */
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:11px 18px;border-radius:10px;opacity:0;transition:.2s;z-index:60;font-size:.88rem}
.toast.show{opacity:1;transform:translateX(-50%)}
.toast.err{background:var(--rojo)}
.hidden{display:none!important}

@media (max-width:560px){ .editgrid{grid-template-columns:1fr} .kv{grid-template-columns:110px 1fr} }

/* ===== APP SHELL (plataforma) ===== */
.app{display:flex;min-height:100vh}
.sidebar{width:246px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{padding:24px 22px 18px;border-bottom:1px solid var(--line-2)}
.brand .logo{height:56px;width:auto;max-width:100%;display:block}
.brandfallback{display:none;align-items:center;gap:9px;font-weight:700;font-size:1.1rem}
.brandfallback .dot{width:11px;height:11px;border-radius:50%;background:var(--brand)}
.brandsub{color:var(--faint);font-size:.72rem;margin-top:11px;letter-spacing:.02em}
.nav{padding:14px 10px;flex:1;overflow-y:auto}
.navlabel{font-size:.64rem;text-transform:uppercase;letter-spacing:.09em;color:var(--faint);padding:0 8px 8px}
.navitem{display:flex;align-items:center;gap:8px;padding:9px 12px;border-radius:9px;color:var(--muted);font-weight:500;text-decoration:none;cursor:pointer;font-size:.9rem;margin-bottom:2px}
.navitem.active{background:var(--brand-tint);color:var(--brand-ink);font-weight:600}
.navitem.soon{color:var(--faint);cursor:default}
.navitem:hover:not(.active):not(.soon){background:var(--surface-2)}
.soonb{margin-left:auto;font-size:.58rem;padding:2px 7px;border-radius:6px;background:var(--surface-2);border:1px solid var(--line);color:var(--faint);white-space:nowrap}
.sidefoot{padding:16px 14px;border-top:1px solid var(--line-2)}
.rolelabel{font-size:.64rem;text-transform:uppercase;letter-spacing:.09em;color:var(--faint);margin-bottom:8px}
.content{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:20;background:var(--surface);border-bottom:1px solid var(--line);padding:13px clamp(16px,3vw,32px);display:flex;align-items:center;gap:16px}
.topbar .modtitle h1{font-size:1.12rem}
.topbar .modtitle span{display:block;color:var(--faint);font-size:.78rem;margin-top:2px}
.topbar .spacer{flex:1}
.hamb{display:none;border:1px solid var(--line);background:var(--surface);border-radius:8px;width:36px;height:34px;font-size:1rem;color:var(--muted)}
.content main{max-width:1180px;margin:0;padding:clamp(16px,3vw,32px);width:100%}

@media (max-width:860px){
  .sidebar{position:fixed;left:0;top:0;z-index:60;transform:translateX(-100%);transition:.2s;box-shadow:14px 0 40px -20px rgba(0,0,0,.4)}
  .sidebar.open{transform:none}
  .hamb{display:inline-block}
}

/* ===== secciones / módulos ===== */
.navitem .livedot{margin-left:auto;width:8px;height:8px;border-radius:50%;background:var(--verde)}
.navitem.active .livedot{background:var(--brand-ink)}
.rolefoot{font-weight:600;font-size:.9rem;color:var(--ink)}
.crumb{font-size:.74rem;color:var(--faint);margin-bottom:3px}
.crumb a{color:var(--brand-ink);cursor:pointer;text-decoration:none;font-weight:600}
.crumb a:hover{text-decoration:underline}
.modulebar{display:flex;align-items:center;margin-bottom:18px}
.modgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.modcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:8px;min-height:112px}
.modcard.live{cursor:pointer;border-color:color-mix(in srgb,var(--brand) 35%,var(--line))}
.modcard.live:hover{transform:translateY(-2px);box-shadow:0 2px 4px rgba(20,32,43,.06),0 16px 34px -16px rgba(20,32,43,.28);transition:.15s}
.modcard .mstate{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 9px;border-radius:999px;align-self:flex-start}
.modcard .mstate.live{color:var(--verde);background:var(--verde-bg)}
.modcard .mstate.soon{color:var(--faint);background:var(--surface-2);border:1px solid var(--line)}
.modcard .mt{font-weight:600;font-size:.98rem;line-height:1.3}
.modcard .mgo{margin-top:auto;font-size:.82rem;color:var(--brand-ink);font-weight:600}
.modcard.soon .mgo{color:var(--faint);font-weight:500}
.roadmap{background:var(--surface);border:1px dashed var(--line);border-radius:var(--radius);padding:44px 34px;text-align:center;box-shadow:var(--shadow)}
.roadmap .rmk{font-family:inherit;font-size:.66rem;text-transform:uppercase;letter-spacing:.1em;color:var(--brand-ink);font-weight:700;margin-bottom:8px}
.roadmap h3{font-size:1.2rem;margin-bottom:8px}
.roadmap p{color:var(--muted);margin:0;max-width:52ch;margin-inline:auto}

/* ===== menú: departamentos (header) + módulos (navegables) ===== */
.navgroup{margin-bottom:14px}
.navhdr{font-size:.64rem;text-transform:uppercase;letter-spacing:.1em;color:var(--faint);font-weight:600;padding:0 12px 7px}
.navmod{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;color:var(--muted);font-weight:500;font-size:.9rem;text-decoration:none;cursor:pointer;margin-bottom:1px}
.navmod:hover{background:var(--surface-2);color:var(--ink)}
.navmod.active{background:var(--brand-tint);color:var(--brand-ink);font-weight:600}
.navmod.soon{color:var(--faint)}
.navmod .livedot{margin-left:auto;width:8px;height:8px;border-radius:50%;background:var(--verde)}
.navempty{padding:6px 12px;font-size:.82rem;color:var(--faint);font-style:italic}

.eyebrow-dept{font-size:.66rem;text-transform:uppercase;letter-spacing:.1em;color:var(--brand-ink);font-weight:700;margin-bottom:4px}

/* ===== chip de usuario/rol (placeholder de permisos) ===== */
.userchip{display:flex;align-items:center;gap:10px}
.uavatar{width:34px;height:34px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem;flex-shrink:0}
.umeta .uname{font-weight:600;font-size:.9rem;line-height:1.1}
.umeta .urole{font-size:.7rem;color:var(--faint)}

/* ===== intake + cola (pipeline) ===== */
.intakebar{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 16px;margin-bottom:16px;box-shadow:var(--shadow)}
.intakeinfo{font-weight:600;color:var(--muted);font-size:.86rem}

/* intake: drop zone */
.dropzone{display:flex;align-items:center;gap:16px;background:var(--surface);border:2px dashed var(--line);border-radius:var(--radius);padding:20px 24px;box-shadow:var(--shadow);margin-bottom:18px;transition:.15s}
.dropzone.dragging{border-color:var(--brand);background:var(--brand-tint)}
.dzicon{width:44px;height:44px;border-radius:12px;background:var(--brand-tint);color:var(--brand-ink);display:flex;align-items:center;justify-content:center;font-size:1.3rem;flex-shrink:0}
.dztext{font-size:.95rem;color:var(--ink)}
.dztext .dzsub{font-size:.78rem;color:var(--faint);margin-top:3px}
.btnlink{border:0;background:transparent;color:var(--brand-ink);font-weight:600;cursor:pointer;font-family:inherit;font-size:inherit;text-decoration:underline;padding:0}

/* intake: previsualización staged */
.preview{background:var(--surface);border:1px solid color-mix(in srgb,var(--brand) 45%,var(--line));border-radius:var(--radius);padding:18px 20px 20px;box-shadow:0 2px 4px rgba(20,32,43,.06),0 16px 40px -18px rgba(20,32,43,.3);margin-bottom:20px}
.previewhead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.pvtitle{font-size:1rem}
.pvimpact{color:var(--muted);font-size:.85rem}
.pvactions{margin-left:auto;display:flex;gap:8px}
.qbar{margin-bottom:8px}
.dropinline{background:var(--surface);border:2px dashed var(--line);border-radius:var(--radius);padding:44px 34px;text-align:center;box-shadow:var(--shadow)}
.dropinline h2{font-size:1.1rem;margin-bottom:6px}
.dropinline p{color:var(--muted);margin:0;max-width:60ch;margin-inline:auto}
#view-validacion.dragging .dropinline,#view-validacion.dragging .tablewrap{outline:2px dashed var(--brand);outline-offset:3px}

.handoff{display:flex;flex-wrap:wrap;gap:10px 22px;margin-bottom:14px}
.ho{display:flex;align-items:center;gap:9px;font-size:.9rem;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:8px 16px;box-shadow:var(--shadow)}
.ho b{color:var(--ink);font-size:1rem;margin:0 2px}
.ho em{color:var(--faint);font-style:normal;font-size:.82rem}
.ho .dot{width:9px;height:9px;border-radius:50%}
.ho.pend .dot{background:var(--amarillo)}
.ho.sent .dot{background:var(--verde)}

/* stepper por fila */
.stepper{display:inline-flex;align-items:center;gap:0}
.stp{width:9px;height:9px;border-radius:50%;background:var(--line);flex-shrink:0}
.stp.done{background:var(--verde)}
.stp.now{background:var(--brand-ink);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 22%,transparent)}
.stp.todo{background:var(--line)}
.stpline{width:14px;height:2px;background:var(--line)}

/* timeline en el drawer */
.tl{display:flex;flex-direction:column}
.tlrow{display:flex;gap:12px;padding:10px 0;position:relative}
.tlrow:not(:last-child)::before{content:"";position:absolute;left:5px;top:20px;bottom:-6px;width:2px;background:var(--line-2)}
.tldot{width:12px;height:12px;border-radius:50%;background:var(--line);margin-top:3px;flex-shrink:0;z-index:1}
.tlrow.verde .tldot,.tlrow.done .tldot{background:var(--verde)}
.tlrow.amarillo .tldot{background:var(--amarillo)}
.tlrow.rojo .tldot{background:var(--rojo)}
.tlrow.now .tldot{background:var(--brand-ink);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 20%,transparent)}
.tlrow.todo .tldot{background:var(--line)}
.tlh{font-weight:600;font-size:.9rem}
.tlo{font-weight:500;font-size:.66rem;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);margin-left:6px}
.tls{font-size:.82rem;color:var(--muted);text-transform:capitalize}

/* paginación — la tabla ya solo pinta una página, no la cola entera */
.pager{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:12px}
.pager .pginfo{color:var(--muted);font-size:.82rem;font-variant-numeric:tabular-nums}
.pager .btn[disabled]{opacity:.4;cursor:not-allowed}

/* ===== Formulario de ingreso de órdenes ===== */
.formwrap{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:22px;align-items:start}
@media (max-width:980px){.formwrap{grid-template-columns:1fr}}

.fsec{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
      padding:18px 20px;margin-bottom:16px;box-shadow:var(--shadow)}
.fsec > h3{font-size:.82rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:14px}
.fsec.locked{opacity:.5}
.fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px}
.fld{display:flex;flex-direction:column;gap:5px;min-width:0}
.fld.span2{grid-column:span 2}
@media (max-width:640px){.fld.span2{grid-column:span 1}}
.fld label{font-size:.78rem;font-weight:600;color:var(--muted)}
.fld label .req{color:var(--rojo);margin-left:3px}
.fld input,.fld select,.fld textarea{font:inherit;padding:9px 11px;border:1px solid var(--line);
  border-radius:9px;background:var(--surface);color:var(--ink);width:100%}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:2px solid var(--brand-2);outline-offset:-1px;border-color:var(--brand-2)}
.fld input[readonly]{background:var(--surface-2);color:var(--muted);border-style:dashed}
.fld .hint{font-size:.72rem;color:var(--faint);line-height:1.35}
.fld.bad input,.fld.bad select{border-color:var(--rojo);background:var(--rojo-bg)}
.fld.warn input,.fld.warn select{border-color:var(--amarillo);background:var(--amarillo-bg)}
.fld .derived{font-size:.72rem;color:var(--faint)}

/* cantidad + unidad como un solo control: la unidad no puede quedar vacía */
.qtypair{display:flex;gap:0}
.qtypair input{border-top-right-radius:0;border-bottom-right-radius:0;flex:1}
.qtypair select{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;width:auto;min-width:118px;background:var(--surface-2)}

/* typeahead */
.ta{position:relative}
.talist{position:absolute;z-index:30;top:100%;left:0;right:0;background:var(--surface);
  border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);margin-top:4px;
  max-height:270px;overflow:auto}
.taitem{padding:9px 12px;cursor:pointer;display:flex;gap:9px;align-items:baseline;border-bottom:1px solid var(--line-2)}
.taitem:last-child{border-bottom:0}
.taitem:hover,.taitem.on{background:var(--brand-tint)}
.taitem .k{font-family:ui-monospace,Menlo,monospace;font-weight:600;font-size:.82rem}
.taitem .n{color:var(--muted);font-size:.8rem;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.taitem .m{color:var(--faint);font-size:.72rem}
.tanone{padding:11px 12px;color:var(--muted);font-size:.82rem}

/* panel lateral del semáforo */
/* El panel se pega POR DEBAJO de la cabecera, no detrás. La cabecera es sticky
   con z-index 20 y su altura cambia según cuánto ocupe el subtítulo (una o dos
   líneas), así que la mide app.js y la publica en --topbar-h; el 64px es solo
   el respaldo por si el JS no ha corrido todavía. */
.formside{position:sticky;top:calc(var(--topbar-h, 64px) + 16px)}
.sidecard{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px;box-shadow:var(--shadow)}
.sidehead{margin-bottom:12px}
.echo{background:var(--surface-2);border:1px solid var(--line-2);border-radius:9px;padding:11px 12px;margin-bottom:12px}
.echo .big{font-size:1.18rem;font-weight:700;font-variant-numeric:tabular-nums}
.echo .sub{font-size:.74rem;color:var(--faint);margin-top:2px}
.echo.empty{color:var(--faint);font-size:.8rem}
.sideflags{display:flex;flex-direction:column;gap:8px}
.sideflags .flag{font-size:.79rem;padding:9px 11px;border-radius:9px;border:1px solid var(--line);line-height:1.4}
.sideflags .flag.rojo{border-color:var(--rojo-line);background:var(--rojo-bg)}
.sideflags .flag.amarillo{border-color:var(--amarillo-line);background:var(--amarillo-bg)}
.sideflags .flag .fw{display:block;font-weight:700;font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px}
.sideflags .ok{font-size:.82rem;color:var(--verde);background:var(--verde-bg);border:1px solid var(--verde-line);padding:9px 11px;border-radius:9px}
.justify{margin-top:12px}
.justify label{font-size:.76rem;font-weight:600;color:var(--muted);display:block;margin-bottom:5px}
.justify textarea{width:100%;font:inherit;padding:9px 11px;border:1px solid var(--amarillo-line);border-radius:9px;background:var(--amarillo-bg)}
.formfoot{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}
.newsec{margin-top:8px;padding:11px 12px;border:1px dashed var(--line);border-radius:9px;background:var(--surface-2);font-size:.8rem}
.newsec b{display:block;margin-bottom:4px}

/* comprobantes */
.dropcomp{border:2px dashed var(--line);border-radius:10px;padding:16px;text-align:center;
  display:flex;gap:10px;align-items:center;justify-content:center;flex-wrap:wrap;transition:.15s}
.dropcomp.dragging{border-color:var(--brand);background:var(--brand-tint)}
.dropcomp.compact{padding:9px}
.attgrid{margin-top:11px;display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:11px}
.attcard{margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}
.attcard .thumb{display:block;width:100%;height:190px;object-fit:cover;object-position:top;background:var(--surface-2)}
.attcard .thumb.doc{display:flex;align-items:center;justify-content:center;color:var(--muted);
/* miniatura de un documento de TEXTO: se enseñan las primeras líneas, porque
   los tickets de MarketAxess y los VCON son texto y ahí viene lo que importa */
.thumb.txt{position:relative;overflow:hidden;background:var(--surface)}
.thumb.txt .doclbl{font-size:.6rem;color:var(--faint);padding:6px}
.thumb.txt .txtprev{margin:0;padding:6px 7px;font-size:.42rem;line-height:1.35;white-space:pre-wrap;
  word-break:break-word;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.thumb.txt::after{content:'';position:absolute;left:0;right:0;bottom:0;height:26px;
  background:linear-gradient(to bottom,transparent,var(--surface))}
  font-weight:700;font-size:.82rem;letter-spacing:.05em}
.attcard figcaption{display:flex;align-items:center;gap:7px;padding:7px 9px;border-top:1px solid var(--line-2);font-size:.72rem}
.attname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.attmeta{color:var(--faint)}
.linkbtn{border:0;background:none;color:var(--rojo);font-size:.72rem;padding:0;cursor:pointer}
.linkbtn:hover{text-decoration:underline}
.attactions{margin-top:10px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}

/* procedencia: lo propuesto por la IA se ve distinto de lo tecleado */
.doctag{margin-left:7px;font-size:.64rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  color:var(--brand-2);background:var(--brand-tint);border-radius:4px;padding:1px 5px;vertical-align:middle}
.fld.fromdoc input,.fld.fromdoc select{box-shadow:inset 3px 0 0 var(--brand-wave)}

/* Un identificador largo sin espacios (o un nombre pegado sin separadores) no
   tiene dónde partirse y se salía de la tarjeta: overflow-wrap lo corta donde
   haga falta en vez de desbordar el panel. */
.exbox{background:var(--brand-tint);border:1px solid var(--brand-wave);border-radius:9px;padding:11px 12px;margin-bottom:12px;overflow-wrap:anywhere}
.exhead{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--brand);margin-bottom:5px}
.exhead .conf{float:right;text-transform:none;letter-spacing:0}
.exhead .conf.alta{color:var(--verde)} .exhead .conf.media{color:var(--amarillo)} .exhead .conf.baja{color:var(--rojo)}
.exsum{font-size:.82rem;line-height:1.4}
.exwarn{margin-top:7px;font-size:.78rem;color:var(--amarillo);overflow-wrap:anywhere}
.exav{margin:7px 0 0;padding-left:16px;font-size:.75rem;color:var(--muted);line-height:1.4;overflow-wrap:anywhere}
.exav li{margin-bottom:3px}
.excands{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.cand{border:1px solid var(--brand-wave);background:var(--surface);border-radius:7px;padding:4px 8px;max-width:100%;overflow-wrap:anywhere;text-align:left;
  font-size:.72rem;font-family:ui-monospace,Menlo,monospace;cursor:pointer;text-align:left}
.cand:hover{background:var(--brand-tint)}
.cand span{font-family:inherit;color:var(--faint);margin-left:5px}

/* El comprobante dentro del drawer ocupa el ancho: es la prueba de la orden y
   hay que poder leerla sin abrir otra pestaña. Con dos o más, se reparten. */
.drawer .attgrid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:9px}
.drawer .attcard .thumb{height:230px}
.drawer .exbox{font-size:.8rem}
#confRows tr{cursor:pointer}

/* devoluciones */
.devbadge{margin-left:auto;font-size:.78rem;color:var(--amarillo);font-weight:600}
.devbox{background:var(--amarillo-bg);border:1px solid var(--amarillo-line);border-radius:var(--radius);
  padding:12px 14px;margin-bottom:14px;font-size:.85rem}
.devbox b{display:block;margin-bottom:3px}
.devrow{display:flex;gap:9px;align-items:baseline;padding:4px 0;border-top:1px solid var(--amarillo-line)}
.devrow:first-of-type{border-top:0}
.devrow .mono{font-weight:600}
.devnote{color:var(--muted);flex:1}
tr.devuelta td{background:var(--amarillo-bg)}
.badge.dev{background:var(--amarillo-bg);border-color:var(--amarillo-line);color:var(--amarillo)}

/* detalle de valores y cuentas */
#repoRows tr[data-id], #cuRows tr[data-num]{cursor:pointer}
.idchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.idchip{font-family:ui-monospace,Menlo,monospace;font-size:.74rem;background:var(--surface-2);
  border:1px solid var(--line);border-radius:6px;padding:3px 7px}
.idchip b{margin-left:4px;color:var(--brand)}
.subh{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;
  color:var(--faint);margin-top:12px}
.minitab{width:100%;border-collapse:collapse;margin-top:10px;font-size:.76rem}
.minitab th{text-align:left;font-size:.66rem;text-transform:uppercase;letter-spacing:.05em;
  color:var(--faint);font-weight:700;padding:4px 6px;border-bottom:1px solid var(--line)}
.minitab td{padding:5px 6px;border-bottom:1px solid var(--line-2);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:110px}
.minitab td:first-child{width:14px}
.minitab .st{padding:0;background:none;border:0}

/* comentarios de la orden: canal aditivo para todos los roles */
.cmlist{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.cmrow{border:1px solid var(--line);border-radius:9px;padding:8px 11px;background:var(--surface)}
.cmrow.just{background:var(--amarillo-bg);border-color:var(--amarillo-line)}
.cmhead{display:flex;gap:7px;align-items:center;flex-wrap:wrap;font-size:.76rem;margin-bottom:3px}
.cmtext{font-size:.84rem;white-space:pre-wrap;overflow-wrap:anywhere}
.cmform{display:flex;gap:8px;align-items:flex-end}
.cmform textarea{flex:1;border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-family:inherit;
  font-size:.85rem;resize:vertical;min-height:38px;background:var(--surface);color:var(--ink)}

/* Base · Usuarios: filas que abren su panel */
#usRows tr[data-ip], #usRows tr[data-user]{cursor:pointer}
#usRows tr[data-ip]:hover, #usRows tr[data-user]:hover{background:var(--surface-2)}
