/* SIGDA V92 · FUNDACION · instrumento de registro.
   1. Ningun color de texto baja de 4.5:1 sobre su fondo REAL. V91
      muestreaba PNGs y dejo faint 2.71, warn 2.36, ok 3.14.
   2. La escala arranca en 11px. V91 midio pixeles sobre capturas y
      aterrizo en cuerpos de 8.5 y 9px.
   3. No se declara una fuente que no se sirve: V91 pedia Inter sin
      cargarla y el producto cambiaba en cada maquina.
   4. Cifras tabulares: folios y horas se comparan en columna.
   Navy 800, acento, fondo y superficie son contrato: intactos. */

:root {
  /* COLOR · azul marino institucional */
  --sg-navy-900: #001238;
  --sg-navy-800: #00173f;
  --sg-navy-700: #062455;
  --sg-navy-600: #173c68;

  --sg-accent: #0055fc;
  --sg-accent-strong: #003fc4;
  --sg-accent-soft: #e8f0ff;

  --sg-bg: #fafbfd;
  --sg-surface: #ffffff;
  --sg-surface-alt: #f4f7fb;
  --sg-surface-sunken: #eef2f8;
  --sg-border: #e2e8f1;
  --sg-border-strong: #c6d0e0;
  /* Un borde de control es informacion, no adorno: 3.19:1 sobre
     blanco. Campos, selects y botones secundarios lo usan. */
  --sg-border-control: #8191ad;
  --sg-rule: #d7dfeb;

  --sg-text: #0a1c3f;
  --sg-text-muted: #55647e;
  --sg-text-faint: #68758c;
  --sg-text-invert: #ffffff;

  /* ESTADO · medidos sobre su propio fondo suave, no sobre blanco
     teorico. Ninguno decora: cada uno significa una cosa. */
  --sg-ok: #077a52;
  --sg-ok-soft: #e6f4ee;
  --sg-warn: #8a5300;
  --sg-warn-soft: #fdf0dd;
  --sg-danger: #c0102b;
  --sg-danger-soft: #fdeaec;
  --sg-info: #5334c4;
  --sg-info-soft: #eee9fb;

  /* TIPOGRAFIA */
  --sg-font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text",
    "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --sg-fs-4xl: 30px;
  --sg-fs-3xl: 24px;
  --sg-fs-2xl: 19px;
  --sg-fs-xl: 16px;
  --sg-fs-lg: 14px;
  --sg-fs-md: 13px;
  --sg-fs-sm: 12px;
  --sg-fs-xs: 11px;
  /* El suelo tipografico. Era 9px y se consumia en veinte sitios; al
     subir el token subieron los veinte de una vez. */
  --sg-fs-2xs: 11px;

  --sg-fw-regular: 400;
  --sg-fw-medium: 500;
  --sg-fw-semibold: 600;
  --sg-fw-bold: 650;
  --sg-fw-black: 700;

  --sg-lh-tight: 1.25;
  --sg-lh-normal: 1.5;
  --sg-ls-caps: .06em;
  --sg-ls-tight: -.011em;

  /* SPACING · base 4 */
  --sg-1: 4px;
  --sg-2: 8px;
  --sg-3: 12px;
  --sg-4: 16px;
  --sg-5: 20px;
  --sg-6: 24px;
  --sg-8: 32px;
  --sg-10: 40px;

  /* Alturas de control. 36px en escritorio denso, 44px al alcance del
     dedo; el bloque responsive las sube, no las inventa. */
  --sg-control: 36px;
  --sg-control-sm: 30px;

  /* RADIOS · un instrumento se lee mas preciso con la esquina corta */
  --sg-radius-sm: 4px;
  --sg-radius: 6px;
  --sg-radius-lg: 10px;
  --sg-radius-pill: 999px;

  /* ELEVACION · el papel institucional no flota. La jerarquia la
     llevan el borde y el tono de superficie; la sombra solo aparece
     cuando algo se despega de verdad -menu, modal, popover-. */
  --sg-shadow-sm: 0 1px 0 rgba(10, 28, 63, .04);
  --sg-shadow: 0 1px 2px rgba(10, 28, 63, .06), 0 8px 20px -12px rgba(10, 28, 63, .18);
  --sg-shadow-lg: 0 24px 48px -24px rgba(10, 28, 63, .28);

  --sg-focus-ring: 0 0 0 3px rgba(0, 85, 252, .28);
  --sg-transition: 120ms cubic-bezier(.2, .7, .3, 1);
}

/* Fondo y color de texto son lo unico que no puede pertenecer a una
   pantalla: repartidos por hoja producian un flash al navegar. La
   tipografia la aplica el shell (gate H3). Las cifras si son
   globales; la prosa corrida lo desactiva abajo. */
body {
  background: var(--sg-bg);
  color: var(--sg-text);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1;
}

p, .sg-page-sub, .sg-card-sub, .sg-note { font-variant-numeric: normal; }

/* RC4 · el suelo de 11px tambien vale para <small>.
   El navegador le aplica 0.8em por defecto: sobre el cuerpo de 13.5px
   salian 10.83px, y ahi viajan folios, correos y telefonos —justo lo que
   hay que poder leer—. Ninguna hoja lo declaraba, asi que el suelo se
   respetaba en todo el producto MENOS en el unico sitio donde nadie
   habia escrito una regla. Medido en /participantes, /empresas,
   /programas, /metricas y los portales. */
small { font-size: var(--sg-fs-xs); }

@media (prefers-reduced-motion: reduce) {
  :root { --sg-transition: 0ms; }
}
/* SIGDA V92 · COMPONENTES BASE
   Una decision por pieza. V91 definia boton, campo, tarjeta, tabla y
   badge DOS veces -la base y una "calibracion final" que la
   sobrescribia mas abajo-, asi que el valor vigente no era el que se
   leia. Aqui cada componente se declara una sola vez.
   Borde y tono de superficie llevan la jerarquia; la sombra queda
   para lo que se despega de verdad. Sin gradiente, glow ni barra de
   color al costado. */

/* FOCO · uno solo, visible, y nunca se apaga */
.sg-btn:focus-visible,
.auth-field input:focus-visible,
.sg-input:focus-visible,
.sg-select:focus-visible,
.sg-textarea:focus-visible,
.sg-tab:focus-visible,
.sg-nav-link:focus-visible,
.sg-card a:focus-visible {
  outline: 2px solid var(--sg-accent);
  outline-offset: 2px;
  box-shadow: var(--sg-focus-ring);
}

/* BOTONES */
/* V92-B · las clases historicas adoptan el boton del sistema */
.sg-btn,
button.groups-btn,
.groups-tools-actions summary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--sg-2);
  min-height: var(--sg-control);
  padding: 0 var(--sg-4);
  border: 1px solid transparent;
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-text);
  font-size: var(--sg-fs-md);
  font-weight: var(--sg-fw-semibold);
  line-height: 1;
  cursor: pointer;
  text-decoration: none;
  transition: background var(--sg-transition), border-color var(--sg-transition);
}

.sg-btn[disabled],
.sg-btn[aria-disabled="true"] {
  opacity: .55;
  cursor: not-allowed;
}

/* La accion primaria se distingue por color y peso, no por brillo. */
.sg-btn--primary,
.sg-btn.primary,
button.groups-btn.primary {
  background: var(--sg-accent);
  border-color: var(--sg-accent);
  color: var(--sg-text-invert);
}
.sg-btn--primary:hover:not([disabled]),
button.groups-btn.primary:hover { background: var(--sg-accent-strong); }

.sg-btn--secondary,
button.groups-btn,
.groups-tools-actions summary {
  background: var(--sg-surface);
  border-color: var(--sg-border-control);
  color: var(--sg-navy-800);
}
.sg-btn--secondary:hover:not([disabled]),
button.groups-btn:not(.primary):hover,
.groups-tools-actions summary:hover { background: var(--sg-accent-soft); }

.sg-btn--ghost {
  background: transparent;
  border-color: transparent;
  color: var(--sg-navy-700);
}
.sg-btn--ghost:hover:not([disabled]) { background: var(--sg-accent-soft); }
/* RC1 · secondary+ghost: manda el borde de secondary */
.sg-btn--secondary.sg-btn--ghost { border-color: var(--sg-border-control); }

/* Destructivo: sobrio, no alarmista. Solo cancelar y equivalentes. */
.sg-btn--danger {
  background: var(--sg-surface);
  border-color: var(--sg-danger);
  color: var(--sg-danger);
}
.sg-btn--danger:hover:not([disabled]) { background: var(--sg-danger-soft); }

.sg-btn--sm { min-height: var(--sg-control-sm); padding: 0 var(--sg-3); font-size: var(--sg-fs-sm); }
.sg-btn--block { width: 100%; }

/* CAMPOS · el borde de un control es informacion. A 1.22:1 el campo
   anterior no se veia; este cumple el 3:1 de elemento no textual. */
.sg-field { display: flex; flex-direction: column; gap: var(--sg-1); }

.sg-label {
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-sm);
  font-weight: var(--sg-fw-semibold);
  letter-spacing: 0;
}

.auth-field input,
.sg-input,
.sg-select,
.sg-textarea {
  width: 100%;
  min-height: var(--sg-control);
  padding: var(--sg-2) var(--sg-3);
  border: 1px solid var(--sg-border-control);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-text);
  font-family: var(--sg-font);
  font-size: var(--sg-fs-md);
}
.sg-textarea { min-height: 88px; resize: vertical; }

.auth-field input:hover,
.sg-input:hover,
.sg-select:hover,
.sg-textarea:hover { border-color: var(--sg-navy-600); }

.auth-field input::placeholder,
.sg-input::placeholder,
.sg-textarea::placeholder { color: var(--sg-text-faint); }

.sg-input[aria-invalid="true"],
.sg-select[aria-invalid="true"],
.sg-textarea[aria-invalid="true"] { border-color: var(--sg-danger); }

/* El error se dice con texto, no solo con color: quien no distingue */
.sg-error {
  color: var(--sg-danger);
  font-size: var(--sg-fs-sm);
  font-weight: var(--sg-fw-semibold);
}
.sg-hint { color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }

/* BADGES · versalita de registro. Color fuerte sobre fondo suave;
   los seis pares medidos sobre ESE fondo, no sobre blanco. */
.sg-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--sg-1);
  padding: 3px var(--sg-2);
  border-radius: var(--sg-radius-sm);
  font-size: var(--sg-fs-xs);
  font-weight: var(--sg-fw-black);
  letter-spacing: var(--sg-ls-caps);
  text-transform: uppercase;
  white-space: nowrap;
}
.sg-badge--neutral { background: var(--sg-surface-sunken); color: var(--sg-text-muted); }
.sg-badge--ok      { background: var(--sg-ok-soft);        color: var(--sg-ok); }
.sg-badge--warn    { background: var(--sg-warn-soft);      color: var(--sg-warn); }
.sg-badge--danger  { background: var(--sg-danger-soft);    color: var(--sg-danger); }
.sg-badge--info    { background: var(--sg-info-soft);      color: var(--sg-info); }
.sg-badge--accent  { background: var(--sg-accent-soft);    color: var(--sg-accent-strong); }

/* TARJETAS · borde, no sombra. La tarjeta agrupa; no flota. */
.sg-card {
  padding: var(--sg-5);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
}
.sg-card--flush { padding: 0; overflow: hidden; }
.sg-card--raised { box-shadow: var(--sg-shadow); }

.sg-card-head {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sg-3);
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: var(--sg-4);
}
.sg-card-title {
  margin: 0;
  color: var(--sg-navy-800);
  font-size: var(--sg-fs-xl);
  font-weight: var(--sg-fw-bold);
  line-height: var(--sg-lh-tight);
  letter-spacing: var(--sg-ls-tight);
}
.sg-card-sub { margin: 0; color: var(--sg-text-muted); font-size: var(--sg-fs-md); }

/* TABLAS · donde SIGDA trabaja. Cabecera fija, regla fina entre
   filas, cifras a la derecha y tabulares. */
.sg-table-wrap {
  width: 100%;
  overflow-x: auto;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
}
.sg-table { width: 100%; border-collapse: collapse; font-size: var(--sg-fs-md); }
.sg-table th,
.sg-table td { padding: var(--sg-3) var(--sg-4); text-align: left; vertical-align: middle; }
.sg-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--sg-surface-alt);
  border-bottom: 1px solid var(--sg-border-strong);
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-xs);
  font-weight: var(--sg-fw-black);
  letter-spacing: var(--sg-ls-caps);
  text-transform: uppercase;
}
.sg-table tbody tr + tr td { border-top: 1px solid var(--sg-rule); }
.sg-table tbody tr:hover td { background: var(--sg-surface-alt); }
.sg-table .sg-num { text-align: right; font-variant-numeric: tabular-nums; }

/* SHELL   NAVEGACION */
.sg-shell { min-height: 100vh; background: var(--sg-bg); color: var(--sg-text); }

.sg-header {
  display: flex;
  align-items: center;
  gap: var(--sg-4);
  padding: var(--sg-3) var(--sg-5);
  background: var(--sg-navy-800);
  color: var(--sg-text-invert);
}
.sg-header-brand {
  color: var(--sg-text-invert);
  font-size: var(--sg-fs-lg);
  font-weight: var(--sg-fw-black);
  letter-spacing: var(--sg-ls-caps);
  text-decoration: none;
}
.sg-header-spacer { flex: 1 1 auto; }
.sg-header-meta { color: rgba(255, 255, 255, .78); font-size: var(--sg-fs-md); }

.sg-nav { display: flex; flex-wrap: wrap; gap: var(--sg-1); }
.sg-nav-link {
  display: inline-flex;
  align-items: center;
  min-height: var(--sg-control-sm);
  padding: 0 var(--sg-3);
  border-radius: var(--sg-radius-sm);
  color: rgba(255, 255, 255, .82);
  font-size: var(--sg-fs-md);
  font-weight: var(--sg-fw-semibold);
  text-decoration: none;
}
.sg-nav-link:hover { background: rgba(255, 255, 255, .12); color: var(--sg-text-invert); }
.sg-nav-link[aria-current="page"] {
  background: var(--sg-accent);
  color: var(--sg-text-invert);
}

.sg-main { padding: var(--sg-6) var(--sg-5); }
.sg-container { width: 100%; max-width: 1280px; margin: 0 auto; }

.sg-page-head { margin-bottom: var(--sg-6); }
.sg-page-title {
  margin: 0;
  color: var(--sg-navy-900);
  font-size: var(--sg-fs-3xl);
  font-weight: var(--sg-fw-black);
  line-height: var(--sg-lh-tight);
  letter-spacing: var(--sg-ls-tight);
}
.sg-page-sub { margin: var(--sg-1) 0 0; color: var(--sg-text-muted); font-size: var(--sg-fs-lg); }

.sg-stack { display: flex; flex-direction: column; gap: var(--sg-4); }
.sg-row { display: flex; flex-wrap: wrap; gap: var(--sg-3); align-items: center; }
.sg-grid {
  display: grid;
  gap: var(--sg-4);
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

/* ESTADOS VACIOS · un hueco explicado, no un recuadro punteado. */
.sg-empty {
  padding: var(--sg-8) var(--sg-5);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface-alt);
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-md);
  text-align: center;
}
.sg-empty[data-sigda-empty="SIN_DATOS"] {
  border-color: var(--sg-warn);
  background: var(--sg-warn-soft);
  color: var(--sg-warn);
}

/* ACCESIBILIDAD */
.sg-visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.sg-skip-link {
  position: absolute;
  left: var(--sg-3);
  top: -100px;
  z-index: 100;
  padding: var(--sg-2) var(--sg-4);
  border-radius: var(--sg-radius-sm);
  background: var(--sg-accent);
  color: var(--sg-text-invert);
  font-weight: var(--sg-fw-bold);
  text-decoration: none;
}
.sg-skip-link:focus { top: var(--sg-3); }

/* RESPONSIVE BASE */
@media (max-width: 720px) {
  .sg-header { flex-wrap: wrap; padding: var(--sg-3) var(--sg-4); }
  .sg-header-spacer { flex-basis: 100%; height: 0; }
  .sg-main { padding: var(--sg-4) var(--sg-3); }
  .sg-card { padding: var(--sg-4); }
  .sg-page-title { font-size: var(--sg-fs-2xl); }
  .sg-grid { grid-template-columns: 1fr; }
  .sg-btn { min-height: 38px; }
  .sg-input,
  .sg-select,
  .sg-textarea { min-height: 42px; font-size: var(--sg-fs-lg); }
  .sg-table th,
  .sg-table td { padding: var(--sg-2) var(--sg-3); }
}

@media (prefers-reduced-motion: reduce) {
  .sg-btn { transition: none; }
}

.sg-eyebrow { color: var(--sg-accent-strong); font-size: var(--sg-fs-xs); font-weight: var(--sg-fw-black); letter-spacing: var(--sg-ls-caps); text-transform: uppercase; }

/* BANDEJAS · la barra de color al costado era el tic mas reconocible
   del tablero generico. Manda el titulo y el orden de lectura. */
.sg-trays { display: flex; flex-direction: column; gap: var(--sg-4); margin-bottom: var(--sg-6); }
.sg-tray-row { display: flex; flex-wrap: wrap; gap: var(--sg-3); align-items: center; justify-content: space-between; padding: var(--sg-3) 0; border-top: 1px solid var(--sg-rule); }
.sg-tray-main { flex: 1 1 260px; min-width: 0; display: flex; flex-direction: column; gap: var(--sg-1); align-items: flex-start; }
.sg-tray-title { color: var(--sg-navy-800); font-size: var(--sg-fs-lg); font-weight: var(--sg-fw-bold); line-height: var(--sg-lh-tight); }
@media (max-width: 720px) { .sg-tray-row > .sg-btn { width: 100%; } }

/* WORKSPACE DE IMPARTICION */
.sg-wsheader { margin-top: var(--sg-3); padding: var(--sg-4); background: var(--sg-surface); border: 1px solid var(--sg-border); border-radius: var(--sg-radius); }
.sg-wsbar { display: flex; flex-wrap: wrap; gap: var(--sg-4); align-items: flex-start; justify-content: space-between; }
.sg-wsid { flex: 1 1 260px; min-width: 0; }
.sg-wstitle { display: block; color: var(--sg-navy-800); font-size: var(--sg-fs-xl); font-weight: var(--sg-fw-bold); line-height: var(--sg-lh-tight); letter-spacing: var(--sg-ls-tight); }
.sg-layer { display: flex; gap: var(--sg-2); margin-top: var(--sg-1); font-size: var(--sg-fs-md); }
.sg-layer-key { flex: 0 0 82px; color: var(--sg-text-muted); font-weight: var(--sg-fw-semibold); }
.sg-layer-val { flex: 1 1 auto; font-weight: var(--sg-fw-bold); }
.sg-layer-val--neutral { color: var(--sg-navy-700); }
.sg-layer-val--ok { color: var(--sg-ok); }
.sg-layer-val--warn { color: var(--sg-warn); }
.sg-layer-why { font-weight: var(--sg-fw-regular); color: var(--sg-text-muted); }
.sg-tabs { display: flex; flex-wrap: wrap; gap: var(--sg-1); margin: var(--sg-4) 0 0; border-bottom: 1px solid var(--sg-border); overflow-x: auto; }
.sg-tab { flex: 0 0 auto; min-height: var(--sg-control); padding: 0 var(--sg-4); border: 0; border-bottom: 2px solid transparent; background: none; color: var(--sg-text-muted); font-size: var(--sg-fs-md); font-weight: var(--sg-fw-semibold); cursor: pointer; }
.sg-tab:hover { color: var(--sg-navy-800); }
.sg-tab[aria-selected="true"] { color: var(--sg-accent-strong); border-bottom-color: var(--sg-accent); font-weight: var(--sg-fw-bold); }
@media (max-width: 720px) {
  .sg-wsheader { padding: var(--sg-3); }
  .sg-wsbar > .sg-btn { width: 100%; }
  .sg-layer-key { flex-basis: 68px; }
  .sg-tabs { flex-wrap: nowrap; }
}

/* SHELL GLOBAL */
.sg-sidebar { background: var(--sg-navy-900); color: var(--sg-text-invert); }
.sg-nav-label { color: rgba(255, 255, 255, .52); font-size: var(--sg-fs-xs); font-weight: var(--sg-fw-black); letter-spacing: var(--sg-ls-caps); text-transform: uppercase; }
/* SIGDA V92 · SHELL DE APLICACION
   El shell instala la tipografia una sola vez -la fundacion solo la
   declara-, para que ninguna pantalla vuelva a fijar su cuerpo. V91
   no declaraba cuerpo ni interlineado y cada componente lo resolvia
   por su cuenta entre 8.5 y 12px. */

body {
  font-family: var(--sg-font);
  font-size: var(--sg-fs-lg);
  line-height: var(--sg-lh-normal);
}

