@font-face{font-family:Plex Sans;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/plex-sans-var.woff2) format("woff2")}@font-face{font-family:Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/plex-mono-400.woff2) format("woff2")}@font-face{font-family:Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/plex-mono-500.woff2) format("woff2")}@font-face{font-family:Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/plex-mono-600.woff2) format("woff2")}:root{--bg: #eef1e6;--surface: #f8f9f2;--surface-2: #e6eada;--ink: #1c231c;--ink-muted: #565f52;--line: #c7d0be;--line-strong: #aeb9a2;--accent: #2c4a72;--accent-strong: #1e3555;--accent-tint: #dce4ee;--present-bg: #dcefde;--present-text: #1e5631;--present-dot: #3f7d54;--absent-bg: #f7deda;--absent-text: #7c2e22;--absent-dot: #b0453a;--late-bg: #f3e6c4;--late-text: #6b4a0e;--late-dot: #b9832a;--excused-bg: #e1e3f0;--excused-text: #3a3f72;--excused-dot: #5d6591;--sched-0-bg: hsl(30 55% 89%);--sched-0-text: hsl(30 60% 28%);--sched-1-bg: hsl(55 55% 87%);--sched-1-text: hsl(55 55% 26%);--sched-2-bg: hsl(100 40% 87%);--sched-2-text: hsl(100 40% 26%);--sched-3-bg: hsl(170 45% 86%);--sched-3-text: hsl(170 50% 24%);--sched-4-bg: hsl(195 55% 88%);--sched-4-text: hsl(195 60% 27%);--sched-5-bg: hsl(260 45% 90%);--sched-5-text: hsl(260 40% 35%);--sched-6-bg: hsl(300 40% 90%);--sched-6-text: hsl(300 40% 32%);--sched-7-bg: hsl(340 55% 90%);--sched-7-text: hsl(340 50% 32%);--radius-sm: 4px;--radius-md: 6px;--radius-lg: 10px;--touch-min: 3rem;--font-sans: "Plex Sans", -apple-system, "Segoe UI", sans-serif;--font-mono: "Plex Mono", ui-monospace, monospace;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}h1,h2,h3{font-weight:700;text-wrap:balance;margin:0}p{margin:0}button,input,select{font-family:inherit}a{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.boot-screen{min-height:100vh}.app-shell{display:flex;height:100vh;height:100dvh}.sidebar{display:none;width:220px;flex:none;flex-direction:column;gap:.15rem;padding:1rem .75rem;border-right:1px solid var(--line);background:var(--surface)}.sidebar-brand{font-weight:700;font-size:1.05rem;padding:.5rem .6rem 1.1rem}.nav-item{display:flex;align-items:center;gap:.7rem;padding:.7rem .75rem;border-radius:var(--radius-sm);color:var(--ink-muted);font-size:.92rem;font-weight:500;text-decoration:none}.nav-item .icon{width:1.2rem;height:1.2rem;flex:none}.nav-item.active{background:var(--accent-tint);color:var(--accent);font-weight:600;position:relative}.nav-item.active:before{content:"";position:absolute;left:-.75rem;top:.35rem;bottom:.35rem;width:3px;background:var(--accent);border-radius:2px}.main-area{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem;border-bottom:1px solid var(--line);background:var(--surface)}.topbar-title{font-weight:700;font-size:1.05rem}.topbar-user{display:flex;align-items:center;gap:.75rem;font-size:.85rem;color:var(--ink-muted)}.content{flex:1;min-height:0;padding:1.5rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.tabbar{display:flex;border-top:1px solid var(--line);background:var(--surface);position:sticky;bottom:0}.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:.3rem;padding:.65rem .25rem calc(.8rem + env(safe-area-inset-bottom));color:var(--ink-muted);font-size:.68rem;font-weight:500;min-height:var(--touch-min);text-decoration:none}.tab-item .icon{width:1.3rem;height:1.3rem}.tab-item.active{color:var(--accent);font-weight:600}@media(min-width:860px){.sidebar{display:flex}.tabbar{display:none}}@media(max-width:859.98px){.sidebar{display:none}.tabbar{display:flex}}.group-label{font-weight:600;font-size:.85rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.04em;margin:1.25rem 0 .6rem}.orden-btns{display:flex;flex-direction:column;gap:2px}.orden-btn{font-family:inherit;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-muted);border-radius:var(--radius-sm);width:1.9rem;height:1.6rem;font-size:.7rem;line-height:1;cursor:pointer}.orden-btn:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.orden-btn:disabled{opacity:.3;cursor:not-allowed}.btn{font-family:inherit;font-size:.95rem;font-weight:600;border-radius:var(--radius-sm);min-height:var(--touch-min);padding:0 1.5rem;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;cursor:pointer;transition:background-color .12s ease,transform 80ms ease}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--surface)}.btn-primary:hover:not(:disabled){background:var(--accent-strong)}.btn-secondary{background:transparent;color:var(--ink);border-color:var(--line-strong)}.btn-secondary:hover:not(:disabled){background:var(--surface-2)}.field{display:flex;flex-direction:column;gap:.35rem;font-size:.88rem;font-weight:600;color:var(--ink-muted);margin-bottom:1rem}.field input,.field select{font-size:1rem;font-weight:400;padding:0 .8rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);min-height:var(--touch-min)}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.login-card{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:2rem 1.75rem;display:flex;flex-direction:column}.login-brand{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-muted);margin:0 0 .5rem}.login-card h1{font-size:1.5rem;margin:0 0 1.5rem}.login-error{color:var(--absent-text);background:var(--absent-bg);border-radius:var(--radius-sm);padding:.6rem .8rem;font-size:.85rem;margin:0 0 1rem}.chip{display:inline-flex;align-items:center;gap:.5rem;padding:.4rem .8rem;border-radius:999px;font-size:.85rem;font-weight:600}.chip-dot{width:.55rem;height:.55rem;border-radius:50%;flex:none}.chip.present{background:var(--present-bg);color:var(--present-text)}.chip.present .chip-dot{background:var(--present-dot)}.chip.absent{background:var(--absent-bg);color:var(--absent-text)}.chip.absent .chip-dot{background:var(--absent-dot)}.chip.late{background:var(--late-bg);color:var(--late-text)}.chip.late .chip-dot{background:var(--late-dot)}.chip.excused{background:var(--excused-bg);color:var(--excused-text)}.chip.excused .chip-dot{background:var(--excused-dot)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:1.5rem}.config-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.25rem;margin-top:1.5rem;align-items:start}.filtro-input{display:block;width:100%;min-height:2.75rem;padding:0 .85rem;margin-bottom:.85rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--bg);color:var(--ink);font-size:.9rem;font-family:inherit}.card-title{font-weight:700;font-size:1.05rem;margin:0 0 1rem}.inline-form{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1.1rem}.inline-form input,.inline-form select{flex:1 1 10rem;min-height:2.75rem;padding:0 .75rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--bg);color:var(--ink);font-size:.9rem;font-family:inherit}.inline-form .btn{min-height:2.75rem;padding:0 1.1rem}.password-form{display:flex;flex-direction:column;gap:.6rem;max-width:22rem}.password-form input{min-height:2.75rem;padding:0 .75rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--bg);color:var(--ink);font-size:.9rem;font-family:inherit}.password-form .btn{align-self:flex-start;min-height:2.75rem;padding:0 1.1rem}.config-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.config-list li{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.7rem 0;border-bottom:1px solid var(--line);font-size:.92rem}.config-list li:last-child{border-bottom:none}.config-list a{color:var(--ink);font-weight:600;text-decoration:none}.config-list a:hover{color:var(--accent)}.config-empty{color:var(--ink-muted);font-size:.88rem;padding:.5rem 0}.config-meta{color:var(--ink-muted);font-weight:400;font-size:.85rem}.config-list-main{display:flex;align-items:baseline;gap:.6rem;min-width:0;overflow:hidden}.config-list-actions{display:flex;gap:.25rem;flex:none}.btn-link,.btn-link-danger{background:none;border:none;font-size:.82rem;font-weight:600;cursor:pointer;padding:.4rem .5rem;flex:none}.btn-link{color:var(--accent)}.btn-link-danger{color:var(--absent-text)}.btn-link:hover,.btn-link-danger:hover{text-decoration:underline}.back-link{display:inline-block;color:var(--ink-muted);font-size:.85rem;font-weight:600;text-decoration:none;margin-bottom:1rem}.back-link:hover{color:var(--accent)}.ponderacion-banner{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem .9rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:600;margin:.75rem 0 1.25rem}.ponderacion-banner.ok{background:var(--present-bg);color:var(--present-text)}.ponderacion-banner.warn{background:var(--late-bg);color:var(--late-text)}table.config-table{width:100%;border-collapse:collapse;font-size:.9rem;margin-bottom:1.25rem}table.config-table th{text-align:left;font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-muted);padding:.5rem .6rem;border-bottom:1px solid var(--line-strong)}table.config-table td{padding:.55rem .6rem;border-bottom:1px solid var(--line)}table.config-table td.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.captura-selectores{display:flex;flex-wrap:wrap;gap:.75rem;margin:1.25rem 0 1.5rem}.captura-selectores select{min-height:var(--touch-min);padding:0 .9rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);font-size:.92rem;min-width:12rem}.calif-page{display:flex;flex-direction:column;height:100%;min-height:0}.grades-frame{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:auto;flex:1;min-height:0}table.grades-table{width:100%;border-collapse:collapse;font-size:.9rem}table.grades-table thead th{position:sticky;top:0;z-index:2;text-align:center;background:var(--surface-2);padding:.7rem .75rem;font-weight:600;font-size:.8rem;border-bottom:2px solid var(--line-strong);white-space:nowrap}table.grades-table thead th.col-alumno{text-align:left;position:sticky;left:0;z-index:3}table.grades-table thead th .pct{display:block;font-family:var(--font-mono);font-weight:400;color:var(--ink-muted);font-size:.72rem}table.grades-table tbody td{padding:.4rem .6rem;border-bottom:1px solid var(--line);background:var(--surface);text-align:right}table.grades-table tbody td.col-alumno{text-align:left;position:sticky;left:0;z-index:1;background:var(--surface);font-weight:600;white-space:nowrap}table.grades-table tbody td.col-alumno .matricula{font-weight:400;color:var(--ink-muted);font-size:.78rem;margin-left:.4rem}table.grades-table tbody tr:last-child td{border-bottom:none}table.grades-table td.col-total{background:var(--accent-tint);font-family:var(--font-mono);font-weight:600;font-variant-numeric:tabular-nums}table.grades-table td.col-total-ok{background:var(--present-bg);color:var(--present-text)}table.grades-table td.col-total-bajo{background:var(--absent-bg);color:var(--absent-text)}.total-dec{display:block;font-size:.65rem;font-weight:400;opacity:.7}.firmas-cell{display:inline-flex;align-items:baseline;gap:.4rem}.firmas-equiv{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);white-space:nowrap;min-width:3.2rem}.grade-input{width:4rem;min-height:2.5rem;text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg);color:var(--ink);padding:0 .5rem;transition:border-color .15s ease,box-shadow .15s ease}.grade-input.is-saving{border-color:var(--accent)}.grade-input.is-saved{border-color:var(--present-dot);box-shadow:0 0 0 1px var(--present-dot)}.grade-input.is-error{border-color:var(--absent-dot);box-shadow:0 0 0 1px var(--absent-dot)}.grade-input.is-queued{border-style:dashed;border-color:var(--late-dot)}.cumple-toggle{display:inline-flex;gap:.35rem;border-radius:var(--radius-sm);transition:box-shadow .15s ease}.cumple-toggle .chip-btn{min-height:var(--touch-min);padding:.35rem .6rem;font-size:.78rem}.cumple-toggle.is-saved{box-shadow:0 0 0 1px var(--present-dot)}.cumple-toggle.is-error{box-shadow:0 0 0 1px var(--absent-dot)}.cumple-toggle.is-queued{box-shadow:0 0 0 1px var(--late-dot)}.chip-btn{font-family:inherit;border:2px solid transparent;cursor:pointer;opacity:.45;transition:opacity .12s ease,border-color .12s ease;min-height:var(--touch-min)}.chip-btn.selected{opacity:1}.chip-btn.present.selected{border-color:var(--present-dot)}.chip-btn.absent.selected{border-color:var(--absent-dot)}.chip-btn.late.selected{border-color:var(--late-dot)}.chip-btn.excused.selected{border-color:var(--excused-dot)}.chip-btn:hover{opacity:.8}.asistencia-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin:1.25rem 0 .5rem}.asistencia-toolbar input[type=date]{min-height:var(--touch-min);padding:0 .9rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);font-size:.92rem}.dirty-banner{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem .9rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:600;background:var(--late-bg);color:var(--late-text);margin:.5rem 0 1rem}.asistencia-list{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface)}.asistencia-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.75rem;padding:.85rem 1.1rem;border-bottom:1px solid var(--line)}.asistencia-row:last-child{border-bottom:none}.asistencia-row .chip-row{display:flex;flex-wrap:wrap;gap:.5rem}.placeholder-page h1{font-size:1.6rem;margin-bottom:.5rem}.placeholder-page p{color:var(--ink-muted);max-width:60ch}.horario-form{display:flex;flex-direction:column;gap:.6rem;margin-bottom:1.1rem}.horario-form select{width:100%;min-height:2.75rem;padding:0 .75rem;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--bg);color:var(--ink);font-size:.9rem;font-family:inherit}.horario-form-horas{display:flex;flex-wrap:wrap;gap:.6rem}.horario-form-horas select{flex:1 1 7rem;width:auto}.horario-form-horas .btn{min-height:2.75rem;padding:0 1.1rem}.horario-frame{border:1px solid var(--line);border-radius:var(--radius-lg);overflow-x:auto;background:var(--surface);margin-top:1.25rem}table.horario-table{width:100%;min-width:46rem;border-collapse:separate;border-spacing:0;font-size:.86rem}.horario-table th,.horario-table td{border-bottom:1px solid var(--line);border-right:1px solid var(--line)}.horario-table th:last-child,.horario-table td:last-child{border-right:none}.horario-table thead th{text-align:center;font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-muted);padding:.7rem .5rem;background:var(--surface-2);position:relative}.horario-table thead th:first-child{background:transparent;border-right:none;border-bottom:none}.horario-table th.horario-dia-hoy{color:var(--accent);background:var(--accent-tint);border-top:3px solid var(--accent);border-left:3px solid var(--accent);border-right:3px solid var(--accent)}.horario-hora{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:500;color:var(--ink-muted);text-align:right;padding:.5rem .7rem;white-space:nowrap;background:var(--surface-2)}.horario-table td{padding:0;height:3.1rem;vertical-align:stretch}.horario-table td.horario-col-hoy{border-left:3px solid var(--accent);border-right:3px solid var(--accent);box-shadow:0 0 6px 0 var(--accent-tint)}.horario-table td.horario-col-hoy-primera{border-top:3px solid var(--accent)}.horario-table td.horario-col-hoy-ultima{border-bottom:3px solid var(--accent)}.horario-celda{display:flex;align-items:center;justify-content:center;text-align:center;height:100%;min-height:3.1rem;padding:.4rem .5rem;font-weight:600;line-height:1.25;cursor:pointer}.horario-celda-actual{position:relative;filter:saturate(1.6) brightness(.92);box-shadow:inset 0 0 0 2px var(--accent),0 0 0 4px var(--accent-tint)}.sched-0{background:var(--sched-0-bg);color:var(--sched-0-text)}.sched-1{background:var(--sched-1-bg);color:var(--sched-1-text)}.sched-2{background:var(--sched-2-bg);color:var(--sched-2-text)}.sched-3{background:var(--sched-3-bg);color:var(--sched-3-text)}.sched-4{background:var(--sched-4-bg);color:var(--sched-4-text)}.sched-5{background:var(--sched-5-bg);color:var(--sched-5-text)}.sched-6{background:var(--sched-6-bg);color:var(--sched-6-text)}.sched-7{background:var(--sched-7-bg);color:var(--sched-7-text)}.horario-leyenda{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:1rem}.horario-leyenda-item{display:inline-flex;align-items:center;gap:.4rem;font-size:.82rem;color:var(--ink-muted)}.horario-leyenda-dot{width:.7rem;height:.7rem;border-radius:50%;flex:none}.menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:transparent}.materia-menu{position:fixed;z-index:41;transform:translate(-50%);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-lg);box-shadow:0 10px 28px #00000038;min-width:13rem;max-width:calc(100vw - 2rem);padding:.4rem;display:flex;flex-direction:column;gap:.1rem}.materia-menu-title{font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-muted);padding:.55rem .75rem .3rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.materia-menu-item{font-family:inherit;font-size:.94rem;font-weight:600;text-align:left;background:none;border:none;border-radius:var(--radius-sm);min-height:var(--touch-min);padding:0 .75rem;color:var(--ink);cursor:pointer}.materia-menu-item:hover{background:var(--surface-2);color:var(--accent)}
