/* ============================================================
   LA BRÚJULA DE LUMBRE — capa transversal de orientación
   Mobile-first: en teléfono el panel es un bottom sheet; en escritorio,
   un drawer lateral que NUNCA ocupa espacio permanente (§11).
   Tokens del design system (app.css): nada de colores sueltos (§42).
   ============================================================ */

/* ── Botones de cabecera (§12): atrás, brújula, pin, guardar ─────────────── */
.compass-btn.is-on,
.compass-btn.is-saved { color: var(--accent); }
.compass-btn.is-on svg { fill: var(--accent-soft); }
.compass-btn { transition: transform .15s ease, color .15s ease; }
.compass-btn:active { transform: scale(.88); }
@media (prefers-reduced-motion: reduce) { .compass-btn { transition: none; } }

/* ── Panel: bottom sheet en móvil / drawer en escritorio ─────────────────── */
/* El atributo hidden debe ganar: sin esto display:flex reactivaba el panel cerrado y
   sus ítems (título nowrap) desbordaban el documento en ~360px. */
.compass-scrim[hidden], .compass-panel[hidden] { display: none; }
.compass-scrim { position: fixed; inset: 0; background: #17203366; z-index: 60; backdrop-filter: blur(2px); }
.compass-panel {
    position: fixed; z-index: 61; right: 0; bottom: 0; left: 0;
    max-height: 78svh; display: flex; flex-direction: column;
    background: var(--surface); border-radius: var(--radius-lg) var(--radius-lg) 0 0;
    border-top: 1px solid var(--line); box-shadow: var(--shadow-md);
    animation: compass-rise .22s ease;
}
@keyframes compass-rise { from { transform: translateY(24px); opacity: .4; } to { transform: none; opacity: 1; } }
@media (min-width: 760px) {
    .compass-panel {
        top: 0; bottom: 0; left: auto; width: min(380px, 92vw);
        max-height: none; border-radius: 0; border-top: 0; border-left: 1px solid var(--line);
        animation: compass-slide .22s ease;
    }
    @keyframes compass-slide { from { transform: translateX(32px); opacity: .4; } to { transform: none; opacity: 1; } }
}
@media (prefers-reduced-motion: reduce) { .compass-panel { animation: none; } }
body.compass-lock { overflow: hidden; }
.compass-head { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--line); }
.compass-head h2 { flex: 1; margin: 0; font-size: 16px; }
.compass-head-ico { display: inline-flex; color: var(--accent); }
.compass-body { overflow-y: auto; padding: 6px 14px 14px; -webkit-overflow-scrolling: touch; }
.compass-foot { display: flex; justify-content: space-between; gap: 10px; padding: 10px 14px calc(10px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line); }
.compass-foot .text-link { color: var(--muted); }
.compass-loading { padding: 18px 0; }