.sgx-admin-shell {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 89;
  overflow: hidden;
  background: var(--sg-navy-900);
  color: var(--sg-text);
  font-family: var(--sg-font);
  font-size: var(--sg-fs-lg);
  line-height: var(--sg-lh-normal);
}
.sgx-admin-shell.show { display: block; }

/* Sin registrar no interpola: getAnimations() devolvia cero y los
   180ms de AT4 eran ciertos en fuente y falsos en pantalla. AV5. */
@property --sgx-side{syntax:"<length>";inherits:true;initial-value:70px}
.sgx-app {
  /* 76px de riel compacto es el ancho que ya servia el producto y el
     que deja 44px de area tactil centrada con holgura. */
  --sgx-side: 76px;
  --sgx-top: 80px;
  display: grid;
  grid-template-columns: var(--sgx-side) minmax(0, 1fr);
  grid-template-rows: var(--sgx-top) minmax(0, 1fr);
  grid-template-areas:
    "brand top"
    "side main";
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  background: var(--sg-navy-900);
  transition: grid-template-columns 180ms cubic-bezier(.2,.7,.3,1), --sgx-side 180ms cubic-bezier(.2,.7,.3,1);
}
@media (prefers-reduced-motion: reduce) { .sgx-app { transition: none; } }

/* Marca */
.sgx-brand {
  grid-area: brand;
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  padding: 0 18px;
  background: var(--sg-navy-900);
  color: #fff;
  text-decoration: none;
}
.sgx-brand-mark {
  display: block;
  flex: 0 0 50px;
  width: 50px;
  height: 50px;
  border-radius: 0;
  background: transparent url('/assets/sigda-mark-v91.png') center / contain no-repeat;
  color: transparent;
  font-size: 0;
  overflow: hidden;
}
.sgx-brand-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.06; }
.sgx-brand-name { color: #fff; font-size: 22px; font-weight: 800; letter-spacing: -.02em; }
.sgx-brand-sub {
  margin-top: 3px;
  color: rgba(255,255,255,.76);
  font-size: var(--sg-fs-xs);
  font-weight: 500;
  line-height: 1.18;
}

/* Cabecera · segunda pata de la L */
.sgx-top {
  grid-area: top;
  display: flex;
  align-items: center;
  gap: 20px;
  min-width: 0;
  padding: 0 22px 0 14px;
  background: var(--sg-navy-900);
  color: #fff;
}
.sgx-domains {
  display: flex;
  flex: 1 1 auto;
  align-items: stretch;
  min-width: 0;
  height: 100%;
  overflow-x: auto;
  scrollbar-width: none;
}
.sgx-domains::-webkit-scrollbar { display: none; }
.sgx-domain {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  position: relative;
  min-width: max-content;
  padding: 0 19px;
  border: 0;
  background: transparent;
  color: rgba(255,255,255,.83);
  font-size: 14px;
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
}
.sgx-domain::after {
  content: "";
  position: absolute;
  left: 18px;
  right: 18px;
  bottom: 9px;
  height: 2px;
  border-radius: 2px;
  background: transparent;
}
.sgx-domain svg { width: 18px; height: 18px; flex: 0 0 18px; }
.sgx-domain:hover { color: #fff; background: rgba(255,255,255,.035); }
.sgx-domain.is-active {
  color: #fff;
  background: rgba(0,85,252,.10);
  font-weight: 600;
}
.sgx-domain.is-active::after { background: var(--sg-accent); }
.sgx-top .sigda-topbar-module { display: none; }

body.sigda-nav-resolving .sgx-nav-link,
body.sigda-nav-resolving .sgx-nav-label,
body.sigda-nav-resolving .sgx-domain { visibility: hidden; }
body.sigda-nav-resolving .sgx-nav-link { pointer-events: none; }

.sgx-user{position:relative;margin-left:auto}
.sgx-user-trigger{display:flex;align-items:center;gap:10px;padding:4px 8px 4px 4px;border:0;border-radius:var(--sg-radius-lg);background:none;color:#fff;font:inherit;text-align:left;cursor:pointer}
.sgx-user-trigger:hover,.sgx-user-trigger:focus-visible,[aria-expanded=true].sgx-user-trigger{background:rgba(255,255,255,.08)}
.sgx-user-trigger:focus-visible{outline:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.55)}
.sgx-avatar{display:grid;place-items:center;flex:0 0 38px;height:38px;border-radius:50%;background:var(--sg-accent);font-size:14px;font-weight:700}
.sgx-user-lines{display:flex;flex-direction:column;gap:2px;line-height:1.2}
.sgx-user-hi{max-width:180px;overflow:hidden;font-size:14px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}
.sgx-user-role{opacity:.72;font-size:var(--sg-fs-xs)}
.sgx-user-more{transition:transform var(--sg-transition)}
[aria-expanded=true] .sgx-user-more{transform:rotate(180deg)}

/* Sidebar */
.sgx-app .sgx-side {
  grid-area: side;
  display: flex;
  position: static;
  flex-direction: column;
  width: auto;
  height: auto;
  min-height: 0;
  padding: 12px 12px 14px;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: none;
  background: var(--sg-navy-900);
  border: 0;
}
.sgx-app .sgx-side::-webkit-scrollbar { width: 0; height: 0; }
.sgx-app .sgx-nav-group { margin: 0; }
.sgx-app .sgx-nav-group[hidden] { display: none; }
.sgx-app .sgx-nav-label {
  padding: 14px 10px 6px;
  color: rgba(255,255,255,.48);
  font-size: var(--sg-fs-xs);
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.sgx-app .sgx-nav-link {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 45px;
  margin: 0 0 3px;
  padding: 0 13px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: rgba(255,255,255,.86);
  font-size: 14px;
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
}
.sgx-app .sgx-nav-link:hover { background: rgba(255,255,255,.055); color: #fff; }
.sgx-app .sgx-nav-link.active {
  background: var(--sg-accent);
  color: #fff;
  font-weight: 600;
}
.sgx-app .sgx-nav-icon { display: grid; place-items: center; width: 20px; height: 20px; flex: 0 0 20px; }
.sgx-app .sgx-nav-icon svg { width: 20px; height: 20px; }
.sgx-app .sgx-nav-group--portales {
  margin-top: 11px;
  padding-top: 11px;
  border-top: 1px solid rgba(255,255,255,.12);
}
.sgx-nav-ext { margin-left: auto; opacity: .65; }
.sgx-nav-ext svg { width: 13px; height: 13px; }
/* El control NO vive en la lista: alli quedaba 415px bajo el corte
   de un .sgx-side que desborda sin barra que lo delate. Anclado al
   borde derecho del rail, fuera de ese flujo. AV1..AV4. */
.sgx-side-foot { margin: 0; padding: 0; border: 0; }
.sgx-collapse {
  display: grid;
  place-items: center;
  position: fixed;
  top: calc(50% + var(--sgx-top) / 2);
  left: var(--sgx-side);
  z-index: 12;
  width: 36px;
  height: 36px;
  padding: 0;
  border: 1px solid rgba(255,255,255,.32);
  border-radius: 50%;
  background: var(--sg-navy-800);
  color: #fff;
  cursor: pointer;
  transform: translate(-50%, -50%);
}
.sgx-collapse span:not(.sgx-nav-icon) { display: none; }

.sgx-app.is-expanded { --sgx-side: 224px; }
/* El nombre se recorta con la columna, no asoma apretado. */
.sgx-app .sgx-nav-link { overflow: hidden; }
.sgx-app .sgx-nav-link > span:not(.sgx-nav-icon) { white-space: nowrap; }
.sgx-app:not(.is-expanded) .sgx-brand-text,
.sgx-app:not(.is-expanded) .sgx-nav-label,
.sgx-app:not(.is-expanded) .sgx-nav-ext { display: none; }
.sgx-app:not(.is-expanded) .sgx-brand,
.sgx-app:not(.is-expanded) .sgx-nav-link { justify-content: center; padding-inline: 0; }
.sgx-app:not(.is-expanded) .sgx-brand-mark { flex-basis: 42px; width: 42px; height: 42px; }

@media (min-width: 861px) {
  /* V92-B · rotulo del riel compacto: el texto del marcado, no un content: */
  .sgx-app:not(.is-expanded) .sgx-nav-link { overflow: visible; position: relative; }
  .sgx-app:not(.is-expanded) .sgx-nav-link > span:not(.sgx-nav-icon) {
    position: absolute;
    top: 50%;
    left: calc(100% + 10px);
    z-index: 40;
    padding: 7px 11px;
    border-radius: var(--sg-radius);
    background: var(--sg-navy-800);
    color: #fff;
    font-size: var(--sg-fs-md);
    font-weight: var(--sg-fw-medium);
    line-height: 1;
    box-shadow: var(--sg-shadow);
    opacity: 0;
    transform: translateY(-50%);
    pointer-events: none;
    visibility: hidden;
  }
  .sgx-app:not(.is-expanded) .sgx-nav-link:hover > span:not(.sgx-nav-icon),
  .sgx-app:not(.is-expanded) .sgx-nav-link:focus-visible > span:not(.sgx-nav-icon) {
    opacity: 1;
    visibility: visible;
  }
  /* Y los catorce destinos dejan de ser una columna sin junturas: cada
     grupo del marcado se separa con una regla, asi el riel compacto
     conserva la agrupacion que la version abierta enseña con rotulos. */
  .sgx-app:not(.is-expanded) .sgx-nav-group + .sgx-nav-group {
    margin-top: var(--sg-2);
    padding-top: var(--sg-2);
    border-top: 1px solid rgba(255,255,255,.12);
  }
}

/* Main */
.sgx-app .admin-main {
  grid-area: main;
  display: block;
  width: 100%;
  min-width: 0;
  max-width: none;
  height: 100%;
  min-height: 0;
  margin: 0;
  /* El relleno lo pone la superficie, no el lienzo */
  padding: 0;
  border-radius: var(--sg-radius-lg) 0 0 0;
  background: var(--sg-bg);
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
}
.sgx-app .admin-main > * { width: 100%; max-width: none; }
.sgx-app .sg-card,
.sgx-app .v53-section,
.sgx-app .v53-hero {
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface);
  box-shadow: var(--sg-shadow-sm);
}

.sgx-foot {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin-top: 18px;
  padding: 10px 0 2px;
  border: 0;
  color: var(--sg-text-faint);
  font-size: var(--sg-fs-sm);
  text-align: center;
}
.sgx-foot > :last-child { margin-left: auto; }

/* Responsive */
@media (max-width: 1280px) {
  .sgx-app { --sgx-top: 72px; }
  .sgx-app.is-expanded { --sgx-side: 204px; }
  .sgx-brand { padding-inline: 14px; }
  .sgx-brand-mark { flex-basis: 44px; width: 44px; height: 44px; }
  .sgx-brand-name { font-size: 20px; }
  .sgx-domain { padding-inline: 13px; font-size: 12.5px; }
  .sgx-domain::after { left: 12px; right: 12px; bottom: 7px; }
  .sgx-app .sgx-nav-link { min-height: 42px; font-size: 13px; }
  .sgx-app .admin-main { padding: 20px; }
}
@media (max-width: 1024px) {
  .sgx-app.is-expanded { --sgx-side: 190px; }
  .sgx-domain { padding-inline: 10px; gap: 6px; }
  .sgx-domain svg { width: 16px; height: 16px; flex-basis: 16px; }
  .sgx-user-lines{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
}
/* MOVIL · el lateral se tumba, no se apaga. V91 hacia display:none
   sobre .sgx-side sin poner nada en su lugar: bajo 860px once de los
   catorce destinos solo se alcanzaban escribiendo la URL. Aqui la
   misma lista es un riel horizontal: mismo marcado, mismos permisos,
   sin una linea de JS nueva. */
@media (max-width: 860px) {
  .sgx-app {
    grid-template-columns: 56px minmax(0, 1fr);
    grid-template-rows: 56px auto minmax(0, 1fr);
    grid-template-areas:
      "brand top"
      "side  side"
      "main  main";
  }
  .sgx-brand { padding: 0; justify-content: center; }
  .sgx-brand-text { display: none; }
  .sgx-brand-mark { flex-basis: 34px; width: 34px; height: 34px; }

  .sgx-app .sgx-side {
    flex-direction: row;
    align-items: center;
    gap: var(--sg-1);
    padding: var(--sg-1) var(--sg-2);
    overflow-x: auto;
    overflow-y: hidden;
    border-top: 1px solid rgba(255, 255, 255, .10);
  }
  .sgx-app .sgx-nav-group {
    display: flex;
    flex: 0 0 auto;
    align-items: center;
    gap: var(--sg-1);
  }
  .sgx-app .sgx-nav-group--portales {
    margin: 0 0 0 var(--sg-1);
    padding: 0 0 0 var(--sg-2);
    border-top: 0;
    border-left: 1px solid rgba(255, 255, 255, .16);
  }
  .sgx-app .sgx-nav-label { display: none; }
  .sgx-app .sgx-nav-link {
    flex: 0 0 auto;
    gap: var(--sg-2);
    min-height: 44px;
    margin: 0;
    padding: 0 var(--sg-3);
    white-space: nowrap;
  }
  .sgx-side-foot,
  .sgx-collapse { display: none; }

  .sgx-top { padding: 0 8px 0 4px; gap: 4px; }
  .sgx-domain { padding-inline: 10px; font-size: var(--sg-fs-md); }
  .sgx-user-trigger{gap:4px;padding:6px 6px 6px 4px}
  .sgx-avatar{flex-basis:32px;height:32px;font-size:var(--sg-fs-md)}
  .sgx-app .admin-main { padding: 16px 12px; border-radius: 0; }
  .sgx-foot { flex-direction: column; align-items: center; gap: 4px; }
  .sgx-foot > :last-child { margin-left: 0; }
}

/* El chevron apunta adonde lleva. Ver AT2. */
.sgx-app .sgx-collapse svg { transition: transform 180ms cubic-bezier(.2,.7,.3,1); }
.sgx-app.is-collapsed .sgx-collapse svg { transform: rotate(180deg); }
@media (prefers-reduced-motion: reduce) { .sgx-app .sgx-collapse svg { transition: none; } }
/* El control se distingue: no navega, cambia la barra. */
.sgx-app .sgx-collapse:hover { border-color: #fff; background: var(--sg-accent); }
.sgx-app .sgx-collapse:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
/* Visualizacion de datos · V91.
   Cifras destacadas y lecturas compactas, declaradas una sola vez para
   todas las pantallas. V108: actividad por mes y barras (sg-months,
   sg-bars) tienen hoy un solo consumidor -el Portal Empresa- y viven en
   su hoja; Reportes dibuja su serie con eje y comparacion propios. */

/* Cifras destacadas */

.sg-kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--sg-3);
}
.sg-kpi {
  display: flex;
  flex-direction: column;
  gap: var(--sg-1);
  min-width: 0;
  padding: var(--sg-4);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
}
.sg-kpi small {
  font-size: var(--sg-fs-xs);
  font-weight: var(--sg-fw-black);
  letter-spacing: var(--sg-ls-caps);
  text-transform: uppercase;
  color: var(--sg-text-faint);
}
.sg-kpi strong {
  font-size: var(--sg-fs-3xl);
  font-weight: var(--sg-fw-black);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
  color: var(--sg-text);
}
.sg-kpi span { font-size: var(--sg-fs-md); color: var(--sg-text-muted); }
.sg-kpi--primary { border-color: var(--sg-accent); }
.sg-kpi--primary strong { color: var(--sg-accent-strong); }
/* Cancelados y excepciones: presentes, pero nunca como logro. */
.sg-kpi--warn strong { color: var(--sg-warn); }

/* Lectura compacta de cifras relacionadas */

.sg-readout {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--sg-3);
}
.sg-readout > div {
  padding: var(--sg-2) var(--sg-3);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface-alt);
}
.sg-readout small { display: block; color: var(--sg-text-muted); font-size: var(--sg-fs-xs); }
.sg-readout strong {
  display: block;
  font-size: var(--sg-fs-xl);
  font-weight: var(--sg-fw-black);
  font-variant-numeric: tabular-nums;
}

/* Responsive */

@media (max-width: 1200px) {
  .sg-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 860px) {
  .sg-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sg-readout { grid-template-columns: minmax(0, 1fr); }
}
/* SIGDA V92 · CENTRO DE ATENCION
   Responde una sola pregunta: que exige una accion mia hoy. Las tres
   bandejas mandan; las cifras van debajo porque describen, no piden.
   El codigo de color lo fija el runtime y se respeta: rojo bloquea,
   ambar avanza, verde espera a un tercero -no es un semaforo, es
   cuanta accion te reclama cada cosa-. V91 pintaba esos titulos a
   2.36:1 y 3.14:1; los tokens corregidos los suben a 5.63 y 4.74. */
/* V92-B · ritmo: 16 dentro de un bloque, 32 entre bloques */
.sg-home { display: grid; gap: var(--sg-6); align-content: start; padding: var(--sg-6) 26px var(--sg-5); }
.sg-home > #sigdaAttentionStatus { margin-top: calc(var(--sg-6) * -1 + var(--sg-2)); }
.sg-home-trace > summary { padding: var(--sg-3) 0; color: var(--sg-text-muted); font-size: var(--sg-fs-sm); font-weight: var(--sg-fw-medium); cursor: pointer; }
.sg-home-trace > * + * { margin-top: var(--sg-3); }
.sg-home-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sg-4);
  padding: 2px 2px 0;
}
.sg-home-head .sg-page-title { font-size: var(--sg-fs-3xl); }
.sg-home-head .sg-page-sub { margin-top: 3px; }
/* La identidad ya vive en el topbar. */
.sg-home-session { display: none; }

/* Tres bandejas protagonistas */
.sg-trays {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--sg-4);
  margin: 0;
}
.sg-trays > div { display: flex; min-width: 0; }
.sg-trays > div > .sg-tray { flex: 1 1 auto; }
.sg-tray {
  display: flex;
  flex-direction: column;
  gap: var(--sg-3);
  min-height: 168px;
  padding: var(--sg-5);
  border-radius: var(--sg-radius);
}
.sg-tray .sg-empty{padding:var(--sg-3) var(--sg-4)}
.sg-tray-head { display: flex; align-items: center; gap: var(--sg-3); }
/* Chip cuadrado, no burbuja: identifica estado, no ilustra. */
.sg-tray-icon {
  display: grid;
  flex: 0 0 40px;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: var(--sg-radius-sm);
}
.sg-tray-icon svg { width: 20px; height: 20px; }
.sg-tray-head > div { min-width: 0; }
/* V92-B · manda la cifra, el rotulo cede */
.sg-tray-title {
  margin: 0 0 var(--sg-1);
  font-size: var(--sg-fs-xs);
  font-weight: var(--sg-fw-black);
  letter-spacing: var(--sg-ls-caps);
  text-transform: uppercase;
}
.sg-tray-total {
  display: block;
  color: var(--sg-text);
  font-size: var(--sg-fs-4xl);
  font-weight: var(--sg-fw-black);
  font-variant-numeric: tabular-nums;
  line-height: 1;
  letter-spacing: var(--sg-ls-tight);
}
.sg-tray--stop .sg-tray-icon { background: var(--sg-danger-soft); color: var(--sg-danger); }
.sg-tray--stop .sg-tray-title { color: var(--sg-danger); }
.sg-tray--go .sg-tray-icon { background: var(--sg-warn-soft); color: var(--sg-warn); }
.sg-tray--go .sg-tray-title { color: var(--sg-warn); }
.sg-tray--wait .sg-tray-icon { background: var(--sg-ok-soft); color: var(--sg-ok); }
.sg-tray--wait .sg-tray-title { color: var(--sg-ok); }
/* V92-B · la lista absorbe la holgura: las tres bandejas acaban a la
   misma altura y su pie queda anclado. */
.sg-tray-list { display: grid; flex: 1 1 auto; align-content: start; gap: var(--sg-2); margin: 3px 0 0; padding: 0; list-style: none; }
.sg-tray-list li { display: grid; grid-template-columns: 22px minmax(0,1fr); align-items: baseline; gap: var(--sg-2); font-size: var(--sg-fs-md); }
.sg-tray-list li::before { display: none; }
.sg-tray-list b { min-width: 0; color: var(--sg-text); font-weight: var(--sg-fw-bold); text-align: right; }
.sg-tray-list span { color: var(--sg-text-muted); }
.sg-tray-scope { display: none; }
.sg-tray-cta {
  display: inline-flex;
  align-items: center;
  width: max-content;
  margin-top: auto;
  color: var(--sg-accent);
  font-size: var(--sg-fs-md);
  font-weight: var(--sg-fw-semibold);
  text-decoration: none;
}
.sg-tray-cta:hover { text-decoration: underline; color: var(--sg-accent-strong); }
/* Los contratos C2B siguen accesibles sin convertir la tarjeta en una lista infinita. */
.sg-tray-details { margin-top: 2px; border-top: 1px solid var(--sg-rule); }
.sg-tray-details > summary {
  padding-top: var(--sg-2);
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-xs);
  cursor: pointer;
  list-style-position: inside;
}
.sg-tray-details:not([open]) .sg-tray-row { display: none; }
.sg-tray-details .sg-tray-row { padding: var(--sg-2) 0; }
.sg-tray-details .sg-tray-title { color: var(--sg-text); font-size: var(--sg-fs-md); }
.sg-tray-details .sg-card-sub { font-size: var(--sg-fs-xs); }

