/*
 * curriculum.css — Sistema de Alineación Curricular de Lumbre.
 * consume los tokens canónicos de app.css (--bg, --surface, --ink, --muted, --accent,
 * --ok/warn/danger + soft, --radius-*, --space-*, --shadow-*, --lumbre-*).
 * Mobile-first. Respeta prefers-reduced-motion. Los colores de ESTADO usan HEX literal
 * para poder llevar sufijo alfa (patrón hex+alpha); no se redefinen tokens de marca.
 */

/* ===== paleta de estados de cobertura (semántica compartida por board/browser/req/OA) ===== */
.curriculum-index, .curriculum-browser, .curriculum-req, .curriculum-board, .curriculum-audit, .curriculum-empty,
.lo-curriculum {
    --cov-unmapped: #8A93A3;    /* gris: nadie lo toca todavía */
    --cov-unmapped-bg: #ECEFF3;
    --cov-mapped: #2F6FB0;      /* azul: señalado pero sin cubierta plena */
    --cov-partial: #8A5D00;     /* ámbar miel (warn): teaching sin práctica/evaluación */
    --cov-partial-bg: #FBF0D3;
    --cov-covered: #0E7259;     /* verde: enseña + practica + evalúa */
    --cov-covered-bg: #E6F2EE;
    --cov-overcovered: #7557E8; /* violeta: exceso, ruido no calidad */
    --cov-needs_review: #B93E3E;/* rojo: contradicción / versión obsoleta */
    --cov-needs_review-bg: #F9E5E3;
    --cov-deprecated: #9AA1AC;
}

/* Tema oscuro: la paleta de estados de arriba está pensada sobre papel claro; sobre el fondo
   noche se reemplazan por versiones luminosas (mismos roles semánticos) para que chips, bordes
   y textos de cobertura se lean sin forzar el ojo. */
:root[data-theme~="dark"] .curriculum-index, :root[data-theme~="dark"] .curriculum-browser, :root[data-theme~="dark"] .curriculum-req,
:root[data-theme~="dark"] .curriculum-board, :root[data-theme~="dark"] .curriculum-audit, :root[data-theme~="dark"] .curriculum-empty,
:root[data-theme~="dark"] .lo-curriculum {
    --cov-unmapped: #A8B0C0;
    --cov-unmapped-bg: #232B38;
    --cov-mapped: #7FB3E8;
    --cov-partial: #F2B84B;
    --cov-partial-bg: #2C2411;
    --cov-covered: #4CC79A;
    --cov-covered-bg: #14291F;
    --cov-overcovered: #B79AFF;
    --cov-needs_review: #F0968D;
    --cov-needs_review-bg: #331714;
    --cov-deprecated: #8A93A3;
}

/* ---- chips / badges de estado ---- */
.cov-unmapped, .dim-unmapped .dim-state { color: var(--cov-unmapped); }
.cov-mapped { color: var(--cov-mapped); }
.cov-partial { color: var(--cov-partial); }
.cov-covered { color: var(--cov-covered); }
.cov-overcovered { color: var(--cov-overcovered); }
.cov-needs_review { color: var(--cov-needs_review); }
.cov-deprecated { color: var(--cov-deprecated); }

