  /* Fuentes locales en fonts/ (mismas que Panel Developer): Onest = texto, Michroma = marca, Fragment Mono = código/datos.
     Se cargan desde la carpeta fonts/ junto a este HTML (deben viajar juntos). */
  @font-face { font-family:'Onest'; font-weight:100 900; font-style:normal; font-display:swap;
    src: local('Onest'), url('fonts/Onest-Variable.woff2') format('woff2'); }
  @font-face { font-family:'Michroma'; font-weight:400; font-style:normal; font-display:swap;
    src: local('Michroma'), url('fonts/Michroma-Regular.woff2') format('woff2'); }
  @font-face { font-family:'Fragment Mono'; font-weight:400; font-style:normal; font-display:swap;
    src: local('Fragment Mono'), url('fonts/FragmentMono-Regular.woff2') format('woff2'); }

  :root {
    --bg: #161a20;
    --card: #1e232b;
    --card2: #252b34;
    --border: #2c3340;
    --border-strong: #3c4454;
    --text: #eef1f4;
    --muted: #8c96a3;
    --muted-strong: #b7bec9;
    --muted-dim: #667080; /* texto de registros revertidos: más oscuro que --muted */
    --reverted-bg: rgba(0,0,0,.24); /* fondo de registros revertidos: más oscuro que el card */
    /* --accent / --accent2 se mantienen como nombres (los usa el JS inline),
       pero ahora apuntan al verde del logo y al rojo de marca. */
    --accent: #0f5132;
    --accent-strong: #0c4128;
    --accent-ink: #eafff2;
    --accent-soft: rgba(15,81,50,.18);
    --accent2: #ff6b57;
    --accent2-soft: rgba(255,107,87,.14);
    --positive: #3ecf83;
    --positive-soft: rgba(62,207,131,.14);
    --amber: #e8b34c;
    --amber-soft: rgba(232,179,76,.14);
    --info: #6ea8fe;
    --info-soft: rgba(110,168,254,.14);
    --link: #6ea8fe;
    --brand-cyan: #2fd0c8;
    --input-bg: #12151b;
    --radius-sm: 9px;
    --radius-md: 12px;
    --radius-lg: 16px;
    --shadow-card: 0 1px 0 rgba(255,255,255,.02) inset, 0 10px 26px rgba(0,0,0,.35);
    --focus-ring: 0 0 0 3px rgba(62,207,131,.35);
    --font-display: 'Onest', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    --font-accent: 'Onest', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    --font-body: 'Onest', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    --font-brand: 'Michroma', 'Onest', ui-sans-serif, system-ui, sans-serif;
    --mono: 'Fragment Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
    --kanji: 'Noto Sans JP','Hiragino Sans','Yu Gothic','Meiryo','Noto Sans CJK JP','Microsoft YaHei',sans-serif;
    --ease: cubic-bezier(.22,1,.36,1);
    /* Alias con los nombres del panel Developer: la capa de animaciones e interacción (más abajo) es la misma en ambos archivos. */
    --bg-elevated: #1b2029;
    --primary: var(--accent);
    --primary-strong: var(--accent-strong);
    --primary-ink: var(--accent-ink);
    --primary-soft: var(--accent-soft);
    --danger: var(--accent2);
    --danger-soft: var(--accent2-soft);
  }
  * { box-sizing: border-box; }
  html { -webkit-text-size-adjust: 100%; }
  body { font-family: var(--font-body); background: var(--bg); color: var(--text); margin: 0; padding: 0; line-height: 1.5; -webkit-font-smoothing: antialiased; min-height: 100vh; }
  h1, h2, h3 { font-family: var(--font-display); font-weight: 600; }
  a { color: var(--link); text-decoration: none; }
  a:hover { text-decoration: underline; }
  a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, [tabindex]:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--radius-sm); }

  /* ============ LOGO ============ */
  .logo { display: flex; align-items: center; gap: 11px; }
  .logo-mark { width: 44px; height: 44px; border-radius: 11px; background: #0f5132; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
  .logo-word { font-family: var(--font-brand); font-size: 15px; letter-spacing: 0; white-space: nowrap; font-weight: 400; }
  .logo-word .sk { color: var(--text); }
  .logo-word .bet { color: var(--brand-cyan); }
  .logo-mark-lg { width: 64px; height: 64px; border-radius: 15px; }
  .tagline { font-size: 13px; color: var(--muted); font-family: var(--font-accent); font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-left: 12px; padding-left: 12px; border-left: 1px solid var(--border); }

  /* ============ TOPBAR ============ */
  header { background: rgba(22,26,32,.9); backdrop-filter: blur(10px); padding: 14px 22px; display: flex; justify-content: space-between; align-items: center; gap: 14px; border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 10; }
  header .info { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--muted); }
  header .campana, header .campana:hover, header .campana:focus, header .campana:active { position: relative; width: 46px; height: 46px; min-height: 0; padding: 0; margin: 0; display: inline-flex; align-items: center; justify-content: center; border: 0 !important; border-radius: 0; background: transparent !important; box-shadow: none !important; outline: none; transform: none; color: var(--muted-strong); transition: color .15s ease; }
  header .campana svg { width: 28px; height: 28px; }
  header .campana:hover, header .campana:focus-visible { color: var(--positive); }
  header .campana.con-reclamos, header .campana.con-reclamos:hover { color: var(--accent2); }
  header .campana.con-retiros, header .campana.con-retiros:hover { color: var(--positive); }
  header .campana-badge { position: absolute; top: 2px; right: 0; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: var(--accent2); color: #fff; font-size: 10px; font-weight: 700; line-height: 18px; text-align: center; box-shadow: 0 0 0 2px var(--bg, #0f1216); }
  header .campana-badge.retiros { background: var(--positive); color: #062514; }
  header .campana.con-coincidencias, header .campana.con-coincidencias:hover { color: var(--amber); }
  header .campana-badge.coincidencias { background: var(--amber); color: #2a1d00; }
  /* Detalle de la notificación (de qué caja son los pedidos): aparece al pasar el mouse o enfocar la campanita */
  header .campana-detalle { display: none; position: absolute; top: 100%; right: 0; z-index: 60; min-width: 220px; max-width: 300px; padding: 10px 12px; text-align: left; font-size: 12px; font-weight: 500; line-height: 1.45; color: var(--text); background: var(--card2); border: 1px solid var(--border-strong); border-radius: var(--radius-md, 10px); box-shadow: 0 8px 24px rgba(0,0,0,.4); pointer-events: none; }
  header .campana:hover .campana-detalle, header .campana:focus-visible .campana-detalle { display: block; }
  header .campana-detalle b { display: block; margin-bottom: 4px; }
  header .campana-detalle .cd-fila { display: flex; justify-content: space-between; gap: 12px; }
  header .campana-detalle .cd-mod { color: var(--accent2); }
  /* Filtro de cajas (Retiros solicitados / Reclamos) */
  .filtro-cajas { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 12px; }
  .filtro-cajas .filtro-titulo { font-size: 12px; color: var(--muted-strong); margin-right: 4px; }
  .filtro-cajas input[type="text"] { max-width: 240px; }
  /* Reclamos: lista a la izquierda, detalle del movimiento citado a la derecha (misma línea vertical que .vr-grid). */
  .rc-grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); margin-top: 4px; align-items: start; }
  .rc-grid .rc-izq { padding-right: 20px; min-width: 0; }
  .rc-grid .rc-der { padding-left: 20px; border-left: 1px solid var(--border-strong); min-width: 0; position: sticky; top: 12px; }
  .rc-fila { padding: 8px 8px 8px 10px; border-bottom: 1px solid var(--border); border-left: 3px solid transparent; transition: background .15s, border-color .15s; }
  .rc-fila.sel { background: var(--card2); border-left-color: var(--positive); }
  .rc-cod { display: inline; margin: 0; padding: 0; min-height: 0; border: 0; background: none; box-shadow: none; font: inherit; color: var(--positive); text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
  .rc-cod:hover, .rc-cod:focus-visible { color: var(--text); }
  .rc-vacio { color: var(--muted); font-size: 13px; padding: 24px 8px; text-align: center; }
  .rc-detalle { display: flex; flex-direction: column; gap: 14px; animation: fc-entra .2s ease-out both; }
  .rc-detalle h3 { margin: 0 0 6px; font-size: 13px; font-weight: 600; color: var(--muted-strong); }
  .rc-detalle .rc-cab { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 14px; }
  .rc-detalle .rc-bloque + .rc-bloque { padding-top: 14px; border-top: 1px solid var(--border); }
  .rc-detalle .rc-texto { margin: 0; font-size: 13px; line-height: 1.45; white-space: pre-wrap; overflow-wrap: anywhere; }
  .rc-detalle .balance-detalle-row span { color: var(--muted); }
  .rc-detalle .balance-detalle-row b { text-align: right; overflow-wrap: anywhere; white-space: normal; }
  @media (max-width: 900px) {
    .rc-grid { grid-template-columns: minmax(0, 1fr); }
    .rc-grid .rc-izq { padding-right: 0; }
    .rc-grid .rc-der { padding-left: 0; border-left: 0; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border-strong); position: static; }
  }
  @media (prefers-reduced-motion: reduce) { .rc-detalle { animation: none; } }
  /* Detalle de saldos del viewer: mismo formato que su tab Depósito-Retiro (publico.html). */
  .balance-detalle-list { display: flex; flex-direction: column; gap: 5px; }
  .balance-detalle-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; font-size: 12.5px; color: var(--muted); border-bottom: 1px solid var(--border); padding-bottom: 5px; }
  .balance-detalle-row:last-child { border-bottom: none; padding-bottom: 0; }
  .balance-detalle-row b { color: var(--muted-strong); font-weight: 600; white-space: nowrap; }
  .balance-detalle-row.total, .balance-detalle-row.total b { color: var(--text); }
  .balance-detalle-row.total { font-size: 13.5px; }
  /* Filtros de caja/viewer: radios con el marco deslizante de Crear Bet, en versión compacta (cada opción mide su texto). */
  .filtro-cajas .radio-group.cf-radios { margin-top: 0; }
  .radio-group.cf-radios > .radio-option { flex: 0 0 auto; min-width: 0; align-items: center; white-space: nowrap; padding: 8px 14px; }
  .radio-group.cf-radios .radio-option input[type="radio"] { margin: 0; }
  .fc-slot { display: contents; }
  .fc-slot > * { animation: fc-entra .24s cubic-bezier(.2,.9,.3,1.2) both; transform-origin: left center; }
  @keyframes fc-entra { from { opacity: 0; transform: translateX(-10px) scale(.94); } to { opacity: 1; transform: none; } }
  .filtro-cajas .tv-buscar { width: 280px; max-width: 100%; }
  @media (prefers-reduced-motion: reduce) { .fc-slot > * { animation: none; } }
  /* Resumen del viewer (izquierda) + solicitud de retiro (derecha), separados por una línea vertical. */
  .vr-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); margin-top: 12px; }
  .vr-grid.sin-der { grid-template-columns: minmax(0, 1fr); }
  .vr-grid .vr-izq { padding-right: 20px; }
  .vr-grid.sin-der .vr-izq { padding-right: 0; }
  .vr-grid .vr-der { padding-left: 20px; border-left: 1px solid var(--border-strong); display: flex; flex-direction: column; gap: 16px; }
  .vr-solicitud { display: flex; flex-direction: column; gap: 10px; }
  .vr-solicitud + .vr-solicitud { padding-top: 16px; border-top: 1px solid var(--border); }
  .vr-acciones { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
  .vr-acciones > * { margin: 0; min-width: 0; }
  .vr-acciones input.vr-monto { flex: 0 0 110px; width: 110px; min-height: 38px; padding: 7px 10px; font-size: 14px; }
  .vr-acciones input.vr-motivo { flex: 1 1 160px; min-height: 38px; padding: 7px 10px; font-size: 14px; }
  .vr-acciones label.file-pick.vr-archivo { flex: 1 1 140px; min-height: 38px; padding: 0 10px; }
  .vr-acciones button.small { flex: 0 0 auto; min-height: 38px; padding: 0 14px; white-space: nowrap; }
  @media (max-width: 900px) {
    .vr-grid { grid-template-columns: minmax(0, 1fr); }
    .vr-grid .vr-izq { padding-right: 0; }
    .vr-grid .vr-der { padding-left: 0; border-left: 0; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border-strong); }
  }
  /* Sub-tab Viewers: buscador y botones en una sola línea, todos de la misma altura y alineados. */
  .vl-barra { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 10px; }
  .vl-barra > * { margin: 0; }
  .vl-reportes { margin-top: 22px; border-top: 1px solid var(--border, rgba(255,255,255,.08)); padding-top: 16px; }
  .vl-reportes h3 { margin: 0 0 10px; font-size: 13px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
  .vl-rep-fila { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--border, rgba(255,255,255,.06)); }
  .vl-rep-fila:last-child { border-bottom: 0; }
  .vl-rep-fila button { margin: 0; min-height: 38px; padding: 8px 14px; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; }
  .vl-barra input[type="text"] { flex: 1 1 280px; width: auto; max-width: 460px; min-height: 44px; box-sizing: border-box; }
  .vl-barra button { margin: 0; min-height: 44px; box-sizing: border-box; white-space: nowrap; display: inline-flex; align-items: center; justify-content: center; }
  /* Historial del viewer: tablas por tipo (colapsables y paginadas) o lista cronológica, con el cuadre del saldo a la derecha. */
  .hv-grid { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 20px; align-items: start; margin-top: 12px; }
  .hv-aside { display: flex; flex-direction: column; gap: 16px; }
  .hv-barra { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: space-between; margin-bottom: 12px; }
  .hv-der { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
  .hv-der > button { margin: 0; display: inline-flex; align-items: center; gap: 8px; }
  .hv-acc { display: flex; gap: 8px; flex-wrap: wrap; }
  .hv-acc button { margin: 0; }
  .hv-seg { display: inline-flex; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); overflow: hidden; }
  .hv-seg button { margin: 0; border: 0; border-radius: 0; background: transparent; color: var(--muted-strong); min-height: 34px; padding: 0 14px; font-size: 13px; }
  .hv-seg button.on { background: var(--accent); color: var(--accent-ink); }
  .hv-sec { background: var(--card2); border: 1px solid var(--border); border-radius: var(--radius-md); margin-bottom: 12px; overflow: hidden; }
  .hv-sec > summary { list-style: none; cursor: pointer; display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 10px 14px; }
  .hv-sec > summary::-webkit-details-marker { display: none; }
  .hv-sec > summary:focus-visible { outline: 2px solid var(--positive); outline-offset: -2px; }
  .hv-ch { flex: 0 0 auto; color: var(--muted); transition: transform .15s; }
  .hv-sec[open] .hv-ch { transform: rotate(90deg); }
  .hv-letra { width: 24px; height: 24px; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px; }
  .hv-letra-mini { color: var(--muted-strong); }
  .hv-tot { margin-left: auto; display: flex; flex-wrap: wrap; gap: 4px 14px; font-family: 'Fragment Mono', ui-monospace, monospace; font-size: 13px; }
  .hv-t { font-size: 13px; }
  .hv-t th, .hv-t td { padding: 6px 10px; vertical-align: middle; }
  .hv-t th.n, .hv-t td.n { text-align: right; white-space: nowrap; font-family: 'Fragment Mono', ui-monospace, monospace; }
  .hv-t td.tiny { white-space: nowrap; color: var(--muted-strong); }
  .hv-t tfoot td { font-weight: 600; background: var(--card); border-top: 2px solid var(--border-strong); border-bottom: 0; }
  .hv-t tfoot tr.hv-res td { font-weight: 400; color: var(--muted); border-top: 1px dashed var(--border-strong); background: transparent; }
  .hv-in { color: var(--positive); } .hv-out { color: #d0867f; } /* rojo apagado: los negativos no gritan como --accent2 */ .hv-cero { color: var(--muted); }
  .hv-tipo { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 600; white-space: nowrap; }
  @media (max-width: 1100px) { .hv-grid { grid-template-columns: minmax(0, 1fr); } }
  /* Etiqueta con el nombre del titular de la caja de un pedido. El color (--cc) lo pone chipCaja(): uno por receptor (Streamer / cada moderador). */
  .chip-caja { display: inline-block; margin-left: 6px; padding: 1px 9px; border-radius: 999px; font-size: 11px; font-weight: 600; color: var(--cc, var(--muted-strong)); border: 1px solid var(--cc, var(--border-strong)); background: var(--card2); background: color-mix(in srgb, var(--cc, transparent) 14%, var(--card2)); }

  /* Buscador de moderadores con menú "glide": el menú sale de su esquina y UN solo resaltado se desliza entre filas,
     recordando dónde quedó (al reabrir parte de ahí). Mismos colores del panel: --input-bg, --border-strong, --positive. */
  .gs { position: relative; display: inline-block; width: 300px; max-width: 100%; }
  .filtro-cajas .gs .gs-input { width: 100%; max-width: none; padding-right: 36px; }
  .gs .gs-flecha { position: absolute; right: 12px; top: 50%; width: 14px; height: 14px; margin-top: -7px; color: var(--muted); pointer-events: none; transition: transform .2s ease, color .15s ease; }
  .gs.abierto .gs-flecha { transform: rotate(180deg); color: var(--positive); }
  .gs .gs-menu { position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: 40; padding: 6px; max-height: 260px; overflow-y: auto; background: var(--card2); border: 1px solid var(--border-strong); border-radius: var(--radius-md, 10px); box-shadow: 0 12px 28px rgba(0,0,0,.45);
    transform-origin: top left; opacity: 0; visibility: hidden; pointer-events: none; transform: scale(.82) translateY(-6px);
    transition: opacity .14s ease, transform .2s cubic-bezier(.2,.9,.3,1.25), visibility 0s linear .2s; }
  .gs.abierto .gs-menu { opacity: 1; visibility: visible; pointer-events: auto; transform: none; transition-delay: 0s; }
  .gs .gs-hl { position: absolute; left: 6px; right: 6px; top: 0; height: 0; border-radius: 8px; background: var(--positive-soft); opacity: 0; pointer-events: none; will-change: transform, height; }
  .gs .gs-hl.anima { transition: transform .22s cubic-bezier(.3,.9,.3,1), height .22s cubic-bezier(.3,.9,.3,1), opacity .15s ease; }
  .gs .gs-op { position: relative; z-index: 1; padding: 9px 12px; border-radius: 8px; font-size: 14px; color: var(--muted-strong); cursor: pointer; user-select: none; transition: color .15s ease; }
  .gs .gs-op.activa { color: var(--text); }
  .gs .gs-op.elegida { color: var(--positive); font-weight: 600; }
  .gs .gs-vacio { padding: 10px 12px; font-size: 13px; color: var(--muted); }
  @media (prefers-reduced-motion: reduce) { .gs .gs-menu, .gs .gs-hl.anima, .gs .gs-flecha { transition: none; } }
  /* Distintivo de rol: píldora cian (el color de "Bet"), sin borde, con punto que late (igual que el panel Developer) */
  .role-chip { display: flex; align-items: center; gap: 8px; height: 30px; padding: 0 13px 0 11px; border-radius: 999px; background: rgba(47,208,200,.13); color: var(--brand-cyan); font-family: var(--font-accent); font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; white-space: nowrap; transition: background-color .2s ease; }
  .role-chip:empty { display: none; }
  .role-chip:hover { background: rgba(47,208,200,.22); }
  .role-chip::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; animation: ping-cian 2s ease-out infinite; }
  @keyframes ping-cian { 0% { box-shadow: 0 0 0 0 rgba(47,208,200,.6); } 100% { box-shadow: 0 0 0 8px rgba(47,208,200,0); } }

  /* Contador de auto-logout por inactividad: píldora sin borde; el relleno es el tiempo que queda.
     En el último minuto (.countdown-warning) pasa a ámbar y el reloj se balancea. */
  #inactividad-contador { position: relative; display: flex; align-items: center; gap: 7px; height: 30px; padding: 0 13px 0 11px; border-radius: 999px; background: var(--card); overflow: hidden; font-family: var(--font-accent); font-size: 13px; font-weight: 500; font-variant-numeric: tabular-nums; color: var(--muted-strong); transition: color .3s ease; }
  #inactividad-contador.oculto { display: none; }
  .tm-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 100%; background: rgba(47,208,200,.16); transition: width .35s linear, background-color .3s ease; }
  .tm-ic { position: relative; width: 15px; height: 15px; flex: none; }
  .tm-rl { position: relative; display: flex; }
  #inactividad-contador.countdown-warning { color: var(--amber); }
  #inactividad-contador.countdown-warning .tm-fill { background: rgba(232,179,76,.2); }
  #inactividad-contador.countdown-warning .tm-ic { animation: tilt-reloj 1.4s ease-in-out infinite; }
  @keyframes tilt-reloj { 0%, 60%, 100% { transform: rotate(0); } 20% { transform: rotate(-12deg); } 40% { transform: rotate(10deg); } }

  /* Cerrar sesión: el ícono gira 180° al pasar el cursor */
  .topbar-salir { display: inline-flex; align-items: center; gap: 7px; }
  .topbar-salir svg { width: 15px; height: 15px; flex: none; transition: transform .35s cubic-bezier(.34,1.5,.64,1); }
  .topbar-salir:hover svg { transform: rotate(180deg) scale(1.1); }

  /* Con el menú lateral (igual que el panel Developer) el contenedor ya no se centra: va pegado a la
     izquierda y ocupa todo el ancho disponible, para que las tablas de varias columnas (moderadores,
     apostadores, historial...) no queden apretadas ni fuercen scroll horizontal. */
  .container { max-width: 1600px; margin: 0; padding: 20px 24px 48px; }
  .card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 16px; box-shadow: var(--shadow-card); animation: card-aparecer .25s ease both; }
  .card h2 { font-size: 13px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted-strong); margin: 0 0 16px; font-family: var(--font-accent); font-weight: 600; display: flex; align-items: center; gap: 8px; }
  .card h2 svg { flex-shrink: 0; color: var(--positive); }
  label { display: block; font-size: 12.5px; font-weight: 500; color: var(--muted-strong); margin-top: 14px; margin-bottom: 6px; font-family: var(--font-accent); }
  label:first-of-type { margin-top: 0; }
  input, select { width: 100%; padding: 11px 12px; border-radius: var(--radius-sm); border: 1px solid var(--border-strong); background: var(--input-bg); color: var(--text); font-size: 15px; font-family: inherit; min-height: 44px; transition: border-color .15s ease, box-shadow .15s ease; }
  /* El texto nativo "Ningún archivo seleccionado" hereda el font-size del input -- se achica
     acá puntualmente para que un input[type=file] quepa en una fila junto a los demás campos. */
  input[type="file"] { font-size: 11.5px; padding: 10px 8px; }
  /* Selector de archivo propio (el input nativo queda oculto): evita el texto «Ningún archivo seleccionado»,
     que además reaparecía tras guardar. Muestra un mensaje genérico y, al elegir, el nombre del archivo. */
  label.file-pick { display: flex; align-items: center; gap: 8px; margin: 0; min-height: 44px; padding: 0 12px; border-radius: var(--radius-sm); border: 1px dashed var(--border-strong); background: var(--input-bg); color: var(--muted-strong); font-size: 12.5px; font-weight: 500; cursor: pointer; text-transform: none; transition: border-color .15s ease, color .15s ease; }
  label.file-pick:hover { border-color: var(--positive); color: var(--text); }
  label.file-pick svg { flex-shrink: 0; color: var(--positive); }
  label.file-pick .fp-txt { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  label.file-pick.con-archivo { border-style: solid; border-color: var(--positive); color: var(--text); }
  input[type="file"]:focus-visible + label.file-pick, label.file-pick:focus-within { outline: 2px solid var(--positive); outline-offset: 2px; }
  /* Interruptor on/off (reemplaza al checkbox). */
  label.switch-row { display: flex; align-items: center; gap: 10px; margin: 0; cursor: pointer; text-transform: none; font-size: 12.5px; color: var(--muted-strong); }
  label.switch-row .sw-input { position: absolute; opacity: 0; width: 1px; height: 1px; min-height: 0; padding: 0; margin: 0; pointer-events: none; }
  label.switch-row .sw-track { position: relative; flex: 0 0 auto; width: 42px; height: 24px; border-radius: 999px; background: var(--border-strong); transition: background .18s ease; }
  label.switch-row .sw-track i { position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.4); transition: transform .18s ease; }
  label.switch-row .sw-input:checked + .sw-track { background: var(--positive); }
  label.switch-row .sw-input:checked + .sw-track i { transform: translateX(18px); }
  label.switch-row .sw-input:focus-visible + .sw-track { outline: 2px solid var(--positive); outline-offset: 2px; }
  /* QR dentro de la tarjeta de stream. */
  .sc-pay-qr { display: flex; justify-content: center; flex-shrink: 0; }
  .sc-qr { width: 100%; max-width: 168px; aspect-ratio: 1; object-fit: contain; border-radius: 10px; background: #fff; padding: 6px; }
  /* Bloque único de depósitos, lo más bajo posible: título + número(s) a la izquierda, QR cuadrado a la derecha.
     La altura la fija el QR (el título ya no ocupa una fila propia). */
  .sc-pay.sc-pay-compacto { margin-top: 12px; padding: 8px 10px; }
  .sc-pay-compacto .sc-pay-body { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
  .sc-pay-compacto .sc-pay-izq { flex: 1 1 auto; min-width: 0; }
  .sc-pay-compacto .sc-pay-title { margin-bottom: 6px; }
  .sc-pay-compacto .sc-pay-row + .sc-pay-row { margin-top: 6px; padding-top: 6px; }
  .sc-pay-compacto .sc-pay-ico { width: 30px; height: 30px; border-radius: 9px; }
  .sc-pay-compacto .sc-phone { font-size: 17px; }
  .sc-pay-compacto .sc-pay-qr { flex-shrink: 0; }
  .sc-pay-compacto .sc-manage { margin-top: 6px; font-size: 12px; }
  .sc-pay-compacto .sc-pay-qr .sc-qr { display: block; width: 88px; height: 88px; max-width: 88px; aspect-ratio: 1; padding: 3px; border-radius: 8px; object-fit: contain; }
  input::placeholder { color: #5c6472; }
  input:hover, select:hover { border-color: #4c5567; }
  input:focus, select:focus { border-color: var(--positive); }
  /* Mismo motivo que en el panel Developer: cuando cada campo de una fila
     va envuelto en su propio <div>, label:first-of-type le borra el
     margin-top a TODAS las labels de la fila (cada una es "primera"
     dentro de su propio div), no solo a la primera fila del formulario.
     Poniendo el espaciado acá en vez de en cada label, una fila que
     sigue a otra siempre queda separada. */
  .row { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
  .row > * { flex: 1; min-width: 140px; }
  .row:first-child { margin-top: 0; }
  button { margin-top: 14px; padding: 12px 18px; border: 1px solid var(--accent); border-radius: var(--radius-sm); background: var(--accent); color: var(--accent-ink); font-weight: 700; cursor: pointer; font-size: 14px; min-height: 44px; font-family: var(--font-accent); transition: transform .1s ease, box-shadow .15s ease, background-color .15s ease, border-color .15s ease, opacity .15s ease; }
  /* Hover y clic (borde luminoso): sin desplazar el botón. El :where() deja la especificidad en 0
     para que cada variante (secondary, danger, pestañas, íconos) pueda afinar su propio color. */
  :where(button:hover:not(:disabled):not(.toast-x):not(.btn-cargando)) { border-color: var(--positive); box-shadow: 0 0 0 3px rgba(62,207,131,.25); }
  :where(button:active:not(:disabled):not(.toast-x)) { box-shadow: 0 0 0 1px rgba(62,207,131,.5), inset 0 2px 6px rgba(0,0,0,.4); }
  :where(button:not(.secondary):not(.danger):hover) { background: var(--accent-strong); border-color: var(--accent-strong); }
  button.secondary { background: transparent; color: var(--text); border: 1px solid var(--border-strong); font-weight: 600; }
  button.secondary:hover { background: var(--card2); border-color: var(--positive); }
  button.danger { background: transparent; color: var(--accent2); border: 1px solid rgba(255,107,87,.4); font-weight: 600; }
  button.danger:hover { background: var(--accent2-soft); border-color: var(--accent2); }
  button.danger:hover:not(:disabled) { box-shadow: 0 0 0 3px rgba(255,107,87,.25); }
  button.danger:active:not(:disabled) { box-shadow: 0 0 0 1px rgba(255,107,87,.5), inset 0 2px 6px rgba(0,0,0,.4); }
  button.small { padding: 8px 14px; font-size: 12.5px; min-height: 36px; margin-top: 0; }
  /* Ídem panel Developer: un botón "small" que va SOLO como acción final
     de un formulario (hijo directo de .card) necesita su espacio de
     vuelta; uno que va en línea dentro de una tabla o grupo de botones
     debe seguir en 0 para no desalinearse -- por eso el selector más
     específico, no se toca la regla de arriba. */
  .card > button.small { margin-top: 14px; }
  button.full { width: 100%; margin-top: 16px; font-size: 16px; min-height: 50px; }
  button:disabled { opacity: .5; cursor: not-allowed; transform: none; }
  .msg { margin-top: 12px; font-size: 13.5px; padding: 10px 12px; border-radius: var(--radius-sm); display: none; align-items: center; gap: 8px; border: 1px solid transparent; }
  .msg.ok { display: flex; background: var(--positive-soft); color: #8fe0af; border-color: rgba(62,207,131,.3); }
  .msg.error { display: flex; background: var(--accent2-soft); color: #ffb3a6; border-color: rgba(255,107,87,.3); }
  table { width: 100%; border-collapse: collapse; font-size: 13px; margin-top: 8px; }
  th, td { text-align: left; padding: 10px 8px; border-bottom: 1px solid var(--border); vertical-align: top; }
  /* Bets del periodo: línea segmentada entre un lote y la fila siguiente (otro lote o bet sin lote) */
  tr.lote-fin td { border-bottom: 1px dashed var(--muted); }
  th { color: var(--muted); font-weight: 600; font-size: 11px; text-transform: uppercase; letter-spacing: .05em; font-family: var(--font-accent); }
  tr:last-child td { border-bottom: none; }
  .table-wrap { overflow-x: auto; margin: 0 -4px; }
  .badge { font-size: 10.5px; font-weight: 700; padding: 3px 10px; border-radius: 999px; white-space: nowrap; letter-spacing: .03em; font-family: var(--font-accent); text-transform: uppercase; background: var(--card2); color: var(--muted-strong); }
  .badge.abierta, .badge.activo, .badge.verificado, .badge.confirmado, .badge.pagado, .badge.ganada, .badge.confirmada, .badge.ok { background: var(--positive-soft); color: var(--positive); }
  .badge.pendiente, .badge.solicitado, .badge.cerrada, .badge.suspendido { background: var(--amber-soft); color: var(--amber); }
  .badge.registrado { background: var(--amber-soft); color: var(--amber); }
  .badge.sin_registrar { background: var(--card2); color: var(--muted); }
  .badge.resultado_registrado, .badge.liquidado, .badge.subida, .badge.anulada { background: var(--info-soft); color: var(--info); }
  .badge.rechazado, .badge.perdida { background: var(--accent2-soft); color: var(--accent2); }
  /* ============ LAYOUT: menú lateral a la izquierda + contenido (igual que el panel Developer) ============ */
  .layout { display: flex; gap: 20px; align-items: flex-start; }
  .vistas-col { flex: 1; min-width: 0; }
  .tabs { display: flex; flex-direction: column; gap: 4px; background: var(--card); border: 1px solid var(--border); padding: 6px; border-radius: var(--radius-md); width: 230px; flex-shrink: 0; position: sticky; top: 90px; }
  .tabs button { margin-top: 0; background: transparent; color: var(--muted); border-radius: var(--radius-sm); min-height: 40px; border-color: transparent; width: 100%; text-align: left; padding-left: 14px; display: flex; align-items: center; gap: 11px; overflow: hidden; isolation: isolate; font-weight: 600; }
  .tabs button svg { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .tabs button:hover { background: transparent; color: var(--text); transform: none; box-shadow: none; }
  .tabs button.active, .tabs button.active:hover { background: var(--positive-soft); color: var(--positive); font-weight: 700; }
  .subtabs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; position: relative; }
  .subtabs button { flex: 0 0 auto; min-width: 0; padding: 8px 14px; font-size: 13px; min-height: 36px; margin-top: 0; background: transparent; color: var(--muted); border: 1px solid var(--border-strong); transition: background-color .15s ease, color .15s ease, border-color .15s ease; }
  .subtabs button:hover:not(.active) { background: var(--card2); color: var(--text); border-color: #4c5567; box-shadow: none; }
  /* Segundo nivel de sub-tabs (subrayado), dentro del destinatario elegido en el tab Pagar. */
  .subtabs-sec { display: flex; gap: 24px; flex-wrap: wrap; border-bottom: 1px solid var(--border); margin: 2px 0 16px; position: relative; }
  .subtabs-sec button, .subtabs-sec button:hover, .subtabs-sec button:not(.secondary):not(.danger):hover { background: transparent; border: 0; border-bottom: 2px solid transparent; border-radius: 0; transform: none; box-shadow: none; color: var(--muted-strong); padding: 8px 2px; min-height: 0; margin: 0 0 -1px; font-size: 13.5px; font-weight: 600; }
  .subtabs-sec button:hover { color: var(--text); }
  .subtabs-sec button.active, .subtabs-sec button.active:hover, .subtabs-sec button.active:not(.secondary):not(.danger):hover { color: var(--text); border-bottom-color: transparent; } /* el subrayado lo dibuja el indicador deslizante (.ind) */
  .subtabs button.active, .subtabs button.active:hover { background: transparent; color: var(--text); border-color: transparent; font-weight: 700; box-shadow: none; }
  .hidden { display: none !important; }
  /* Selector inicial de tipo de liquidación (tab Bet -> Crear Bet) */
  /* Variante "tarjeta grande" del radio-option (título + descripción larga). El borde/fondo de la
     opción marcada lo pone el marco deslizante (.radio-group > .marco), como en el panel Developer. */
  .radio-option.opcion-liq { min-width: 220px; gap: 12px; padding: 16px; text-align: left; text-transform: none; color: var(--text); }
  .opcion-liq .radio-option-text b { font-size: 15px; margin-bottom: 4px; color: var(--text); font-family: var(--font-display); }
  .opcion-liq .radio-option-text p { margin: 0; }
  .opcion-liq input[type="radio"] { margin-top: 4px; }
  .liq-acciones { display: flex; justify-content: flex-end; margin-top: 16px; }
  .chip-liq { display: inline-flex; align-items: center; gap: 6px; font-size: 10.5px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; padding: 5px 12px; border-radius: 999px; background: var(--info-soft); color: var(--info); font-family: var(--font-accent); white-space: nowrap; }
  .btn-cierre-lote { background: var(--amber-soft) !important; color: var(--amber) !important; border: 1px solid rgba(232,179,76,.4) !important; padding: 6px 12px !important; font-size: 11.5px !important; min-height: 0 !important; margin-top: 0 !important; font-weight: 700 !important; }
  .btn-cierre-lote:hover { background: rgba(232,179,76,.24) !important; }
  /* Card de lote: mismo borde que los demás cards. Solo el card ACTIVO (lote abierto o bet abierta)
     se resalta con borde verde para identificarlo de un vistazo. */
  .card-activo { border-color: var(--positive); box-shadow: 0 0 0 1px rgba(62,207,131,.28), var(--shadow-card); }
  .btn-tarjeta { display: inline-flex; align-items: center; gap: 7px; }
  .btn-tarjeta svg { flex-shrink: 0; }
  /* Diálogo de confirmación propio (reemplaza al confirm() del navegador) */
  .cm-overlay { position: fixed; inset: 0; background: rgba(6,8,11,.72); backdrop-filter: blur(3px); display: flex; align-items: center; justify-content: center; z-index: 200; padding: 16px; }
  .cm-dialog { width: 100%; max-width: 440px; background: var(--card); border: 1px solid var(--border-strong); border-radius: var(--radius-lg); box-shadow: 0 24px 60px rgba(0,0,0,.55); padding: 24px; animation: cm-entrar .16s ease both; }
  .cm-head { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; }
  .cm-ico { width: 42px; height: 42px; border-radius: 12px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; background: var(--amber-soft); color: var(--amber); border: 1px solid rgba(232,179,76,.35); }
  .cm-title { margin: 0; font-size: 17px; font-family: var(--font-accent); font-weight: 700; color: var(--text); line-height: 1.25; }
  .cm-body { margin: 0 0 6px; font-size: 14px; line-height: 1.55; color: var(--muted-strong); }
  .cm-list { margin: 10px 0 0; padding: 0; list-style: none; display: grid; gap: 8px; }
  .cm-list li { position: relative; padding-left: 18px; font-size: 13px; line-height: 1.5; color: var(--muted); }
  .cm-list li::before { content: ''; position: absolute; left: 2px; top: 7px; width: 6px; height: 6px; border-radius: 50%; background: var(--amber); }
  .cm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 22px; flex-wrap: wrap; }
  .cm-actions button { margin-top: 0; }
  .cv-datos { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px 24px; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); animation: cv-datos-in .24s ease-out; }
  .cv-datos div > span { display: block; font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; margin-bottom: 2px; }
  .cv-datos div > b { font-size: 13.5px; font-weight: 600; }
  @keyframes cv-datos-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
  @media (prefers-reduced-motion: reduce) { .cv-datos { animation: none; } }
  .cm-actions .cm-ok { background: var(--amber); border-color: var(--amber); color: #1b1305; }
  .cm-actions .cm-ok:hover { background: #f0c063 !important; border-color: #f0c063 !important; }
  .cm-peligro .cm-ico { background: var(--accent2-soft); color: var(--accent2); border-color: rgba(255,107,87,.4); }
  .cm-peligro .cm-list li::before { background: var(--accent2); }
  .cm-peligro { border-color: rgba(255,107,87,.35); }
  .cm-actions .cm-ok.cm-ok-peligro { background: var(--accent2); border-color: var(--accent2); color: #2a0b06; }
  .cm-actions .cm-ok.cm-ok-peligro:hover { background: #ff8272 !important; border-color: #ff8272 !important; }
  /* Diálogo de reversa (motivo obligatorio) y filas "original + reversión" del historial */
  .rv-resumen { margin: 0 0 16px; padding: 12px 14px; border-radius: var(--radius-md); background: var(--card2); border: 1px solid var(--border); display: grid; gap: 6px; }
  .rv-resumen div { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; }
  .rv-resumen span:first-child { color: var(--muted); }
  .rv-resumen span:last-child { color: var(--text); font-weight: 600; text-align: right; }
  .rv-label { margin-top: 0; }
  .rv-texto { width: 100%; min-height: 84px; resize: vertical; padding: 11px 12px; border-radius: var(--radius-sm); border: 1px solid var(--border-strong); background: var(--input-bg); color: var(--text); font-size: 14.5px; font-family: inherit; line-height: 1.45; transition: border-color .15s ease, box-shadow .15s ease; }
  .rv-texto:focus { outline: none; border-color: var(--accent2); box-shadow: 0 0 0 3px var(--accent2-soft); }
  .rv-texto.rv-error { border-color: var(--accent2); }
  .rv-pie { display: flex; justify-content: space-between; gap: 10px; margin-top: 6px; font-size: 12px; color: var(--muted); min-height: 18px; }
  .rv-pie .rv-err { color: var(--accent2); }
  .rv-nota { margin: 12px 0 0; font-size: 12px; color: var(--muted); line-height: 1.5; }
  /* Registro revertido: dos filas alineadas (original arriba, reversión abajo) en tono gris, sin llamar la atención.
     Una sola línea segmentada continua las separa, desde la columna "Tipo" hacia la derecha. */
  tr.par-a td, tr.par-b td { background: var(--reverted-bg); color: var(--muted-dim); }
  tr.par-a td:first-child, tr.par-b td:first-child { box-shadow: inset 3px 0 0 var(--border-strong); }
  tr.par-a td { border-bottom: 1px dashed var(--border-strong); padding-bottom: 9px; }
  tr.par-a td:first-child { border-bottom-color: transparent; }
  tr.par-b td { padding-top: 9px; }
  .par-tachado { text-decoration: line-through; text-decoration-color: var(--muted-dim); }
  .par-etiqueta { display: inline-block; font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; padding: 2px 8px; border-radius: 999px; font-family: var(--font-accent); background: rgba(0,0,0,.3); color: var(--muted-dim); border: 1px solid var(--border); white-space: nowrap; }
  .par-estado { margin-left: 6px; font-size: 12px; color: var(--muted-dim); white-space: nowrap; }
  
  
  .card-lote-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 4px; }
  .mercado-item { padding: 12px 0; border-bottom: 1px solid var(--border); }
  .mercado-item:last-child { border-bottom: none; }
  .card-lote .mercado-item { padding-left: 12px; border-left: 2px solid var(--border-strong); }
  /* Manage Bets: cada bet es una grilla de 3 columnas: contenido | panel | acciones.
     La columna de acciones (Simular / Ver proyección / Tarjeta...) queda SIEMPRE pegada al
     borde derecho y con el mismo ancho, esté o no abierto el panel. El panel (proyección o
     simulación) se abre como columna propia entre el contenido y las acciones, separado
     del contenido por una línea vertical. */
  .mercado-item { display: grid; grid-template-columns: minmax(0, 1fr) 136px; column-gap: 16px; align-items: start; }
  .mercado-item.con-panel { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr) 136px; }
  .mi-cuerpo { min-width: 0; grid-column: 1; }
  .mi-panel { grid-column: 2; border-left: 1px solid var(--border-strong); padding-left: 16px; min-width: 0; align-self: stretch; }
  .mi-panel[hidden] { display: none; }
  .mi-acciones { grid-column: -2 / -1; display: flex; flex-direction: column; gap: 6px; }
  .mi-acciones > button { width: 100%; justify-content: flex-start; text-align: left; white-space: nowrap; }
  .mi-titulo { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 14px; }
  .mi-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
  .mi-panel-head b { font-size: 13px; color: var(--muted-strong); }
  .mi-panel-head button { min-height: 28px; padding: 2px 10px; }
  @media (max-width: 720px) {
    .mercado-item, .mercado-item.con-panel { grid-template-columns: minmax(0, 1fr) auto; }
    .mi-panel { grid-column: 1 / -1; grid-row: 2; border-left: none; padding-left: 0; border-top: 1px solid var(--border-strong); margin-top: 12px; padding-top: 12px; }
  }
  .mi-meta { margin: 3px 0 0; }
  .mi-opciones { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
  .mi-opcion-chip { background: var(--card2); border: 1px solid var(--border-strong); border-radius: var(--radius-sm); padding: 4px 10px; font-size: 12.5px; color: var(--muted-strong); }
  .mi-opcion-cuota { color: var(--muted); font-weight: 700; }
  /* Cierre selectivo: opción que ya no recibe apuestas (el resto del mercado sigue abierto) */
  .mi-opcion-chip.cerrada { opacity: .65; border-style: dashed; }
  .mi-opcion-chip.cerrada b { text-decoration: line-through; }
  .mi-opcion-tag { font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); margin-left: 4px; }
  .mi-opcion-abrir { margin-left: 6px; padding: 0 6px; min-height: 0; font-size: 11px; line-height: 1.6; }
  .cs-lista label { display: flex; gap: 10px; align-items: center; margin: 8px 0 0; cursor: pointer; text-transform: none; }
  .cs-lista input { width: auto; min-height: 0; }
  .mi-resultado { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 8px; }
  .mi-resultado select { width: auto; min-width: 200px; display: inline-block; min-height: 36px; padding: 6px 10px; font-size: 12.5px; margin-top: 0; }
  .mi-resultado button { margin-top: 0; }
  /* Selector único de "estrategia de cierre" en Crear Bet / Reabrir mercado */
  .radio-fila { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; font-size: 12.5px; text-transform: none; background: var(--card2); border: 1px solid var(--border-strong); border-radius: 999px; padding: 7px 14px; margin-top: 0; }
  .radio-fila input { width: auto; min-height: 0; margin: 0; }
  .radio-fila.disabled { opacity: .4; cursor: not-allowed; }
  /* Radio "plano": mismo comportamiento que .radio-fila pero sin fondo/rectángulo
     (Crear Bet -> "¿Cómo se cierra?" y "Tipo de pago máximo" no necesitan esa píldora). */
  /* ===== Radios con marco deslizante (diseño y animación tomados del panel Developer) =====
     JS: posDeslizador() -> un <i class="desliza marco"> viaja hasta .radio-option.is-checked. */
  .radio-group { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 6px; position: relative; }
  /* Selector de caja (Capital): cada opción mide lo que su texto; si no caben (muchos mods) aparece scroll horizontal */
  .radio-group.cp-cajas { flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; margin-top: 0; padding-bottom: 8px; scrollbar-width: thin; }
  .radio-group.cp-cajas > .radio-option { flex: 0 0 auto; min-width: 0; white-space: nowrap; align-items: center; }
  .radio-group.vertical { flex-direction: column; flex-wrap: nowrap; margin-top: 8px; }
  .radio-option {
    flex: 1; min-width: 220px; display: flex; align-items: flex-start; gap: 8px;
    padding: 9px 11px; border-radius: var(--radius-sm); border: 1px solid var(--border-strong);
    background: var(--input-bg); cursor: pointer; transition: border-color .15s ease, background-color .15s ease, opacity .15s ease;
    margin: 0; text-transform: none; /* es un <label>: se anula el margin global de "label" */
  }
  .radio-group.vertical > .radio-option { flex: 0 0 auto; min-width: 0; }
  .radio-option:hover { border-color: #4c5567; }
  .radio-option.disabled { opacity: .4; cursor: not-allowed; }
  .radio-option.disabled:hover { border-color: var(--border-strong); }
  .radio-option input[type="radio"] { appearance: none; -webkit-appearance: none; margin: 3px 0 0; padding: 0; width: 15px; height: 15px; flex-shrink: 0; min-height: 0;
    border-radius: 50%; border: 1.5px solid var(--border-strong); background: var(--card); cursor: pointer; position: relative;
    transition: border-color .12s ease; }
  .radio-option.disabled input[type="radio"] { cursor: not-allowed; }
  /* El punto y el aro verde aparecen DESPUÉS de que el marco deslizante llegue (retraso .22s);
     al desmarcar se apagan al instante. */
  .radio-option input[type="radio"]::after { content: ""; position: absolute; inset: 2.5px; border-radius: 50%; background: var(--positive);
    transform: scale(0); opacity: 0; transition: transform .12s ease, opacity .12s ease; }
  .radio-option input[type="radio"]:checked { border-color: var(--positive); transition: border-color .15s ease .22s; }
  .radio-option input[type="radio"]:checked::after { transform: scale(1); opacity: 1;
    transition: transform .25s cubic-bezier(.34,1.6,.64,1) .22s, opacity .1s ease .22s; }
  .radio-option input[type="radio"]:focus-visible { outline: none; box-shadow: var(--focus-ring); }
  .radio-option.is-checked { border-color: var(--positive); background: var(--primary-soft); }
  /* Con el marco deslizante la opción marcada no pinta su propio borde/fondo: lo pone el marco único. */
  .radio-group.con-marco .radio-option { position: relative; z-index: 1; background: transparent; }
  .radio-group.con-marco .radio-option.is-checked, .radio-group.con-marco .radio-option.is-checked:hover { border-color: transparent; background: transparent; }
  .radio-group > .marco { z-index: 0; box-sizing: border-box; border-radius: var(--radius-sm); border: 1px solid var(--positive); background: var(--primary-soft); }
  .radio-option-text { display: flex; flex-direction: column; gap: 2px; }
  .radio-option-text b { font-size: 13px; font-family: var(--font-accent); line-height: 1.2; }
  .radio-option-text span { font-size: 11px; color: var(--muted); line-height: 1.35; }
  .radio-option .ico-info { align-self: center; margin-left: 0; }
  /* Crear Bet: columna izquierda (Juego/Tipo/Modo + cierre de recepción) separada de la
     columna derecha (las opciones propias de la bet) por una línea vertical. */
  .cb-grid { display: flex; gap: 22px; align-items: flex-start; margin-top: 14px; }
  .cb-col-izq { flex: 0 0 260px; min-width: 0; display: flex; flex-direction: column; }
  .cb-col-izq > label:first-child, .cb-col-izq > div:first-child > label { margin-top: 0; }
  .cb-divisor-v { flex: 0 0 1px; align-self: stretch; background: var(--border-strong); }
  .cb-col-der { flex: 1 1 auto; min-width: 0; }
  /* Cards Capital inicial y Otros ingresos/gastos: columna izquierda angosta, campos de texto anchos, botones compactos. */
  @media (min-width: 721px) { .cb-col-izq.cb-izq-mini { flex-basis: 170px; } }
  .row > .campo-ancho { flex: 2.4 1 0; min-width: 200px; }
  .row > .campo-btn { flex: 0 0 128px; min-width: 0; }
  .row > .campo-btn.campo-btn-mini { flex: 0 0 64px; }
  .cb-col-der > .row:first-child { margin-top: 0; }
  /* Crear Bet en 3 columnas: Juego/Tipo/Modo | cierre de recepción | opciones de la bet. */
  .cb-col-med { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; }
  /* Bloque A = Juego/Tipo/Modo + cierre de recepción, con la ayuda del pago máximo debajo.
     Bloque B (columna derecha) lleva al final el botón Crear Bet, alineado a la derecha. */
  .cb-bloque-a { flex: 0 0 480px; min-width: 0; display: flex; flex-direction: column; }
  .cb-fila-a { display: flex; gap: 22px; align-items: flex-start; }
  /* La explicación corta de cada forma de cierre va bajo los radios. Solo "Pago máximo" tiene además
     un tooltip con la explicación completa, sobre la columna derecha (en pantallas angostas no hay
     hover: ahí se muestra como desplegable debajo de sus campos). */
  #form-crear-bet .cb-grid { position: relative; }
  .cb-tooltip { position: absolute; z-index: 30; pointer-events: none; opacity: 0; visibility: hidden; transition: opacity .12s ease;
    background: var(--card2); border: 1px solid var(--border-strong); border-radius: var(--radius-md); box-shadow: 0 18px 44px rgba(0,0,0,.55);
    padding: 14px 16px; font-size: 12.5px; line-height: 1.55; color: var(--muted-strong); }
  .cb-tooltip.visible { opacity: 1; visibility: visible; }
  .cb-tooltip .tt-titulo { font-family: var(--font-accent); font-weight: 700; font-size: 13px; color: var(--text); margin-bottom: 6px; }
  .ico-info { cursor: help; display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; margin-left: 4px; border: 1px solid var(--muted); border-radius: 50%; font-size: 9px; font-weight: 700; color: var(--muted); font-style: normal; }
  .cb-tooltip .ayuda-pm-cuerpo { padding: 0; columns: 2; column-gap: 26px; }
  @media (min-width: 721px) { .ayuda-pm { display: none; } }
  .cb-acciones { display: flex; justify-content: flex-end; margin-top: 18px; }
  .cb-acciones button { margin-top: 0; }
  @media (min-width: 721px) { .cb-col-izq.cb-izq-compacta { flex-basis: 200px; } }
  /* Ayuda desplegable del "Pago máximo" (columna del medio de Crear Bet). */
  .ayuda-pm { margin-top: 20px; background: var(--card2); border: 1px solid var(--border); border-radius: var(--radius-md); font-size: 12.5px; line-height: 1.55; color: var(--muted-strong); }
  .ayuda-pm > summary { cursor: pointer; padding: 11px 14px; font-weight: 700; color: var(--text); list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; }
  .ayuda-pm > summary::-webkit-details-marker { display: none; }
  .ayuda-pm > summary::after { content: ''; flex: none; width: 14px; height: 14px; background: var(--muted); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat; transition: transform .15s; }
  .ayuda-pm:not([open]) > summary::after { transform: rotate(-90deg); }
  .ayuda-pm-cuerpo { padding: 0 14px 14px; columns: 2; column-gap: 28px; }
  .ayuda-pm-sec { break-inside: avoid; }
  .ayuda-pm-sec:first-child h5 { margin-top: 2px; }
  .ayuda-pm-cuerpo h5 { margin: 14px 0 4px; font-family: var(--font-accent); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--amber); }
  .ayuda-pm-cuerpo p { margin: 0 0 6px; }
  .ayuda-pm-cuerpo ul { margin: 4px 0 0; padding-left: 18px; display: grid; gap: 5px; }
  .ayuda-pm-cuerpo li::marker { color: var(--muted); }
  .ayuda-pm-cuerpo b { color: var(--text); }
  .ayuda-pm-ej { background: var(--input-bg); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 9px 11px; margin: 6px 0 0; }
  .cb-hr { border: none; border-top: 1px solid var(--border-strong); margin: 20px 0 4px; }
  /* Stats del viewer en la columna izquierda de su card (tab Capital -> Viewers), mismo
     esquema de dos columnas que "Crear Bet" (cb-grid/cb-col-izq/cb-divisor-v/cb-col-der). */
  /* Distribuir ingreso: filtros compactos, cifras de viewers en tira y secciones plegables */
  /* Distribuir ingreso (sub-tab unificado): dos columnas dentro de un card + tabla de estados */
  .dist-cab { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
  .dist-cab h2 { margin: 0; }
  .dist-sub { font-size: 13px; font-weight: 600; color: var(--muted-strong); margin: 0 0 8px; }
  .di-u { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 7px 0; border-bottom: 1px solid var(--border); font-size: 12.5px; }
  .di-u:last-child { border-bottom: none; }
  .di-u .grow { flex: 1 1 170px; min-width: 0; }
  .di-gestor { font-size: 12px; font-weight: 700; color: var(--text); margin: 10px 0 2px; }
  .di-gestor:first-child { margin-top: 0; }
  .di-chk-lista { max-height: 190px; overflow: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 2px 10px; margin: 6px 0 8px; }
  .di-chk { display: flex; align-items: center; gap: 8px; margin: 0 !important; padding: 6px 0; font-size: 12.5px !important; color: var(--text) !important; cursor: pointer; border-bottom: 1px solid var(--border); }
  .di-chk:last-child { border-bottom: none; }
  .di-chk input { width: auto; min-height: 0; margin: 0; }
  .di-chk .monto { margin-left: auto; font-weight: 600; white-space: nowrap; }
  .di-total { display: flex; justify-content: space-between; font-size: 13px; padding: 6px 0 8px; }
  .di-aviso { background: var(--amber-soft); border: 1px solid rgba(232,179,76,.35); color: var(--amber); border-radius: var(--radius-sm); padding: 7px 10px; font-size: 12px; margin: 0 0 8px; }
  .di-tabla td, .di-tabla th { padding-top: 8px; padding-bottom: 8px; }
  /* Acciones por fila de "Bets y lotes liquidados": dos botones solo con icono, a la derecha. */
  .di-tabla td.di-acc { text-align: right; white-space: nowrap; vertical-align: middle; width: 1%; }
  .di-acc-btns { display: inline-flex; gap: 6px; }
  .di-acc-btns .btn-icono:disabled { opacity: .4; cursor: not-allowed; }
  button.btn-icono.btn-cargando svg { animation: ic-trabaja .9s ease-in-out infinite; }
  .hv-der > button.btn-cargando svg, .vl-rep-fila button.btn-cargando svg { animation: ic-trabaja .9s ease-in-out infinite; } /* mismo movimiento del ícono en Exportar historial / Ver reporte */
  @keyframes ic-trabaja { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .35; transform: scale(.82); } }
  .di-det-modal > .dist-sub { padding-right: 40px; font-size: 15px; }
  .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  /* Pendientes y pagos en tres columnas: lista | detalle del cálculo | registro de pagos */
  .dist3 { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 1fr); gap: 0; align-items: start; }
  .dist3-col { padding: 0 20px; min-width: 0; }
  .dist3-col:first-child { padding-left: 0; }
  .dist3-col:last-child { padding-right: 0; }
  .dist3-col + .dist3-col { border-left: 1px solid var(--border-strong); }
  .dist3-lista { max-height: 520px; overflow: auto; padding-right: 2px; }
  .di-item { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 9px 10px; margin-bottom: 6px; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 12.5px; cursor: pointer; transition: background .12s, border-color .12s; }
  .di-item:hover { background: var(--card2); }
  .di-item.sel { border-color: var(--info); background: var(--info-soft); }
  .di-item.off { cursor: default; opacity: .7; }
  .di-item.off:hover { background: transparent; }
  .di-item .grow { flex: 1 1 130px; min-width: 0; }
  .di-det-tit { font-size: 13px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted-strong); margin: 0 0 4px; font-family: var(--font-accent); }
  .di-det-sec + .di-det-sec { margin-top: 18px; }
  .di-vacio { border: 1px dashed var(--border-strong); border-radius: var(--radius-sm); padding: 18px 12px; text-align: center; color: var(--muted); font-size: 12.5px; }
  .badge.observado { background: var(--accent2-soft); color: var(--accent2); }
  .di-obs { font-size: 11.5px; color: var(--accent2); margin-top: 4px; max-width: 260px; }
  .di-aviso.obs { background: var(--accent2-soft); border-color: rgba(255,107,87,.4); color: var(--accent2); }
  @media (max-width: 1000px) {
    .dist3 { grid-template-columns: minmax(0, 1fr); gap: 18px; }
    .dist3-col, .dist3-col:first-child, .dist3-col:last-child { padding: 0; }
    .dist3-col + .dist3-col { border-left: none; border-top: 1px solid var(--border-strong); padding-top: 16px; }
    .dist3-lista { max-height: 320px; }
  }
  /* Registrar pagos: grupos "Pagos recibidos" / "Pagos realizados", una fila por pago agrupada por destinatario */
  .pg-grupo + .pg-grupo { margin-top: 18px; }
  .pg-monto-fila { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 0 0 4px; }
  .pg-monto-fila label { margin: 0; white-space: nowrap; }
  .pg-motivo { width: 100%; min-height: 36px; padding: 6px 10px; font-size: 13px; margin-top: 6px; }
  .pg-monto-fila input { width: 120px; min-height: 36px; padding: 6px 10px; font-size: 14px; }
  .pg-tit { font-size: 14px; font-weight: 700; margin: 0 0 6px; padding-bottom: 6px; border-bottom: 1px solid var(--border-strong); }
  .pg-concepto { font-size: 11.5px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted-strong); margin: 12px 0 6px; font-family: var(--font-accent); }
  .pg-concepto .pg-sub { text-transform: none; letter-spacing: 0; font-family: inherit; color: var(--muted); }
  .pg-fila { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px 10px; margin: 0 0 6px; }
  .pg-fila-top { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; }
  .pg-acc { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-top: 6px; }
  .pg-link { font-size: 12px; padding: 4px 10px; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); color: var(--text); text-decoration: none; }
  .pg-link:hover { background: var(--card2); }
  .di-pago { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
  .di-pago .monto { font-size: 12px; color: var(--muted); }
  .di-filtros { padding: 12px 16px; }
  .di-filtros-fila { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-end; }
  .di-filtros-fila > div { flex: 1 1 130px; min-width: 120px; }
  .di-filtros-fila label { font-size: 11px; margin: 0 0 3px; }
  .di-filtros-fila input, .di-filtros-fila select { margin: 0; }
  .di-filtros-fila > .ui-pd { flex: 0 0 auto; min-width: 250px; }
  .di-filtros-fila .ui-pd-btn { margin-top: 0; height: 40px; }
  .di-radio { display: inline-flex; align-items: center; gap: 6px; margin: 0 !important; font-size: 13px !important; color: var(--text); cursor: pointer; }
  .di-radio input { width: auto; min-height: 0; margin: 0; }
  .di-filtros-acc { flex: 0 0 auto !important; display: flex; gap: 6px; }
  .di-filtros-acc button { margin-top: 0; min-height: 40px; padding: 8px 14px; font-size: 13px; }
  .vc-stat { display: flex; justify-content: space-between; gap: 8px; font-size: 12.5px; padding: 7px 0; border-bottom: 1px solid var(--border); }
  .vc-stat:last-child { border-bottom: none; }
  .vc-stat span:first-child { color: var(--muted); }
  .vc-stat span:last-child { font-weight: 600; }
  .cb-col-der table { margin-top: 0; }
  @media (max-width: 720px) {
    .cb-grid { flex-direction: column; }
    .cb-divisor-v { display: none; }
    .cb-col-izq, .cb-col-med { flex: 1 1 auto; width: 100%; }
    .cb-bloque-a { flex: 1 1 auto; width: 100%; }
    .cb-fila-a { flex-direction: column; }
    .ayuda-pm-cuerpo { columns: 1 !important; }
    .cb-tooltip { display: none; }
  }
  .aviso-riesgo { border-radius: var(--radius-sm); padding: 8px 10px; margin-top: 4px; font-size: 12px; }
  .aviso-riesgo.gana { background: rgba(60,179,113,.12); color: var(--positive); border: 1px solid rgba(60,179,113,.3); }
  .aviso-riesgo.pierde { background: var(--amber-soft); color: var(--amber); border: 1px solid rgba(232,179,76,.35); }
  .aviso-riesgo.neutro { background: var(--info-soft); color: var(--info); border: 1px solid rgba(110,168,254,.3); }
  .tiny { font-size: 12.5px; color: var(--muted); line-height: 1.55; }
  .tiny b { color: var(--muted-strong); }
  #config-screen, #login-screen { max-width: 420px; margin: 70px auto 0; padding-left: 16px; padding-right: 16px; }
  /* ============ LIVE: formulario + preview de la tarjeta ============ */
  .live-grid-solo { grid-template-columns: minmax(0, 1fr) !important; max-width: 560px; } /* moderador: sin columna de vista previa */
  .live-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(320px, 400px); gap: 20px; align-items: start; }
  .live-form > .card:last-child { margin-bottom: 0; }
  .live-preview-col { position: sticky; top: 84px; }
  .live-preview-col > .preview-label { font-family: var(--font-accent); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin: 0 0 10px 4px; display: flex; align-items: center; gap: 8px; }
  .preview-label::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--positive); box-shadow: 0 0 0 3px var(--positive-soft); }
  .stream-card { position: relative; overflow: hidden; border-radius: 20px; border: 1px solid var(--border-strong); background: radial-gradient(120% 90% at 100% 0%, rgba(47,208,200,.13) 0%, transparent 55%), radial-gradient(110% 80% at 0% 0%, rgba(15,81,50,.55) 0%, transparent 60%), linear-gradient(180deg, #1b2129 0%, #14181e 100%); box-shadow: 0 18px 44px rgba(0,0,0,.45), 0 1px 0 rgba(255,255,255,.04) inset; padding: 20px; }
  .sc-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
  .sc-brand { font-family: var(--font-display); font-weight: 600; font-size: 14px; letter-spacing: -.01em; }
  .sc-brand .bet { color: var(--brand-cyan); }
  .sc-live { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-accent); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; color: #ffb3a6; background: var(--accent2-soft); border: 1px solid rgba(255,107,87,.35); padding: 4px 10px; border-radius: 999px; }
  .sc-live i { width: 7px; height: 7px; border-radius: 50%; background: var(--accent2); animation: sc-pulse 1.4s ease-in-out infinite; }
  @keyframes sc-pulse { 0%,100% { box-shadow: 0 0 0 0 rgba(255,107,87,.6); } 50% { box-shadow: 0 0 0 6px rgba(255,107,87,0); } }
  .sc-id { display: flex; align-items: center; gap: 18px; }
  .sc-avatar { width: 112px; height: 112px; border-radius: 50%; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-weight: 700; font-size: 38px; color: var(--accent-ink); background: linear-gradient(135deg, #0f5132, #1b8a5a); border: 3px solid rgba(62,207,131,.5); box-shadow: 0 0 0 5px rgba(62,207,131,.10); background-size: cover; background-position: center; }
  .sc-name { font-family: var(--font-display); font-weight: 700; font-size: 21px; letter-spacing: -.01em; line-height: 1.15; word-break: break-word; }
  .sc-name.vacio, .sc-cat.vacio, .sc-phone.vacio { color: var(--muted); font-weight: 500; font-style: italic; }
  .sc-cat { display: inline-flex; align-items: center; margin-top: 7px; font-family: var(--font-accent); font-size: 12px; font-weight: 600; color: var(--brand-cyan); background: rgba(47,208,200,.10); border: 1px solid rgba(47,208,200,.28); padding: 3px 11px; border-radius: 999px; }
  .sc-cat.vacio { color: var(--muted); background: transparent; border: 1px dashed var(--border-strong); }
  .sc-msg { margin: 18px 0 0; padding: 11px 14px; border-radius: 4px 14px 14px 14px; background: rgba(255,255,255,.05); border: 1px solid var(--border); font-size: 14px; color: var(--muted-strong); word-break: break-word; }
  .sc-pay { margin-top: 18px; padding: 14px; border-radius: 14px; background: rgba(0,0,0,.28); border: 1px solid var(--border); }
  .sc-pay-title { font-family: var(--font-accent); font-size: 10.5px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: var(--muted); margin-bottom: 10px; }
  .sc-pay-row { display: flex; align-items: center; gap: 11px; }
  .sc-pay-row + .sc-pay-row { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }
  .sc-pay-ico { width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; background: var(--positive-soft); color: var(--positive); }
  .sc-pay-who { font-size: 11.5px; color: var(--muted); line-height: 1.2; }
  .sc-phone { font-family: var(--font-display); font-weight: 700; font-size: 18px; letter-spacing: .02em; color: var(--text); line-height: 1.25; word-break: break-all; }
  .sc-manage { margin-top: 16px; display: flex; align-items: center; gap: 8px; font-family: var(--font-accent); font-size: 12.5px; font-weight: 600; color: var(--muted-strong); }
  .sc-manage b { color: var(--positive); font-weight: 700; }
  .sc-manage svg { color: var(--muted); flex-shrink: 0; }
  select { appearance: none; -webkit-appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238c96a3' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; padding-right: 38px; cursor: pointer; }
  @media (max-width: 900px) {
    .live-grid { grid-template-columns: 1fr; }
    .live-preview-col { position: static; order: -1; }
  }
  @keyframes card-aparecer { from { opacity: 0; } to { opacity: 1; } }
  @media (max-width: 720px) {
    header { padding: 12px 16px; }
    .logo-word { font-size: 17px; }
    .tagline { display: none; }
  }
  /* Formulario de moderador: una sola fila en pantallas anchas, se acomoda en pantallas chicas. */
  .btn-icono { width: 34px; height: 34px; min-height: 0; padding: 0; margin: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; }
  .btn-icono svg { width: 16px; height: 16px; }
  /* Botones de acción solo con icono (Aumentar/Reducir capital, Ver/Ocultar registros). */
  button.btn-solo-icono { display: inline-flex; align-items: center; justify-content: center; padding-left: 0; padding-right: 0; }
  button.btn-solo-icono:not(.small) { min-width: 44px; }
  button.btn-solo-icono.small { min-width: 40px; padding-left: 10px; padding-right: 10px; }
  button.btn-solo-icono svg { width: 20px; height: 20px; flex: 0 0 auto; }
  /* Capital de mis moderadores (solo lectura): resumen arriba + un desplegable por moderador. */
  .mc-mod { background: var(--card2); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; transition: border-color .15s ease; }
  .mc-mod:hover, .mc-mod[open] { border-color: var(--border-strong); }
  .mc-mod > summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 12px; padding: 12px 16px; }
  .mc-mod > summary::-webkit-details-marker { display: none; }
  .mc-avatar { flex: 0 0 auto; width: 36px; height: 36px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--accent-soft); color: var(--positive); border: 1px solid rgba(62,207,131,.28); font-family: var(--font-accent); font-weight: 700; font-size: 15px; }
  .mc-mod.mc-inactivo .mc-avatar { background: var(--card); color: var(--muted); border-color: var(--border-strong); }
  .mc-nombre { font-weight: 700; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
  .mc-cap { flex: 0 0 auto; text-align: right; line-height: 1.25; }
  .mc-cap .mc-cap-label { display: block; font-size: 11.5px; color: var(--muted); }
  .mc-cap .mc-cap-valor { font-size: 18px; font-weight: 700; color: var(--positive); }
  .mc-cap .mc-cap-valor.mc-vacio { font-size: 14px; font-weight: 600; color: var(--muted); }
  .mc-chevron { flex: 0 0 auto; width: 18px; height: 18px; color: var(--muted); transition: transform .15s ease; }
  .mc-mod[open] .mc-chevron { transform: rotate(180deg); }
  .mc-cuerpo { border-top: 1px solid var(--border); padding: 4px 16px 14px; background: var(--card); }
  .mc-cuerpo .table-wrap { margin-top: 8px; }
  .mc-vacio-txt { margin: 12px 0 0; }
  .mc-sub { margin: 16px 0 0; font-family: var(--font-accent); font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted-strong); }
  .mc-cuerpo > .mc-sub:first-child { margin-top: 12px; }
  .mc-totales { display: flex; gap: 22px; flex-wrap: wrap; margin-top: 8px; }
  .mc-totales .mc-tot-label { font-size: 12px; color: var(--muted-strong); }
  .mc-totales .mc-tot-valor { font-size: 18px; font-weight: 700; line-height: 1.25; }
  @media (max-width: 720px) {
    .mc-mod > summary { flex-wrap: wrap; }
    .mc-cap { flex-basis: 100%; text-align: left; padding-left: 48px; }
  }
  .btn-icono.peligro:hover { border-color: var(--accent2); color: var(--accent2); background: var(--accent2-soft); }
  .acciones-fila { display: flex; gap: 6px; align-items: center; justify-content: flex-end; }
  .banner-solo-lectura { background: var(--accent2-soft); border: 1px solid rgba(255,107,87,.35); border-radius: var(--radius-md); padding: 12px 14px; font-size: 13px; margin-bottom: 16px; color: #ffb3a6; }
  .mod-grid { display: grid; gap: 12px; align-items: end; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
  .mod-grid > div { min-width: 0; }
  .mod-grid label { margin-top: 0; }
  @media (min-width: 1200px) {
    .mod-form-fila { grid-template-columns: 1.1fr 1.5fr 1fr 1.2fr auto 1.4fr .8fr auto; }
  }
  .mod-grid .campo-completo { grid-column: 1 / -1; }
  .chips { display: flex; gap: 8px; }
  .chip { margin: 0; cursor: pointer; text-transform: none; letter-spacing: 0; }
  .chip input { position: absolute; opacity: 0; width: 0; height: 0; min-height: 0; }
  .chip span { display: inline-flex; align-items: center; gap: 6px; min-height: 44px; padding: 0 14px; border-radius: var(--radius-md); border: 1px solid var(--border-strong); background: var(--card2); color: var(--muted-strong); font-size: 13.5px; font-weight: 600; transition: border-color .12s, background .12s, color .12s; }
  .chip span::before { content: ''; width: 14px; height: 14px; border-radius: 4px; border: 1.5px solid var(--border-strong); flex: none; }
  .chip input:checked + span { border-color: var(--positive); background: var(--positive-soft); color: var(--positive); }
  .chip input:checked + span::before { background: var(--positive); border-color: var(--positive); box-shadow: inset 0 0 0 2px var(--card2); }
  .chip input:focus-visible + span { outline: 2px solid var(--positive); outline-offset: 2px; }
  .mod-modal-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* Fila cuyo primer campo tiene ancho fijo (--w) y el segundo ocupa el resto. */
  .row.row-fija-izq > :first-child { flex: 0 0 var(--w, 232px); min-width: 0; }
  /* Tab Live · datos públicos: nombre, número, QR e imagen de perfil en una sola fila (en pantallas chicas se apilan). */
  .row.row-datos { flex-wrap: nowrap; align-items: flex-end; }
  .row.row-datos > .campo-nombre { flex: 1 1 0; min-width: 0; }
  .row.row-datos > .campo-numero { flex: 1 1 0; min-width: 0; }
  .row.row-datos > .campo-archivo { flex: 0 0 auto; min-width: 0; }
  .row.row-datos label.file-pick { white-space: nowrap; }
  @media (max-width: 760px) {
    .row.row-datos { flex-wrap: wrap; }
    .row.row-datos > * { flex: 1 1 100%; }
  }
  @media (max-width: 560px) {
    .logo-mark { width: 36px; height: 36px; border-radius: 9px; }
    .container, #config-screen, #login-screen { padding-left: 12px; padding-right: 12px; }
    .card { padding: 16px; }
    button { font-size: 13.5px; }
    .row > * { min-width: 0; flex-basis: 100%; }
    .row > .campo-ancho, .row > .campo-btn { min-width: 0; flex: 1 1 100%; }
    .row.row-fija-izq > :first-child { flex-basis: 100%; }
  }
  /* ============ CAPA DE ANIMACIONES E INTERACCION REUTILIZABLES ============
     Misma capa que el panel Developer. Cada bloque tiene UNA sola implementación en el JS
     ("CAPA DE INTERFAZ REUTILIZABLE") y se usa desde cualquier parte del archivo:
       1 Botón con barra / al terminar  -> conProgreso() / btnFin()            .btn-cargando / .btn-fin-ok / .btn-fin-er
       2 Filas de listas                -> observador de listas                .fila-entra / .fila-nueva / .fila-editada / .fila-sale / .badge-flip
       3 Aviso en línea                 -> mostrarMsg()                        .msg-ico
       4 Campo inválido                 -> campoInvalido()                     .campo-error
       5 Menú lateral y subpestañas     -> posDeslizador()                     .desliza (.pill / .ind)
       6 Avisos flotantes               -> toast()  (reemplaza a alert())      .toast
       7 Ventanas                       -> montarOverlay() / cerrarOverlay()   .cm-overlay / .cm-dialog / .modal-x / .esc
       8 Carga                          -> cargandoHTML()                      .sk-fila (esqueleto con brillo)
       9 Estados vacíos                 -> estadoVacio()                       .estado-vacio
      10 Login -> panel                 -> entrarAlPanel()                     .login-sale / .app-entra
      11 Descargas                      -> guardarBlob() + chipArchivo()       .chip-archivo
      12 Íconos                         -> icoSvg()  (reemplaza a los emojis)  .ic / .ic-s */

  /* ----- Íconos SVG (sustituyen a los emojis) ----- */
  .ic { width: 1.1em; height: 1.1em; vertical-align: -.2em; flex: none; }
  .ic-s { flex: none; }
  [data-ico] { display: inline-flex; vertical-align: -.2em; }
  .btn-ic { display: inline-flex; align-items: center; justify-content: center; gap: 7px; }

  /* ----- 1 · Botón con barra de progreso y cierre ----- */
  button.btn-cargando { position: relative; overflow: hidden; pointer-events: none; cursor: progress; }
  button.btn-cargando::before { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: currentColor; opacity: .22; }
  button.btn-cargando::after { content: ''; position: absolute; left: 0; bottom: 0; height: 3px; width: 35%; border-radius: 999px; background: currentColor; animation: btn-barra 1.1s ease-in-out infinite; }
  @keyframes btn-barra { from { transform: translateX(-100%); } to { transform: translateX(285%); } }
  button.btn-fin-ok, button.btn-fin-er { position: relative; overflow: hidden; }
  button.btn-fin-ok::after, button.btn-fin-er::after { content: ''; position: absolute; left: 0; bottom: 0; height: 3px; width: 100%; transform-origin: left; background: var(--positive); animation: btn-fin 1.4s both; }
  button.btn-fin-er::after { background: var(--danger); }
  @keyframes btn-fin { 0% { transform: scaleX(.35); opacity: 1; } 35% { transform: scaleX(1); opacity: 1; } 100% { transform: scaleX(1); opacity: 0; } }

  /* ----- 2 · Filas de listas ----- */
  .fila-entra > td, .fila-entra:not(tr) { animation: fila-sube .35s both; animation-delay: var(--d, 0ms); }
  @keyframes fila-sube { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  .fila-nueva > td, .fila-nueva:not(tr) { animation: fila-nueva .45s cubic-bezier(.2,.9,.3,1.1) both; }
  @keyframes fila-nueva { from { opacity: 0; transform: translateY(-14px); } to { opacity: 1; transform: none; } }
  .fila-editada > td { animation: fila-fondo 1.3s; }
  .fila-editada > td:first-child, .fila-editada:not(tr) { animation: fila-borde 1.3s; }
  @keyframes fila-fondo { 0%, 70% { background: rgba(232,179,76,.1); } 100% { background: transparent; } }
  @keyframes fila-borde { 0%, 70% { box-shadow: inset 3px 0 0 var(--amber); background: rgba(232,179,76,.1); } 100% { box-shadow: inset 3px 0 0 transparent; background: transparent; } }
  .fila-sale > td { animation: fila-sale .5s forwards; }
  .fila-sale:not(tr) { overflow: hidden; animation: fila-sale-div .5s forwards; }
  @keyframes fila-sale { to { opacity: 0; transform: translateX(-34px); } }
  @keyframes fila-sale-div { 0% { opacity: 1; max-height: 80px; } 60% { opacity: 0; transform: translateX(-34px); max-height: 80px; } 100% { opacity: 0; transform: translateX(-34px); max-height: 0; padding-top: 0; padding-bottom: 0; } }
  .badge-flip { display: inline-block; animation: badge-giro .4s both; }
  @keyframes badge-giro { from { transform: rotateX(90deg); opacity: 0; } to { transform: none; opacity: 1; } }
  tr td { transition: background-color .12s ease; }
  tr:not(.par-a):not(.par-b):hover td { background: rgba(255,255,255,.03); }

  /* ----- 3 · Aviso en línea (borde que crece + ícono que se dibuja) ----- */
  .msg { position: relative; overflow: hidden; }
  .msg::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: currentColor; transform: scaleY(0); transform-origin: top; animation: msg-borde .35s forwards; }
  .msg .msg-ico { width: 16px; height: 16px; flex: 0 0 16px; }
  .msg .msg-ico path { stroke-dasharray: 1; stroke-dashoffset: 1; animation: msg-trazo .5s .15s forwards; }
  .msg.ok, .msg.error { animation: msg-in .22s ease both; }
  @keyframes msg-borde { to { transform: scaleY(1); } }
  @keyframes msg-trazo { to { stroke-dashoffset: 0; } }
  @keyframes msg-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }

  /* ----- 4 · Campo inválido ----- */
  .campo-error { border-color: var(--danger) !important; box-shadow: 0 0 0 3px var(--danger-soft); animation: campo-sacudida .4s; }
  @keyframes campo-sacudida { 20%, 60% { transform: translateX(-6px); } 40%, 80% { transform: translateX(6px); } }

  /* ----- 5 · Deslizador único (menú lateral y subpestañas) -----
     Base COMPARTIDA: cada uno solo define su aspecto; el movimiento (left/top/width/height/opacity)
     se escribe una vez aquí. Ajustable con --desliza-dur / --desliza-ease. */
  .desliza { position: absolute; left: 0; top: 0; width: 0; height: 0; opacity: 0; pointer-events: none;
    transition: left var(--desliza-dur,.4s) var(--desliza-ease,cubic-bezier(.34,1.35,.64,1)), top var(--desliza-dur,.4s) var(--desliza-ease,cubic-bezier(.34,1.35,.64,1)),
      width .3s ease, height .3s ease, opacity .2s ease; }
  .subtabs .ind { height: 3px; border-radius: 3px; background: var(--positive); --desliza-dur: .3s; --desliza-ease: cubic-bezier(.2,.9,.3,1.1); }
  .subtabs-sec .ind { height: 2px; border-radius: 2px; background: var(--positive); --desliza-dur: .3s; --desliza-ease: cubic-bezier(.2,.9,.3,1.1); }
  /* Menú lateral: una sola píldora que se desliza hasta la opción activa */
  .tabs button { position: relative; transition: background-color .15s ease, color .25s ease; }
  .tabs > .pill { border-radius: var(--radius-sm); z-index: 0; background: var(--positive-soft); --desliza-dur: .4s; --desliza-ease: cubic-bezier(.2,.9,.3,1.1); }
  /* Barra lateral verde: al viajar la píldora se esconde y vuelve a crecer desde el centro con rebote. */
  .tabs > .pill::before { content: ""; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 3px; background: var(--positive); }
  .tabs > .pill.viaja::before { animation: pill-barra .55s cubic-bezier(.34,1.5,.64,1) both; }
  @keyframes pill-barra { 0%, 35% { transform: scaleY(0); } 100% { transform: scaleY(1); } }
  .tabs.con-pill button { z-index: 1; }
  .tabs.con-pill button.active, .tabs.con-pill button.active:hover { background: transparent; }
  .tabs.con-pill button::before { display: none; }
  /* Foco de luz: un resplandor que sigue al cursor dentro del botón (JS: pointermove sobre #tabs fija --mx/--my) */
  .tabs button::after { content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none; opacity: 0; transition: opacity .3s ease;
    background: radial-gradient(110px circle at var(--mx, 50%) var(--my, 50%), var(--positive-soft), transparent 70%); }
  .tabs button:hover::after { opacity: 1; }
  .tabs button::before { content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px; border-radius: 3px; background: var(--positive); transform: scaleY(0); transition: transform .2s ease; }
  .tabs button.active::before { transform: scaleY(1); }

  /* ----- 6 · Avisos flotantes ----- */
  #toast-root { position: fixed; right: 18px; bottom: 18px; z-index: 300; display: flex; flex-direction: column; gap: 0; align-items: flex-end; pointer-events: none; }
  .toast { position: relative; overflow: hidden; pointer-events: auto; display: flex; gap: 11px; align-items: flex-start; max-width: min(400px, calc(100vw - 36px)); padding: 12px 10px 12px 12px; border-radius: var(--radius-md); background: var(--card2); border: 1px solid var(--border-strong); box-shadow: 0 14px 34px rgba(0,0,0,.45); font-size: 13.5px; color: var(--text); animation: toast-in .3s cubic-bezier(.2,.9,.3,1.1) both; }
  #toast-root > .toast { margin-top: 10px; }
  .toast.saliendo { animation: toast-sale .38s cubic-bezier(.4,0,.2,1) forwards; pointer-events: none; }
  .toast:hover .toast-bar { animation-play-state: paused; }
  .toast-bar { position: absolute; left: 0; bottom: 0; height: 3px; width: 100%; background: var(--info); transform-origin: left; animation: toast-cuenta linear forwards; }
  .toast.ok .toast-bar { background: var(--positive); } .toast.error .toast-bar { background: var(--danger); } .toast.aviso .toast-bar { background: var(--amber); }
  @keyframes toast-cuenta { from { transform: scaleX(1); } to { transform: scaleX(0); } }
  @keyframes toast-in { from { opacity: 0; transform: translateX(18px) scale(.97); } to { opacity: 1; transform: none; } }
  @keyframes toast-sale {
    0%   { opacity: 1; transform: none; max-height: var(--h, 120px); margin-top: 10px; padding-top: 12px; padding-bottom: 12px; }
    45%  { opacity: 0; transform: translateX(34px); max-height: var(--h, 120px); margin-top: 10px; padding-top: 12px; padding-bottom: 12px; }
    100% { opacity: 0; transform: translateX(34px); max-height: 0; margin-top: 0; padding-top: 0; padding-bottom: 0; border-width: 0; }
  }
  .toast-ico { flex: 0 0 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; }
  .toast-ico svg { width: 13px; height: 13px; }
  .toast.ok .toast-ico { background: var(--positive-soft); color: var(--positive); }
  .toast.error .toast-ico { background: var(--danger-soft); color: var(--danger); }
  .toast.aviso .toast-ico { background: var(--amber-soft); color: var(--amber); }
  .toast.info .toast-ico { background: var(--info-soft); color: var(--info); }
  .toast.ok { border-color: rgba(62,207,131,.35); } .toast.error { border-color: rgba(255,107,87,.4); } .toast.aviso { border-color: rgba(232,179,76,.35); }
  .toast-txt { flex: 1; line-height: 1.45; padding-top: 1px; white-space: pre-line; word-break: break-word; }
  .toast-x { display: grid; place-items: center; width: 26px; height: 22px; min-height: 0; padding: 0; margin: 0; border: 0; border-radius: 6px; background: transparent; color: var(--muted); }
  .toast-x svg { width: 14px; height: 14px; }
  .toast-x:hover { color: var(--text); background: rgba(255,255,255,.08); transform: none; box-shadow: none; }

  /* ----- 7 · Ventanas: entrada con escala + desenfoque de fondo, salida animada ----- */
  .cm-overlay { background: rgba(8,10,14,.62); -webkit-backdrop-filter: blur(5px); backdrop-filter: blur(5px); animation: overlay-in .18s ease both; overscroll-behavior: contain; }
  .cm-overlay.saliendo { animation: overlay-out .14s ease both; pointer-events: none; }
  .cm-dialog { position: relative; animation: modal-in .26s cubic-bezier(.2,.9,.3,1.05) both; transform-origin: 50% 50%; will-change: transform, opacity; max-height: min(92vh, 92dvh); overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent;
    box-shadow: 0 0 0 1px rgba(255,255,255,.03), 0 8px 18px rgba(0,0,0,.35), 0 28px 70px rgba(0,0,0,.6); }
  .cm-overlay.saliendo .cm-dialog { animation: modal-out .14s ease-in both; }
  .cm-dialog > h2 { padding-right: 40px; }
  .cm-body { white-space: pre-line; }
  @keyframes overlay-in { from { opacity: 0; } to { opacity: 1; } }
  @keyframes overlay-out { to { opacity: 0; } }
  @keyframes modal-in { from { opacity: 0; transform: translateY(10px) scale(.95); } to { opacity: 1; transform: translateY(0) scale(1); } }
  @keyframes modal-out { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(4px) scale(.97); } }
  /* Botón de cierre: círculo discreto en la esquina; la X gira 90° al pasar el cursor */
  .modal-x { position: absolute; top: 16px; right: 16px; z-index: 2; width: 32px; height: 32px; min-height: 0; margin: 0; padding: 0; border-radius: 50%; border: 0; display: grid; place-items: center; cursor: pointer; background: rgba(255,255,255,.05); color: var(--muted); transition: background-color .15s ease, color .15s ease, transform .1s ease; }
  .modal-x svg { width: 16px; height: 16px; display: block; transition: transform .25s cubic-bezier(.2,.9,.3,1.2); }
  .modal-x:hover { background: rgba(255,255,255,.11); color: var(--text); box-shadow: none; }
  .modal-x:hover svg { transform: rotate(90deg); }
  .modal-x:active { transform: scale(.9); box-shadow: none; }
  /* Entrada en resorte: los bloques crecen desde 94 % con un pequeño rebote (--i lo asigna escalonarModal) */
  .cm-dialog .esc { animation: esc-resorte .55s cubic-bezier(.34,1.56,.64,1) both; animation-delay: calc(var(--i, 0) * 50ms + 120ms); }
  @keyframes esc-resorte { from { opacity: 0; transform: scale(.94) translateY(6px); } to { opacity: 1; transform: none; } }
  .cm-ico svg { width: 20px; height: 20px; }

  /* ----- 8 · Carga con esqueleto ----- */
  .cargando-sk { display: block; padding: 2px; }
  .sk-txt { display: block; font-size: 13px; color: var(--muted); margin-bottom: 8px; }
  .sk-fila { display: grid; grid-template-columns: 1fr 1.6fr .8fr; gap: 14px; padding: 13px 4px; border-top: 1px solid var(--border); }
  .sk-fila i { display: block; height: 14px; border-radius: 6px; background: linear-gradient(90deg, var(--card2) 25%, #353d4b 50%, var(--card2) 75%); background-size: 220% 100%; animation: sk-brillo 1.25s linear infinite; }
  .sk-fila i:nth-child(1) { width: 72%; } .sk-fila i:nth-child(2) { width: 88%; } .sk-fila i:nth-child(3) { width: 56%; }
  .sk-fila:nth-of-type(2n) i:nth-child(1) { width: 58%; } .sk-fila:nth-of-type(2n) i:nth-child(2) { width: 70%; }
  .sk-fila:nth-of-type(2) i { animation-delay: -.25s; } .sk-fila:nth-of-type(3) i { animation-delay: -.5s; }
  @keyframes sk-brillo { from { background-position: 120% 0; } to { background-position: -120% 0; } }

  /* ----- 9 · Estados vacíos (ícono que se dibuja + onda) ----- */
  .estado-vacio { display: grid; justify-items: center; text-align: center; gap: 6px; padding: 30px 16px; }
  .estado-vacio.compacto { padding: 18px 12px; }
  .estado-vacio-ic { position: relative; width: 56px; height: 56px; border-radius: 16px; display: grid; place-items: center; background: var(--positive-soft); color: var(--positive); margin-bottom: 4px; }
  .estado-vacio-ic::after { content: ''; position: absolute; inset: 0; border-radius: 16px; border: 1px solid var(--positive); pointer-events: none; animation: vacio-onda 1.1s ease-out .5s both; }
  .estado-vacio-ic svg { width: 28px; height: 28px; display: block; }
  .estado-vacio-ic svg * { stroke-dasharray: 1; stroke-dashoffset: 1; animation: vacio-trazo .7s ease forwards; }
  .estado-vacio-ic svg *:nth-child(2) { animation-delay: .12s; } .estado-vacio-ic svg *:nth-child(3) { animation-delay: .24s; } .estado-vacio-ic svg *:nth-child(4) { animation-delay: .36s; }
  .estado-vacio h3 { margin: 0; font-size: 16px; animation: fila-sube .4s .35s both; }
  .estado-vacio p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--muted); max-width: 46ch; animation: fila-sube .4s .45s both; }
  .estado-vacio button { margin-top: 10px; animation: fila-sube .4s .55s both; }
  @keyframes vacio-trazo { to { stroke-dashoffset: 0; } }
  @keyframes vacio-onda { from { opacity: .7; transform: scale(1); } to { opacity: 0; transform: scale(1.5); } }

  /* ----- 10 · Cambio de vista, entrada de tarjetas y de login a panel ----- */
  #vistas { transition: opacity .11s ease, transform .11s ease; }
  #vistas.vista-sale { opacity: 0; transform: translateY(-4px); }
  .card:nth-child(2) { animation-delay: .04s; } .card:nth-child(3) { animation-delay: .08s; } .card:nth-child(n+4) { animation-delay: .12s; }
  #login-screen .card { animation: modal-in .4s cubic-bezier(.2,.9,.3,1.1) both; }
  #login-screen.login-sale { animation: login-sale .22s ease-in forwards; pointer-events: none; }
  @keyframes login-sale { to { opacity: 0; transform: translateY(-14px) scale(.96); } }
  #app.app-entra header { animation: app-baja .42s cubic-bezier(.2,.8,.2,1) both; }
  #app.app-entra .tabs { animation: app-izq .45s cubic-bezier(.2,.8,.2,1) .08s both; }
  #app.app-entra .role-chip { animation: chip-revela .6s cubic-bezier(.2,.8,.2,1) .1s both; }
  #app.app-entra #inactividad-contador { animation: app-sube .45s cubic-bezier(.2,.8,.2,1) .22s both; }
  #app.app-entra .topbar-salir { animation: app-sube .45s cubic-bezier(.2,.8,.2,1) .34s both; }
  @keyframes chip-revela { from { clip-path: inset(0 100% 0 0); opacity: .2; } to { clip-path: inset(0 0 0 0); opacity: 1; } }
  @keyframes app-sube { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  @keyframes app-baja { from { opacity: 0; transform: translateY(-100%); } to { opacity: 1; transform: none; } }
  @keyframes app-izq { from { opacity: 0; transform: translateX(-16px); } to { opacity: 1; transform: none; } }

  /* ----- 11 · Chip con el nombre del archivo descargado ----- */
  .chip-archivo { position: fixed; z-index: 250; display: flex; align-items: center; gap: 7px; padding: 6px 11px; border-radius: var(--radius-sm); background: var(--card2); border: 1px solid rgba(62,207,131,.35); color: var(--muted-strong); font-size: 12.5px; opacity: 0; transform: translateY(6px); transition: opacity .3s ease, transform .3s ease; pointer-events: none; }
  .chip-archivo.in { opacity: 1; transform: none; }
  .chip-archivo svg { width: 14px; height: 14px; color: var(--positive); }

  /* ----- Botón ojo (mostrar/ocultar contraseña): la raya se dibuja al mostrar la contraseña ----- */
  button.btn-ojo { position: absolute; right: 5px; top: 50%; margin-top: 0; transform: translateY(-50%); width: 36px; height: 32px; min-height: 0; padding: 0; display: grid; place-items: center; background: transparent; border: 1px solid transparent; color: var(--muted); border-radius: var(--radius-sm); transition: color .15s ease, background-color .15s ease, border-color .15s ease; }
  button.btn-ojo:hover { color: var(--text); background: rgba(255,255,255,.06); border-color: var(--border-strong); box-shadow: none; }
  button.btn-ojo:active { transform: translateY(-50%) scale(.92); }
  button.btn-ojo.ojo-on { color: var(--positive); }
  button.btn-ojo svg { width: 18px; height: 18px; display: block; overflow: visible; }
  button.btn-ojo .ojo-raya { stroke-dasharray: 1; stroke-dashoffset: 1; transition: stroke-dashoffset .25s ease; }
  button.btn-ojo.ojo-on .ojo-raya { stroke-dashoffset: 0; }

  /* ============ CAPA DE INTERACCION GLOBAL (scroll, selects, casillas) ============ */
  html { scrollbar-color: var(--border-strong) transparent; scrollbar-width: thin; }
  ::-webkit-scrollbar { width: 10px; height: 10px; }
  ::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 999px; border: 2px solid transparent; background-clip: content-box; }
  ::-webkit-scrollbar-thumb:hover { background: #4c5567; background-clip: content-box; }
  select:hover:not(:disabled) { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%233ecf83' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); }
  select:disabled { opacity: .5; cursor: not-allowed; }
  select option { background: var(--card); color: var(--text); }
  input[type="checkbox"], input[type="radio"] { accent-color: var(--positive); }

  /* Avisos con ícono (banner de cuenta suspendida y similares) */
  .banner-solo-lectura { display: flex; align-items: flex-start; gap: 10px; }
  .banner-solo-lectura > [data-ico] { margin-top: 2px; }
  .btn-cierre-lote { display: inline-flex !important; align-items: center; gap: 6px; }

  .topbar-salir { white-space: nowrap; }
  @media (max-width: 560px) {
    header .info { gap: 6px; }
    header .campana { width: 38px; }
    #header-nombre, .tm-ic { display: none; }
    .role-chip { padding: 0 9px; gap: 6px; letter-spacing: .06em; font-size: 11px; }
    #inactividad-contador { padding: 0 10px; }
  }
  @media (max-width: 520px) { #toast-root { left: 12px; right: 12px; align-items: stretch; } .toast { max-width: none; } }

  /* ============ RESPONSIVE: el menú lateral pasa a una fila con scroll en pantallas angostas ============ */
  @media (max-width: 780px) {
    .layout { flex-direction: column; align-items: stretch; }
    .tabs { flex-direction: row; width: 100%; overflow-x: auto; position: relative; top: auto; }
    .tabs button { width: auto; flex-shrink: 0; justify-content: center; text-align: center; padding-left: 14px; padding-right: 14px; }
  }

  @media (prefers-reduced-motion: reduce) {
    .card { animation: none !important; }
    *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
    button.btn-cargando::after { animation: none; width: 100%; opacity: .6; }
  }
  /* ===== Selector de periodo (mismo diseño que el panel Developer) ===== */
  .ui-pd { position: relative; flex: 0 0 auto; min-width: 250px; }
  .ui-pd-btn { display: flex; align-items: center; gap: 10px; width: 100%; height: 44px; margin-top: 6px; padding: 0 12px; text-align: left; }
  .ui-pd-lab { font-weight: 600; }
  .ui-pd-dat { font-size: 12px; color: var(--muted); white-space: nowrap; margin-left: auto; }
  .ui-pd-btn svg { width: 16px; height: 16px; flex: none; }
  .ui-pd.ui-pf { min-width: 0; width: 100%; }
  .ui-pf .ui-pd-btn { margin-top: 0; }
  .ui-cal-box.ui-cal-1 { max-width: 520px; }
  .ui-cal-r .uc-dia { text-transform: capitalize; white-space: nowrap; }
  .modal-box.ui-cal-box { max-width: 560px; }
  .ui-cal-wrap { display: flex; gap: 18px; flex-wrap: wrap; }
  .ui-cal-main { flex: 1 1 270px; min-width: 250px; }
  .ui-cal-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
  .ui-cal-head button { width: 30px; height: 30px; min-height: 0; padding: 0; margin: 0; }
  .ui-cal-t { font-weight: 600; font-size: 14px; text-transform: capitalize; }
  .ui-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; text-align: center; }
  .ui-cal-dh { font-size: 11px; color: var(--muted); padding: 4px 0; }
  .ui-cal-d { height: 34px; display: flex; align-items: center; justify-content: center; font-size: 13px; border-radius: 8px; cursor: pointer; transition: background-color .18s ease, color .18s ease, transform .15s ease; }
  .ui-cal-d:hover { transform: scale(1.08); }
  .ui-cal-d.in { background: var(--positive-soft); border-radius: 0; }
  .ui-cal-d.e { background: var(--positive); color: #04342C; font-weight: 700; border-radius: 8px; }
  .ui-cal-d.hoy { box-shadow: inset 0 0 0 1px var(--border-strong); }
  .ui-cal-pre { display: flex; flex-direction: column; gap: 6px; flex: 0 0 140px; }
  .ui-cal-pre .ui-cal-sin { font-weight: 700; border-color: var(--positive); }
  .ui-cal-pre .ui-cal-sin.on { background: var(--positive); color: #04342C; }
  .ui-cal-pre button { text-align: left; margin: 0; min-height: 0; padding: 7px 12px; font-size: 13px; }
  .ui-cal-r { margin-top: 12px; font-size: 13px; color: var(--muted); display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
  .ui-cal-r b { color: var(--text); }
  .ui-cal-r input.uc-in { width: 112px; min-height: 36px; padding: 6px 8px; font-size: 13.5px; font-weight: 600; text-align: center; font-variant-numeric: tabular-nums; letter-spacing: .02em; }
  .ui-cal-r input.uc-in.mal { border-color: var(--danger); }
  .ui-cal-r input.uc-in.mal:focus { box-shadow: 0 0 0 3px rgba(255,107,87,.3); }
  .ui-cal-r .uc-c { white-space: nowrap; }
  .ui-cal-m { margin-top: 6px; font-size: 12.5px; color: var(--muted); min-height: 18px; }
  .ui-cal-m.err { color: var(--danger); }
  .cm-dialog.ui-cal-box { max-width: 560px; }
  .ui-cal-r input.uc-in { width: 112px; }

  /* ===== Login con el diseño de Panel Developer ===== */
  /* ===== Botón Entrar: estados cargando / correcto / error (JS: loginEstado, loginRipple) ===== */
  button.btn-login { position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; gap: 10px; isolation: isolate; }
  button.btn-login > .bl-txt, button.btn-login > .bl-spin { position: relative; z-index: 2; }
  .btn-login .bl-txt { display: inline-block; transition: opacity .18s ease, transform .25s cubic-bezier(.2,.9,.3,1.1); }
  .btn-login .bl-spin { width: 0; height: 18px; opacity: 0; margin-right: -10px; transform: scale(.4); transition: width .25s ease, opacity .2s ease, margin .25s ease, transform .25s cubic-bezier(.2,.9,.3,1.2); }
  button.btn-login .bl-check { z-index: 2; position: absolute; left: 50%; top: 50%; width: 24px; height: 24px; margin: -12px 0 0 -12px; opacity: 0; stroke-dasharray: 1; stroke-dashoffset: 1; }
  /* Destello que cruza el botón mientras verifica */
  button.btn-login::before { content: ''; position: absolute; inset: 0; z-index: 1; opacity: 0; background: linear-gradient(110deg, transparent 30%, rgba(255,255,255,.22) 50%, transparent 70%); transform: translateX(-100%); pointer-events: none; }
  /* Ondas al pulsar (nacen en el punto del clic) */
  .bl-ripples { position: absolute; inset: 0; z-index: 1; overflow: hidden; pointer-events: none; border-radius: inherit; }
  .bl-rip { position: absolute; border-radius: 50%; background: rgba(255,255,255,.35); transform: scale(0); animation: bl-onda .65s ease-out forwards; }
  @keyframes bl-onda { to { transform: scale(1); opacity: 0; } }
  /* Relleno verde que se expande desde el centro al entrar */
  button.btn-login::after { content: ''; position: absolute; left: 50%; top: 50%; width: 10px; height: 10px; margin: -5px 0 0 -5px; z-index: 1; border-radius: 50%; background: var(--positive); transform: scale(0); pointer-events: none; }

  button.btn-login.bl-cargando { pointer-events: none; cursor: progress; box-shadow: 0 0 0 3px rgba(62,207,131,.18), 0 6px 22px rgba(62,207,131,.18); animation: bl-pulso 1.6s ease-in-out infinite; }
  button.btn-login.bl-cargando::before { opacity: 1; animation: bl-barrido 1.15s ease-in-out infinite; }
  button.btn-login.bl-cargando .bl-spin { width: 18px; opacity: 1; margin-right: 0; transform: none; animation: bl-gira .75s linear infinite; }
  @keyframes bl-gira { to { transform: rotate(360deg); } }
  @keyframes bl-barrido { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
  @keyframes bl-pulso { 0%, 100% { box-shadow: 0 0 0 3px rgba(62,207,131,.14), 0 6px 22px rgba(62,207,131,.12); } 50% { box-shadow: 0 0 0 6px rgba(62,207,131,.22), 0 8px 26px rgba(62,207,131,.28); } }

  button.btn-login.bl-ok { pointer-events: none; border-color: var(--positive); color: #06271a; animation: bl-rebote .5s cubic-bezier(.2,.9,.3,1.3); }
  button.btn-login.bl-ok::after { animation: bl-llena .55s cubic-bezier(.3,.7,.2,1) forwards; }
  button.btn-login.bl-ok .bl-txt { opacity: 0; transform: translateY(10px) scale(.8); }
  button.btn-login.bl-ok .bl-spin { width: 0; opacity: 0; margin-right: -10px; }
  button.btn-login.bl-ok .bl-check { opacity: 1; animation: bl-trazo .4s ease-out .22s forwards; }
  @keyframes bl-llena { to { transform: scale(40); } }
  @keyframes bl-trazo { to { stroke-dashoffset: 0; } }
  @keyframes bl-rebote { 0% { transform: scale(1); } 40% { transform: scale(.96); } 100% { transform: scale(1); } }

  button.btn-login.bl-er { border-color: var(--danger); animation: bl-error .5s cubic-bezier(.36,.07,.19,.97), bl-rojo .9s ease-out; }
  @keyframes bl-error { 10%, 90% { transform: translateX(-2px); } 20%, 80% { transform: translateX(4px); } 30%, 50%, 70% { transform: translateX(-7px); } 40%, 60% { transform: translateX(7px); } }
  @keyframes bl-rojo { 0% { background: var(--danger); } 100% { background: var(--primary); } }
  #login-screen .card.bl-card-er { animation: bl-card-er .45s ease; }
  @keyframes bl-card-er { 20%, 60% { transform: translateX(-5px); } 40%, 80% { transform: translateX(5px); } }
  @media (prefers-reduced-motion: reduce) {
    button.btn-login, button.btn-login::before, button.btn-login::after, .btn-login .bl-spin, .bl-rip, #login-screen .card.bl-card-er { animation: none !important; }
    button.btn-login.bl-ok::after { transform: scale(40); }
    button.btn-login.bl-ok .bl-check { stroke-dashoffset: 0; }
  }


  /* ============ MARCA DE AGUA "刹" — presente en todo el panel ============ */
  body::after { content: "刹"; position: fixed; right: 5vw; bottom: -6vmin; z-index: 50; font-family: var(--kanji); font-weight: 700; font-size: 62vmin; line-height: 1; color: rgba(62,207,131,.06); pointer-events: none; user-select: none; animation: kanji-in 1.4s var(--ease) both; }
  @keyframes kanji-in { from { opacity: 0; transform: translateY(24px); } }
  @media (max-width: 760px) { body::after { right: -8vw; font-size: 80vmin; } }

  /* ============ LOGIN (diseño de Panel Admin: sin marco, alineado a la izquierda, marca Michroma) ============ */
  #login-screen { position: relative; z-index: 60; max-width: none; margin: 0; padding: 24px; min-height: 100vh; min-height: 100dvh; align-items: center; justify-content: center; }
  #login-screen:not(.hidden) { display: flex; }
  #login-screen .card { background: transparent; border: 0; box-shadow: none; margin: 0; padding: 24px; width: 92%; max-width: 420px; text-align: left; animation: none; }
  #login-screen .login-inner { animation: login-in .7s .1s var(--ease) both; }
  @keyframes login-in { from { opacity: 0; transform: translateY(10px); } }
  #login-screen .logo-mark-lg { width: 60px; height: 60px; margin: 0 0 18px; }
  #login-screen .logo-mark-lg svg { width: 34px; height: 34px; }
  #login-screen .login-title { margin: 0 0 8px; font-size: 22px; line-height: 1.1; font-weight: 400; }
  #login-screen .login-title .logo-word { font-size: 22px; }
  #login-screen .login-sub { margin: 0 0 26px; font-size: 15px; color: var(--muted); }
  #login-screen label { margin: 18px 0 8px; font-size: 13px; }
  #login-screen label:first-of-type { margin-top: 0; }
  #login-screen input { height: 58px; min-height: 58px; padding: 0 18px; font-size: 18px; border-radius: 14px; border: 1.5px solid var(--border); background: var(--card); letter-spacing: .02em; transition: border-color .2s, box-shadow .2s; }
  #login-screen input:hover { border-color: var(--border-strong); }
  #login-screen input:focus, #login-screen input:focus-visible { border-color: var(--positive); border-radius: 14px; box-shadow: 0 0 0 4px rgba(62,207,131,.18); }
  #login-screen button.btn-ojo { right: 8px; }
  #login-screen #login-btn { height: 54px; min-height: 54px; margin-top: 24px; font-size: 16px; border-radius: 14px; }
  #login-screen .msg { margin-top: 14px; }
  @media (max-width: 760px) { #login-screen .login-title, #login-screen .login-title .logo-word { font-size: 18px; } }

  @media (prefers-reduced-motion: reduce) {
    body::after, #login-screen .login-inner { animation: none !important; }
  }


/* ---- Antes eran style="..." sueltos en el HTML (la CSP ya no permite estilos en línea). !important = misma prioridad que tenían en línea. ---- */
.u-logo-centro { display:flex !important; justify-content:center !important; margin-bottom:16px !important; }
.u-pos-rel { position:relative !important; }
.u-pad-der-56 { padding-right:56px !important; }
.u-header-nombre { font-weight:600 !important; font-size:13px !important; color:var(--text) !important; }
.u-pad-sup-26 { padding-top:26px !important; }

/* ----- Ventana "Sesiones activas" (mismo diseño que el panel Developer) ----- */
.cm-dialog.ses-box { max-width: min(880px, 100%); }
.cm-dialog.ses-box td, .cm-dialog.ses-box th { white-space: nowrap; }
.cm-dialog.ses-box td:first-child { white-space: normal; }
/* Título y texto como en el modal del Developer (.modal-box h2 / > p) */
.cm-dialog.ses-box h2 { font-size: 18px; line-height: 1.3; margin: 0 0 10px; }
.cm-dialog.ses-box > p { font-size: 13.5px; line-height: 1.55; color: var(--muted-strong); margin: 0 0 10px; }
.cm-dialog.ses-box > p.tiny { color: var(--muted); }
.ses-filtro { margin: 2px 0 12px; display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
.ses-filtro > select { flex: 0 0 240px; width: 240px; margin: 0; }
.ses-pie { margin-top: 12px; display: flex; gap: 8px; flex-wrap: wrap; }
.ses-pie[hidden] { display: none; }
.tabla-centro th, .tabla-centro td { vertical-align: middle; }
@media (min-width: 781px) {
  .tabla-centro th:nth-child(n+2):nth-child(-n+4), .tabla-centro td:nth-child(n+2):nth-child(-n+4) { text-align: center; }
}
.ses-resumen { margin: 0 0 10px; padding: 10px 12px; border-radius: var(--radius-sm); font-size: 12.5px; line-height: 1.5; color: var(--muted-strong); background: var(--bg-elevated); border: 1px solid var(--border); }
.ses-resumen-alerta { color: #f1d9a3; background: var(--amber-soft); border-color: rgba(232,179,76,.28); }
.ses-alerta { display: inline-block; margin-top: 4px; padding: 2px 8px; border-radius: 999px; font-size: 11.5px; font-weight: 600; white-space: normal; background: var(--amber-soft); color: var(--amber); }

/* Etiqueta "Nueva" en la ventana de coincidencias de IP */
.chip-nueva { display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px; background: var(--amber-soft); color: var(--amber); font-size: 11px; font-weight: 600; vertical-align: middle; }