/* CIFRAS · un panel de instrumento, no seis tarjetas flotando.
   Describen, no reclaman: van tras las bandejas y comparten caja.
   Seis tarjetas de 124px gastaban dos pantallas para seis numeros. */
.sg-home-figures {
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  overflow: hidden;
}
.sg-kpis--6 {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 0;
}
.sg-home-figures .sg-kpi {
  gap: 0;
  min-height: 0;
  padding: var(--sg-4);
  border: 0;
  border-left: 1px solid var(--sg-rule);
  border-radius: 0;
  background: transparent;
}
.sg-home-figures .sg-kpi:first-child { border-left: 0; }
/* Icono en linea con la etiqueta: apilado sumaba 42px por celda. */
.sg-kpi-icon {
  display: inline-grid;
  place-items: center;
  width: 16px;
  height: 16px;
  margin: 0 var(--sg-1) -3px 0;
  border-radius: 0;
  background: transparent;
  color: var(--sg-text-faint);
}
.sg-kpi-icon svg { width: 16px; height: 16px; }
.sg-home-figures .sg-kpi small { color: var(--sg-text-muted); font-size: var(--sg-fs-sm); font-weight: var(--sg-fw-medium); letter-spacing: 0; text-transform: none; }
.sg-home-figures .sg-kpi strong { margin-top: var(--sg-2); font-size: var(--sg-fs-3xl); font-weight: var(--sg-fw-black); letter-spacing: var(--sg-ls-tight); line-height: 1; }
.sg-home-figures .sg-kpi span { margin-top: 3px; color: var(--sg-text-faint); font-size: var(--sg-fs-xs); }

/* V92-B · lo cancelado se conserva, no se exhibe */
.sg-home-aside { display: grid; grid-template-columns: minmax(0,1fr); gap: var(--sg-3); }
.sg-home-aside .sg-card {
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.sg-home-aside .sg-card-head { display: block; margin: 0; padding: 0; border: 0; }
.sg-home-aside .sg-card-title {
  display: inline;
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-sm);
  font-weight: var(--sg-fw-semibold);
}
.sg-home-aside .sg-card-sub { display: none; }
.sg-home-aside .sg-readout {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sg-1) var(--sg-5);
  margin-top: var(--sg-1);
}
.sg-home-aside .sg-readout > div {
  display: flex;
  align-items: baseline;
  gap: var(--sg-2);
  padding: 0;
  border: 0;
  background: transparent;
}
.sg-home-aside .sg-readout small { color: var(--sg-text-faint); font-size: var(--sg-fs-sm); }
.sg-home-aside .sg-readout strong {
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-lg);
  font-weight: var(--sg-fw-bold);
}
.sg-quick { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: var(--sg-3); }
.sg-quick a {
  display: grid;
  gap: var(--sg-1);
  padding: var(--sg-4);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-text);
  text-decoration: none;
  transition: border-color var(--sg-transition), background var(--sg-transition);
}
.sg-quick a:hover { border-color: var(--sg-border-control); background: var(--sg-surface-alt); }
.sg-quick strong { font-size: var(--sg-fs-lg); font-weight: var(--sg-fw-semibold); }
.sg-quick span { color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }
.sg-quick a.primary { border-color: var(--sg-accent); background: var(--sg-accent-soft); }
.sg-quick a.primary strong { color: var(--sg-accent-strong); }
.sg-quick a.primary:hover { background: var(--sg-accent-soft); border-color: var(--sg-accent-strong); }
.sg-duo { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--sg-3); align-items: start; }
.sg-subcard { display: grid; gap: var(--sg-2); min-width: 0; }
.sg-subcard h3 { font-size: var(--sg-fs-lg); font-weight: var(--sg-fw-semibold); }
.sg-subcard > p, .sg-note { color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }
/* V92-B · pie de las bandejas */
.sg-home > #sigdaAttentionStatus { margin: 0; color: var(--sg-text-faint); text-align: right; }
.sg-home > #v53DashboardStatus { margin: 0; color: var(--sg-text-faint); }

@media (max-width: 1180px) {
  .sg-trays { grid-template-columns: minmax(0,1fr); }
  .sg-kpis--6 { grid-template-columns: repeat(3, minmax(0,1fr)); }
  .sg-home-figures .sg-kpi:nth-child(4) { border-left: 0; }
  .sg-home-figures .sg-kpi:nth-child(n+4) { border-top: 1px solid var(--sg-rule); }
  .sg-quick { grid-template-columns: repeat(2,minmax(0,1fr)); }
}
@media (max-width: 860px) {
  .sg-home-head { flex-direction: column; }
  .sg-kpis--6 { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .sg-home-figures .sg-kpi:nth-child(odd) { border-left: 0; }
  .sg-home-figures .sg-kpi:nth-child(n+3) { border-top: 1px solid var(--sg-rule); }
  .sg-quick, .sg-duo { grid-template-columns: minmax(0,1fr); }
  .sg-tray { min-height: 0; }
  .sg-home-trace>summary,.sg-tray-details>summary{padding-block:13px;}
  .sg-tray-cta{min-height:44px;}
}

@media (prefers-reduced-motion: reduce) {
  .sg-quick a { transition: none; }
}
/* Emision · composicion V91. La pantalla se declaraba en tres hojas y cinco capas que se */

.sg-em { display: grid; gap: var(--sg-5); max-width: 1500px; }

/* Cabecera y pasos */

.sg-em-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sg-6); }
.sg-em-head p { max-width: 760px; }

.sg-steps {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: var(--sg-2);
}
.sg-step {
  display: flex;
  align-items: center;
  gap: var(--sg-2);
  min-width: 0;
  min-height: 64px;
  padding: var(--sg-2) var(--sg-3);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface);
  color: var(--sg-text-muted);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.sg-step > span {
  display: grid;
  flex: 0 0 30px;
  place-items: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--sg-surface-alt);
  font-size: var(--sg-fs-md);
  font-weight: var(--sg-fw-black);
}
.sg-step strong { display: block; font-size: var(--sg-fs-lg); font-weight: var(--sg-fw-bold); }
.sg-step small { display: block; font-size: var(--sg-fs-2xs); }
.sg-step.current { border-color: var(--sg-accent); color: var(--sg-text); }
.sg-step.current > span { background: var(--sg-accent); color: var(--sg-text-invert); }
.sg-step.done > span { background: var(--sg-ok); color: var(--sg-text-invert); }

/* Etapas */

/* RC1 · la columna del paso se dimensionaba al contenido, asi que la
   tarjeta imponia 549px dentro de un viewport de 390 y se recortaba sin
   scroll. minmax(0,1fr) deja que encoja. */
.sg-em-stage { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sg-4); }
.sg-em-title { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sg-3); }
.sg-em-title > div { display: flex; align-items: center; gap: var(--sg-2); }
.sg-em-title > div > span {
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border-radius: var(--sg-radius-sm);
  background: var(--sg-accent-soft);
  color: var(--sg-accent-strong);
  font-weight: var(--sg-fw-black);
}
.sg-em-actions { display: flex; align-items: center; justify-content: space-between; gap: var(--sg-2); }

/* Tipo de documento */

.sg-em-types {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--sg-2);
}
.sg-em-type {
  position: relative;
  min-height: 72px;
  padding: var(--sg-3);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface);
  color: var(--sg-text);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.sg-em-type strong { display: block; font-weight: var(--sg-fw-bold); }
.sg-em-type small { display: block; font-size: var(--sg-fs-md); color: var(--sg-text-muted); }
.sg-em-type.active { border-color: var(--sg-accent); background: var(--sg-accent-soft); }
.sg-em-type.active::after {
  content: "✓";
  position: absolute;
  right: var(--sg-2);
  top: var(--sg-2);
  color: var(--sg-accent-strong);
  font-weight: var(--sg-fw-black);
}

.sg-em-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: var(--sg-3); }
.sg-em-row { display: flex; flex-wrap: wrap; gap: var(--sg-2); }

/* Carga del padron */

.sg-em-upload { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 300px); align-items: stretch; gap: var(--sg-3); }
/* RC1 · sin min-width:0 el input de archivo impone su ancho intrinseco
   -485px- y arrastra la tarjeta entera fuera del viewport a 390px. */
.sg-em-uploadbox {
  display: grid;
  min-width: 0;
  align-content: center;
  gap: var(--sg-1);
  min-height: 120px;
  padding: var(--sg-4);
  border: 1px dashed var(--sg-border-strong);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface-alt);
}
.sg-em-uploadbox strong { display: block; font-weight: var(--sg-fw-bold); }
.sg-em-uploadbox small { display: block; font-size: var(--sg-fs-md); color: var(--sg-text-muted); }
/* RC1 · el selector de archivo adopta el boton del sistema */
.sg-em-uploadbox input[type="file"] {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  color: var(--sg-text-muted);
  font-family: var(--sg-font);
  font-size: var(--sg-fs-md);
}
.sg-em-uploadbox input[type="file"]::file-selector-button {
  margin-right: var(--sg-3);
  min-height: var(--sg-control);
  padding: 0 var(--sg-4);
  border: 1px solid var(--sg-border-control);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-navy-800);
  font-family: var(--sg-font);
  font-size: var(--sg-fs-md);
  font-weight: var(--sg-fw-semibold);
  cursor: pointer;
}
.sg-em-uploadbox input[type="file"]::file-selector-button:hover {
  border-color: var(--sg-accent);
  background: var(--sg-accent-soft);
  color: var(--sg-accent-strong);
}
.sg-em-upload > .sg-em-uploadbox:last-child { min-height: auto; }

.sg-em-paste { overflow: hidden; border: 1px solid var(--sg-border); border-radius: var(--sg-radius-lg); }
.sg-em-paste > summary { padding: var(--sg-3); cursor: pointer; font-weight: var(--sg-fw-bold); }
.sg-em-paste > summary::-webkit-details-marker { display: none; }
.sg-em-paste-body { display: grid; gap: var(--sg-3); padding: 0 var(--sg-3) var(--sg-3); }

/* Resultado de la carga */

/* RC1 · una banda, como el Panel y los listados */
.sg-em-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 0;
  overflow: hidden;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
}
.sg-em-stat {
  min-height: 0;
  padding: var(--sg-3) var(--sg-4);
  border-left: 1px solid var(--sg-rule);
  border-radius: 0;
  background: transparent;
}
.sg-em-stat:first-child { border-left: 0; }
.sg-em-stat small { display: block; font-size: var(--sg-fs-2xs); color: var(--sg-text-faint); }
.sg-em-stat strong {
  display: block;
  font-size: var(--sg-fs-2xl);
  font-weight: var(--sg-fw-black);
  font-variant-numeric: tabular-nums;
}
/* RC1 · limpiar el lote pertenece a la tabla que limpia, no a la fila de
   navegacion: apilados a la izquierda parecian un tropiezo. */
#v37Clear { margin-left: auto; }
.sg-em-stage[data-v54-panel="2"] .sg-em-row:has(#v37Clear) { justify-content: flex-end; margin-top: calc(var(--sg-3) * -1); }
.sg-em-summary { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sg-2) var(--sg-5); }
.sg-em-summary span { white-space: nowrap; }

/* El runtime marca cada aviso con ok, warn o err al escribirlo. Esos
   tres son los estados que la emision sabe distinguir. */
.sg-hint.ok { color: var(--sg-ok); }
.sg-hint.warn { color: var(--sg-warn); }
.sg-hint.err { color: var(--sg-danger); }

/* Revision */

.sg-em-review { display: grid; grid-template-columns: minmax(0, 1fr) minmax(250px, 300px); align-items: start; gap: var(--sg-4); }
.sg-em-message { font-size: var(--sg-fs-md); color: var(--sg-text-muted); }

/* Vista previa */

.sg-em-preview-card { min-width: 0; }
.sg-em-preview { max-width: 1150px; }
.sg-em-canvas {
  position: relative;
  max-height: 600px;
  overflow: auto;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface-alt);
}
.sg-em-nav { display: flex; align-items: center; justify-content: space-between; gap: var(--sg-2); }
.sg-em-nav button { width: 40px; min-width: 40px; height: 40px; }

/* Emision y descargas */

/* RC1 · un ancho, un ritmo. Ver docs/DESIGN_V92.md */
.sg-em-final { min-width: 0; display: grid; gap: var(--sg-5); }
.sg-em-final > p { margin: 0; }
.sg-em-output { display: grid; gap: var(--sg-3); max-width: none; }
.sg-em-gen { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--sg-2); }
.sg-em-gen .sg-btn { min-height: 72px; }
.sg-em-gen strong { display: block; }
.sg-em-gen small { display: block; font-size: var(--sg-fs-2xs); color: var(--sg-text-muted); }
/* RC1 · boton del sistema, no barra de 760px */
.sg-em-official { width: auto; min-height: var(--sg-control); justify-self: end; }
/* Lo que ya se emitio no se vuelve a emitir: la nota dice por que el
   boton desaparece, y es lo unico que queda en su lugar. */
.sg-em-lock {
  padding: var(--sg-3);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-warn-soft);
  color: var(--sg-warn);
  font-size: var(--sg-fs-md);
}

/* ===================================================================== */

.sg-em-stage[hidden],
.sg-em-summary[hidden] { display: none; }

/* Hasta que no hay padron cargado no hay nada que revisar ni que */
[data-v54-panel="2"]:not(.v742c3b-has-data) .sg-em-stats,
[data-v54-panel="2"]:not(.v742c3b-has-data) .sg-table-wrap,
[data-v54-panel="2"]:not(.v742c3b-has-data) #v37Clear,
[data-v54-panel="2"]:not(.v742c3b-has-data) #v742c3bReview { display: none; }

/* RC1 · el estado vacio se centra y no parece una fila */
#v37Tbody td[colspan],
#historyBody td[colspan],
#participantsBody td[colspan] {
  height: 88px;
  color: var(--sg-text-muted);
  text-align: center;
  vertical-align: middle;
}

/* El aviso de carga solo aparece cuando el usuario ya intento algo. */
[data-v54-panel="2"]:not(.v742c3b-has-data):not(.v742c3b-touched) #v37BatchStatus { display: none; }
/* Un lote correcto no necesita anunciarse; solo se avisa lo que falla. */
[data-v54-panel="2"] #v37BatchStatus.ok { display: none; }
[data-v54-panel="3"] .sg-em-message.ok { display: none; }

/* Cuando todo el lote comparte curso, fecha, duracion y tipo, esas */
.sg-table.v742c4b-homogeneous th:nth-child(4),
.sg-table.v742c4b-homogeneous td:nth-child(4),
.sg-table.v742c4b-homogeneous th:nth-child(5),
.sg-table.v742c4b-homogeneous td:nth-child(5),
.sg-table.v742c4b-homogeneous th:nth-child(6),
.sg-table.v742c4b-homogeneous td:nth-child(6),
.sg-table.v742c4b-homogeneous th:nth-child(7),
.sg-table.v742c4b-homogeneous td:nth-child(7) { display: none; }

/* Antes de emitir no hay nada que descargar; despues de emitir no hay
   nada que volver a emitir. */
[data-v54-panel="4"]:not(.v742c6b-issued) .sg-em-gen { display: none; }
[data-v54-panel="4"].v742c6b-issued #v37Official,
[data-v54-panel="4"].v742c6b-issued #v37OfficialNote { display: none; }
.sg-em-gen .sg-btn:disabled { display: none; }
#v37OutputStatus:empty { display: none; }

/* Responsive */

@media (max-width: 1100px) {
  .sg-em-review,
  .sg-em-upload { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 860px) {
  .sg-em-head { flex-direction: column; }
  .sg-steps { grid-auto-flow: row; grid-auto-columns: auto; }
  .sg-em-title { flex-direction: column; }
  .sg-em-form { grid-template-columns: minmax(0, 1fr); }
  .sg-em-actions { flex-wrap: wrap; align-items: stretch; }
  .sg-em-actions > * { flex: 1 1 auto; }
}

/* ===================================================================== */
#emissionCenter { gap: 14px; width: 100%; max-width: none; }
#emissionCenter > .sg-page-head { margin: 0; }
#emissionCenter .sg-em-head {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  box-shadow: none;
}
#emissionCenter .sg-em-head > div:first-child { display: none; }
#emissionCenter .history-head-actions { display: flex; gap: 7px; }
#emissionCenter .sg-steps {
  grid-auto-flow: column;
  grid-auto-columns: minmax(0,1fr);
  gap: 9px;
}
#emissionCenter .sg-step {
  min-height: 54px;
  padding: 8px 12px;
  border-radius: 10px;
  box-shadow: none;
}
#emissionCenter .sg-step > span { flex-basis: 26px; width: 26px; height: 26px; font-size: var(--sg-fs-sm); }
#emissionCenter .sg-step strong { font-size: var(--sg-fs-sm); }
#emissionCenter .sg-step small { margin-top: 2px; font-size: var(--sg-fs-xs); color: var(--sg-text-faint); }
#emissionCenter .sg-step.current { background: var(--sg-accent-soft); }
#emissionCenter .sg-em-stage > .sg-card { padding: 16px 18px; }
#emissionCenter .sg-em-title { margin-bottom: 6px; }
#emissionCenter .sg-em-title h2 { margin: 0; color: var(--sg-text); font: 700 14px var(--sg-font); }
#emissionCenter .sg-em-title > div > span { width: 30px; height: 30px; border-radius: 8px; font-size: var(--sg-fs-xs); }
#emissionCenter .sg-em-stage > .sg-card > p { margin: 3px 0 12px; color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }
#emissionCenter .sg-em-types { grid-template-columns: repeat(4,minmax(0,1fr)); gap: 9px; }
#emissionCenter .sg-em-type { min-height: 62px; padding: 10px 12px; border-radius: 9px; }
#emissionCenter .sg-em-type strong { font-size: var(--sg-fs-sm); }
#emissionCenter .sg-em-type small { margin-top: 3px; font-size: var(--sg-fs-xs); }
#emissionCenter .sg-em-form { grid-template-columns: repeat(3,minmax(0,1fr)); gap: 10px; margin-top: 12px; }
#emissionCenter .sg-field label { color: var(--sg-text-muted); font-size: var(--sg-fs-xs); font-weight: 600; }
#emissionCenter .sg-field input,#emissionCenter .sg-field select,#emissionCenter .sg-field textarea {
  min-height: 38px; border-radius: 8px; border-color: var(--sg-border); font-size: var(--sg-fs-sm);
}
#emissionCenter .sg-hint { margin-top: 4px; font-size: var(--sg-fs-xs); line-height: 1.35; }
#emissionCenter .sg-em-upload { grid-template-columns: minmax(0,1fr) 260px; gap: 10px; }
#emissionCenter .sg-em-uploadbox { min-height: 96px; padding: 14px; border-radius: 10px; }
#emissionCenter .sg-em-stats { grid-template-columns: repeat(auto-fit,minmax(120px,1fr)); gap: 9px; }
#emissionCenter .sg-em-stat { min-height: 70px; padding: 11px 12px; border-radius: 9px; }
#emissionCenter .sg-em-stat strong { font-size: 18px; }
#emissionCenter .sg-em-review { grid-template-columns: minmax(0,1fr) 280px; gap: 12px; }
#emissionCenter .sg-em-canvas { max-height: 510px; border-radius: 10px; }

@media (max-width: 1100px) {
  #emissionCenter .sg-em-form { grid-template-columns: repeat(2,minmax(0,1fr)); }
  #emissionCenter .sg-em-types { grid-template-columns: repeat(2,minmax(0,1fr)); }
  #emissionCenter .sg-em-review,#emissionCenter .sg-em-upload { grid-template-columns: minmax(0,1fr); }
}
@media (max-width: 860px) {
  #emissionCenter .sg-em-head { position: static; justify-content: flex-start; }
  #emissionCenter .sg-steps { grid-auto-flow: row; grid-auto-columns: auto; }
  #emissionCenter .sg-em-form,#emissionCenter .sg-em-types { grid-template-columns: minmax(0,1fr); }
}
/* Modal · V91.
   El modal de curso existente traia su propia hoja inyectada desde el
   runtime con createElement("style"): 4 KB de colores literales, blur
   y una sombra que no existe en el sistema. Era la unica pantalla de
   SIGDA con estilos fuera del build, invisible para todos los gates
   de CSS. Ahora es un componente mas. */

