/* AURORA — Tema oscuro «sala» (29/10/2026)
 *
 * Rediseño del tema oscuro con el lenguaje de la versión móvil (/m): grafito,
 * cantos rectos, chaflán en lo principal, escuadras en los paneles, un triángulo
 * del color del estado en la esquina y Chakra Petch + IBM Plex en vez de la mono
 * en todo. El diseño de referencia es el lienzo «AURORA oscuro · rediseño».
 *
 * TODO cuelga de :root.oscuro-sala:not([data-theme="light"]). La clase la pone
 * aplicarOscuroEstilo() (tema.js) según el ajuste oscuro_estilo de /godmode >
 * Apariencia, que desde la fase 5 es 'sala' por defecto. Sin la clase esta hoja
 * no hace nada. La acompaña oscuro_sala_auto.css, GENERADA por
 * tools/oscuro_sala_generar.py (volver a lanzarlo si cambian las hojas de los
 * módulos) y cargada antes que esta.
 *
 * CÓMO VOLVER ATRÁS
 *   1. Al momento: /godmode > Apariencia > Tema oscuro > «Clásico» y «Guardar
 *      para todos» (o, solo uno, «Probar en este navegador»). Sin publicar nada.
 *   2. Que el de por defecto vuelva a ser el clásico: OSCURO_DEFECTO = "clasico"
 *      en aurora/settings.py y oscuroInstalacion = 'clasico' en tema.js.
 *   3. Quitarlo del todo: borrar esta hoja, oscuro_sala_auto.css, el generador,
 *      el banco (tools/banco_oscuro_sala*) y los bloques marcados «OSCURO SALA»
 *      (grep -rn "OSCURO SALA"): index.html, tab_apariencia.html, tema.js,
 *      nueva_ifa.js y aurora/settings.py. La fila oscuro_estilo de
 *      AuroraSettings, si se llegó a guardar, se puede dejar: nadie la lee.
 *
 * Fases: 1 paleta, letra, cantos por variable y retícula · 2 piezas comunes
 * (botones, campos, fichas, cifras, cabecera, ventanas, menú y barra) · 3
 * estados · 4 Base de IFAs, Mi jornada y Consultar AURORA · 5 el resto de
 * módulos (casi todo generado) y por defecto encendido.
 * FUERA a propósito: las páginas sueltas con hoja propia (/m, /fabrica, ORION,
 * wallboard), que no cargan esta hoja.
 */

/* ── Fase 1 · Paleta, letra y cantos ───────────────────────────────────────
 * Los mismos valores que --m-* de movil.css, salvo los colores de estado, que
 * son más vivos (se pidieron de alto contraste; los cuatro pasan de 4,5:1 sobre
 * --bg1). --text1 y --text2 suben respecto al oscuro clásico: #6e7681 daba
 * menos de 4,5:1 sobre las tarjetas. */
:root.oscuro-sala:not([data-theme="light"]) {
  --bg0: #0B0E12;
  --bg1: #11161C;
  --bg2: #161C24;
  --bg3: #1F2730;
  --border: #232B36;
  --border2: #2F3946;
  --text0: #E7ECF2;
  --text1: #95A1B2;
  --text2: #7D8899;
  /* OJO: --blue es el NARANJA de la marca (el nombre es de la paleta original). */
  --blue: #F97316;
  --blue-dim: #7C3A0A;
  --blue-bg: #1F1208;
  --green: #22E06B;
  --green-bg: #0B2616;
  --amber: #FFB300;
  --amber-bg: #2B2005;
  --red: #FF3B30;
  --red-bg: #2E0E0C;
  /* PEND. REVIS. El claro ya tenía --info; el oscuro clásico no. */
  --info: #2E9BFF;
  --info-bg: #0A1E33;
  /* Las secciones del menú dejan el azul eléctrico: rótulo gris, como en /m. */
  --nav-sec: #95A1B2;

  --font-ui: 'IBM Plex Sans', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: 'IBM Plex Mono', ui-monospace, 'SFMono-Regular', monospace;
  --font-display: 'Chakra Petch', 'IBM Plex Sans', sans-serif;

  /* 0px y no 0: un calc(var(--radius) + 2px) con un 0 sin unidad no es válido. */
  --radius: 0px;
  --radius-lg: 0px;

  /* Propios de este tema. */
  --sala-reticula: rgba(149, 161, 178, 0.045);
  --sala-chaflan: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 12px 100%, 0 calc(100% - 12px));
  color-scheme: dark;
}

