:root{--brand-50: #ecfdf5;--brand-100: #d1fae5;--brand-200: #a7f3d0;--brand-400: #10b981;--brand-500: #059669;--brand-600: #047857;--brand-900: #064e3b;--accent: #f59e0b;--gradient-brand: linear-gradient(135deg, #059669 0%, #047857 50%, #064e3b 100%);--bg: #f8fafc;--surface: #ffffff;--surface-alt: #f8fafc;--surface-hover: #f1f5f9;--border: #e2e8f0;--border-soft: #f1f5f9;--text: #0f172a;--text-muted: #64748b;--text-faint: #94a3b8;--danger: #b91c1c;--danger-50: #fef2f2;--danger-200: #fecaca;--warning: #b45309;--warning-50: #fffbeb;--warning-200: #fde68a;--info: #1d4ed8;--info-50: #eff6ff;--info-200: #bfdbfe;--r-sm: 8px;--r-md: 14px;--r-lg: 24px;--r-pill: 999px;--shadow-card: 0 10px 30px rgba(15, 23, 42, .04);--shadow-raise: 0 14px 24px -8px rgba(15, 23, 42, .14);--shadow-brand: 0 10px 20px -5px rgba(5, 150, 105, .35);--shadow-pop: 0 20px 40px rgba(15, 23, 42, .16);--ring: 0 0 0 4px rgba(5, 150, 105, .16);--dur: .18s;--ease: cubic-bezier(.2, 0, 0, 1);--font-ui: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-num: "IBM Plex Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;--verde-institucional: var(--brand-600);--verde-institucional-oscuro: var(--brand-900);--papel: var(--surface);--papel-hover: var(--surface-hover);--papel-linea: var(--border);--tinta: var(--text);--tinta-suave: var(--text-muted);--acento-advertencia: var(--warning);--acento-error: var(--danger);--acento-vino: var(--danger);--acento-info: var(--info);--font-serif: var(--font-ui);--font-sans: var(--font-ui);--font-mono: var(--font-num)}html,body{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;font-family:var(--font-ui);overflow-x:hidden}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}:focus-visible{outline:2px solid var(--brand-500);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:0ms!important;animation-duration:0ms!important}}:where(.app-main) .module-header,:where(.app-main) .header-bar{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border)}:where(.app-main) .module-title{margin:0;font-size:1.55rem;font-weight:800;letter-spacing:-.02em;color:var(--text)}:where(.app-main) .module-subtitle{margin:4px 0 0;font-size:.9rem;color:var(--text-muted)}:where(.app-main) .btn-return,:where(.app-main) .btn-back{display:inline-flex;align-items:center;gap:6px;text-decoration:none;font-size:.86rem;font-weight:600;color:var(--brand-600);background:var(--brand-50);border:1px solid var(--brand-100);padding:8px 14px;border-radius:var(--r-pill);transition:background-color var(--dur) var(--ease),color var(--dur) var(--ease)}:where(.app-main) .btn-return:hover,:where(.app-main) .btn-back:hover{background:var(--brand-100);color:var(--brand-900)}:where(.app-main) .card,:where(.app-main) .filter-panel,:where(.app-main) .table-container{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--r-md);box-shadow:var(--shadow-card)}:where(.app-main) .card{padding:24px;margin-bottom:20px}:where(.app-main) .filter-panel{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:16px;padding:18px 20px;margin-bottom:14px}:where(.app-main) .table-container{overflow-x:auto}:where(.app-main) .context-strip{padding:10px 16px;background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--brand-500);border-radius:var(--r-sm);font-size:.88rem;color:var(--text-muted);margin-bottom:16px}:where(.app-main) .field-group{display:flex;flex-direction:column;gap:6px}:where(.app-main) .field-group label{font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}:where(.app-main) input:not([type=checkbox]):not([type=radio]):not([type=file]),:where(.app-main) select,:where(.app-main) textarea{font:inherit;font-size:.92rem;color:var(--text);background:var(--surface-alt);border:1.5px solid var(--border);border-radius:var(--r-sm);padding:8px 12px;transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),background-color var(--dur) var(--ease)}:where(.app-main) input:not([type=checkbox]):not([type=radio]):not([type=file]):focus,:where(.app-main) select:focus,:where(.app-main) textarea:focus{outline:none;border-color:var(--brand-500);background:var(--surface);box-shadow:var(--ring)}:where(.app-main) input:disabled,:where(.app-main) select:disabled,:where(.app-main) textarea:disabled{opacity:.6;cursor:not-allowed}:where(.app-main) .btn-primary,:where(.app-main) .btn-save,:where(.app-main) .btn-secondary,:where(.app-main) .btn-small,:where(.app-main) .btn-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:inherit;font-weight:700;cursor:pointer;border-radius:var(--r-sm);border:1px solid transparent;transition:background-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),transform var(--dur) var(--ease),color var(--dur) var(--ease)}:where(.app-main) .btn-primary,:where(.app-main) .btn-save{background:var(--brand-500);color:#fff;padding:10px 18px;font-size:.9rem;box-shadow:var(--shadow-brand)}:where(.app-main) .btn-primary:hover:not(:disabled),:where(.app-main) .btn-save:hover:not(:disabled){background:var(--brand-600);transform:translateY(-1px)}:where(.app-main) .btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border);padding:10px 18px;font-size:.9rem}:where(.app-main) .btn-secondary:hover:not(:disabled){background:var(--surface-hover)}:where(.app-main) .btn-small{background:var(--brand-50);color:var(--brand-600);border-color:var(--brand-100);padding:6px 12px;font-size:.8rem}:where(.app-main) .btn-small:hover:not(:disabled){background:var(--brand-100)}:where(.app-main) .btn-action{height:38px;padding:0 14px;font-size:.86rem;border-color:var(--border)}:where(.app-main) button:disabled{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}:where(.app-main) .tab-group{display:flex;gap:4px;margin-bottom:14px;border-bottom:1px solid var(--border);overflow-x:auto}:where(.app-main) .tab-group button{background:none;border:none;padding:10px 16px;font:inherit;font-size:.88rem;font-weight:700;color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent;transition:color var(--dur) var(--ease),border-color var(--dur) var(--ease)}:where(.app-main) .tab-group button.active{color:var(--brand-600);border-bottom-color:var(--brand-500)}:where(.app-main) .tab-group button:hover:not(.active){color:var(--text)}:where(.app-main) .tabs-nav{gap:4px;padding:4px;border-radius:var(--r-md);background:var(--surface-hover)}:where(.app-main) .tabs-nav button{padding:9px 18px;border:none;border-radius:10px;background:transparent;font:inherit;font-size:.9rem;font-weight:700;color:var(--text-muted);cursor:pointer;transition:background-color var(--dur) var(--ease),color var(--dur) var(--ease)}:where(.app-main) .tabs-nav button:hover{color:var(--text)}:where(.app-main) .tabs-nav button.active{background:var(--surface);color:var(--brand-600);box-shadow:0 1px 3px #0f172a1f}:where(.app-main) .roster-table{width:100%;border-collapse:collapse;text-align:left}:where(.app-main) .roster-table th{background:var(--surface-alt);color:var(--text-muted);padding:12px 16px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border)}:where(.app-main) .roster-table td{padding:12px 16px;border-bottom:1px solid var(--border-soft);font-size:.92rem}:where(.app-main) .roster-table tbody tr{transition:background-color var(--dur) var(--ease)}:where(.app-main) .roster-table tbody tr:hover{background:var(--surface-alt)}:where(.app-main) .cell-code{font-family:var(--font-num);font-weight:600;font-size:.86rem}:where(.app-main) .cell-name{font-weight:600}:where(.app-main) .cell-nota{font-family:var(--font-num)}:where(.app-main) .simple-table{width:100%;border-collapse:collapse}:where(.app-main) .simple-table th,:where(.app-main) .simple-table td{text-align:left;border-bottom:1px solid var(--border-soft)}:where(.app-main) .simple-table th{background:var(--surface-alt);color:var(--text-muted);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;border-bottom-color:var(--border)}:where(.app-main) .simple-table tbody tr:hover{background:var(--surface-alt)}:where(.app-main) .badge-status{display:inline-flex;align-items:center;padding:3px 10px;border-radius:var(--r-pill);font-size:.72rem;font-weight:700;white-space:nowrap;background:var(--surface-hover);color:var(--text-muted)}:where(.app-main) .badge-aprobado{background:var(--brand-50);color:var(--brand-600)}:where(.app-main) .badge-reprobado{background:var(--danger-50);color:var(--danger)}:where(.app-main) .badge-pendiente{background:var(--warning-50);color:var(--warning)}:where(.app-main) .top-banner{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--info);border-radius:var(--r-sm);margin-bottom:20px;box-shadow:var(--shadow-card);animation:ui-fade-down var(--dur) var(--ease)}:where(.app-main) .banner-success{border-left-color:var(--brand-500);color:var(--brand-600)}:where(.app-main) .banner-error{border-left-color:var(--danger);color:var(--danger)}:where(.app-main) .banner-info{border-left-color:var(--info);color:var(--info)}:where(.app-main) .banner-content{display:flex;align-items:center;gap:10px;font-weight:600;font-size:.92rem}:where(.app-main) .banner-indicator{width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}:where(.app-main) .btn-close-banner,:where(.app-main) .btn-close-toast{background:none;border:none;font-size:1.2rem;line-height:1;cursor:pointer;color:var(--text-muted)}:where(.app-main) .toast-aviso{position:fixed;top:80px;right:24px;z-index:9999;display:flex;align-items:center;gap:12px;max-width:min(440px,calc(100vw - 32px));padding:14px 18px;background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--brand-500);border-radius:var(--r-md);font-size:.88rem;font-weight:600;color:var(--text);box-shadow:var(--shadow-pop);animation:ui-slide-in var(--dur) var(--ease)}:where(.app-main) .toast-success{border-left-color:var(--brand-500)}:where(.app-main) .toast-error{border-left-color:var(--danger)}:where(.app-main) .toast-info{border-left-color:var(--info)}:where(.app-main) .empty-message,:where(.app-main) .empty-state{padding:36px 24px;text-align:center;color:var(--text-muted);font-size:.92rem;line-height:1.5}:where(.app-main) .empty-error{color:var(--danger)}:where(.app-main) .empty-warning{color:var(--warning)}:where(.app-main) .spinner{width:28px;height:28px;margin:0 auto;border:3px solid var(--brand-100);border-top-color:var(--brand-500);border-radius:50%;animation:ui-spin .8s linear infinite}@keyframes ui-fade-down{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}@keyframes ui-slide-in{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:none}}@keyframes ui-spin{to{transform:rotate(360deg)}}@media print{.app-sidebar,.app-topbar,.app-backdrop{display:none!important}.app-main{margin:0!important;padding:0!important}body{background:#fff!important}}