.sg-modal {
  position: fixed;
  inset: 0;
  z-index: 150000;
  display: none;
  align-items: center;
  justify-content: center;
  padding: var(--sg-6);
  background: rgba(5, 26, 47, .5);
}
.sg-modal.show { display: flex; }

.sg-modal-card {
  width: min(720px, 96vw);
  max-height: 92vh;
  overflow: auto;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface);
  box-shadow: var(--sg-shadow-lg);
}
.sg-modal-head { padding: var(--sg-5) var(--sg-5) var(--sg-4); border-bottom: 1px solid var(--sg-border); }
.sg-modal-head small {
  display: block;
  margin-bottom: var(--sg-1);
  font-size: var(--sg-fs-2xs);
  font-weight: var(--sg-fw-black);
  letter-spacing: var(--sg-ls-caps);
  text-transform: uppercase;
  color: var(--sg-text-faint);
}
.sg-modal-head h2 { margin: 0; font-size: var(--sg-fs-2xl); line-height: 1.2; color: var(--sg-text); }
.sg-modal-head p { margin: var(--sg-2) 0 0; max-width: 600px; font-size: var(--sg-fs-md); line-height: 1.55; color: var(--sg-text-muted); }
.sg-modal-body { padding: var(--sg-5); }
.sg-modal-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sg-4); }
.sg-modal-grid .sg-field--full { grid-column: 1 / -1; }
.sg-modal-note {
  margin-top: var(--sg-4);
  padding: var(--sg-3);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface-alt);
  font-size: var(--sg-fs-md);
  line-height: 1.55;
  color: var(--sg-text-muted);
}
.sg-modal-actions { display: flex; justify-content: flex-end; gap: var(--sg-2); margin-top: var(--sg-5); }

@media (max-width: 700px) {
  .sg-modal-grid { grid-template-columns: minmax(0, 1fr); }
  .sg-modal-grid .sg-field--full { grid-column: auto; }
  .sg-modal-actions { flex-direction: column-reverse; }
  .sg-modal-actions button { width: 100%; }
}
/* Superficies publicas · V91. La validacion por QR y el expediente del participante son lo unico */

/* Cabeceras publicas */

.val-top,
.portal-top { background: var(--sg-navy-900); color: var(--sg-text-invert); }
.val-top-inner,
.portal-top-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sg-5);
  width: min(1180px, calc(100% - 40px));
  min-height: 72px;
  margin: 0 auto;
}
.val-brand strong,
.portal-brand strong { display: block; font-size: var(--sg-fs-lg); font-weight: var(--sg-fw-black); }
.val-brand span,
.portal-brand span { display: block; font-size: var(--sg-fs-2xs); color: rgba(255, 255, 255, .7); }
.portal-brand{display:flex;align-items:center;gap:var(--sg-2)}
.portal-brand .portal-brand-mark{display:block;flex:0 0 38px;width:38px;height:38px;border-radius:0;background:transparent url('/assets/sigda-mark-v91.png') center / contain no-repeat;color:transparent;font-size:0;overflow:hidden}

.val-main,
.portal-main {
  display: grid;
  gap: var(--sg-5);
  width: min(1180px, calc(100% - 32px));
  margin: var(--sg-6) auto;
}

/* Validacion de un documento */

.val-loading {
  display: grid;
  place-items: center;
  gap: var(--sg-3);
  min-height: 320px;
  color: var(--sg-text-muted);
}
.val-spin {
  width: 42px;
  height: 42px;
  border: 3px solid var(--sg-border);
  border-top-color: var(--sg-accent);
  border-radius: 50%;
  animation: val-spin 900ms linear infinite;
}
@keyframes val-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .val-spin { animation-duration: 3s; }
}

/* El veredicto es lo primero y lo mas grande: quien escanea un QR
   viene a saber si el documento es autentico, no a leer una ficha. */
.val-state { display: grid; justify-items: center; gap: var(--sg-3); text-align: center; }
.val-state p { max-width: 680px; color: var(--sg-text-muted); }
/* Tres veredictos, tres colores. Son los que emite el runtime: sin */
.val-icon {
  display: grid;
  place-items: center;
  width: 86px;
  height: 86px;
  border-radius: 50%;
  background: var(--sg-ok-soft);
  color: var(--sg-ok);
  font-size: var(--sg-fs-3xl);
}
.val-state.cancel .val-icon { background: var(--sg-warn-soft); color: var(--sg-warn); }
.val-state.bad .val-icon { background: var(--sg-danger-soft); color: var(--sg-danger); }
.val-state.cancel h1 { color: var(--sg-warn); }
.val-state.bad h1 { color: var(--sg-danger); }

.val-card { overflow: hidden; }
.val-row {
  display: grid;
  grid-template-columns: 38% 62%;
  align-items: center;
  gap: var(--sg-4);
  min-height: 54px;
  padding: var(--sg-2) var(--sg-4);
  border-top: 1px solid var(--sg-border);
}
.val-row > span { font-size: var(--sg-fs-md); color: var(--sg-text-muted); }
.val-row strong { overflow-wrap: anywhere; }
.val-folio {
  display: inline-flex;
  padding: var(--sg-1) var(--sg-2);
  border-radius: var(--sg-radius-sm);
  background: var(--sg-surface-alt);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
}
.val-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sg-2); }
.val-action { min-height: 50px; }

/* Las tres garantias que sostienen el documento: sello, hash y
   trazabilidad. Van juntas porque solo significan algo juntas. */
.val-security,
.dossier-security { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sg-2); }
.val-sec,
.dossier-sec {
  padding: var(--sg-3);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface-alt);
}
.val-sec small,
.dossier-sec small { display: block; font-size: var(--sg-fs-2xs); color: var(--sg-text-faint); }
.val-sec strong,
.dossier-sec strong { display: block; overflow-wrap: anywhere; font-size: var(--sg-fs-md); }

/* Expediente del participante */

.portal-view { position: fixed; inset: 0; display: none; overflow: auto; background: var(--sg-bg); }
.portal-view.show { display: block; }
.portal-search { display: grid; gap: var(--sg-3); max-width: 760px; }
.portal-auth-label { font-size: var(--sg-fs-2xs); font-weight: var(--sg-fw-black); letter-spacing: var(--sg-ls-caps); text-transform: uppercase; color: var(--sg-text-faint); }
.portal-search-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--sg-2); }
.portal-msg { display: none; }
.portal-msg.show { display: block; font-size: var(--sg-fs-md); color: var(--sg-text-muted); }
.portal-profile { display: none; }
.portal-profile.show { display: grid; gap: var(--sg-5); }
.portal-session-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sg-3);
  padding: var(--sg-3) var(--sg-4);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-ok-soft);
}
.portal-session-bar small { display: block; font-size: var(--sg-fs-2xs); color: var(--sg-ok); }
.portal-claim { display: grid; gap: var(--sg-3); }
.portal-claim-head strong { display: block; font-weight: var(--sg-fw-bold); }
.portal-claim-head span { font-size: var(--sg-fs-md); color: var(--sg-text-muted); }

.portal-hero { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(320px, .75fr); align-items: stretch; gap: var(--sg-4); }
.portal-person { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(260px, .6fr); align-items: start; gap: var(--sg-5); }
.portal-person > small,
.portal-person > h2,
.portal-person > p { grid-column: 1; }
.portal-person h2 { max-width: 560px; font-size: var(--sg-fs-2xl); font-weight: var(--sg-fw-black); }
.portal-meta { grid-column: 2; grid-row: 1 / span 3; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-content: start; gap: var(--sg-2); }
.portal-meta div { min-height: 88px; padding: var(--sg-3); border-radius: var(--sg-radius-lg); background: var(--sg-surface-alt); }
.portal-meta span { display: block; font-size: var(--sg-fs-2xs); color: var(--sg-text-faint); }
.portal-meta strong { display: block; overflow-wrap: anywhere; }
.portal-latest { display: flex; flex-direction: column; }
.portal-latest .latest-box { display: flex; flex: 1; flex-direction: column; justify-content: center; gap: var(--sg-1); }
.portal-latest strong { display: block; font-size: var(--sg-fs-xl); font-weight: var(--sg-fw-black); }
.portal-latest span { display: block; font-size: var(--sg-fs-md); color: var(--sg-text-muted); }

.portal-grid { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(310px, .55fr); gap: var(--sg-4); align-items: start; }
.portal-list { display: grid; gap: var(--sg-2); }
.portal-item {
  display: grid;
  gap: var(--sg-1);
  padding: var(--sg-3);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius-lg);
  background: var(--sg-surface);
}
.portal-item-top { display: flex; justify-content: space-between; gap: var(--sg-2); }
.portal-item-meta,
.portal-item-actions { display: flex; flex-wrap: wrap; gap: var(--sg-2); }
.portal-chip {
  display: inline-flex;
  align-items: center;
  min-height: 25px;
  padding: 0 var(--sg-2);
  border-radius: var(--sg-radius-pill);
  background: var(--sg-surface-alt);
  font-size: var(--sg-fs-md);
  color: var(--sg-text-muted);
}
.portal-mini,
.portal-teacher { font-size: var(--sg-fs-md); color: var(--sg-text-muted); }

.portal-skills { display: grid; gap: var(--sg-3); }
.portal-skill-head { display: flex; justify-content: space-between; gap: var(--sg-2); font-size: var(--sg-fs-md); }
.portal-bar { height: 9px; overflow: hidden; border-radius: var(--sg-radius-pill); background: var(--sg-surface-alt); }
.portal-bar i { display: block; height: 100%; border-radius: var(--sg-radius-pill); background: var(--sg-accent); }

.dossier-hero { display: grid; gap: var(--sg-3); }
/* Mismos tres veredictos que la validacion publica, con los nombres */
.dossier-status {
  display: inline-flex;
  align-items: center;
  gap: var(--sg-1);
  padding: var(--sg-1) var(--sg-2);
  border-radius: var(--sg-radius-pill);
  background: var(--sg-ok-soft);
  color: var(--sg-ok);
  font-size: var(--sg-fs-md);
  font-weight: var(--sg-fw-bold);
}
.dossier-status.cancel { background: var(--sg-warn-soft); color: var(--sg-warn); }
.dossier-status.review { background: var(--sg-info-soft); color: var(--sg-info); }
.dossier-data { overflow: hidden; }
.dossier-row {
  display: grid;
  grid-template-columns: 38% 62%;
  align-items: start;
  gap: var(--sg-3);
  padding: var(--sg-2) var(--sg-4);
  border-top: 1px solid var(--sg-border);
}
.dossier-row > span { font-size: var(--sg-fs-md); color: var(--sg-text-muted); }
.dossier-row strong { overflow-wrap: anywhere; }
.dossier-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sg-2); }
.dossier-action { min-height: 46px; }
.dossier-loading { padding: var(--sg-6); color: var(--sg-text-muted); text-align: center; }

/* Responsive */

@media (max-width: 1024px) {
  .portal-hero,
  .portal-grid,
  .portal-person { grid-template-columns: minmax(0, 1fr); }
  .portal-meta { grid-column: 1; grid-row: auto; }
}
@media (max-width: 760px) {
  .val-main,
  .portal-main { width: min(100% - 18px, 1180px); }
  .val-top-inner,
  .portal-top-inner { width: min(100% - 18px, 1180px); min-height: 64px; }
  .val-icon { width: 70px; height: 70px; }
  .val-row,
  .dossier-row { grid-template-columns: minmax(0, 1fr); gap: var(--sg-1); min-height: 0; }
  .val-actions,
  .val-security,
  .dossier-actions,
  .dossier-security,
  .portal-meta,
  .portal-search-row { grid-template-columns: minmax(0, 1fr); }
}

/* Puerta de entrada */

/* Ninguna hoja viva daba tipografia al body de esta ruta: por eso salia
   en Times. Los tokens ya estaban ahi; faltaba aplicarlos. */
body:has(.auth-card),
body:has(.sigda-gateway-v5a) {background: var(--sg-bg);color: var(--sg-text);font-family: var(--sg-font);-webkit-font-smoothing: antialiased;}
#firebaseLoginForm { display: grid; gap: 13px; }
/* Un error de acceso se lee sin buscarlo, y no ocupa sitio cuando no
   hay nada que decir. */
.auth-msg {margin: 0;color: var(--sg-danger);font-size:var(--sg-fs-sm);font-weight:500;line-height:1.45;}
.auth-msg:empty { display: none; }
/* Un estado, no los dos a la vez. El runtime alterna con .show; sin
   ella se veian juntos el formulario y "cerrar sesion". */
.auth-session { display: none; gap: 14px; }
.auth-session.show { display: grid; }
.auth-user { display: grid; gap: 3px; min-width: 0; }
.auth-user strong {color: var(--sg-text);font: 600 12px var(--sg-font);overflow-wrap: anywhere;}
.auth-user span, .auth-user small {color: var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:400;}
.auth-session-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.auth-session-actions a,
.auth-session-actions button {display: inline-flex;align-items: center;justify-content: center;min-height: 36px;padding: 0 14px;border: 1px solid var(--sg-border);border-radius: 8px;background: var(--sg-surface);color: var(--sg-accent);font-size:var(--sg-fs-sm);font-weight:600;text-decoration: none;cursor: pointer;}
.auth-session-actions a.primary {border-color: var(--sg-accent);background: var(--sg-accent);color: var(--sg-text-invert);}
.auth-session-actions a:hover,
.auth-session-actions button:hover { border-color: var(--sg-accent-soft); background: var(--sg-accent-soft); }
.auth-session-actions a.primary:hover { background: var(--sg-accent-strong); }
@media (max-width: 640px) {.auth-session-actions a,
  .auth-session-actions button { flex: 1 1 100%; }}
/* La comprobacion anterior miro si el selector existia en alguna hoja, */
.auth-card {display: grid;gap: 16px;width: min(420px, 100%);margin: 0 auto;padding: 26px;border: 1px solid var(--sg-border);border-radius: 14px;background: var(--sg-surface);box-shadow: var(--sg-shadow-sm);}
.auth-card-head { display: grid; gap: 5px; }
.auth-card-head h1, .auth-card-head h2 {margin: 0;color: var(--sg-text);font: 700 20px/1.2 var(--sg-font);letter-spacing: -.02em;}
.auth-card-head p {margin: 0;color: var(--sg-text-muted);font: 400 11.5px/1.45 var(--sg-font);}
.auth-field { display: grid; gap: 5px; min-width: 0; }
.auth-field label {color: var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:600;}
.auth-field input::placeholder { color: var(--sg-text-faint); }
.auth-field input:focus {outline: 0;border-color: var(--sg-accent);box-shadow: var(--sg-focus-ring);}
.auth-submit {display: inline-flex;align-items: center;justify-content: center;width: 100%;min-height: 42px;padding: 0 16px;border: 1px solid var(--sg-accent);border-radius: 9px;background: var(--sg-accent);color: var(--sg-text-invert);font: 700 12px var(--sg-font);cursor: pointer;}
.auth-note { color: var(--sg-text-faint); font-size:var(--sg-fs-xs);font-weight:400;line-height:1.45; }
.sigda-gateway-header-v5a,
.sigda-home-header-v245 {display: flex;align-items: center;gap: 12px;max-width: 1100px;margin: 0 auto;padding: 18px 24px;}
.sigda-gateway-brand-copy-v5a { display: grid; gap: 2px; min-width: 0; }
.sigda-gateway-brand-copy-v5a strong {color: var(--sg-text);font: 800 18px/1.1 var(--sg-font);letter-spacing: -.02em;text-decoration: none;}
.sigda-gateway-brand-copy-v5a small,
.sigda-gateway-brand-copy-v5a span {color: var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:500;line-height:1.3;text-decoration: none;}
.auth-top { border-bottom: 1px solid var(--sg-border); background: var(--sg-surface); }
.auth-top-inner {display: flex; align-items: center; justify-content: space-between;gap: 16px; max-width: 1100px; margin: 0 auto; padding: 12px 24px;}
.auth-brand { display: flex; align-items: center; gap: 11px; color: inherit; text-decoration: none; }
/* .auth-brand-mark la gobierna gateway-v92.css (.auth-view.show .auth-brand-mark):
   el chip navy de 11px que vivia aqui era el mismo duplicado. */
.auth-brand strong { display: block; color: var(--sg-text); font: 800 16px/1.15 var(--sg-font); letter-spacing: -.02em; }
.auth-brand span { display: block; color: var(--sg-text-muted); font-size:var(--sg-fs-sm);font-weight:500;line-height:1.3; }
.auth-back { color: var(--sg-accent); font-size:var(--sg-fs-sm);font-weight:600; text-decoration: none; white-space: nowrap; }
.auth-back:hover { color: var(--sg-accent-strong); }
.auth-main { display: grid; place-items: center; padding: 40px 24px; }

.sigda-home-link-v245,.sigda-gateway-portal-v5a{text-decoration:none;}
.sigda-home-link-v245 strong,.sigda-gateway-portal-v5a strong{display:block;color:var(--sg-text);font:700 13px/1.2 var(--sg-font);text-decoration:none;}
.sigda-home-link-v245 small,.sigda-gateway-portal-copy-v5a,.sigda-gateway-portal-v5a small{display:block;margin-top:3px;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:400;line-height:1.4;text-decoration:none;}
.sigda-home-link-v245 b,.sigda-gateway-portal-v5a b{display:inline-block;margin-top:8px;color:var(--sg-accent);font:600 12px var(--sg-font);text-decoration:none;}
.sigda-home-form-v245 button,.sigda-home-submit-v245{min-height:42px;padding:0 14px;border:1px solid var(--sg-accent);border-radius:9px;background:var(--sg-accent);color:var(--sg-text-invert);font:700 12px var(--sg-font);cursor:pointer;}
.sigda-home-form-v245 input{min-height:42px;border-radius:9px;border:1px solid var(--sg-border);}
/* V107 · la cabecera del gateway y su marca las gobierna gateway-v92.css, que
   es el owner de /, /acceso y su isotipo. Aqui vivia una generacion anterior
   -header blanco y chip navy de 11px- que solo perdia por orden de carga:
   duplicado activo retirado para dejar un unico owner. */
.sigda-gateway-brand-copy-v5a strong{display:block;color:var(--sg-text);font:800 16px/1.15 var(--sg-font);letter-spacing:-.02em;text-decoration:none;}
.sigda-gateway-brand-copy-v5a small{display:block;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:500;line-height:1.3;text-decoration:none;}
/* SIGDA V91 · COMPOSICION DE PAGINA FINAL
   Geometria contra las referencias 1672×941. */

.sg-page {
  display: grid;
  gap: 16px;
  width: 100%;
  min-width: 0;
  align-content: start;
}

/* Cabecera */
.sg-page-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 22px;
  width: 100%;
  margin: 0;
}
.sg-page-head > div:first-child { min-width: 0; }
.sg-page-title {
  margin: 0;
  color: var(--sg-text);
  font-family: var(--sg-font);
  font-size: var(--sg-fs-3xl);
  font-weight: 700;
  letter-spacing: var(--sg-ls-tight);
  line-height: 1.2;
}
.sg-page-sub {
  margin: 4px 0 0;
  color: var(--sg-text-muted);
  font-size: var(--sg-fs-lg);
  line-height: 1.45;
}
.sg-page-actions {
  display: flex;
  flex: 0 0 auto;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
}

/* Cifras */
.sg-page-kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
}
.sg-page-kpi {
  display: grid;
  gap: var(--sg-2);
  min-width: 0;
  padding: var(--sg-4) var(--sg-5);
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
}
.sg-page-kpi-top { display: flex; align-items: center; gap: 12px; }
.sg-page-kpi-icon {
  display: grid;
  flex: 0 0 32px;
  place-items: center;
  width: 32px;
  height: 32px;
  border-radius: var(--sg-radius-sm);
  background: var(--sg-surface-sunken);
  color: var(--sg-navy-600);
}
.sg-page-kpi-icon svg { width: 17px; height: 17px; }
.sg-page-kpi-top small { color: var(--sg-text-muted); font-size: var(--sg-fs-md); }
.sg-page-kpi strong {
  color: var(--sg-text);
  font-size: var(--sg-fs-3xl);
  letter-spacing: var(--sg-ls-tight);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
}
.sg-page-kpi--ok .sg-page-kpi-icon { background: var(--sg-ok-soft); color: var(--sg-ok); }
.sg-page-kpi--warn .sg-page-kpi-icon { background: var(--sg-warn-soft); color: var(--sg-warn); }
.sg-page-kpi--danger .sg-page-kpi-icon { background: var(--sg-danger-soft); color: var(--sg-danger); }
.sg-page-kpi-foot { color: var(--sg-text-faint); font-size: var(--sg-fs-sm); }

/* Cuerpo */
.sg-page-body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  align-items: start;
  gap: 16px;
  min-width: 0;
}
.sg-page-body--full { grid-template-columns: minmax(0, 1fr); }.sg-page-main,.sg-page-aside{ display: grid; gap: 14px; min-width: 0; }