/* La retícula de /m. Va en el body: .main no tiene fondo propio, así que se ve
   detrás de los módulos; el menú y la barra la tapan con el suyo. */
:root.oscuro-sala:not([data-theme="light"]) body {
  background-color: var(--bg0);
  background-image: linear-gradient(var(--sala-reticula) 1px, transparent 1px),
                    linear-gradient(90deg, var(--sala-reticula) 1px, transparent 1px);
  background-size: 32px 32px;
}

/* Títulos y cifras en Chakra Petch; el resto ya lo cambia --font-ui. */
:root.oscuro-sala:not([data-theme="light"]) .mod-title {
  font-family: var(--font-display); font-weight: 600; font-size: 2.6rem; letter-spacing: .01em;
}
:root.oscuro-sala:not([data-theme="light"]) .mod-sub { color: var(--text1); font-size: 1.3rem; }
:root.oscuro-sala:not([data-theme="light"]) .stat .v {
  font-family: var(--font-display); font-weight: 600;
}
:root.oscuro-sala:not([data-theme="light"]) .stat .l {
  font-family: var(--font-mono); letter-spacing: .16em; color: var(--text1);
}


/* ══ Fase 2 · Piezas comunes ════════════════════════════════════════════════
 * Cantos rectos en lo que tenía el radio escrito a mano, botones, campos,
 * fichas, cifras, cabecera de módulo, ventanas, menú lateral y barra superior.
 * Los círculos que significan algo (avatares, interruptores, cargando…) NO se
 * tocan aquí: nada de un «* { border-radius: 0 }». */

/* ── Cantos rectos de las piezas comunes con radio escrito a mano ── */
:root.oscuro-sala:not([data-theme="light"]) :is(
  .hamburger, .textsize-btn, .theme-toggle, .noti-btn, .ss-btn, .ss-pop,
  .kb-clear-btn, .kb-csv-btn, .kb-mias-btn, .kb-sel-btn, .kb-pg-btns button,
  .cx-btn-del, .cx-btn-ghost, .cx-ask, .ia-draft-btn, .inc-btn-del, .login-btn,
  .status-pill, .meteo-pill, .meteo-panel, .noti-panel, .atr-pill, .chip, .chip-n,
  .est-select, .lock-modal, .sat-modal, .fallo-modal, .jord-modal, .atr-win,
  .search-row input, .send-row textarea, .gm-tab
) { border-radius: 0; }

/* ── Botones ──
 * El principal, como en /m: chaflán, Chakra Petch en mayúsculas y texto OSCURO
 * sobre el naranja (el blanco sobre #F97316 da 2,8:1; el grafito, 7:1). Los
 * .sendbtn que llevan colores en línea (los secundarios de /godmode) conservan
 * su color: lo en línea gana. */
:root.oscuro-sala:not([data-theme="light"]) .sendbtn {
  border-radius: 0; color: #0B0E12;
  font-family: var(--font-display); font-weight: 700; font-size: 1.25rem;
  letter-spacing: .08em; text-transform: uppercase;
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
}
/* Un .sendbtn con fondo en línea es un secundario disfrazado (los «Probar en
   este navegador» de /godmode): rectángulo normal, sin chaflán ni mayúsculas. */
:root.oscuro-sala:not([data-theme="light"]) .sendbtn[style*="background"] {
  clip-path: none; border: 1px solid var(--border2);
  font-family: var(--font-ui); font-weight: 500; letter-spacing: 0; text-transform: none;
}
:root.oscuro-sala:not([data-theme="light"]) .sendbtn-sec {
  border-radius: 0; background: var(--bg2); color: var(--text0); border-color: var(--border2);
}
:root.oscuro-sala:not([data-theme="light"]) .icon-btn {
  border-radius: 0; border-color: var(--border2); color: var(--text0);
}
:root.oscuro-sala:not([data-theme="light"]) .icon-btn.primary {
  background: none; border-color: var(--blue); color: var(--text0);
}
:root.oscuro-sala:not([data-theme="light"]) .icon-btn.primary:hover { background: var(--blue-bg); }

/* ── Campos: hundidos (fondo del tema) y foco con halo naranja, como en /m ── */
:root.oscuro-sala:not([data-theme="light"]) :is(.finput, .search-row input, .send-row textarea) {
  border-radius: 0; background: var(--bg0); border-color: var(--border2);
}
:root.oscuro-sala:not([data-theme="light"]) :is(.finput, .search-row input, .send-row textarea):focus {
  border-color: var(--blue); box-shadow: 0 0 0 3px rgba(249, 115, 22, .18);
}
:root.oscuro-sala:not([data-theme="light"]) .ss-btn { background: var(--bg0); border-color: var(--border2); }

