/* ═══════════════════════════════════════════════════════════════
   APEX START — Contenido real (Fase 6.B)
   Noticias · Aprende (conceptos/checklist/glosario/videos) · Calendario
   Brand Kit v2. Depende de apex-tokens.css y apex-shell-nav.css.
   ═══════════════════════════════════════════════════════════════ */

.apex-start-lead { font-size: 14px; color: var(--gray); line-height: 1.5; margin: 0 0 18px; }

/* ── Catálogo de programas y especializaciones (Start · conversión) ── */
.apex-start-catalogo { margin-top: 28px; }
.apex-start-cat-head { margin-bottom: 14px; }
.apex-start-cat-head h2 { font-family: var(--font-display); font-size: 22px; font-weight: 900; text-transform: uppercase; letter-spacing: .01em; color: var(--text); line-height: 1.1; margin: 0 0 6px; }
.apex-start-cat-head p { font-size: 13px; color: var(--gray); line-height: 1.5; margin: 0; }
.apex-start-cat-grid { display: grid; grid-template-columns: 1fr; gap: 12px; }
.apex-start-cat-card {
  display: flex; flex-direction: column; gap: 6px;
  background: var(--bg3); border: 1px solid var(--border);
  border-left: 3px solid var(--accent);
  border-radius: var(--radius-md); padding: 16px 18px;
  transition: border-color .15s;
}
.apex-start-cat-card:hover { border-color: var(--accent-bd); }
.apex-start-cat-card.is-esp { border-left-color: var(--amber); }
.apex-start-cat-tipo { font-family: var(--font-mono); font-size: 9px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--accent); }
.apex-start-cat-card.is-esp .apex-start-cat-tipo { color: var(--amber); }
.apex-start-cat-title { font-family: var(--font-display); font-size: 17px; font-weight: 800; text-transform: uppercase; letter-spacing: .01em; color: var(--text); line-height: 1.15; }
.apex-start-cat-desc { font-size: 13px; color: var(--gray); line-height: 1.5; }
.apex-start-cat-foot { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; margin-top: 6px; }
.apex-start-cat-dur { font-family: var(--font-mono); font-size: 10px; color: var(--gray2); text-transform: uppercase; letter-spacing: .04em; }
.apex-start-cat-cta {
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: 11px; font-weight: 700; letter-spacing: .04em;
  color: var(--accent-t); background: var(--accent); white-space: nowrap;
  text-decoration: none; padding: 9px 16px; border-radius: var(--radius); width: 100%;
}
.apex-start-cat-card.is-esp .apex-start-cat-cta { background: var(--amber); }
/* 2026-07-26: estado "ya inscrito" — no es un CTA (no lleva a ningún lado), así
   que no hereda el look de botón: fondo transparente, borde sutil, mismo alto. */
.apex-start-cat-cta--ok {
  background: transparent; color: var(--gray); border: 1px solid var(--border2);
}
.apex-start-cat-card.is-esp .apex-start-cat-cta--ok { background: transparent; }

/* ── "Ver contenido del programa" — expandible, mismo patrón que la home (apx-details-list) ── */
.apex-start-cat-details-btn {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  width: 100%; background: none; border: none; padding: 6px 0; margin-top: 2px;
  font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: .04em;
  text-transform: uppercase; color: var(--gray); cursor: pointer;
}
.apex-start-cat-details-btn svg { flex-shrink: 0; transition: transform .2s; color: var(--gray2); }
.apex-start-cat-details-btn.open svg { transform: rotate(180deg); }
.apex-start-cat-details-list {
  list-style: none; margin: 0; padding: 0; max-height: 0; overflow: hidden;
  transition: max-height .3s ease;
}
.apex-start-cat-details-list.open { max-height: 2000px; padding-bottom: 4px; }
.apex-start-cat-details-list li {
  font-size: 12px; color: var(--gray); line-height: 1.5; padding: 6px 0 6px 16px;
  border-bottom: 1px solid var(--border); position: relative;
}
.apex-start-cat-details-list li::before { content: '—'; position: absolute; left: 0; color: var(--gray2); }
.apex-start-cat-details-list li:last-child { border-bottom: none; }

@media (min-width: 620px) {
  .apex-start-cat-grid { grid-template-columns: 1fr 1fr; }
}

/* ── Instalar la app (respaldo permanente, no se descarta) ── */
.apex-start-instalar { margin-top: 28px; background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 18px 20px; }
.apex-start-inst-head h2 { font-family: var(--font-display); font-size: 18px; font-weight: 900; text-transform: uppercase; letter-spacing: .01em; color: var(--text); margin: 0 0 6px; }
.apex-start-inst-head p { font-size: 13px; color: var(--gray); line-height: 1.5; margin: 0 0 14px; }
.apex-start-inst-steps { margin: 0; padding-left: 20px; font-size: 13px; color: var(--gray); line-height: 1.8; }
.apex-start-inst-steps b { color: var(--text); }

/* ── Bloque de instalación en ESCRITORIO: QR + dos tarjetas (2026-08-08) ──
   Solo aparece en computadora; en el teléfono se muestra un solo camino, el
   que corresponde. Ver el porqué en apex-flow-instalar.php. */
.apex-inst-qr-wrap {
  display: flex; align-items: center; gap: 14px; margin: 0 0 18px;
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 14px;
}
/* Fondo blanco fijo: un QR sobre fondo oscuro no lo lee ninguna cámara. */
.apex-inst-qr { background: #fff; padding: 6px; border-radius: 6px; flex: 0 0 auto; display: block; }
.apex-inst-qr-txt { font-size: 13px; color: var(--gray); line-height: 1.5; margin: 0; }

.apex-inst-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.apex-inst-card {
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 14px;
}
.apex-inst-card-t {
  font-family: var(--font-display); font-size: 14px; font-weight: 800;
  color: var(--text); margin: 0 0 8px; text-transform: uppercase; letter-spacing: .04em;
}
.apex-inst-card-nota { font-size: 11px; color: var(--gray2); line-height: 1.5; margin: 8px 0 0; }

/* Instalar en la computadora queda como acción secundaria: existe, pero no
   compite con llevarla al teléfono, que es donde se usa y donde suenan las
   alarmas. */
.apex-inst-escritorio { margin: 14px 0 0; }
.apex-inst-link {
  background: none; border: 0; padding: 0; cursor: pointer;
  font-size: 12px; color: var(--gray); text-decoration: underline;
}
.apex-inst-link:hover { color: var(--accent); }

/* Cobro pausado por la migración a Red Enlace (2026-08-08). Con borde de
   acento y no gris: no es un error ni algo roto — es una novedad con fecha. */
.apex-flow-buy-pausado {
  background: var(--bg3); border: 1px solid var(--accent-bd);
  border-radius: var(--radius-md); padding: 14px; margin: 8px 0 0;
}
.apex-flow-buy-pausado p { font-size: 13px; color: var(--gray); line-height: 1.55; margin: 0; }
.apex-flow-buy-pausado b { color: var(--text); }
.apex-flow-buy-pausado-cta { margin-top: 8px !important; }
.apex-flow-buy-pausado-cta a { color: var(--accent); font-weight: 700; }

/* Llegaste por el QR: el bloque pulsa una vez para que sepas dónde quedaste
   parado. Sin colores de alerta — es una señal de "es acá", no un error. */
@keyframes apexInstLlegada { 0%,100% { box-shadow: 0 0 0 0 transparent; } 30% { box-shadow: 0 0 0 3px var(--accent-bd); } }
.apex-inst-recien-llegado { animation: apexInstLlegada 1.2s ease 2; border-radius: var(--radius-md); }
@media (prefers-reduced-motion: reduce) { .apex-inst-recien-llegado { animation: none; } }

/* Una sola columna cuando no entran dos — y el QR arriba, no al costado. */
@media (max-width: 560px) {
  .apex-inst-cards { grid-template-columns: 1fr; }
  .apex-inst-qr-wrap { flex-direction: column; text-align: center; }
}
.apex-start-inst-steps li::marker { color: var(--accent); font-family: var(--font-mono); font-weight: 700; }
.apex-start-inst-btn { width: 100%; background: var(--accent); color: var(--accent-t); border: none; border-radius: var(--radius-sm); padding: 13px; font-family: var(--font-display); font-size: 14px; font-weight: 800; text-transform: uppercase; letter-spacing: .02em; cursor: pointer; }
.apex-start-inst-note { font-size: 13px; color: var(--gray); line-height: 1.5; margin: 0; }

/* ── Explicador con ejemplo (checklist, calculadora) ── */
.apex-start-explica { margin-top: 16px; background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 14px 16px; }
.apex-start-explica summary { cursor: pointer; list-style: none; font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--accent); }
.apex-start-explica summary::-webkit-details-marker { display: none; }
.apex-start-explica[open] summary { margin-bottom: 10px; }
.apex-start-explica p { font-size: 13px; color: var(--gray); line-height: 1.6; margin: 0 0 8px; }
.apex-start-explica p:last-child { margin-bottom: 0; }
.apex-start-explica p b { color: var(--text); }
.apex-start-explica p i { color: var(--accent); font-style: normal; }