/* Filtros */
.sg-filters {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  padding: 12px 14px;
  border-bottom: 1px solid var(--sg-border);
}
.sg-search { position: relative; flex: 1 1 260px; min-width: 190px; }
.sg-search svg {
  position: absolute;
  top: 50%;
  left: 12px;
  width: 16px;
  height: 16px;
  transform: translateY(-50%);
  color: var(--sg-text-faint);
  pointer-events: none;
}
.sg-search input { width: 100%; padding-left: 34px; }
.sg-filters-right { display: flex; align-items: center; gap: 8px; margin-left: auto; }

/* Chips */
.sg-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.sg-chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  min-height: 32px;
  padding: 0 12px;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-text-muted);
  font: inherit;
  font-size: var(--sg-fs-md);
  font-weight: 500;
  cursor: pointer;
}
.sg-chip:hover { background: var(--sg-surface-alt); }
.sg-chip.is-active {
  border-color: var(--sg-accent);
  background: var(--sg-accent-soft);
  color: var(--sg-accent-strong);
  font-weight: 600;
}
.sg-chip-count {
  min-width: 19px;
  padding: 1px 5px;
  border-radius: 999px;
  background: var(--sg-surface-sunken);
  font-size: var(--sg-fs-xs);
  font-weight: 700;
  text-align: center;
}
.sg-chip.is-active .sg-chip-count { background: var(--sg-surface); }
.sg-chip-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--sg-border-strong); }
.sg-chip-dot--ok { background: var(--sg-ok); }
.sg-chip-dot--warn { background: var(--sg-warn); }
.sg-chip-dot--info { background: var(--sg-accent); }
.sg-chip-dot--danger { background: var(--sg-danger); }

/* Identidad en tabla */
.sg-cell-id { display: flex; align-items: center; gap: 10px; min-width: 0; }
.sg-cell-mark {
  display: grid;
  flex: 0 0 34px;
  place-items: center;
  width: 34px;
  height: 34px;
  border-radius: var(--sg-radius-sm);
  background: var(--sg-accent-soft);
  color: var(--sg-accent);
  font-size: var(--sg-fs-sm);
  font-weight: 700;
}
.sg-cell-mark--round { border-radius: 50%; }
.sg-cell-copy { min-width: 0; }
.sg-cell-copy strong { display: block; color: var(--sg-text); font-size: var(--sg-fs-lg); font-weight: var(--sg-fw-semibold); overflow-wrap: anywhere; }
.sg-cell-copy span { display: block; margin-top: 2px; color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }

/* Acciones */
.sg-row-actions { display: flex; align-items: center; justify-content: flex-end; gap: 6px; }
.sg-icon-btn {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-text-muted);
  cursor: pointer;
}
.sg-icon-btn:hover { border-color: var(--sg-accent); color: var(--sg-accent); }
.sg-icon-btn svg { width: 15px; height: 15px; }

/* Paginacion */
.sg-pager {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  padding: 12px 14px;
  border-top: 1px solid var(--sg-border);
}
.sg-pager-scope { color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }
.sg-pager-pages { display: flex; align-items: center; gap: 5px; }
.sg-pager-page {
  display: grid;
  place-items: center;
  min-width: 30px;
  height: 30px;
  padding: 0 7px;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  color: var(--sg-text-muted);
  font: inherit;
  font-size: var(--sg-fs-sm);
  font-variant-numeric: tabular-nums;
  cursor: pointer;
}
.sg-pager-page.is-active { border-color: var(--sg-accent); background: var(--sg-accent); color: var(--sg-text-invert); font-weight: 700; }
.sg-pager-page:disabled { opacity: .45; cursor: default; }

/* Aside */
.sg-panel {
  padding: 16px;
  border: 1px solid var(--sg-border);
  border-radius: var(--sg-radius);
  background: var(--sg-surface);
  box-shadow: var(--sg-shadow-sm);
}
.sg-panel-title { margin: 0 0 12px; font-size: var(--sg-fs-lg); font-weight: 700; }
.sg-panel-list { display: grid; gap: 11px; }
.sg-panel-row { display: flex; align-items: center; gap: 10px; }
.sg-panel-mark {
  display: grid;
  flex: 0 0 36px;
  place-items: center;
  width: 36px;
  height: 36px;
  border-radius: 10px;
  background: var(--sg-surface-alt);
  color: var(--sg-text-muted);
}
.sg-panel-mark svg { width: 18px; height: 18px; }
.sg-panel-row strong { display: block; font-size: 18px; font-weight: 700; line-height: 1.1; }
.sg-panel-row span { display: block; color: var(--sg-text-muted); font-size: var(--sg-fs-sm); }
.sg-panel-note {
  display: flex;
  gap: 8px;
  padding: 12px;
  border: 1px solid var(--sg-accent);
  border-radius: 10px;
  background: var(--sg-accent-soft);
  color: var(--sg-accent-strong);
  font-size: var(--sg-fs-sm);
  line-height: 1.45;
}
.sg-panel-note svg { width: 16px; height: 16px; flex: 0 0 16px; margin-top: 1px; }

/* Progreso */
.sg-meter { display: grid; gap: 5px; }
.sg-meter-track { height: 5px; overflow: hidden; border-radius: 999px; background: var(--sg-surface-sunken); }
.sg-meter-track i { display: block; height: 100%; border-radius: 999px; background: var(--sg-accent); }
.sg-meter-track i.ok { background: var(--sg-ok); }
.sg-meter-track i.warn { background: var(--sg-warn); }
.sg-meter-track i.danger { background: var(--sg-danger); }
.sg-meter-foot { display: flex; justify-content: space-between; color: var(--sg-text-muted); font-size: var(--sg-fs-xs); }

@media (max-width: 1180px) {
  .sg-page-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sg-page-body { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 860px) {
  .sg-page-head { flex-direction: column; gap: 10px; }
  .sg-page-actions { width: 100%; justify-content: flex-start; }
  .sg-page-kpis { grid-template-columns: minmax(0, 1fr); }
  .sg-filters-right { margin-left: 0; width: 100%; }
  .sg-pager { flex-direction: column; align-items: stretch; }
}
.participants-center,.instructors-center,.org-center,.history-center,.programs-center,.users-center,.tpl-center,.legacy-center,.instcfg-center{position:relative;width:100%;min-width:0;}.participants-head,.instructors-head,.org-head,.history-head{position:absolute;top:0;right:0;z-index:2;display:flex;align-items:center;justify-content:flex-end;gap:8px;margin:0;padding:0;border:0;background:transparent;box-shadow:none;}.participants-head>div:first-child,.instructors-head>div:first-child,.org-head>div:first-child,.history-head>div:first-child{display:none;}.participants-actions,.instructors-actions,.org-actions,.history-head-actions,.programs-actions,.users-actions,.tpl-actions,.legacy-actions,.instcfg-actions,.metrics-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;}.participants-card,.instructors-card,.org-card,.history-card,.programs-card,.users-card,.tpl-card,.legacy-card,.instcfg-card,.legacy-table-card{min-width:0;padding:0;overflow:hidden;border:1px solid var(--sg-border);border-radius:12px;background:#fff;box-shadow:var(--sg-shadow-sm);}.instructors-shell{display:grid;gap:14px;min-width:0;}.participants-toolbar,.instructors-toolbar,.org-toolbar,.history-toolbar,.legacy-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:9px;min-height:58px;padding:10px 12px;border:1px solid var(--sg-border);border-radius:11px;background:#fff;box-shadow:var(--sg-shadow-sm);}.participants-card .participants-toolbar,.history-card .history-toolbar,.org-card .org-toolbar{border-width:0 0 1px;border-radius:0;box-shadow:none;}.participants-search,.history-search,.org-search,#instructorsSearch{flex:1 1 320px;width:auto;min-width:230px;height:38px;padding:0 12px;border:1px solid var(--sg-border);border-radius:8px;background:#fff;color:var(--sg-text);font-size:var(--sg-fs-md);font-weight:500;}.participants-search:focus,.history-search:focus,.org-search:focus,#instructorsSearch:focus{outline:0;border-color:#9fc0ff;box-shadow:var(--sg-focus-ring);}.users-kpis,.legacy-kpis,.programs-kpis,.commercial-metrics-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:14px;}.users-kpi,.legacy-kpi,.programs-kpi,.commercial-metrics-grid article{display:grid;gap:4px;min-height:0;padding:12px 14px;border:1px solid var(--sg-border);border-radius:10px;background:#fff;box-shadow:none;}.users-kpi small,.legacy-kpi small,.programs-kpi small,.commercial-metrics-grid small{color:var(--sg-text-muted);font-size:11px;}.users-kpi strong,.legacy-kpi strong,.programs-kpi strong,.commercial-metrics-grid strong{color:var(--sg-text);font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;}.participants-tablewrap,.instructors-tablewrap,.org-tablewrap,.history-tablewrap,.programs-tablewrap,.users-tablewrap,.legacy-tablewrap,.commercial-tablewrap{max-width:100%;overflow-x:auto;}.participants-table,.instructors-table,.org-table,.history-table,.programs-table,.users-table,.legacy-table,.commercial-table,.history-table-v772,.programs-detail-table{width:100%;border-collapse:collapse;table-layout:auto;color:var(--sg-text);font-size:var(--sg-fs-md);line-height:1.4;}.participants-table th,.instructors-table th,.org-table th,.history-table th,.programs-table th,.users-table th,.legacy-table th,.commercial-table th,.history-table-v772 th,.programs-detail-table th{height:38px;padding:8px 12px;border-bottom:1px solid var(--sg-border);background:#fbfcfe;color:#455774;font-size:var(--sg-fs-xs);font-weight:700;letter-spacing:.05em;text-transform:uppercase;text-align:left;white-space:nowrap;}.participants-table td,.instructors-table td,.org-table td,.history-table td,.programs-table td,.users-table td,.legacy-table td,.commercial-table td,.history-table-v772 td,.programs-detail-table td{padding:9px 12px;border-bottom:1px solid var(--sg-border);vertical-align:middle;}.participants-table tbody tr:last-child td,.instructors-table tbody tr:last-child td,.org-table tbody tr:last-child td,.history-table tbody tr:last-child td{border-bottom:0;}.participants-table tbody tr:hover,.instructors-table tbody tr:hover,.org-table tbody tr:hover,.history-table tbody tr:hover,.programs-table tbody tr:hover,.users-table tbody tr:hover,.legacy-table tbody tr:hover{background:#fbfdff;}.participants-name strong,.org-identity-v792 strong,.history-document-v772 strong,.history-person-v772 strong,.history-course-v772 strong{color:var(--sg-text);font-weight:600;}.participants-name small,.participants-activity-v763,.participants-last-v763,.org-contact-v792,.org-context-v792,.org-muted-v792,.history-state-date-v772 small{color:var(--sg-text-muted);font-size:var(--sg-fs-xs);}.instructors-pill,.org-pill,.history-status,.commercial-status-pill{display:inline-flex;align-items:center;min-height:22px;padding:2px 8px;border:0;border-radius:999px;background:var(--sg-ok-soft);color:var(--sg-ok);font-size:var(--sg-fs-xs);font-weight:700;white-space:nowrap;}.instructors-pill.off,.org-pill.off,.history-status.cancelled,.history-status.cancelada,.history-status.bad{background:var(--sg-danger-soft);color:var(--sg-danger);}.org-pill.type-client,.history-status.pending,.history-status.review,.history-status.pendiente{background:var(--sg-warn-soft);color:var(--sg-warn);}.participants-btn,.instructors-btn,.org-btn,.history-btn,.programs-btn,.users-btn,.tpl-btn,.legacy-btn,.instcfg-btn,.metrics-btn,.commercial-btn,.commercial-reload,.commercial-cancel-btn,.commercial-cancel-close,.participants-row-btn,.history-mini{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 11px;border:1px solid var(--sg-border);border-radius:7px;background:#fff;color:var(--sg-accent);font-size:var(--sg-fs-sm);font-weight:600;text-decoration:none;white-space:nowrap;cursor:pointer;}.participants-btn:hover,.instructors-btn:hover,.org-btn:hover,.history-btn:hover,.programs-btn:hover,.users-btn:hover,.tpl-btn:hover,.legacy-btn:hover,.instcfg-btn:hover,.metrics-btn:hover,.commercial-btn:hover,.commercial-reload:hover,.participants-row-btn:hover,.history-mini:hover{border-color:#a9c6ff;background:var(--sg-accent-soft);}.participants-btn.primary,.instructors-btn.primary,.org-btn.primary,.history-btn.primary,.programs-btn.primary,.users-btn.primary,.tpl-btn.primary,.legacy-btn.primary,.instcfg-btn.primary,.metrics-btn.primary,.commercial-btn.primary,.participants-row-btn.primary-v763,.history-mini.primary{border-color:var(--sg-accent);background:var(--sg-accent);color:#fff;}.instructors-btn.danger,.history-mini.danger{border-color:#ffd2d2;color:var(--sg-danger);}.participants-actions-v763,.instructor-actions-v782,.history-actions-v772{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:5px;}.participants-count-v763,.history-count-v772,.org-count,.instructors-count,.programs-count,.users-count,.commercial-count{display:inline-flex;align-items:center;min-height:25px;padding:0 9px;border-radius:999px;background:#f3f6fa;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:600;font-variant-numeric:tabular-nums;}.participants-note,.history-note,.instructors-status,.org-status,.users-status,.tpl-status,.legacy-status,.instcfg-status,.metrics-status{min-height:0;padding:8px 12px;color:var(--sg-text-muted);font-size:var(--sg-fs-xs);}.participants-empty,.instructors-empty,.org-empty,.history-empty,.programs-empty-v802,.users-empty,.tpl-empty,.legacy-empty,.commercial-empty{padding:30px 18px;color:var(--sg-text-muted);text-align:center;}.org-field,.programs-field,.users-field,.tpl-field,.instcfg-field,.commercial-field{display:grid;gap:5px;}.org-field label,.programs-field label,.users-field label,.tpl-field label,.instcfg-field label,.commercial-field label{color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:600;}.org-form-grid,.programs-form-grid,.users-grid,.tpl-form-grid,.instcfg-form-grid,.instcfg-grid,.legacy-grid,.commercial-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;}.org-modal-card,.users-modal-card,.tpl-modal-card,.programs-modal-card,.participant-modal-card{width:min(720px,96vw);max-height:92vh;overflow:auto;border:1px solid var(--sg-border);border-radius:14px;background:#fff;box-shadow:var(--sg-shadow-lg);}.org-modal-head,.users-modal-head,.tpl-modal-head,.programs-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:16px 18px 13px;border-bottom:1px solid var(--sg-border);}.org-modal-actions,.users-modal-actions,.tpl-modal-actions,.programs-modal-actions{display:flex;justify-content:flex-end;gap:8px;padding:13px 18px 18px;}.org-close,.users-close,.tpl-close,.programs-close{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--sg-border);border-radius:7px;background:#fff;cursor:pointer;}@media(max-width:1180px){.users-kpis,.legacy-kpis,.programs-kpis{grid-template-columns:repeat(2,minmax(0,1fr));}}@media(max-width:860px){.participants-head,.instructors-head,.org-head,.history-head{position:static;justify-content:flex-start;}.participants-actions,.instructors-actions,.org-actions,.history-head-actions{justify-content:flex-start;}.participants-toolbar,.instructors-toolbar,.org-toolbar,.history-toolbar{align-items:stretch;}.participants-search,.history-search,.org-search,#instructorsSearch{flex-basis:100%;min-width:0;width:100%;}.users-kpis,.legacy-kpis,.programs-kpis{grid-template-columns:minmax(0,1fr);}}#participantsCenter,#instructorsCenter,#organizationsCenter,#historyCenter{gap:12px;}#participantsCenter>.sg-page-head,#instructorsCenter>.sg-page-head,#organizationsCenter>.sg-page-head,#historyCenter>.sg-page-head{min-height:48px;align-items:center;}#participantsCenter .participants-card,#organizationsCenter .org-card,#historyCenter .history-card{border:1px solid var(--sg-border);border-radius:11px;background:#fff;box-shadow:0 4px 16px rgba(13,38,76,.035);}#participantsCenter .participants-toolbar,#organizationsCenter .org-toolbar,#historyCenter .history-toolbar,#instructorsCenter .instructors-toolbar{min-height:48px;padding:8px 10px;gap:8px;}#participantsCenter .participants-search,#organizationsCenter .org-search,#historyCenter .history-search,#instructorsCenter #instructorsSearch{min-height:34px;height:34px;padding:0 10px;border-radius:7px;font-size:var(--sg-fs-sm);}#quotesCenter .commercial-table,#proposalsCenter .commercial-table{min-width:680px;}#instructorsCenter .instructors-shell{gap:10px;}#instructorsCenter .instructor-person-v782 strong{display:block;color:var(--sg-text);font-size:var(--sg-fs-lg);font-weight:var(--sg-fw-semibold);}#instructorsCenter .instructor-person-v782 small,#instructorsCenter .instructor-specialty-v782 small,#instructorsCenter .instructor-context-v782 small{display:block;margin-top:2px;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);}#instructorsCenter .instructor-context-v782{display:flex;align-items:center;justify-content:space-between;gap:6px;}#instructorsCenter .instructors-pill{min-height:20px;padding:2px 7px;font-size:var(--sg-fs-xs);}#historyCenter .history-table-v772{min-width:760px;}#historyCenter .history-actions-v772{flex-wrap:nowrap;gap:4px;}
/* SIGDA V91 · SOLICITUDES
   Source of truth: 04_SOLICITUDES_CAPACITACION.png. */
#requestsCenter>.sg-page-head{display:none;}.requests-dashboard{display:grid;gap:14px;align-content:start;}.requests-hero{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:108px;padding:18px 20px;}.requests-hero-copy{min-width:0;}.requests-hero-copy .sg-eyebrow{display:none;}.requests-hero-copy h1{margin:0;color:var(--sg-text);font:700 22px/1.15 var(--sg-font);letter-spacing:-.02em;}.requests-hero-copy p{max-width:720px;margin:5px 0 0;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:400;line-height:1.4;}.requests-hero-side{flex:0 0 auto;}.requests-pending-card{display:grid;grid-template-columns:34px auto;grid-template-rows:auto auto;align-items:center;column-gap:10px;min-width:132px;min-height:68px;padding:10px 14px;border:1px solid var(--sg-border);border-radius:10px;background:#fff;box-shadow:none;}.requests-pending-card::before{content:"";grid-row:1 / span 2;width:34px;height:34px;border-radius:10px;background:var(--sg-warn-soft);box-shadow:inset 0 0 0 1px rgba(255,138,0,.08);}.requests-pending-card strong{color:var(--sg-text);font:700 24px/1 var(--sg-font);}.requests-pending-card span{color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:500;}.requests-workspace{padding:0;overflow:hidden;}.requests-workspace>.sg-card-head{margin:0;padding:16px 18px 10px;border-bottom:0;}.requests-workspace>.sg-card-head h2{margin:0;color:var(--sg-text);font:700 15px var(--sg-font);}.requests-workspace>.sg-card-head p{margin:4px 0 0;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:400;}.requests-tabs{display:flex;align-items:center;flex-wrap:wrap;gap:3px;margin:0 14px 10px;padding:4px;width:fit-content;max-width:calc(100% - 28px);border:1px solid #eef1f6;border-radius:9px;background:#f8f9fc;}.requests-tabs button{min-height:31px;padding:0 12px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:600;cursor:pointer;}.requests-tabs button:hover{background:#fff;}.requests-tabs button.active{border-color:#d6e2fb;background:#fff;color:var(--sg-accent);box-shadow:0 3px 10px rgba(2,18,56,.05);}.requests-list,.sr-list{display:grid;}.sr-request-card{display:grid;grid-template-columns:minmax(180px,1.15fr)minmax(170px,1fr)minmax(120px,.7fr)auto;align-items:center;gap:8px 14px;min-height:76px;padding:10px 18px;border-top:1px solid var(--sg-border);background:#fff;}.sr-request-card:hover{background:#fbfdff;}.sr-request-head{display:contents;}.sr-request-title{min-width:0;color:var(--sg-text);font:600 11px/1.3 var(--sg-font);overflow-wrap:anywhere;}.sr-status{justify-self:start;}.sr-request-meta{display:flex;flex-wrap:wrap;gap:3px 10px;color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:400;}.sr-request-detail{display:grid;gap:3px;min-width:0;}.sr-request-detail-row{display:flex;flex-wrap:wrap;gap:4px 7px;font-size:var(--sg-fs-xs);font-weight:400;}.sr-request-detail-row>span:first-child{min-width:0;color:var(--sg-text-faint);}.sr-request-secondary{color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:400;}.sr-request-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:5px;}.sr-status{display:inline-flex;align-items:center;min-height:22px;padding:2px 8px;border-radius:999px;background:#f2f4f8;color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:600;white-space:nowrap;}.sr-status[data-estado="ENVIADA"]{background:var(--sg-accent-soft);color:var(--sg-accent);}.sr-status[data-estado="EN_REVISION"]{background:var(--sg-warn-soft);color:var(--sg-warn);}.sr-status[data-estado="CAMBIOS_PROPUESTOS"]{background:var(--sg-info-soft);color:var(--sg-info);}.sr-status[data-estado="ACEPTADA"],.sr-status[data-estado="PROGRAMADA"]{background:var(--sg-ok-soft);color:var(--sg-ok);}.sr-status[data-estado="RECHAZADA"]{background:var(--sg-danger-soft);color:var(--sg-danger);}.sr-review-button{display:inline-flex;align-items:center;justify-content:center;min-height:30px;padding:0 10px;border:1px solid var(--sg-border);border-radius:7px;background:#fff;color:var(--sg-accent);font-size:var(--sg-fs-xs);font-weight:600;cursor:pointer;}.sr-review-button:hover{border-color:#aac6ff;background:var(--sg-accent-soft);}.sr-review-primary{border-color:var(--sg-accent);background:var(--sg-accent);color:#fff;}.sr-decision-accept{color:var(--sg-ok);}.sr-decision-reject{color:var(--sg-danger);}.sr-decision-box{display:grid;gap:10px;margin-top:4px;padding:12px;border:1px solid var(--sg-border);border-radius:9px;background:#fafbfd;}.sr-decision-title{font-weight:600;}.sr-decision-textarea{width:100%;min-height:78px;padding:10px;border:1px solid var(--sg-border);border-radius:8px;background:#fff;font:inherit;}.sr-decision-confirm-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:6px;}.sr-state,.requests-state{display:grid;justify-items:center;gap:7px;padding:36px 18px;color:var(--sg-text-muted);text-align:center;}.sr-spinner{width:26px;height:26px;border:3px solid var(--sg-border);border-top-color:var(--sg-accent);border-radius:50%;animation:sr-spin 900ms linear infinite;}@keyframes sr-spin{to{transform:rotate(360deg);}}@media(prefers-reduced-motion:reduce){.sr-spinner{animation-duration:3s;}}@media(max-width:1100px){.sr-request-card{grid-template-columns:minmax(0,1fr)minmax(0,1fr);}.sr-request-actions{justify-content:flex-start;}}@media(max-width:860px){.requests-hero{align-items:stretch;flex-direction:column;}.requests-pending-card{width:100%;}.requests-tabs{width:calc(100% - 28px);overflow-x:auto;flex-wrap:nowrap;}.requests-tabs button{flex:0 0 auto;}.sr-request-card{grid-template-columns:minmax(0,1fr);}}

/* Bandeja como tabla · 04_SOLICITUDES_CAPACITACION.png */
.sr-list-head,
.sr-request-card{grid-template-columns:minmax(150px,1fr) minmax(160px,1.15fr) minmax(120px,.9fr) auto auto;}
.sr-list-head{display:grid;gap:8px 14px;align-items:center;padding:9px 18px;border-top:1px solid var(--sg-border);background:var(--sg-surface-alt);color:var(--sg-text-faint);font-size:var(--sg-fs-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;}
.sr-request-org{display:flex;align-items:center;gap:9px;min-width:0;}
.sr-request-org-mark{display:grid;flex:0 0 32px;place-items:center;width:32px;height:32px;border-radius:9px;background:var(--sg-accent-soft);color:var(--sg-accent);font-size:var(--sg-fs-sm);font-weight:700;}
.sr-request-org-name{min-width:0;color:var(--sg-text);font:600 11px/1.3 var(--sg-font);overflow-wrap:anywhere;}
@media(max-width:1100px){
  /* Sin sitio para columnas, la cabecera deja de tener sentido. */
  .sr-list-head{display:none;}
}
/* SIGDA V91.15 · REFERENCE PARITY CLEAN Único ajuste final sobre Foundation/Components/Shell/Page/ */
body.sg91-clean { overflow:hidden; }

.sgx-app .admin-main > .admin-center,
.sgx-app .admin-main > .sg-page,
.sgx-app .admin-main > section[id$="Center"] {
  box-sizing:border-box;
  width:100%;
  max-width:none;
}
.sg-page {
  display:block;
  width:100%;
  max-width:none;
  margin:0;
  padding:22px 26px 18px;
  color:var(--sg-text);
}
.sg-page-actions:empty { display:none; }
/* V92-B · boton y tarjeta vuelven a 29. Ver docs/DESIGN_V92.md */
/* V92-B · el pie estaba a 3.42:1 */
.sgx-foot{min-height:42px;padding:12px 26px 16px;border:0;background:transparent;color:var(--sg-text-faint);font-size:var(--sg-fs-xs);}
.sg91-retired-head { display:none; }
#groupsCenter .groups-page,
#groupsCenter .groups-section { width:100%; max-width:none; margin:0; padding:0; border:0; background:transparent; box-shadow:none; }
#groupsCenter .sg91-visually-redundant-filter {
  position:absolute; width:1px; height:1px; clip:rect(0 0 0 0); clip-path:inset(50%); overflow:hidden; white-space:nowrap;
}
#groupsCenter .sg91-groups-state-tabs {
  display:flex; align-items:center; gap:5px; flex:1 1 auto; margin:0; padding:0; border:0; background:transparent; overflow-x:auto;
}
#groupsCenter .sg91-groups-state-tabs button {
  min-height:32px; padding:0 12px; border:1px solid var(--sg-border); border-radius:7px; background:#fff;
  color:var(--sg-text-muted); font-size:var(--sg-fs-xs);font-weight:600; white-space:nowrap;
}
#groupsCenter .sg91-groups-state-tabs button strong { margin-left:6px; }
#groupsCenter .sg91-groups-state-tabs button.is-active {
  border-color:#bdd2ff; background:var(--sg-accent-soft); color:var(--sg-accent); box-shadow:none;
}
#groupsCenter #groupsStatus { margin:0 0 var(--sg-3); color:var(--sg-text-muted); font-size:var(--sg-fs-md); }