/* ── Fichas de filtro ── */
:root.oscuro-sala:not([data-theme="light"]) .chip {
  background: var(--bg1); border-color: var(--border2); color: var(--text0);
}
:root.oscuro-sala:not([data-theme="light"]) .chip.active {
  background: var(--blue-bg); border-color: var(--blue); color: var(--text0);
}
:root.oscuro-sala:not([data-theme="light"]) .chip-n,
:root.oscuro-sala:not([data-theme="light"]) .chip.active .chip-n {
  background: none; padding: 0; color: var(--text1); font-family: var(--font-mono);
}

/* ── Cabecera de módulo: la pastilla del icono pasa a chaflán ── */
:root.oscuro-sala:not([data-theme="light"]) .mod-head-ico {
  border-radius: 0; border: 0; box-shadow: none;
  background: color-mix(in srgb, var(--blue) 13%, transparent);
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
}

/* ── Cifras: casillas pegadas con una línea de 1 px entre ellas, etiqueta
 * arriba (el HTML trae la cifra primero: se invierte el orden visual). ── */
:root.oscuro-sala:not([data-theme="light"]) .stats-grid {
  gap: 1px; background: var(--border); border: 1px solid var(--border);
}
:root.oscuro-sala:not([data-theme="light"]) .stat {
  display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 6px;
  border: 0; border-radius: 0; background: var(--bg0); padding: 14px 16px; text-align: left;
}
:root.oscuro-sala:not([data-theme="light"]) .stat .v { font-size: 3rem; line-height: 1; }
:root.oscuro-sala:not([data-theme="light"]) .stat .l { margin: 0; }

/* ── Tabla: cabecera en mono de rótulo ── */
:root.oscuro-sala:not([data-theme="light"]) .ktbl th {
  background: var(--bg1); font-family: var(--font-mono); font-size: 1rem;
  letter-spacing: .14em; color: var(--text1);
}

/* ── Ventanas: escuadra naranja arriba a la izquierda ──
 * Pintada con el FONDO (dos tiras de 14×2 px) y no con ::before, para no
 * pelearse con los pseudo-elementos que ya usen. Va por dentro del borde. */
:root.oscuro-sala:not([data-theme="light"]) :is(
  .lock-modal, .sat-modal, .fallo-modal, .jord-modal, .atr-win, .noti-panel, .meteo-panel, .sala-escuadra
) {
  background-image: linear-gradient(var(--blue), var(--blue)), linear-gradient(var(--blue), var(--blue));
  background-size: 14px 2px, 2px 14px;
  background-position: 0 0, 0 0;
  background-repeat: no-repeat;
}

/* ── Menú lateral (desplegable, el de por defecto) ──
 * Fondo un punto distinto del de la página, rótulos sin redondeo y lo activo
 * con el tinte naranja, el texto claro y la escuadra, como en el lienzo. */
:root.oscuro-sala.menu-desplegable:not([data-theme="light"]) {
  --nd-bg: #0E1217;
  --nd-sel-bg: color-mix(in srgb, var(--blue) 13%, transparent);
  --nd-sel-txt: var(--text0);
  --nd-cnt-sel: transparent;
}
:root.oscuro-sala:not([data-theme="light"]) nav.sidebar :is(.slabel, .sbtn, .nav-grupo-lista .sbtn) { border-radius: 0; }
/* Contadores (Abiertas 41…): cifra suelta en mono, sin pastilla. */
:root.oscuro-sala:not([data-theme="light"]) nav.sidebar .cnt { border-radius: 0; background: none; color: var(--text1); }
:root.oscuro-sala:not([data-theme="light"]) nav.sidebar .sbtn.active .cnt { color: var(--blue); }
:root.oscuro-sala:not([data-theme="light"]) nav.sidebar .sbtn.active { position: relative; }
:root.oscuro-sala:not([data-theme="light"]) nav.sidebar .sbtn.active::before {
  content: ''; position: absolute; top: 0; left: 0; width: 10px; height: 10px; pointer-events: none;
  border-top: 2px solid var(--blue); border-left: 2px solid var(--blue);
}
:root.oscuro-sala:not([data-theme="light"]) nav.sidebar .sbtn.active i { color: var(--blue); }
/* Sección cerrada con un aviso dentro: el punto rojo pasa a esquina. */
:root.oscuro-sala.menu-desplegable:not([data-theme="light"]) .nav-grupo:not(.abierto):has(.nav-badge:not([style*="none"])) > .slabel .nav-gr-ico::after {
  border-radius: 0; box-shadow: none; top: -3px; right: -5px; width: 9px; height: 9px;
  clip-path: polygon(0 0, 100% 0, 100% 100%);
}

