/* Estilo compartido de los resúmenes de Álgebra (UNED). No duplicar en cada tema. */
:root{
  --bg:#fbfaf6;--fg:#1c2230;--mut:#5d6675;--card:#fff;--bd:#dfe1e8;--acc:#2a56d3;
  --def:#e9effe;--def-b:#2a56d3;--thm:#fff4d9;--thm-b:#d59a00;--ex:#e8f6ec;--ex-b:#2c9a55;
  --warn:#fdeceb;--warn-b:#d24a3b;--tip:#f1ecfb;--tip-b:#7a4fd0;--intu:#e6f6f8;--intu-b:#1a8fa3;
  --U:#2a56d3;--E:#8a3fbf;--L:#1f8a4c;--A:#c9670a;--P:#6b7280;--X:#b3266f;--sec:#c9670a;
  --serif:Georgia,'Iowan Old Style','Times New Roman',serif;--sans:system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
}
:root[data-theme="dark"]{
  --bg:#12151d;--fg:#e7eaf1;--mut:#9aa3b5;--card:#1a1e2b;--bd:#2d3346;--acc:#8fb0ff;
  --def:#1c2748;--def-b:#8fb0ff;--thm:#39311d;--thm-b:#f0b429;--ex:#173225;--ex-b:#4cc784;
  --warn:#3b2020;--warn-b:#ff8073;--tip:#2a2144;--tip-b:#b79bff;--intu:#15343b;--intu-b:#55cbdd;
  --U:#8fb0ff;--E:#d29bff;--L:#5fd08b;--A:#ffa55a;--P:#a0a7b4;--X:#ff8fc3;--sec:#ffa55a}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:70px;overflow-x:hidden}
body{margin:0;background:var(--bg);color:var(--fg);font:17.5px/1.7 var(--serif);-webkit-text-size-adjust:100%;overflow-x:clip}
.topbar{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--bd);font:14px var(--sans)}
.topbar .in{max-width:1180px;margin:0 auto;padding:8px 16px;display:flex;gap:14px;align-items:center;justify-content:space-between}
.topbar a{color:var(--acc);text-decoration:none}
.topbar button{font:inherit;background:none;border:1px solid var(--bd);color:var(--fg);border-radius:8px;padding:4px 10px;cursor:pointer}
.layout{max-width:1180px;margin:0 auto;padding:0 16px 90px;display:grid;grid-template-columns:230px minmax(0,760px);justify-content:center;gap:0 34px}
@media (min-width:1240px){.layout{max-width:1340px;grid-template-columns:230px minmax(0,760px) 190px}}
.side-toc{position:sticky;top:64px;align-self:start;max-height:calc(100vh - 80px);overflow:auto;font:14px/1.45 var(--sans);padding:24px 0}
.side-toc b{display:block;margin-bottom:6px;color:var(--mut);text-transform:uppercase;letter-spacing:.06em;font-size:11.5px}
.side-toc a{display:block;padding:4px 8px;border-left:3px solid var(--bd);color:var(--mut);text-decoration:none}
.side-toc a:hover,.side-toc a.on{color:var(--acc);border-color:var(--acc);background:color-mix(in srgb,var(--acc) 8%,transparent)}
main{grid-column:2;min-width:0}
header.hero{padding:36px 0 18px;border-bottom:2px solid var(--bd)}
.hero .kick{font:600 12.5px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--acc)}
.hero h1{font-size:clamp(1.9rem,4.5vw,2.6rem);line-height:1.15;margin:.2em 0}
.hero p{margin:.3em 0;color:var(--mut)}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;font:13px var(--sans)}
.chips span{border:1px solid var(--bd);background:var(--card);border-radius:99px;padding:3px 11px}
h2{position:relative;font-size:1.6rem;margin:2.6em 0 .4em;padding-top:.6em;border-top:1px solid var(--bd);line-height:1.25}
h2 .n{color:var(--acc);font-family:var(--sans);margin-right:.35em}
h3{position:relative;font-size:1.2rem;margin:1.7em 0 .3em}
p{margin:.7em 0}
.box{position:relative;border-radius:10px;padding:13px 18px 12px;margin:1.2em 0;border-left:5px solid var(--bd);background:var(--card)}
.box>.h{display:block;font:700 12px var(--sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:5px}
.box>*:last-child{margin-bottom:0}
.def{background:var(--def);border-color:var(--def-b)}.def>.h{color:var(--def-b)}
.thm{background:var(--thm);border-color:var(--thm-b)}.thm>.h{color:var(--thm-b)}
.ex{background:var(--ex);border-color:var(--ex-b)}.ex>.h{color:var(--ex-b)}
.warn{background:var(--warn);border-color:var(--warn-b)}.warn>.h{color:var(--warn-b)}
.tip{background:var(--tip);border-color:var(--tip-b)}.tip>.h{color:var(--tip-b)}
.intu{background:var(--intu);border-color:var(--intu-b)}.intu>.h{color:var(--intu-b)}
.recipe{border:2px dashed var(--ex-b);border-radius:10px;padding:10px 16px;margin:1em 0;font-family:var(--sans);font-size:.95rem}
.recipe>b{color:var(--ex-b)}
.plan{background:var(--card);border:1px solid var(--bd);border-left:5px solid var(--acc);border-radius:10px;padding:10px 16px;margin:.8em 0;font-family:var(--sans);font-size:.95rem}
.plan>.h{display:block;font-weight:700;color:var(--acc);margin-bottom:.3em}
.plan dl{margin:0}.plan dt{font-weight:700;margin-top:.45em}.plan dd{margin:.1em 0 0 0}
.plan ul,.plan ol{margin:.2em 0 0;padding-left:1.3em}
ol.steps{counter-reset:s;list-style:none;padding-left:0}
ol.steps>li{counter-increment:s;position:relative;padding-left:2.2em;margin:.55em 0}
ol.steps>li::before{content:counter(s);position:absolute;left:0;top:.2em;width:1.6em;height:1.6em;border-radius:50%;background:var(--acc);color:var(--bg);font:700 .8em/1.6em var(--sans);text-align:center}
details.sol{position:relative;border:1px solid var(--bd);border-radius:10px;background:var(--card);margin:.9em 0;padding:0 16px}
details.sol>summary{position:relative;cursor:pointer;font:600 15px var(--sans);padding:11px 0;color:var(--acc)}
details.sol[open]>summary{border-bottom:1px solid var(--bd);margin-bottom:8px}
.enun{font-style:italic}
/* todas las tablas: ancho completo, sin rejilla vertical, marco redondeado, filas con separador fino */
table{display:table;width:100%;font:.93rem var(--sans);margin:1em 0;background:transparent;border-collapse:separate;border-spacing:0;border:1px solid color-mix(in srgb,var(--fg) 18%,transparent);border-radius:10px;overflow:hidden}
th,td{border:0;border-bottom:1px solid color-mix(in srgb,var(--fg) 12%,transparent);padding:9px 14px;text-align:left;vertical-align:middle}
thead th,tr:first-child>th{background:color-mix(in srgb,var(--fg) 8%,transparent);font:700 11.5px var(--sans);letter-spacing:.07em;text-transform:uppercase;color:var(--mut)}
tbody tr:last-child>td,tr:last-child>td{border-bottom:0}
tbody tr:nth-child(odd)>td{background:color-mix(in srgb,var(--card) 55%,transparent)}
table.formulas td:first-child{font-weight:600;white-space:nowrap}
table.formulas td:first-child i{display:block;font-weight:400;font-size:.8em;color:var(--mut)}
table.formulas td:nth-child(2){text-align:center;font-size:1.05em}
table.formulas td:last-child{color:var(--mut)}
@media(max-width:640px){table{display:block;overflow-x:auto}}
ul,ol{padding-left:1.4em}li{margin:.25em 0}
code{font:.88em ui-monospace,Consolas,monospace;background:color-mix(in srgb,var(--fg) 8%,transparent);padding:1px 5px;border-radius:4px}
figure{margin:1.2em 0;text-align:center}figcaption{font:13.5px var(--sans);color:var(--mut)}
svg.fig{max-width:100%;height:auto}
svg.fig text{fill:var(--fg);font:13px var(--sans)}
svg.fig .ax{stroke:var(--fg);stroke-width:1.5;fill:none}
svg.fig .a{stroke:var(--acc);stroke-width:3;fill:none}
svg.fig .b{stroke:var(--sec);stroke-width:3;fill:none}
svg.fig .pt{fill:var(--acc)}svg.fig .op{fill:var(--bg);stroke:var(--acc);stroke-width:2}
.katex-display{overflow-x:auto;overflow-y:hidden;padding:2px 0}
/* Saltos de línea automáticos en fórmulas largas (tras = , + , − , ⇔ …) en vez de barra de desplazamiento */
.katex{white-space:normal}
.katex-display>.katex{display:block;white-space:normal;text-align:center}
.katex-display>.katex>.katex-html{display:block}
/* ---- Fuentes (libro + página): pastilla con tooltip; en escritorio, nota marginal ---- */
.src{display:inline-block;position:relative;font:600 11px/1 var(--sans);letter-spacing:.02em;padding:3px 7px;border-radius:99px;border:1px solid currentColor;vertical-align:middle;margin:0 2px;cursor:help;white-space:nowrap;text-transform:none;font-style:normal}
.src[data-l="U"]{color:var(--U)}.src[data-l="E"]{color:var(--E)}.src[data-l="L"]{color:var(--L)}.src[data-l="A"]{color:var(--A)}.src[data-l="P"]{color:var(--P)}.src[data-l="X"]{color:var(--X)}
.src::after{content:attr(data-ref);position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);width:max-content;max-width:min(260px,calc(100vw - 32px));white-space:normal;background:var(--fg);color:var(--bg);font:500 12.5px/1.35 var(--sans);padding:7px 10px;border-radius:8px;opacity:0;pointer-events:none;transition:opacity .12s;z-index:30}
.src:hover::after,.src:focus::after{opacity:1}
@media (min-width:1240px){
  .box>.src,h2>.src,h3>.src,details.sol>summary>.src{position:absolute;left:calc(100% + 16px);width:175px;white-space:normal;line-height:1.3;padding:6px 9px;border-radius:8px;background:var(--card);top:.5em;margin:0;cursor:default}
  .box>.src,h2>.src,h3>.src,details.sol>summary>.src{font-size:0}
  .box>.src::before,h2>.src::before,h3>.src::before,details.sol>summary>.src::before{content:attr(data-l) " · ";font:800 11px/1.3 var(--sans)}
  .box>.src::after,h2>.src::after,h3>.src::after,details.sol>summary>.src::after{all:unset;content:attr(data-ref);font:600 11px/1.3 var(--sans)}
  .box>.src~.src,h2>.src~.src,h3>.src~.src,details.sol>summary>.src~.src{top:64px}
.box>.src~.src~.src,h2>.src~.src~.src,h3>.src~.src~.src{top:128px}
.box>.src~.src~.src~.src,h2>.src~.src~.src~.src,h3>.src~.src~.src~.src{top:192px}
}
#panel-fuentes{font:14px/1.5 var(--sans)}
#panel-fuentes li{margin:.4em 0}#panel-fuentes .src{cursor:default}
#panel-fuentes .src::after{display:none}
details.fuentes-toggle{border:1px solid var(--bd);border-radius:10px;background:var(--card);margin:.9em 0;padding:0 16px}
details.fuentes-toggle>summary{cursor:pointer;font:600 15px var(--sans);padding:11px 0;color:var(--acc);list-style:none}
details.fuentes-toggle>summary::-webkit-details-marker{display:none}
details.fuentes-toggle>summary::before{content:"▸ ";display:inline-block}
details.fuentes-toggle[open]>summary::before{content:"▾ "}
details.fuentes-toggle[open]>summary{border-bottom:1px solid var(--bd);margin-bottom:8px}
details.fuentes-toggle>summary+*{margin-top:0}
.legend{display:flex;flex-wrap:wrap;gap:10px;font:13px var(--sans);margin:.5em 0}
.checklist{list-style:none;padding:0}.checklist li{padding-left:1.8em;position:relative}
.checklist li::before{content:"☐";position:absolute;left:0;color:var(--acc)}
footer{margin-top:4em;padding-top:1em;border-top:1px solid var(--bd);font:13px var(--sans);color:var(--mut)}
@media (max-width:1000px){.layout{grid-template-columns:minmax(0,1fr)}main{grid-column:1}.side-toc{display:none}body{font-size:16.5px}}
svg.fig .th{stroke:var(--mut);stroke-width:1.3;fill:none}
svg.fig .sm{font-size:12px;fill:var(--mut)}
svg.fig .pb{fill:var(--sec)}
svg.fig .ob{fill:var(--bg);stroke:var(--sec);stroke-width:2}
svg.fig .bd{font-weight:700}
svg.fig .lg{font-size:15px}
svg.fig .pl1{fill:var(--acc);fill-opacity:.12;stroke:var(--acc);stroke-width:1.2}
svg.fig .pl2{fill:var(--sec);fill-opacity:.12;stroke:var(--sec);stroke-width:1.2}
.figpair{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.figpair svg.fig{flex:1 1 260px;max-width:340px}

/* Figuras recortadas de los libros (herramientas/extraer_figura.py): fondo claro también en modo oscuro */
figure.bookfig img{max-width:100%;height:auto;background:#fff;border-radius:8px;padding:8px;border:1px solid var(--bd)}

/* Matrices y notación matricial: monoespaciado ligero para claridad en índices/entradas */
.mat-idx{font:italic .9em var(--sans);color:var(--mut)}

/* menú desplegable de apartados (solo móvil/tablet, donde se oculta el índice lateral) */
.mnav{display:none}
@media (max-width:1000px){
  .mnav{display:block;position:fixed;right:14px;bottom:14px;z-index:40;font:14px var(--sans)}
  .mnav-btn{font:600 14px var(--sans);background:var(--acc);color:var(--bg);border:0;border-radius:99px;padding:10px 16px;box-shadow:0 4px 14px rgba(0,0,0,.28);cursor:pointer}
  .mnav-list{position:absolute;right:0;bottom:calc(100% + 10px);width:min(80vw,320px);max-height:60vh;overflow:auto;background:var(--card);border:1px solid var(--bd);border-radius:12px;box-shadow:0 8px 26px rgba(0,0,0,.3);padding:6px}
  .mnav-list[hidden]{display:none}
  .mnav-list a{display:block;padding:9px 12px;border-radius:8px;color:var(--fg);text-decoration:none;line-height:1.35}
  .mnav-list a.on{background:color-mix(in srgb,var(--acc) 14%,transparent);color:var(--acc);font-weight:600}
}

/* ================= IMPRESIÓN (A4, blanco y negro, sin fuentes ni «fuera de examen») ================= */
@page{size:A4;margin:14mm 15mm 16mm;@bottom-center{content:counter(page);font:9pt system-ui,sans-serif;color:#444}}
@media print{
  /* paleta en escala de grises (también si el navegador está en modo oscuro) */
  :root:not(.print-color),:root[data-theme="dark"]:not(.print-color),:root[data-theme="light"]:not(.print-color){
    --bg:#fff!important;--fg:#000!important;--mut:#333!important;--card:#fff!important;--bd:#999!important;--acc:#000!important;
    --def:#f2f2f2!important;--def-b:#000!important;--thm:#e6e6e6!important;--thm-b:#000!important;--ex:#fff!important;--ex-b:#000!important;
    --warn:#fff!important;--warn-b:#000!important;--tip:#fff!important;--tip-b:#000!important;--intu:#f8f8f8!important;--intu-b:#000!important;
    --U:#000!important;--S:#333!important;--L:#333!important;--E:#333!important;--P:#333!important;--A:#333!important;--X:#333!important;--sec:#555!important}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact;box-shadow:none!important;text-shadow:none!important}
  html,body{overflow:visible!important;background:#fff;color:#000}
  html{scroll-padding-top:0}
  body{font-size:10.5pt;line-height:1.42}
  /* fuera lo interactivo y las fuentes */
  .topbar,.side-toc,.mnav,.src,.legend,details.fuera,details.fuentes-toggle,#panel-fuentes,#btn-sol,#btn-tema{display:none!important}
  .layout{display:block;max-width:none;padding:0;margin:0}
  main{width:auto}
  a{color:#000;text-decoration:none}
  /* títulos */
  header.hero{padding:0 0 8pt;border-bottom:1.5pt solid #000}
  .hero h1{font-size:20pt;margin:.15em 0}
  .hero .kick{font-size:8.5pt;color:#000}
  .chips{font-size:8.5pt;gap:5pt;margin-top:6pt}.chips span{background:none;border:.6pt solid #666;padding:1pt 6pt}
  h2{font-size:14pt;margin:1.3em 0 .35em;padding-top:.35em;border-top:.8pt solid #000;break-after:avoid;break-inside:avoid}
  h3{font-size:11.5pt;margin:1.1em 0 .25em;break-after:avoid;break-inside:avoid}
  h4,summary{break-after:avoid}
  p,li{orphans:3;widows:3}
  p{margin:.5em 0}
  /* cajas: borde y trama en vez de color */
  .box{padding:7pt 11pt 6pt;margin:.8em 0;border:.7pt solid #666;border-left:3.5pt solid #000;border-radius:3pt;break-inside:avoid}
  .box>.h{font-size:8pt;margin-bottom:3pt;color:#000}
  .warn{border-left:3.5pt double #000}
  .tip{border-style:dashed;border-left-style:solid}
  .intu{border-left-width:1.5pt}
  .recipe{border:1pt dashed #000;padding:6pt 11pt;margin:.7em 0;font-size:9.5pt;break-inside:avoid}
  .recipe>b{color:#000}
  .plan{border:.7pt solid #000;border-left:3pt solid #000;padding:6pt 11pt;margin:.7em 0;font-size:9.5pt;break-inside:avoid}
  .plan>.h{color:#000}
  /* ejercicios resueltos: siempre abiertos; la solución puede continuar en la página siguiente, pero no sus piezas */
  details.sol{border:.7pt solid #666;padding:0 11pt;margin:.8em 0;break-inside:auto}
  details.sol>summary{list-style:none;color:#000;padding:7pt 0;font-size:10pt;break-after:avoid}
  details.sol>summary::-webkit-details-marker{display:none}
  details.sol[open]>summary{margin-bottom:5pt}
  details.sol .box,details.sol .recipe,ol.steps>li,figure,tr,blockquote,pre,.katex-display{break-inside:avoid}
  thead{display:table-header-group}
  ol.steps>li{margin:.4em 0}
  ol.steps>li::before{background:#000;color:#fff}
  /* tablas */
  table{display:table!important;overflow:visible!important;font-size:9.5pt;border:.7pt solid #000;border-radius:0;break-inside:auto}
  th,td{padding:4pt 8pt;border-bottom:.5pt solid #999}
  thead th,tr:first-child>th{background:#e6e6e6;color:#000}
  tbody tr:nth-child(odd)>td{background:none}
  /* fórmulas y figuras */
  .katex{font-size:1.04em}
  .katex-display{overflow:visible;margin:.55em 0}
  figure{margin:.8em 0}
  figure.bookfig img,svg.fig{max-width:100%;max-height:120mm;width:auto;height:auto;border:0;padding:0}
  figcaption{font-size:8.5pt;color:#000}
  footer{font-size:8pt;margin-top:2em}
}

/* ---- Impresión a COLOR: se activa con la clase print-color en <html> (botón «Imprimir en color» o exportar_pdf.py --color) ---- */
@media print{
  html.print-color,html.print-color[data-theme="dark"],html.print-color[data-theme="light"]{
    --bg:#fbfaf6!important;--fg:#1c2230!important;--mut:#5d6675!important;--card:#fff!important;--bd:#dfe1e8!important;--acc:#2a56d3!important;--def:#e9effe!important;--def-b:#2a56d3!important;--thm:#fff4d9!important;--thm-b:#d59a00!important;--ex:#e8f6ec!important;--ex-b:#2c9a55!important;--warn:#fdeceb!important;--warn-b:#d24a3b!important;--tip:#f1ecfb!important;--tip-b:#7a4fd0!important;--intu:#e6f6f8!important;--intu-b:#1a8fa3!important;--U:#2a56d3!important;--E:#8a3fbf!important;--L:#1f8a4c!important;--A:#c9670a!important;--P:#6b7280!important;--X:#b3266f!important;--sec:#c9670a!important;
  }
  html.print-color a{color:var(--acc)}
  html.print-color header.hero{border-bottom-color:var(--bd)}
  html.print-color .hero .kick{color:var(--acc)}
  html.print-color .chips span{border-color:var(--bd);background:var(--card)}
  html.print-color h2{border-top-color:var(--bd)}
  html.print-color h2 .n{color:var(--acc)}
  html.print-color .box{border-color:var(--bd);background:var(--card)}
  html.print-color .box>.h{color:var(--mut)}
  html.print-color .def{background:var(--def);border-color:var(--def-b)}html.print-color .def>.h{color:var(--def-b)}
  html.print-color .thm{background:var(--thm);border-color:var(--thm-b)}html.print-color .thm>.h{color:var(--thm-b)}
  html.print-color .ex{background:var(--ex);border-color:var(--ex-b)}html.print-color .ex>.h{color:var(--ex-b)}
  html.print-color .warn{background:var(--warn);border-color:var(--warn-b);border-left-style:solid}html.print-color .warn>.h{color:var(--warn-b)}
  html.print-color .tip{background:var(--tip);border-color:var(--tip-b);border-style:solid}html.print-color .tip>.h{color:var(--tip-b)}
  html.print-color .intu{background:var(--intu);border-color:var(--intu-b)}html.print-color .intu>.h{color:var(--intu-b)}
  html.print-color .recipe{border-color:var(--ex-b)}html.print-color .recipe>b{color:var(--ex-b)}
  html.print-color details.sol{border-color:var(--bd);background:var(--card)}
  html.print-color details.sol>summary{color:var(--acc)}
  html.print-color ol.steps>li::before{background:var(--acc);color:var(--bg)}
  html.print-color table{border-color:color-mix(in srgb,var(--fg) 30%,transparent)}
  html.print-color th,html.print-color td{border-bottom-color:color-mix(in srgb,var(--fg) 15%,transparent)}
  html.print-color thead th,html.print-color tr:first-child>th{background:color-mix(in srgb,var(--fg) 8%,transparent);color:var(--mut)}
  html.print-color figcaption{color:var(--mut)}
}
.katex .base{width:auto}

/* ---- Animación de la regla de Sarrus (assets/sarrus.js) ---- */
.sarrus{margin:1.2em 0;padding:16px 14px 12px;border:1px solid var(--bd);border-radius:14px;background:var(--card);font-family:var(--sans)}
.sar-board{position:relative;margin:0 auto}
.sar-svg{position:absolute;left:0;top:0;pointer-events:none;overflow:visible}
.sar-br{fill:none;stroke:var(--fg);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sar-sep{fill:none;stroke:var(--mut);stroke-width:1.5;stroke-dasharray:4 4;opacity:0;transition:opacity .5s}
.sar-sep.show{opacity:1}
.sar-line{stroke-width:4;stroke-linecap:round;opacity:.95;transition:stroke-dashoffset .9s ease,opacity .4s}
.sar-line.down{stroke:var(--acc)}
.sar-line.up{stroke:var(--sec)}
.sar-line.done{opacity:.28}
.sar-line.hide{opacity:0}
.sar-cell{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;border-radius:10px;font:600 20px var(--serif);color:var(--fg);transition:background .35s,box-shadow .35s,opacity .5s,transform .5s}
.sar-cell input{width:100%;height:100%;box-sizing:border-box;border:1px dashed transparent;border-radius:10px;background:transparent;color:inherit;font:inherit;text-align:center;padding:0;-moz-appearance:textfield}
.sar-cell input::-webkit-outer-spin-button,.sar-cell input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.sar-cell input:hover,.sar-cell input:focus{border-color:var(--mut);outline:none;background:color-mix(in srgb,var(--fg) 5%,transparent)}
.sar-cell.copy{color:var(--mut);background:color-mix(in srgb,var(--fg) 7%,transparent);opacity:0;transform:translateY(-18px) scale(.9)}
.sar-cell.copy.show{opacity:1;transform:none}
.sar-cell.hp{background:color-mix(in srgb,var(--acc) 22%,var(--card));box-shadow:0 0 0 2px var(--acc)}
.sar-cell.hn{background:color-mix(in srgb,var(--sec) 24%,var(--card));box-shadow:0 0 0 2px var(--sec)}
.sar-text{min-height:3.4em;margin:14px 2px 6px;font:500 15.5px/1.5 var(--sans)}
.sar-res{display:flex;flex-direction:column;gap:7px;min-height:1em;margin:4px 0 8px}
.sar-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.sar-tag{font:700 12px var(--sans);padding:3px 9px;border-radius:99px;color:var(--bg)}
.sar-tag.down,.sar-sum.down{background:var(--acc)}.sar-tag.up,.sar-sum.up{background:var(--sec)}
.sar-chip{font:500 14px var(--sans);padding:3px 9px;border-radius:8px;border:1px solid currentColor;animation:sarpop .4s ease}
.sar-chip.down{color:var(--acc)}.sar-chip.up{color:var(--sec)}
.sar-chip.now{font-weight:700;background:color-mix(in srgb,currentColor 12%,transparent)}
.sar-chip b{font-weight:800}
.sar-sum{font:700 14px var(--sans);padding:3px 10px;border-radius:8px;color:var(--bg);animation:sarpop .4s ease}
.sar-final{font:700 17px var(--sans);padding:9px 12px;border-radius:10px;border:2px solid var(--fg);text-align:center;animation:sarpop .4s ease}
.sar-prog{height:5px;border-radius:9px;background:color-mix(in srgb,var(--fg) 12%,transparent);overflow:hidden;margin:6px 0 10px}
.sar-prog i{display:block;height:100%;background:var(--acc);transition:width .5s}
.sar-ctrl{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.sar-ctrl button{font:600 13.5px var(--sans);padding:7px 13px;border-radius:9px;border:1px solid var(--bd);background:var(--bg);color:var(--fg);cursor:pointer}
.sar-ctrl button.play{background:var(--acc);color:var(--bg);border-color:var(--acc)}
.sar-ctrl button:disabled{opacity:.4;cursor:default}
.sar-hint{margin:10px 0 0;font:13px/1.4 var(--sans);color:var(--mut);text-align:center}
@keyframes sarpop{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.sar-line,.sar-cell,.sar-chip,.sar-sum,.sar-final,.sar-sep,.sar-prog i{transition:none;animation:none}}
@media print{.sar-ctrl,.sar-prog,.sar-hint{display:none}.sarrus{border:.7pt solid #000;break-inside:avoid}.sar-cell.copy{opacity:1;transform:none}}

/* ---- Componentes interactivos (assets/animaciones.js) ---- */
.fr{display:inline-flex;flex-direction:column;align-items:center;vertical-align:middle;line-height:1.05;font-size:.78em}
.fr i{font-style:normal;padding:0 2px}.fr i:first-child{border-bottom:1.5px solid currentColor}
.gj-wrap{display:flex;justify-content:center;overflow-x:auto;margin:4px 0 6px}
table.gj-m{display:table;width:auto;border:0;border-radius:0;margin:6px auto;border-spacing:0;font:600 19px var(--serif);background:transparent;overflow:visible}
table.gj-m td,table.gj-m th{border:0;padding:6px 9px;min-width:2.2em;text-align:center;background:transparent;transition:background .3s}
table.gj-m th.gj-lab{font:600 11px var(--sans);color:var(--mut);padding-right:6px;text-align:right}
table.gj-m td.lb{border-left:2px solid var(--fg);border-top-left-radius:6px;border-bottom-left-radius:6px}
table.gj-m td.rb{border-right:2px solid var(--fg);border-top-right-radius:6px;border-bottom-right-radius:6px}
table.gj-m td.bar{border-left:2px dashed var(--mut)}
table.gj-m td.chg{background:color-mix(in srgb,var(--sec) 14%,var(--card))}
table.gj-m td.colhi{background:color-mix(in srgb,var(--mut) 14%,var(--card))}
table.gj-m td.piv{background:color-mix(in srgb,var(--acc) 26%,var(--card));box-shadow:inset 0 0 0 2px var(--acc);border-radius:6px}
table.gj-m td.zer{background:color-mix(in srgb,var(--sec) 30%,var(--card));box-shadow:inset 0 0 0 2px var(--sec);border-radius:6px}
table.gj-m td.inv{background:color-mix(in srgb,#2e9e5b 18%,var(--card))}
table.gj-m td.hr{background:color-mix(in srgb,var(--acc) 22%,var(--card))}
table.gj-m td.hc{background:color-mix(in srgb,var(--sec) 24%,var(--card))}
table.gj-m td.hr.hc{background:color-mix(in srgb,#8e44ad 30%,var(--card))}
table.gj-m td.hx{background:color-mix(in srgb,#2e9e5b 30%,var(--card));box-shadow:inset 0 0 0 2px #2e9e5b;border-radius:6px}
table.gj-m td.el{background:color-mix(in srgb,var(--sec) 30%,var(--card));box-shadow:inset 0 0 0 2px var(--sec);border-radius:6px}
table.gj-m td.dim{color:color-mix(in srgb,var(--fg) 28%,transparent)}
table.gj-m td.mn{background:color-mix(in srgb,var(--acc) 20%,var(--card))}
table.gj-m td.hl{background:color-mix(in srgb,var(--sec) 24%,var(--card));border-radius:6px}
.q{color:var(--mut);opacity:.5}
.gj-op{min-height:1.6em;text-align:center;font:700 14px var(--sans);color:var(--sec);margin-bottom:2px}
.pm-wrap{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 10px;margin:6px 0}
.pm-col{display:flex;flex-direction:column;align-items:center}.pm-col small{font:12px var(--sans);color:var(--mut);margin-top:2px;max-width:12em;text-align:center}
.pm-sym{font:600 26px var(--serif);color:var(--mut)}
.gj-edit{margin:10px 0 0;font:13.5px var(--sans)}.gj-edit summary{cursor:pointer;color:var(--acc);font-weight:600}
.gj-grid{display:grid;gap:6px;justify-content:center;margin:10px 0}
.gj-grid input,.an-in{width:3.2em;padding:5px 4px;border:1px solid var(--bd);border-radius:7px;background:var(--bg);color:var(--fg);font:600 14px var(--sans);text-align:center}
.gj-apply{display:block;margin:0 auto;font:600 13.5px var(--sans);padding:6px 14px;border-radius:8px;border:1px solid var(--acc);background:var(--acc);color:var(--bg);cursor:pointer}
.adj-sel{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;margin-bottom:8px;font:14px var(--sans)}
.adj-sel select{font:600 14px var(--sans);padding:5px 8px;border-radius:8px;border:1px solid var(--bd);background:var(--bg);color:var(--fg)}
.adj-tip{color:var(--mut);font-size:12.5px}
.an-svg{display:block;width:100%;max-width:400px;height:auto;margin:6px auto;background:var(--bg);border:1px solid var(--bd);border-radius:12px}
.an-gr{stroke:color-mix(in srgb,var(--fg) 10%,transparent);stroke-width:1}
.an-ax{stroke:var(--mut);stroke-width:1.6}
.an-tk{font:11px var(--sans);fill:var(--mut)}
.an-vec{stroke-width:3.2;stroke-linecap:round}
.an-vec.down,.an-head.down{stroke:var(--acc);fill:var(--acc)}.an-vec.up,.an-head.up{stroke:var(--sec);fill:var(--sec)}
.an-vec.w,.an-head.w{stroke:#2e9e5b;fill:#2e9e5b}.an-vec.dash{stroke-dasharray:6 5;stroke-width:2.4;opacity:.7}.an-head.dash{opacity:.7}
.an-lb{font:700 15px var(--serif);stroke:none;font-style:italic}.an-lb.down{fill:var(--acc)}.an-lb.up{fill:var(--sec)}.an-lb.w{fill:#2e9e5b}
.an-ln{stroke-width:3.2;stroke-linecap:round;fill:none;opacity:.9}.an-ln.down{stroke:var(--acc)}.an-ln.up{stroke:var(--sec)}.an-ln.zero{stroke:var(--mut)}
.an-dot{fill:#2e9e5b;stroke:var(--bg);stroke-width:2}
.an-poly{stroke-width:2}.an-poly.down{fill:color-mix(in srgb,var(--acc) 22%,transparent);stroke:var(--acc)}.an-poly.up{fill:color-mix(in srgb,var(--sec) 24%,transparent);stroke:var(--sec)}.an-poly.zero{fill:color-mix(in srgb,var(--mut) 14%,transparent);stroke:var(--mut);stroke-dasharray:5 4}
.an-sk{stroke-width:1.2;opacity:.35}.an-sk.down{stroke:var(--acc)}.an-sk.up{stroke:var(--sec)}
.an-eqs{display:flex;flex-wrap:wrap;gap:8px 18px;justify-content:center;margin:6px 0 4px;font:600 15px var(--sans)}
.an-eq{padding:6px 10px;border-radius:10px;border:1.5px solid currentColor}.an-eq.down{color:var(--acc)}.an-eq.up{color:var(--sec)}.an-eq span{color:var(--fg)}
.an-sliders{display:flex;flex-direction:column;gap:6px;max-width:420px;margin:8px auto}
.an-slrow{display:flex;align-items:center;gap:8px;font:600 14px var(--sans)}.an-slrow span{min-width:2.2em}.an-slrow b{min-width:3em;text-align:right}
.an-sl{flex:1;accent-color:var(--acc)}
.an-title{min-height:0}
.an-presets{margin-top:6px}
.oper-t{display:table;width:100%;font:14px var(--sans);margin:8px 0;overflow:hidden}.oper-t td.ok{color:#1f8a4c;font-weight:700}.oper-t td.ko{color:#c0392b;font-weight:700}
@media print{.anim-propios{break-inside:avoid}.gj-edit,.an-sliders,.an-presets{display:none}.an-svg{max-width:60%}}

.an-pair{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:6px 0}
.an-pcol{flex:1 1 250px;max-width:340px;text-align:center;font:13px var(--sans)}.an-pcol .an-svg{margin-top:4px}
.an-fill{stroke:none}.an-fill.ker{fill:color-mix(in srgb,var(--sec) 22%,transparent)}.an-fill.im{fill:color-mix(in srgb,var(--acc) 16%,transparent)}
.an-dot.ker{fill:var(--sec)}
.an-ln.w{stroke:#2e9e5b}.an-ln.dashl{stroke-dasharray:7 6;stroke-width:2.4;opacity:.8}
.an-vec.pur,.an-head.pur{stroke:#8e44ad;fill:#8e44ad}
.an-lb.pur{fill:#8e44ad}
:root[data-theme="dark"] .an-vec.pur,:root[data-theme="dark"] .an-head.pur{stroke:#c39bd3;fill:#c39bd3}
:root[data-theme="dark"] .an-lb.pur{fill:#c39bd3}
.an-head.dash{stroke:none}

/* ---- Figuras 3D (assets/tres-d.js) ---- */
.d3-wrap{position:relative;margin:8px auto;width:fit-content;max-width:100%}
.d3-canvas{display:block;max-width:100%;height:auto!important;background:var(--bg);border:1px solid var(--bd);border-radius:12px;cursor:grab;touch-action:none}
.d3-canvas:active{cursor:grabbing}
.d3-help{position:absolute;left:10px;bottom:8px;font:11.5px var(--sans);color:var(--mut);pointer-events:none}
.d3-mat{display:grid;grid-template-columns:repeat(3,auto);gap:4px;vertical-align:middle;margin:0 6px;padding:2px 8px;border-left:2px solid var(--fg);border-right:2px solid var(--fg);border-radius:6px}
.an-eq{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:2px}
@media print{.d3-help{display:none}.d3-canvas{max-width:70%}}

.an-eq.w{color:#2e9e5b}

.sarrus>.sar-ctrl:first-child{margin-bottom:2px}.sar-ctrl+.sar-prog{margin:8px 0 10px}

@media print{.anim-diag{break-inside:avoid}}

/* ---- Forma de Jordan (animaciones.js: .anim-jordan) y valores propios 3D (tres-d.js: .d3-propios) ---- */
.jd-grid{display:grid;gap:4px;vertical-align:middle;margin:0 6px;padding:2px 8px;border-left:2px solid var(--fg);border-right:2px solid var(--fg);border-radius:6px}
.an-eq select{font:600 14px var(--sans);padding:3px 6px;border-radius:7px;border:1px solid var(--bd);background:var(--bg);color:var(--fg)}
.jd-t{border-collapse:collapse;font:13.5px var(--sans);margin:4px auto;max-width:100%}
.jd-t th,.jd-t td{padding:3px 9px;border:1px solid var(--bd);text-align:center}
.jd-t th{background:color-mix(in srgb,var(--acc) 10%,var(--card))}
.an-jordan .pm-wrap{margin:4px 0}
.an-jordan table.gj-m td.hr,.an-jordan table.gj-m td.hc{font-weight:600}
.an-jordan table.gj-m td.hc{background:color-mix(in srgb,var(--sec) 24%,var(--card))}
@media (max-width:480px){.an-jordan .sar-text{font-size:14.5px}.jd-t{font-size:12.5px}.jd-t th,.jd-t td{padding:3px 5px}}
@media print{.anim-jordan,.d3-propios{break-inside:avoid}.d3-propios .an-sliders{display:none}}

/* ---- Producto escalar (animaciones.js: .anim-gram) y proyección ortogonal / Gram-Schmidt 3D (tres-d.js: .d3-proy) ---- */
.an-vec.gr,.an-head.gr{stroke:var(--mut);fill:var(--mut)}
.anim-gram svg .an-vec.gr{stroke-dasharray:2 4}.anim-gram svg .an-head.gr{stroke-dasharray:none}
@media print{.anim-gram,.d3-proy{break-inside:avoid}.d3-proy .an-sliders{display:none}}

/* ---- 5.2 matrices ortogonales: anim-ortog (2D) y d3-rot (3D) ---- */
.an-poly{fill:color-mix(in srgb,var(--acc) 16%,transparent);stroke:var(--acc);stroke-width:2.2;stroke-linejoin:round}
.an-poly.gr{fill:none;stroke:var(--mut);stroke-dasharray:5 4;stroke-width:1.6}
.an-poly.bad{fill:color-mix(in srgb,#d9434a 14%,transparent);stroke:#d9434a}
.an-lb.gr{fill:var(--mut)}
/* vectores originales punteados (gris) en anim-ortog */
.anim-ortog svg .an-vec.gr{stroke-dasharray:2 4}.anim-ortog svg .an-head.gr{stroke-dasharray:none}
@media print{.anim-ortog,.d3-rot{break-inside:avoid}.d3-rot .an-sliders,.anim-ortog .an-sliders{display:none}}

/* ---- 5.3 matrices simétricas: anim-simet (2D) y d3-ejes (3D) ---- */
.an-ro{display:inline-block;min-width:3.6em;padding:5px 4px;text-align:center;font:600 14px var(--sans);color:var(--mut);border:1px dashed var(--bd);border-radius:7px}
.anim-simet .an-vec.dash{stroke-width:2}
@media (max-width:480px){.anim-simet .an-in{width:2.9em;padding:5px 2px}.anim-simet .an-eq{gap:1px}}
.anim-simet svg .an-vec.gr{stroke-dasharray:2 4}.anim-simet svg .an-head.gr{stroke-dasharray:none}
.an-slrow input[type=checkbox]{width:1.1em;height:1.1em;accent-color:var(--acc)}
@media (max-width:480px){.d3-ejes .d3-mat input,.d3-ejes .an-ro{width:3.1em;min-width:0}}
@media print{.anim-simet,.d3-ejes{break-inside:avoid}.d3-ejes .an-sliders,.anim-simet .an-sliders{display:none}}

/* ---- 5.4 mínimos cuadrados: anim-minimos (2D) y d3-minimos (3D) ---- */
.anim-minimos .an-eqs{gap:6px 10px}
.anim-minimos .an-eq .an-in{width:3.4em}
.anim-minimos .an-ln.dashl{stroke-dasharray:7 6;opacity:.85}
@media (max-width:480px){.anim-minimos .an-in{width:3em;padding:5px 2px}.anim-minimos .an-eq{gap:1px;padding:5px 6px}}
@media print{.anim-minimos,.d3-minimos{break-inside:avoid}.d3-minimos .an-sliders,.anim-minimos .an-sliders{display:none}}

/* ---- 6.1 formas bilineales: anim-bilineal (2D) ---- */
.anim-bilineal .an-eqs{gap:6px 10px}
.anim-bilineal .an-eq .an-in{width:3.2em}
.anim-bilineal svg .an-vec.gr{stroke-dasharray:2 4}.anim-bilineal svg .an-head.gr{stroke-dasharray:none}
@media (max-width:480px){.anim-bilineal .an-in{width:2.9em;padding:5px 2px}.anim-bilineal .an-eq{gap:1px;padding:5px 6px}}
@media print{.anim-bilineal{break-inside:avoid}.anim-bilineal .an-sliders{display:none}}

/* ---- 1.4 factorización LU: anim-lu ---- */
.lu-wrap{gap:6px 10px;align-items:center;flex-wrap:wrap}
.lu-blk{display:flex;flex-direction:column;align-items:center}
.lu-sym{font:700 15px var(--sans);color:var(--mut)}
.lu-wrap>.lu-sym{font-size:24px}
@media (max-width:480px){.an-lu table.gj-m{font-size:15px}.an-lu table.gj-m td{padding:4px 5px;min-width:1.6em}}
@media print{.an-lu{break-inside:avoid}.an-lu .gj-edit{display:none}}

/* ---- 6.2 formas cuadráticas: anim-cuadratica (2D) ---- */
.anim-cuadratica .an-eqs{gap:6px 10px}
.anim-cuadratica .an-eq .an-in{width:3.2em}
.anim-cuadratica .an-note{margin-left:2px}
@media (max-width:480px){.anim-cuadratica .an-note{flex-basis:100%;display:block;margin:2px 0 0}}
.anim-cuadratica svg .an-vec.gr{stroke-dasharray:2 4}.anim-cuadratica svg .an-head.gr{stroke-dasharray:none}
@media (max-width:480px){.anim-cuadratica .an-in{width:2.9em;padding:5px 2px}.anim-cuadratica .an-eq{gap:1px;padding:5px 6px}}
@media print{.anim-cuadratica{break-inside:avoid}.anim-cuadratica .an-sliders{display:none}}

/* ---- 6.3 clasificación: anim-clasif (2D) y d3-nivel (3D) ---- */
.anim-clasif .an-eqs{gap:6px 10px}
.anim-clasif .an-eq .an-in{width:3.6em}
.anim-clasif svg .an-vec.gr{stroke-dasharray:2 4}.anim-clasif svg .an-head.gr{stroke-dasharray:none}
@media (max-width:480px){.anim-clasif .an-in,.d3-nivel .d3-mat input,.d3-nivel .an-ro{width:3.1em;min-width:0;padding:5px 2px}.anim-clasif .an-eq{gap:1px;padding:5px 6px}}
@media print{.anim-clasif,.d3-nivel{break-inside:avoid}.d3-nivel .an-sliders{display:none}}

/* ---- 6.4 cónicas: anim-conica (2D) ---- */
.anim-conica .an-eqs{gap:6px 10px}
.anim-conica .an-eq .an-in{width:3.4em}
@media (max-width:480px){.anim-conica .an-in{width:2.7em;padding:5px 2px}.anim-conica .an-eq{gap:1px;padding:5px 6px}}
@media print{.anim-conica{break-inside:avoid}.anim-conica .an-presets{display:none}}

/* ---- 6.5 cuádricas: d3-cuadrica (3D) ---- */
.d3-cuadrica .an-eq .an-in{width:3.6em}
.d3-cuadrica .an-eq.w{flex-wrap:wrap}
@media (max-width:480px){.d3-cuadrica .d3-mat input,.d3-cuadrica .an-ro,.d3-cuadrica .an-eq .an-in{width:3.1em;min-width:0;padding:5px 2px}.d3-cuadrica .an-eq{gap:1px;padding:5px 6px}}
@media print{.d3-cuadrica{break-inside:avoid}.d3-cuadrica .an-sliders,.d3-cuadrica .an-presets{display:none}}