.apex-start-disclaimer {
  font-family: var(--font-mono); font-size: 10px; color: var(--gray2); line-height: 1.5;
  text-align: center; margin: 28px 0 4px; padding-top: 16px; border-top: 1px solid var(--border);
}

/* Variante compacta del estado vacío, para usar DENTRO de una sección
   (no como página completa): mismo lenguaje visual, menos padding. */
.apex-start-empty-inline { padding: 28px 16px; }

/* ── INICIO: qué se pierde el plan gratis (2026-08-08) ─────────────
   Reemplaza a las 5 tarjetas que duplicaban la barra inferior. Ver el
   comentario largo en apex-start.php para el porqué. */
.apex-start-vender {
  background: var(--bg3); border: 1px solid var(--accent-bd);
  border-radius: var(--radius-md); padding: 16px; margin-bottom: 12px;
}
.apex-start-vender-tag {
  display: inline-block; font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  letter-spacing: .1em; text-transform: uppercase; color: var(--accent);
  background: var(--accent-bg); border: 1px solid var(--accent-bd);
  border-radius: var(--radius); padding: 3px 8px; margin-bottom: 10px;
}
.apex-start-vender-t { font-family: var(--font-display); font-size: 18px; font-weight: 800; color: var(--text); margin: 0 0 8px; line-height: 1.25; }
.apex-start-vender-s { font-size: 13px; color: var(--gray); line-height: 1.6; margin: 0 0 14px; }
.apex-start-vender-s b { color: var(--text); }

/* "Cómo obtener PRO" es informativo, no un segundo botón que compita con el
   de arriba: caja neutra, sin borde de acento. */
.apex-start-comprar {
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 14px; margin-bottom: 12px;
}
.apex-start-comprar-t { font-family: var(--font-display); font-size: 14px; font-weight: 800; text-transform: uppercase; letter-spacing: .04em; color: var(--text); margin: 0 0 8px; }
.apex-start-comprar-p { font-size: 13px; color: var(--gray); line-height: 1.6; margin: 0; }
.apex-start-comprar-p b { color: var(--text); }
.apex-start-comprar-link { display: inline-block; margin-top: 10px; font-size: 13px; font-weight: 700; color: var(--accent); }
.apex-start-comprar-trial { display: block; margin-top: 8px; font-size: 11px; color: var(--gray2); }

/* ── 1 · NOTICIAS ─────────────────────────────────────────────── */
.apex-news-offline-note {
  font-size: 12px; color: var(--gray); background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 10px 12px; margin: 0 0 14px; line-height: 1.5;
}
.apex-news-list { display: flex; flex-direction: column; gap: 10px; }
.apex-news-card {
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 14px;
  display: flex; flex-direction: column; gap: 6px;
}
.apex-news-tag {
  align-self: flex-start; font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase; color: var(--accent);
  background: var(--accent-bg); border: 1px solid var(--accent-bd);
  border-radius: var(--radius); padding: 2px 7px;
}
.apex-news-title { font-family: var(--font-display); font-size: 16px; font-weight: 800; color: var(--text); line-height: 1.25; }
a.apex-news-title:hover { color: var(--accent); }
.apex-news-resumen { font-size: 13px; color: var(--gray); line-height: 1.5; margin: 0; }
.apex-news-fuente { font-size: 11px; color: var(--gray2); text-transform: uppercase; letter-spacing: .04em; }

/* Fecha de la noticia (2026-08-08). Va junto a la fuente, en una línea propia
   al pie de la tarjeta: la pregunta que responde ("¿esto es de hoy?") se hace
   DESPUÉS de leer el titular, no antes, así que no compite con él. */
.apex-news-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
.apex-news-fecha { font-size: 11px; color: var(--gray2); font-variant-numeric: tabular-nums; }
/* Más de 24h: se marca, no se esconde. Sin color de alarma — una nota de ayer
   no es un error, solo un dato que el lector necesita antes de decidir nada. */
.apex-news-fecha.is-vieja { color: var(--gray); font-style: italic; }
.apex-news-actualizado { font-size: 11px; color: var(--gray2); margin: 0 0 12px; line-height: 1.5; }
/* Nota todavía sin traducir (2026-08-23). Se avisa en la tarjeta para que el
   lector no se entere recién al abrirla. Sin rojo: no es un error, es un dato. */
.apex-news-idioma {
  font-family: var(--font-mono); font-size: 9px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--gray2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1px 5px;
}

/* ── 1b · FICHA DE UNA NOTICIA (2026-08-23) ───────────────────────
   El clic en un titular ya no expulsa al artículo en inglés: abre esto.
   Todo lo que se lee acá está en español. */