/* ── Barra superior ── */
:root.oscuro-sala:not([data-theme="light"]) .topbar { background: var(--bg0); }
:root.oscuro-sala:not([data-theme="light"]) :is(.status-pill, .meteo-pill) {
  background: var(--bg1); border-color: var(--border); font-family: var(--font-mono);
}
/* El punto de «Conectado» pasa a esquina: mismo color, que lo pone core.js. */
:root.oscuro-sala:not([data-theme="light"]) .status-pill { position: relative; }
:root.oscuro-sala:not([data-theme="light"]) .status-pill .dot {
  position: absolute; top: -1px; left: -1px; width: 9px; height: 9px;
  border-radius: 0; animation: none; box-shadow: none;
  clip-path: polygon(0 0, 100% 0, 0 100%);
}
/* IFAs atrasadas (se pidió así): sin punto, letra normal y solo el BORDE de
   color; ámbar el aviso normal y rojo vivo el grave. */
:root.oscuro-sala:not([data-theme="light"]) .atr-pill {
  background: var(--bg1); color: var(--text0); font-family: var(--font-mono);
  border-color: var(--amber);
}
:root.oscuro-sala:not([data-theme="light"]) .atr-pill.atr-grave { background: var(--bg1); border-color: var(--red); }
:root.oscuro-sala:not([data-theme="light"]) .atr-pill i,
:root.oscuro-sala:not([data-theme="light"]) .atr-pill.atr-grave i { color: var(--text1); }
:root.oscuro-sala:not([data-theme="light"]) .atr-pill:hover { background: var(--bg2); box-shadow: none; }
:root.oscuro-sala:not([data-theme="light"]) .atr-pill-dot { display: none; }
/* Campana: caja como los demás botones de la barra; el contador, cuadrado. */
:root.oscuro-sala:not([data-theme="light"]) .noti-btn {
  border: 1px solid var(--border); background: var(--bg1); color: var(--text1);
}
:root.oscuro-sala:not([data-theme="light"]) .noti-btn.tiene { color: var(--text0); border-color: var(--blue); }
:root.oscuro-sala:not([data-theme="light"]) .noti-badge {
  border-radius: 0; background: var(--blue); color: #0B0E12; top: -5px; right: -5px;
  font-family: var(--font-mono);
}


/* ══ Fase 3 · Estados ═══════════════════════════════════════════════════════
 * Se pidió así: el estado es SOLO TEXTO del color del estado (sin píldora) y,
 * donde hay una fila o una casilla, un TRIÁNGULO relleno en la esquina. Nada de
 * puntitos de color. Las clases b-* las pone badgeClass() (core.js) en todas
 * las tablas, el detalle de la IFA y el registro de cambios: basta con CSS.
 *   ABIERTA --red · PEND. ADMIN. --amber · PEND. REVIS. --info · CERRADA --green
 *   (b-proc, «En proceso» de Incidencias, va en ámbar). */

/* ── Etiqueta de estado: texto de color ── */
:root.oscuro-sala:not([data-theme="light"]) .badge {
  padding: 0; border: 0; border-radius: 0; background: none;
  font-family: var(--font-mono); font-size: 1.1rem; font-weight: 600; letter-spacing: .06em;
}
:root.oscuro-sala:not([data-theme="light"]) :is(.badge, .est-select).b-open   { color: var(--red); }
:root.oscuro-sala:not([data-theme="light"]) :is(.badge, .est-select).b-closed { color: var(--green); }
:root.oscuro-sala:not([data-theme="light"]) :is(.badge, .est-select).b-pend   { color: var(--amber); }
:root.oscuro-sala:not([data-theme="light"]) :is(.badge, .est-select).b-revis  { color: var(--info); }
:root.oscuro-sala:not([data-theme="light"]) :is(.badge, .est-select).b-proc   { color: var(--amber); }

/* El selector de estado del detalle es un control: conserva una caja (neutra)
   para que se vea que se puede cambiar; el color va en el texto. */
