:root{--bg:#fafbfe;--surface:#ffffff;--ink:#1c1947;--ink-2:#4a4774;--line:#dcddeb;--line-strong:#b9bad3;--unam:#c42d68;--unam-soft:#fbeaf1;--accent:#5b34d6;--accent-ink:#4a27b8;--accent-soft:#efeafd;--ok:#17734a;--ok-soft:#e6f4ec;--bad:#b3261e;--bad-soft:#fcebea;--warn:#8a5300;--warn-soft:#fff3df;--radius:12px;--radius-sm:8px;--shadow:0 1px 2px rgba(28,25,71,0.06),0 4px 16px rgba(28,25,71,0.06);--font-title:"Archivo",system-ui,sans-serif;--font-text:"Atkinson Hyperlegible",system-ui,-apple-system,"Segoe UI",sans-serif;--gutter:16px;color-scheme:light}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-text);font-size:1.0625rem;line-height:1.55;min-height:100dvh;display:flex;flex-direction:column}main{flex:1 1;min-width:0;width:100%}h1,h2,h3{font-family:var(--font-title);font-stretch:112%;font-variation-settings:"wdth" 112;font-weight:800;line-height:1.12;letter-spacing:-.01em;margin:0 0 .5em;text-wrap:balance}h1{font-size:clamp(1.75rem,5vw,2.5rem)}h2{font-size:clamp(1.3rem,3.6vw,1.6rem)}h3{font-size:1.1rem}p{margin:0 0 1em}a{color:var(--accent-ink);text-underline-offset:3px}a:hover{color:var(--ink)}:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:4px}.sr-only{width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip,.sr-only{position:absolute}.skip{left:8px;top:-60px;background:var(--ink);color:#fff;padding:8px 14px;border-radius:var(--radius-sm);z-index:100}.skip:focus{top:8px;color:#fff}.wrap{width:100%;max-width:1080px;margin:0 auto;padding:0 var(--gutter)}.wrap-narrow{max-width:460px}.demo-banner{background:var(--warn-soft);color:var(--warn);border-bottom:1px solid #f0d6a8;font-size:.92rem;padding:8px var(--gutter);text-align:center}.demo-banner strong{font-family:var(--font-title);font-stretch:112%;letter-spacing:.02em;text-transform:uppercase;margin-right:6px}.site-header{background:var(--surface);border-bottom:1px solid var(--line)}.site-header .wrap{justify-content:space-between;gap:12px;min-height:60px}.brand,.site-header .wrap{display:flex;align-items:center}.brand{gap:10px;text-decoration:none;color:var(--ink)}.brand-mark{font-family:var(--font-title);font-stretch:112%;font-weight:800;font-size:1.08rem;letter-spacing:-.01em}.brand-mark span{color:var(--accent)}.chip-unam{display:inline-block;font-size:.75rem;font-weight:700;color:var(--unam);background:var(--unam-soft);border-radius:999px;padding:2px 10px;white-space:nowrap}.header-actions{display:flex;align-items:center;gap:8px;font-size:.92rem}.header-email{color:var(--ink-2);max-width:22ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:560px){.chip-unam,.header-email{display:none}}.site-footer{border-top:1px solid var(--line);margin-top:48px;padding:20px 0 28px;color:var(--ink-2);font-size:.88rem}.site-footer p{margin:0 0 4px}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:10px 20px;border-radius:var(--radius-sm);border:1px solid transparent;background:var(--accent);color:#fff;font:inherit;font-weight:700;text-decoration:none;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .1s ease}.btn:hover{background:var(--accent-ink);color:#fff}.btn:active{transform:translateY(1px)}.btn[aria-disabled=true],.btn[disabled]{opacity:.55;cursor:not-allowed}.btn-secondary{background:var(--surface);color:var(--ink);border-color:var(--line-strong)}.btn-secondary:hover{background:var(--accent-soft);color:var(--ink);border-color:var(--accent)}.btn-ghost{background:transparent;color:var(--ink);border-color:transparent;min-height:40px;padding:8px 12px}.btn-ghost:hover{background:var(--accent-soft);color:var(--ink)}.btn-unam{background:var(--unam)}.btn-unam:hover{background:#a3204f}.btn-block{width:100%}.btn-sm{min-height:38px;padding:6px 14px;font-size:.92rem}.field{display:grid;grid-gap:6px;gap:6px;margin-bottom:16px}.field label{font-weight:700}.field input{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-sm);min-height:48px;padding:10px 14px;width:100%}.field input:focus-visible{border-color:var(--accent)}.pass{position:relative}.pass input{padding-right:52px}.pass-ver{position:absolute;top:0;right:0;width:48px;height:100%;display:grid;place-items:center;background:none;border:0;color:var(--ink-2);cursor:pointer;border-radius:0 var(--radius-sm) var(--radius-sm) 0}.pass-ver:hover,.pass-ver[aria-pressed=true]{color:var(--ink)}.pass-ver:focus-visible{outline:2px solid var(--accent);outline-offset:-4px}.hint{font-size:.9rem;color:var(--ink-2)}.alert{border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:16px;font-size:.97rem;border:1px solid}.alert-error{background:var(--bad-soft);border-color:#f1c3bf;color:var(--bad)}.alert-ok{background:var(--ok-soft);border-color:#bfe3cf;color:var(--ok)}.alert-info{background:var(--accent-soft);border-color:#d6cbf8;color:var(--ink)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.auth-page{padding-top:40px;padding-bottom:24px}.auth-page h1{margin-bottom:6px}.auth-page .lead{color:var(--ink-2);margin-bottom:24px}.auth-links{margin-top:16px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;font-size:.95rem}.eyebrow{font-size:.8rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--unam);margin-bottom:8px}.page{padding-top:28px}.page-head{margin-bottom:24px}.page-head p{color:var(--ink-2);max-width:62ch}.grid-exams{display:grid;grid-gap:14px;gap:14px;grid-template-columns:1fr}@media (min-width:640px){.grid-exams{grid-template-columns:repeat(2,1fr)}}@media (min-width:980px){.grid-exams{grid-template-columns:repeat(4,1fr)}}.exam-card{display:flex;flex-direction:column;gap:10px;position:relative;overflow:hidden}.exam-card:before{content:"";position:absolute;inset:0 0 auto 0;height:4px;background:var(--accent)}.exam-card.extra:before{background:var(--unam)}.exam-card.off{box-shadow:none;background:transparent;border-style:dashed}.exam-card.off:before{background:var(--line)}.exam-letter{font-family:var(--font-title);font-stretch:112%;font-weight:800;font-size:2.6rem;line-height:1;color:var(--ink)}.exam-card .meta{color:var(--ink-2);font-size:.93rem;margin:0}.exam-card .actions{margin-top:auto;padding-top:6px}.badge{display:inline-flex;align-items:center;gap:6px;font-size:.82rem;font-weight:700;border-radius:999px;padding:3px 10px;width:-moz-fit-content;width:fit-content}.badge:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}.badge-new{background:#f0f0f6;color:var(--ink-2)}.badge-progress{background:var(--warn-soft);color:var(--warn)}.badge-done{background:var(--ok-soft);color:var(--ok)}.best{font-size:.95rem}.best strong{font-family:var(--font-title);font-stretch:112%;font-size:1.15rem}.section{margin-top:40px}.table-wrap{position:relative;max-width:100%;overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}table.hist{width:100%;border-collapse:collapse;font-size:.95rem}table.hist td,table.hist th{text-align:left;padding:12px 14px;border-bottom:1px solid var(--line);white-space:nowrap}table.hist th{font-size:.82rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-2);background:#f5f6fb}table.hist tr:last-child td{border-bottom:0}.empty{color:var(--ink-2);padding:20px;border:1px dashed var(--line-strong);border-radius:var(--radius);text-align:center}.exam-top{position:-webkit-sticky;position:sticky;top:0;z-index:20;background:rgba(250,251,254,.96);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-bottom:1px solid var(--line)}.exam-top .wrap{display:flex;align-items:center;gap:12px;min-height:58px;flex-wrap:wrap;padding-top:6px;padding-bottom:6px}.exam-title{font-family:var(--font-title);font-stretch:112%;font-weight:800;font-size:1rem;margin:0;flex:1 1;min-width:0}.exam-title small{display:block;font-family:var(--font-text);font-weight:400;color:var(--ink-2);font-size:.85rem}.timer{font-family:var(--font-title);font-stretch:112%;font-weight:800;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:1.2rem;padding:4px 12px;border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--line)}.timer.low{color:var(--bad);border-color:#f1c3bf;background:var(--bad-soft)}.progress{height:4px;background:var(--line);width:100%}.progress>span{display:block;height:100%;background:var(--accent);transition:width .2s ease}.save-state{font-size:.85rem;color:var(--ink-2);min-width:8ch}.save-state.err{color:var(--bad);font-weight:700}.exam-layout{display:grid;grid-gap:20px;gap:20px;padding-top:20px;padding-bottom:110px}@media (min-width:980px){.exam-layout{grid-template-columns:minmax(0,1fr) 320px;align-items:start;padding-bottom:40px}}.q-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;color:var(--ink-2);font-size:.92rem;margin-bottom:10px}.q-num{font-family:var(--font-title);font-stretch:112%;font-weight:800;color:var(--ink)}.q-materia{color:var(--unam);font-weight:700}.q-text{font-size:1.12rem;white-space:pre-line;margin-bottom:18px}fieldset.options{border:0;padding:0;margin:0;display:grid;grid-gap:10px;gap:10px}.option{display:flex;gap:12px;align-items:flex-start;padding:14px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;transition:border-color .12s ease,background .12s ease}.option:hover{border-color:var(--accent)}.option input{position:absolute;opacity:0;width:1px;height:1px}.option .letter{flex:none;width:32px;height:32px;border-radius:50%;border:1.5px solid var(--line-strong);display:grid;place-items:center;font-weight:700;font-size:.95rem;color:var(--ink-2)}.option .txt{padding-top:4px}.option.sel{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}.option.sel .letter{background:var(--accent);border-color:var(--accent);color:#fff}.option:has(input:focus-visible){outline:3px solid var(--accent);outline-offset:2px}.q-tools{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.mark-on{border-color:#e7c487}.mark-on,.mark-on:hover{background:var(--warn-soft);color:var(--warn)}.q-nav{display:flex;gap:10px;justify-content:space-between}@media (max-width:979px){.q-nav{position:fixed;left:0;right:0;bottom:0;z-index:25;background:var(--surface);border-top:1px solid var(--line);padding:10px var(--gutter) calc(10px + env(safe-area-inset-bottom))}.q-nav .btn{flex:1 1;padding:10px 8px;white-space:nowrap}}@media (min-width:980px){.q-nav{margin-top:20px}}.map h2{font-size:1rem;margin-bottom:4px}.map-legend{display:flex;flex-wrap:wrap;gap:10px;font-size:.82rem;color:var(--ink-2);margin:8px 0 12px}.map-legend span{display:inline-flex;align-items:center;gap:5px}.sw{width:12px;height:12px;border-radius:3px;border:1px solid var(--line-strong);background:var(--surface)}.sw.a{background:var(--accent);border-color:var(--accent)}.sw.m{background:var(--warn-soft);border-color:#d89a2b;border-width:2px}.map-group{margin-bottom:10px}.map-group h3{font-family:var(--font-text);font-stretch:100%;font-variation-settings:normal;font-weight:700;font-size:.8rem;color:var(--ink-2);margin:0 0 6px}.map-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(38px,1fr));grid-gap:5px;gap:5px}.map-cell{-webkit-appearance:none;-moz-appearance:none;appearance:none;font:inherit;font-size:.82rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;min-height:38px;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);color:var(--ink);cursor:pointer;position:relative}.map-cell.ans{background:var(--accent);border-color:var(--accent);color:#fff}.map-cell.mark{box-shadow:inset 0 0 0 2px #d89a2b}.map-cell.mark:after{content:"";position:absolute;top:3px;right:3px;width:6px;height:6px;background:#d89a2b;border-radius:50%}.map-cell.cur{outline:2px solid var(--ink);outline-offset:1px}.map-summary{font-size:.9rem;color:var(--ink-2);margin:12px 0}@media (min-width:980px){.map{position:-webkit-sticky;position:sticky;top:78px;max-height:calc(100dvh - 96px);overflow:auto}}details.map-mobile>summary{cursor:pointer;font-weight:700;list-style:none;display:flex;justify-content:space-between;align-items:center}details.map-mobile>summary::-webkit-details-marker{display:none}details.map-mobile>summary:after{content:"▾";color:var(--ink-2)}details.map-mobile[open]>summary:after{content:"▴"}dialog.confirm{border:1px solid var(--line);border-radius:var(--radius);padding:22px;max-width:min(440px,calc(100vw - 32px));color:var(--ink);box-shadow:0 20px 60px rgba(28,25,71,.25)}dialog.confirm::-webkit-backdrop{background:rgba(28,25,71,.45)}dialog.confirm::backdrop{background:rgba(28,25,71,.45)}.dialog-actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:16px}.start{max-width:680px;padding-top:28px}.start ul{padding-left:1.2em}.start li{margin-bottom:6px}.score-hero{display:grid;grid-gap:16px;gap:16px;grid-template-columns:1fr;margin-bottom:28px}@media (min-width:720px){.score-hero{grid-template-columns:repeat(3,1fr)}}.stat .label{font-size:.85rem;color:var(--ink-2);font-weight:700;text-transform:uppercase;letter-spacing:.05em}.stat .value{font-family:var(--font-title);font-stretch:112%;font-weight:800;font-size:2.2rem;line-height:1.1}.stat .value small{font-size:1rem;color:var(--ink-2);font-weight:700}.bars{display:grid;grid-gap:12px;gap:12px}.bar-row{display:grid;grid-template-columns:1fr auto;grid-gap:4px 12px;gap:4px 12px;align-items:center}.bar-row .name{font-weight:700;font-size:.95rem}.bar-row .num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:.92rem;color:var(--ink-2)}.bar-track{grid-column:1/-1;height:10px;border-radius:999px;background:#ecedf5;overflow:hidden}.bar-fill{height:100%;border-radius:999px;background:var(--accent)}.bar-fill.low{background:var(--unam)}.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin:12px 0 18px}.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface)}.seg button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;font:inherit;font-size:.93rem;padding:9px 14px;min-height:42px;color:var(--ink);cursor:pointer}.seg button+button{border-left:1px solid var(--line-strong)}.seg button[aria-pressed=true]{background:var(--ink);color:#fff;font-weight:700}.select-wrap{display:grid;grid-gap:4px;gap:4px;font-size:.85rem;font-weight:700}.select-wrap select{font:inherit;font-weight:400;min-height:42px;padding:6px 10px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink)}.review-list{display:grid;grid-gap:14px;gap:14px;list-style:none;padding:0;margin:0}.review-item .verdict{font-weight:700;font-size:.88rem;padding:2px 10px;border-radius:999px}.verdict.ok{background:var(--ok-soft);color:var(--ok)}.verdict.bad{background:var(--bad-soft);color:var(--bad)}.verdict.none{background:#f0f0f6;color:var(--ink-2)}.r-opts{list-style:none;padding:0;margin:12px 0;display:grid;grid-gap:8px;gap:8px}.r-opt{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;display:grid;grid-template-columns:30px 1fr;grid-gap:2px 10px;gap:2px 10px}.r-opt .letter{font-weight:700;color:var(--ink-2)}.r-opt .why{grid-column:2;font-size:.93rem;color:var(--ink-2)}.r-opt .tag{font-size:.8rem;font-weight:700;margin-left:6px}.r-opt.correct{border-color:#8fcfac;background:var(--ok-soft)}.r-opt.correct .tag{color:var(--ok)}.r-opt.wrong{border-color:#eba7a1;background:var(--bad-soft)}.r-opt.wrong .tag{color:var(--bad)}.explain{border-left:3px solid var(--accent);padding:4px 0 4px 12px;margin:0}.explain strong{display:block;font-size:.85rem;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-ink)}@media (prefers-reduced-motion:reduce){*,:after,:before{transition:none!important;animation:none!important;scroll-behavior:auto!important}}@media (max-width:979px){.map-escritorio{display:none}}@media (min-width:980px){.mapa-movil{display:none}}dialog.confirm .map-grid{grid-template-columns:repeat(auto-fill,minmax(40px,1fr))}