{"id":5192,"date":"2025-10-22T10:27:05","date_gmt":"2025-10-22T13:27:05","guid":{"rendered":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/?page_id=5192"},"modified":"2025-10-23T13:19:48","modified_gmt":"2025-10-23T16:19:48","slug":"app-correlativas-profesora-de-historia","status":"publish","type":"page","link":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/app-correlativas-profesora-de-historia\/","title":{"rendered":"App Correlativas Profesorado de Historia"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=ar.maillet.correlativas_historia&amp;pcampaignid=web_share\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-content\/uploads\/2025\/10\/9cb2d8aa-ceaa-46c7-a18a-089877998bf9.jpg\" alt=\"\" class=\"wp-image-5399\" width=\"323\" height=\"125\"\/><\/a><\/figure><\/div>\n\n\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n    <!-- &#x1f524; Codificaci\u00f3n -->\n    <meta charset=\"UTF-8\">\n\n    <!-- &#x1f4f1; Control de escala en m\u00f3viles -->\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n\n    <!-- &#x1f317; Forzar modo claro en WebView -->\n    <meta name=\"color-scheme\" content=\"light\">\n\n    <!-- &#x1f4dd; Evitar que Android cambie tama\u00f1o de fuentes -->\n    <style>\n        html, body { -webkit-text-size-adjust: 100% !important; }\n    <\/style>\n\n    <!-- &#x1f4db; T\u00edtulo de la p\u00e1gina -->\n    <title>Mapa y Calculadora de Correlatividades<\/title>\n\n    <!-- &#x1f3a8; Tailwind -->\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n\n    <!-- &#x1f517; Google Fonts -->\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n\n    <!-- &#x1f3a8; Tus estilos -->\n    <style>\n        @keyframes bounce-in-y {\n          0% { transform: translateY(-50px); opacity: 0; }\n          60% { transform: translateY(10px); opacity: 1; }\n          80% { transform: translateY(-5px); }\n          100% { transform: translateY(0); }\n        }\n        @keyframes bounce-out-y {\n          0% { transform: translateY(0); opacity: 1; }\n          20% { transform: translateY(10px); }\n          100% { transform: translateY(-50px); opacity: 0; }\n        }\n        .animate-bounce-in-y {\n          animation: bounce-in-y 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) both;\n        }\n        .animate-bounce-out-y {\n          animation: bounce-out-y 0.3s ease-in both;\n        }\n        .transition-transform-layout {\n          transition-property: all;\n          transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n          transition-duration: 0.3s;\n        }\n        body {\n          font-family: 'Inter', sans-serif;\n          background-color: #f3f4f6;\n        }\n        .badge {\n          display: inline-flex;\n          align-items: center;\n          padding: 0.25rem 0.5rem;\n          border-radius: 9999px;\n          font-size: 0.75rem;\n          line-height: 1rem;\n          font-weight: 500;\n          border: 1px solid transparent;\n        }\n        .badge-outline {\n          background-color: #f9fafb;\n          border-color: #e5e7eb;\n          color: #6b7280;\n        }\n        .lucide {\n          display: inline-block;\n        }\n        .radio-group-item {\n            display: none;\n        }\n        .radio-group-label {\n          cursor: pointer;\n        }\n        input[type=\"radio\"]:checked + .radio-group-label {\n          background-color: #dbeafe; \/* bg-blue-50 *\/\n          border-color: #3b82f6; \/* border-blue-500 *\/\n          color: #1e40af; \/* text-blue-700 *\/\n        }\n        .radio-group-label:hover {\n          background-color: #f3f4f6; \/* bg-gray-100 *\/\n        }\n     .scroll-fix {\n     max-height: 80vh; \/* no se pasa del 80% de la altura de pantalla *\/\n     overflow-y: auto;\n     padding-right: 0.5rem; \/* espacio para que no tape el scroll *\/\n   }\n\n   \/* &#x1f53d; Ajuste para pantallas chicas *\/\n   @media (max-width: 640px) {\n     .scroll-fix {\n       max-height: 70vh;\n     }\n   }\n    <\/style>\n<\/head>\n\n<body class=\"p-6 lg:p-10\">\n\n  \n  <div id=\"cascadaApp\" class=\"w-full space-y-6\">\n\n    <div class=\"bg-white p-6 rounded-xl border border-gray-200 shadow-sm\">\n        <h2 class=\"text-2xl font-bold text-gray-800\">Mapa de Correlatividades: \u00bfQu\u00e9 Me Falta?<\/h2>\n        <p class=\"mt-2 text-sm text-gray-600 max-w-3xl\">\n            Con \u00bfQu\u00e9 Me Falta? pod\u00e9s ver al instante qu\u00e9 materias te faltan para cursar o rendir. Seleccion\u00e1s la materia en un mapa interactivo y el sistema te muestra sus correlativas previas y posteriores. As\u00ed sab\u00e9s exactamente qu\u00e9 te habilita a seguir avanzando.\n        <\/p>\n    <\/div>\n\n    <div class=\"bg-white p-4 rounded-xl border-2 border-blue-500 shadow-lg\">\n        <div class=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\n            <p class=\"text-sm text-gray-800 font-medium max-w-2xl text-center sm:text-left\">\n                Ya sab\u00e9s qu\u00e9 te falta, \u00bfquer\u00e9s saber si pod\u00e9s cursar en tu estado actual? Usa el sistema contextual de \u00bfPuedo Cursar? para saber si pod\u00e9s cursar o no.\n            <\/p>\n            <button id=\"calculatorBtn\" class=\"flex-shrink-0 w-full sm:w-auto px-5 py-2.5 rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition-colors duration-200 text-sm font-semibold flex items-center justify-center gap-2 shadow-md hover:shadow-lg focus:ring-4 focus:ring-blue-300\">\n                <span>Ir a \u00bfPuedo Cursar?<\/span>\n                <svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"16\" height=\"20\" x=\"4\" y=\"2\" rx=\"2\"\/><path d=\"M8 6h8\"\/><path d=\"M8 10h8\"\/><path d=\"M8 14h.01\"\/><path d=\"M8 18h.01\"\/><path d=\"M12 14h.01\"\/><path d=\"M12 18h.01\"\/><path d=\"M16 14h.01\"\/><path d=\"M16 18h.01\"\/><\/svg>\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <div class=\"bg-white p-6 rounded-xl border border-gray-200 shadow-sm\">\n        <div class=\"flex items-start gap-4\">\n            <svg class=\"h-6 w-6 flex-shrink-0 text-gray-400\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"><\/path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"><\/path><\/svg>\n            <div>\n                <h3 class=\"text-lg font-semibold text-gray-800\">R\u00e9gimen de Correlatividades Vigente<\/h3>\n                <p class=\"mt-2 text-sm text-gray-600\">\n                    Este sistema est\u00e1 basado en el r\u00e9gimen de correlatividades actual para la carrera de <strong>Profesorado de Educaci\u00f3n Secundaria en Historia<\/strong> que se cursa en el <strong>Profesorado Superior de Ciencias Sociales<\/strong>.\n                <\/p>\n                <p class=\"mt-2 text-xs text-gray-500\">\n                    Resoluci\u00f3n N\u00b0 0765 C.G.E. | Expte. Grabado N\u00b0 (1506606) | Provincia de Entre R\u00edos &#8211; CONSEJO GENERAL DE EDUCACI\u00d3N.\n                <\/p>\n                <p class=\"mt-3 text-sm text-gray-600\">\n                    Si quer\u00e9s acceder directamente al documento oficial, pod\u00e9s hacerlo con el bot\u00f3n de descarga que encontrar\u00e1s justo al final del men\u00fa de opciones.\n                <\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n    \n    <div class=\"bg-white p-4 rounded-xl border border-gray-200 shadow-sm\">\n      <div class=\"flex flex-col lg:flex-row gap-4 items-start lg:items-center justify-between\">\n        \n        <div class=\"flex-1 flex items-center gap-4\">\n            <div class=\"relative flex-1 max-w-md\">\n              <svg class=\"absolute left-3 top-1\/2 transform -translate-y-1\/2 text-gray-400 h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"><\/line><\/svg>\n              <input type=\"text\" id=\"searchInput\" placeholder=\"Buscar materia...\" class=\"pl-10 w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 transition-colors duration-200 p-2 text-sm\">\n            <\/div>\n        <\/div>\n\n        \n        <div class=\"flex flex-wrap gap-4 items-center\">\n          <div class=\"flex items-center space-x-2\">\n            <svg class=\"h-4 w-4 text-gray-500\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"><\/polygon><\/svg>\n            <select id=\"filterTipo\" class=\"rounded-md border border-gray-300 px-3 py-1 text-sm\">\n              <option value=\"todos\">Todos los tipos<\/option>\n              <option value=\"Formaci\u00f3n General\">Formaci\u00f3n General<\/option>\n              <option value=\"Formaci\u00f3n Espec\u00edfica\">Formaci\u00f3n Espec\u00edfica<\/option>\n              <option value=\"Pr\u00e1ctica Profesional\">Pr\u00e1ctica Profesional<\/option>\n            <\/select>\n          <\/div>\n\n          <div class=\"flex items-center space-x-2\">\n            <select id=\"filterYear\" class=\"rounded-md border border-gray-300 px-3 py-1 text-sm\">\n              <option value=\"\">Todos los a\u00f1os<\/option>\n              <option value=\"1\">1\u00b0 A\u00f1o<\/option>\n              <option value=\"2\">2\u00b0 A\u00f1o<\/option>\n              <option value=\"3\">3\u00b0 A\u00f1o<\/option>\n              <option value=\"4\">4\u00b0 A\u00f1o<\/option>\n            <\/select>\n          <\/div>\n\n          <div class=\"flex items-center space-x-2\">\n            <input type=\"checkbox\" id=\"compactModeSwitch\" class=\"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500\">\n            <label for=\"compactModeSwitch\" class=\"text-sm text-gray-700\">Compacto<\/label>\n          <\/div>\n        <\/div>\n\n        \n        <div class=\"flex items-center space-x-2\">\n          <button id=\"zoomOutBtn\" class=\"p-2 rounded-md border border-gray-300 bg-gray-50 hover:bg-gray-100 transition-colors duration-200\">\n            <svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"><\/line><\/svg>\n          <\/button>\n          <span id=\"zoomLevel\" class=\"text-sm text-gray-600 min-w-[60px] text-center\">100%<\/span>\n          <button id=\"zoomInBtn\" class=\"p-2 rounded-md border border-gray-300 bg-gray-50 hover:bg-gray-100 transition-colors duration-200\">\n            <svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"><\/line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"><\/line><\/svg>\n          <\/button>\n          <button id=\"resetBtn\" class=\"p-2 rounded-md border border-gray-300 bg-gray-50 hover:bg-gray-100 transition-colors duration-200\">\n            <svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"><\/path><path d=\"M3 3v5h5\"><\/path><path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\"><\/path><path d=\"M21 21v-5h-5\"><\/path><\/svg>\n          <\/button>\n          <button id=\"downloadBtn\" class=\"p-2 rounded-md border border-gray-300 bg-gray-50 hover:bg-gray-100 transition-colors duration-200\">\n            <svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><polyline points=\"7 10 12 15 17 10\"><\/polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"><\/line><\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    \n    <div class=\"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden\">\n      <div id=\"visualizationContainer\" class=\"overflow-auto\" style=\"height: 70vh;\">\n        <div id=\"visualizationContent\" class=\"p-6 transition-transform duration-200\" style=\"transform-origin: top left;\">\n          <div id=\"mainGrid\" class=\"grid grid-cols-1 lg:grid-cols-4 gap-8\">\n            \n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    \n    <div id=\"detailPanel\" class=\"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden hidden\">\n      <div class=\"p-6\">\n        <div class=\"flex items-start justify-between mb-4\">\n          <div>\n            <h3 id=\"detailPanelTitle\" class=\"text-xl font-bold text-gray-800\"><\/h3>\n            <div id=\"detailPanelBadges\" class=\"flex items-center space-x-2 mt-2\"><\/div>\n          <\/div>\n          <button id=\"closeDetailPanelBtn\" class=\"p-2 rounded-md hover:bg-gray-100 transition-colors duration-200\">\n            <svg class=\"h-4 w-4 text-gray-600\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line><\/svg>\n          <\/button>\n        <\/div>\n\n        <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n          <div>\n            <h4 class=\"font-semibold text-gray-800 mb-3\">Correlativas Requeridas<\/h4>\n            <div id=\"correlativesList\" class=\"space-y-2\"><\/div>\n          <\/div>\n          <div>\n            <h4 class=\"font-semibold text-gray-800 mb-3\">Materias que Habilita<\/h4>\n            <div id=\"dependentsList\" class=\"space-y-2\"><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    \n    <div class=\"bg-white p-4 rounded-xl border border-gray-200 shadow-sm\">\n      <h4 class=\"font-semibold text-gray-800 mb-3\">Leyenda<\/h4>\n      <div class=\"grid gap-8 md:grid-cols-3\">\n        \n        <div class=\"space-y-3\">\n          <div>\n            <div class=\"text-sm font-semibold text-black\">Tipos de Formaci\u00f3n<\/div>\n            <p class=\"text-sm text-gray-600\">\n              Agrupan las materias seg\u00fan su orientaci\u00f3n dentro del plan de estudios.\n            <\/p>\n          <\/div>\n          <ul class=\"grid gap-3\">\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex items-center rounded-full border bg-blue-50 border-blue-200 text-blue-700 text-xs font-medium px-2.5 py-1\">\n                Formaci\u00f3n General\n              <\/span>\n              <span class=\"text-sm text-gray-600\">\n                Contenidos transversales y comunes.\n              <\/span>\n            <\/li>\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex items-center rounded-full border bg-emerald-50 border-emerald-200 text-emerald-700 text-xs font-medium px-2.5 py-1\">\n                Formaci\u00f3n Espec\u00edfica\n              <\/span>\n              <span class=\"text-sm text-gray-600\">\n                Contenidos propios de la especialidad.\n              <\/span>\n            <\/li>\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex items-center rounded-full border bg-violet-50 border-violet-200 text-violet-700 text-xs font-medium px-2.5 py-1\">\n                Pr\u00e1ctica Profesional\n              <\/span>\n              <span class=\"text-sm text-gray-600\">\n                Pr\u00e1ctica y vinculaci\u00f3n profesional.\n              <\/span>\n            <\/li>\n          <\/ul>\n        <\/div>\n\n        \n        <div class=\"space-y-3\">\n          <div>\n            <div class=\"text-sm font-semibold text-black\">Formatos Curriculares<\/div>\n            <p class=\"text-sm text-gray-600\">Indican el tipo de espacio y modalidad de cursada.<\/p>\n          <\/div>\n          <ul class=\"grid gap-3\">\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex w-fit items-center rounded-full border bg-blue-50 border-blue-200 text-blue-700 text-xs font-medium px-2.5 py-1\">\n                Asignatura\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Materia regular con contenidos te\u00f3rico\u2011pr\u00e1cticos.<\/span>\n              <\/li>\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex w-fit items-center rounded-full border bg-emerald-50 border-emerald-200 text-emerald-700 text-xs font-medium px-2.5 py-1\">\n                Seminario\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Espacio breve y focalizado en un tema espec\u00edfico.<\/span>\n            <\/li>\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex w-fit items-center rounded-full border bg-violet-50 border-violet-200 text-violet-700 text-xs font-medium px-2.5 py-1\">\n                Seminario\u2011Taller\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Combina seminario y taller con \u00e9nfasis aplicado.<\/span>\n            <\/li>\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex w-fit items-center rounded-full border bg-orange-50 border-orange-200 text-orange-700 text-xs font-medium px-2.5 py-1\">\n                Taller\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Espacio pr\u00e1ctico orientado a producci\u00f3n y proyectos.<\/span>\n            <\/li>\n             <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex w-fit items-center rounded-full border bg-gray-100 border-gray-300 text-gray-700 text-xs font-medium px-2.5 py-1\">\n                Variable\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Formato definido por la instituci\u00f3n (UDI).<\/span>\n            <\/li>\n          <\/ul>\n        <\/div>\n\n        \n        <div class=\"space-y-3\">\n          <div>\n            <div class=\"text-sm font-semibold text-black\">Otros Elementos<\/div>\n            <p class=\"text-sm text-gray-600\">\n              Abreviaciones y clasificaciones especiales que aparecen en las materias.\n            <\/p>\n          <\/div>\n          <ul class=\"grid gap-3\">\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex items-center rounded-full border px-2 py-0.5 text-[11px] font-semibold uppercase tracking-wide text-amber-800 bg-amber-50 border-amber-300\">\n                ABC\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Ej.: abreviaci\u00f3n del nombre de la materia.<\/span>\n            <\/li>\n            <li class=\"flex items-center gap-3\">\n              <span class=\"inline-flex w-fit items-center rounded-full border bg-blue-50 border-blue-200 text-blue-700 text-xs font-medium px-2.5 py-1\">\n                Especial\n              <\/span>\n              <span class=\"text-sm text-gray-600\">Requisitos especiales como UC completas por a\u00f1o.<\/span>\n            <\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <!-- ===== Autores \/ Cr\u00e9ditos (Qu\u00e9 Me Falta) ===== -->\n  <section id=\"autores\" class=\"mt-8 sm:mt-10\">\n      <div class=\"bg-white p-5 rounded-xl border border-gray-200 shadow-sm\">\n          <h3 class=\"text-base font-semibold text-gray-800\">Autor<\/h3>\n          <p class=\"mt-1 text-xs text-gray-500\">\n              \u00a9 2025 Alan Gabriel Maillet \u2014 Autor original<br>\n              Todos los derechos reservados.\n          <\/p>\n          <p class=\"mt-3 text-sm text-gray-600\">\n              Material educativo did\u00e1ctico, creado con la \u00fanica intenci\u00f3n de facilitarle la vida a los estudiantes.\n          <\/p>\n      <\/div>\n  <\/section>\n\n\n\n\n  <div id=\"calculatorApp\" class=\"w-full space-y-6 hidden\">\n    \n    <div class=\"bg-white p-6 rounded-xl border border-gray-200 shadow-sm\">\n        <div class=\"flex flex-col sm:flex-row items-start justify-between gap-4\">\n            <div>\n                <h2 class=\"text-2xl font-bold text-gray-800\">\u00bfPuedo Cursar?<\/h2>\n                <p class=\"mt-2 text-sm text-gray-600 max-w-2xl\">\n                    Ya sab\u00e9s qu\u00e9 te falta\u2026 ahora, \u00bfPodes Cursar? \u00a1No m\u00e1s dudas sobre tu cursada! Con Puedo Cursar? descubr\u00eds en segundos si pod\u00e9s avanzar en tu carrera. Un par de clics y sabr\u00e1s exactamente qu\u00e9 camino seguir para llegar a tu meta acad\u00e9mica.\n                <\/p>\n            <\/div>\n            <button id=\"backToCascadaBtn\" class=\"flex-shrink-0 ml-auto px-4 py-2 rounded-md border border-gray-300 bg-gray-50 hover:bg-gray-100 transition-colors duration-200 text-sm\">Volver al Mapa<\/button>\n        <\/div>\n    <\/div>\n    \n    <div class=\"bg-white p-6 rounded-xl border border-gray-200 shadow-sm\">\n        <div class=\"grid gap-6\">\n            \n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n                <div class=\"bg-gray-50 border border-gray-200 rounded-lg p-4 flex items-start gap-3\">\n                    <div class=\"bg-blue-100 text-blue-600 rounded-full h-8 w-8 flex-shrink-0 flex items-center justify-center font-bold text-lg\">1<\/div>\n                    <div>\n                        <h4 class=\"font-semibold text-gray-800\">Seleccion\u00e1 el A\u00f1o<\/h4>\n                        <p class=\"text-sm text-gray-600 mt-1\">Eleg\u00ed el a\u00f1o de la materia que quer\u00e9s saber si pod\u00e9s cursar.<\/p>\n                    <\/div>\n                <\/div>\n                <div class=\"bg-gray-50 border border-gray-200 rounded-lg p-4 flex items-start gap-3\">\n                    <div class=\"bg-blue-100 text-blue-600 rounded-full h-8 w-8 flex-shrink-0 flex items-center justify-center font-bold text-lg\">2<\/div>\n                    <div>\n                        <h4 class=\"font-semibold text-gray-800\">Seleccion\u00e1 la Materia<\/h4>\n                        <p class=\"text-sm text-gray-600 mt-1\">Ahora, eleg\u00ed la materia espec\u00edfica que te interesa.<\/p>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"grid gap-4 sm:grid-cols-2\">\n                <div class=\"grid gap-2\">\n                    <label for=\"evalYearSelector\" class=\"block text-sm font-semibold text-gray-700\">A\u00f1o:<\/label>\n                    <select id=\"evalYearSelector\" class=\"rounded-md border border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 p-2 text-sm\">\n                        <option value=\"2\" selected>2\u00b0 A\u00f1o<\/option>\n                        <option value=\"3\">3\u00b0 A\u00f1o<\/option>\n                        <option value=\"4\">4\u00b0 A\u00f1o<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"grid gap-2 min-w-0\">\n                    <label for=\"materiaSelector\" class=\"block text-sm font-semibold text-gray-700\">Materia:<\/label>\n                    <select id=\"materiaSelector\" class=\"w-full rounded-md border border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 p-2 text-sm\">\n                        <option value=\"\">&#8212; Elige una materia &#8212;<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n\n            \n            <div id=\"evaluationContainer\" class=\"hidden\">\n              <hr class=\"border-t border-gray-200\">\n              <div id=\"correlativesSection\" class=\"grid gap-4\">\n                  \n              <\/div>\n              <div id=\"evaluationPanel\" class=\"hidden mt-6\">\n                  \n              <\/div>\n            <\/div>\n\n            <div id=\"initialMessage\" class=\"rounded-xl border border-gray-200 p-4 text-center text-gray-500\">\n              Selecciona un a\u00f1o y una materia para ver tus opciones de cursada.\n            <\/div>\n        <\/div>\n    <\/div>\n      <section id=\"autores-pc\" class=\"mt-12 sm:mt-14\">\n          <div class=\"bg-white p-5 rounded-xl border border-gray-200 shadow-sm\">\n              <h3 class=\"text-base font-semibold text-gray-800\">Autor<\/h3>\n              <p class=\"mt-1 text-xs text-gray-500\">\n                  \u00a9 2025 Alan Gabriel Maillet \u2014 Autor original<br>\n                  Todos los derechos reservados.\n              <\/p>\n              <p class=\"mt-3 text-sm text-gray-600\">\n                  Material educativo did\u00e1ctico, creado con la \u00fanica intenci\u00f3n de facilitarle la vida a los estudiantes.\n              <\/p>\n          <\/div>\n      <\/section>\n  <\/div>\n\n\n  <script>\n    document.addEventListener('DOMContentLoaded', () => {\nconst autoresTop = document.getElementById('autores');\nconst autoresPc  = document.getElementById('autores-pc');\n      \/\/ --- Gesti\u00f3n de vistas ---\n      const showCalculator = () => {\n  document.getElementById('cascadaApp').classList.add('hidden');\n  document.getElementById('calculatorApp').classList.remove('hidden');\n\n  \/\/ Oculta el Autor global y muestra el Autor de la secci\u00f3n PC\n  autoresTop && autoresTop.classList.add('hidden');\n  autoresPc  && autoresPc.classList.remove('hidden');\n\n  \/\/ Reset de la calculadora\n  document.getElementById('evalYearSelector').value = \"2\";\n  document.getElementById('materiaSelector').value = \"\";\n  document.getElementById('evaluationContainer').classList.add('hidden');\n  document.getElementById('initialMessage').classList.remove('hidden');\n  populateMateriaSelector(2);\n};\n\nconst showCascada = () => {\n  document.getElementById('cascadaApp').classList.remove('hidden');\n  document.getElementById('calculatorApp').classList.add('hidden');\n\n  \/\/ Vuelve a mostrar el Autor global y oculta el de PC\n  autoresTop && autoresTop.classList.remove('hidden');\n  autoresPc  && autoresPc.classList.add('hidden');\n\n  selectedMateriaId = null;\n  render();\n};\n\n\n      \n      \/\/ --- Definici\u00f3n de datos del plan de estudios ---\n      const materias = [\n        \/\/ PRIMER A\u00d1O - Sin correlativas\n        { id: \"pedagogia\", codigo: \"PED\", nombre: \"Pedagog\u00eda\", a\u00f1o: 1, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"problematica-conocimiento\", codigo: \"PCH\", nombre: \"Problem\u00e1tica del Conocimiento Hist\u00f3rico\", a\u00f1o: 1, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"procesos-antiguedad\", codigo: \"ANT\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales de la Antig\u00fcedad\", a\u00f1o: 1, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"historia-ideas-1\", codigo: \"HI1\", nombre: \"Historia de las Ideas I\", a\u00f1o: 1, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"pueblos-originarios\", codigo: \"POA\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales de los Pueblos Originarios de Am\u00e9rica\", a\u00f1o: 1, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"oralidad-lectura\", codigo: \"OLT\", nombre: \"Oralidad, Lectura, Escritura y TIC\", a\u00f1o: 1, tipo: \"Formaci\u00f3n General\", formato: \"Taller\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"corporeidad-juego\", codigo: \"CJA\", nombre: \"Corporeidad, Juego y Lenguajes Art\u00edsticos\", a\u00f1o: 1, tipo: \"Formaci\u00f3n General\", formato: \"Taller\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"practica-1\", codigo: \"PD1\", nombre: \"Pr\u00e1ctica Docente I - Sujetos y Contextos\", a\u00f1o: 1, tipo: \"Pr\u00e1ctica Profesional\", formato: \"Seminario-Taller\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"didactica-general\", codigo: \"DG\", nombre: \"Did\u00e1ctica General\", a\u00f1o: 1, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [], correlativasDetalladas: [] },\n        \/\/ SEGUNDO A\u00d1O\n        { id: \"filosofia\", codigo: \"FIL\", nombre: \"Filosof\u00eda\", a\u00f1o: 2, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [\"pedagogia\"], correlativasDetalladas: [{ id: \"pedagogia\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"psicologia-educacional\", codigo: \"PE\", nombre: \"Psicolog\u00eda Educacional\", a\u00f1o: 2, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [\"pedagogia\"], correlativasDetalladas: [{ id: \"pedagogia\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"educacion-sexual\", codigo: \"ESI\", nombre: \"Educaci\u00f3n Sexual Integral\", a\u00f1o: 2, tipo: \"Formaci\u00f3n General\", formato: \"Taller\", correlativas: [\"corporeidad-juego\"], correlativasDetalladas: [{ id: \"corporeidad-juego\", type: \"R\", formato: \"Taller\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"procesos-feudalismo-modernidad\", codigo: \"FM\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales del Feudalismo y la Modernidad\", a\u00f1o: 2, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"procesos-antiguedad\", \"historia-ideas-1\", \"pueblos-originarios\", \"problematica-conocimiento\"], correlativasDetalladas: [{ id: \"procesos-antiguedad\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"historia-ideas-1\", type: \"A\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"pueblos-originarios\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"problematica-conocimiento\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"procesos-americanos-1\", codigo: \"AM1\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales Americanos I\", a\u00f1o: 2, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"pueblos-originarios\"], correlativasDetalladas: [{ id: \"pueblos-originarios\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"historia-ideas-2\", codigo: \"HI2\", nombre: \"Historia de las Ideas II\", a\u00f1o: 2, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario\", correlativas: [\"historia-ideas-1\", \"problematica-conocimiento\"], correlativasDetalladas: [{ id: \"historia-ideas-1\", type: \"A\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"problematica-conocimiento\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"mundo-territorialidades\", codigo: \"MT\", nombre: \"El Mundo y las Nuevas Territorialidades\", a\u00f1o: 2, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"historia-ideas-1\", \"pueblos-originarios\", \"procesos-antiguedad\"], correlativasDetalladas: [{ id: \"historia-ideas-1\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"pueblos-originarios\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-antiguedad\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"economia-politica\", codigo: \"EP\", nombre: \"Econom\u00eda Pol\u00edtica\", a\u00f1o: 2, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario\", correlativas: [\"procesos-antiguedad\", \"historia-ideas-1\", \"didactica-general\", \"problematica-conocimiento\"], correlativasDetalladas: [{ id: \"procesos-antiguedad\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"historia-ideas-1\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"didactica-general\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"problematica-conocimiento\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"didactica-ciencias-sociales\", codigo: \"DCS\", nombre: \"Did\u00e1ctica de las Ciencias Sociales\", a\u00f1o: 2, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario\", correlativas: [\"didactica-general\", \"problematica-conocimiento\", \"procesos-antiguedad\", \"historia-ideas-1\"], correlativasDetalladas: [{ id: \"didactica-general\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"problematica-conocimiento\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-antiguedad\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"historia-ideas-1\", type: \"A\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"sujetos-educacion\", codigo: \"SE\", nombre: \"Sujetos de la Educaci\u00f3n Secundaria\", a\u00f1o: 2, tipo: \"Formaci\u00f3n General\", formato: \"Seminario\", correlativas: [\"didactica-general\", \"pedagogia\"], correlativasDetalladas: [{ id: \"didactica-general\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"pedagogia\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"practica-2\", codigo: \"PD2\", nombre: \"Pr\u00e1ctica Docente II - Educaci\u00f3n Secundaria y Pr\u00e1ctica Docente\", a\u00f1o: 2, tipo: \"Pr\u00e1ctica Profesional\", formato: \"Seminario-Taller\", correlativas: [\"practica-1\", \"pedagogia\", \"didactica-general\"], correlativasDetalladas: [{ id: \"practica-1\", type: \"A\", formato: \"Seminario-Taller\", tipo: \"Pr\u00e1ctica Profesional\" }, { id: \"pedagogia\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"didactica-general\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }] },\n        \/\/ TERCER A\u00d1O\n        { id: \"historia-politica-educacion\", codigo: \"HPE\", nombre: \"Historia y Pol\u00edtica de la Educaci\u00f3n Argentina\", a\u00f1o: 3, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [\"pedagogia\"], correlativasDetalladas: [{ id: \"pedagogia\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"sociologia-educacion\", codigo: \"SOE\", nombre: \"Sociolog\u00eda de la Educaci\u00f3n\", a\u00f1o: 3, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"instituciones-educativas\", codigo: \"IE\", nombre: \"An\u00e1lisis y Organizaci\u00f3n de las Instituciones Educativas\", a\u00f1o: 3, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [\"sujetos-educacion\", \"practica-1\", \"practica-2\"], correlativasDetalladas: [{ id: \"sujetos-educacion\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n General\" }, { id: \"practica-1\", type: \"A\", formato: \"Seminario-Taller\", tipo: \"Pr\u00e1ctica Profesional\" }, { id: \"practica-2\", type: \"R\", formato: \"Seminario-Taller\", tipo: \"Pr\u00e1ctica Profesional\" }] },\n        { id: \"procesos-contemporaneos-1\", codigo: \"C1\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales Contempor\u00e1neos I\", a\u00f1o: 3, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"procesos-feudalismo-modernidad\", \"didactica-ciencias-sociales\", \"procesos-americanos-1\", \"historia-ideas-2\", \"economia-politica\"], correlativasDetalladas: [{ id: \"procesos-feudalismo-modernidad\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"didactica-ciencias-sociales\", type: \"A\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-americanos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"historia-ideas-2\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"economia-politica\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"procesos-americanos-2\", codigo: \"AM2\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales Americanos II\", a\u00f1o: 3, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"procesos-americanos-1\", \"mundo-territorialidades\"], correlativasDetalladas: [{ id: \"procesos-americanos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"mundo-territorialidades\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"procesos-argentina-1\", codigo: \"AR1\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales de Argentina I\", a\u00f1o: 3, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"procesos-americanos-1\", \"mundo-territorialidades\"], correlativasDetalladas: [{ id: \"procesos-americanos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"mundo-territorialidades\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"epistemologia-historia\", codigo: \"EH\", nombre: \"Epistemolog\u00eda de la Historia\", a\u00f1o: 3, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario\", correlativas: [\"filosofia\", \"problematica-conocimiento\", \"historia-ideas-2\"], correlativasDetalladas: [{ id: \"filosofia\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"problematica-conocimiento\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"historia-ideas-2\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"didactica-historia\", codigo: \"DH\", nombre: \"Did\u00e1ctica de la Historia\", a\u00f1o: 3, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario\", correlativas: [\"didactica-ciencias-sociales\", \"sujetos-educacion\"], correlativasDetalladas: [{ id: \"didactica-ciencias-sociales\", type: \"A\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"sujetos-educacion\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"udi-1\", codigo: \"UDI1\", nombre: \"UDI I\", a\u00f1o: 3, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Variable\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"practica-3\", codigo: \"PD3\", nombre: \"Pr\u00e1ctica Docente III - Cotidianeidad en las Aulas\", a\u00f1o: 3, tipo: \"Pr\u00e1ctica Profesional\", formato: \"Seminario-Taller\", correlativas: [\"practica-2\", \"psicologia-educacional\", \"sujetos-educacion\", \"procesos-feudalismo-modernidad\", \"didactica-ciencias-sociales\", \"procesos-americanos-1\", \"historia-ideas-2\", \"mundo-territorialidades\", \"economia-politica\"], correlativasDetalladas: [{ id: \"practica-2\", type: \"A\", formato: \"Seminario-Taller\", tipo: \"Pr\u00e1ctica Profesional\" }, { id: \"psicologia-educacional\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"sujetos-educacion\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n General\" }, { id: \"procesos-feudalismo-modernidad\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"didactica-ciencias-sociales\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-americanos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"historia-ideas-2\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"mundo-territorialidades\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"economia-politica\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"practica-3-special\", nombre: \"Todas las UC de 1\u00b0 a\u00f1o (A)\", type: \"A\", isSpecial: true, twoOptions: true }] },\n        \/\/ CUARTO A\u00d1O\n        { id: \"derechos-humanos\", codigo: \"DHU\", nombre: \"Derechos Humanos: \u00c9tica y Ciudadan\u00eda\", a\u00f1o: 4, tipo: \"Formaci\u00f3n General\", formato: \"Asignatura\", correlativas: [\"filosofia\", \"sujetos-educacion\"], correlativasDetalladas: [{ id: \"filosofia\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n General\" }, { id: \"sujetos-educacion\", type: \"A\", formato: \"Seminario\", tipo: \"Formaci\u00f3n General\" }] },\n        { id: \"procesos-contemporaneos-2\", codigo: \"C2\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales Contempor\u00e1neos II\", a\u00f1o: 4, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"procesos-contemporaneos-1\", \"didactica-historia\", \"procesos-americanos-2\", \"procesos-argentina-1\"], correlativasDetalladas: [{ id: \"procesos-contemporaneos-1\", type: \"A\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"didactica-historia\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-americanos-2\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-argentina-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"procesos-americanos-3\", codigo: \"AM3\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales Americanos III\", a\u00f1o: 4, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Asignatura\", correlativas: [\"procesos-contemporaneos-1\", \"procesos-americanos-2\", \"procesos-argentina-1\"], correlativasDetalladas: [{ id: \"procesos-contemporaneos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-americanos-2\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-argentina-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"procesos-argentina-2\", codigo: \"AR2\", nombre: \"Procesos Sociales, Pol\u00edticos, Econ\u00f3micos y Culturales de Argentina II\", a\u00f1o: 4, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Seminario-Taller\", correlativas: [\"procesos-americanos-2\", \"procesos-argentina-1\", \"procesos-contemporaneos-1\"], correlativasDetalladas: [{ id: \"procesos-americanos-2\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-argentina-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-contemporaneos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"problematicas-regionales\", codigo: \"PR\", nombre: \"Problem\u00e1ticas Hist\u00f3ricas Regionales y Locales\", a\u00f1o: 4, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Taller\", correlativas: [\"procesos-contemporaneos-1\", \"didactica-historia\", \"procesos-americanos-1\", \"procesos-argentina-1\", \"epistemologia-historia\"], correlativasDetalladas: [{ id: \"procesos-contemporaneos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"didactica-historia\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-americanos-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"procesos-argentina-1\", type: \"R\", formato: \"Asignatura\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }, { id: \"epistemologia-historia\", type: \"R\", formato: \"Seminario\", tipo: \"Formaci\u00f3n Espec\u00edfica\" }] },\n        { id: \"udi-2\", codigo: \"UDI2\", nombre: \"UDI II\", a\u00f1o: 4, tipo: \"Formaci\u00f3n Espec\u00edfica\", formato: \"Variable\", correlativas: [], correlativasDetalladas: [] },\n        { id: \"practica-4\", codigo: \"RES\", nombre: \"Pr\u00e1ctica Docente IV - Residencia\", a\u00f1o: 4, tipo: \"Pr\u00e1ctica Profesional\", formato: \"Seminario-Taller\", correlativas: [\"practica-3\", \"instituciones-educativas\", \"procesos-contemporaneos-1\", \"didactica-historia\", \"procesos-americanos-2\", \"procesos-argentina-1\", \"epistemologia-historia\", \"udi-1\"], correlativasDetalladas: [{ id: \"practica-4-special\", nombre: \"Todas las UC de 1\u00b0, 2\u00b0 y 3\u00b0 a\u00f1o (A)\", type: \"A\", isSpecial: true, twoOptions: true }] }\n      ];\n      \n      const tipoColores = { \n  \"Formaci\u00f3n General\": \"text-blue-700 border-blue-200\",\n  \"Formaci\u00f3n Espec\u00edfica\": \"text-emerald-700 border-emerald-200\",\n  \"Pr\u00e1ctica Profesional\": \"text-violet-700 border-violet-200\",\n  \"default\": \"text-gray-700 border-gray-200\"\n};\n      const formatoColores = { \n        \"Asignatura\": \"text-blue-700 bg-blue-50 border-blue-200\", \n        \"Seminario\": \"text-green-700 bg-green-50 border-green-200\", \n        \"Taller\": \"text-orange-700 bg-orange-50 border-orange-200\", \n        \"Seminario-Taller\": \"text-purple-700 bg-purple-50 border-purple-200\", \n        \"Variable\": \"text-gray-700 bg-gray-50 border-gray-200\", \n        \"default\": \"bg-gray-50 text-gray-700 border-gray-200\" \n      };\n      const getTipoColor = (tipo) => tipoColores[tipo] || tipoColores.default;\n      const getFormatoColor = (formato) => formatoColores[formato] || formatoColores.default;\n      const getMateriaById = (id) => materias.find(m => m.id === id);\n\n      \/\/ --- Estado de la aplicaci\u00f3n para ambas vistas ---\n      let searchTerm = '';\n      let selectedMateriaId = null;\n      let filtroTipo = 'todos';\n      let filtroA\u00f1o = null;\n      let modoCompacto = false;\n      let zoom = 1;\n      let selectedMateriaCalculator = null;\n      \n      \/\/ Estado de correlativas para la evaluaci\u00f3n actual (contextual)\n      let correlativeStatusMap = {};\n\n      \/\/ --- Elementos del DOM para el mapa de correlatividades ---\n      const searchInput = document.getElementById('searchInput');\n      const filterTipoSelect = document.getElementById('filterTipo');\n      const filterYearSelect = document.getElementById('filterYear');\n      const compactModeSwitch = document.getElementById('compactModeSwitch');\n      const zoomOutBtn = document.getElementById('zoomOutBtn');\n      const zoomInBtn = document.getElementById('zoomInBtn');\n      const resetBtn = document.getElementById('resetBtn');\n      const downloadBtn = document.getElementById('downloadBtn');\n      const zoomLevelSpan = document.getElementById('zoomLevel');\n      const visualizationContent = document.getElementById('visualizationContent');\n      const mainGrid = document.getElementById('mainGrid');\n      const detailPanel = document.getElementById('detailPanel');\n      const closeDetailPanelBtn = document.getElementById('closeDetailPanelBtn');\n      const calculatorBtn = document.getElementById('calculatorBtn');\n\n      \/\/ --- Elementos del DOM para la calculadora \"\u00bfPuedo Cursar?\" ---\n      const evalYearSelector = document.getElementById('evalYearSelector');\n      const materiaSelector = document.getElementById('materiaSelector');\n      const evaluationContainer = document.getElementById('evaluationContainer');\n      const initialMessage = document.getElementById('initialMessage');\n      const backToCascadaBtn = document.getElementById('backToCascadaBtn');\n      const correlativesSection = document.getElementById('correlativesSection');\n      const evaluationPanel = document.getElementById('evaluationPanel');\n\n      \/\/ --- L\u00f3gica de correlatividad y datos ---\n      const getDependents = (materiaId) => materias.filter(m => m.correlativas.includes(materiaId));\n      const getTodasCorrelativas = (materiaId, correlativasEncontradas = new Set()) => {\n        const materia = getMateriaById(materiaId);\n        if (!materia || materia.correlativas.length === 0) return [...correlativasEncontradas];\n        \n        materia.correlativas.forEach(corrId => {\n          if (!correlativasEncontradas.has(corrId)) {\n            correlativasEncontradas.add(corrId);\n            getTodasCorrelativas(corrId, correlativasEncontradas);\n          }\n        });\n        return [...correlativasEncontradas];\n      };\n      \n      const evaluateCourse = (course, localStatusMap) => {\n          if (!course) {\n              return { canEnroll: false, overallLabel: \"Selecciona una materia\", notes: [\"Selecciona una materia para comenzar.\"], activities: false, exams: false, promotion: false, activitiesRestricted: false, examsRestricted: false };\n          }\n\n          const aItems = course.correlativasDetalladas.filter(c => c.type === \"A\");\n          const rItems = course.correlativasDetalladas.filter(c => c.type === \"R\");\n\n          const anyNoReg = course.correlativasDetalladas.some(c => localStatusMap[c.id] === \"no-regularizada\");\n          const aAllApproved = aItems.every(c => localStatusMap[c.id] === \"aprobada\");\n          const rAllAtLeastReg = rItems.every(c => [\"aprobada\", \"regularizada\"].includes(localStatusMap[c.id]));\n          const allApproved = course.correlativasDetalladas.every(c => localStatusMap[c.id] === \"aprobada\");\n\n          if (anyNoReg) {\n              return {\n                  canEnroll: false,\n                  overallLabel: \"No puede cursar\",\n                  activities: false, activitiesRestricted: false,\n                  exams: false, examsRestricted: false,\n                  promotion: false,\n                  notes: [\"Debes, como m\u00ednimo, regularizar o aprobar las correlativas pendientes para habilitar la cursada.\"],\n                  strategy: \"Regulariza\/aprueba las correlativas faltantes antes de inscribirte.\"\n              };\n          }\n\n          if (!aAllApproved) {\n              const missingAItems = aItems.filter(c => localStatusMap[c.id] !== \"aprobada\");\n              const missingANames = missingAItems.map(c => `<strong>${c.isSpecial ? c.nombre : getMateriaById(c.id)?.nombre}<\/strong>`).join(', ');\n              return {\n                  canEnroll: false,\n                  overallLabel: \"Cursada condicional\",\n                  activities: true, activitiesRestricted: true,\n                  exams: true, examsRestricted: true,\n                  promotion: false,\n                  notes: [\n                      \"Puedes cursar y realizar actividades y trabajos pr\u00e1cticos solo si el\/la docente lo permite.\",\n                      \"Parciales y promoci\u00f3n no habilitados hasta aprobar previamente las correlativas pendientes en mesa extraordinaria (u otra habilitada).\"\n                  ],\n                  detailedExplanation: `Seg\u00fan el reglamento, oficialmente no deber\u00edas poder cursar esta materia hasta tener aprobadas todas las correlativas obligatorias (A) que te faltan, en este caso: ${missingANames}. En algunos casos, el\/la docente puede hacer una excepci\u00f3n y permitirte cursar con la condici\u00f3n de que apruebes dichas materias pronto, ya sea en una mesa especial o en alguna instancia extraordinaria. Es crucial que hables con el\/la docente para confirmar esta posibilidad.`,\n                  strategy: \"Gestiona la autorizaci\u00f3n y prioriza aprobar las (A) en la pr\u00f3xima mesa.\"\n              };\n          }\n\n          if (rAllAtLeastReg) {\n              if (allApproved) {\n                  return {\n                      canEnroll: true,\n                      overallLabel: \"Puede cursar sin restricciones\",\n                      activities: true, activitiesRestricted: false,\n                      exams: true, examsRestricted: false,\n                      promotion: true,\n                      notes: [\n                          \"Puedes hacer actividades, rendir parciales y promocionar directamente.\",\n                          \"Si cumples asistencia y notas m\u00ednimas, no necesitas rendir final.\"\n                      ],\n                      strategy: \"Mant\u00e9n calificaciones y asistencia para promocionar.\"\n                  };\n              } else {\n                  const pendingRItems = course.correlativasDetalladas.filter(c => localStatusMap[c.id] === 'regularizada');\n                  const pendingRNames = pendingRItems.map(c => `<strong>${getMateriaById(c.id)?.nombre}<\/strong>`).join(', ');\n                  return {\n                      canEnroll: true,\n                      overallLabel: \"Cursa con restricciones\",\n                      activities: true, activitiesRestricted: false,\n                      exams: true, examsRestricted: true,\n                      promotion: false,\n                      notes: [\n                          \"Puedes cursar y realizar actividades y trabajos pr\u00e1cticos.\",\n                          \"Para rendir parciales o promocionar, primero debes APROBAR las correlativas que tienes regularizadas.\",\n                          \"Si no las apruebas a tiempo en una mesa de examen, no podr\u00e1s promocionar y quedar\u00e1s en condici\u00f3n 'Regular' (si cumples los requisitos de la cursada).\",\n                          \"Podr\u00e1s rendir el examen final de esta materia una vez que hayas aprobado todas las correlativas pendientes.\"\n                      ],\n                      detailedExplanation: `Si no apruebas las materias correlativas pendientes en una mesa extraordinaria (en tu caso: ${pendingRNames}), tu situaci\u00f3n final en esta cursada ser\u00e1 de 'Regular' (siempre que cumplas los requisitos de asistencia y trabajos pr\u00e1cticos). Esto significa que no podr\u00e1s promocionar la materia directamente y deber\u00e1s rendir un examen final. Para poder rendir el final de esta materia, primero debes haber aprobado las correlativas pendientes en una mesa de examen anterior.`,\n                      strategy: \"Aprobar las correlativas (R) cuanto antes para habilitar la evaluaci\u00f3n completa y la posibilidad de promocionar.\"\n                  };\n              }\n          }\n\n          return {\n              canEnroll: false,\n              overallLabel: \"No puede cursar\",\n              activities: false, activitiesRestricted: false,\n              exams: false, examsRestricted: false,\n              promotion: false,\n              notes: [\"Error en la l\u00f3gica de evaluaci\u00f3n. No deber\u00eda llegar aqu\u00ed.\"],\n          };\n      };\n\n      \/\/ --- Funciones para la vista de la calculadora ---\n      const populateMateriaSelector = (year) => {\n          const selector = document.getElementById('materiaSelector');\n          const materiasOfYear = materias.filter(m => m.a\u00f1o == year);\n          \n          selector.innerHTML = '<option value=\"\">-- Elige una materia --<\/option>';\n          materiasOfYear.forEach(materia => {\n              const option = document.createElement('option');\n              option.value = materia.id;\n              option.textContent = `${materia.codigo} - ${materia.nombre}`;\n              selector.appendChild(option);\n          });\n          \n          \/\/ Limpiar el resultado al cambiar de a\u00f1o\n          selectedMateriaCalculator = null;\n          renderCalculator();\n      };\n\n      const renderCalculator = () => {\n          const materiaId = document.getElementById('materiaSelector').value;\n          if (!materiaId) {\n              evaluationContainer.classList.add('hidden');\n              initialMessage.classList.remove('hidden');\n              return;\n          }\n\n          initialMessage.classList.add('hidden');\n          evaluationContainer.classList.remove('hidden');\n\n          const materia = getMateriaById(materiaId);\n          if (!materia) return;\n          selectedMateriaCalculator = materia;\n          \n          \/\/ Inicializar el estado de las correlativas para esta materia\n          correlativeStatusMap = {};\n          materia.correlativasDetalladas.forEach(c => {\n              correlativeStatusMap[c.id] = \"no-regularizada\";\n          });\n          \n          updateCalculatorUI();\n      };\n\n      const updateCalculatorUI = () => {\n          const materia = selectedMateriaCalculator;\n          if (!materia) return;\n\n          const evaluation = evaluateCourse(materia, correlativeStatusMap);\n          const allCorrelativesApproved = materia.correlativasDetalladas.every(c => correlativeStatusMap[c.id] === 'aprobada');\n          const isPromotionAvailable = allCorrelativesApproved;\n\n          let correlativesHtml = `\n               <div class=\"scroll-fix\">\n               <div class=\"flex items-center gap-2\">\n                  <svg class=\"h-5 w-5 text-blue-600\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\"\/><line x1=\"8\" y1=\"17\" x2=\"16\" y2=\"17\"\/><line x1=\"8\" y1=\"9\" x2=\"8\" y2=\"9\"\/><\/svg>\n                  <h3 class=\"font-semibold text-lg\">Correlativas exigidas<\/h3>\n              <\/div>\n              <p class=\"text-sm text-gray-600 mt-2\">\u00a1Marca en qu\u00e9 estado est\u00e1s en cada materia para saber si pod\u00e9s cursar la correlativa que elegiste!<\/p>\n              <div class=\"space-y-3 mt-4\">\n              ${materia.correlativasDetalladas.length === 0 ? `\n                  <p class=\"text-sm text-gray-500\">Esta materia no tiene correlativas.<\/p>\n              ` : materia.correlativasDetalladas.map(c => renderCorrelativaStatusRow(c)).join('')}\n              <\/div>\n          `;\n          \n          let evaluationHtml = `\n              <div class=\"p-4 rounded-lg border-2 ${getEvaluationClass(evaluation.overallLabel)}\">\n                  <div class=\"flex items-center gap-2 font-semibold text-lg\">\n                      ${getEvaluationIcon(evaluation.overallLabel)}\n                      ${evaluation.overallLabel}\n                  <\/div>\n                  <ul class=\"list-disc ml-5 text-sm mt-2\">\n                      ${evaluation.notes.map(note => `<li>${note}<\/li>`).join('')}\n                  <\/ul>\n              <\/div>\n              <div class=\"mt-6\">\n                  <h4 class=\"font-semibold text-gray-800 mb-3\">Capacidades habilitadas<\/h4>\n                  <div class=\"grid sm:grid-cols-3 gap-4\">\n                      ${renderCapability(\"Actividades\", evaluation.activities, evaluation.activitiesRestricted, \"Puedes cursar y realizar trabajos pr\u00e1cticos.\", \"Puedes cursar y realizar actividades y trabajos pr\u00e1cticos solo si el\/la docente lo permite.\", \"No habilitado.\")}\n                      ${renderCapability(\"Parciales\", evaluation.exams, evaluation.examsRestricted, \"Puedes rendir parciales.\", \"Solo si apruebas las correlativas pendientes en mesa extraordinaria de mayo del a\u00f1o consecutivo de la cursada, y\/o en otra mesa que el docente vea pertinente.\", \"No habilitado.\")}\n                      ${renderPromotionCapability(\"Promoci\u00f3n\", isPromotionAvailable, \"Promoci\u00f3n directa disponible.\", \"Promoci\u00f3n no disponible.\")}\n                  <\/div>\n              <\/div>\n              ${evaluation.detailedExplanation ? `\n              <div class=\"mt-6 p-4 bg-blue-50 rounded-lg border border-blue-200 text-sm text-blue-800\">\n                  <div class=\"flex items-start gap-3\">\n                      <svg class=\"h-5 w-5 flex-shrink-0 text-blue-500\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"><\/line><\/svg>\n                      <div>\n                          <p class=\"font-semibold\">Informaci\u00f3n Importante:<\/p>\n                          <p class=\"mt-1\">${evaluation.detailedExplanation}<\/p>\n                      <\/div>\n                  <\/div>\n              <\/div>\n              ` : ''}\n              ${evaluation.strategy ? `\n              <div class=\"mt-6 p-4 bg-gray-100 rounded-lg border border-gray-300 text-sm text-gray-700\">\n                  <p class=\"font-semibold\">Estrategia sugerida:<\/p>\n                  <p>${evaluation.strategy}<\/p>\n              <\/div>\n              ` : ''}\n          `;\n          \n\n\/\/ \u2014\u2014\u2014 NO-SCROLL MODE \u2014\u2014\u2014\n\/\/ Usar el scroller correcto (contenedor .scroll-fix si existe; si no, el documento)\nconst rootScrollEl = document.scrollingElement || document.documentElement || document.body;\nconst scroller = correlativesSection.querySelector('.scroll-fix') || rootScrollEl;\n\n\/\/ Guardar posici\u00f3n actual (sin mover nada)\nconst savedY = (scroller === rootScrollEl)\n  ? (window.pageYOffset || rootScrollEl.scrollTop)\n  : scroller.scrollTop;\n\n\/\/ Re-render normal (tus l\u00edneas de siempre)\n\ncorrelativesSection.innerHTML = correlativesHtml;\nevaluationPanel.innerHTML = evaluationHtml;\nevaluationPanel.classList.remove('hidden');\n\n\n\n\/\/ Restaurar exactamente la misma posici\u00f3n (re-seleccionando el contenedor)\nrequestAnimationFrame(() => {\n  const newScroller = correlativesSection.querySelector('.scroll-fix') || rootScrollEl;\n  if (newScroller === rootScrollEl) {\n    window.scrollTo(0, savedY);\n  } else {\n    newScroller.scrollTop = savedY;\n  }\n});\n\n\/\/ Re-vincular listeners a los radios (sin guardar selectores, sin scroll extra)\nconst radios = correlativesSection.querySelectorAll('input[type=\"radio\"]');\nradios.forEach(radio => {\n  radio.addEventListener('change', (e) => {\n    const [corrId, newStatus] = e.target.value.split(':');\n    correlativeStatusMap[corrId] = newStatus;\n    updateCalculatorUI(); \/\/ solo re-render, nada de scroll\n  });\n});\n\n\n      };\n\n      const getEvaluationClass = (label) => {\n          switch(label) {\n              case \"Puede cursar sin restricciones\": return \"bg-green-50 border-green-500 text-green-800\";\n              case \"Cursa con restricciones\":\n              case \"Cursada condicional\":\n                  return \"bg-yellow-50 border-yellow-500 text-yellow-800\";\n              case \"No puede cursar\": return \"bg-red-50 border-red-500 text-red-800\";\n              default: return \"bg-gray-50 border-gray-500 text-gray-800\";\n          }\n      };\n\n      const getEvaluationIcon = (label) => {\n          switch(label) {\n              case \"Puede cursar sin restricciones\": return `<svg class=\"h-5 w-5 text-green-600\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-8.8\"\/><path d=\"M22 4 12 14.01l-3-3\"\/><\/svg>`;\n              case \"Cursa con restricciones\":\n              case \"Cursada condicional\":\n                  return `<svg class=\"h-5 w-5 text-yellow-600\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\"\/><path d=\"M12 9v4\"\/><path d=\"M12 17h.01\"\/><\/svg>`;\n              case \"No puede cursar\": return `<svg class=\"h-5 w-5 text-red-600\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"m15 9-6 6\"\/><path d=\"m9 9 6 6\"\/><\/svg>`;\n              default: return `<svg class=\"h-5 w-5 text-gray-600\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 16v-4\"\/><path d=\"M12 8h.01\"\/><\/svg>`;\n          }\n      };\n\n      const renderCapability = (title, enabled, restricted, hintEnabled, hintRestricted, hintDisabled) => {\n          let state;\n          let hint;\n          \n          if (enabled) {\n              if (restricted) {\n                  state = 'warn';\n                  hint = hintRestricted;\n              } else {\n                  state = 'on';\n                  hint = hintEnabled;\n              }\n          } else {\n              state = 'off';\n              hint = hintDisabled;\n          }\n\n          let icon;\n          let color;\n          switch(state) {\n              case 'on': icon = `<svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-8.8\"\/><path d=\"M22 4 12 14.01l-3-3\"\/><\/svg>`; color = \"text-emerald-600\"; break;\n              case 'warn': icon = `<svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\"\/><path d=\"M12 9v4\"\/><path d=\"M12 17h.01\"\/><\/svg>`; color = \"text-yellow-600\"; break;\n              case 'off': icon = `<svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"m15 9-6 6\"\/><path d=\"m9 9 6 6\"\/><\/svg>`; color = \"text-red-600\"; break;\n          }\n\n          return `\n              <div class=\"rounded-xl border p-3\">\n                  <div class=\"flex items-center gap-2\">\n                      ${icon}\n                      <div class=\"font-semibold text-black ${color}\">${title}<\/div>\n                  <\/div>\n                  <div class=\"text-xs text-black mt-1\">${hint}<\/div>\n              <\/div>\n          `;\n      };\n      \n      const renderPromotionCapability = (title, isAvailable, hintAvailable, hintUnavailable) => {\n          let state;\n          let hint;\n          let color;\n          let icon;\n\n          if (isAvailable) {\n              state = 'on';\n              hint = hintAvailable;\n              color = \"text-emerald-600\";\n              icon = `<svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-8.8\"\/><path d=\"M22 4 12 14.01l-3-3\"\/><\/svg>`;\n          } else {\n              state = 'off';\n              hint = hintUnavailable;\n              color = \"text-red-600\";\n              icon = `<svg class=\"h-4 w-4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"m15 9-6 6\"\/><path d=\"m9 9 6 6\"\/><\/svg>`;\n          }\n\n          return `\n              <div class=\"rounded-xl border p-3\">\n                  <div class=\"flex items-center gap-2\">\n                      ${icon}\n                      <div class=\"font-semibold text-black ${color}\">${title}<\/div>\n                  <\/div>\n                  <div class=\"text-xs text-black mt-1\">${hint}<\/div>\n              <\/div>\n          `;\n      };\n\n      const renderCorrelativaStatusRow = (correlativa) => {\n          const corrMateria = correlativa.isSpecial ? null : getMateriaById(correlativa.id);\n          \n          let requirementBadge = '';\n          let descriptionText = '';\n\n          if (correlativa.type === 'A') {\n              requirementBadge = '<span class=\"badge bg-red-50 text-red-700 border-red-200\">Obligatoria (debe estar Aprobada)<\/span>';\n              descriptionText = 'Debe estar Aprobada para habilitar la cursada.';\n          } else { \/\/ 'R'\n              requirementBadge = '<span class=\"badge bg-blue-50 text-blue-700 border-blue-200\">Regularizable (al menos Regularizada)<\/span>';\n              descriptionText = 'Puedes cursar y realizar actividades y trabajos pr\u00e1cticos solo si el\/la docente lo permite. Parciales y promoci\u00f3n quedan bloqueados hasta aprobar.';\n          }\n          \n          return `\n              <div class=\"rounded-xl border p-3 space-y-2\">\n                  <div class=\"flex flex-col sm:flex-row sm:items-start justify-between gap-3\">\n                      <div class=\"min-w-0 flex-grow\">\n                          <div class=\"flex items-baseline gap-x-2\">\n                              <span class=\"font-semibold text-black break-words\">${correlativa.isSpecial ? correlativa.nombre : corrMateria.nombre}<\/span>\n                              ${!correlativa.isSpecial ? `<span class=\"badge ${corrMateria.codigo ? 'bg-amber-50 text-amber-800 border-amber-300' : ''}\">${corrMateria.codigo}<\/span>` : ''}\n                          <\/div>\n                          <div class=\"flex flex-wrap items-center gap-2 mt-1\">\n                              ${!correlativa.isSpecial ? `<span class=\"badge ${getTipoColor(corrMateria.tipo)}\">${corrMateria.tipo}<\/span>` : ''}\n                              ${!correlativa.isSpecial ? `<span class=\"badge ${getFormatoColor(corrMateria.formato)}\">${corrMateria.formato}<\/span>` : ''}\n                              ${requirementBadge}\n                          <\/div>\n                      <\/div>\n                      <div class=\"flex flex-wrap gap-2 flex-shrink-0 sm:flex-nowrap\">\n                          ${renderCorrelativeRadioBtn(correlativa.id, 'aprobada', 'Aprobada')}\n                          ${!correlativa.twoOptions ? renderCorrelativeRadioBtn(correlativa.id, 'regularizada', 'Regularizada') : ''}\n                          ${renderCorrelativeRadioBtn(correlativa.id, 'no-regularizada', 'No Regularizada')}\n                      <\/div>\n                  <\/div>\n                  <p class=\"text-xs text-gray-600 pt-2 border-t border-gray-200\">${descriptionText}<\/p>\n              <\/div>\n          `;\n      };\n\n      const renderCorrelativeRadioBtn = (corrId, status, label) => {\n          const id = `corr-${corrId}-${status}`;\n          const checked = correlativeStatusMap[corrId] === status;\n          return `\n              <input type=\"radio\" id=\"${id}\" name=\"corr-status-${corrId}\" value=\"${corrId}:${status}\" class=\"radio-group-item\" ${checked ? \"checked\" : \"\"}>\n              <label for=\"${id}\" class=\"inline-flex items-center gap-2 rounded-md border px-4 py-2 cursor-pointer text-sm select-none transition whitespace-nowrap focus-within:ring-2 focus-within:ring-blue-500 focus-within:ring-offset-2 radio-group-label\">\n                  <span class=\"text-black whitespace-nowrap\">${label}<\/span>\n              <\/label>\n          `;\n      };\n\n\n      \/\/ --- L\u00f3gica de renderizado principal del mapa de correlatividades ---\n      const render = () => {\n        const tipoOrder = { \"Formaci\u00f3n General\": 1, \"Formaci\u00f3n Espec\u00edfica\": 2, \"Pr\u00e1ctica Profesional\": 3 };\n\n        const filteredMaterias = materias\n          .filter(materia => {\n            const matchSearch =\n              materia.nombre.toLowerCase().includes(searchTerm.toLowerCase()) ||\n              materia.codigo.toLowerCase().includes(searchTerm.toLowerCase());\n            const matchTipo = filtroTipo === \"todos\" || materia.tipo === filtroTipo;\n            const matchA\u00f1o = filtroA\u00f1o === null || materia.a\u00f1o === filtroA\u00f1o;\n            return matchSearch && matchTipo && matchA\u00f1o;\n          })\n          .sort((a, b) => (tipoOrder[a.tipo] || 99) - (tipoOrder[b.tipo] || 99));\n\n        visualizationContent.style.transform = `scale(${zoom})`;\n        zoomLevelSpan.textContent = `${Math.round(zoom * 100)}%`;\n        mainGrid.innerHTML = '';\n\n        for (let year = 1; year <= 4; year++) {\n          const materiasOfYear = filteredMaterias.filter(m => m.a\u00f1o === year);\n\n          const yearCol = document.createElement('div');\n          yearCol.className = 'space-y-4';\n          \n          let yearColorClass;\n          if (year === 1) yearColorClass = 'text-blue-700';\n          else if (year === 2) yearColorClass = 'text-green-700';\n          else if (year === 3) yearColorClass = 'text-orange-700';\n          else yearColorClass = 'text-purple-700';\n\n          yearCol.innerHTML = `\n            <div class=\"text-center\">\n              <h3 class=\"text-xl font-bold mb-4 ${yearColorClass}\"><strong>${year}\u00b0 A\u00f1o<\/strong><\/h3>\n              <div class=\"text-sm text-gray-500\">${materiasOfYear.length} materias<\/div>\n            <\/div>\n            <div class=\"space-y-3\" id=\"year-${year}-list\"><\/div>\n          `;\n          mainGrid.appendChild(yearCol);\n\n          const listContainer = yearCol.querySelector(`#year-${year}-list`);\n          materiasOfYear.forEach(materia => {\n            const dependientes = getDependents(materia.id);\n            const todasCorrelativas = getTodasCorrelativas(materia.id);\n            const isHighlighted = selectedMateriaId && (\n              selectedMateriaId === materia.id ||\n              materia.correlativas.includes(selectedMateriaId) ||\n              todasCorrelativas.includes(selectedMateriaId)\n            );\n            \n            const cardClass = `relative cursor-pointer transition-all duration-200 rounded-xl border-2 p-3 bg-white shadow-sm hover:shadow-md ${getTipoColor(materia.tipo)} ${isHighlighted ? 'ring-2 ring-blue-500 shadow-lg' : ''} ${modoCompacto ? \"p-2\" : \"p-3\"}`;            const cardHtml = `\n              <div class=\"${cardClass}\" data-id=\"${materia.id}\">\n                <div class=\"space-y-2\">\n                  <div class=\"flex items-start justify-between\">\n                    <div class=\"flex-1\">\n                      <div class=\"font-bold text-sm\"><strong>${materia.codigo}<\/strong><\/div>\n                      <div class=\"text-xs leading-tight ${modoCompacto ? \"line-clamp-2\" : \"\"}\">${materia.nombre}<\/div>\n                    <\/div>\n                    ${selectedMateriaId === materia.id ? `<svg class=\"h-4 w-4 text-blue-600 flex-shrink-0\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 16v-4\"\/><path d=\"M12 8h.01\"\/><\/svg>` : ''}\n                  <\/div>\n                  ${!modoCompacto ? `\n                  <div class=\"flex flex-wrap gap-1\">\n                    <span class=\"badge text-xs ${getFormatoColor(materia.formato)}\">${materia.formato}<\/span>\n                  <\/div>\n                  ` : ''}\n                  ${materia.correlativas.length > 0 ? `\n                  <div class=\"flex items-center space-x-1\">\n                    <div class=\"text-xs text-gray-500\">Req:<\/div>\n                    <div class=\"flex flex-wrap gap-1\">\n                      ${materia.correlativas.map(corrId => {\n                        const corrMateria = materias.find(m => m.id === corrId);\n                        return corrMateria ? `<span class=\"badge text-xs bg-yellow-50 text-yellow-700 border-yellow-300\"><strong>${corrMateria.codigo}<\/strong><\/span>` : '';\n                      }).join('')}\n                    <\/div>\n                  <\/div>\n                  ` : ''}\n                  ${dependientes.length > 0 && !modoCompacto ? `\n                  <div class=\"flex items-center space-x-1\">\n                    <svg class=\"h-3 w-3 text-gray-400\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"\/><\/svg>\n                    <div class=\"text-xs text-gray-500\">\n                      Habilita ${dependientes.length} materia${dependientes.length > 1 ? \"s\" : \"\"}\n                    <\/div>\n                  <\/div>\n                  ` : ''}\n                <\/div>\n              <\/div>\n            `;\n            const cardElement = document.createElement('div');\n            cardElement.innerHTML = cardHtml.trim();\n            cardElement.firstChild.addEventListener('click', () => {\n              selectedMateriaId = selectedMateriaId === materia.id ? null : materia.id;\n              render();\n              if (selectedMateriaId) {\n                renderDetailPanel(materia);\n              } else {\n                detailPanel.classList.add('hidden');\n              }\n            });\n            listContainer.appendChild(cardElement.firstChild);\n          });\n        }\n      };\n\n      const renderDetailPanel = (materia) => {\n        detailPanel.classList.remove('hidden');\n        document.getElementById('detailPanelTitle').textContent = materia.nombre;\n        \n        const badgesContainer = document.getElementById('detailPanelBadges');\n        badgesContainer.innerHTML = `\n          <span class=\"badge ${getTipoColor(materia.tipo)}\">${materia.tipo}<\/span>\n          <span class=\"badge ${getFormatoColor(materia.formato)}\">${materia.formato}<\/span>\n          <span class=\"badge badge-outline\"><strong>${materia.a\u00f1o}\u00b0 A\u00f1o<\/strong><\/span>\n        `;\n        \n        const correlativesList = document.getElementById('correlativesList');\n        correlativesList.innerHTML = '';\n        \n        if (materia.correlativas.length > 0 && materia.id !== 'practica-4') {\n          materia.correlativas.forEach(corrId => {\n            const corrMateria = getMateriaById(corrId);\n            if (corrMateria) {\n              const correlativaDetalle = materia.correlativasDetalladas.find(c => c.id === corrId);\n              const status = correlativaDetalle ? correlativaDetalle.type : 'R'; \/\/ Default to 'R' if not found\n              const itemHtml = `\n                <div class=\"flex items-center space-x-2 p-2 bg-yellow-50 rounded-lg border border-yellow-200\">\n                  <span class=\"badge bg-yellow-100 text-yellow-800 border-yellow-300\"><strong>${corrMateria.codigo}<\/strong><\/span>\n                  <span class=\"text-sm text-gray-700\">${corrMateria.nombre} (<strong>${status}<\/strong>)<\/span>\n                <\/div>\n              `;\n              correlativesList.innerHTML += itemHtml;\n            }\n          });\n        } else if (materia.correlativas.length === 0) {\n          correlativesList.innerHTML = '<p class=\"text-gray-500 text-sm\">No requiere correlativas previas<\/p>';\n        }\n\n        if (materia.id === \"practica-3\") {\n            correlativesList.innerHTML += `\n              <div class=\"flex items-center space-x-2 p-2 bg-blue-50 rounded-lg border border-blue-200 mt-2\">\n                <span class=\"badge bg-blue-100 text-blue-800 border-blue-300\"><strong>Especial<\/strong><\/span>\n                <span class=\"text-sm text-gray-700\"><strong>Todas las UC de 1\u00b0 a\u00f1o (A)<\/strong><\/span>\n              <\/div>\n            `;\n        }\n        if (materia.id === \"practica-4\") {\n            correlativesList.innerHTML = `\n              <div class=\"flex items-center space-x-2 p-2 bg-blue-50 rounded-lg border border-blue-200 mt-2\">\n                <span class=\"badge bg-blue-100 text-blue-800 border-blue-300\"><strong>Especial<\/strong><\/span>\n                <span class=\"text-sm text-gray-700\"><strong>Todas las UC de 1\u00b0, 2\u00b0 y 3\u00b0 a\u00f1o (A)<\/strong><\/span>\n              <\/div>\n            `;\n        }\n\n        const dependentsList = document.getElementById('dependentsList');\n        dependentsList.innerHTML = '';\n        const dependientes = getDependents(materia.id);\n        if (dependientes.length > 0) {\n          dependientes.forEach(depMateria => {\n            const itemHtml = `\n              <div class=\"flex items-center space-x-2 p-2 bg-green-50 rounded-lg border border-green-200\">\n                <span class=\"badge bg-green-100 text-green-800 border-green-300\"><strong>${depMateria.codigo}<\/strong><\/span>\n                <span class=\"text-sm text-gray-700\">${depMateria.nombre}<\/span>\n                <span class=\"badge badge-outline text-xs\"><strong>${depMateria.a\u00f1o}\u00b0 A\u00f1o<\/strong><\/span>\n              <\/div>\n            `;\n            dependentsList.innerHTML += itemHtml;\n          });\n        } else {\n          dependentsList.innerHTML = '<p class=\"text-gray-500 text-sm\">No es correlativa de otras materias<\/p>';\n        }\n      };\n\n      \/\/ --- Manejadores de eventos para el mapa de correlatividades ---\n      searchInput.addEventListener('input', (e) => {\n        searchTerm = e.target.value;\n        render();\n      });\n      filterTipoSelect.addEventListener('change', (e) => {\n        filtroTipo = e.target.value;\n        render();\n      });\n      filterYearSelect.addEventListener('change', (e) => {\n        filtroA\u00f1o = e.target.value ? Number.parseInt(e.target.value) : null;\n        render();\n      });\n      compactModeSwitch.addEventListener('change', (e) => {\n        const oldValue = modoCompacto;\n        modoCompacto = e.target.checked;\n        if (oldValue !== modoCompacto) {\n            animateListItems(modoCompacto);\n        } else {\n            render();\n        }\n      });\n      const animateListItems = (isCompact) => {\n        const allItems = document.querySelectorAll('#mainGrid [data-id]');\n        const animationClass = isCompact ? 'animate-bounce-in-y' : 'animate-bounce-out-y';\n        const resetClass = isCompact ? 'animate-bounce-out-y' : 'animate-bounce-in-y';\n        allItems.forEach((item) => {\n            item.classList.remove(resetClass);\n            item.classList.add(animationClass);\n        });\n        setTimeout(() => {\n          render();\n        }, isCompact ? 500 : 300);\n      };\n      zoomOutBtn.addEventListener('click', () => {\n        zoom = Math.max(zoom - 0.2, 0.5);\n        render();\n      });\n      zoomInBtn.addEventListener('click', () => {\n        zoom = Math.min(zoom + 0.2, 2);\n        render();\n      });\n      resetBtn.addEventListener('click', () => {\n        searchTerm = ''; selectedMateriaId = null; filtroTipo = 'todos'; filtroA\u00f1o = null;\n        modoCompacto = false; zoom = 1;\n        searchInput.value = ''; filterTipoSelect.value = 'todos'; filterYearSelect.value = '';\n        compactModeSwitch.checked = false; detailPanel.classList.add('hidden');\n        render();\n      });\n      closeDetailPanelBtn.addEventListener('click', () => {\n        selectedMateriaId = null;\n        detailPanel.classList.add('hidden');\n        render();\n      });\n      downloadBtn.addEventListener('click', () => {\n        const pdfUrl = 'https:\/\/drive.google.com\/file\/d\/13znCaPZBl00OHVRLZhJ6Fh8CQaGIKi63\/view?usp=sharing';\n        \n        const link = document.createElement(\"a\");\n        link.href = pdfUrl;\n        link.download = \"Correlatividades.pdf\";\n        link.target = \"_blank\"; \n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      });\n      \n      \/\/ --- Manejadores de eventos para la calculadora \"\u00bfPuedo Cursar?\" ---\n      evalYearSelector.addEventListener('change', (e) => {\n          populateMateriaSelector(e.target.value);\n      });\n      materiaSelector.addEventListener('change', (e) => {\n          const materiaId = e.target.value;\n          selectedMateriaCalculator = getMateriaById(materiaId);\n          renderCalculator();\n      });\n\n      backToCascadaBtn.addEventListener('click', showCascada);\n      calculatorBtn.addEventListener('click', showCalculator);\n\n      \/\/ --- Render inicial ---\n      render();\n    });\n  <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Mapa y Calculadora de Correlatividades Mapa de Correlatividades: \u00bfQu\u00e9 Me Falta? Con \u00bfQu\u00e9 Me Falta? pod\u00e9s ver al instante qu\u00e9 materias te faltan para cursar o rendir. Seleccion\u00e1s la materia en un mapa interactivo y el sistema te muestra sus correlativas previas y posteriores. As\u00ed sab\u00e9s exactamente qu\u00e9 te habilita a seguir avanzando. Ya sab\u00e9s &#8230; <a title=\"App Correlativas Profesorado de Historia\" class=\"read-more\" href=\"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/app-correlativas-profesora-de-historia\/\" aria-label=\"More on App Correlativas Profesorado de Historia\">[+]<\/a><\/p>\n","protected":false},"author":37,"featured_media":5203,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/pages\/5192"}],"collection":[{"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/comments?post=5192"}],"version-history":[{"count":3,"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/pages\/5192\/revisions"}],"predecessor-version":[{"id":5407,"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/pages\/5192\/revisions\/5407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/media\/5203"}],"wp:attachment":[{"href":"https:\/\/iscsconcordia-ers.infd.edu.ar\/sitio\/wp-json\/wp\/v2\/media?parent=5192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}