:root.oscuro-sala:not([data-theme="light"]) .est-select {
  border-radius: 0; background: var(--bg0); border: 1px solid var(--border2);
  font-family: var(--font-mono); font-weight: 600; letter-spacing: .06em;
}
:root.oscuro-sala:not([data-theme="light"]) .est-select option { color: var(--text0); background: var(--bg1); }

/* ── Triángulo de estado en las filas de las tablas con estado ──
 * Va en la primera celda de la fila (en la Base de IFAs, la de la casilla).
 * El color sale de --sala-estado, que pone el estado que tenga la fila. */
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge) > td:first-child { position: relative; }
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge) > td:first-child::before {
  content: ''; position: absolute; top: 0; left: 0; width: 12px; height: 12px; pointer-events: none;
  background: var(--sala-estado, transparent); clip-path: polygon(0 0, 100% 0, 0 100%);
}
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge.b-open)   { --sala-estado: var(--red); }
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge.b-closed) { --sala-estado: var(--green); }
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge.b-pend)   { --sala-estado: var(--amber); }
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge.b-revis)  { --sala-estado: var(--info); }
:root.oscuro-sala:not([data-theme="light"]) .ktbl tr:has(> td .badge.b-proc)   { --sala-estado: var(--amber); }

/* ── Cifras de la Base de IFAs: Abiertas y Cerradas llevan su esquina ── */
:root.oscuro-sala:not([data-theme="light"]) .stat:has(#s-open, #s-closed) { position: relative; }
:root.oscuro-sala:not([data-theme="light"]) .stat:has(#s-open, #s-closed)::before {
  content: ''; position: absolute; top: 0; left: 0; width: 16px; height: 16px; pointer-events: none;
  clip-path: polygon(0 0, 100% 0, 0 100%);
}
:root.oscuro-sala:not([data-theme="light"]) .stat:has(#s-open)::before   { background: var(--red); }
:root.oscuro-sala:not([data-theme="light"]) .stat:has(#s-closed)::before { background: var(--green); }

/* ── Puntos sueltos ──
 * «Conectado» (presencia, compartir IFA, ORION) es un ESTADO: esquina, sin
 * parpadeo. El resto de .dot son muestras de color de una leyenda (técnicos de
 * Gestión SAT…): cuadradito. */
:root.oscuro-sala:not([data-theme="light"]) .dot { border-radius: 0; }
:root.oscuro-sala:not([data-theme="light"]) .dot:is(.ok, .busy) {
  width: 9px; height: 9px; animation: none; clip-path: polygon(0 0, 100% 0, 0 100%);
}

/* ── Contador rojo del menú (incidencias…): cuadrado, cifra en grafito ──
 * Blanco sobre #FF3B30 da 3,5:1; el grafito, 5,5:1. */
:root.oscuro-sala:not([data-theme="light"]) .nav-badge { border-radius: 0; color: #0B0E12; }


/* ══ Fase 4 · Las tres pantallas del lienzo ═════════════════════════════════
 * Base de IFAs, Mi jornada y Consultar AURORA, como en el diseño aprobado. */

/* ── Base de IFAs: cada fila es una tarjeta ──
 * La tabla sigue siendo una tabla (orden, columnas, selección): solo se separan
 * las filas 6 px y cada una lleva su marco. El triángulo de estado (fase 3) cae
 * justo en la esquina de la tarjeta. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl { border-collapse: separate; border-spacing: 0 6px; }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl th { background: var(--bg0); border-bottom: 0; }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody td {
  background: var(--bg1); padding-top: 11px; padding-bottom: 11px;
  border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
}
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody td:first-child { border-left: 1px solid var(--border); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody td:last-child { border-right: 1px solid var(--border); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody tr:last-child td { border-bottom: 1px solid var(--border); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody tr.clickable:hover td { background: var(--bg2); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody tr.kb-marcada td { background: var(--blue-bg); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tr:has(> td .badge) > td:first-child::before {
  top: -1px; left: -1px; width: 16px; height: 16px;
}
/* El número de IFA en naranja, como en el lienzo. ifas_tabla.js le pone el
   color EN LÍNEA (var(--text1)), así que solo se le gana con !important. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-kb .ktbl tbody td:nth-child(2) { color: var(--blue) !important; }

/* ── Mi jornada ──
 * Cantos rectos en todo el módulo de una pasada (tiene unos 40 radios a mano),
 * salvo el play de los cronos, que es redondo a propósito. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada *:not(.jor-crono-play) { border-radius: 0; }
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-switch-pista::after { border-radius: 0; }
/* Los paneles, con la escuadra de las ventanas (pintada con el fondo). */
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-panel {
  background-image: linear-gradient(var(--blue), var(--blue)), linear-gradient(var(--blue), var(--blue));
  background-size: 14px 2px, 2px 14px; background-position: 0 0, 0 0; background-repeat: no-repeat;
}
/* El reloj grande en Chakra Petch. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-contador {
  font-family: var(--font-display); font-weight: 600; font-size: 5.6rem; letter-spacing: .01em; line-height: 1;
}
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-contador-lbl { font-family: var(--font-mono); letter-spacing: .16em; }
/* La luz de «Fichado» pasa a esquina (el texto de al lado ya lo dice). */
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-estado-luz {
  box-shadow: none; clip-path: polygon(0 0, 100% 0, 0 100%);
}
/* Fichar: botón principal con chaflán; el texto en grafito, porque el blanco
   sobre el verde y el rojo vivos no llega a 4,5:1. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-btn {
  font-family: var(--font-display); font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 12px 100%, 0 calc(100% - 12px));
}
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada :is(.jor-btn-in, .jor-btn-out) { color: #0B0E12; border: 0; }
/* El marcador de AHORA en la línea del día: una punta de flecha, no un punto. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-jornada .jor-tl-ahora::before {
  border-radius: 0; width: 10px; height: 7px; top: -5px; clip-path: polygon(0 0, 100% 0, 50% 100%);
}

/* ── Consultar AURORA ── */
/* Lo que dice AURORA: panel con escuadra (antes, texto suelto sin marco). */
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .msg.a .bbl {
  padding: 14px 18px; background-color: var(--bg1); border: 1px solid var(--border);
  background-image: linear-gradient(var(--blue), var(--blue)), linear-gradient(var(--blue), var(--blue));
  background-size: 14px 2px, 2px 14px; background-position: 0 0, 0 0; background-repeat: no-repeat;
}
/* Lo que dice uno: caja grafito, sin el degradado naranja ni el bocadillo. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .msg.u .bbl {
  border-radius: 0; background: var(--bg2); color: var(--text0);
  border: 1px solid var(--border2); box-shadow: none;
}
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .msg.u .bbl :is(strong, b) { color: var(--text0); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .msg.a .bbl :is(blockquote, pre, table, code) { border-radius: 0; }
/* Cabecera de la conversación */
:root.oscuro-sala:not([data-theme="light"]) :is(.chat-cab-btn, .chat-cab-temp, .hero-aviso, .hero-temp, .hero-hint code) { border-radius: 0; }
:root.oscuro-sala:not([data-theme="light"]) .chat-cab-est::before {
  border-radius: 0; box-shadow: none; width: 9px; height: 9px; clip-path: polygon(0 0, 100% 0, 0 100%);
}
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat.pensando .chat-cab-est::before,
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat.escribiendo .chat-cab-est::before { box-shadow: none; }
/* El compositor: caja recta, halo naranja al escribir. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .send-row { border-radius: 0; box-shadow: none; }
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .send-row:focus-within { box-shadow: 0 0 0 3px rgba(249, 115, 22, .18); }
/* Voz: cuadrado con borde; enviar: cuadrado naranja con el canto cortado. */
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .voz-btn { border-radius: 0; border-color: var(--border2); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .voz-btn.activo { border-color: var(--blue); }
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .sendbtn {
  border-radius: 0; background: var(--blue); color: #0B0E12; box-shadow: none;
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 0 100%);
}
:root.oscuro-sala:not([data-theme="light"]) #tcon-chat .sendbtn:hover:not(:disabled) {
  transform: none; box-shadow: none; background: #FB923C;
}


/* ══ Fase 5 · Módulos con hoja propia ═══════════════════════════════════════
 * El grueso (cantos rectos y colores de estado de las hojas de los módulos) lo
 * GENERA tools/oscuro_sala_generar.py en oscuro_sala_auto.css, que se carga
 * antes que esta. Aquí solo lo que no se puede deducir solo. */

/* Interruptor de /godmode > Módulos: la pista sale recta del generador; el
   botón (un 50 %, que el generador respeta) se cuadra a juego. */
:root.oscuro-sala:not([data-theme="light"]) .mod-switch::after { border-radius: 0; }