.apex-noticia-volver {
  display: inline-block; font-size: 12px; font-weight: 700; color: var(--gray);
  margin-bottom: 14px;
}
.apex-noticia-volver:hover { color: var(--accent); }
.apex-noticia-cab { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.apex-noticia-titulo {
  font-family: var(--font-display); font-size: 22px; font-weight: 800; line-height: 1.2;
  color: var(--text); margin: 0 0 12px;
}
.apex-noticia-resumen { font-size: 15px; color: var(--text); line-height: 1.6; margin: 0 0 16px; }

.apex-noticia-activos { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 18px; }
.apex-noticia-activos-t {
  font-family: var(--font-mono); font-size: 9px; font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; color: var(--gray2); margin-right: 2px;
}
.apex-noticia-chip {
  font-size: 11px; font-weight: 700; color: var(--text);
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 3px 9px;
}
.apex-noticia-chip.is-ticker { font-family: var(--font-mono); color: var(--accent); border-color: var(--accent-bd); background: var(--accent-bg); }

.apex-noticia-analisis {
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 16px; margin-bottom: 18px;
}
.apex-noticia-analisis-t {
  font-family: var(--font-display); font-size: 13px; font-weight: 800; text-transform: uppercase;
  letter-spacing: .06em; color: var(--accent); margin: 0 0 10px;
}
.apex-noticia-analisis-txt p { font-size: 14px; color: var(--gray); line-height: 1.65; margin: 0 0 10px; }
.apex-noticia-analisis-txt p:last-child { margin-bottom: 0; }
.apex-noticia-cargando { color: var(--gray2) !important; font-style: italic; }

.apex-noticia-acciones { display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; }
.apex-noticia-btn {
  display: inline-block; align-self: flex-start;
  font-family: var(--font-display); font-size: 13px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .04em;
  color: var(--accent-t); background: var(--accent);
  border-radius: var(--radius); padding: 11px 18px;
}
.apex-noticia-btn.is-sec { color: var(--text); background: transparent; border: 1px solid var(--border); }
.apex-noticia-btn-nota { font-size: 11px; color: var(--gray2); line-height: 1.5; }
.apex-noticia-legal { font-size: 11px; color: var(--gray2); line-height: 1.6; margin: 0; }

/* ── 2 · APRENDE ──────────────────────────────────────────────── */
.apex-start-calc-cta {
  display: flex; align-items: center; gap: 10px;
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 14px; margin-bottom: 16px;
}
.apex-start-calc-cta .apex-start-tile-ico { color: var(--accent); display: flex; }
.apex-start-calc-cta-t { font-family: var(--font-display); font-size: 14px; font-weight: 800; color: var(--text); text-transform: uppercase; letter-spacing: .02em; flex: 1; }
.apex-start-calc-cta-go {
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase; color: var(--accent-t);
  background: var(--accent); border-radius: var(--radius); padding: 4px 10px; white-space: nowrap;
}
.apex-start-calc-cta:hover { border-color: var(--accent-bd); }

/* Calculadora de riesgo */
.apex-calc-form { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
.apex-calc-field { display: flex; flex-direction: column; gap: 6px; }
.apex-calc-field-wide { grid-column: 1 / -1; }
.apex-calc-label { font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: .03em; text-transform: uppercase; color: var(--gray); }
.apex-calc-label em { font-style: normal; color: var(--gray2); text-transform: none; letter-spacing: 0; }
.apex-calc-input {
  display: flex; align-items: center; gap: 6px;
  background: var(--bg-deeper); border: 1px solid var(--border2);
  border-radius: var(--radius-md); padding: 0 12px; height: 46px;
  transition: border-color .15s ease;
}
.apex-calc-input:focus-within { border-color: var(--accent-bd); }
.apex-calc-prefix, .apex-calc-suffix { font-family: var(--font-mono); font-size: 14px; color: var(--gray); flex: 0 0 auto; }
.apex-calc-input input {
  flex: 1; min-width: 0; background: transparent; border: none; outline: none;
  font-family: var(--font-mono); font-size: 16px; font-weight: 600; color: var(--text);
}
.apex-calc-input input::placeholder { color: var(--gray2); font-weight: 400; }

/* Selector de instrumento (catálogo) */
.apex-calc-select { padding: 0; }
.apex-calc-select select {
  flex: 1; min-width: 0; width: 100%;
  background: transparent; border: none; outline: none; cursor: pointer;
  font-family: var(--font-mono); font-size: 15px; font-weight: 600; color: var(--text);
  padding: 0 12px; height: 46px;
  -webkit-appearance: none; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%237a8a8f' stroke-width='2.5' stroke-linecap='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
.apex-calc-select select option { background: var(--bg-deeper); color: var(--text); }
.apex-calc-instr-nota { font-family: var(--font-mono); font-size: 11px; color: var(--gray2); line-height: 1.5; margin: -8px 0 16px; }
.apex-calc-instr-nota:empty { display: none; margin: 0; }

.apex-calc-pro { margin-top: 16px; }
.apex-calc-pro-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }
.apex-calc-pro-list li { display: flex; align-items: flex-start; gap: 10px; }
.apex-calc-pro-ico { flex: 0 0 18px; display: flex; color: var(--gray); margin-top: 1px; }
.apex-calc-pro-list b { display: block; font-size: 13px; color: var(--text); margin-bottom: 2px; }
.apex-calc-pro-list p { margin: 0; font-size: 12px; color: var(--gray); line-height: 1.5; }
.apex-calc-pro-cta { display: flex; width: 100%; margin-top: 16px; }
.apex-calc-disclaimer { margin-top: 14px; font-size: 11px; color: var(--gray2); line-height: 1.5; font-style: italic; }

.apex-calc-out { min-height: 60px; }
.apex-calc-placeholder { font-size: 13px; color: var(--gray2); line-height: 1.5; text-align: center; padding: 18px 12px; border: 1px dashed var(--border2); border-radius: var(--radius-md); }
.apex-calc-error { font-size: 13px; color: var(--red); line-height: 1.5; padding: 14px; background: var(--red-bg); border: 1px solid var(--red); border-radius: var(--radius-md); }

.apex-calc-result { background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
.apex-calc-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 14px; border-bottom: 1px solid var(--border); }
.apex-calc-row:last-child { border-bottom: none; }
.apex-calc-row.is-primary { background: var(--accent-bg); padding: 16px 14px; }
.apex-calc-k { font-size: 13px; color: var(--gray); line-height: 1.3; }
.apex-calc-v { font-family: var(--font-mono); font-size: 14px; font-weight: 600; color: var(--text); text-align: right; }
.apex-calc-row.is-primary .apex-calc-k { color: var(--text); font-weight: 600; }
.apex-calc-row.is-primary .apex-calc-v { font-family: var(--font-display); font-size: 20px; font-weight: 900; color: var(--accent); }

.apex-calc-aviso {
  font-size: 12px; color: var(--warning); line-height: 1.5;
  margin-top: 10px; padding: 10px 12px;
  background: rgba(243, 156, 18, 0.08); border: 1px solid rgba(243, 156, 18, 0.25);
  border-radius: var(--radius-md);
}

/* ⚠️ La sub-navegación (.apex-subnav) SE MUDÓ a apex-shell-nav.css el 2026-08-09.
   Por qué: /lab/ NO carga esta hoja (functions.php solo la encola para 'start',
   'flow'/'pro' y la portada), así que las fichas de "Mi operativa" salían sin un
   solo estilo — anchors sueltos que no parecían navegación. Un Pro entraba al Lab
   y solo veía Resumen, con las otras cinco secciones ahí pero irreconocibles.
   Lo reportó Sergio desde su iPhone. Es chrome de navegación: su casa es la hoja
   del shell, que cargan TODAS las pantallas de la app. */

/* Compatibilidad: las clases viejas siguen pintando igual mientras quede algún
   markup sin migrar. No se borran a ciegas. */
.apex-start-subnav { display: flex; gap: 8px; overflow-x: auto; margin-bottom: 16px; padding-bottom: 2px; }
.apex-start-subnav-item {
  flex: 0 0 auto; font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  letter-spacing: .04em; text-transform: uppercase; color: var(--gray);
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 7px 12px; white-space: nowrap;
}
.apex-start-subnav-item.active { color: var(--accent-t); background: var(--accent); border-color: var(--accent); }

/* Conceptos — acordeón nativo <details> */
.apex-concepts { display: flex; flex-direction: column; gap: 8px; }
.apex-concept {
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 12px 14px;
}
.apex-concept summary {
  font-family: var(--font-display); font-size: 14px; font-weight: 800; color: var(--text);
  cursor: pointer; list-style: none; display: flex; align-items: center; gap: 8px;
}
.apex-concept summary::-webkit-details-marker { display: none; }
.apex-concept summary::before { content: '+'; color: var(--accent); font-weight: 900; width: 14px; flex: 0 0 auto; }
.apex-concept[open] summary::before { content: '−'; }
.apex-concept p { font-size: 13px; color: var(--gray); line-height: 1.55; margin: 10px 0 0; }

/* ── Conceptos por MÓDULO (2026-08-10) ───────────────────────────────────────
   Antes eran 8 <details> sueltos, todos del mismo peso visual. Ahora hay dos
   niveles —módulo y lección— y la jerarquía tiene que verse, o el orden que se
   les dio al escribirlos no sirve de nada: el encabezado del módulo pesa (línea
   de acento a la izquierda, título en display), la lección sigue siendo la
   tarjeta liviana de siempre. */
.apex-con-mod { margin: 0 0 26px; }
.apex-con-mod-h {
  display: flex; align-items: flex-start; gap: 11px;
  padding: 0 0 12px 12px; margin: 0 0 10px;
  border-left: 3px solid var(--accent); border-bottom: 1px solid var(--border);
}
.apex-con-mod-ico { flex: 0 0 auto; color: var(--accent); margin-top: 1px; }
.apex-con-mod-txt { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.apex-con-mod-txt b {
  font-family: var(--font-display); font-size: 15px; font-weight: 800;
  letter-spacing: .01em; color: var(--text);
}
.apex-con-mod-txt span { font-size: 12.5px; line-height: 1.5; color: var(--gray); }
.apex-con-mod-n {
  flex: 0 0 auto; font-family: var(--font-mono); font-size: 11px; font-weight: 700;
  color: var(--gray2); background: var(--bg3); border: 1px solid var(--border);
  border-radius: 99px; padding: 2px 9px;
}
.apex-con-lec { margin: 0 0 8px; }
.apex-con-lec-body p { font-size: 13px; color: var(--gray); line-height: 1.6; margin: 10px 0 0; }

/* "Ojo:" — lo que no se puede pasar por alto. Se marca con color de alerta y no
   con negrita a secas: en un texto largo, la negrita se pierde entre párrafos. */
.apex-con-ojo {
  border-left: 2px solid var(--red, #ff5f6b);
  background: rgba(255, 95, 107, .07);
  padding: 9px 12px; border-radius: 0 6px 6px 0;
  font-size: 12.5px !important; line-height: 1.55; color: var(--text) !important;
}
.apex-con-ojo b { color: var(--red, #ff5f6b); }

/* Enlaces al glosario: lo que convierte Conceptos + Glosario en un solo cuerpo */
.apex-con-ver { font-size: 12px !important; color: var(--gray2) !important; margin-top: 12px !important; }
.apex-con-ver a { color: var(--accent); text-decoration: none; border-bottom: 1px solid transparent; }
.apex-con-ver a:hover { border-bottom-color: var(--accent); }

/* El ancla del glosario tiene que quedar debajo del topbar fijo al saltar
   desde una lección — si no, el término aterriza tapado. */
.apex-glo-item[id] { scroll-margin-top: 84px; }

/* Checklist pre-trade */
.apex-checklist { display: flex; flex-direction: column; gap: 8px; }
.apex-checklist-item {
  display: flex; align-items: flex-start; gap: 10px;
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 12px 14px; font-size: 13px; color: var(--text);
  line-height: 1.4;
}
.apex-checklist-item input[type="checkbox"] { width: 18px; height: 18px; flex: 0 0 auto; accent-color: var(--accent); margin-top: 1px; }

/* Glosario */
.apex-glosario-search {
  display: flex; align-items: center; gap: 8px;
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 10px 12px; margin-bottom: 14px;
}
.apex-glosario-search-ico { display: flex; color: var(--gray); }
.apex-glosario-search input {
  flex: 1; background: transparent; border: none; outline: none;
  font-size: 14px; color: var(--text); font-family: var(--font-body);
}
.apex-glosario-search input::placeholder { color: var(--gray2); }
.apex-glosario-list { display: flex; flex-direction: column; gap: 0; }
.apex-glosario-item { padding: 12px 0; border-bottom: 1px solid var(--border); }
.apex-glosario-item:last-child { border-bottom: none; }
.apex-glosario-item dt { font-family: var(--font-display); font-size: 14px; font-weight: 800; color: var(--accent); text-transform: uppercase; letter-spacing: .01em; }
.apex-glosario-item dd { font-size: 13px; color: var(--gray); line-height: 1.5; margin: 4px 0 0; }

/* Videos gratuitos */
.apex-videos-grid { display: grid; grid-template-columns: 1fr; gap: 14px; }
/* Columna para que el pie (duración + "Abrir esa pantalla") se pegue abajo:
   en escritorio la grilla estira las tarjetas a la altura de su fila y, sin
   esto, una descripción corta dejaba el pie flotando a media tarjeta.
   ⚠️ El [hidden] va DESPUÉS y explícito: `display:flex` de una clase le gana al
   `display:none` que el navegador le da a [hidden], y las tarjetas filtradas
   por el buscador seguirían viéndose. */
.apex-video-card { background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; display: flex; flex-direction: column; }
.apex-video-card[hidden] { display: none; }
/* ⚠️ 2026-09-02 · El marco era 16/9 y TODA la serie se graba VERTICAL 9:16
   (decisión de Sergio, videos-app-flow/ESPECIFICACIONES_VIDEO.md §0): un
   vertical en un marco apaisado sale con dos barras negras y el texto de la app
   —que es el contenido de estos videos— ilegible. El valor por defecto pasa a
   9/16 y el horizontal queda como excepción declarada en el repetidor ACF
   (campo Orientación), no como suposición del CSS.
   `max-height` para que en una laptop una tarjeta vertical no se coma la
   pantalla entera. */
.apex-video-frame {
  position: relative; width: 100%; aspect-ratio: 9/16; max-height: 70dvh;
  background: var(--bg-deeper); overflow: hidden;
  display: block; padding: 0; border: 0; cursor: pointer;
}
.apex-video-card[data-orientacion="horizontal"] .apex-video-frame { aspect-ratio: 16/9; max-height: none; }
.apex-video-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.apex-video-thumb { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* El play va sobre un velo para que se lea igual sobre una miniatura clara. */
.apex-video-play {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--font-display); font-size: 13px; font-weight: 800;
  letter-spacing: .06em; text-transform: uppercase;
  color: var(--accent-t); background: var(--accent);
  border-radius: 99px; padding: 10px 18px 10px 14px;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .45);
}
.apex-video-frame::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,.10), rgba(0,0,0,.42));
}
.apex-video-play { z-index: 1; }
.apex-video-play svg { flex: 0 0 auto; }
.apex-video-frame:hover .apex-video-play { filter: brightness(1.06); }
.apex-video-title { font-family: var(--font-display); font-size: 14px; font-weight: 800; color: var(--text); padding: 10px 14px 0; }
.apex-video-desc { font-size: 12px; color: var(--gray); line-height: 1.5; padding: 4px 14px 0; margin: 0; }
.apex-video-dur { font-family: var(--font-mono); font-size: 10px; color: var(--gray2); }

/* ── Buscador de videos (2026-09-02) ──────────────────────────────
   El campo reusa .apex-glo-buscar (apex-shell-nav.css) y los chips reusan
   .apex-cal-filtros / .apex-cal-chip de más abajo: es el mismo componente que
   ya conoce el alumno en Glosario y en Calendario, no un tercer buscador con
   otra cara. Acá solo va lo que esas dos piezas no cubren.

   ⚠️ .apex-cal-chip está escrito para <a>; acá son <button> porque no navegan.
   Se repiten a propósito las 4 propiedades que el user-agent del navegador
   pisaría en un <button> (fondo, borde, tipografía, alineación): la lección de
   "botón <button> reusado en <a>" — el color se pierde si no se dice. */
.apex-videos-buscador { margin-bottom: 14px; }
.apex-videos-chips { margin: 10px 0 0; }
button.apex-cal-chip {
  -webkit-appearance: none; appearance: none; cursor: pointer; text-align: center;
  font-family: var(--font-mono); font-weight: 600;
  background: var(--bg3); border: 1px solid var(--border); color: var(--gray);
}
button.apex-cal-chip.active { color: var(--accent-t); background: var(--accent); border-color: var(--accent); }
.apex-videos-cuenta {
  font-family: var(--font-mono); font-size: 11px; color: var(--gray2);
  margin: 10px 0 0; letter-spacing: .03em;
}
.apex-videos-cuenta span { color: var(--text); font-weight: 700; }
.apex-videos-sinres { margin-bottom: 12px; }

.apex-video-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 10px 14px 0; }
.apex-video-cod {
  font-family: var(--font-mono); font-size: 10px; font-weight: 700; letter-spacing: .06em;
  color: var(--accent-t); background: var(--accent); border-radius: var(--radius); padding: 2px 7px;
}
.apex-video-bloque {
  font-family: var(--font-mono); font-size: 10px; letter-spacing: .04em;
  color: var(--gray2); text-transform: uppercase;
}
.apex-video-pie {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 14px 12px; margin-top: auto;
}
.apex-video-abrir {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 600; letter-spacing: .03em;
  color: var(--accent); text-decoration: none; border-bottom: 1px solid transparent;
  margin-left: auto;
}
.apex-video-abrir:hover { border-bottom-color: var(--accent); }
/* Llegaste por #af-05: un destello para saber cuál de las 26 tarjetas es. */
.apex-video-card.is-destacada { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(200, 255, 0, .18); }

/* ── Reproductor a pantalla completa ──────────────────────────────────────
   "Al apretar Ver, el video debe ampliarse al celular" (Sergio, 2026-09-02).

   ⚠️ Esto NO depende de la API de fullscreen: el JS la intenta, pero iOS no la
   da sobre un <div> y ahí este bloque es lo único que hace el trabajo. Por eso
   el z-index está por ENCIMA de todo lo que hay en el shell — la nav inferior
   es 50, los paneles laterales 999 — y el alto usa 100dvh (no 100vh), que en el
   teléfono descuenta la barra del navegador en vez de meter el video debajo. */
.apex-video-full {
  position: fixed; inset: 0; width: 100%; height: 100dvh; z-index: 2000;
  background: #000; display: flex; align-items: center; justify-content: center;
}
.apex-video-full[hidden] { display: none; }
.apex-video-full-marco {
  position: relative; width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
}
/* El video, entero y sin recortar: el lado que sobra queda en negro, que es lo
   que hay detrás igual. */
.apex-video-full-marco iframe {
  width: min(100vw, calc(100dvh * 9 / 16)); height: min(100dvh, calc(100vw * 16 / 9));
  border: 0; display: block;
}
.apex-video-full[data-orientacion="horizontal"] .apex-video-full-marco iframe {
  width: min(100vw, calc(100dvh * 16 / 9)); height: min(100dvh, calc(100vw * 9 / 16));
}
/* ⚠️ `padding: 0` NO es de más. Kadence pone `button { padding: .4em 1em }` en
   global.min.css: sobre una caja de 44px con box-sizing:border-box eso deja 10px
   de contenido y la ✕ se aplasta a 6px de ancho. Medido en el navegador, no
   supuesto — es la misma trampa de "el botón reusado pierde sus estilos".
   Por eso también van `flex: 0 0 auto` en el icono y los colores explícitos. */
.apex-video-full-x {
  position: absolute; top: calc(env(safe-area-inset-top, 0px) + 12px); right: 12px; z-index: 2;
  width: 44px; height: 44px; padding: 0; border-radius: 50%; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  color: #fff; background: rgba(0, 0, 0, .55); border: 1px solid rgba(255, 255, 255, .28);
  -webkit-appearance: none; appearance: none;
}
.apex-video-full-x svg { flex: 0 0 auto; width: 20px; height: 20px; }
.apex-video-full-x:hover { background: rgba(0, 0, 0, .75); color: #fff; }
/* El fondo no se mueve mientras el video está abierto. */
html.apex-video-full-abierto, html.apex-video-full-abierto body { overflow: hidden; }

/* ── 3 · CALENDARIO ECONÓMICO ─────────────────────────────────── */
.apex-cal-list { display: flex; flex-direction: column; gap: 8px; }
/* 2026-08-31: la tarjeta pasó de .apex-cal-row a .apex-cal-item porque ahora
   la fila convive con un panel desplegable debajo. .apex-cal-row quedó siendo
   solo la línea horizontal; el fondo, el borde y la marca de impacto viven en
   el contenedor. */
.apex-cal-item {
  background: var(--bg3); border: 1px solid var(--border); border-left: 3px solid var(--gray2);
  border-radius: var(--radius-md); overflow: hidden;
}
.apex-cal-row { display: flex; align-items: center; gap: 12px; padding: 12px 14px; }
.apex-cal-item.apex-cal-impacto-alto { border-left-color: var(--red); }
.apex-cal-item.apex-cal-impacto-medio { border-left-color: var(--warning); }
.apex-cal-item.apex-cal-impacto-bajo { border-left-color: var(--gray2); }
.apex-cal-item.is-mio { border-color: var(--accent-bd); }

/* Contador "toca N activos tuyos". No es una alarma binaria: el número es el
   dato (ver la nota larga en apex-start.php). */
.apex-cal-mio {
  display: inline-flex; align-items: center; gap: 1px; margin-left: 6px;
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  color: var(--accent); background: var(--accent-bg); border: 1px solid var(--accent-bd);
  border-radius: var(--radius); padding: 1px 5px; vertical-align: middle;
}

/* Panel desplegable: qué es el dato, qué mirar y quién lo publica. */
.apex-cal-mas { border-top: 1px solid var(--border); }
.apex-cal-mas > summary {
  list-style: none; cursor: pointer; padding: 8px 14px;
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: var(--gray2);
  display: flex; align-items: center; gap: 6px;
}
.apex-cal-mas > summary::-webkit-details-marker { display: none; }
.apex-cal-mas > summary::after {
  content: ''; width: 6px; height: 6px; border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor; transform: rotate(45deg) translateY(-2px);
}
.apex-cal-mas[open] > summary::after { transform: rotate(-135deg) translateY(-2px); }
.apex-cal-mas > summary:hover { color: var(--text); }
.apex-cal-mas-cuerpo { padding: 2px 14px 14px; border-top: 1px solid var(--border); }
.apex-cal-mas-cuerpo p { font-size: 13px; color: var(--gray); line-height: 1.6; margin: 10px 0 0; }
.apex-cal-mas-cuerpo b { color: var(--text); font-weight: 700; }
.apex-cal-mas-sorpresa {
  background: var(--bg-deeper); border-left: 2px solid var(--accent-bd);
  border-radius: var(--radius); padding: 9px 11px;
}
.apex-cal-mas-tuyo b { color: var(--accent); }
.apex-cal-mas-fuente a { color: var(--accent); text-decoration: none; border-bottom: 1px solid var(--accent-bd); }
.apex-cal-mas-aviso { font-size: 11px !important; color: var(--gray2) !important; }
.apex-cal-fecha { display: flex; flex-direction: column; align-items: center; flex: 0 0 44px; }
.apex-cal-dia { font-family: var(--font-display); font-size: 16px; font-weight: 900; color: var(--text); }
.apex-cal-hora { font-family: var(--font-mono); font-size: 10px; color: var(--gray); }
.apex-cal-info { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.apex-cal-pais { font-family: var(--font-mono); font-size: 10px; color: var(--gray2); text-transform: uppercase; letter-spacing: .04em; }
.apex-cal-titulo { font-size: 14px; font-weight: 700; color: var(--text); }
.apex-cal-nota { font-size: 12px; color: var(--gray); }
.apex-cal-badge {
  flex: 0 0 auto; font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .06em; color: var(--gray);
  border: 1px solid var(--border2); border-radius: var(--radius); padding: 3px 8px;
}
/* 2026-07-26: estrella de alerta — solo en eventos futuros. Sin marcar es un
   contorno discreto (no compite con el badge de impacto); marcada se rellena
   con el color de acento, para que se note de un vistazo cuál está activa. */
.apex-cal-star {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; border-radius: 50%; background: none;
  border: 1px solid var(--border2); color: var(--gray2); cursor: pointer; padding: 0;
}
.apex-cal-star:hover { color: var(--text); border-color: var(--accent-bd); }
.apex-cal-star.is-on { color: var(--accent); border-color: var(--accent-bd); background: var(--accent-bg); }
.apex-cal-pro-nota { margin-top: 14px; }

/* ── Calendario económico automático (Forex Factory) ── */
.apex-cal-tabs { margin-bottom: 14px; }
.apex-cal-filtros { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.apex-cal-chip {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: .03em;
  color: var(--gray); background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 6px 12px; text-decoration: none; white-space: nowrap;
}
.apex-cal-chip.active { color: var(--accent-t); background: var(--accent); border-color: var(--accent); }
.apex-cal-dia-grupo { margin-bottom: 18px; }
.apex-cal-dia-head {
  font-family: var(--font-mono); font-size: 11px; font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; color: var(--gray2); margin: 0 0 8px; padding-bottom: 6px;
  border-bottom: 1px solid var(--border);
}
.apex-cal-cur { font-family: var(--font-mono); font-size: 10px; font-weight: 700; color: var(--accent); margin-top: 2px; }
.apex-cal-datos { font-family: var(--font-mono); font-size: 11px; color: var(--gray); line-height: 1.5; }
.apex-cal-datos b { color: var(--text); }
.apex-cal-fuente { font-size: 11px; color: var(--gray2); line-height: 1.5; margin: 6px 0 0; }
.apex-cal-cta-pro { margin-top: 16px; }
/* El calendario ACADÉMICO sigue usando .apex-cal-row como tarjeta suelta (no
   tiene panel desplegable), así que conserva acá el fondo y el borde que
   .apex-cal-row perdió al mudarse a .apex-cal-item. */
.apex-acad-row {
  background: var(--bg3); border: 1px solid var(--border); border-left: 3px solid var(--gray2);
  border-radius: var(--radius-md);
}
.apex-acad-row.is-locked { opacity: .82; }
.apex-acad-row.is-locked .apex-cal-badge { color: var(--accent); border-color: var(--accent-bd); }

/* ── Pantalla comparativa Gratis vs PRO (?seccion=pro) ── */
.apex-pro-hero { margin-bottom: 20px; }
.apex-pro-hero h2 { font-family: var(--font-display); font-size: 22px; font-weight: 900; line-height: 1.15; color: var(--text); margin: 10px 0 8px; }
.apex-pro-hero p { font-size: 13px; color: var(--gray); line-height: 1.6; margin: 0; }
.apex-pro-tabla { display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
.apex-pro-thead, .apex-pro-fila { display: grid; grid-template-columns: 1.1fr 1fr 1fr; }
.apex-pro-thead { background: var(--bg3); border-bottom: 1px solid var(--border); }
.apex-pro-th, .apex-pro-th-feat { padding: 10px 12px; font-family: var(--font-mono); font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.apex-pro-th-free { color: var(--gray); }
.apex-pro-th-pro { color: var(--accent); }
.apex-pro-fila { border-bottom: 1px solid var(--border); }
.apex-pro-fila:last-child { border-bottom: none; }
/* Cabecera de grupo (2026-08-16): .apex-pro-tabla es flex-column, no un grid
   compartido — cada .apex-pro-fila/.apex-pro-thead arma su propio grid de 3
   columnas por separado. Por eso la cabecera no necesita grid-column: es un
   hijo flex más, y al no tener columnas ya ocupa el ancho completo. Mismo
   vocabulario que el triángulo de la portada: nombre + subtítulo itálico. */
.apex-pro-grupo { display: flex; align-items: baseline; gap: 10px; padding: 14px 12px 8px; background: var(--bg2, var(--bg3)); border-top: 1px solid var(--border); }
.apex-pro-grupo:first-of-type { border-top: none; padding-top: 12px; }
.apex-pro-grupo-nombre { font-family: var(--font-display); font-size: 13px; font-weight: 900; letter-spacing: .04em; text-transform: uppercase; color: var(--accent); }
.apex-pro-grupo-sub { font-family: var(--font-mono); font-size: 11px; font-style: italic; color: var(--gray2); }
.apex-pro-feat { padding: 12px; font-size: 13px; font-weight: 700; color: var(--text); background: var(--bg3); display: flex; align-items: center; }
.apex-pro-cell { padding: 12px; font-size: 12px; color: var(--gray); line-height: 1.45; display: flex; align-items: center; }
.apex-pro-cell-pro { color: var(--text); background: var(--accent-bg); border-left: 2px solid var(--accent-bd); }
.apex-pro-cta { margin-top: 18px; }
/* 2026-07-26: mensaje para quien ya tiene Pro, en vez del CTA de compra. */
.apex-pro-ya-activo {
  margin-top: 18px; padding: 12px 16px; text-align: center;
  font-family: var(--font-mono); font-size: 12.5px; font-weight: 600;
  color: var(--accent); background: var(--accent-bg); border: 1px solid var(--accent-bd);
  border-radius: var(--radius);
}

/* ── Mis activos (watchlist) ── */
/* Frescura de los precios (2026-08-08). Discreta a propósito: es una etiqueta
   de confianza, no un titular. Solo cambia de color cuando el dato SÍ es de
   ahora — el estado neutro es el gris, porque "de referencia" es lo normal
   fuera del horario de mercado, no una falla. */
.apex-act-frescura { font-size: 11px; color: var(--gray2); margin: 0 0 14px; line-height: 1.5; font-variant-numeric: tabular-nums; }
.apex-act-frescura.is-vivo { color: var(--accent); }

.apex-act-subhead { display: flex; align-items: baseline; gap: 6px; font-family: var(--font-display); font-size: 15px; font-weight: 800; text-transform: uppercase; color: var(--text); margin: 0 0 10px; }
.apex-act-subhead span { font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--gray2); text-transform: none; }
.apex-act-mi-lista { margin-bottom: 22px; }
.apex-act-seleccionados { display: flex; flex-direction: column; gap: 8px; }
.apex-act-vacio { font-size: 13px; color: var(--gray2); background: var(--bg3); border: 1px dashed var(--border2); border-radius: var(--radius-md); padding: 14px; text-align: center; margin: 0; }
.apex-act-card {
  display: flex; align-items: center; gap: 10px;
  background: var(--bg3); border: 1px solid var(--accent-bd); border-left: 3px solid var(--accent);
  border-radius: var(--radius-md); padding: 10px 12px;
}
/* 2026-07-26: el ancho fijo de 64px alcanzaba para "BTC/USD" pero no para las
   etiquetas nuevas ("Nasdaq 100 (QQQ)") que ahora nombran el ETF proxy —
   partía el texto en varias líneas apretadas. Con flex:0 1 auto + min-width:0
   el símbolo toma lo que necesita y el precio se acomoda en el resto,
   alineado a la derecha, sin números pegados al nombre. */
.apex-act-card-sym { font-family: var(--font-display); font-size: 13px; font-weight: 800; color: var(--text); line-height: 1.25; flex: 0 1 auto; min-width: 0; }
.apex-act-card-precio { font-family: var(--font-mono); font-size: 13px; color: var(--text); flex: 1 1 auto; min-width: 0; text-align: right; }
.apex-act-card-cambio { font-family: var(--font-mono); font-size: 11px; font-weight: 700; }
.apex-act-dir-up { color: var(--apex-pos, #6ee7a0); }
.apex-act-dir-down { color: var(--apex-neg, #ff7a7a); }
.apex-act-card-alarma, .apex-act-card-quitar {
  display: flex; align-items: center; justify-content: center; flex: 0 0 auto;
  width: 26px; height: 26px; border-radius: 50%; background: none; border: 1px solid var(--border2);
  color: var(--gray2); cursor: pointer; padding: 0;
}
.apex-act-card-quitar { font-size: 16px; line-height: 1; }
.apex-act-card-alarma:hover, .apex-act-card-quitar:hover { color: var(--text); border-color: var(--accent-bd); }

.apex-act-grupo { margin-bottom: 18px; }
.apex-act-grupo-head { font-family: var(--font-mono); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--gray2); margin: 0 0 8px; padding-bottom: 6px; border-bottom: 1px solid var(--border); }
.apex-act-grupo-list { display: flex; flex-direction: column; gap: 6px; }
.apex-act-row {
  display: flex; align-items: center; gap: 10px;
  background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius-md);
  padding: 10px 12px; cursor: pointer;
}
.apex-act-check { width: 16px; height: 16px; accent-color: var(--accent); flex: 0 0 16px; }
/* Gratis (2026-08-08, §8.1): fila de solo lectura, sin checkbox — se ve igual
   que una fila Pro pero no reacciona al toque, así que el cursor no miente. */
.apex-act-row--fija { cursor: default; }

/* Aviso de migración (2026-08-08): un Pro que apagó su plan, o un gratis que
   ya había armado su lista antes de este cambio, no debe verla desaparecer
   sin explicación. Mismo lenguaje visual que las otras notas informativas de
   Start, no una alarma — es un aviso de producto, no un error. */
.apex-act-migracion {
  font-size: 12px; color: var(--gray); background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 10px 12px; margin: 0 0 14px; line-height: 1.5;
}
.apex-act-migracion a { color: var(--accent); font-weight: 700; }

/* A4 (2026-08-08) — catálogo del bróker del alumno + siembra. */
.apex-act-sembrada { font-size: 12px; color: var(--gray); margin: 0 0 10px; line-height: 1.5; }
/* El aviso de "tu bróker no está integrado" no es un error del alumno ni una
   falla: es una limitación nuestra, dicha en voz baja. Por eso comparte estilo
   con la nota de siembra y solo suma un borde que lo despega. */
.apex-act-sembrada--aviso { border-left: 2px solid var(--border); padding-left: 10px; }
.apex-act-grupo-nota { font-size: 11px; color: var(--gray2); margin: 0 0 8px; line-height: 1.5; }
/* Punto discreto en los que ya opera — pista, no medalla: si compitiera con el
   nombre del símbolo, la fila se leería peor justo donde importa el precio. */
.apex-act-opera { color: var(--accent); font-size: 14px; line-height: 1; vertical-align: middle; }

/* Secciones plegables del catálogo del bróker (pedido de Sergio 2026-08-08:
   "esconder los activos por sección"). <details> nativo: sin JS, accesible por
   teclado y recordado por el navegador al volver atrás. */
.apex-act-seccion { margin-bottom: 14px; }
.apex-act-seccion > summary {
  cursor: pointer; list-style: none; display: flex; align-items: center; gap: 8px;
  user-select: none;
}
/* El triángulo por defecto de Safari/Chrome se saca y se pone uno propio, para
   que la fila de la sección se lea igual que los encabezados de grupo legacy. */
.apex-act-seccion > summary::-webkit-details-marker { display: none; }
.apex-act-seccion > summary::before {
  content: '▸'; color: var(--gray2); font-size: 10px; flex: 0 0 auto;
  transition: transform .15s ease;
}
.apex-act-seccion[open] > summary::before { transform: rotate(90deg); }
.apex-act-seccion-n {
  margin-left: auto; font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  color: var(--gray2); background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1px 6px; text-transform: none; letter-spacing: 0;
}
/* El área tocable de la sección no baja de 44px en móvil (misma regla que la
   barra inferior): plegar y desplegar se hace con el pulgar. */
@media (max-width: 640px) { .apex-act-seccion > summary { min-height: 44px; } }

/* Interruptor de notificaciones (2026-08-08). Arranca en estado APAGADO y
   llamativo a propósito: hasta que no se toque, ninguna alarma suena, así que
   es una advertencia, no un ajuste opcional escondido. Al activarse baja el
   tono y se vuelve una confirmación tranquila. */
.apex-alm-push { margin: 12px 0 4px; }
.apex-alm-push-btn {
  display: flex; align-items: flex-start; gap: 10px; width: 100%; text-align: left;
  background: var(--bg3); border: 1px solid var(--accent-bd); border-radius: var(--radius-md);
  padding: 12px; cursor: pointer; color: var(--text); min-height: 44px;
}
.apex-alm-push-luz {
  flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; margin-top: 4px;
  background: var(--gray2); box-shadow: 0 0 0 3px var(--bg3);
}
.apex-alm-push-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.apex-alm-push-t { font-size: 13px; font-weight: 800; }
.apex-alm-push-d { font-size: 11px; color: var(--gray); line-height: 1.45; }
/* Encendido: el botón deja de pedir atención y confirma. */
.apex-alm-push-btn.on { border-color: var(--border); }
.apex-alm-push-btn.on .apex-alm-push-luz { background: var(--accent); }
.apex-alm-push-btn.on .apex-alm-push-t::after { content: ' · activadas'; font-weight: 600; color: var(--accent); }
.apex-alm-push-btn.on .apex-alm-push-d { visibility: hidden; }
.apex-alm-push-ios { font-size: 11px; color: var(--gray); line-height: 1.5; margin: 8px 0 0; }

/* ── Avisos por noticia (2026-08-23) ──────────────────────────────
   Va debajo del interruptor de notificaciones, no en otra pantalla: todo lo
   que hace sonar el teléfono se configura en un solo lugar. Se elige una vez.
   Deliberadamente MÁS callado que el interruptor de arriba — ese es una
   advertencia (sin él no suena nada), este es una preferencia. */
.apex-nnot { margin: 16px 0 4px; padding-top: 14px; border-top: 1px solid var(--border); }
.apex-nnot-t { font-size: 13px; font-weight: 800; color: var(--text); margin: 0 0 4px; }
.apex-nnot-pro {
  font-family: var(--font-mono); font-size: 9px; font-weight: 700; letter-spacing: .08em;
  color: var(--accent); background: var(--accent-bg); border: 1px solid var(--accent-bd);
  border-radius: var(--radius); padding: 1px 5px; vertical-align: middle;
}
.apex-nnot-d { font-size: 11px; color: var(--gray); line-height: 1.5; margin: 0 0 10px; }
.apex-nnot-ops { display: flex; flex-direction: column; gap: 6px; }
.apex-nnot-op {
  display: flex; flex-direction: column; gap: 2px; width: 100%; text-align: left;
  background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius-md);
  padding: 11px 12px; cursor: pointer; color: var(--text); min-height: 44px;
}
.apex-nnot-op-t { font-size: 13px; font-weight: 700; }
.apex-nnot-op-d { font-size: 11px; color: var(--gray); line-height: 1.45; }
.apex-nnot-op.is-on { border-color: var(--accent-bd); background: var(--accent-bg); }
.apex-nnot-op.is-on .apex-nnot-op-t { color: var(--accent); }
.apex-nnot-op.is-on .apex-nnot-op-t::after { content: ' ✓'; }
.apex-nnot-nota { font-size: 11px; color: var(--gray2); line-height: 1.5; margin: 10px 0 0; }
.apex-nnot-vitrina { margin: 0; padding-left: 18px; }
.apex-nnot-vitrina li { font-size: 11px; color: var(--gray); line-height: 1.55; margin-bottom: 4px; }
.apex-nnot-vitrina b { color: var(--text); }
/* Cuando el servidor rechaza una alarma por falta de notificaciones, el
   interruptor pulsa dos veces. Corto y sin color de error: es una guía hacia
   el siguiente paso, no un reto. */
@keyframes apexPushPide { 0%,100% { transform: none; } 25% { transform: scale(1.02); } 60% { transform: scale(1.005); } }
.apex-alm-push.pide-atencion .apex-alm-push-btn { animation: apexPushPide .9s ease 2; border-color: var(--accent); }
@media (prefers-reduced-motion: reduce) { .apex-alm-push.pide-atencion .apex-alm-push-btn { animation: none; } }
.apex-act-row-info { flex: 1; display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; }
.apex-act-row-sym { font-size: 13px; font-weight: 700; color: var(--text); }
.apex-act-row-precio { font-family: var(--font-mono); font-size: 12px; color: var(--gray); }
.apex-act-row-cambio { font-family: var(--font-mono); font-size: 11px; font-weight: 700; flex: 0 0 auto; }

.apex-act-pro-nota {
  display: flex; gap: 10px; align-items: flex-start; margin-top: 8px;
  background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 14px;
}
.apex-act-pro-nota-ico { color: var(--accent); flex: 0 0 18px; margin-top: 1px; }
.apex-act-pro-nota b { display: block; font-size: 13px; color: var(--text); margin-bottom: 3px; }
.apex-act-pro-nota p { margin: 0; font-size: 12px; color: var(--gray); line-height: 1.5; }
.apex-act-pro-cta { margin-top: 14px; }

/* ── G2 · Alarmas por precio (bloque "Mis alarmas", solo Pro) ── */
.apex-act-alarmas { margin: 22px 0; }
.apex-alm-form {
  display: flex; align-items: center; gap: 8px;
  background: var(--bg-deeper, #060f14); border: 1px solid var(--accent-bd);
  border-radius: 10px; padding: 9px 12px; margin-bottom: 12px;
}
.apex-alm-form-sym { font-family: var(--font-mono); font-size: 12px; font-weight: 700; color: var(--accent); flex-shrink: 0; }
.apex-alm-form input {
  flex: 1; min-width: 0; background: transparent; border: 1px solid var(--border2);
  border-radius: 6px; color: var(--text); font: inherit; font-size: 13px; padding: 8px 10px;
}
.apex-alm-form-ok {
  background: var(--accent); color: var(--accent-t); border: 0; border-radius: 999px;
  font-family: var(--font-mono); font-size: 10px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; padding: 9px 14px; cursor: pointer; flex-shrink: 0;
}
.apex-alm-form-x { background: none; border: 0; color: var(--gray); font-size: 18px; cursor: pointer; padding: 0 2px; }
.apex-alm-row {
  display: flex; align-items: center; gap: 10px;
  border: 1px solid var(--border2); border-radius: 10px; padding: 10px 12px; margin-bottom: 8px;
}
.apex-alm-row.is-fired { opacity: .75; border-style: dashed; }
.apex-alm-sym { font-family: var(--font-mono); font-size: 12px; font-weight: 700; color: var(--text); }
.apex-alm-badge {
  font-family: var(--font-mono); font-size: 10.5px; color: var(--gray);
  border: 1px solid var(--border2); border-radius: 999px; padding: 3px 9px;
}
.apex-alm-badge--fired { color: var(--accent); border-color: var(--accent-bd); }
.apex-alm-del { margin-left: auto; background: none; border: 0; color: var(--gray); font-size: 16px; cursor: pointer; }
.apex-alm-nota { font-size: 11px; color: var(--gray); line-height: 1.5; margin-top: 10px; }

/* Tarjetas VERTICALES: son angostas y altas, así que a partir de 620 px entran
   tres cómodas donde antes entraban dos apaisadas (2026-09-02). */
@media (min-width: 620px) {
  .apex-videos-grid { grid-template-columns: repeat(3, 1fr); }
}

/* ══════════════════════════════════════════════════════════════════════════
   PESTAÑA "YO" (2026-08-09)
   Hub de "lo mío": el plan, las cuentas, las reglas, las alertas y la app.
   Es una pantalla de FILAS, no de tarjetas: lo que se busca acá es un ajuste
   concreto, y una lista se escanea más rápido que una grilla.
   ══════════════════════════════════════════════════════════════════════════ */
.apex-yo { display: flex; flex-direction: column; gap: 8px; }

.apex-yo-sub {
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  letter-spacing: .14em; text-transform: uppercase; color: var(--gray2);
  margin: 16px 0 2px;
}

/* ── Ficha del plan ───────────────────────────────────────────────────────
   Reemplaza a la pestaña "PRO" de la barra y a los dos bloques de venta que
   ocupaban la vieja pantalla "Inicio". Uno solo, y en el lugar donde uno va a
   mirar qué tiene contratado. */
.apex-yo-plan {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 18px 16px;
  display: flex; flex-direction: column; align-items: flex-start; gap: 8px;
}
.apex-yo-plan.is-pro { border-color: var(--accent); }
.apex-yo-plan-tag {
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  letter-spacing: .14em; text-transform: uppercase; color: var(--gray2);
}
.apex-yo-plan-t {
  font-family: var(--font-display); font-size: 22px; font-weight: 900;
  text-transform: uppercase; letter-spacing: -.01em; color: var(--text); margin: 0;
}
.apex-yo-plan.is-pro .apex-yo-plan-t { color: var(--accent); }
.apex-yo-plan-p { font-size: 14px; line-height: 1.55; color: var(--gray); margin: 0; }
.apex-yo-plan-nota {
  font-size: 13px; line-height: 1.5; color: var(--gray2); margin: 4px 0 0;
}
.apex-yo-plan-link {
  display: inline-flex; align-items: center; min-height: 40px;
  font-family: var(--font-mono); font-size: 12px; font-weight: 700;
  letter-spacing: .04em; color: var(--accent); text-decoration: none;
}
.apex-yo-plan-link:hover { text-decoration: underline; }
.apex-yo-plan-link--sec { color: var(--gray); }
.apex-yo-plan-trial { font-size: 12px; color: var(--gray2); }

/* ── Filas ────────────────────────────────────────────────────────────────
   Bloqueada = <div>, no <a>: no hay adónde ir. Mismo criterio que la vitrina
   del Lab — un link que te rebota se siente roto, el candado ya dice todo. */
.apex-yo-filas { display: flex; flex-direction: column; gap: 8px; }
.apex-yo-filas--fin { margin-top: 16px; }
.apex-yo-fila {
  display: flex; align-items: flex-start; gap: 12px;
  min-height: 56px; padding: 14px 14px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius-md); text-decoration: none;
  transition: border-color .15s;
}
a.apex-yo-fila:hover { border-color: var(--border2); }
/* Bloqueada: atenuada, pero LEGIBLE. A .55 la descripción quedaba tan tenue que
   no se podía leer en el teléfono — y el punto de mostrar estas filas al plan
   gratis es justamente que lea qué se está perdiendo. Atenuar de más equivale a
   esconder, que es lo contrario de lo que pidió Sergio. */
.apex-yo-fila.is-lock { opacity: .72; }
.apex-yo-fila.is-lock .apex-yo-fila-d { color: var(--gray); }
.apex-yo-fila-ico { flex: 0 0 auto; color: var(--gray2); padding-top: 1px; }
a.apex-yo-fila:hover .apex-yo-fila-ico { color: var(--accent); }
.apex-yo-fila-txt { flex: 1 1 auto; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.apex-yo-fila-t { font-size: 14px; font-weight: 700; color: var(--text); }
.apex-yo-fila-d { font-size: 12.5px; line-height: 1.45; color: var(--gray2); }
.apex-yo-fila-fin { flex: 0 0 auto; color: var(--gray2); padding-top: 3px; }

/* El interruptor de notificaciones aparece también acá (mismo markup que en
   Precios, ver apex_push_interruptor_html). Le damos aire propio: en Precios
   viene después de la lista de alarmas, acá abre su bloque. */
.apex-yo .apex-alm-push { margin-top: 0; }

/* ⭐ Marca "toca tus activos" en la lista de noticias (2026-08-31, idea de Sergio).
   Va al lado de la etiqueta del tema, no reemplazándola: el tema dice de QUÉ es la
   noticia y esta dice POR QUÉ te importa a vos. Son dos datos distintos.
   Discreta a propósito — es una señal, no un titular: si compitiera con el título
   convertiría la lista en una pared de insignias. */
.apex-news-cab { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.apex-news-mio {
  /* `margin-left:auto` la empuja al borde derecho de la cabecera — el tema queda
     a la izquierda y la estrella al otro extremo, que es donde el ojo la busca
     sin que compita con el titular. */
  flex: 0 0 auto; margin-left: auto;
  font-size: 14px; line-height: 1; cursor: default;
  color: var(--accent, #C8FF00);
}
.apex-news-fecha-exacta { opacity: .72; }

/* ── Glosario: candado de las métricas Pro (2026-08-31) ─────────────────
   Los nombres quedan a la vista (vitrina + anclas de Conceptos); la
   explicación viaja solo para Pro. Ver la nota en apex-start.php. */
.apex-glo-candado {
  margin-left: auto; font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  letter-spacing: .08em; color: var(--accent); background: var(--accent-bg);
  border: 1px solid var(--accent-bd); border-radius: var(--radius); padding: 2px 7px;
}
.apex-glo-grupo.is-locked .apex-glo-t { color: var(--gray); }
.apex-glo-bloq {
  display: inline-flex; align-items: center; gap: 5px; margin: 0;
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  letter-spacing: .04em; text-transform: uppercase; color: var(--gray2);
}
.apex-glo-pro-nota { margin: 0 0 16px; }
.apex-glo-pro-nota .apex-start-cta { display: inline-flex; margin-top: 10px; }

/* Contexto · nota de cobertura del panel "Los míos" (2026-08-31). */
.apex-ctx-mios-nota {
  font-size: 12px; color: var(--gray); line-height: 1.6;
  margin: 10px 0 0; padding: 10px 12px 0; border-top: 1px solid var(--border);
}
.apex-ctx-mios-nota strong { color: var(--text); }
.apex-ctx-mios-nota a { color: var(--accent); text-decoration: none; border-bottom: 1px solid var(--accent-bd); }

/* Contexto · pedir un activo que todavía no medimos (2026-08-31). */
.apex-ctx-pedir { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 0; padding: 0 12px; }
.apex-ctx-pedir-chip {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  color: var(--accent); background: var(--accent-bg); border: 1px solid var(--accent-bd);
  border-radius: var(--radius); padding: 5px 10px; cursor: pointer;
}
.apex-ctx-pedir-chip:disabled { cursor: default; }
.apex-ctx-pedir-chip.is-encola { color: var(--gray); background: var(--bg3); border-color: var(--border); cursor: default; }
.apex-ctx-pedir-chip.is-no { color: var(--gray2); background: transparent; border-color: var(--border); cursor: default; }
.apex-ctx-pedir-aviso { font-size: 12px; color: var(--gray); line-height: 1.6; margin: 10px 0 0; padding: 0 12px; }

/* Calendario · etiqueta "nuevo" en eventos de alto impacto recién aparecidos
   (2026-08-31, L6 punto 3). Dura 48h desde que el evento entró al feed. */
.apex-cal-badge-nuevo {
  flex: 0 0 auto; font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .06em; color: var(--accent-t);
  background: var(--accent); border-radius: var(--radius); padding: 3px 8px;
}