.compass-sect { margin: 14px 0 0; }
/* Fila de acciones de la ficha (§45): pin/guardar dentro del panel — antes iban saturando el header. */
.compass-actions { display: flex; gap: 8px; margin: 12px 0 2px; }
.compass-action { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 38px; padding: 8px 12px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--surface); color: inherit; font: 500 12.5px/1 var(--font-ui); cursor: pointer; transition: transform .15s ease, border-color .15s ease, color .15s ease; }
.compass-action:hover { border-color: var(--accent); }
.compass-action:active { transform: scale(.97); }
.compass-action.is-on, .compass-action.is-saved { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
.ca-ico { display: inline-flex; }
.compass-sect h3 { margin: 0 0 8px; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.compass-item { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: var(--radius-sm); color: inherit; min-height: 44px; min-width: 0; }
.compass-item:hover { background: var(--accent-soft); color: var(--ink); }
.compass-list { list-style: none; margin: 0; padding: 0; }
.ci-title { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; }
.ci-thumb { width: 28px; height: 36px; object-fit: cover; border-radius: 4px; flex-shrink: 0; }
.compass-dead { opacity: .6; display: flex; gap: 8px; align-items: center; }
.compass-dead small { color: var(--muted); font-size: 12px; white-space: normal; }
.ci-remove { border: 0; background: none; color: var(--muted); font-size: 14px; margin-left: auto; min-width: 44px; min-height: 44px; }
.ci-remove:hover { color: var(--danger); }

.compass-resume { border: 1px solid var(--line); border-left: 3px solid var(--accent); background: var(--surface); font-weight: 600; }
.compass-resume .ci-play { color: var(--accent); }
.compass-resume small { margin-left: auto; color: var(--accent); font-weight: 600; font-size: 12px; }
.compass-route { border: 1px dashed var(--line); }

/* «Mi ruta» administrable (§10/090): varios frentes en lista, cada ✕ quita solo esa fila. */
.compass-route-row { display: flex; align-items: center; gap: 2px; }
.compass-route-row .compass-route { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cr-count { display: inline-grid; place-items: center; min-width: 20px; height: 20px; padding: 0 6px; margin-left: 6px; border-radius: 999px; background: var(--accent); color: #fff; font-size: 11px; font-weight: 700; vertical-align: 2px; }
.cr-forget { border: 0; background: none; color: var(--muted); font-size: 14px; min-width: 44px; min-height: 44px; flex-shrink: 0; }
.cr-forget:hover { color: var(--danger); }
.compass-setroute { display: block; width: 100%; margin-top: 6px; padding: 8px 10px; border: 1px dashed var(--line); border-radius: var(--radius-sm); background: none; color: var(--muted); font: inherit; font-size: 13px; text-align: left; min-height: 44px; cursor: pointer; }
.compass-setroute:hover { border-color: var(--accent); color: var(--accent); }

/* Pines como chips ligeros (parecen pestañas, no lo son — §62). Icono SVG por JS (§43). */
.compass-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.compass-pinchip { width: auto; padding: 8px 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg); font-size: 13px; max-width: 100%; }
.compass-pinchip .ci-title { overflow: hidden; text-overflow: ellipsis; }
.compass-pinchip:hover { border-color: var(--accent); }
.cp-ico { display: inline-flex; color: var(--warm); flex-shrink: 0; }

.compass-empty { padding: 20px 6px; color: var(--ink); font-size: 14px; line-height: 1.6; }

/* ── Chip flotante «Estás estudiando» (§10): discreto, sobre la barra móvil ── */
.compass-route-chip {
    /* Esquina inferior derecha, pero desplazado a la IZQUIERDA (right:66px) para no tapar
       el boton flotante «subir» (.to-top: right:14px, 44px de diametro => ocupa hasta 58px).
       En móvil se eleva por encima de la .bottom-nav (64px + safe-area + 5px de margen): con
       bottom:76px el chip rozaba la barra y tapaba texto del contenido (medido 2026-10-02). */
    position: fixed; right: 66px; bottom: calc(94px + env(safe-area-inset-bottom)); z-index: 55;
    display: flex; align-items: center; gap: 8px; max-width: min(320px, calc(100vw - 78px));
    padding: 8px 12px; border: 1px solid var(--line); border-radius: 999px;
    background: var(--surface); box-shadow: var(--shadow-md); color: var(--ink);
    font: inherit; text-align: left; animation: compass-rise .22s ease;
}
.compass-route-chip .crc-ico { flex-shrink: 0; }
.compass-route-chip .crc-label { min-width: 0; font-size: 11px; line-height: 1.25; color: var(--muted); }
.compass-route-chip .crc-label strong { display: block; font-size: 12.5px; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.compass-route-chip .crc-label small { color: var(--accent); font-weight: 700; }
.compass-route-chip .crc-cta { flex-shrink: 0; font-size: 12px; font-weight: 700; color: var(--accent); }
.compass-route-chip:hover { border-color: var(--accent); }
@media (min-width: 760px) { .compass-route-chip { bottom: 24px; } }
/* El chip es position:fixed abajo-derecha y, en el registro, la .form-card (columna derecha)
   lo tiene justo encima del pie («Con tu nombre…», «¿Ya tienes un lugar aquí?»). Se reserva una
   banda inferior SOLO en las páginas de acceso (body.page-auth) para que el último texto quede
   siempre por encima del chip. La reserva (150px + safe-area) cubre la banda del chip en móvil
   (bottom:76px+safe + ~44px de alto) y en escritorio (bottom:24px + ~44px). */
body.page-auth .auth-layout { padding-bottom: calc(150px + env(safe-area-inset-bottom)); }

/* ── Command palette Ctrl+K (§14/§34) ────────────────────────────────────── */
.palette-overlay { position: fixed; inset: 0; z-index: 70; background: #17203380; display: flex; align-items: flex-start; justify-content: center; padding: 12vh 16px 16px; }
.palette-box { width: min(560px, 100%); background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-md); overflow: hidden; }
.palette-box input { width: 100%; border: 0; outline: 0; padding: 14px 16px; font-size: 15px; background: transparent; color: var(--ink); border-bottom: 1px solid var(--line); }
.palette-results { max-height: 52vh; overflow-y: auto; padding: 6px; }
.palette-group { padding: 10px 10px 4px; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.palette-row { display: block; padding: 10px; border-radius: var(--radius-sm); font-size: 14px; color: var(--ink); }
.palette-row:hover, .palette-row.is-active { background: var(--accent-soft); color: var(--ink); }
.palette-empty { padding: 14px 10px; color: var(--muted); font-size: 14px; }

/* ── Barra «Llegaste desde / Volver al origen» (§6/§57) ──────────────────── */
.compass-origin-bar { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: 13px; }
.compass-origin-bar a { color: var(--accent); font-weight: 600; }
.compass-origin-bar .cob-muted { color: var(--muted); }

/* ── Reloj de recientes en la cabecera (estilo SugarCRM) ─────────────────────
   El historial ya existía dentro del panel de la Brújula, pero al brincar de un OA a otro
   el alumno no lo veía; este desplegable lo pone a un clic, con «estás aquí» y hora relativa. */
.compass-recent-wrap { position: relative; display: inline-flex; }
.compass-recents-menu {
    /* Absolute respecto al botón: en móvil el header mide ~3 filas y un fixed con top fijo tapaba
       el propio reloj (no se podía cerrar) — verificado en QA 2026-09-30. z-index 96: por encima
       del #lo-sticky-bar de los OA (fixed, z-index 95). */
    position: absolute; top: calc(100% + 8px); right: 0; z-index: 96;
    width: min(340px, calc(100vw - 24px));
    background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-md);
    box-shadow: var(--shadow-md); padding: 6px; animation: compass-slide .16s ease;
}
.compass-recents-menu .crm-head { margin: 4px 8px 6px; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.compass-recents-menu ul { list-style: none; margin: 0; padding: 0; max-height: 52vh; overflow-y: auto; }
.compass-recents-menu li { margin: 0; }
.compass-recents-menu ul a { display: flex; align-items: baseline; gap: 8px; padding: 9px 10px; min-height: 44px; border-radius: var(--radius-sm); color: var(--ink); font-size: 14px; }
.compass-recents-menu ul a:hover { background: var(--accent-soft); color: var(--ink); }
.compass-recents-menu ul a.is-cur { background: var(--accent-soft); font-weight: 700; }
.compass-recents-menu .crm-title { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.compass-recents-menu .crm-when { flex-shrink: 0; color: var(--muted); font-size: 11px; }
.compass-recents-menu .crm-dead { padding: 9px 10px; color: var(--muted); font-size: 13px; }
.compass-recents-menu .crm-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; border-top: 1px solid var(--line); margin-top: 6px; padding: 6px 4px 2px; }
.compass-recents-menu .crm-more { color: var(--muted); font-size: 12px; }
.compass-recents-menu .crm-all { background: none; border: 0; color: var(--accent); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; padding: 6px 8px; min-height: 44px; }
.compass-recents-menu .crm-empty { padding: 12px 10px; color: var(--muted); font-size: 14px; margin: 0; }
@media (prefers-reduced-motion: reduce) { .compass-recents-menu { animation: none; } }
@media (max-width: 640px) {
    /* En móvil el reloj cae hacia la izquierda del header y el panel de 340px desbordaba la
       pantalla por la izquierda (QA 2026-09-30). Sol: hoja inferior fija — el header queda
       libre para el toggle y el menú lleno el ancho cómodo para el pulgar. */
    .compass-recents-menu {
        position: fixed; top: auto; bottom: 0; left: 0; right: 0; width: auto;
        max-height: 60svh; overflow-y: auto; border-radius: var(--radius-lg) var(--radius-lg) 0 0;
        border-left: 0; border-right: 0; border-bottom: 0; padding-bottom: calc(6px + env(safe-area-inset-bottom));
    }
}

/* ── Página «Mis cosas» (/guardados) y sección de Inicio ─────────────────── */
.compass-my-wrap { padding: 26px 0 60px; }
.compass-my-wrap h1 { display: flex; align-items: center; gap: 10px; font-size: clamp(24px, 4vw, 34px); margin: 0 0 6px; }
.compass-my-wrap .compass-my-lead { color: var(--muted); margin: 0 0 22px; }
.compass-my-grid { display: grid; gap: 22px; }
@media (min-width: 900px) { .compass-my-grid { grid-template-columns: 1.2fr 1fr; } }
.compass-my-card { border: 1px solid var(--line); border-radius: var(--radius-md); background: var(--surface); padding: 16px; }
.compass-my-card h2 { margin: 0 0 12px; font-size: 14px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.compass-my-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.compass-my-list .compass-item { border-radius: var(--radius-sm); }
.compass-badge { display: inline-block; margin-left: 8px; padding: 1px 7px; border-radius: 999px; background: var(--warn-soft); color: var(--warn); font-size: 10px; font-weight: 700; }

/* Continuar en Inicio: el bloque inyectado por compass.js ya NO existe (portada 2026-10-03):
   la portada pinta un único «Continúa aprendiendo» desde el servidor y el historial vive en el
   panel de La Brújula y en /guardados. Y en la portada el chip flotante «Estás estudiando» tampoco
   compite: .page-home lo apaga porque esa continuidad ya está en la lista de abajo. */
body.page-home .compass-route-chip { display: none !important; }

/* Marcas ★/📌 en sugerencias del buscador (§66). */
.cp-saved-mark, .cp-pin-mark { display: inline-flex; vertical-align: middle; margin-left: 6px; color: var(--warm); }
.cp-saved-mark svg, .cp-pin-mark svg { width: 12px; height: 12px; }