#groupsCenter .sg91-section-title { padding:0 0 var(--sg-3); color:var(--sg-text); font-size:var(--sg-fs-lg); font-weight:var(--sg-fw-semibold); }
#groupsCenter .sg91-group-card:hover { border-color:#c9d5e5; box-shadow:0 5px 14px rgba(2,18,56,.04); }
#groupsCenter .sg-v723-group-top { display:flex; align-items:center; justify-content:space-between; min-height:22px; gap:8px; }
#groupsCenter .sg-v723-group-kicker,
#groupsCenter .sg-v723-group-badge {
  display:inline-flex; align-items:center; width:max-content; min-height:20px; padding:2px var(--sg-2);
  border-radius:var(--sg-radius-sm);
  background:var(--sg-surface-sunken); color:var(--sg-text-muted);
  font-size:var(--sg-fs-xs); font-weight:var(--sg-fw-black);
  letter-spacing:var(--sg-ls-caps); text-transform:uppercase;
}
#groupsCenter .sg91-group-card[data-sg91-state="pending"] .sg-v723-group-kicker { color:var(--sg-warn); background:var(--sg-warn-soft); }
#groupsCenter .sg91-group-card[data-sg91-state="active"] .sg-v723-group-kicker { color:var(--sg-ok); background:var(--sg-ok-soft); }
#groupsCenter .sg91-group-card[data-sg91-state="next"] .sg-v723-group-kicker { color:var(--sg-accent); background:var(--sg-accent-soft); }
#groupsCenter .sg-v723-group-subtitle { min-height:16px; margin-top:3px; color:var(--sg-text-faint); font-size:var(--sg-fs-sm); }
#groupsCenter .sg-v723-group-meta-label { color:var(--sg-text); font-size:var(--sg-fs-md); font-weight:var(--sg-fw-semibold); line-height:1.35; overflow-wrap:anywhere; }
/* V92-B · tres hechos, tres celdas */
#groupsCenter .sg91-group-meta { display:flex; align-items:center; flex-wrap:wrap; gap:2px var(--sg-2); color:var(--sg-text-muted); font-size:var(--sg-fs-sm); }
#groupsCenter .sg91-group-meta > span + span { padding-left:var(--sg-2); border-left:1px solid var(--sg-rule); }
#groupsCenter .sg-v723-group-footer { display:flex; align-items:center; justify-content:space-between; gap:var(--sg-2); min-width:0; margin-top:auto; padding-top:var(--sg-3); border-top:1px solid var(--sg-rule); }
#groupsCenter .sg-v723-group-footnote { flex:1 1 auto; min-width:0; color:var(--sg-text-muted); font-size:var(--sg-fs-sm); line-height:1.35; white-space:normal; overflow-wrap:anywhere; }
#groupsCenter .sg91-sandbox { margin-top:12px; padding:10px; border:1px solid #ead9a1; border-radius:10px; background:#fffdf7; }
#groupsCenter .sg91-sandbox summary { cursor:pointer; color:#7f691f; font-size:var(--sg-fs-xs);font-weight:600; }
#calendarCenter { width:100%; min-height:100%; }
#calendarCenter > #sigdaCalendarModuleV650A { display:none; }
#calendarCenter #sigdaCalendarViewbarV655 { margin:0; padding:0; border:0; background:transparent; box-shadow:none; }
#calendarCenter .sigda-calendar-view-tab-v655.active,
#calendarCenter .sigda-calendar-view-tab-v655[aria-selected="true"] { background:var(--sg-accent); color:#fff; }
#calendarCenter #sigdaCalendarPrevV650A { order:1; }
#calendarCenter #sigdaCalendarNextV650A { order:3; }
#calendarCenter #sigdaCalendarTodayV650A { order:4; margin-left:4px; }
#calendarCenter .sigda-calendar-2026-live{margin:0;align-self:start;}
#calendarCenter .sigda-calendar-auto-state-v654{color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:500;white-space:nowrap;}
#calendarCenter #sigdaCalendarAutoNowV654 { min-height:30px; padding:0 9px; border:1px solid var(--sg-border); border-radius:7px; background:#fff; color:var(--sg-accent); font-size:var(--sg-fs-xs);font-weight:600; }
#calendarCenter .sigda-calendar-2026-filters{min-width:0;margin:0;}
#calendarCenter .sigda-calendar-filter-v653 { display:grid; gap:5px; min-width:0; }
#calendarCenter .sigda-calendar-filter-v653 > span { color:#465978; font-size:var(--sg-fs-xs);font-weight:600; }
#calendarCenter .sigda-calendar-2026-status{min-height:0;color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:500;}
#calendarCenter .sigda-calendar-2026-status:empty{display:none;}
#calendarCenter .sigda-calendar-2026-body { min-width:0; overflow:hidden; border:1px solid var(--sg-border); border-radius:10px; background:#fff; box-shadow:var(--sg-shadow-sm); }
#calendarCenter #sigdaCalendarGridV650A { width:100%; min-width:0; margin:0; border:0; border-radius:0; box-shadow:none; }
#calendarCenter .sigda-cal-weekday-v650a { min-width:0; padding:9px 6px; border-color:var(--sg-border); background:#fbfcfe; color:#223653; font-size:var(--sg-fs-xs);font-weight:600; text-align:center; }
#calendarCenter .sigda-cal-day-number-v650a { color:var(--sg-text); font-size:var(--sg-fs-xs);font-weight:600; }
#calendarCenter .sigda-cal-day-v650a.is-outside .sigda-cal-day-number-v650a { color:#a4aebd; }
#requestsCenter > .sg-page-head { display:none; }
#requestsCenter .requests-side,
#requestsCenter [data-requests-side] { grid-area:side; }
/* V92-B · LA TABLA, UNA SOLA DECLARACION. Ver docs/DESIGN_V92.md */
#participantsCenter table,
#instructorsCenter table,
#organizationsCenter table,
#historyCenter table,
#programsCenter table,
#usersCenter table,
#quotesCenter table,
#proposalsCenter table { font-size:var(--sg-fs-md); font-variant-numeric:tabular-nums; }
#participantsCenter th,
#instructorsCenter th,
#organizationsCenter th,
#historyCenter th,
#programsCenter th,
#usersCenter th,
#quotesCenter th,
#proposalsCenter th {
  height:38px; padding:var(--sg-2) var(--sg-3);
  border-bottom:1px solid var(--sg-border-strong);
  background:var(--sg-surface);
  color:var(--sg-text-muted);
  font-size:var(--sg-fs-xs); font-weight:var(--sg-fw-black);
  letter-spacing:var(--sg-ls-caps); text-transform:uppercase;
}
#participantsCenter td,
#instructorsCenter td,
#organizationsCenter td,
#historyCenter td,
#programsCenter td,
#usersCenter td,
#quotesCenter td,
#proposalsCenter td {
  height:52px; padding:var(--sg-2) var(--sg-3);
  border-bottom:1px solid var(--sg-rule);
  color:var(--sg-text); font-size:var(--sg-fs-md); line-height:1.35;
}
/* V92-B · identidad sobre contexto */
#historyCenter .history-document-v772 strong,
#historyCenter .history-person-v772 strong,
#historyCenter .history-course-v772 strong,
#participantsCenter .participants-name strong,
#organizationsCenter .org-identity-v792 strong {
  display:block; color:var(--sg-text);
  font-size:var(--sg-fs-lg); font-weight:var(--sg-fw-semibold); line-height:1.3;
}
/* V92-B · folio tabular */
#historyCenter .history-document-v772 strong { font-variant-numeric:tabular-nums; letter-spacing:var(--sg-ls-tight); }
#historyCenter .history-document-v772 small,
#historyCenter .history-person-v772 small,
#historyCenter .history-course-v772 small,
#historyCenter .history-state-date-v772 small,
#participantsCenter .participants-name small,
#organizationsCenter .org-contact-v792,
#organizationsCenter .org-context-v792,
#organizationsCenter .org-muted-v792 {
  display:block; margin-top:2px; color:var(--sg-text-muted); font-size:var(--sg-fs-sm);
}
.history-table-v772 td:first-child { width:20%; }
.history-table-v772 td:nth-child(2) { width:22%; }
.history-table-v772 td:nth-child(3) { width:28%; }
.history-table-v772 td:nth-child(4) { width:16%; }
.history-table-v772 td:last-child { width:14%; }
.history-actions-v772,
.participants-actions-v763 { gap:5px; }

#instructorsCenter .instructors-table td { display:block; width:auto; padding:0; border:0; background:transparent; }
#instructorsCenter .instructors-table td:last-child { margin-top:4px; }
#organizationsCenter .org-table td { vertical-align:top; }
#organizationsCenter .org-card { overflow:hidden; }
#emissionCenter > .sg-page-head { margin-bottom:12px; }
#emissionCenter .sg-em-shell,
#emissionCenter .sg-em-layout { gap:12px; }
#emissionCenter .sg-card { border-radius:10px; }
#emissionCenter .sg-card-head { padding:12px 14px; }
#emissionCenter input,
#emissionCenter select,
#emissionCenter textarea { border-radius:7px; }
#metricsCenter .sg-mt-kpis,
#metricsCenter .metrics-kpis { gap:10px; }
html.sg91-clean, body.sg91-clean{margin:0;min-width:320px;background:var(--sg-navy-900);width:100%;height:100%;}
body.sg91-clean > .top { display:none; }
#adminGuard { display:none; }
#adminContent { display:block; height:100%; }
.admin-main > [id$="Center"] { display:none; }
.admin-main > [id$="Center"].show { display:block; }
.admin-main > #accessRestrictedCenter.show { display:grid; }
.sg91-clean [hidden] { display:none; }
.admin-main input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
.admin-main select,
.admin-main textarea {
  box-sizing:border-box;
  width:100%;
  min-height:36px;
  border:1px solid var(--sg-border-strong);
  border-radius:8px;
  background:#fff;
  color:var(--sg-text);
  font-size:var(--sg-fs-sm);font-weight:500;line-height:1.35;
  outline:0;
}
.admin-main input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
.admin-main select { padding:0 11px; }
.admin-main textarea { min-height:90px; padding:10px 11px; resize:vertical; }
.admin-main input:focus-visible,
.admin-main select:focus-visible,
.admin-main textarea:focus-visible { border-color:var(--sg-accent); box-shadow:var(--sg-focus-ring); }
/* Una etiqueta de campo se lee o el campo no se entiende. */
.admin-main label { color:var(--sg-text-muted); font-size:var(--sg-fs-sm); font-weight:var(--sg-fw-semibold); line-height:1.3; }
.cancel-modal,
.doc-detail-modal,
.official-viewer-modal,
.student-dossier,
.participant-modal,
.org-modal,
.users-modal,
.tpl-modal,
.programs-modal,
.instructor-modal {
  position:fixed;
  inset:0;
  z-index:10020;
  display:none;
  place-items:center;
  padding:24px;
  overflow:auto;
  background:rgba(0,18,56,.54);
  backdrop-filter:blur(3px);
}
.cancel-modal.show,
.doc-detail-modal.show,
.official-viewer-modal.show,
.student-dossier.show,
.participant-modal.show,
.org-modal.show,
.users-modal.show,
.tpl-modal.show,
.programs-modal.show,
.instructor-modal.show { display:grid; }
.cancel-dialog,
.doc-detail-panel,
.official-viewer-panel,
.student-dossier-panel,
.participant-panel,
.org-modal-card,
.users-modal-card,
.tpl-modal-card,
.programs-modal-card,
.instructor-dialog {
  width:min(920px,96vw);
  max-height:92vh;
  overflow:auto;
  border:1px solid var(--sg-border);
  border-radius:14px;
  background:#fff;
  box-shadow:var(--sg-shadow-lg);
}
.student-dossier-top {
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  padding:16px 18px 13px;
  border-bottom:1px solid var(--sg-border);
}
.student-dossier-top small { display:block; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); }
.student-dossier-top strong { display:block; margin-top:3px; color:var(--sg-text); font-size:var(--sg-fs-lg); }
.student-dossier-close {
  display:grid;
  place-items:center;
  width:32px;
  height:32px;
  border:1px solid var(--sg-border);
  border-radius:7px;
  background:#fff;
  color:var(--sg-text);
  cursor:pointer;
}
.student-dossier-body { display:grid; gap:16px; padding:18px; }
#accessRestrictedCenter { min-height:100%; place-items:center; padding:28px; }
.access-restricted-card { width:min(560px,100%); text-align:center; }
.access-restricted-icon { display:grid; place-items:center; width:44px; height:44px; margin:0 auto 12px; border-radius:50%; background:var(--sg-danger-soft); color:var(--sg-danger); font-size:22px; }
.access-restricted-meta { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin:18px 0; text-align:left; }
.access-restricted-meta > div { padding:12px; border:1px solid var(--sg-border); border-radius:9px; }
.access-restricted-meta span { display:block; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); }
.access-restricted-meta strong { display:block; margin-top:4px; color:var(--sg-text); font-size:11px; }
/* V92-B · shell consolidado en 30. Ver docs/DESIGN_V92.md */
.sg-page,
#groupsCenter,
#calendarCenter,
#requestsCenter,
#emissionCenter,
#metricsCenter,
[data-sg91-surface="participants"],
[data-sg91-surface="instructors"],
[data-sg91-surface="organizations"],
[data-sg91-surface="history"] {
  width:100%;
  max-width:none;
  margin:0;
  padding:20px 22px 18px;
}
.sg-page-head{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:48px;margin:0 0 var(--sg-4);}
.sg-page-title{margin:0;color:var(--sg-text);font-family:var(--sg-font);font-size:var(--sg-fs-3xl);font-weight:700;line-height:1.2;letter-spacing:var(--sg-ls-tight);}
.sg-page-sub{margin:4px 0 0;color:var(--sg-text-muted);font-family:var(--sg-font);font-size:var(--sg-fs-lg);font-weight:400;line-height:1.45;}
.sg-page-actions .sg-btn,
.sg-page-actions button,
.sg-page-actions summary { min-height:36px; padding:0 13px; }
/* V92-B · cifras: una banda, no cuatro tarjetas */
.sg91-kpi-strip,
#groupsCenter .sg91-groups-filterbar .sg91-group-kpis{border:0;border-radius:0;margin:0;}
#groupsCenter .sg91-group-kpis {
  display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:0;
  margin:0 0 var(--sg-4);
  border:1px solid var(--sg-border); border-radius:var(--sg-radius);
  background:var(--sg-surface); overflow:hidden;
}
.sg91-kpi {
  display:flex; align-items:baseline; gap:var(--sg-3); min-width:0;
  padding:var(--sg-3) var(--sg-4);
  border:0; border-left:1px solid var(--sg-rule); border-radius:0; background:transparent; box-shadow:none;
}
.sg91-kpi:first-child { border-left:0; }

