:root {
  /* Beat · índigo corporativo sobrio (indigo.tech). Neutral slate + un solo
     acento índigo usado con mesura; sin violeta neón, glows discretos. */
  --bg:#0b0d14; --bg-2:#0f1219;
  --panel:#141823; --panel2:#1a1f2c; --line:#262c3a; --line-2:#333a4d;
  --text:#e7eaf1; --muted:#8b93a7;
  --accent:#6366f1; --accent-2:#7c83f5; --accent2:#2dd4a7;
  --warn:#e9b15a; --err:#ef6f7b; --ink:#0a0c12;
  --brand:linear-gradient(135deg,#5b62e0 0%,#7c83f5 100%);
  --glow:0 8px 24px -12px rgba(99,102,241,.35);
  --mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
}
* { box-sizing:border-box; }
/* El atributo [hidden] debe ganarle a display:flex/grid de .login/.wrap/.account */
[hidden] { display:none !important; }
body { margin:0; background:var(--bg); color:var(--text);
  font:14px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif; }

header { padding:16px 24px; border-bottom:1px solid var(--line);
  display:flex; align-items:center; gap:12px; }
header .brand { width:26px; height:26px; border-radius:6px; display:block; align-self:center; }
header h1 { font-size:17px; margin:0; font-weight:600; letter-spacing:.2px; align-self:center; }
header .sub { color:var(--muted); font-size:12px; }
.account { margin-left:auto; display:flex; align-items:center; gap:10px; }
.account #who { color:var(--muted); font-size:13px; }
/* CTA único de la barra: la acción principal del modo (Transpilar / Generar). */
.cta { padding:8px 16px; }
.cta:disabled { opacity:.5; cursor:not-allowed; }

/* login gate */
.login { min-height:calc(100vh - 58px); display:flex; align-items:center; justify-content:center; }
.logincard { background:var(--panel); border:1px solid var(--line); border-radius:16px;
  padding:38px 40px; text-align:center; max-width:360px; }
.logincard .logo { width:64px; height:64px; border-radius:14px; margin:0 auto 12px; display:block; }
.logincard h2 { margin:0 0 6px; font-size:18px; }
.logincard p { color:var(--muted); font-size:13px; margin:0 0 20px; }
.logincard .loginhint { color:var(--err); margin-top:14px; }

/* app layout */
.wrap { display:grid; grid-template-columns:380px 1fr; height:calc(100vh - 58px); }
.panel { padding:18px 22px; border-right:1px solid var(--line); overflow:auto; }
.out { padding:20px 24px; overflow:auto; }

label { display:block; font-size:11px; text-transform:uppercase; letter-spacing:.6px;
  color:var(--muted); margin:16px 0 6px; }
select, input, textarea { width:100%; background:var(--panel2); color:var(--text);
  border:1px solid var(--line); border-radius:8px; padding:9px 11px; font-size:13px; font-family:inherit; }
select:focus, input:focus, textarea:focus { outline:none; border-color:var(--accent); }
textarea { font-family:var(--mono); font-size:12px; resize:vertical; }
.labelrow { display:flex; align-items:center; gap:10px; }
.labelrow label { flex:1; margin-bottom:6px; }
.labelrow button { margin:10px 0 6px; }
.ptrow { display:flex; gap:8px; }
.ptrow > * { flex:1; }

/* mode toggle (Transpilador / API Creator) */
.modes { display:flex; gap:0; border:1px solid var(--line); border-radius:8px;
  overflow:hidden; margin-bottom:6px; }
.modes .mode { flex:1; background:var(--panel2); color:var(--muted); border:none;
  border-radius:0; padding:9px 10px; font-size:12px; font-weight:600; }
.modes .mode.active { background:var(--accent); color:var(--ink); }
#modeHint { margin-bottom:4px; }
.fixedrow { display:flex; align-items:center; gap:8px; }
.fixedrow .chip { flex:1; text-align:center; background:var(--panel2);
  border:1px solid var(--line); border-radius:8px; padding:9px 11px;
  font-size:13px; color:var(--text); }
.fixedrow .arrow { flex:0 0 auto; color:var(--accent); font-weight:700; }
.fablink { display:inline-block; background:var(--warn); color:var(--ink); font-weight:600;
  font-size:13px; padding:9px 14px; border-radius:8px; text-decoration:none; }
.fablink:hover { filter:brightness(1.08); }

/* combobox con buscador */
.combo { position:relative; flex:1; }
.combo-input { width:100%; background:var(--panel2); color:var(--text);
  border:1px solid var(--line); border-radius:8px; padding:9px 11px; font-size:13px; }
.combo-input:focus { outline:none; border-color:var(--accent); }
.combo-list { position:absolute; z-index:20; top:calc(100% + 4px); left:0; right:auto;
  min-width:100%; width:max-content; max-width:min(560px, 92vw);
  max-height:240px; overflow:auto; background:var(--panel2); border:1px solid var(--accent);
  border-radius:8px; box-shadow:0 8px 24px rgba(0,0,0,.45); padding:4px; }
.combo-opt { padding:8px 10px; border-radius:6px; cursor:pointer; font-size:13px;
  white-space:nowrap; }
.combo-opt:hover { background:#241f47; }
.combo-opt.sel { color:var(--accent); }
.combo-empty { padding:8px 10px; color:var(--muted); font-size:12px; }
.ck { display:flex; align-items:center; gap:7px; margin:0; font-size:13px;
  text-transform:none; letter-spacing:normal; color:var(--text); cursor:pointer; white-space:nowrap; }
.ck input { width:auto; cursor:pointer; }

button { cursor:pointer; border:none; border-radius:8px; padding:11px 14px;
  font-size:13px; font-weight:600; color:var(--ink); background:var(--accent); }
button.primary { width:100%; }
button.ghost { background:var(--panel2); color:var(--text); border:1px solid var(--line); }
button.ship { background:var(--warn); }
button.small { padding:6px 12px; font-size:12px; }
button:disabled { opacity:.5; cursor:not-allowed; }
.row { display:flex; gap:8px; margin-top:18px; }
.row button { flex:1; }
.hint { color:var(--muted); font-size:11px; margin-top:6px; }

/* m3 preview: el DDL editable antes de shipear a Fabric */
.ddl-preview { margin-top:14px; }
.ddl-head { color:var(--muted); font-size:11px; margin-bottom:6px; }
.ddl-edit { min-height:280px; line-height:1.45; }
.ddl-preview .cta { margin-top:10px; width:100%; }

/* output / cells */
.empty { color:var(--muted); margin-top:40px; text-align:center; }
.toolbar { display:flex; gap:8px; align-items:center; margin-bottom:14px; }
.toolbar h2 { font-size:14px; margin:0; flex:1; }
.report { display:flex; gap:12px; flex-wrap:wrap; margin-bottom:14px; }
.stat { background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:7px 13px; }
.stat b { font-size:17px; display:block; }
.stat span { color:var(--muted); font-size:11px; }
.cell { border:1px solid var(--line); border-radius:10px; margin-bottom:10px; background:var(--panel); overflow:hidden; }
.cell > summary { cursor:pointer; padding:9px 14px; font-size:12px; display:flex; gap:10px;
  align-items:center; list-style:none; user-select:none; }
.cell > summary::-webkit-details-marker { display:none; }
.badge { font-size:10px; padding:2px 7px; border-radius:20px; font-weight:700;
  text-transform:uppercase; letter-spacing:.4px; }
.badge.code { background:#241f47; color:var(--accent); }
.badge.markdown { background:#15352a; color:var(--accent2); }
.cell pre { margin:0; padding:14px; border-top:1px solid var(--line);
  background:#0c111b; overflow:auto; font:12px/1.55 var(--mono); white-space:pre; }
.copy { margin-left:auto; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center;
  width:26px; height:22px; padding:0; background:transparent; color:var(--muted);
  border:1px solid var(--line); border-radius:6px; cursor:pointer; }
.copy:hover { background:#241f47; color:var(--accent); border-color:var(--accent); }
.copy.ok { color:var(--accent2); border-color:var(--accent2); }
.copy svg { width:13px; height:13px; display:block; }
.ptform { background:var(--panel); border:1px solid var(--line); border-radius:10px;
  padding:14px 16px; margin-bottom:14px; }
.ptform h3 { font-size:13px; margin:16px 0 10px; font-weight:600; color:var(--text); }
.ptform > h3:first-child { margin-top:0; }
.ptform .ptrow { margin-bottom:10px; }
.ptform .ptrow > div { display:flex; flex-direction:column; }
.ptform label { margin:0 0 4px; }
.ptchecks { display:flex; gap:20px; margin-top:8px; }
button.apply { background:var(--accent2); }
.contractbig { width:100%; min-height:calc(100vh - 190px); background:#0c111b;
  border:1px solid var(--line); border-radius:10px; padding:14px; color:var(--text);
  font:12px/1.55 var(--mono); resize:vertical; }
.contractbig:focus { outline:none; border-color:var(--accent); }
.warnlist { margin:0 0 16px; padding:0; list-style:none; }
.warnlist li { font:12px/1.5 var(--mono); padding:5px 10px; border-radius:6px;
  margin-bottom:4px; background:var(--panel); border:1px solid var(--line); border-left:3px solid var(--accent); }

/* Compiler diagnostics (severity + provenance). */
.diaglist { margin:0 0 16px; padding:0; list-style:none; }
.diaglist li { font:12px/1.5 var(--mono); padding:5px 10px; border-radius:6px;
  margin-bottom:4px; background:var(--panel); border:1px solid var(--line); border-left:3px solid var(--muted); }
.diaglist li.info { border-left-color:var(--accent); }
.diaglist li.warning { border-left-color:#e0b341; }
.diaglist li.error { border-left-color:var(--err); }
.diaglist code { color:var(--accent2); }
.diaglist .src { color:var(--muted); }
.err { color:var(--err); background:#2a1518; border:1px solid #4a2228;
  padding:12px 14px; border-radius:8px; font-family:var(--mono); font-size:12px; white-space:pre-wrap; }
/* Caveat ámbar: paridad ✓ pero con salvedad (eje de fecha distinto al original). */
.warn { color:#e0b341; background:#2a230f; border:1px solid #4a3c18;
  padding:12px 14px; border-radius:8px; font-family:var(--mono); font-size:12px;
  line-height:1.5; margin-top:6px; }
.warn code { color:var(--accent2); }

/* Módulo 3: checklist de progreso (vista / test / Excel) + tabla de validación. */
.checklist { margin:0; padding:0; list-style:none; counter-reset: step; }
.checklist li { font-size:13px; padding:10px 14px; border-radius:10px; margin-bottom:8px;
  background:var(--panel); border:1px solid var(--line); }
.checklist .stic { display:inline-block; width:22px; font-family:var(--mono); }
.checklist li.st-run { border-color:var(--accent); }
.checklist li.st-ok { border-left:3px solid var(--accent2); }
.checklist li.st-ok .stic { color:var(--accent2); }
.checklist li.st-fail { border-left:3px solid var(--err); }
.checklist li.st-fail .stic { color:var(--err); }
.checklist li.st-wait, .checklist li.st-skip { color:var(--muted); }
.stdetail { margin-top:10px; font-size:12px; }
.stdetail code { color:var(--accent2); font-family:var(--mono); }
.valtable { width:100%; border-collapse:collapse; margin-top:10px;
  font:12px/1.5 var(--mono); }
.valtable th { text-align:left; color:var(--muted); font-weight:600;
  padding:4px 8px; border-bottom:1px solid var(--line); }
.valtable td { padding:4px 8px; border-bottom:1px solid var(--line); }
.valtable tr.bad td { color:var(--err); }
.valtable tr.soft td { color:#e0b341; }
/* detalle por columna: plegado por defecto, se abre con un click */
.valdetails > summary { cursor:pointer; color:var(--muted); font-size:11px;
  user-select:none; list-style-position:inside; padding:2px 0; }
.valdetails > summary:hover { color:var(--text); }
.valdetails[open] > summary { margin-bottom:2px; }

/* API Creator: toggles de pasos del Ship (default todos; desactivables). */
.steptoggles { display:flex; flex-wrap:wrap; gap:8px 16px; align-items:center;
  margin:8px 0 4px; }
.okmsg { color:var(--accent2); font-family:var(--mono); }

/* Cierre: certificado de transacción — compacto, apto para screenshot de celular
   y compartir. Reusado por API Creator (m2) y Excel (m3). */
.cert { max-width:380px; margin:18px 0 4px; border-radius:14px; overflow:hidden;
  border:1px solid var(--line); background:var(--panel); }
.cert.cert-ok { border-color:#1f5a44; }
.cert.cert-bad { border-color:#4a2228; }
.cert-head { display:flex; align-items:center; gap:13px; padding:16px 18px; }
.cert-ok .cert-head { background:#13302480; }
.cert-bad .cert-head { background:#2a151880; }
.cert-seal { font-size:24px; width:42px; height:42px; border-radius:50%; flex:0 0 auto;
  display:flex; align-items:center; justify-content:center; font-weight:700;
  background:var(--accent2); color:#082018; }
.cert-bad .cert-seal { background:var(--err); color:#200a0b; }
.cert-title { font-size:15px; font-weight:700; }
.cert-obj { font-family:var(--mono); font-size:11px; color:var(--muted); word-break:break-all; }
.cert-body { padding:6px 18px; }
.cert-row { display:flex; justify-content:space-between; gap:12px; padding:7px 0;
  font-size:13px; border-bottom:1px dashed var(--line); }
.cert-row:last-child { border-bottom:none; }
.cert-row span { color:var(--muted); }
.cert-links { padding:4px 18px 12px; display:flex; flex-direction:column; gap:6px; }
.cert-foot { padding:9px 18px; font-size:10px; color:var(--muted);
  border-top:1px solid var(--line); letter-spacing:.05em; text-transform:uppercase; }

.toast { position:fixed; bottom:20px; left:50%; transform:translateX(-50%);
  padding:10px 18px; border-radius:8px; font-size:13px; max-width:80vw; z-index:10; }
.toast.ok { background:#15352a; color:var(--accent2); border:1px solid #1f5a44; }
.toast.error { background:#2a1518; color:var(--err); border:1px solid #4a2228; }

/* landing de herramientas (post-login): card más ancho que el de login para
   que los 3 tiles queden anchos y bajos, no en columnas angostas. */
#landing .logincard { max-width:680px; }
.tiles { display:flex; gap:14px; margin-top:18px; }
.tiles button { flex:1; padding:20px 18px; font-size:15px; line-height:1.4; }
.tiles small { display:block; font-weight:400; opacity:.75; font-size:12px; margin-top:6px; }

/* ── Vistas de grafo / chat (SQL Creator + Visor) ───────────────────────────
   Viven bajo el header global (mismo top bar en las 3 vistas). Estilos propios
   (paleta catppuccin), todos prefijados con .gview para no chocar con el tema
   raíz. SQL Creator = solo chat · Visor = solo grafo. */
.gview { height:calc(100vh - 58px); background:#1e1e2e; color:#cdd6f4;
         display:flex; flex-direction:column;
         font-family:-apple-system,Segoe UI,sans-serif; }
.gview .chatwrap { flex:1; display:flex; flex-direction:column; min-height:0;
                   width:100%; max-width:820px; margin:0 auto; }
.gview .gtop { padding:8px 14px; background:#181825; display:flex; gap:10px;
               align-items:center; flex-wrap:wrap; border-bottom:1px solid #313244; flex-shrink:0; }
.gview .gtop h1 { font-size:15px; margin:0 8px 0 0; font-weight:600; color:#cdd6f4; }
.gview .gtop h1 .gstats { font-weight:400; opacity:.6; font-size:12px; }
.gview input[type=text] { padding:6px 10px; border-radius:6px; border:1px solid #313244;
                          font-size:13px; background:#1e1e2e; color:#cdd6f4; }
.gview .gq { width:300px; }
.gview select, .gview .gbtn { padding:6px 10px; border-radius:6px; border:none;
                              font-size:13px; cursor:pointer; }
.gview select { background:#1e1e2e; color:#cdd6f4; border:1px solid #313244; }
.gview .gbtn { background:#7c7bf7; font-weight:600; color:#11111b; }
.gview .gbtn.sec { background:#313244; color:#cdd6f4; }
.gview .gbtn.back { background:#f38ba8; color:#11111b; }
.gview .gbtn.cancel { background:#f38ba8; color:#11111b; }   /* Enviar -> Cancelar en vuelo */
.gview .glegend { font-size:11px; display:flex; gap:6px; align-items:center; color:#cdd6f4; }
.gview .gfilt { font-size:11px; display:inline-flex; align-items:center; gap:0;
                background:#181825; color:#cdd6f4; border:1px solid #313244;
                border-radius:6px; padding:3px 8px; cursor:pointer; line-height:1; }
.gview .gfilt:hover { border-color:#585b70; }
.gview .gfilt.off { opacity:0.4; text-decoration:line-through; }
.gview .dot { display:inline-block; width:10px; height:10px; border-radius:50%;
              margin-right:3px; vertical-align:-1px; }
.gview .line { display:inline-block; width:14px; height:0; border-top:2.5px solid;
               margin-right:3px; vertical-align:3px; }
.gview .gmain { flex:1; display:flex; min-height:0; }
.gview .netwrap { flex:1; position:relative; min-width:0; }
.gview .net { position:absolute; inset:0; }
.gview .info { position:absolute; bottom:12px; left:12px; background:rgba(24,24,37,.94);
               padding:10px 14px; border-radius:8px; font-size:12px; max-width:440px;
               display:none; border:1px solid #313244; line-height:1.5; }
.gview .info b { color:#7c7bf7; }
.gview .info .purp { color:#a6e3a1; }
.gview .gloading { position:absolute; inset:0; display:flex; align-items:center;
                   justify-content:center; font-size:14px; color:#a6adc8; }
.gview aside { width:400px; border-left:1px solid #313244; background:#181825;
               display:flex; flex-direction:column; min-height:0; }
.gview aside h2 { font-size:13px; margin:0; padding:10px 14px;
                  border-bottom:1px solid #313244; color:#cdd6f4; }
.gview .msgs { flex:1; overflow-y:auto; padding:12px; display:flex;
               flex-direction:column; gap:10px; }
.gview .msg { padding:9px 12px; border-radius:10px; font-size:12.5px; line-height:1.45;
              white-space:pre-wrap; word-break:break-word; }
.gview .msg.user { background:#2a2a3e; align-self:flex-end; max-width:88%; }
.gview .msg.bot  { background:#11111b; align-self:flex-start; max-width:95%;
                   border:1px solid #313244; }
.gview .msg.bot .objs { margin-top:8px; display:flex; flex-wrap:wrap; gap:6px; }
.gview .objs button { font-size:11px; padding:3px 8px; background:#313244; color:#cdd6f4;
                      border:none; border-radius:6px; cursor:pointer; }
.gview .msg.think { color:#a6adc8; font-style:italic; }
.gview .askbar { display:flex; gap:8px; padding:10px; border-top:1px solid #313244; align-items:flex-end; }
.gview .askbar input, .gview .askbar textarea { flex:1; }
.gview .askbar textarea { resize:none; overflow-y:auto; line-height:1.4; min-height:38px; }
.gview .askbar .gbtn { flex:none; }

/* ════════════════════════════════════════════════════════════════════════
   Beat · pulido de marca índigo (overrides — van al final para ganar cascada)
   ════════════════════════════════════════════════════════════════════════ */

/* Fondo: slate oscuro con un wash índigo MUY tenue arriba (sin glow morado). */
body {
  background:
    radial-gradient(1200px 560px at 18% -12%, rgba(99,102,241,.07), transparent 62%),
    var(--bg);
  background-attachment:fixed;
}

/* Header: hairline de marca tenue + wordmark blanco con punto índigo (sobrio). */
header {
  position:relative; background:var(--bg);
  border-bottom:1px solid var(--line);
}
header::before {
  content:""; position:absolute; top:0; left:0; right:0; height:1px;
  background:linear-gradient(90deg, transparent, rgba(99,102,241,.55), transparent);
}
header h1 { color:var(--text); font-weight:650; letter-spacing:.2px; }

/* Logo/brand: marco discreto (1px) con sombra suave, sin halo. */
header .brand { box-shadow:0 0 0 1px var(--line-2), 0 2px 8px -2px rgba(0,0,0,.5); }
.logincard .logo { box-shadow:0 0 0 1px var(--line-2), 0 8px 24px -10px rgba(99,102,241,.35); }

/* Botón base + CTA + primary: índigo sólido sobrio, micro-lift contenido. */
button, .cta { background:var(--accent); color:#fff; transition:transform .12s ease, box-shadow .12s ease, background .12s ease; }
button:hover:not(:disabled), .cta:hover:not(:disabled) { transform:translateY(-1px); background:#6f72f3; box-shadow:var(--glow); }
button:active:not(:disabled) { transform:translateY(0); }
button.primary { box-shadow:var(--glow); }
button.ghost { background:var(--panel2); color:var(--text); box-shadow:none; }
button.ghost:hover:not(:disabled) { border-color:var(--line-2); background:#222838; box-shadow:none; transform:none; }
button.ship { background:var(--accent-2); color:var(--ink); }   /* publicar: distinto del primary */
button.apply { background:var(--accent2); color:var(--ink); }
.modes .mode.active { background:var(--accent); color:#fff; }

/* Cards de login/landing: borde sutil + sombra profunda neutra (no glow morado). */
.logincard {
  background:var(--panel); border:1px solid var(--line);
  box-shadow:0 30px 70px -30px rgba(0,0,0,.7), inset 0 1px 0 rgba(255,255,255,.02);
}

/* Chips de dialecto / flechas: acento contenido. */
.fixedrow .arrow { color:var(--accent); }

/* ── Landing estructurado: hero + grid de herramientas + footer ───────────── */
#landing .logincard { max-width:760px; padding:34px 36px 22px; text-align:left; }
.landinghead { display:flex; align-items:center; gap:16px; margin-bottom:6px; }
.landinghead .logo { width:52px; height:52px; margin:0; }
.eyebrow { font-size:11px; text-transform:uppercase; letter-spacing:1.4px;
  color:var(--accent-2); font-weight:600; }
.landinghead h2 { margin:4px 0 2px; font-size:20px; color:var(--text); }
.landinghead .lead { margin:0; color:var(--muted); font-size:13px; }
.landingdiv { height:1px; background:var(--line); margin:20px 0; }
.tiles { display:grid; grid-template-columns:repeat(2,1fr); gap:12px; margin:0; }
.tiles .tile {
  display:block; background:var(--panel2); color:var(--text); text-align:left;
  border:1px solid var(--line); border-radius:12px; padding:16px 16px 15px;
  box-shadow:none; position:relative; transition:transform .14s ease, border-color .14s ease, box-shadow .14s ease;
}
.tile b { margin-top:12px; }
.tile .tile-ic { display:flex; align-items:center; justify-content:center;
  width:34px; height:34px; border-radius:9px; color:var(--accent-2);
  background:rgba(99,102,241,.12); border:1px solid rgba(99,102,241,.25); }
.tile .tile-ic svg { width:18px; height:18px; }
.tile b { font-size:14px; font-weight:600; }
.tile small { display:block; color:var(--muted); font-size:12px; line-height:1.45; font-weight:400; margin-top:2px; }
.tile .tile-arrow { position:absolute; top:14px; right:14px; color:var(--muted);
  font-size:14px; transition:transform .14s ease, color .14s ease; }
.tiles .tile:hover:not(:disabled) {
  transform:translateY(-2px); border-color:var(--accent);
  background:#1d2333; box-shadow:0 16px 34px -20px rgba(99,102,241,.5);
}
.tile:hover .tile-arrow { transform:translateX(3px); color:var(--accent-2); }
.landingfoot { display:flex; justify-content:space-between; margin-top:20px;
  padding-top:14px; border-top:1px solid var(--line); color:var(--muted); font-size:11px; }
.landingfoot .accent { color:var(--accent-2); }

/* Scrollbars discretos en la paleta índigo. */
* { scrollbar-width:thin; scrollbar-color:var(--line-2) transparent; }
::-webkit-scrollbar { width:10px; height:10px; }
::-webkit-scrollbar-thumb { background:var(--line-2); border-radius:8px; border:2px solid transparent; background-clip:content-box; }
::-webkit-scrollbar-thumb:hover { background:var(--accent); background-clip:content-box; }

/* ── Vista Transacciones (catálogo Caja 1) — paleta catppuccin del .gview ── */
/* Los filtros van inline en la barra (anula el width:100% global de select). */
.gview .gtop select { width:auto; }
.gview .gtop .gq { width:200px; }
.gview .txn-body { flex:1; display:flex; flex-direction:column; min-height:0; overflow:hidden; }
.gview .txn-cards { display:flex; gap:12px; padding:12px 14px 4px; flex-wrap:wrap; flex:0 0 auto; align-items:flex-start; }
/* dominios como botones-filtro compactos (en vez de una card por dominio) */
.gview .txn-dombtns { display:flex; flex-wrap:wrap; gap:6px; flex:1; min-width:240px; align-content:flex-start; }
.gview .txn-dombtn { display:inline-flex; align-items:center; gap:7px; background:#181825;
  border:1px solid #313244; border-radius:8px; padding:6px 11px; cursor:pointer; color:#cdd6f4;
  font:inherit; font-size:12px; height:fit-content; }
.gview .txn-dombtn:hover { border-color:#585b70; }
.gview .txn-dombtn.on { background:#1b2f44; border-color:#74c7ec; color:#74c7ec; }
.gview .txn-dombtn-n { font-weight:500; }
.gview .txn-dombtn-c { font-weight:700; font-size:11px; color:#7c7bf7; }
.gview .txn-dombtn.on .txn-dombtn-c { color:#74c7ec; }
.gview .txn-card { background:#181825; border:1px solid #313244; border-radius:10px;
  padding:12px 14px; min-width:200px; flex:1; }
.gview .txn-card-h { font-size:12px; font-weight:600; color:#cdd6f4; text-transform:uppercase;
  letter-spacing:.5px; margin-bottom:10px; }
.gview .txn-card-sub { display:block; font-weight:400; font-size:10px; opacity:.55;
  text-transform:none; letter-spacing:0; margin-top:2px; }
.gview .txn-card-stats { display:flex; gap:14px; }
.gview .txn-card-stats b { display:block; font-size:20px; font-weight:700; color:#cdd6f4; line-height:1.1; }
.gview .txn-card-stats span { font-size:10px; color:#6c7086; }
.gview .txn-bar { height:4px; background:#313244; border-radius:3px; margin-top:10px; overflow:hidden; }
.gview .txn-bar i { display:block; height:100%; background:linear-gradient(90deg,#a6e3a1,#7c7bf7); }
.gview .txn-card-tags { display:flex; gap:6px; margin-top:10px; flex-wrap:wrap; align-items:center; }
.gview .txn-role-sep { font-size:10px; color:#6c7086; text-transform:uppercase; letter-spacing:.4px;
  margin-left:4px; }

.gview#transacciones { position:relative; }
.gview .txn-tag-lbl { font-size:9px; text-transform:uppercase; letter-spacing:.5px; color:#6c7086;
  margin-right:2px; align-self:center; }
.gview .txn-tablewrap { flex:1; overflow:auto; padding:8px 14px 14px; min-height:0; }
.gview .txn-table { width:100%; border-collapse:collapse; font-size:12.5px; }
.gview .txn-table thead th { position:sticky; top:0; background:#181825; text-align:left;
  padding:8px 10px; font-size:10px; text-transform:uppercase; letter-spacing:.5px;
  color:#6c7086; border-bottom:1px solid #313244; white-space:nowrap; z-index:1; }
.gview .txn-row { cursor:pointer; }
.gview .txn-row:hover td { background:#181825; }
.gview .txn-row td { padding:7px 10px; border-bottom:1px solid #262638; vertical-align:middle; }
.gview .tx-exp { color:#6c7086; font-size:9px; width:18px; transition:transform .12s; }
.gview .txn-row.open .tx-exp { transform:rotate(90deg); display:inline-block; }
.gview .tx-name { font-family:var(--mono); color:#cdd6f4; }
.gview .tmuted { color:#6c7086; }
.gview .tmono { font-family:var(--mono); font-size:11px; }
.gview .tpath { font-family:var(--mono); font-size:11px; color:#a6e3a1; }
.gview .tnote, .gview .tskip { color:#6c7086; font-size:11px; }

.gview .txn-detail td { background:#11111b; border-bottom:1px solid #313244; padding:0; }
.gview .txn-detail-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:14px; padding:12px 16px; }
.gview .txn-detail-grid h5 { margin:0 0 5px; font-size:10px; text-transform:uppercase;
  letter-spacing:.5px; color:#6c7086; }
.gview .txn-detail-grid p { margin:0 0 2px; font-size:11px; color:#cdd6f4; }
.gview .txn-detail-grid ul { margin:0; padding-left:15px; }
.gview .txn-detail-grid li { font-size:11px; line-height:1.6; }

/* Badges proc / bucket / estado */
.gview .tproc-verde, .gview .tproc-amar, .gview .tproc-dim,
.gview .tbk-cab, .gview .tbk-det, .gview .tbk-side, .gview .tbk-otra, .gview .tbk-dim,
.gview .test-in, .gview .test-skip {
  display:inline-block; font-size:10px; font-weight:700; padding:2px 7px; border-radius:20px;
  text-transform:uppercase; letter-spacing:.3px; white-space:nowrap; }
.gview .tproc-verde { background:#1c3329; color:#a6e3a1; }
.gview .tproc-amar  { background:#33291a; color:#fab387; }
.gview .tproc-dim   { background:#2a2a3e; color:#9399b2; }
.gview .tbk-cab  { background:#1b2f44; color:#74c7ec; }
.gview .tbk-det  { background:#1a2838; color:#89b4fa; }
.gview .tbk-side { background:#2c2140; color:#cba6f7; }
.gview .tbk-otra { background:#1f2c33; color:#94d3cc; }
.gview .tbk-dim  { background:#2a2a3e; color:#9399b2; }
.gview .test-in   { background:#1c3329; color:#a6e3a1; }
.gview .test-skip { background:#2a2a3e; color:#6c7086; }

/* ── Guía (overlay) de la vista Transacciones ── */
.guide-ov { position:fixed; inset:0; z-index:1000; background:rgba(8,10,16,.72);
  display:flex; align-items:center; justify-content:center; padding:32px 20px; backdrop-filter:blur(2px); }
.guide { width:100%; max-width:720px; max-height:86vh; display:flex; flex-direction:column;
  background:var(--panel); border:1px solid var(--line-2); border-radius:14px;
  box-shadow:0 24px 60px -20px rgba(0,0,0,.7); overflow:hidden; }
.guide-head { display:flex; align-items:center; justify-content:space-between;
  padding:16px 20px; border-bottom:1px solid var(--line); flex:0 0 auto; }
.guide-head h2 { margin:0; font-size:15px; font-weight:600; color:var(--text); }
.guide-x { background:transparent; border:1px solid var(--line-2); color:var(--muted);
  width:28px; height:28px; border-radius:7px; cursor:pointer; font-size:13px; }
.guide-x:hover { color:var(--text); border-color:var(--accent); }
.guide-body { padding:18px 22px 24px; overflow:auto; font-size:13px; line-height:1.6; color:var(--text); }
.guide-body .guide-lead { margin:0 0 18px; color:var(--muted); }
.guide-body h3 { font-size:12px; text-transform:uppercase; letter-spacing:.6px; color:var(--accent-2);
  margin:20px 0 8px; }
.guide-body p { margin:0 0 8px; }
.guide-list { margin:0 0 8px; padding-left:0; list-style:none; }
.guide-list li { padding:5px 0; border-bottom:1px solid var(--line); color:var(--muted); }
.guide-list li:last-child { border-bottom:none; }
.guide-list li b { color:var(--text); }
.guide-body code { font-family:var(--mono); font-size:11.5px; background:var(--bg-2);
  color:var(--accent2); padding:1px 5px; border-radius:4px; }
.guide-note { margin-top:14px; padding-top:12px; border-top:1px solid var(--line); color:var(--muted); font-size:12px; }
.guide .tmono { font-family:var(--mono); font-size:11.5px; color:var(--muted); }

/* Badges dentro de la guía (mismas que la tabla, re-scopadas a .guide) */
.guide .tproc-verde, .guide .tproc-amar, .guide .tproc-dim,
.guide .tbk-cab, .guide .tbk-det, .guide .tbk-side, .guide .tbk-otra, .guide .tbk-dim,
.guide .test-in, .guide .test-skip {
  display:inline-block; font-size:10px; font-weight:700; padding:2px 7px; border-radius:20px;
  text-transform:uppercase; letter-spacing:.3px; white-space:nowrap; font-style:normal; }
.guide .tproc-verde { background:#1c3329; color:#a6e3a1; }
.guide .tproc-amar  { background:#33291a; color:#fab387; }
.guide .tproc-dim   { background:#2a2a3e; color:#9399b2; }
.guide .tbk-cab  { background:#1b2f44; color:#74c7ec; }
.guide .tbk-det  { background:#1a2838; color:#89b4fa; }
.guide .tbk-side { background:#2c2140; color:#cba6f7; }
.guide .tbk-otra { background:#1f2c33; color:#94d3cc; }
.guide .tbk-dim  { background:#2a2a3e; color:#9399b2; }
.guide .test-in   { background:#1c3329; color:#a6e3a1; }
.guide .test-skip { background:#2a2a3e; color:#6c7086; }

/* ── Header con filtros estilo Excel ── */
.gview .txn-table thead th { position:sticky; top:0; z-index:2; }
.gview .txn-table thead th.tx-exp-h { width:18px; }
.gview .txn-th-lbl { cursor:pointer; user-select:none; display:inline-flex; align-items:center; gap:3px; }
.gview .txn-th-lbl:hover { color:#cdd6f4; }
.gview .txn-sort { font-style:normal; font-size:8px; color:#7c7bf7; }
.gview .txn-fbtn { background:transparent; border:1px solid #313244; color:#6c7086; cursor:pointer;
  font-size:9px; padding:1px 4px; border-radius:4px; margin-left:6px; vertical-align:middle; }
.gview .txn-fbtn:hover { color:#cdd6f4; border-color:#585b70; }
.gview .txn-fbtn.on { background:#1b2f44; color:#74c7ec; border-color:#74c7ec; }

/* popup de filtro (autofilter) */
.gview .txn-fpop { position:absolute; z-index:50; width:240px; background:#181825;
  border:1px solid #585b70; border-radius:8px; box-shadow:0 12px 32px rgba(0,0,0,.55);
  padding:8px; font-size:12px; }
.gview .txn-fpop .fpop-h { font-weight:700; color:#cdd6f4; padding:2px 4px 6px; }
.gview .txn-fpop .fpop-sort { display:flex; gap:6px; margin-bottom:6px; }
.gview .txn-fpop .fpop-sort button { flex:1; background:#1e1e2e; color:#cdd6f4; border:1px solid #313244;
  border-radius:5px; padding:4px; font-size:11px; cursor:pointer; }
.gview .txn-fpop .fpop-sort button:hover { border-color:#7c7bf7; }
.gview .txn-fpop .fpop-search { width:100%; background:#1e1e2e; color:#cdd6f4; border:1px solid #313244;
  border-radius:5px; padding:5px 8px; font-size:12px; margin-bottom:6px; }
.gview .txn-fpop .fpop-all { display:flex; align-items:center; gap:6px; padding:3px 4px; color:#9399b2;
  border-bottom:1px solid #313244; margin-bottom:4px; cursor:pointer; }
.gview .txn-fpop .fpop-list { max-height:220px; overflow:auto; }
.gview .txn-fpop .fpop-list label { display:flex; align-items:center; gap:6px; padding:3px 4px;
  cursor:pointer; color:#cdd6f4; border-radius:4px; }
.gview .txn-fpop .fpop-list label:hover { background:#1e1e2e; }
.gview .txn-fpop .fpop-list input { width:auto; }
.gview .txn-fpop .fpop-c { margin-left:auto; color:#6c7086; font-size:10px; }
.gview .txn-fpop .fpop-btns { display:flex; gap:6px; margin-top:8px; }
.gview .txn-fpop .fpop-btns button { flex:1; border:none; border-radius:5px; padding:6px; font-size:11px;
  font-weight:600; cursor:pointer; }
.gview .txn-fpop .fpop-clear { background:#313244; color:#cdd6f4; }
.gview .txn-fpop .fpop-ok { background:#7c7bf7; color:#11111b; }

/* ---- Vista Dominios — taxonomía cerrada del ERP (Caja 1) ---- */
.gview .dom-legend { display:flex; gap:6px; align-items:center; margin-left:auto; }
.gview .dom-wrap { flex:1; overflow:auto; padding:16px 18px 28px; }
.gview .dom-group { margin-bottom:22px; }
.gview .dom-group-h { font-size:13px; font-weight:700; color:#cdd6f4; margin:0 0 10px;
                      letter-spacing:.02em; display:flex; align-items:center; gap:8px; }
.gview .dom-group-h span { font-size:11px; font-weight:500; color:#6c7086;
                           background:#181825; border:1px solid #313244; border-radius:20px; padding:1px 8px; }
.gview .dom-grid { display:grid; gap:12px;
                   grid-template-columns:repeat(auto-fill,minmax(232px,1fr)); }
.gview .dom-card { background:#181825; border:1px solid #313244; border-left:3px solid #45475a;
                   border-radius:10px; padding:12px 13px; transition:border-color .12s,transform .12s; }
.gview .dom-card:hover { transform:translateY(-1px); }
.gview .dom-card.done    { border-left-color:#a6e3a1; }
.gview .dom-card.queued  { border-left-color:#fab387; }
.gview .dom-card.pending { border-left-color:#45475a; opacity:.82; }
.gview .dom-card-h { display:flex; align-items:center; justify-content:space-between; gap:6px; }
.gview .dom-name { font-size:14px; font-weight:600; color:#cdd6f4; }
.gview .dom-schema { font-size:11px; color:#7f849c; font-family:var(--mono); margin-top:2px; }
.gview .dom-badge { font-size:10px; font-weight:700; border-radius:20px; padding:2px 8px;
                    white-space:nowrap; line-height:1.4; }
.gview .dom-badge.done    { background:rgba(166,227,161,.16); color:#a6e3a1; }
.gview .dom-badge.queued  { background:rgba(250,179,135,.16); color:#fab387; }
.gview .dom-badge.pending { background:#262c3a; color:#8b93a7; }
.gview .dom-nums { display:flex; gap:14px; margin-top:10px; }
.gview .dom-nums div { display:flex; flex-direction:column; }
.gview .dom-nums b { font-size:18px; font-weight:700; color:#cdd6f4; line-height:1.1; }
.gview .dom-nums span { font-size:10px; color:#7f849c; text-transform:uppercase; letter-spacing:.03em; }
.gview .dom-pend { font-size:11.5px; color:#8b93a7; margin-top:9px; }
/* Caja 2 — generar .sql (solo local) */
.gview .dom-gen-row { margin-top:10px; border-top:1px solid #262c3a; padding-top:9px; }
.gview .dom-gen { font:inherit; font-size:11.5px; cursor:pointer; color:#cdd6f4;
                  background:rgba(99,102,241,.14); border:1px solid #313244; border-radius:7px;
                  padding:5px 10px; transition:background .12s; }
.gview .dom-gen:hover:not(:disabled) { background:rgba(99,102,241,.26); }
.gview .dom-gen:disabled { opacity:.6; cursor:default; }
.gview .dom-gen-out { font-size:11px; margin-top:7px; line-height:1.5; }
.gview .dom-gen-ok { color:#a6e3a1; }
.gview .dom-gen-ok b { color:#cdd6f4; }
.gview .dom-gen-err { color:var(--err); }
.gview .dom-gen-warn { margin-top:5px; color:var(--warn); }
.gview .dom-gen-warn summary { cursor:pointer; }
.gview .dom-gen-warn ul { margin:5px 0 0; padding-left:16px; color:#9399b2; }
.gview .dom-gen-warn li { font-family:var(--mono); font-size:10.5px; margin:2px 0; }
.gview .dom-nota { font-size:11px; color:#9399b2; margin-top:9px; line-height:1.45;
                   border-top:1px solid #262c3a; padding-top:7px; }
.gview .dom-transversal { margin-top:10px; padding-top:16px; border-top:1px dashed #313244; }
.gview .dom-transversal h3 { font-size:12px; font-weight:600; color:#9399b2; margin:0 0 9px; }
.gview .dom-transversal h3 span { font-weight:400; color:#6c7086; font-size:11px; }
.gview .dom-tchips { display:flex; flex-wrap:wrap; gap:6px; }
.gview .dom-tchips span { font-size:11px; font-family:var(--mono); color:#7f849c;
                          background:#181825; border:1px solid #262c3a; border-radius:6px; padding:2px 8px; }

/* ── API-Generator (pipeline Caja 1→2→3) ─────────────────────────────── */
.ag-tabs { display:flex; gap:6px; margin-left:auto; }
.ag-tab { background:var(--panel2); color:var(--muted); border:1px solid var(--line);
  border-radius:8px; padding:7px 14px; font-size:13px; cursor:pointer; line-height:1.1;
  display:flex; flex-direction:column; align-items:flex-start; gap:2px; }
.ag-tab small { font-size:10px; opacity:.7; text-transform:uppercase; letter-spacing:.5px; }
.ag-tab:hover { border-color:var(--line-2); color:var(--text); }
.ag-tab.active { background:var(--accent); color:var(--ink); border-color:var(--accent); }
.ag-tab.active small { opacity:.85; }
/* contenedor de paneles: flex-column que llena el alto del .gview. Cada panel activo
   se vuelve flex-column para que las vistas embebidas (txn-body / dom-wrap) tengan
   scroll interno; el panel de caja 3 (.ag-pad) scrollea como bloque con su padding. */
.ag-body { flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden; }
.ag-panel { flex:1; min-height:0; flex-direction:column; position:relative; }
.ag-panel:not([hidden]) { display:flex; }
.ag-panel.ag-pad { overflow:auto; padding:20px 24px; }
.ag-subtop { flex-shrink:0; }
.ag-lead { color:var(--muted); font-size:13px; max-width:760px; margin:0 0 16px; line-height:1.5; }
.ag-lead code { font-family:var(--mono); font-size:12px; color:var(--accent2); }
.ag-row { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:12px; }
.ag-row select { width:auto; min-width:220px; }
.ag-row .gbtn { white-space:nowrap; }
.ag-out { margin-top:8px; }
.ag-ok { background:rgba(45,212,167,.08); border:1px solid rgba(45,212,167,.3);
  color:var(--text); border-radius:8px; padding:11px 13px; font-size:13px; }
.ag-ok a { color:var(--accent2); }
.ag-ok small { color:var(--muted); }
.ag-err { background:rgba(239,111,123,.08); border:1px solid rgba(239,111,123,.35);
  color:var(--err); border-radius:8px; padding:11px 13px; font-size:13px; }
.ag-warn { margin-top:8px; font-size:12px; color:var(--warn); }
.ag-warn summary { cursor:pointer; }
.ag-warn ul { margin:6px 0 0; padding-left:18px; color:var(--muted); }
.ag-dgrid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:12px; }
.ag-dcard { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:14px; }
.ag-dcard.done { border-left:3px solid var(--accent2); }
.ag-dname { font-weight:600; font-size:14px; margin-bottom:10px; }
.tile-hero { border-color:var(--accent); box-shadow:var(--glow); }

/* ---- MERGE/FULL inline stats (caja 3) ---- */
#ag3_stats { margin-top:20px; border-top:1px solid var(--line); padding-top:16px; }
.mf-summary { display:flex; gap:16px; flex-wrap:wrap; margin-bottom:16px; }
.mf-kpi { background:var(--panel); border:1px solid var(--line); border-radius:8px;
  padding:12px 18px; display:flex; flex-direction:column; align-items:center; gap:2px; min-width:110px; }
.mf-kpi.mf-merge { border-color:rgba(59,130,246,.4); }
.mf-kpi.mf-full  { border-color:rgba(245,158,11,.4); }
.mf-val { font-size:1.8rem; font-weight:700; color:var(--text); line-height:1; }
.mf-val small { font-size:1rem; }
.mf-lbl { font-size:0.75rem; color:var(--muted); text-transform:uppercase; letter-spacing:.5px; }
.mf-table-wrap { overflow-x:auto; }
.mf-table { width:100%; border-collapse:collapse; background:var(--panel);
  border:1px solid var(--line); border-radius:8px; overflow:hidden; font-size:13px; }
.mf-table thead { background:var(--bg); border-bottom:2px solid var(--line); }
.mf-table th { padding:10px 12px; text-align:left; font-weight:600; color:var(--muted);
  font-size:0.8rem; text-transform:uppercase; letter-spacing:.5px; }
.mf-table td { padding:9px 12px; border-bottom:1px solid var(--line); }
.mf-table tbody tr:last-child td { border-bottom:none; }
.mf-table tbody tr:hover { background:var(--bg); }
.mf-num { text-align:right; font-family:var(--mono); }
.mf-name { font-weight:600; }
.mf-pct { color:rgba(245,158,11,.9); font-weight:600; }
.mf-bar { display:flex; gap:3px; }
.mf-seg { height:22px; border-radius:3px; display:flex; align-items:center;
  justify-content:center; font-size:0.7rem; font-weight:600; color:#fff; min-width:24px; }
.mf-seg-m { background:#3b82f6; }
.mf-seg-f { background:#f59e0b; }
.mf-tag { background:rgba(245,158,11,.12); border:1px solid rgba(245,158,11,.35);
  color:#f59e0b; padding:2px 6px; border-radius:4px; font-family:var(--mono); font-size:0.75rem; }
.mf-dash { color:var(--muted); }
.mf-loading { text-align:center; padding:1.5rem; color:var(--muted); }
.mf-total { border-top:2px solid var(--line); font-weight:600; background:var(--bg) !important; }

/* MERGE/FULL badge en cards de dominio (caja 2) */
.dom-mf { display:flex; gap:6px; flex-wrap:wrap; margin:6px 0 2px; }
.dom-mf-m  { background:rgba(59,130,246,.12); border:1px solid rgba(59,130,246,.35);
  color:#60a5fa; padding:2px 8px; border-radius:4px; font-size:11px; font-family:var(--mono); }
.dom-mf-f  { background:rgba(245,158,11,.12); border:1px solid rgba(245,158,11,.35);
  color:#f59e0b; padding:2px 8px; border-radius:4px; font-size:11px; font-family:var(--mono);
  cursor:help; }
.dom-mf-ok { background:rgba(45,212,167,.08); border:1px solid rgba(45,212,167,.25);
  color:#34d399; padding:2px 8px; border-radius:4px; font-size:11px; font-family:var(--mono); }

/* ── Migración on-premise (P3) ─────────────────────────────────────────────
   Layout: gtop (header) + mg-body (flex row: mg-in izq | mg-out der).
   Paleta catppuccin del .gview. */
.mg-body { flex:1; display:flex; gap:0; min-height:0; }
.mg-in   { display:flex; flex-direction:column; width:42%; min-width:280px; max-width:560px;
           border-right:1px solid #313244; padding:14px 16px; gap:8px; }
.mg-out  { flex:1; display:flex; flex-direction:column; padding:14px 16px; overflow:auto;
           position:relative; }
.mg-label { font-size:11px; text-transform:uppercase; letter-spacing:.6px;
            color:#6c7086; margin:0; }
.mg-sql  { flex:1; resize:none; background:#11111b; color:#cdd6f4; border:1px solid #313244;
           border-radius:8px; padding:10px 12px; font:12px/1.55 var(--mono); outline:none;
           min-height:220px; }
.mg-sql:focus { border-color:#7c7bf7; }
.mg-hint { font-size:11px; color:#6c7086; margin-top:2px; }
.mg-empty { color:#6c7086; font-size:13px; margin-top:32px; text-align:center; }
/* Resultado de la transformación */
.mg-result { display:flex; flex-direction:column; gap:12px; }
.mg-sqlout { background:#11111b; border:1px solid #313244; border-radius:8px; overflow:auto;
             flex:1; min-height:0; }
.mg-sqlout pre { margin:0; padding:14px; font:12px/1.55 var(--mono); color:#cdd6f4; white-space:pre; }
.mg-toolbar { display:flex; gap:8px; align-items:center; margin-bottom:6px; }
.mg-toolbar h3 { margin:0; flex:1; font-size:13px; color:#cdd6f4; font-weight:600; }
/* Warnings FAB-code */
.mg-warns { list-style:none; padding:0; margin:0; display:flex; flex-direction:column; gap:4px; }
.mg-warn  { font:12px/1.5 var(--mono); padding:5px 10px; border-radius:6px;
            background:#181825; border:1px solid #313244; }
.mg-warn.error   { border-left:3px solid #f38ba8; }
.mg-warn.warning { border-left:3px solid #f9e2af; }
.mg-warn.info    { border-left:3px solid #89dceb; }
.mg-warn .mg-code { color:#7c7bf7; font-weight:700; margin-right:6px; }
.mg-clean { font-size:11px; padding:5px 10px; border-radius:6px;
            background:rgba(45,212,167,.08); border:1px solid rgba(45,212,167,.25);
            color:#a6e3a1; margin-bottom:6px; }
/* Legacy alias kept for single-view renderResult (no longer used for batch) */
.mg-skippable { font-size:11px; padding:5px 10px; border-radius:6px;
                background:rgba(45,212,167,.08); border:1px solid rgba(45,212,167,.25);
                color:#a6e3a1; margin-bottom:6px; }
.mg-ship-ok { font-size:12px; padding:8px 12px; border-radius:8px; margin:0 0 10px 0;
              background:rgba(45,212,167,.10); border:1px solid rgba(45,212,167,.35);
              color:#a6e3a1; font-weight:600; }
/* Stub badge: fondo ámbar discreto */
.mg-stub { font-size:12px; padding:8px 12px; border-radius:8px; margin-bottom:10px;
           background:rgba(249,226,175,.08); border:1px solid rgba(249,226,175,.3); color:#f9e2af; }

/* ── Migración por LOTE (batch sub-mode) ─────────────────────────────────── */

/* Combobox overrides inside .gview (catppuccin palette) */
.gview .combo-input { background:#1e1e2e; color:#cdd6f4; border-color:#313244; font-size:13px;
  padding:6px 10px; border-radius:6px; }
.gview .combo-input:focus { border-color:#7c7bf7; outline:none; }
.gview .combo-list { background:#1e1e2e; border-color:#7c7bf7; border-radius:7px; z-index:30; }
.gview .combo-opt { color:#cdd6f4; font-size:13px; }
.gview .combo-opt:hover { background:#313244; }
.gview .combo-opt.sel { color:#7c7bf7; }
.gview .combo-empty { color:#6c7086; }

/* Sub-mode toggle inside .gtop */
.mg-submode-toggle { display:flex; border:1px solid #313244; border-radius:7px; overflow:hidden; flex-shrink:0; }
.mg-submode-btn { background:#181825; color:#9399b2; border:none; border-radius:0;
  padding:5px 13px; font-size:12px; font-weight:600; cursor:pointer; transition:background .12s,color .12s; }
.mg-submode-btn.active { background:#7c7bf7; color:#11111b; }
.mg-submode-btn:hover:not(.active) { background:#313244; color:#cdd6f4; }

/* Batch panel layout */
.mg-batch-body { flex:1; display:flex; gap:0; min-height:0; }
.mg-batch-in { width:260px; min-width:200px; border-right:1px solid #313244;
  padding:14px 16px; display:flex; flex-direction:column; gap:6px; flex-shrink:0; }
.mg-batch-file-input { background:#11111b; color:#cdd6f4; border:1px solid #313244;
  border-radius:8px; padding:7px 10px; font-size:12px; width:100%; cursor:pointer; }
.mg-batch-file-input:focus { outline:none; border-color:#7c7bf7; }
.mg-batch-pickers { display:flex; gap:8px; }
.mg-batch-pickers .gbtn { flex:1; font-size:12px; padding:6px 8px; }
.mg-batch-selection { font-size:12px; color:#9399b2; margin:2px 0 0; word-break:break-all; }

/* Batch output area */
.mg-batch-out { flex:1; overflow:auto; padding:14px 16px; }

/* Counters bar */
.mg-batch-counters { display:flex; flex-wrap:wrap; gap:10px; margin-bottom:10px; }
.mg-counter { font-size:12px; background:#181825; border:1px solid #313244;
  border-radius:6px; padding:4px 10px; color:#9399b2; }
.mg-counter b { color:#cdd6f4; }
.mg-counter.ok { border-color:rgba(166,227,161,.3); }
.mg-counter.ok b { color:#a6e3a1; }
.mg-counter.err { border-color:rgba(243,139,168,.3); }
.mg-counter.err b { color:#f38ba8; }
.mg-counter.warn { border-color:rgba(249,226,175,.3); }
.mg-counter.warn b { color:#f9e2af; }
.mg-counter.muted b { color:#6c7086; }

/* Actions bar */
.mg-batch-actions { display:flex; gap:8px; margin-bottom:10px; flex-wrap:wrap; }

/* Summary line after ship */
.mg-batch-summary { font-size:12px; background:rgba(166,227,161,.06);
  border:1px solid rgba(166,227,161,.2); border-radius:7px;
  padding:7px 12px; color:#a6e3a1; margin-bottom:10px; }

/* In-progress banner — prominent accent strip shown during batch ship */
.mg-ship-progress {
  font-size:13px; font-weight:600;
  background:rgba(137,180,250,.10);
  border:1.5px solid rgba(137,180,250,.45);
  border-radius:8px;
  padding:10px 14px;
  color:#89b4fa;
  margin-bottom:10px;
  display:flex;
  flex-direction:column;
  gap:6px;
}
.mg-ship-progress-text { display:flex; align-items:center; gap:10px; }
.mg-ship-progress-text .mg-sp-ok  { color:#a6e3a1; }
.mg-ship-progress-text .mg-sp-err { color:#f38ba8; }
.mg-ship-progress-text .mg-sp-warn { color:#f9e2af; }
.mg-ship-progress-bar-wrap {
  height:5px; border-radius:3px;
  background:rgba(137,180,250,.15);
  overflow:hidden;
}
.mg-ship-progress-bar {
  height:100%; border-radius:3px;
  background:#89b4fa;
  transition:width .25s ease;
  width:0%;
}
.mg-ship-progress.mg-ship-error {
  background:rgba(243,139,168,.10);
  border-color:rgba(243,139,168,.45);
  color:#f38ba8;
}

/* Cycles panel */
.mg-batch-cycles { font-size:12px; background:rgba(249,226,175,.06);
  border:1px solid rgba(249,226,175,.2); border-radius:7px;
  padding:8px 12px; margin-bottom:10px; color:#f9e2af; }
.mg-batch-cycles summary { cursor:pointer; user-select:none; }
.mg-warn-badge { font-weight:600; }

/* Batch table */
.mg-batch-tablewrap { overflow-x:auto; }
.mg-batch-table { width:100%; border-collapse:collapse; font-size:12px; }
.mg-batch-table thead th { text-align:left; color:#6c7086; font-size:10px; text-transform:uppercase;
  letter-spacing:.5px; padding:6px 8px; border-bottom:1px solid #313244;
  position:sticky; top:0; background:#1e1e2e; z-index:1; }
.mg-batch-table tbody tr:hover td { background:#181825; }
.mg-batch-table td { padding:5px 8px; border-bottom:1px solid #262638;
  vertical-align:middle; color:#cdd6f4; }
.mg-batch-fname { font-family:var(--mono); max-width:220px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mg-batch-err-cell { max-width:200px; overflow:hidden; }

/* Error-toggle button — mirrors mg-warn-toggle, red palette */
button.mg-err-toggle { all:unset; cursor:pointer; display:inline-block;
  font-size:11px; color:#f38ba8; max-width:190px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  transition:opacity .12s; }
button.mg-err-toggle:hover { opacity:.75; text-decoration:underline; }
button.mg-err-toggle.mg-err-toggle-open::after { content:" ▲"; font-size:8px; }
button.mg-err-toggle:not(.mg-err-toggle-open)::after { content:" ▼"; font-size:8px; }

/* Error detail row */
.mg-err-detail-row td.mg-err-detail-cell {
  padding:6px 12px 10px 28px; background:#11111b; border-bottom:1px solid #313244; }
.mg-err-detail-body { display:flex; flex-direction:column; gap:6px; }
.mg-err-full-msg { font:11px/1.55 var(--mono); color:#f38ba8;
  white-space:pre-wrap; word-break:break-word;
  background:#1a0d11; border:1px solid rgba(243,139,168,.25);
  border-left:3px solid #f38ba8; border-radius:5px;
  padding:7px 10px; user-select:text; }
.mg-err-reason { font-size:11px; color:#9399b2; }
.mg-err-reason-label { font-weight:600; color:#cdd6f4; margin-right:4px; }

/* Small badges for batch table cells */
.mg-badge-ok  { display:inline-block; font-size:10px; padding:1px 6px; border-radius:4px;
  background:rgba(166,227,161,.12); color:#a6e3a1; border:1px solid rgba(166,227,161,.25); font-weight:600; }
.mg-badge-err { display:inline-block; font-size:10px; padding:1px 6px; border-radius:4px;
  background:rgba(243,139,168,.12); color:#f38ba8; border:1px solid rgba(243,139,168,.25); font-weight:600; }
.mg-badge-warn { display:inline-block; font-size:10px; padding:1px 6px; border-radius:4px;
  background:rgba(249,226,175,.10); color:#f9e2af; border:1px solid rgba(249,226,175,.2); font-weight:600; }
.mg-badge-muted { display:inline-block; font-size:10px; padding:1px 6px; border-radius:4px;
  background:rgba(147,153,178,.10); color:#6c7086; border:1px solid rgba(147,153,178,.2); font-weight:600; }

/* Warn-toggle button — inherits badge look, adds pointer + open indicator */
button.mg-warn-toggle { all:unset; cursor:pointer; display:inline-block;
  font-size:10px; padding:1px 6px; border-radius:4px; font-weight:600;
  transition:opacity .12s; }
button.mg-warn-toggle:hover { opacity:.8; }
button.mg-warn-toggle.mg-warn-toggle-open::after { content:" ▲"; font-size:8px; }
button.mg-warn-toggle:not(.mg-warn-toggle-open)::after { content:" ▼"; font-size:8px; }
/* Detail row */
.mg-warn-detail-row td.mg-warn-detail-cell {
  padding:6px 12px 10px 28px; background:#11111b; border-bottom:1px solid #313244; }
.mg-warn-detail-cell .mg-warns { gap:3px; }

/* ── Ship error category badges ─────────────────────────────────────────── */
.mg-cat-badge { display:inline-block; font-size:10px; padding:2px 7px; border-radius:4px;
  font-weight:600; cursor:default; white-space:nowrap; }
/* transpiler = rojo — bug a cerrar */
.cat-transpiler { background:rgba(243,139,168,.14); color:#f38ba8; border:1px solid rgba(243,139,168,.3); }
/* cascade = ambar — se desbloquea cuando la raiz se repara */
.cat-cascade    { background:rgba(249,226,175,.12); color:#f9e2af; border:1px solid rgba(249,226,175,.28); }
/* mirror_desync = azul — mirror desincronizado vs DACPAC */
.cat-mirror     { background:rgba(137,180,250,.12); color:#89b4fa; border:1px solid rgba(137,180,250,.28); }
/* excluded = gris — no migrable por diseno (OPENQUERY, etc.) */
.cat-excluded   { background:rgba(147,153,178,.12); color:#9399b2; border:1px solid rgba(147,153,178,.28); }
/* source = naranja — problema en el SQL fuente */
.cat-source     { background:rgba(250,179,135,.12); color:#fab387; border:1px solid rgba(250,179,135,.28); }
/* connection = verde claro — transitorio / infra */
.cat-connection { background:rgba(166,227,161,.10); color:#a6e3a1; border:1px solid rgba(166,227,161,.25); }
.cat-unknown    { background:rgba(147,153,178,.08); color:#6c7086; border:1px solid rgba(147,153,178,.2); }
.mg-batch-cat-cell { min-width:90px; }

/* ── Batch summary: ejecutables en verde, problemas en rojo + guía ───────── */
.mg-sum-ok   { color:#a6e3a1; font-weight:600; }
.mg-sum-fail { color:#f38ba8; font-weight:700; }
.mg-sum-cats { margin-top:7px; display:flex; flex-wrap:wrap; gap:5px; }
.mg-legend   { margin-top:9px; }
.mg-legend > summary { cursor:pointer; color:#89b4fa; font-size:11px; list-style:none;
  user-select:none; display:inline-block; }
.mg-legend > summary::-webkit-details-marker { display:none; }
.mg-legend > summary::before { content:"▸ "; font-size:9px; }
.mg-legend[open] > summary::before { content:"▾ "; }
.mg-legend-row { display:flex; align-items:flex-start; gap:9px; margin-top:7px; }
.mg-legend-row .mg-cat-badge { flex:0 0 auto; }
.mg-legend-desc { color:#9399b2; font-size:11px; line-height:1.5; }