.badge { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: .72rem; font-weight: 600; line-height: 1.6; border: 1px solid var(--line, #EBE3D7); background: var(--surface, #fff); color: var(--ink, #1B2438); white-space: nowrap; }
/* El tinte del chip se mezcla con la SUPERFICIE del tema (no con #fff fijo: en oscuro eso pintaba
   pastillas casi blancas con texto crema, ilegibles). */
.badge[class*="cov-"] { border-color: currentColor; background: color-mix(in srgb, currentColor 14%, var(--surface, #fff)); }
.badge[class*="rel-"] { border-color: var(--line, #EBE3D7); background: var(--accent-soft, #FDEBDF); color: var(--accent, #BF4018); }
.badge.rel-introduces, .badge.relation-introduces { background: #EEF3FB; color: #2F6FB0; }
:root[data-theme~="dark"] .badge.rel-introduces, :root[data-theme~="dark"] .badge.relation-introduces { background: #16283C; color: #7FB3E8; }
.badge[class*="vs-human_verified"] { border-color: var(--cov-covered); color: var(--cov-covered); }
.badge[class*="vs-verified"] { border-color: var(--cov-mapped); color: var(--cov-mapped); }
.badge[class*="vs-agent_proposed"] { border-color: var(--cov-partial); color: var(--cov-partial); }
.badge[class*="vs-rejected"] { border-color: var(--cov-needs_review); color: var(--cov-needs_review); }

.cr-cov { padding: 1px 8px; border-radius: 999px; font-weight: 700; font-size: .74rem; border: 1px solid currentColor; }

/* ===== filtros / chips de navegación ===== */
.curriculum-filters { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0 22px; }
.chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; border: 1px solid var(--line, #EBE3D7); background: var(--surface, #fff); color: var(--ink, #1B2438); text-decoration: none; font-size: .85rem; }
.chip:hover { border-color: var(--accent, #BF4018); }
.chip.is-active { background: var(--accent, #BF4018); border-color: var(--accent, #BF4018); color: #fff; }
.chip-quiet { border-style: dashed; color: var(--muted, #5C6577); }
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--cov-covered); display: inline-block; }

/* ===== índice de frameworks ===== */
.curriculum-frameworks { list-style: none; padding: 0; margin: 0; display: grid; gap: 14px; grid-template-columns: 1fr; }
.framework-card { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-lg, 16px); background: var(--surface, #fff); padding: 18px; box-shadow: var(--shadow-sm); }
.framework-card h2 { margin: 6px 0 4px; font-size: 1.2rem; }
.framework-card h2 a { color: var(--ink, #1B2438); text-decoration: none; }
.framework-card h2 a:hover { color: var(--accent, #BF4018); }
.framework-quiet { opacity: .72; }
.fw-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.fw-authority { font-weight: 800; letter-spacing: .04em; font-size: .78rem; color: var(--accent, #BF4018); text-transform: uppercase; }
.fw-level { font-size: .74rem; padding: 1px 8px; border-radius: 999px; background: var(--accent-soft, #FDEBDF); color: var(--accent, #BF4018); }
.fw-badge { font-size: .7rem; padding: 1px 8px; border-radius: 999px; background: var(--warn-soft, #FBF0D3); color: var(--warn, #8A5D00); }
.fw-desc { color: var(--muted, #5C6577); margin: 8px 0; }
.fw-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }

/* ===== portal /auditoria: medidor de avance global (un vistazo por ficha) =====
   Solo bajo .aud-portal: el navegador de /curriculum reusa .framework-card y no debe cambiar. */
.aud-portal .framework-card { display: flex; gap: 16px; align-items: flex-start; }
.aud-portal .fw-main { flex: 1; min-width: 0; }
.aud-portal .fw-gauge { flex: 0 0 auto; position: relative; width: 88px; height: 88px; margin-top: 4px;
    border-radius: 50%; background: conic-gradient(var(--gcol, var(--cov-covered, #2E7D32)) calc(var(--p, 0) * 1%), var(--line, #EBE3D7) 0); }
.aud-portal .fw-gauge::after { content: ''; position: absolute; inset: 9px; border-radius: 50%; background: var(--surface, #fff); }
.aud-portal .fw-gauge-in { position: absolute; inset: 0; z-index: 1; display: flex; flex-direction: column;
    align-items: center; justify-content: center; gap: 1px; }
.aud-portal .fw-gauge-n { font-weight: 800; font-size: 1.45rem; line-height: 1; color: var(--ink, #1B2438); }
.aud-portal .fw-gauge-n small { font-size: .8rem; font-weight: 700; vertical-align: super; }
.aud-portal .fw-gauge-in em { font-style: normal; font-size: .6rem; font-weight: 600; letter-spacing: .07em;
    text-transform: uppercase; color: var(--muted, #5C6577); }
@media (max-width: 480px) {
    .aud-portal .fw-gauge { width: 72px; height: 72px; }
    .aud-portal .fw-gauge-n { font-size: 1.2rem; }
}

/* ===== portal /auditoria: matriz de convergencia entre planes (AuditSheet::overlap) =====
   Celda = Jaccard OA compartidos; el verde del relleno crece con la similitud (--j 0..1). */
.aud-portal .ov-block { margin-top: 40px; }
.aud-portal .ov-h2 { font-size: 1.25rem; margin: 0 0 6px; }
.aud-portal .ov-h3 { font-size: 1rem; margin: 22px 0 8px; }
.aud-portal .ov-wrap { overflow-x: auto; margin-top: 14px; }
.aud-portal .ov-table { border-collapse: separate; border-spacing: 3px; }
.aud-portal .ov-table th { font-size: .74rem; font-weight: 700; color: var(--muted, #5C6577); padding: 2px 8px; text-align: left; white-space: nowrap; }
.aud-portal .ov-table thead th { text-align: center; }
.aud-portal .ov-table td { text-align: center; font-size: .78rem; font-weight: 700; padding: 9px 10px; min-width: 46px;
    border-radius: 8px; border: 1px solid var(--line, #EBE3D7);
    background: color-mix(in srgb, var(--cov-covered, #2E7D32) calc(var(--j, 0) * 82%), var(--surface, #fff)); }
.aud-portal .ov-table td.ov-diag { background: transparent; border: none; color: var(--line, #EBE3D7); font-weight: 400; }
.aud-portal .ov-table td.ov-none { background: transparent; border: none; color: var(--muted, #5C6577); opacity: .5; }
.aud-portal .ov-pairs { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.aud-portal .ov-pairs li { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; font-size: .92rem; }
.aud-portal .ov-pairs .bc-bar { width: 130px; }

/* ===== navegador por facetas ===== */
.curriculum-browser .cb-head { margin-bottom: 8px; }

/* ===== hoja /auditoria: estado de refresco client-side (auditoria.js) =====
   Mientras el fetch trae la página filtrada, la hoja se atenúa y una barra fina recorre el tope:
   el lector ve que algo pasa sin que la tabla parpadee ni se pierda el scroll. */
#as-root.as-loading { opacity: .55; pointer-events: none; transition: opacity .15s ease; }
#as-root.as-loading::before { content: ''; position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 60;
    background: linear-gradient(90deg, var(--accent, #BF4018) 0 40%, transparent 40% 100%) 0 0 / 240px 3px repeat-x;
    animation: as-slide .8s linear infinite; }
@keyframes as-slide { to { background-position-x: -240px; } }
@media (prefers-reduced-motion: reduce) { #as-root.as-loading::before { animation: none; } }
.curriculum-browser .cb-desc { color: var(--muted, #5C6577); }
.curriculum-browser .cb-filters { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-md, 12px); padding: 14px 16px; background: var(--surface, #fff); margin: 12px 0 20px; }
/* Panel de filtros plegable (<details>): la barra <summary> siempre visible; el cuerpo sólo al abrir. */
.curriculum-browser details.cb-filters { padding: 10px 16px; }
.curriculum-browser .cb-filters > summary { cursor: pointer; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; list-style: none; font-size: .82rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted, #5C6577); font-weight: 700; }
.curriculum-browser .cb-filters > summary::-webkit-details-marker { display: none; }
.curriculum-browser .cb-filters > summary::after { content: '▾'; font-size: .9rem; color: var(--muted, #5C6577); transition: transform .15s ease; }
.curriculum-browser .cb-filters[open] > summary { margin-bottom: 10px; }
.curriculum-browser .cb-filters[open] > summary::after { transform: rotate(180deg); }
.curriculum-browser .cb-filters summary .as-active { text-transform: none; letter-spacing: 0; font-weight: 600; font-size: .74rem; padding: 2px 9px; border-radius: 999px; border: 1px solid var(--line, #EBE3D7); background: var(--surface-2, #F6F1E8); color: var(--ink, #1B2438); }
.curriculum-browser .cb-filters h3 { margin: 0 0 10px; font-size: .82rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted, #5C6577); }
.curriculum-browser .cb-facet { margin-bottom: 14px; }
.curriculum-browser .cb-facet-title { margin: 0 0 6px; font-size: .82rem; font-weight: 700; color: var(--ink, #1B2438); }
.curriculum-browser .cb-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.curriculum-browser .cb-search { display: flex; gap: 8px; margin-top: 6px; }
.curriculum-browser .cb-search input[type="search"] { flex: 1; padding: 8px 10px; border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-sm, 8px); background: var(--surface, #fff); color: var(--ink, #1B2438); }
.curriculum-browser .cb-group { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-md, 12px); padding: 14px 16px; margin: 0 0 14px; background: var(--surface, #fff); }
.curriculum-browser .cb-group > h3 { margin: 0 0 8px; font-size: 1rem; color: var(--ink, #1B2438); }
.curriculum-browser .cb-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
.curriculum-browser .cb-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; border-left: 3px solid var(--cov-unmapped); padding-left: 10px; }
.curriculum-browser .cb-row.cov-covered { border-left-color: var(--cov-covered); }
.curriculum-browser .cb-row.cov-partial { border-left-color: var(--cov-partial); }
.curriculum-browser .cb-row.cov-mapped { border-left-color: var(--cov-mapped); }
.curriculum-browser .cb-row.cov-overcovered { border-left-color: var(--cov-overcovered); }
.curriculum-browser .cb-row.cov-needs_review { border-left-color: var(--cov-needs_review); }
.curriculum-browser .cb-code { font-family: var(--font-mono, ui-monospace, monospace); font-size: .78rem; color: var(--muted, #5C6577); text-decoration: none; }
.curriculum-browser .cb-title { text-decoration: none; color: var(--ink, #1B2438); flex: 1; min-width: 200px; }
.curriculum-browser .cb-title:hover, .curriculum-browser .cb-code:hover { color: var(--accent, #BF4018); text-decoration: underline; }
.curriculum-browser .cb-meta { display: inline-flex; gap: 8px; align-items: baseline; font-size: .78rem; color: var(--muted, #5C6577); }
.curriculum-browser .cb-cov { font-weight: 700; }
.curriculum-browser .cb-pager { text-align: center; margin-top: 18px; }

/* ===== tablero global ===== */
.board-grid { display: grid; gap: 16px; grid-template-columns: 1fr; }
.board-card { display: block; text-decoration: none; color: inherit; border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-lg, 16px); background: var(--surface, #fff); padding: 18px; box-shadow: var(--shadow-sm); transition: transform .15s ease, box-shadow .15s ease; }
.board-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.board-card h2 { margin: 4px 0 12px; font-size: 1.05rem; }
.bc-head, .board-card header { display: flex; gap: 8px; align-items: center; }
.bc-authority { font-weight: 800; letter-spacing: .04em; font-size: .76rem; text-transform: uppercase; color: var(--accent, #BF4018); }
.bc-level { font-size: .72rem; padding: 1px 8px; border-radius: 999px; background: var(--accent-soft, #FDEBDF); color: var(--accent, #BF4018); }
.bc-bar { height: 10px; border-radius: 999px; background: var(--line, #EBE3D7); overflow: hidden; }
.bc-bar-fill { height: 100%; background: var(--cov-covered); border-radius: 999px; }
.bc-ratio { margin: 8px 0 12px; font-size: .9rem; color: var(--ink, #1B2438); }
.bc-legend { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: .78rem; }
.bc-legend li { display: inline-flex; align-items: center; gap: 5px; }
.bc-legend .dot { width: 9px; height: 9px; border-radius: 50%; background: currentColor; display: inline-block; }

/* ===== página permanente de un requisito ===== */
.curriculum-req .cr-head h1 { margin: 6px 0 4px; font-size: 1.5rem; }
.cr-official { border-left: 4px solid var(--accent, #BF4018); background: var(--accent-soft, #FDEBDF); border-radius: 0 var(--radius-md, 12px) var(--radius-md, 12px) 0; padding: 14px 18px; margin: 18px 0; }
.cr-official blockquote { margin: 8px 0; font-size: 1.05rem; line-height: 1.5; }
.cr-aviso { color: var(--muted, #5C6577); font-style: italic; }
.cr-tag { font-size: .72rem; letter-spacing: .06em; text-transform: uppercase; font-weight: 800; color: var(--accent, #BF4018); margin: 0; }
.cr-tag-lumbre { color: var(--cov-overcovered); }
.cr-source { margin: 8px 0 0; }
.cr-explained { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-md, 12px); padding: 12px 16px; margin: 16px 0; background: var(--surface, #fff); }
.cr-explained summary { cursor: pointer; font-weight: 700; }
.cr-interpretation { margin-top: 10px; }
.curriculum-req section { margin: 26px 0; }
.curriculum-req h2 { font-size: 1.15rem; margin: 0 0 10px; }
.cr-coords dl { display: grid; grid-template-columns: auto 1fr; gap: 4px 16px; margin: 0; }
.cr-coords dt { color: var(--muted, #5C6577); font-size: .85rem; }
.cr-coords dd { margin: 0; }
.cr-matrix { width: 100%; border-collapse: collapse; margin: 8px 0 16px; font-size: .9rem; }
.cr-matrix th, .cr-matrix td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--line, #EBE3D7); }
.cr-matrix th { color: var(--muted, #5C6577); font-weight: 600; font-size: .8rem; text-transform: uppercase; letter-spacing: .03em; }
.cr-dims { list-style: none; padding: 0; margin: 0; display: grid; gap: 6px; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.cr-dims li { display: flex; justify-content: space-between; gap: 10px; padding: 6px 10px; border-radius: var(--radius-sm, 8px); background: var(--surface, #fff); border: 1px solid var(--line, #EBE3D7); font-size: .85rem; }
.cr-dims .dim-state { font-weight: 700; }
.cr-dims .dim-yes { border-color: var(--cov-covered); }
.cr-dims .dim-no { color: var(--muted, #5C6577); }
.cr-empty { color: var(--muted, #5C6577); font-style: italic; }
.cr-oa-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 12px; }
.cr-oa-row { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-md, 12px); padding: 12px 14px; background: var(--surface, #fff); }
.cr-oa-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: space-between; }
.cr-oa-title { font-weight: 700; text-decoration: none; color: var(--ink, #1B2438); }
.cr-oa-title:hover { color: var(--accent, #BF4018); }
.cr-oa-badges { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.cr-rationale { margin: 8px 0 0; }
.cr-evidence { margin-top: 8px; }
.cr-evidence summary { cursor: pointer; font-size: .85rem; color: var(--muted, #5C6577); }
.cr-ev-list { list-style: none; padding: 0; margin: 6px 0; display: flex; flex-wrap: wrap; gap: 6px; }
.cr-ev-list a { font-size: .8rem; padding: 2px 8px; border-radius: 999px; background: var(--accent-soft, #FDEBDF); color: var(--accent, #BF4018); text-decoration: none; }
.cr-skills ul, .cr-concepts ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.cr-children ul { padding-left: 20px; }
.cr-disclaimer { margin-top: 18px; padding-top: 12px; border-top: 1px dashed var(--line, #EBE3D7); }

/* ===== panel de auditoría ===== */
.curriculum-audit .au-card { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-md, 12px); background: var(--surface, #fff); margin: 0 0 12px; padding: 0; }
.curriculum-audit .au-card summary { cursor: pointer; list-style: none; display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; padding: 14px 16px; }
.curriculum-audit .au-card summary::-webkit-details-marker { display: none; }
.curriculum-audit .au-card.au-ok { border-color: var(--cov-covered); }
.au-count { min-width: 30px; height: 30px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; background: var(--danger-soft, #F9E5E3); color: var(--danger, #B93E3E); font-weight: 800; padding: 0 8px; }
.au-ok .au-count { background: var(--ok-soft, #E6F2EE); color: var(--cov-covered); }
.au-title { font-weight: 700; font-size: 1rem; }
.au-hint { flex-basis: 100%; margin-left: 40px; }
.au-body { padding: 4px 16px 16px 40px; }
.au-clean { color: var(--cov-covered); display: flex; align-items: center; gap: 6px; }
.au-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
.au-list a { color: var(--ink, #1B2438); text-decoration: none; }
.au-list a:hover { color: var(--accent, #BF4018); text-decoration: underline; }
.au-list code { color: var(--muted, #5C6577); }
.au-table { width: 100%; border-collapse: collapse; font-size: .86rem; }
.au-table th, .au-table td { text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--line, #EBE3D7); vertical-align: top; }
.au-table th { color: var(--muted, #5C6577); font-weight: 600; text-transform: uppercase; font-size: .72rem; letter-spacing: .03em; }

/* ===== panel dentro de la ficha del OA (opcional, colapsado) ===== */
.lo-curriculum { margin: 22px 0; }
.lo-curr-details { border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-md, 12px); background: var(--surface, #fff); overflow: hidden; }
.lo-curr-details > summary { cursor: pointer; list-style: none; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: space-between; padding: 14px 16px; }
.lo-curr-details > summary::-webkit-details-marker { display: none; }
.lo-curr-eyebrow { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; color: var(--ink, #1B2438); }
.lo-curr-student { padding: 4px 16px 0; font-size: 1rem; line-height: 1.5; }
.lo-curr-reqs { list-style: none; padding: 8px 16px 16px; margin: 0; display: flex; flex-direction: column; gap: 6px; }
.lo-curr-reqs a { color: var(--accent, #BF4018); text-decoration: none; }
.lo-curr-reqs a:hover { text-decoration: underline; }
.lo-curr-table { width: 100%; border-collapse: collapse; font-size: .86rem; }
.lo-curr-table th, .lo-curr-table td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--line, #EBE3D7); vertical-align: top; }
.lo-curr-table th { color: var(--muted, #5C6577); font-weight: 600; font-size: .74rem; text-transform: uppercase; letter-spacing: .03em; }
.lo-curr-audit td { background: color-mix(in srgb, var(--ink) 5%, var(--surface, #fff)); }
.lo-curr-audit p { margin: 4px 0; }
.lo-curr-disclaimer { padding: 10px 16px 14px; margin: 0; border-top: 1px dashed var(--line, #EBE3D7); }
.lo-curr-hint { font-weight: 600; }
.lo-curr-req { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border-radius: 10px; background: color-mix(in srgb, var(--accent-soft, #FDEBDF) 55%, var(--surface, #fff)); }
.lo-curr-req-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; }
.lo-curr-code { font-family: var(--mono, ui-monospace, monospace); font-size: .78rem; font-weight: 700; color: var(--ink, #1B2438); background: var(--surface, #fff); border: 1px solid var(--line, #EBE3D7); border-radius: 6px; padding: 1px 6px; }
.lo-curr-req-text { color: var(--accent, #BF4018); text-decoration: none; font-weight: 600; }
.lo-curr-req-text:hover { text-decoration: underline; }
.lo-curr-req-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.lo-curr-doc { display: inline-flex; align-items: center; gap: 4px; color: var(--accent, #BF4018); text-decoration: none; font-weight: 600; }
.lo-curr-doc:hover { text-decoration: underline; }
/* relación oficial aún «en revisión» (agent_proposed): atenuada, sin liga al documento oficial */
.lo-curr-req.lo-curr-req-pending { background: var(--surface, #fff); border: 1px dashed var(--line, #EBE3D7); }
.lo-curr-req-pending .lo-curr-req-text { color: var(--muted, #5C6577); font-weight: 500; }
.lo-curr-pending-tag { color: var(--muted, #5C6577); font-style: italic; }
.lo-curr-pending { margin: 0 16px 14px; border-top: 1px dashed var(--line, #EBE3D7); padding-top: 8px; }
.lo-curr-pending > summary { cursor: pointer; list-style: none; }
.lo-curr-pending > summary::-webkit-details-marker { display: none; }
.lo-curr-pending .lo-curr-reqs { padding-left: 0; padding-right: 0; }

/* ===== empty state ===== */
.curriculum-empty h1 { font-size: 1.4rem; }
.curriculum-empty code { background: var(--accent-soft, #FDEBDF); padding: 1px 6px; border-radius: 6px; }

/* ===== tablet y arriba ===== */
@media (min-width: 720px) {
    .curriculum-frameworks { grid-template-columns: repeat(2, 1fr); }
    .board-grid { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
}
@media (min-width: 1000px) {
    .curriculum-frameworks { grid-template-columns: repeat(3, 1fr); }
}

/* ===== panoramas compactos (USA / tableros por grado × asignatura) =====
   Matriz ligera para leer de un vistazo dónde hay contenido y dónde falta, sin repetir
   una tarjeta por celda. Reutiliza los tokens de app.css y la paleta de cobertura. */
.us-matrix { width: 100%; border-collapse: separate; border-spacing: 0; margin: 8px 0 20px;
    font-size: .92rem; background: var(--surface, #fff); border: 1px solid var(--line, #EBE3D7);
    border-radius: var(--radius-lg, 16px); overflow: hidden; }
.us-matrix caption { text-align: left; padding: 10px 14px; color: var(--muted, #5C6577); font-size: .82rem; }
.us-matrix th, .us-matrix td { padding: 12px 14px; border-bottom: 1px solid var(--line, #EBE3D7); text-align: left; vertical-align: middle; }
.us-matrix thead th { background: color-mix(in srgb, var(--ink) 4%, var(--surface, #fff)); font-size: .72rem;
    text-transform: uppercase; letter-spacing: .06em; color: var(--muted, #5C6577); font-weight: 700; }
.us-matrix tbody tr:last-child th, .us-matrix tbody tr:last-child td { border-bottom: none; }
.us-matrix tbody th { font-weight: 700; color: var(--ink, #1B2438); white-space: nowrap; }
.us-matrix tbody th small { display: block; font-weight: 500; color: var(--muted, #5C6577); font-size: .74rem; margin-top: 2px; }
.us-matrix .um-cell { display: block; text-decoration: none; color: inherit; padding: 8px 10px;
    border-radius: var(--radius-sm, 8px); border: 1px solid transparent; transition: background .15s ease, border-color .15s ease; }
.us-matrix .um-cell:hover { background: color-mix(in srgb, var(--accent, #BF4018) 8%, var(--surface, #fff)); border-color: var(--line, #EBE3D7); }
.us-matrix .um-num { display: block; font-weight: 700; font-size: .88rem; color: var(--ink, #1B2438); margin-bottom: 6px; }
.us-matrix .um-num em { font-style: normal; font-weight: 500; color: var(--muted, #5C6577); font-size: .78rem; margin-left: 4px; }
.us-matrix .um-bar { display: block; height: 6px; border-radius: 999px; background: var(--line, #EBE3D7); overflow: hidden; }
.us-matrix .um-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--cov-covered); }
.us-matrix .um-cell.um-empty { opacity: .55; }
.us-matrix .um-cell.um-empty .um-num { color: var(--muted, #5C6577); font-weight: 500; }
.us-matrix .um-cell.um-partial .um-bar > span { background: var(--cov-partial); }
.us-matrix .um-cell.um-full .um-bar > span { background: var(--cov-covered); }
.us-matrix .um-legend { display: inline-flex; align-items: center; gap: 6px; margin-top: 4px; font-size: .72rem; color: var(--muted, #5C6577); }
/* Encabezado de estado dentro de /us/coverage: título grande con liga «Panorama por grado →» a la derecha. */
.us-matrix + .um-h2, .um-h2 { display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
    margin: 34px 0 8px; font-size: 1.4rem; }
.um-h2 .text-link { font-size: .82rem; font-weight: 600; color: var(--accent, #BF4018); text-decoration: none; white-space: nowrap; }
.um-h2 .text-link:hover { text-decoration: underline; }
@media (max-width: 720px) {
    .us-matrix { font-size: .84rem; }
    .us-matrix th, .us-matrix td { padding: 10px 8px; }
    .us-matrix .um-num { font-size: .8rem; }
}

/* ===== accesibilidad: reduce motion ===== */
@media (prefers-reduced-motion: reduce) {
    .board-card, .board-card:hover, .badge, .chip { transition: none; }
    .board-card:hover { transform: none; }
}

/* ===== hoja de auditoría pública /auditoria (views/curriculum/auditoria.php) ===== */
.aud-sheet .as-banner { display: block; margin: 10px 0; padding: 10px 14px; border-radius: 12px; background: var(--cov-partial-bg, #FFF4E0); border: 1px solid var(--cov-partial, #F0C980); color: var(--cov-partial, #7A5A12); font-weight: 600; }
.aud-sheet .as-kpis { display: flex; flex-wrap: wrap; gap: 10px; margin: 18px 0 6px; }
.aud-sheet .as-kpi { flex: 1 1 150px; padding: 12px 14px; border: 1px solid var(--line, #EBE3D7); border-radius: 14px; background: var(--surface, #fff); color: var(--ink, #1B2438); }
.aud-sheet .as-kpi strong { display: block; font-size: 1.5rem; }
.aud-sheet .as-kpi span { font-size: .8rem; color: var(--muted, #6B7280); }
.aud-sheet .as-kpi.as-ok strong { color: var(--cov-covered); }
.aud-sheet .as-kpi.as-warn strong { color: var(--cov-partial); }
.aud-sheet .as-kpi.as-bad strong { color: var(--cov-unmapped); }
.aud-sheet .as-kpi.as-struct { border-style: dashed; }
.aud-sheet .as-kpi.as-struct strong { color: var(--muted, #6B7280); }
.aud-sheet .as-h2 { margin: 22px 0 8px; }
.aud-sheet table.as-table { width: 100%; border-collapse: collapse; font-size: .86rem; margin-bottom: 18px; }
.aud-sheet .as-table th { text-align: left; padding: 8px 10px; border-bottom: 2px solid var(--line, #EBE3D7); font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted, #6B7280); }
.aud-sheet .as-table td { padding: 8px 10px; border-bottom: 1px solid var(--line, #EBE3D7); vertical-align: top; }
.aud-sheet .as-table tr.is-active { background: var(--accent-soft, #FBF6EC); }
.aud-sheet .as-table tr.as-materia td { font-size: .8rem; color: var(--muted, #6B7280); }
.aud-sheet .as-ok-t { color: var(--cov-covered); font-weight: 700; }
.aud-sheet .as-warn-t { color: var(--cov-partial); font-weight: 700; }
.aud-sheet .as-bad-t { color: var(--cov-unmapped); font-weight: 700; }
.aud-sheet td .bc-bar { display: inline-block; width: 72px; vertical-align: middle; }
.aud-sheet .as-rows .as-code a { font-family: ui-monospace, Consolas, monospace; font-size: .8rem; }
.aud-sheet .as-rows .as-title { font-weight: 600; display: block; }
.aud-sheet .as-rows .as-txt { display: block; margin-top: 2px; }
.aud-sheet .as-rows .as-oa { text-decoration: none; }
/* columna «Programa oficial»: liga verificada por fila (verde), documento del plan (ámbar), o pendiente */
.aud-sheet td.as-src { font-size: .78rem; max-width: 240px; }
.aud-sheet .as-src-link { color: var(--accent, #BF4018); text-decoration: none; word-break: break-word; }
.aud-sheet .as-src-link:hover { text-decoration: underline; }
.aud-sheet .as-src-link.as-src-oficial-fila { color: var(--cov-covered, #1F7A46); font-weight: 600; }
.aud-sheet .as-src-link.as-src-oficial-doc { color: var(--ink, #1B2438); }
.aud-sheet .as-src-pending { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: .72rem; font-weight: 600; background: var(--cov-unmapped-bg, #F1EDE6); color: var(--muted, #6B7280); border: 1px dashed #C4CAD6; cursor: help; }
.aud-sheet .as-estado { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: .74rem; font-weight: 700; }
.aud-sheet .as-validado { background: var(--cov-covered-bg, #E7F6EC); color: var(--cov-covered); }
.aud-sheet .as-propuesto { background: var(--cov-partial-bg, #FFF4E0); color: var(--cov-partial); }
.aud-sheet .as-rechazado { background: var(--cov-needs_review-bg, #FDEBEB); color: var(--cov-needs_review, #B4232C); }
.aud-sheet .as-sin_oa { background: var(--cov-unmapped-bg, #F1EDE6); color: var(--cov-unmapped); }
.aud-sheet .as-estructural { background: #EEF0F6; color: #5B6472; border: 1px dashed #C4CAD6; }
@media (max-width: 720px) { .aud-sheet .as-rows { table-layout: fixed; } .aud-sheet .as-table { font-size: .78rem; } }

/* filtros propios de la estructura del país (selects) + export a Excel en la hoja de auditoría */
.curriculum-browser .cb-search.cb-facets { flex-wrap: wrap; align-items: end; }
.curriculum-browser .cb-field { display: flex; flex-direction: column; gap: 4px; font-size: .72rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: var(--muted, #5C6577); }
.curriculum-browser .cb-field select { padding: 7px 9px; border: 1px solid var(--line, #EBE3D7); border-radius: var(--radius-sm, 8px); background: var(--surface, #fff); color: var(--ink, #1B2438); font: inherit; text-transform: none; letter-spacing: 0; min-width: 130px; }
.aud-sheet .as-export { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 14px 0 0; }
.aud-sheet .as-rows a.as-title { color: var(--ink, #1B2438); text-decoration: none; }
.aud-sheet .as-rows a.as-title:hover { color: var(--accent, #BF4018); text-decoration: underline; }
.aud-sheet .button.ghost { background: transparent; border: 1px solid var(--line, #EBE3D7); color: var(--ink, #1B2438); }
.aud-sheet .button.ghost:hover { border-color: var(--accent, #BF4018); color: var(--accent, #BF4018); }