.sg91-kpi-icon { display:none; }
.sg91-kpi-copy { min-width:0; }
.sg91-kpi small { display:block; color:var(--sg-text-muted); font-size:var(--sg-fs-sm); font-weight:var(--sg-fw-medium); }
.sg91-kpi strong { display:block; margin-top:var(--sg-1); color:var(--sg-text); font-size:var(--sg-fs-3xl); line-height:1; font-weight:var(--sg-fw-black); font-variant-numeric:tabular-nums; letter-spacing:var(--sg-ls-tight); }

.sg91-kpi em { display:none; }

.sg91-kpi--ok strong { color:var(--sg-ok); }
.sg91-kpi--warn strong { color:var(--sg-warn); }
.sg91-kpi--danger strong { color:var(--sg-danger); }
@media (max-width:640px){
  .sg91-kpi-strip,
  #groupsCenter .sg91-group-kpis{grid-template-columns:minmax(0,1fr);}
  .sg91-kpi{border-left:0;}
  .sg91-kpi + .sg91-kpi{border-top:1px solid var(--sg-rule);}
}
#groupsCenter .groups-toolbar{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;margin:0;padding:0;border:0;background:transparent;box-shadow:none;}
#groupsCenter .groups-tools-left{display:flex;align-items:center;gap:var(--sg-2);flex:0 1 340px;min-width:220px;position:relative;}
#groupsCenter .groups-search{width:100%;min-height:var(--sg-control);padding:0 var(--sg-3);border:1px solid var(--sg-border-control);border-radius:var(--sg-radius);background:var(--sg-surface);color:var(--sg-text);font-size:var(--sg-fs-md);}
/* V92-B · el resumen repetia las cifras de arriba. Ver docs/DESIGN_V92.md */
#groupsCenter .sg91-groups-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sg-3);align-items:start;}
#groupsCenter .sg91-groups-aside{display:none;}
#groupsCenter .sg91-groups-main{padding:0;min-width:0;border:0;background:transparent;}
/* V92-D1 · render crudo y adaptado comparten owner activo. */
#groupsCenter .sg91-group-card-grid,
#groupsCenter .sg-v723-group-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sg-3);}
#groupsCenter .sg91-group-card,
#groupsCenter .sg-v723-group-card{display:flex;flex-direction:column;min-width:0;min-height:0;margin:0;padding:var(--sg-4);border:1px solid var(--sg-border);border-radius:var(--sg-radius);background:var(--sg-surface);box-shadow:none;}
#groupsCenter .sg-v723-group-title{margin:var(--sg-3) 0 0;color:var(--sg-text);font-size:var(--sg-fs-xl);font-weight:var(--sg-fw-semibold);line-height:1.25;letter-spacing:var(--sg-ls-tight);}
#groupsCenter .sg-v723-group-meta-block{display:grid;gap:var(--sg-2);margin-top:var(--sg-3);}
/* "Que le falta a este curso" es la unica frase por la que se abre un
   grupo, y se pintaba a 8.5px en gris, indistinguible del resto. Pasa a
   ser una banda propia, tenida con el color de su estado: quien barre el
   tablero ve donde esta el trabajo sin leer una palabra. */
#groupsCenter .sg-v843h-group-state{
  margin-top:var(--sg-1);
  padding:var(--sg-2) var(--sg-3);
  border-radius:var(--sg-radius-sm);
  background:var(--sg-surface-alt);
  color:var(--sg-text);
  font-size:var(--sg-fs-md);
  font-weight:var(--sg-fw-medium);
  line-height:1.35;
}
#groupsCenter .sg-v843h-group-state span{color:var(--sg-text-muted);font-weight:var(--sg-fw-regular);}
#groupsCenter .sg91-group-card[data-sg91-state="pending"] .sg-v843h-group-state{background:var(--sg-warn-soft);color:var(--sg-warn);}
#groupsCenter .sg91-group-card[data-sg91-state="pending"] .sg-v843h-group-state span{color:var(--sg-warn);}
#groupsCenter .sg91-group-card[data-sg91-state="active"] .sg-v843h-group-state{background:var(--sg-ok-soft);color:var(--sg-ok);}
#groupsCenter .sg91-group-card[data-sg91-state="active"] .sg-v843h-group-state span{color:var(--sg-ok);}
#groupsCenter .sg91-group-card[data-sg91-state="done"] .sg-v843h-group-state{background:var(--sg-surface-sunken);color:var(--sg-text-muted);}
#groupsCenter .sg91-group-card[data-sg91-state="cancelled"] .sg-v843h-group-state{background:var(--sg-danger-soft);color:var(--sg-danger);}
#groupsCenter .sg91-group-card[data-sg91-state="cancelled"] .sg-v843h-group-state span{color:var(--sg-danger);}
/* V92-B · accion siguiente: boton, no enlace de 8.5px */
#groupsCenter .sg91-card-action,
#groupsCenter .sg-v723-group-open{
  min-height:var(--sg-control-sm);
  padding:0 var(--sg-3);
  border:1px solid var(--sg-border-control);
  border-radius:var(--sg-radius);
  background:var(--sg-surface);
  color:var(--sg-navy-800);
  font-size:var(--sg-fs-sm);
  font-weight:var(--sg-fw-semibold);
  white-space:nowrap;
  margin-left:auto;
  cursor:pointer; flex:0 0 auto; max-width:100%;
}
#groupsCenter .sg91-card-action:hover,
#groupsCenter .sg-v723-group-open:hover{background:var(--sg-accent-soft);border-color:var(--sg-accent);color:var(--sg-accent-strong);}
#groupsCenter .sg91-donut::after{content:"";position:absolute;inset:10px;border-radius:50%;background:#fff;display:none;}
#calendarCenter .sigda-calendar-2026{display:grid;gap:10px;width:100%;min-width:0;max-width:none;margin:0;padding:0;background:transparent;}
/* min-width:auto en hijos de rejilla recortaba el calendario a 390px. */
#calendarCenter .sigda-calendar-2026>*{min-width:0;}
@media (max-width:768px){
  #calendarCenter .sigda-calendar-auto-state-v654{white-space:normal;}
  #calendarCenter .sigda-calendar-2026-live #sigdaCalendarAutoV654{flex-wrap:wrap;}
}
#calendarCenter .sigda-calendar-2026-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,260px) minmax(300px,360px);align-items:start;gap:14px;margin:0;}
#calendarCenter .sigda-calendar-2026-heading h1{margin:0;color:var(--sg-text);font:700 21px/1.18 var(--sg-font);letter-spacing:-.025em;white-space:nowrap;font-size:21px;}
#calendarCenter .sigda-calendar-2026-heading p{margin:4px 0 0;color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:400;font-size:var(--sg-fs-sm);}
#calendarCenter .sg91-calendar-summary { min-height:66px; padding:10px 12px; border:1px solid var(--sg-border); border-radius:10px; background:#fff; box-shadow:var(--sg-shadow-sm); }
#calendarCenter .sg91-calendar-summary > strong { display:block; padding-bottom:8px; border-bottom:1px solid var(--sg-border); color:var(--sg-text); font-size:var(--sg-fs-sm); }
#calendarCenter .sg91-calendar-summary > div { display:grid; grid-template-columns:repeat(4,1fr); margin-top:8px; }
#calendarCenter .sg91-calendar-summary span { padding:0 8px; border-left:1px solid var(--sg-border); }
#calendarCenter .sg91-calendar-summary span:first-child { border-left:0; padding-left:0; }
#calendarCenter .sg91-calendar-summary b { display:block; color:var(--sg-accent); font-size:22px; font-weight:700; line-height:1; font-variant-numeric:tabular-nums; }
/* El color dice el estado sin leer la etiqueta. */
#calendarCenter .sg91-calendar-summary span[data-tono="warn"] b { color:var(--sg-warn); }
#calendarCenter .sg91-calendar-summary span[data-tono="ok"] b { color:var(--sg-ok); }
#calendarCenter .sg91-calendar-summary span[data-tono="danger"] b { color:var(--sg-danger); }
#calendarCenter .sg91-calendar-summary small { display:block; margin-top:4px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); line-height:1.2; }
#calendarCenter .sigda-calendar-2026-period{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:end;gap:12px;margin:0;min-height:42px;}
/* La vista, sola y a la derecha, como en la referencia. */
#calendarCenter .sigda-calendar-2026-views{width:auto;margin:10px 0 0;display:flex;justify-content:flex-end;}
#calendarCenter .sigda-calendar-2026-views>*{width:150px;}
#calendarCenter .sigda-calendar-view-tabs-v655{display:flex;gap:4px;min-width:230px;padding:3px;border:1px solid var(--sg-border);border-radius:10px;background:#fff;}
#calendarCenter .sigda-calendar-view-tab-v655{flex:1;min-height:32px;padding:0 15px;border:0;border-radius:8px;background:transparent;color:var(--sg-text);font-size:var(--sg-fs-sm);font-weight:600;}
#calendarCenter .sigda-calendar-2026-monthnav{display:flex;align-items:center;gap:6px;}
#calendarCenter #sigdaCalendarTitleV650A{order:2;min-width:140px;color:var(--sg-text);font:700 15px var(--sg-font);text-align:center;font-size:14px;}
#calendarCenter .sigda-cal-nav-v650a,
#calendarCenter .sigda-cal-today-v650a{min-width:34px;height:34px;padding:0 10px;border:1px solid var(--sg-border);border-radius:8px;background:#fff;color:var(--sg-accent);font-size:var(--sg-fs-sm);font-weight:600;box-shadow:none;}
#calendarCenter .sigda-calendar-2026-live #sigdaCalendarAutoV654{display:flex;align-items:center;gap:8px;min-height:36px;padding:3px 5px 3px 10px;border:1px solid var(--sg-border);border-radius:9px;background:#fff;box-shadow:var(--sg-shadow-sm);}
#calendarCenter #sigdaCalendarFiltersV653{display:grid;grid-template-columns:repeat(4,minmax(105px,1fr)) auto;align-items:end;gap:7px;width:100%;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;}
#calendarCenter .sigda-calendar-filter-v653 select{width:100%;height:32px;padding:0 10px;border:1px solid var(--sg-border);border-radius:7px;background:#fff;color:var(--sg-text);font-size:var(--sg-fs-xs);font-weight:500;}
#calendarCenter .sigda-calendar-filter-clear-v653{height:32px;padding:0 11px;border:1px solid var(--sg-border);border-radius:7px;background:#fff;color:var(--sg-accent);font-size:var(--sg-fs-xs);font-weight:600;}
#calendarCenter .sigda-calendar-filter-result-v653{display:none;}
#calendarCenter .sigda-cal-month-v650a{grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:34px repeat(6,minmax(78px,1fr));display:grid;}
#calendarCenter .sigda-cal-weekdays-v650a { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); }
#calendarCenter .sigda-cal-day-v650a{min-width:0;min-height:78px;padding:6px;border-color:var(--sg-border);background:#fff;position:relative;border-right:1px solid var(--sg-border);border-bottom:1px solid var(--sg-border);}
#calendarCenter .sigda-cal-day-v650a:nth-child(7n) { border-right:0; }
#calendarCenter .sigda-cal-day-v650a.is-today { background:#eef7ff; box-shadow:inset 0 0 0 1px #9fd4f4; }
#calendarCenter .sigda-cal-day-v650a.is-today .sigda-cal-day-number-v650a { display:grid; place-items:center; width:28px; height:28px; margin-left:auto; border-radius:50%; background:#0874b9; color:#fff; }
#calendarCenter .sigda-cal-events-v650a { display:grid; gap:4px; margin-top:4px; }
#calendarCenter .sigda-calendar-event-v651,
/* Sin tapa de altura: el titulo usa 2 lineas (ver docs/DESIGN_V92.md). */
#calendarCenter .sigda-calendar-month-card-v656 { display:grid; grid-template-columns:34px minmax(0,1fr); grid-template-areas:"time course" "time org"; gap:1px 5px; width:100%; min-width:0; min-height:31px; margin:0; padding:4px 5px; border:1px solid #dce8f6; border-radius:6px; background:#edf4ff; color:var(--sg-text); overflow:hidden; box-shadow:none; align-content:center; }
#calendarCenter .sigda-calendar-event-v651[data-state="EN_CURSO"] { border-left:3px solid var(--sg-ok); background:var(--sg-ok-soft); }
#calendarCenter .sigda-calendar-event-v651[data-state="CANCELADO"] { border-left:3px solid var(--sg-danger); background:var(--sg-danger-soft); }
#calendarCenter .sigda-calendar-event-time-v651,
#calendarCenter .sigda-calendar-month-time-v656 { grid-area:time; color:var(--sg-navy-600); font-size:var(--sg-fs-xs); font-weight:700; }
#calendarCenter .sigda-calendar-event-course-v651,
#calendarCenter .sigda-calendar-month-course-v656 { grid-area:course; min-width:0; color:var(--sg-text); font-size:var(--sg-fs-xs); font-weight:650; display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-height:1.25; overflow:hidden; overflow-wrap:anywhere; }
#calendarCenter .sigda-calendar-event-org-v651,
#calendarCenter .sigda-calendar-month-org-v656 { grid-area:org; min-width:0; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#calendarCenter .sigda-calendar-more-v651 { color:var(--sg-accent); font-size:var(--sg-fs-xs); font-weight:600; }
#calendarCenter .sigda-calendar-week-v655 { overflow-x:auto; }
#calendarCenter .sigda-calendar-week-grid-v655 { min-width:720px; }
#calendarCenter .sigda-calendar-day-v655 { max-width:none; border:1px solid var(--sg-border); border-radius:10px; background:#fff; overflow:hidden; }
#requestsCenter .requests-dashboard{display:grid;grid-template-columns:minmax(0,1fr) 248px;grid-template-areas:"hero hero" "work side";gap:10px;}
#requestsCenter .requests-hero{grid-area:hero;min-height:82px;padding:13px 15px;}
#requestsCenter .requests-hero-copy .sg-eyebrow { font-size:var(--sg-fs-xs); }
#requestsCenter .requests-hero-copy h1{font-size:19px;margin-top:5px;}
#requestsCenter .requests-hero-copy p{font-size:var(--sg-fs-sm);margin-top:4px;}
#requestsCenter .requests-pending-card{min-width:110px;min-height:56px;padding:10px 14px;}
#requestsCenter .requests-workspace{grid-area:work;min-width:0;padding:0 0 8px;overflow:hidden;}
#requestsCenter .requests-workspace > .sg-card-head { padding:12px 14px 8px; margin:0; }
#requestsCenter .requests-tabs{margin:0 12px 8px;padding:3px;}
#requestsCenter .requests-tabs button { min-height:30px; padding:0 10px; font-size:var(--sg-fs-xs); }
#requestsCenter .sr-request-card{min-height:62px;padding:9px 11px;margin:0 12px 7px;border:1px solid var(--sg-border);border-radius:8px;background:#fff;}
#requestsCenter .sr-request-title h2 { font-size:var(--sg-fs-sm); }
#requestsCenter .sr-request-title p,
#requestsCenter .sr-request-meta { font-size:var(--sg-fs-xs); }
#requestsCenter .sg91-request-side { grid-area:side; min-width:0; }
#requestsCenter .sg91-request-side .sg91-summary-card { padding:13px; }
.sg91-state-list { display:grid; gap:9px; }
.sg91-state-list > div { display:grid; grid-template-columns:8px 1fr auto; gap:7px; align-items:center; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); }
.participants-card,
.instructors-card,
.org-card,
.history-card{border-radius:10px;overflow:hidden;border:1px solid var(--sg-border);background:#fff;box-shadow:var(--sg-shadow-sm);}
.participants-toolbar,
.instructors-toolbar,
.org-toolbar,
.history-toolbar{min-height:48px;padding:7px 9px;border-radius:10px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--sg-border);background:#fff;}
.participants-search,
.history-search,
.org-search,
#instructorsSearch{height:34px;font-size:var(--sg-fs-xs);flex:1 1 360px;min-width:180px;}
.participants-table,
.org-table,
.history-table { min-width:760px; }

.participants-table tbody tr:hover td,
.org-table tbody tr:hover td,
.history-table tbody tr:hover td { background:var(--sg-surface-alt); }
.history-status,
.instructors-pill,
.org-pill { display:inline-flex; align-items:center; min-height:20px; padding:2px 7px; border-radius:999px; background:var(--sg-ok-soft); color:var(--sg-ok); font-size:var(--sg-fs-xs); font-weight:650; }
.history-status.cancel,
.history-status.cancelled,
.instructors-pill.off,
.org-pill.off { background:var(--sg-danger-soft); color:var(--sg-danger); }
.history-actions-v772 { flex-wrap:nowrap; }
.history-mini,
.participants-row-btn,
.history-btn,
.participants-btn,
.instructors-btn,
.org-btn { min-height:var(--sg-control-sm); padding:0 var(--sg-3); border:1px solid var(--sg-border-control); border-radius:var(--sg-radius); background:var(--sg-surface); color:var(--sg-navy-800); font-size:var(--sg-fs-sm); font-weight:600; }
.history-mini.primary,
.participants-row-btn.primary-v763,
.instructors-btn.primary,
.org-btn.primary { border-color:var(--sg-accent); background:var(--sg-accent); color:#fff; }
/* V92-B · la columna repetia la tabla. Ver docs/DESIGN_V92.md */
.sg91-history-layout { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--sg-3); align-items:start; }
.sg91-history-aside { display:none; }
.sg91-request-side .sg91-summary-card { border:1px solid var(--sg-border); border-radius:10px; background:#fff; box-shadow:var(--sg-shadow-sm); }
.sg91-summary-card h2,.sg91-summary-card h3 { margin:0 0 10px; color:var(--sg-text); font-size:var(--sg-fs-sm); }
.sg91-activity-list { display:grid; gap:10px; }
.sg91-activity-list > div { display:grid; grid-template-columns:8px 1fr; gap:8px; align-items:start; }
.sg91-activity-list p { margin:0; min-width:0; }
.sg91-activity-list strong { display:block; color:var(--sg-text); font-size:var(--sg-fs-xs); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sg91-activity-list small { display:block; margin-top:2px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); line-height:1.3; }
.sg91-activity-dot { width:8px; height:8px; margin-top:2px; border-radius:50%; background:var(--sg-accent); }
.sg91-activity-dot--ok { background:var(--sg-ok); }
.sg91-activity-dot--warn { background:var(--sg-warn); }
.sg91-activity-dot--danger { background:var(--sg-danger); }
.sg91-activity-dot--accent { background:var(--sg-accent); }
#instructorsCenter .instructors-shell { display:grid; gap:10px; }
#instructorsCenter .instructor-person-v782 small,
#instructorsCenter .instructor-specialty-v782 small,
#instructorsCenter .instructor-context-v782 small { color:var(--sg-text-muted); font-size:var(--sg-fs-xs); }
#instructorsCenter .instructor-specialty-v782 { margin-top:6px; }
#instructorsCenter .instructor-specialty-v782 strong { color:#405572; font-size:var(--sg-fs-xs); }
#instructorsCenter .instructor-context-v782 { display:flex; align-items:center; justify-content:space-between; gap:6px; margin-top:6px; }
#instructorsCenter .instructor-actions-v782 { margin-top:auto; padding-top:8px; justify-content:flex-start; }
#emissionCenter .sg-em-head.sg91-retired-head { display:none; }
#emissionCenter .sg-steps { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:6px; margin-bottom:10px; padding:4px; border:1px solid var(--sg-border); border-radius:var(--sg-radius); background:var(--sg-surface); }
/* RC1 · el responsive del stepper vive aqui porque aqui manda. Ver docs. */
@media (max-width:860px){
  #emissionCenter .sg-steps { grid-template-columns:repeat(2,minmax(0,1fr)); }
  #emissionCenter .sg-em-upload { grid-template-columns:minmax(0,1fr); }
  #emissionCenter .sg-em-review { grid-template-columns:minmax(0,1fr); }
  #emissionCenter .sg-em-uploadbox input[type="file"] { display:grid; gap:var(--sg-2); justify-items:start; }
}
@media (max-width:560px){
  #emissionCenter .sg-steps { grid-template-columns:minmax(0,1fr); }
}
#emissionCenter .sg-step { min-height:48px; padding:7px 9px; border:0; border-radius:8px; background:transparent; color:var(--sg-text-muted); }
#emissionCenter .sg-step.current { background:var(--sg-accent-soft); color:var(--sg-accent); }
#emissionCenter .sg-step > span { width:26px; height:26px; }
#emissionCenter .sg-step strong { font-size:var(--sg-fs-xs); }
#emissionCenter .sg-step small { font-size:var(--sg-fs-xs); }
#emissionCenter .sg-em-stage > .sg-card,
#emissionCenter .sg-em-review > .sg-card { padding:14px 16px; }
#emissionCenter .sg-em-title { margin-bottom:8px; }
#emissionCenter .sg-em-title h2 { font-size:14px; }
#emissionCenter .sg-em-types { gap:8px; }
#emissionCenter .sg-em-type { min-height:66px; padding:10px 12px; border-radius:8px; }
#emissionCenter .sg-em-form { gap:10px; }
#emissionCenter .sg-em-actions { margin-top:12px; }
#metricsCenter .sg-mt { gap:10px; }
#metricsCenter .sg-mt-grid { gap:10px; }
#metricsCenter .sg-card{border-radius:10px;}
/* Responsive final */
@media (min-width:2000px){
  #groupsCenter .sg91-group-card-grid,
  #groupsCenter .sg-v723-group-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media (max-width:1120px){
  .sg91-kpi-strip,
  #groupsCenter .sg91-groups-layout,
  .sg91-history-layout { grid-template-columns:1fr; }
  #groupsCenter .sg91-groups-aside,
  .sg91-history-aside { display:none; }
  #calendarCenter .sigda-calendar-2026-head{grid-template-columns:minmax(0,1fr) minmax(280px,340px);}
  #calendarCenter .sigda-calendar-2026-live{grid-column:2;}
  #calendarCenter .sg91-calendar-summary{grid-column:1 / -1;max-width:none;}
  #calendarCenter .sigda-calendar-2026-views{grid-column:1 / -1;width:100%;}
  #calendarCenter #sigdaCalendarFiltersV653{grid-template-columns:repeat(2,minmax(0,1fr)) auto;}
  #requestsCenter .requests-dashboard { grid-template-columns:1fr; grid-template-areas:"hero" "work" "side"; }
}
@media (max-width:1120px){
  #groupsCenter .sg91-group-card-grid,
  #groupsCenter .sg-v723-group-grid { grid-template-columns:minmax(0,1fr); }
}
@media (max-width:768px){
  .sgx-app,
  .sgx-app.is-collapsed,
  .sgx-app.is-expanded { --sgx-side:62px; --sgx-top:68px; }
  .sgx-app.is-expanded .sgx-brand-text,
  .sgx-app.is-expanded .sgx-nav-label { display:none; }
  .sgx-top { min-height:68px; }
  .sg91-kpi-strip,
  #groupsCenter .sg91-group-card-grid,
  #groupsCenter .sg-v723-group-grid { grid-template-columns:1fr; }
  #calendarCenter .sigda-calendar-2026-head{grid-template-columns:1fr;}
  #calendarCenter .sigda-calendar-2026-live,
  #calendarCenter .sg91-calendar-summary{grid-column:1;}
  #calendarCenter .sigda-calendar-2026-period{grid-template-columns:1fr;align-items:stretch;}
  #calendarCenter .sigda-calendar-2026-views{width:100%;}
  #calendarCenter .sigda-calendar-viewbar-v655{width:100%;}
  #calendarCenter #sigdaCalendarFiltersV653{grid-template-columns:1fr 1fr;}
  #calendarCenter .sigda-calendar-view-tabs-v655 { width:100%; }
  #calendarCenter .sigda-calendar-2026-body { overflow-x:auto; }
  #calendarCenter #sigdaCalendarGridV650A { min-width:720px; }
  .access-restricted-actions a{display:inline-flex;align-items:center;min-height:44px;}
}
@media (max-width:480px){
  .sg91-kpi-strip,
  .access-restricted-meta { grid-template-columns:1fr; }
}

/* ──────────────────────────────────────────────────────────── */

/* Nunca dejar DOM auxiliar visible por ausencia del CSS histórico. */
.redirect,
.validation-view,
#accessRestrictedCenter,
.cancel-modal,
.doc-detail-modal,
.official-viewer-modal,
.student-dossier,
.participant-modal,
.org-modal,
.users-modal,
.tpl-modal,
.programs-modal,
.instructor-modal { display:none; }

.validation-view.show { display:block; }
#accessRestrictedCenter.show { display:grid; }
.redirect.show,
.cancel-modal.show,
.doc-detail-modal.show,
.official-viewer-modal.show,
.student-dossier.show,
.participant-modal.show,
.org-modal.show,
.users-modal.show,
.tpl-modal.show,
.programs-modal.show,
.instructor-modal.show { display:flex; }

/* Redirect de documento: estado funcional pequeño, nunca pantalla azul. */
.redirect.show {
  position:fixed;
  inset:0;
  z-index:10050;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:rgba(248,250,253,.92);
  color:var(--sg-text);
  text-align:center;
  backdrop-filter:blur(3px);
}
.redirect .spinner{display:none;}
.redirect h2 { margin:0; font:700 14px/1.25 var(--sg-font); }
.redirect p { margin:5px 0 0; color:var(--sg-text-muted); font-size:var(--sg-fs-xs);font-weight:500;line-height:1.4; }

/* El error de permisos era una banda sin CSS al retirar el shell histórico. */
.sigda-nav-error-banner { display:none; }
body.sg91-clean.sigda-nav-error .sigda-nav-error-banner {
  position:fixed;
  right:18px;
  bottom:18px;
  z-index:10060;
  display:block;
  width:min(320px,calc(100vw - 36px));
  padding:13px 14px;
  border:1px solid #ffd7d7;
  border-radius:10px;
  background:#fff;
  color:var(--sg-text);
  box-shadow:0 14px 38px rgba(13,38,76,.14);
}
body.sg91-clean.sigda-nav-error .sigda-nav-error-banner strong { display:block; color:var(--sg-danger); font-size:var(--sg-fs-sm); }
body.sg91-clean.sigda-nav-error .sigda-nav-error-banner p { margin:4px 0 9px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); line-height:1.35; }
body.sg91-clean.sigda-nav-error .sigda-nav-error-banner button {
  min-height:30px;
  padding:0 10px;
  border:1px solid var(--sg-border);
  border-radius:7px;
  background:#fff;
  color:var(--sg-accent);
  font-size:var(--sg-fs-xs);font-weight:600;
}

/* El indicador activo pertenece al borde inferior del dominio; nunca cruza texto/icono. */

/* Calendario mensual: hora + curso + organización; el instructor queda en el detalle. */
#calendarCenter .sigda-calendar-month-instructor-v753b{display:none;}
#calendarCenter .sigda-calendar-event-time-v651,
#calendarCenter .sigda-calendar-month-time-v656,
#calendarCenter .sigda-calendar-event-course-v651,
#calendarCenter .sigda-calendar-month-course-v656,
#calendarCenter .sigda-calendar-event-org-v651,
#calendarCenter .sigda-calendar-month-org-v656{line-height:1.15;}

/* Pulido de densidad: títulos y controles se alinean a la misma retícula. */
.sg-page-head,
#calendarCenter .sigda-calendar-2026-head { padding-inline:2px; }
#calendarCenter .sigda-calendar-2026-heading h1 { letter-spacing:var(--sg-ls-tight); }

@media (max-width:768px){
  body.sg91-clean.sigda-nav-error .sigda-nav-error-banner { right:12px; bottom:12px; width:calc(100vw - 24px); }
}

/* Composicion · el markup fuente no se pinta a medias */

/* Se retiene la PINTURA, no el espacio: visibility, no display, para
   que el layout no salte cuando el contenedor aparezca compuesto. */
[data-v91-hydrating="1"] { visibility: hidden; }
[data-v91-ready="1"] { visibility: visible; }

/* Una sola representacion de las cifras despues de READY. */

/* /grupos · una tarjeta para filtrar y para leer las cifras */
#groupsCenter .sg91-groups-filterbar{
  display:grid;
  gap:var(--sg-3);
  margin:0 0 var(--sg-5);
  padding:var(--sg-4);
  border:1px solid var(--sg-border);
  border-radius:var(--sg-radius);
  background:#fff;
  box-shadow:var(--sg-shadow-sm);
}
/* El buscador manda en la fila y los chips se quedan con lo que sobra,
   como en la referencia. */
#groupsCenter #groupsStateTabsV92{flex:1 1 auto;justify-content:flex-start;}
#groupsCenter .sg91-groups-more{position:relative;flex:0 0 auto;}
#groupsCenter .sg91-groups-more>summary{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 11px;border:1px solid var(--sg-border);border-radius:7px;background:var(--sg-surface);color:var(--sg-text-muted);font-size:var(--sg-fs-sm);font-weight:var(--sg-fw-semibold);cursor:pointer;list-style:none;}
#groupsCenter .sg91-groups-more>summary::-webkit-details-marker{display:none;}#groupsCenter .sg91-groups-more-menu{position:absolute;right:0;z-index:20;display:grid;gap:6px;min-width:190px;margin-top:6px;padding:8px;border:1px solid var(--sg-border);border-radius:9px;background:var(--sg-surface);box-shadow:var(--sg-shadow-lg);}
#groupsCenter .sg91-groups-more:not([open]) .sg91-groups-more-menu{display:none;}

/* Oportunidades Lean en /grupos */
#groupsCenter .sg-opp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(268px,1fr));gap:12px;}
#groupsCenter .sg-opp{display:grid;gap:9px;padding:14px;border:1px solid var(--sg-border);border-radius:10px;background:var(--sg-surface-alt);}
#groupsCenter .sg-opp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
#groupsCenter .sg-opp-head h3{margin:0;color:var(--sg-text);font:600 11.5px/1.35 var(--sg-font);}
#groupsCenter .sg-opp-tag{flex:0 0 auto;padding:2px 8px;border-radius:999px;background:var(--sg-warn-soft);color:var(--sg-warn);font-size:var(--sg-fs-xs);font-weight:600;white-space:nowrap;}
#groupsCenter .sg-opp-body{display:grid;grid-template-columns:auto minmax(0,1fr);gap:3px 10px;margin:0;}
#groupsCenter .sg-opp-body dt{color:var(--sg-text-faint);font-size:var(--sg-fs-xs);font-weight:600;}
#groupsCenter .sg-opp-body dd{margin:0;color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:400;line-height:1.4;}
#groupsCenter .sg-opp-list{margin:0;padding-left:15px;color:var(--sg-text-muted);font-size:var(--sg-fs-xs);font-weight:400;line-height:1.5;}
#groupsCenter .sg-opp-cta{color:var(--sg-accent);font-size:var(--sg-fs-sm);font-weight:600;text-decoration:none;}
#groupsCenter .sg-opp-debt{margin-top:12px;padding-top:10px;border-top:1px solid var(--sg-border);}
#groupsCenter .sg-opp-debt>summary{color:var(--sg-text-faint);font-size:var(--sg-fs-xs);font-weight:500;cursor:pointer;}
#groupsCenter .sg-opp-debt ul{margin:8px 0 0;padding-left:15px;color:var(--sg-text-faint);font-size:var(--sg-fs-xs);font-weight:400;line-height:1.5;}

/* V92-B · tercera declaracion de la cifra retirada */
@media (max-width:1180px){
  .sg91-kpi-strip,
  #groupsCenter .sg91-group-kpis{grid-template-columns:repeat(2,minmax(0,1fr));}
  .sg91-kpi:nth-child(odd){border-left:0;}
  .sg91-kpi:nth-child(n+3){border-top:1px solid var(--sg-rule);}
}

/* =====================================================================
   RC2 · lo que faltaba por igualar entre superficies. Ver docs.
   ===================================================================== */
/* Un estado vacio o de carga no es la primera fila de datos: se centra en
   su hueco y baja de peso. RC1 lo resolvio en tres tablas; aqui alcanza a
   las nueve, incluidas las comerciales. */
#quotesCenter td[colspan],
#proposalsCenter td[colspan],
#organizationsCenter td[colspan],
#instructorsCenter td[colspan],
#programsCenter td[colspan],
#usersCenter td[colspan] {
  height: 88px;
  color: var(--sg-text-muted);
  text-align: center;
  vertical-align: middle;
}
/* Una accion de formulario se distingue por jerarquia, no por tamaño: en
   /cotizaciones y /propuestas "Generar numero" ocupaba una columna entera
   de la rejilla y llegaba a 430px de ancho. */
#quotesCenter .commercial-form-grid > .sg-btn,
#proposalsCenter .commercial-form-grid > .sg-btn {
  width: max-content;
  min-width: 0;
  align-self: end;
}

/* SMART GROUP 16 · bandeja ordenada por trabajo. Lo terminado se pliega. */
#groupsCenter .sg91-groups-section { display:grid; gap:var(--sg-3); margin-bottom:var(--sg-5); }
#groupsCenter .sg91-groups-section .sg91-section-title { display:grid; gap:2px; }
#groupsCenter .sg91-groups-section .sg91-section-title > span { color:var(--sg-text-muted); font-size:var(--sg-fs-sm); font-weight:600; }
#groupsCenter .sg91-groups-section[data-sg91-bucket="pending"] .sg91-section-title strong { color:var(--sg-warn); }
#groupsCenter .sg91-groups-section[data-sg91-bucket="active"] .sg91-section-title strong { color:var(--sg-ok); }
#groupsCenter .sg91-groups-fold { margin:0 0 var(--sg-4); }
#groupsCenter .sg91-groups-fold > summary { display:flex; align-items:center; gap:8px; padding:10px 0; color:var(--sg-text-muted); font-size:var(--sg-fs-md); font-weight:800; cursor:pointer; list-style:none; }
#groupsCenter .sg91-groups-fold > summary span { color:var(--sg-text-faint); font-weight:700; }
/* Galon del summary sin marcador. No en 29-components: lo compilan portales. */
#groupsCenter .sg91-groups-fold > summary::before,
.sg-em-paste > summary::before { content:"\203A"; display:inline-grid; place-items:center; width:16px; height:16px; color:var(--sg-text-faint); font-size:16px; line-height:1; transform-origin:center; transition:transform .14s ease; }
.sg-em-paste > summary::before { margin-right:6px; vertical-align:-3px; }
#groupsCenter .sg91-groups-fold[open] > summary::before,
.sg-em-paste[open] > summary::before { transform:rotate(90deg); }
#groupsCenter .sg91-groups-fold > .sg91-group-card-grid { margin-top:var(--sg-2); }
#groupsCenter .sg91-groups-empty { display:grid; gap:4px; padding:var(--sg-6) var(--sg-4); border:1px dashed var(--sg-border-control); border-radius:var(--sg-radius-lg); background:var(--sg-surface); text-align:center; }
#groupsCenter .sg91-groups-empty strong { color:var(--sg-navy-900); font-size:var(--sg-fs-xl); }
#groupsCenter .sg91-groups-empty span { color:var(--sg-text-muted); font-size:var(--sg-fs-md); }
/* Workspace V91: authored desde el primer paint; sin dependencia de clase JS. */
.sgw-01{display:block; color:var(--sg-text); font-size:var(--sg-fs-xs);}
.sgw-02{padding:16px; min-height:118px; border:1px solid var(--sg-border); border-radius:var(--sg-radius-lg); background:var(--sg-surface); text-align:left; cursor:pointer;}
.sgw-03{display:block; font-size:var(--sg-fs-xl); margin-bottom:8px;}
.sgw-04{display:block; margin-top:6px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); line-height:1.5;}
.sgw-05{padding:11px; border-radius:var(--sg-radius-lg); background:var(--sg-surface); border:1px solid var(--sg-border);}
.sgw-06{display:block; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); font-weight:900; text-transform:uppercase;}
.sgw-07{display:block; margin-top:4px; color:var(--sg-text); font-size:var(--sg-fs-sm);}
.sgw-08{padding:17px; min-height:130px; border:1px solid var(--sg-border); border-radius:var(--sg-radius-lg); background:var(--sg-surface); text-align:left; cursor:pointer;}
.sgw-09{display:block; font-size:var(--sg-fs-2xl); margin-bottom:8px;}
.sgw-10{display:block; margin-top:6px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs); line-height:1.55;}
.sgw-11{min-height:64px; padding:11px 13px; border:1px solid var(--sg-border); border-radius:var(--sg-radius-lg); background:var(--sg-surface); text-align:left; cursor:pointer;}
.sgw-12{display:block; color:var(--sg-text); font-size:var(--sg-fs-sm);}
.sgw-13{display:block; margin-top:4px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs);}
.sgw-14{display:block; color:var(--sg-text); font-size:var(--sg-fs-xs);}
.sgw-15{display:block; margin-top:3px; color:var(--sg-text-muted); font-size:var(--sg-fs-xs);}
.sgw-16{margin:0;}
.sgw-17{display:flex; align-items:flex-start; justify-content:space-between; gap:18px; flex-wrap:wrap;}
.sgw-18{display:grid; gap:9px; margin-top:10px;}
.sgw-19{display:block; font-weight:900;}

/* Responsive del workspace migrado. */
@media (max-width: 860px) {
  /* Hub: patrones repetidos migrados desde inline. */
  .sgw-02, .sgw-08 { min-height: 0; padding: 13px; }
  .sgw-11 { min-height: 0; }
  
  .sgw-17 { flex-direction: column; gap: 10px; }
}


.sgw-20 { margin-top: var(--sg-4); padding: var(--sg-5); border: 1px solid var(--sg-border); border-radius: var(--sg-radius); background: var(--sg-surface); }
.sgw-21 { margin-top: var(--sg-5); padding-top: var(--sg-4); border-top: 1px solid var(--sg-rule); }
.sgw-21:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.sgw-22 { color: var(--sg-text-muted); font-size: var(--sg-fs-xs); font-weight: var(--sg-fw-black); letter-spacing: var(--sg-ls-caps); text-transform: uppercase; }
.sgw-23 { margin: var(--sg-1) 0 var(--sg-1); color: var(--sg-text); font-size: var(--sg-fs-2xl); font-weight: var(--sg-fw-bold); letter-spacing: var(--sg-ls-tight); }
.sgw-24 { margin-bottom: var(--sg-4); color: var(--sg-text-muted); font-size: var(--sg-fs-md); line-height: 1.5; }

/* La etiqueta ya nombra el destino. */
.sgw-03 { display: none; }

.sgw-02 { display: grid; align-content: start; gap: var(--sg-1); min-height: 0; padding: var(--sg-4); }

.sg-qr-dialog{width:min(840px,calc(100vw - 24px));max-height:90vh;overflow:auto}.sg-qr-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sg-4)}
.sg-qr-admin-grid{display:grid;grid-template-columns:260px minmax(0,1fr);gap:var(--sg-5);align-items:start}.sg-qr-preview{display:grid;justify-items:center;gap:var(--sg-2);padding:var(--sg-4);text-align:center;background:var(--sg-surface-alt)}.sg-qr-canvas{display:block;width:min(100%,248px);height:auto;border:6px solid var(--sg-surface)}
.sg-qr-share{min-width:0}.sg-qr-state-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sg-3);padding-bottom:var(--sg-3);border-bottom:1px solid var(--sg-rule)}.sg-qr-link{margin:var(--sg-4) 0 var(--sg-3)}.sg-qr-actions{display:flex;flex-wrap:wrap;gap:var(--sg-2)}.sg-qr-section{margin-top:var(--sg-4);padding-top:var(--sg-4);border-top:1px solid var(--sg-rule)}.sg-qr-state-actions{margin-top:var(--sg-3)}.sg-qr-state-actions [aria-pressed="true"]{border-color:var(--sg-accent);background:var(--sg-accent-soft);color:var(--sg-accent)}
@media(max-width:860px){.sg-qr-modal-head{flex-direction:column}.sg-qr-admin-grid{grid-template-columns:1fr}.sg-qr-preview{max-width:340px;width:100%;margin:auto}}@media(max-width:560px){.sg-qr-share-actions,.sg-qr-state-actions{display:grid}.sg-qr-share-actions button,.sg-qr-state-actions button{width:100%}}

/* SIGDA V92 · SINGLE VISUAL OWNER
   Ultimas superficies visuales migradas desde hojas runtime V70/V82/V91.
   Este modulo es el unico owner visual de estos contratos DOM; los runtimes
   conservan comportamiento, pero ya no inyectan hojas de generaciones previas. */

/* ── Gate de autenticacion ───────────────────────────────────────── */
#sigdaV70AuthCurtain{
  position:fixed;
  inset:0;
  z-index:2147483646;
  display:none;
  align-items:center;
  justify-content:center;
  width:100vw;
  height:100dvh;
  min-height:100vh;
  background:var(--sg-bg);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
}
#sigdaV70AuthCurtain.show{
  display:flex;
  opacity:1;
  visibility:visible;
  pointer-events:auto;
}
#sigdaV70AuthCurtain .sigda-v70-curtain-card{
  width:auto;
  max-width:360px;
  padding:0;
  border:0;
  background:transparent;
  box-shadow:none;
  text-align:center;
}
#sigdaV70AuthCurtain .sigda-v70-curtain-mark,
#sigdaV70AuthCurtain .sigda-v70-curtain-spinner{display:none;}
#sigdaV70AuthCurtain .sigda-v70-curtain-card strong{
  display:block;
  color:var(--sg-text-muted);
  font:600 var(--sg-fs-md)/1.35 var(--sg-font);
}
#sigdaV70AuthCurtain .sigda-v70-curtain-card p{display:none;}

