{"id":10452,"date":"2026-05-27T01:38:29","date_gmt":"2026-05-27T05:38:29","guid":{"rendered":"https:\/\/petrolera.umsa.edu.bo\/?page_id=10452"},"modified":"2026-07-23T00:24:15","modified_gmt":"2026-07-23T04:24:15","slug":"maestria-en-caracterizacion-geoquimica-y-petrofisica-de-reservorios-orientada-a-hidrocarburos","status":"publish","type":"page","link":"https:\/\/petrolera.umsa.edu.bo\/index.php\/maestria-en-caracterizacion-geoquimica-y-petrofisica-de-reservorios-orientada-a-hidrocarburos\/","title":{"rendered":"Maestr\u00eda en caracterizaci\u00f3n geoqu\u00edmica y petrof\u00edsica de reservorios orientada a hidrocarburos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10452\" class=\"elementor elementor-10452\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2430e92e e-flex e-con-boxed e-con e-parent\" data-id=\"2430e92e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-53c3bedf elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"53c3bedf\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;slideInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">MAESTRIA EN CARACTERIZACION GEOQUIMICA  Y PETROFISICA DE RESERVORIOS ORIENTADA A HIDROCARBUROS <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bf8701b e-flex e-con-boxed e-con e-parent\" data-id=\"bf8701b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d766556 elementor-widget elementor-widget-text-editor\" data-id=\"d766556\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong data-start=\"0\" data-end=\"60\">UNIVERSIDAD MAYOR DE SAN ANDR\u00c9S<\/strong><\/p><p><strong data-start=\"0\" data-end=\"60\">FACULTAD DE INGENIER\u00cdA<\/strong><\/p><p><strong data-start=\"63\" data-end=\"98\">CARRERA DE INGENIER\u00cdA PETROLERA<\/strong><\/p><p><strong data-start=\"101\" data-end=\"138\">INSTITUTO DE INGENIER\u00cdA PETROLERA<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ebdd4e2 e-flex e-con-boxed e-con e-parent\" data-id=\"ebdd4e2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1be7508 elementor-widget elementor-widget-heading\" data-id=\"1be7508\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">INSCRIPCIONES ABIERTAS 2026<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-38cd232 e-flex e-con-boxed e-con e-parent\" data-id=\"38cd232\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-451c5d9 elementor-widget elementor-widget-text-editor\" data-id=\"451c5d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Inversi\u00f3n<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8a579fe e-flex e-con-boxed e-con e-parent\" data-id=\"8a579fe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-91eb17d e-con-full e-flex e-con e-child\" data-id=\"91eb17d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69f7c26 elementor-widget elementor-widget-price-table\" data-id=\"69f7c26\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"price-table.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-price-table\">\n\t\t\t\t\t\t\t<div class=\"elementor-price-table__header\">\n\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-price-table__heading\">\n\t\t\t\t\t\tMATRICULA\t\t\t\t\t\t<\/h3>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__subheading\">\n\t\t\t\t\t\t\tValor anual\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"elementor-price-table__price\">\n\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__currency\">Bs<\/span>\t\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__integer-part\">\n\t\t\t\t\t\t1679\t\t\t\t\t<\/span>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__period elementor-typo-excluded\">Anual<\/span>\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t<ul class=\"elementor-price-table__features-list\">\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"elementor-repeater-item-eef8e38\">\n\t\t\t\t\t\t\t<div class=\"elementor-price-table__feature-inner\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-check-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span >\n\t\t\t\t\t\t\t\t\t\tMaestr\u00eda en caracterizaci\u00f3n geoqu\u00edmica y petrof\u00edsica de reservorios orientada a hidrocarburos\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"elementor-price-table__footer\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-price-table__button elementor-button elementor-size-md\" href=\"https:\/\/api.whatsapp.com\/send?phone=59168026269\">\n\t\t\t\t\t\t\tContactar\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-13a1462 e-con-full e-flex e-con e-child\" data-id=\"13a1462\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-86a43f9 elementor-widget elementor-widget-price-table\" data-id=\"86a43f9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"price-table.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-price-table\">\n\t\t\t\t\t\t\t<div class=\"elementor-price-table__header\">\n\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-price-table__heading\">\n\t\t\t\t\t\tCOSTO\t\t\t\t\t\t<\/h3>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__subheading\">\n\t\t\t\t\t\t\tValor total del programa\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"elementor-price-table__price\">\n\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__currency\">Bs<\/span>\t\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__integer-part\">\n\t\t\t\t\t\t20000\t\t\t\t\t<\/span>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-price-table__period elementor-typo-excluded\">4 Semestres<\/span>\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t<ul class=\"elementor-price-table__features-list\">\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"elementor-repeater-item-92520b2\">\n\t\t\t\t\t\t\t<div class=\"elementor-price-table__feature-inner\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-check-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span >\n\t\t\t\t\t\t\t\t\t\tMaestr\u00eda en caracterizaci\u00f3n geoqu\u00edmica y petrof\u00edsica de reservorios orientada a hidrocarburos\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"elementor-price-table__footer\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-price-table__button elementor-button elementor-size-md\" href=\"https:\/\/api.whatsapp.com\/send?phone=59168026269\">\n\t\t\t\t\t\t\tContactar\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7a45210 e-flex e-con-boxed e-con e-parent\" data-id=\"7a45210\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-040c27e elementor-widget elementor-widget-text-editor\" data-id=\"040c27e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\" data-section-id=\"1ojnooq\" data-start=\"172\" data-end=\"282\">MAESTR\u00cdA EN CARACTERIZACI\u00d3N GEOQU\u00cdMICA Y PETROF\u00cdSICA DE RESERVORIOS ORIENTADA A HIDROCARBUROS \u2013 1RA VERSI\u00d3N<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0602dc3 elementor-widget elementor-widget-text-editor\" data-id=\"0602dc3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: left;\" data-section-id=\"1ojnooq\" data-start=\"172\" data-end=\"282\"><span style=\"color: #808080;\"><span style=\"font-size: 16px; font-style: inherit; font-weight: inherit; text-align: left;\">La propuesta curricular de la Maestr\u00eda en Caracterizaci\u00f3n Geoqu\u00edmica y <\/span><span lang=\"ES\">Petrof\u00edsica de Rocas Generadoras y Reservorios de Hidrocarburos responde a la necesidad de modernizar y especializar la formaci\u00f3n de postgrado en el \u00e1rea energ\u00e9tica, en concordancia con las demandas actuales del sector hidrocarbur\u00edfero y la realidad productiva nacional.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 150%; text-align: left;\"><span style=\"color: #808080;\"><a style=\"color: #808080;\" name=\"_Toc223452577\"><\/a><span lang=\"ES\">La Universidad Mayor de San Andr\u00e9s, a trav\u00e9s de la Facultad de Ingenier\u00eda y el INSPET, impulsa un dise\u00f1o curricular innovador, interdisciplinario y orientado a la aplicaci\u00f3n pr\u00e1ctica. El programa integra geoqu\u00edmica org\u00e1nica, petrof\u00edsica avanzada, modelado de reservorios, an\u00e1lisis integrado de datos geol\u00f3gicos y uso de software especializado, superando enfoques tradicionales fragmentados y promoviendo una visi\u00f3n sist\u00e9mica del ciclo completo del hidrocarburo.<\/span><\/span><\/p>\n<p><span style=\"color: #808080;\"><a style=\"font-size: 16px; color: #808080;\" name=\"_Toc223452578\"><\/a><span lang=\"ES\">La innovaci\u00f3n se justifica por la necesidad de formar capital humano altamente especializado en Bolivia, capaz de reducir riesgos exploratorios, optimizar la producci\u00f3n y cubrir la brecha de expertos nacionales. El enfoque por competencias prioriza la resoluci\u00f3n de problemas reales, el an\u00e1lisis de casos nacionales y la investigaci\u00f3n aplicada, garantizando egresados con alta capacidad t\u00e9cnica y liderazgo profesional.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 150%; text-align: left;\"><span style=\"color: #808080;\"><a style=\"color: #808080;\" name=\"_Toc223452579\"><\/a><span lang=\"ES\">Asimismo, la modalidad virtual ampl\u00eda el acceso a profesionales en ejercicio, manteniendo la calidad acad\u00e9mica e integrando pr\u00e1cticas en<br>laboratorios especializados. En conjunto, esta propuesta fortalece la oferta de postgrado, impulsa la investigaci\u00f3n aplicada y consolida el v\u00ednculo universidad\u2013sector productivo, contribuyendo al desarrollo t\u00e9cnico y cient\u00edfico<br>del pa\u00eds.<\/span><\/span><\/p>\n<h3 data-section-id=\"1vc6x8c\" data-start=\"866\" data-end=\"902\">\u00bfPor qu\u00e9 estudiar esta maestr\u00eda?<\/h3>\n<ul data-start=\"903\" data-end=\"1242\">\n<li data-section-id=\"1wbue03\" data-start=\"903\" data-end=\"962\">Formaci\u00f3n especializada con enfoque t\u00e9cnico y cient\u00edfico.<\/li>\n<li data-section-id=\"1p8zxf3\" data-start=\"963\" data-end=\"1020\">Docencia nacional e internacional altamente calificada.<\/li>\n<li data-section-id=\"ehtt7v\" data-start=\"1021\" data-end=\"1090\">Contenidos actualizados orientados a la industria hidrocarbur\u00edfera.<\/li>\n<li data-section-id=\"fc9cif\" data-start=\"1091\" data-end=\"1151\">Modalidad virtual para mayor accesibilidad y flexibilidad.<\/li>\n<li data-section-id=\"1j43v1e\" data-start=\"1152\" data-end=\"1242\">Desarrollo de competencias en interpretaci\u00f3n, an\u00e1lisis y caracterizaci\u00f3n de reservorios.<\/li>\n<\/ul>\n<h3 data-section-id=\"11pla0m\" data-start=\"1244\" data-end=\"1279\">Duraci\u00f3n y estructura acad\u00e9mica<\/h3>\n<ul data-start=\"1280\" data-end=\"1452\">\n<li data-section-id=\"1su7pgo\" data-start=\"1280\" data-end=\"1302\">Inicio: Septiembre 2026<\/li>\n<li data-section-id=\"zw1n8r\" data-start=\"1303\" data-end=\"1333\">Finalizaci\u00f3n: Junio 2028<\/li>\n<li data-section-id=\"jzpyi6\" data-start=\"1334\" data-end=\"1359\">Duraci\u00f3n: 4 semestres<\/li>\n<li data-section-id=\"25g62j\" data-start=\"1360\" data-end=\"1452\">Incluye 2 diplomados intermedios:<br><ul data-start=\"1398\" data-end=\"1452\">\n<li data-section-id=\"13n9o2d\" data-start=\"1398\" data-end=\"1424\">Diplomado en Petrof\u00edsica<\/li>\n<li data-section-id=\"qsgqyg\" data-start=\"1427\" data-end=\"1452\">Diplomado en Geoqu\u00edmica<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 data-section-id=\"534fon\" data-start=\"1454\" data-end=\"1467\">Inversi\u00f3n<\/h3>\n<ul data-start=\"1468\" data-end=\"1563\">\n<li data-section-id=\"1fu4t0h\" data-start=\"1468\" data-end=\"1498\">Matr\u00edcula anual: Bs. 1.679<\/li>\n<li data-section-id=\"hvzqct\" data-start=\"1499\" data-end=\"1539\">Valor total del programa: Bs. 20.000<\/li>\n<li data-section-id=\"1mjxnt5\" data-start=\"1540\" data-end=\"1563\">Pago en mensualidades Bs. 1000 (20 meses)&nbsp;<\/li>\n<\/ul>\n<h3 data-section-id=\"ote35x\" data-start=\"1565\" data-end=\"1578\">Modalidad<\/h3>\n<ul data-start=\"1579\" data-end=\"1588\">\n<li data-section-id=\"qh9ru1\" data-start=\"1579\" data-end=\"1588\">Virtual<\/li>\n<\/ul>\n<h3 data-section-id=\"ote35x\" data-start=\"1565\" data-end=\"1578\">Horarios&nbsp;<\/h3>\n<ul data-start=\"1579\" data-end=\"1588\">\n<li data-section-id=\"qh9ru1\" data-start=\"1579\" data-end=\"1588\">18:30 &#8211; 21:30 Lunes a Viernes ( Plataforma Teams)&nbsp;<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dfea86e e-flex e-con-boxed e-con e-parent\" data-id=\"dfea86e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c2e7a8 elementor-widget elementor-widget-html\" data-id=\"0c2e7a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Panel informativo<\/title>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:wght@300;400;500;600&family=DM+Serif+Display&display=swap\" rel=\"stylesheet\">\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.min.js\"><\/script>\r\n<style>\r\n  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n  :root {\r\n    --teal-50:  #E1F5EE;\r\n    --teal-600: #0F6E56;\r\n    --teal-800: #085041;\r\n    --amber-50: #FAEEDA;\r\n    --amber-600:#854F0B;\r\n    --amber-800:#633806;\r\n    --gray-50:  #F7F8F7;\r\n    --gray-100: #EFEFED;\r\n    --gray-400: #888780;\r\n    --gray-600: #5F5E5A;\r\n    --gray-900: #1a1a18;\r\n    --radius-md: 8px;\r\n    --radius-lg: 14px;\r\n    --border: 1px solid #e4e4e0;\r\n  }\r\n\r\n  body {\r\n    font-family: 'DM Sans', sans-serif;\r\n    background: #f9f9f7;\r\n    color: var(--gray-900);\r\n    min-height: 100vh;\r\n    padding: 0;\r\n  }\r\n\r\n  #panel-root {\r\n    width: 100%;\r\n    max-width: 100%;\r\n  }\r\n\r\n  .p-section {\r\n    width: 100%;\r\n    padding: 36px 40px;\r\n    border-bottom: var(--border);\r\n    animation: fadeIn 0.35s ease both;\r\n  }\r\n  .p-section:last-child { border-bottom: none; }\r\n\r\n  @keyframes fadeIn {\r\n    from { opacity: 0; transform: translateY(8px); }\r\n    to   { opacity: 1; transform: translateY(0); }\r\n  }\r\n\r\n  .p-section__head {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    margin-bottom: 22px;\r\n  }\r\n  .p-section__icon {\r\n    width: 32px; height: 32px;\r\n    border-radius: var(--radius-md);\r\n    display: flex; align-items: center; justify-content: center;\r\n    font-size: 16px;\r\n    flex-shrink: 0;\r\n  }\r\n  .p-section__icon--info   { background: var(--gray-100); color: var(--gray-600); }\r\n  .p-section__icon--evento { background: var(--teal-50);  color: var(--teal-600); }\r\n  .p-section__icon--aviso  { background: var(--amber-50); color: var(--amber-600);}\r\n\r\n  .p-section__label {\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    letter-spacing: 0.1em;\r\n    text-transform: uppercase;\r\n    color: var(--gray-400);\r\n  }\r\n\r\n  .p-info-list {\r\n    display: grid;\r\n    grid-template-columns: repeat(2, 1fr);\r\n    gap: 16px;\r\n  }\r\n  .p-info-item {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n    background: #fff;\r\n    border: var(--border);\r\n    border-radius: var(--radius-lg);\r\n    overflow: hidden;\r\n    font-size: 14px;\r\n    line-height: 1.55;\r\n    color: var(--gray-900);\r\n    transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\r\n  }\r\n  .p-info-item:hover {\r\n    border-color: #b8b8b4;\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 4px 16px rgba(0,0,0,0.06);\r\n  }\r\n  .p-info-item__dot {\r\n    width: 6px; height: 6px;\r\n    border-radius: 50%;\r\n    background: var(--teal-600);\r\n    margin-top: 7px;\r\n    flex-shrink: 0;\r\n  }\r\n  .p-info-item__body {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n    flex: 1;\r\n    min-width: 0;\r\n  }\r\n  .p-info-item__text {\r\n    display: flex;\r\n    align-items: flex-start;\r\n    gap: 10px;\r\n    min-width: 0;\r\n    padding: 18px 20px;\r\n  }\r\n  .p-info-item__text > span,\r\n  .p-info-item__text > a {\r\n    min-width: 0;\r\n  }\r\n\r\n  \/* \u2500\u2500 Link dentro de \u00edtem de info \u2500\u2500 *\/\r\n  .p-info-item a.p-info-link {\r\n    color: var(--teal-600);\r\n    text-decoration: none;\r\n    font-weight: 500;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 5px;\r\n    transition: color 0.15s;\r\n  }\r\n  .p-info-item a.p-info-link:hover {\r\n    color: var(--teal-800);\r\n    text-decoration: underline;\r\n    text-underline-offset: 3px;\r\n  }\r\n  .p-info-item a.p-info-link::after {\r\n    content: '';\r\n    display: inline-block;\r\n    width: 12px; height: 12px;\r\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%230F6E56' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6'\/%3E%3Cpolyline points='15 3 21 3 21 9'\/%3E%3Cline x1='10' y1='14' x2='21' y2='3'\/%3E%3C\/svg%3E\");\r\n    background-repeat: no-repeat;\r\n    background-size: contain;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  \/* \u2500\u2500 Miniatura de link (imagen o PDF) \u2500\u2500 *\/\r\n  .p-thumb {\r\n    width: 100%;\r\n    height: 190px;\r\n    border-radius: 0;\r\n    border: none;\r\n    border-bottom: var(--border);\r\n    background: var(--gray-50);\r\n    overflow: hidden;\r\n    flex-shrink: 0;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    position: relative;\r\n    transition: opacity 0.15s;\r\n  }\r\n  .p-thumb:hover { opacity: 0.92; }\r\n  .p-thumb img,\r\n  .p-thumb canvas {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n    display: block;\r\n  }\r\n  .p-thumb__badge {\r\n    position: absolute;\r\n    bottom: 8px;\r\n    right: 8px;\r\n    background: rgba(0,0,0,0.65);\r\n    color: #fff;\r\n    font-size: 10px;\r\n    font-weight: 600;\r\n    letter-spacing: 0.03em;\r\n    padding: 3px 8px;\r\n    border-radius: 4px;\r\n    line-height: 1.4;\r\n  }\r\n  .p-thumb__placeholder {\r\n    color: var(--gray-400);\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 100%;\r\n    height: 100%;\r\n  }\r\n  .p-thumb__placeholder svg { width: 34px; height: 34px; }\r\n\r\n  .p-cards {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\r\n    gap: 14px;\r\n  }\r\n  .p-card {\r\n    background: #fff;\r\n    border: var(--border);\r\n    border-radius: var(--radius-lg);\r\n    padding: 18px 20px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n    transition: border-color 0.15s, transform 0.15s;\r\n  }\r\n  .p-card:hover {\r\n    border-color: #b8b8b4;\r\n    transform: translateY(-2px);\r\n  }\r\n  .p-card__badge {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 6px;\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    letter-spacing: 0.07em;\r\n    text-transform: uppercase;\r\n    padding: 4px 10px;\r\n    border-radius: 100px;\r\n    width: fit-content;\r\n  }\r\n  .p-card__badge--evento { background: var(--teal-50);  color: var(--teal-800); }\r\n  .p-card__badge--aviso  { background: var(--amber-50); color: var(--amber-800);}\r\n\r\n  .p-card__text {\r\n    font-size: 13.5px;\r\n    line-height: 1.6;\r\n    color: var(--gray-600);\r\n  }\r\n\r\n  .p-error {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    padding: 16px 20px;\r\n    font-size: 13px;\r\n    color: #A32D2D;\r\n    background: #fdf2f2;\r\n    border-radius: var(--radius-lg);\r\n    border: 1px solid #f5c6c6;\r\n    margin: 8px 0;\r\n  }\r\n\r\n  \/* \u2500\u2500 Lightbox para ampliar imagen \/ PDF \u2500\u2500 *\/\r\n  .p-lightbox {\r\n    display: none;\r\n    position: fixed;\r\n    inset: 0;\r\n    background: rgba(15, 15, 14, 0.86);\r\n    z-index: 9999;\r\n    align-items: center;\r\n    justify-content: center;\r\n    padding: 28px;\r\n    animation: fadeIn 0.18s ease both;\r\n  }\r\n  .p-lightbox.is-open { display: flex; }\r\n  .p-lightbox__card {\r\n    display: flex;\r\n    flex-direction: column;\r\n    width: 100%;\r\n    max-width: 880px;\r\n    max-height: 90vh;\r\n    background: #fff;\r\n    border-radius: var(--radius-lg);\r\n    overflow: hidden;\r\n    box-shadow: 0 20px 60px rgba(0,0,0,0.35);\r\n  }\r\n  .p-lightbox__header {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 12px;\r\n    padding: 10px 14px;\r\n    background: var(--gray-50);\r\n    border-bottom: var(--border);\r\n    flex-shrink: 0;\r\n  }\r\n  .p-lightbox__open-link {\r\n    color: var(--teal-600);\r\n    font-size: 12.5px;\r\n    font-weight: 500;\r\n    text-decoration: none;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 5px;\r\n  }\r\n  .p-lightbox__open-link:hover { color: var(--teal-800); text-decoration: underline; }\r\n  .p-lightbox__close {\r\n    width: 26px;\r\n    height: 26px;\r\n    border-radius: 50%;\r\n    background: transparent;\r\n    border: none;\r\n    color: var(--gray-900);\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    line-height: 1;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n    padding: 0;\r\n    transition: color 0.15s, transform 0.15s;\r\n  }\r\n  .p-lightbox__close:hover { color: var(--teal-600); transform: scale(1.1); }\r\n  .p-lightbox__content {\r\n    flex: 1;\r\n    min-height: 0;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    background: #f2f2f0;\r\n  }\r\n  .p-lightbox__content img {\r\n    max-width: 100%;\r\n    max-height: 82vh;\r\n    display: block;\r\n    margin: auto;\r\n  }\r\n  .p-lightbox__content iframe {\r\n    width: 100%;\r\n    height: 82vh;\r\n    border: none;\r\n    display: block;\r\n    background: #fff;\r\n  }\r\n\r\n  @media (max-width: 700px) {\r\n    .p-info-list { grid-template-columns: 1fr; }\r\n  }\r\n  @media (max-width: 600px) {\r\n    .p-section { padding: 24px 18px; }\r\n    .p-cards { grid-template-columns: 1fr 1fr; gap: 10px; }\r\n    .p-lightbox { padding: 14px; }\r\n    .p-lightbox__content iframe,\r\n    .p-lightbox__content img { height: 74vh; max-height: 74vh; }\r\n  }\r\n  @media (max-width: 380px) {\r\n    .p-cards { grid-template-columns: 1fr; }\r\n    .p-section { padding: 20px 14px; }\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div id=\"panel-root\"><\/div>\r\n\r\n<div class=\"p-lightbox\" id=\"p-lightbox\">\r\n  <div class=\"p-lightbox__card\">\r\n    <div class=\"p-lightbox__header\">\r\n      <a class=\"p-lightbox__open-link\" id=\"p-lightbox-openlink\" href=\"#\" target=\"_blank\" rel=\"noopener noreferrer\">Abrir en pesta\u00f1a nueva \u2197<\/a>\r\n      <button class=\"p-lightbox__close\" id=\"p-lightbox-close\" aria-label=\"Cerrar\">\u2715<\/button>\r\n    <\/div>\r\n    <div class=\"p-lightbox__content\" id=\"p-lightbox-inner\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function () {\r\n  'use strict';\r\n\r\n  var CSV_URL = 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQQCgfhmOjiSoDt0cguUXq4DI2Cy0808qjkU4Kcmkmi2iwEfxmZuP4FOQ2K3KD-5xKhBa920ovMN3I6\/pub?gid=996455742&single=true&output=csv';\r\n\r\n  if (window.pdfjsLib) {\r\n    window.pdfjsLib.GlobalWorkerOptions.workerSrc =\r\n      'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.worker.min.js';\r\n  }\r\n\r\n  var PATTERNS = {\r\n    info:     [\/informaci[o\u00f3]n\/i, \/adicional\/i, \/info\/i, \/requisito\/i],\r\n    infoLink: [\/link\/i, \/url\/i, \/enlace\/i, \/href\/i],\r\n    evento:   [\/evento\/i, \/actividad\/i],\r\n    aviso:    [\/aviso\/i, \/noticia\/i, \/anuncio\/i, \/alerta\/i]\r\n  };\r\n\r\n  var ICONS = {\r\n    info:   '<svg width=\"16\" height=\"16\" 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\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg>',\r\n    evento: '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/><\/svg>',\r\n    aviso:  '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>',\r\n    pdf:    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><\/svg>',\r\n    file:   '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V9z\"\/><polyline points=\"13 2 13 9 20 9\"\/><\/svg>'\r\n  };\r\n\r\n  var ROOT    = document.getElementById('panel-root');\r\n  var retries = 0;\r\n  var thumbSeq = 0;\r\n\r\n  function esc(s) {\r\n    return String(s || '')\r\n      .replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;')\r\n      .replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;');\r\n  }\r\n\r\n  function escAttr(s) {\r\n    return esc(s).replace(\/'\/g, '&#39;');\r\n  }\r\n\r\n  function findCol(headers, patterns) {\r\n    for (var i = 0; i < headers.length; i++) {\r\n      for (var j = 0; j < patterns.length; j++) {\r\n        if (patterns[j].test(headers[i])) return i;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  \/* Devuelve array de {text, link} para la columna de info *\/\r\n  function valsWithLinks(rows, idxText, idxLink) {\r\n    return rows\r\n      .map(function(r) {\r\n        var text = (r[idxText] || '').trim();\r\n        var link = idxLink >= 0 ? (r[idxLink] || '').trim() : '';\r\n        return { text: text, link: link };\r\n      })\r\n      .filter(function(v) { return v.text !== ''; });\r\n  }\r\n\r\n  \/* Devuelve array de strings para columnas sin links *\/\r\n  function vals(rows, idx) {\r\n    return rows\r\n      .map(function(r){ return (r[idx] || '').trim(); })\r\n      .filter(function(v){ return v !== ''; });\r\n  }\r\n\r\n  function isValidUrl(str) {\r\n    return \/^https?:\\\/\\\/.+\/.test(str);\r\n  }\r\n\r\n  \/* \u2500\u2500 Detecci\u00f3n de tipo de link y extracci\u00f3n de IDs de Google Drive \u2500\u2500 *\/\r\n  function driveFileId(url) {\r\n    var m = url.match(\/drive\\.google\\.com\\\/file\\\/d\\\/([a-zA-Z0-9_-]+)\/);\r\n    if (m) return m[1];\r\n    m = url.match(\/[?&]id=([a-zA-Z0-9_-]+)\/);\r\n    if (m) return m[1];\r\n    return null;\r\n  }\r\n\r\n  function classifyLink(url) {\r\n    var clean = url.split('?')[0].split('#')[0].toLowerCase();\r\n    var driveId = driveFileId(url);\r\n\r\n    if (driveId) {\r\n      return {\r\n        kind: 'drive',\r\n        driveId: driveId,\r\n        thumbSrc: 'https:\/\/drive.google.com\/thumbnail?id=' + driveId + '&sz=w1000',\r\n        viewUrl: 'https:\/\/drive.google.com\/file\/d\/' + driveId + '\/preview'\r\n      };\r\n    }\r\n    if (\/\\.(png|jpe?g|gif|webp|svg|bmp)$\/.test(clean)) {\r\n      return { kind: 'image', thumbSrc: url, viewUrl: url };\r\n    }\r\n    if (\/\\.pdf$\/.test(clean)) {\r\n      return { kind: 'pdf', thumbSrc: null, viewUrl: url };\r\n    }\r\n    return { kind: 'other' };\r\n  }\r\n\r\n  \/* \u2500\u2500 Miniaturas \u2500\u2500 *\/\r\n  function buildThumbHtml(info) {\r\n    if (info.kind === 'image' || info.kind === 'drive') {\r\n      return '<div class=\"p-thumb\" data-lightbox-type=\"' + (info.kind === 'drive' ? 'drive' : 'image')\r\n        + '\" data-lightbox-src=\"' + escAttr(info.kind === 'drive' ? info.viewUrl : info.viewUrl) + '\">'\r\n        + '<img decoding=\"async\" src=\"' + escAttr(info.thumbSrc) + '\" alt=\"\" loading=\"lazy\" '\r\n        + 'onerror=\"this.parentElement.innerHTML=\\'<span class=&quot;p-thumb__placeholder&quot;>' + ICONS.file.replace(\/\"\/g, '&quot;') + '<\/span>\\'\">'\r\n        + '<\/div>';\r\n    }\r\n    if (info.kind === 'pdf') {\r\n      thumbSeq++;\r\n      var id = 'p-pdf-thumb-' + thumbSeq;\r\n      return '<div class=\"p-thumb\" id=\"' + id + '\" data-pdf-src=\"' + escAttr(info.viewUrl)\r\n        + '\" data-lightbox-type=\"pdf\" data-lightbox-src=\"' + escAttr(info.viewUrl) + '\">'\r\n        + '<span class=\"p-thumb__placeholder\">' + ICONS.pdf + '<\/span>'\r\n        + '<span class=\"p-thumb__badge\">PDF<\/span>'\r\n        + '<\/div>';\r\n    }\r\n    return '';\r\n  }\r\n\r\n  function sectionInfo(label, items) {\r\n    var rows = items.map(function(v) {\r\n      var linkInfo = { kind: 'other' };\r\n      var hasLink = v.link && isValidUrl(v.link);\r\n      if (hasLink) linkInfo = classifyLink(v.link);\r\n\r\n      var thumbHtml = '';\r\n      if (hasLink && (linkInfo.kind === 'image' || linkInfo.kind === 'pdf' || linkInfo.kind === 'drive')) {\r\n        thumbHtml = buildThumbHtml(linkInfo);\r\n      }\r\n\r\n      var textContent;\r\n      if (hasLink) {\r\n        textContent = '<a class=\"p-info-link\" href=\"' + escAttr(v.link) + '\" target=\"_blank\" rel=\"noopener noreferrer\">' + esc(v.text) + '<\/a>';\r\n      } else {\r\n        textContent = '<span>' + esc(v.text) + '<\/span>';\r\n      }\r\n\r\n      return '<div class=\"p-info-item\">'\r\n        + '<div class=\"p-info-item__body\">'\r\n        + thumbHtml\r\n        + '<div class=\"p-info-item__text\">'\r\n        + '<div class=\"p-info-item__dot\"><\/div>'\r\n        + '<span>' + textContent + '<\/span>'\r\n        + '<\/div>'\r\n        + '<\/div><\/div>';\r\n    }).join('');\r\n\r\n    return '<section class=\"p-section\">'\r\n      + '<div class=\"p-section__head\">'\r\n      + '<div class=\"p-section__icon p-section__icon--info\">' + ICONS.info + '<\/div>'\r\n      + '<span class=\"p-section__label\">' + esc(label) + '<\/span>'\r\n      + '<\/div>'\r\n      + '<div class=\"p-info-list\">' + rows + '<\/div>'\r\n      + '<\/section>';\r\n  }\r\n\r\n  function sectionCards(label, items, type) {\r\n    var cards = items.map(function(v){\r\n      return '<div class=\"p-card\">'\r\n        + '<span class=\"p-card__badge p-card__badge--' + type + '\">'\r\n        + ICONS[type] + '&nbsp;' + esc(label.replace(\/s$\/i,''))\r\n        + '<\/span>'\r\n        + '<p class=\"p-card__text\">' + esc(v) + '<\/p>'\r\n        + '<\/div>';\r\n    }).join('');\r\n    return '<section class=\"p-section\">'\r\n      + '<div class=\"p-section__head\">'\r\n      + '<div class=\"p-section__icon p-section__icon--' + type + '\">' + ICONS[type] + '<\/div>'\r\n      + '<span class=\"p-section__label\">' + esc(label) + '<\/span>'\r\n      + '<\/div>'\r\n      + '<div class=\"p-cards\">' + cards + '<\/div>'\r\n      + '<\/section>';\r\n  }\r\n\r\n  \/* \u2500\u2500 Renderizado de miniaturas PDF con pdf.js (primera p\u00e1gina) \u2500\u2500 *\/\r\n  function renderPdfThumbs() {\r\n    if (!window.pdfjsLib) return;\r\n    var nodes = ROOT.querySelectorAll('.p-thumb[data-pdf-src]');\r\n    nodes.forEach(function(node) {\r\n      var src = node.getAttribute('data-pdf-src');\r\n      window.pdfjsLib.getDocument(src).promise.then(function(pdf) {\r\n        return pdf.getPage(1);\r\n      }).then(function(page) {\r\n        var viewport = page.getViewport({ scale: 1 });\r\n        var dpr = window.devicePixelRatio || 1;\r\n        var targetWidth = 480 * dpr;\r\n        var scale = targetWidth \/ viewport.width;\r\n        var scaledViewport = page.getViewport({ scale: scale });\r\n        var canvas = document.createElement('canvas');\r\n        canvas.width = scaledViewport.width;\r\n        canvas.height = scaledViewport.height;\r\n        canvas.style.width = '100%';\r\n        canvas.style.height = '100%';\r\n        var ctx = canvas.getContext('2d');\r\n        return page.render({ canvasContext: ctx, viewport: scaledViewport }).promise.then(function() {\r\n          var badge = node.querySelector('.p-thumb__badge');\r\n          node.innerHTML = '';\r\n          node.appendChild(canvas);\r\n          if (badge) node.appendChild(badge);\r\n          else {\r\n            var b = document.createElement('span');\r\n            b.className = 'p-thumb__badge';\r\n            b.textContent = 'PDF';\r\n            node.appendChild(b);\r\n          }\r\n        });\r\n      }).catch(function() {\r\n        \/* si falla la carga (p.ej. CORS), se deja el \u00edcono de PDF por defecto *\/\r\n      });\r\n    });\r\n  }\r\n\r\n  \/* \u2500\u2500 Lightbox \u2500\u2500 *\/\r\n  var lightbox      = document.getElementById('p-lightbox');\r\n  var lightboxInner  = document.getElementById('p-lightbox-inner');\r\n  var lightboxClose  = document.getElementById('p-lightbox-close');\r\n  var lightboxOpen   = document.getElementById('p-lightbox-openlink');\r\n\r\n  function openLightbox(type, src) {\r\n    var media = lightboxInner.querySelector('img, iframe');\r\n    if (media) media.remove();\r\n\r\n    if (type === 'pdf' || type === 'drive') {\r\n      var iframe = document.createElement('iframe');\r\n      iframe.src = src;\r\n      lightboxInner.appendChild(iframe);\r\n    } else {\r\n      var img = document.createElement('img');\r\n      img.src = src;\r\n      img.alt = '';\r\n      lightboxInner.appendChild(img);\r\n    }\r\n    lightboxOpen.href = src;\r\n    lightbox.classList.add('is-open');\r\n  }\r\n\r\n  function closeLightbox() {\r\n    lightbox.classList.remove('is-open');\r\n    var media = lightboxInner.querySelector('img, iframe');\r\n    if (media) media.remove();\r\n  }\r\n\r\n  lightboxClose.addEventListener('click', closeLightbox);\r\n  lightbox.addEventListener('click', function(e) {\r\n    if (e.target === lightbox) closeLightbox();\r\n  });\r\n  document.addEventListener('keydown', function(e) {\r\n    if (e.key === 'Escape') closeLightbox();\r\n  });\r\n\r\n  ROOT.addEventListener('click', function(e) {\r\n    var thumb = e.target.closest('.p-thumb');\r\n    if (!thumb) return;\r\n    e.preventDefault();\r\n    var type = thumb.getAttribute('data-lightbox-type');\r\n    var src  = thumb.getAttribute('data-lightbox-src');\r\n    if (src) openLightbox(type, src);\r\n  });\r\n\r\n  function render(data) {\r\n    var rows = data.filter(function(r){\r\n      return r.some(function(c){ return c && c.trim(); });\r\n    });\r\n\r\n    if (!rows.length) {\r\n      ROOT.innerHTML = '';\r\n      return;\r\n    }\r\n\r\n    var hdr  = rows[0].map(function(c){ return (c || '').trim(); });\r\n    var body = rows.slice(1);\r\n\r\n    var idxInfo   = findCol(hdr, PATTERNS.info);\r\n    var idxEvento = findCol(hdr, PATTERNS.evento);\r\n    var idxAviso  = findCol(hdr, PATTERNS.aviso);\r\n\r\n    if (idxInfo   < 0) idxInfo   = 0;\r\n    if (idxEvento < 0) idxEvento = Math.min(1, hdr.length - 1);\r\n    if (idxAviso  < 0) idxAviso  = Math.min(2, hdr.length - 1);\r\n\r\n    \/*\r\n     * Columna de links para Informaci\u00f3n adicional:\r\n     * 1. Busca por nombre (link \/ url \/ enlace \/ href) en los encabezados.\r\n     * 2. Si no lo encuentra, asume que est\u00e1 en la columna inmediatamente\r\n     *    siguiente a la de informaci\u00f3n (idxInfo + 1), siempre que ese \u00edndice\r\n     *    no coincida con idxEvento ni idxAviso.\r\n     *\/\r\n    var idxInfoLink = findCol(hdr, PATTERNS.infoLink);\r\n    if (idxInfoLink < 0) {\r\n      var candidate = idxInfo + 1;\r\n      if (candidate < hdr.length && candidate !== idxEvento && candidate !== idxAviso) {\r\n        idxInfoLink = candidate;\r\n      }\r\n    }\r\n\r\n    var infoItems   = valsWithLinks(body, idxInfo, idxInfoLink);\r\n    var eventoItems = vals(body, idxEvento);\r\n    var avisoItems  = vals(body, idxAviso);\r\n\r\n    var html = '';\r\n    if (infoItems.length)   html += sectionInfo(hdr[idxInfo]   || 'Informaci\u00f3n adicional', infoItems);\r\n    if (eventoItems.length) html += sectionCards(hdr[idxEvento] || 'Eventos', eventoItems, 'evento');\r\n    if (avisoItems.length)  html += sectionCards(hdr[idxAviso]  || 'Avisos',  avisoItems,  'aviso');\r\n\r\n    ROOT.innerHTML = html;\r\n    renderPdfThumbs();\r\n  }\r\n\r\n  function load() {\r\n    Papa.parse(CSV_URL, {\r\n      download: true,\r\n      skipEmptyLines: false,\r\n      complete: function(result){ render(result.data); },\r\n      error: function() {\r\n        retries++;\r\n        if (retries <= 4) {\r\n          setTimeout(load, Math.min(5000 * Math.pow(2, retries - 1), 30000));\r\n        } else {\r\n          ROOT.innerHTML =\r\n            '<div class=\"p-error\">' + ICONS.aviso +\r\n            '&nbsp;No se pudo cargar la informaci\u00f3n. Verific\u00e1 que la hoja est\u00e9 publicada como CSV.' +\r\n            '<\/div>';\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  load();\r\n}());\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2d82e0a e-flex e-con-boxed e-con e-parent\" data-id=\"2d82e0a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-212d3a9 elementor-widget elementor-widget-heading\" data-id=\"212d3a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Plan de Estudios<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb58504 elementor-widget elementor-widget-text-editor\" data-id=\"cb58504\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>El programa de maestr\u00eda est\u00e1 estructurado en una secuencia de m\u00f3dulos especializados que integran fundamentos te\u00f3ricos con aplicaci\u00f3n t\u00e9cnica en el campo de la petrof\u00edsica y las geociencias. Cada m\u00f3dulo ha sido dise\u00f1ado para construir competencias progresivas, permitiendo al estudiante desarrollar una visi\u00f3n integral de los sistemas petroleros, desde la caracterizaci\u00f3n de rocas y fluidos hasta el modelado geoqu\u00edmico y la elaboraci\u00f3n de tesis de investigaci\u00f3n original.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-773110a elementor-widget elementor-widget-html\" data-id=\"773110a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\r\n\r\n<style>\r\n\r\n.umsa-t2 *,\r\n.umsa-t2 *::before,\r\n.umsa-t2 *::after{\r\n  box-sizing:border-box;\r\n  margin:0;\r\n  padding:0;\r\n}\r\n\r\n.umsa-t2{\r\n  width:100%;\r\n  font-family:'Plus Jakarta Sans',sans-serif;\r\n  -webkit-font-smoothing:antialiased;\r\n  padding:10px 0;\r\n}\r\n\r\n.umsa-t2__card{\r\n  width:100%;\r\n  max-width:240px;\r\n  border-radius:18px;\r\n  overflow:hidden;\r\n  background:#ffffff;\r\n  border:1px solid #d7e4e1;\r\n  box-shadow:0 4px 18px rgba(0,69,60,0.08);\r\n  transition:max-width .45s cubic-bezier(.4,0,.2,1),\r\n             box-shadow .35s ease;\r\n}\r\n\r\n.umsa-t2__card.is-open{\r\n  max-width:100%;\r\n}\r\n\r\n.umsa-t2__toggle{\r\n  width:100%;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  padding:18px 22px;\r\n  background:#004d43;\r\n  border:none;\r\n  cursor:pointer;\r\n  user-select:none;\r\n  transition:background .2s ease;\r\n  font-family:'Plus Jakarta Sans',sans-serif;\r\n  white-space:nowrap;\r\n  overflow:hidden;\r\n}\r\n\r\n.umsa-t2__toggle:hover{\r\n  background:#00584d;\r\n}\r\n\r\n.umsa-t2__toggle-label{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:10px;\r\n  min-width:0;\r\n}\r\n\r\n.umsa-t2__toggle-dot{\r\n  width:8px;\r\n  height:8px;\r\n  border-radius:50%;\r\n  background:#65d3c0;\r\n  flex-shrink:0;\r\n}\r\n\r\n.umsa-t2__toggle-title{\r\n  color:#ffffff;\r\n  font-size:0.9rem;\r\n  font-weight:700;\r\n  letter-spacing:0.08em;\r\n  text-transform:uppercase;\r\n  line-height:1;\r\n  overflow:hidden;\r\n  text-overflow:ellipsis;\r\n}\r\n\r\n.umsa-t2__toggle-chevron{\r\n  width:18px;\r\n  height:18px;\r\n  flex-shrink:0;\r\n  color:#bdece5;\r\n  transition:transform .4s cubic-bezier(.4,0,.2,1);\r\n}\r\n\r\n.umsa-t2__card.is-open .umsa-t2__toggle-chevron{\r\n  transform:rotate(180deg);\r\n}\r\n\r\n.umsa-t2__panel{\r\n  max-height:0;\r\n  overflow:hidden;\r\n  transition:max-height .45s ease;\r\n}\r\n\r\n.umsa-t2__card.is-open .umsa-t2__panel{\r\n  max-height:4000px;\r\n}\r\n\r\n.umsa-t2__panel-inner{\r\n  padding:20px;\r\n}\r\n\r\n.umsa-t2__scroll{\r\n  overflow-x:auto;\r\n  -webkit-overflow-scrolling:touch;\r\n}\r\n\r\n.umsa-t2__table{\r\n  width:100%;\r\n  border-collapse:collapse;\r\n  min-width:320px;\r\n  font-family:'Plus Jakarta Sans',sans-serif;\r\n}\r\n\r\n.umsa-t2__table col.ut2-c-nro{ width:70px; }\r\n.umsa-t2__table col.ut2-c-sig{ width:140px; }\r\n.umsa-t2__table col.ut2-c-nom{ width:auto; }\r\n\r\n.umsa-t2__table thead th{\r\n  background:#f1f7f6;\r\n  color:#5f847f;\r\n  font-size:0.72rem;\r\n  font-weight:700;\r\n  letter-spacing:0.08em;\r\n  text-transform:uppercase;\r\n  padding:12px 14px;\r\n  border-bottom:1px solid #dfeceb;\r\n  text-align:center;\r\n}\r\n\r\n.umsa-t2__table thead th:last-child{\r\n  text-align:left;\r\n  padding-left:18px;\r\n}\r\n\r\n.umsa-t2__table tbody tr{\r\n  transition:0.15s ease;\r\n}\r\n\r\n.umsa-t2__table tbody tr:nth-child(odd)  { background:#ffffff; }\r\n.umsa-t2__table tbody tr:nth-child(even) { background:#f8fbfb; }\r\n.umsa-t2__table tbody tr:hover           { background:#eef8f6; }\r\n\r\n.umsa-t2__table tbody td{\r\n  padding:12px 14px;\r\n  border-bottom:1px solid #edf3f2;\r\n  font-size:0.84rem;\r\n  color:#1f3431;\r\n  vertical-align:middle;\r\n}\r\n\r\n.umsa-t2__table td.ut2-td-nro{\r\n  text-align:right;\r\n  color:#8ca8a3;\r\n  font-size:0.74rem;\r\n  font-weight:600;\r\n}\r\n\r\n.umsa-t2__table td.ut2-td-sig{\r\n  text-align:center;\r\n  color:#004d43;\r\n  font-weight:700;\r\n  letter-spacing:0.03em;\r\n}\r\n\r\n.umsa-t2__table td.ut2-td-nom{\r\n  text-align:left;\r\n  padding-left:18px;\r\n  font-weight:500;\r\n  line-height:1.5;\r\n}\r\n\r\n.umsa-t2__state{\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  min-height:140px;\r\n  gap:12px;\r\n}\r\n\r\n.umsa-t2__spinner{\r\n  width:28px;\r\n  height:28px;\r\n  border:3px solid #dfeceb;\r\n  border-top-color:#004d43;\r\n  border-radius:50%;\r\n  animation:ut2-spin .7s linear infinite;\r\n}\r\n\r\n.umsa-t2__state p{\r\n  font-size:0.76rem;\r\n  font-weight:600;\r\n  color:#6f908b;\r\n}\r\n\r\n@keyframes ut2-spin{ to{ transform:rotate(360deg); } }\r\n\r\n@media(max-width:768px){\r\n  .umsa-t2__panel-inner{ padding:14px 10px; }\r\n  .umsa-t2__toggle{ padding:16px; }\r\n  .umsa-t2__toggle-title{ font-size:0.78rem; }\r\n  .umsa-t2__toggle-chevron{ width:16px; height:16px; }\r\n  .umsa-t2__table col.ut2-c-nro{ width:50px; }\r\n  .umsa-t2__table col.ut2-c-sig{ width:95px; }\r\n  .umsa-t2__table thead th{ font-size:0.62rem; padding:10px 8px; }\r\n  .umsa-t2__table tbody td{ font-size:0.72rem; padding:10px 8px; }\r\n  .umsa-t2__table td.ut2-td-nom{ padding-left:10px; }\r\n  .umsa-t2__card{ max-width:200px; }\r\n  .umsa-t2__card.is-open{ max-width:100%; }\r\n}\r\n\r\n@media(max-width:480px){\r\n  .umsa-t2__toggle-title{ font-size:0.72rem; }\r\n  .umsa-t2__table{ min-width:290px; }\r\n  .umsa-t2__table tbody td{ font-size:0.68rem; }\r\n  .umsa-t2__card{ max-width:180px; }\r\n}\r\n\r\n<\/style>\r\n\r\n<div class=\"umsa-t2\">\r\n\r\n  <div class=\"umsa-t2__card\" id=\"umsa-t2-card\">\r\n\r\n    <button\r\n      class=\"umsa-t2__toggle\"\r\n      id=\"umsa-t2-btn\"\r\n      aria-expanded=\"false\"\r\n      aria-controls=\"umsa-t2-panel\"\r\n    >\r\n      <span class=\"umsa-t2__toggle-label\">\r\n        <span class=\"umsa-t2__toggle-dot\"><\/span>\r\n        <span class=\"umsa-t2__toggle-title\">TABLA DE MATERIAS<\/span>\r\n      <\/span>\r\n      <svg\r\n        class=\"umsa-t2__toggle-chevron\"\r\n        viewBox=\"0 0 20 20\"\r\n        fill=\"none\"\r\n        stroke=\"currentColor\"\r\n        stroke-width=\"2\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\"\r\n      >\r\n        <polyline points=\"5 8 10 13 15 8\"\/>\r\n      <\/svg>\r\n    <\/button>\r\n\r\n    <div class=\"umsa-t2__panel\" id=\"umsa-t2-panel\">\r\n      <div class=\"umsa-t2__panel-inner\">\r\n        <div id=\"umsa-t2-area\">\r\n          <div class=\"umsa-t2__state\">\r\n            <div class=\"umsa-t2__spinner\"><\/div>\r\n            <p>Cargando materias\u2026<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  'use strict';\r\n\r\n  var card = document.getElementById('umsa-t2-card');\r\n  var btn  = document.getElementById('umsa-t2-btn');\r\n\r\n  btn.addEventListener('click', function(){\r\n    var open = card.classList.toggle('is-open');\r\n    btn.setAttribute('aria-expanded', open ? 'true' : 'false');\r\n  });\r\n\r\n  var CSV_URL =\r\n    'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQQCgfhmOjiSoDt0cguUXq4DI2Cy0808qjkU4Kcmkmi2iwEfxmZuP4FOQ2K3KD-5xKhBa920ovMN3I6\/pub?gid=0&single=true&output=csv';\r\n\r\n  var AREA = document.getElementById('umsa-t2-area');\r\n\r\n  function esc(s){\r\n    return String(s)\r\n      .replace(\/&\/g,'&amp;')\r\n      .replace(\/<\/g,'&lt;')\r\n      .replace(\/>\/g,'&gt;')\r\n      .replace(\/\"\/g,'&quot;');\r\n  }\r\n\r\n  function val(row, i){ return (row[i] || '').trim(); }\r\n\r\n  function isEmptyRow(r){ return r.every(function(c){ return !c || c.trim() === ''; }); }\r\n\r\n  function render(data){\r\n    var rows = data.filter(function(r){ return !isEmptyRow(r); });\r\n\r\n    if(!rows.length){\r\n      AREA.innerHTML = '<div class=\"umsa-t2__state\"><p>No hay datos disponibles.<\/p><\/div>';\r\n      return;\r\n    }\r\n\r\n    var cols = Math.max.apply(null, rows.map(function(r){ return r.length; }));\r\n    var norm = rows.map(function(r){ while(r.length < cols) r.push(''); return r; });\r\n\r\n    var hdr = norm[0].map(function(c){ return c.trim(); });\r\n    var bodyRows = norm.slice(1);\r\n\r\n    var idx = {\r\n      sig: hdr.findIndex(function(c){ return \/sigla|codigo|c\u00f3digo|cod\/i.test(c); }),\r\n      nom: hdr.findIndex(function(c){ return \/asignatura|materia|nombre\/i.test(c); })\r\n    };\r\n\r\n    if(idx.sig < 0) idx.sig = 0;\r\n    if(idx.nom < 0) idx.nom = 1;\r\n\r\n    var validRows = bodyRows.filter(function(r){\r\n      return val(r, idx.sig) !== '' || val(r, idx.nom) !== '';\r\n    });\r\n\r\n    var html =\r\n      '<div class=\"umsa-t2__scroll\">' +\r\n      '<table class=\"umsa-t2__table\">' +\r\n      '<colgroup><col class=\"ut2-c-nro\"><col class=\"ut2-c-sig\"><col class=\"ut2-c-nom\"><\/colgroup>' +\r\n      '<thead><tr>' +\r\n      '<th>Nro<\/th>' +\r\n      '<th>' + esc(hdr[idx.sig] || 'Sigla') + '<\/th>' +\r\n      '<th style=\"text-align:left;padding-left:18px;\">' + esc(hdr[idx.nom] || 'Asignatura') + '<\/th>' +\r\n      '<\/tr><\/thead><tbody>';\r\n\r\n    validRows.forEach(function(row, ri){\r\n      html +=\r\n        '<tr>' +\r\n        '<td class=\"ut2-td-nro\">' + (ri + 1) + '<\/td>' +\r\n        '<td class=\"ut2-td-sig\">' + esc(val(row, idx.sig)) + '<\/td>' +\r\n        '<td class=\"ut2-td-nom\">' + esc(val(row, idx.nom)) + '<\/td>' +\r\n        '<\/tr>';\r\n    });\r\n\r\n    html += '<\/tbody><\/table><\/div>';\r\n    AREA.innerHTML = html;\r\n  }\r\n\r\n  function showError(msg){\r\n    AREA.innerHTML = '<div class=\"umsa-t2__state\"><p style=\"color:#c0392b;\">' + esc(msg) + '<\/p><\/div>';\r\n  }\r\n\r\n  Papa.parse(CSV_URL, {\r\n    download:true,\r\n    skipEmptyLines:false,\r\n    complete:function(result){ render(result.data); },\r\n    error:function(){ showError('Error al cargar la hoja.'); }\r\n  });\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5a7b534 e-flex e-con-boxed e-con e-parent\" data-id=\"5a7b534\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-df086a4 elementor-widget elementor-widget-heading\" data-id=\"df086a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Calendario Acad\u00e9mico<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11f4293 elementor-widget elementor-widget-text-editor\" data-id=\"11f4293\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>El calendario acad\u00e9mico establece las fechas oficiales de inicio y cierre de cada m\u00f3dulo a lo largo del programa, permitiendo al estudiante organizar su dedicaci\u00f3n con anticipaci\u00f3n. Las actividades se distribuyen de forma continua durante los cuatro semestres, incluyendo talleres de tesis, per\u00edodos de preparaci\u00f3n y evaluaciones finales. Se recomienda consultarlo de forma regular, ya que refleja la planificaci\u00f3n vigente del programa.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-badce4b elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"badce4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n\r\n<title>Calendario<\/title>\r\n\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\r\n\r\n<style>\r\n\r\n*, *::before, *::after{\r\n  box-sizing:border-box;\r\n  margin:0;\r\n  padding:0;\r\n}\r\n\r\nhtml, body{\r\n  width:100%;\r\n  overflow-x:hidden;\r\n}\r\n\r\nbody{\r\n  font-family:'Plus Jakarta Sans',sans-serif;\r\n  background:transparent;\r\n  -webkit-font-smoothing:antialiased;\r\n}\r\n\r\n.cal-wrapper{\r\n  width:100%;\r\n  padding:10px 0;\r\n}\r\n\r\n.cal-card{\r\n  width:100%;\r\n  border-radius:18px;\r\n  overflow:hidden;\r\n  background:#ffffff;\r\n  border:1px solid #d7e4e1;\r\n  box-shadow:0 4px 18px rgba(0,69,60,0.08);\r\n  max-width:240px;\r\n  transition:max-width .45s cubic-bezier(.4,0,.2,1),\r\n             box-shadow .35s ease;\r\n}\r\n\r\n.cal-card.is-open{\r\n  max-width:100%;\r\n}\r\n\r\n\/* \u2500\u2500 HEADER \u2500\u2500 *\/\r\n.cal-toggle{\r\n  width:100%;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  padding:18px 22px;\r\n  background:#004d43 !important;\r\n  border:none;\r\n  outline:none;\r\n  cursor:pointer;\r\n  user-select:none;\r\n  font-family:'Plus Jakarta Sans',sans-serif;\r\n  -webkit-appearance:none;\r\n  appearance:none;\r\n  white-space:nowrap;\r\n  overflow:hidden;\r\n}\r\n\r\n.cal-toggle:hover,\r\n.cal-toggle:focus,\r\n.cal-toggle:active,\r\n.cal-toggle:focus-visible,\r\n.cal-toggle:focus-within{\r\n  background:#004d43 !important;\r\n  outline:none;\r\n  box-shadow:none;\r\n}\r\n\r\n.cal-toggle-label{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:10px;\r\n  min-width:0;\r\n}\r\n\r\n.cal-toggle-dot{\r\n  width:8px;\r\n  height:8px;\r\n  border-radius:50%;\r\n  background:#65d3c0;\r\n  flex-shrink:0;\r\n}\r\n\r\n.cal-toggle-title{\r\n  color:#ffffff;\r\n  font-size:0.9rem;\r\n  font-weight:700;\r\n  letter-spacing:0.08em;\r\n  text-transform:uppercase;\r\n  line-height:1;\r\n  overflow:hidden;\r\n  text-overflow:ellipsis;\r\n}\r\n\r\n.cal-toggle-chevron{\r\n  width:18px;\r\n  height:18px;\r\n  flex-shrink:0;\r\n  color:#bdece5;\r\n  transition:transform .4s cubic-bezier(.4,0,.2,1);\r\n}\r\n\r\n.cal-card.is-open .cal-toggle-chevron{\r\n  transform:rotate(180deg);\r\n}\r\n\r\n\/* \u2500\u2500 PANEL \u2500\u2500 *\/\r\n.cal-panel{\r\n  max-height:0;\r\n  overflow:hidden;\r\n  transition:max-height .45s ease;\r\n}\r\n\r\n.cal-card.is-open .cal-panel{\r\n  max-height:5000px;\r\n}\r\n\r\n\/* \u2500\u2500 LEYENDA \u2500\u2500 *\/\r\n.cal-legend{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:8px 18px;\r\n  padding:14px 22px;\r\n  border-bottom:1px solid #e4efec;\r\n}\r\n\r\n.cal-legend-item{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:7px;\r\n}\r\n\r\n.cal-legend-dot{\r\n  width:9px;\r\n  height:9px;\r\n  border-radius:50%;\r\n  flex-shrink:0;\r\n}\r\n\r\n.cal-legend-label{\r\n  font-size:0.72rem;\r\n  font-weight:600;\r\n  color:#6b8f89;\r\n  letter-spacing:0.02em;\r\n}\r\n\r\n\/* \u2500\u2500 CUERPO \u2500\u2500 *\/\r\n.cal-body{\r\n  padding:22px;\r\n}\r\n\r\n\/* \u2500\u2500 A\u00d1O \u2500\u2500 *\/\r\n.cal-year-block{\r\n  margin-bottom:28px;\r\n}\r\n\r\n.cal-year-label{\r\n  font-size:0.72rem;\r\n  font-weight:800;\r\n  color:#6b8f89;\r\n  letter-spacing:0.12em;\r\n  text-transform:uppercase;\r\n  margin-bottom:14px;\r\n  padding-bottom:8px;\r\n  border-bottom:1px solid #e4efec;\r\n}\r\n\r\n\/* \u2500\u2500 FILA MES \u2500\u2500 *\/\r\n.cal-month-row{\r\n  display:flex;\r\n  align-items:flex-start;\r\n  margin-bottom:10px;\r\n}\r\n\r\n.cal-month-name{\r\n  width:110px;\r\n  min-width:110px;\r\n  padding-top:10px;\r\n  font-size:0.74rem;\r\n  font-weight:700;\r\n  color:#004d43;\r\n  letter-spacing:0.06em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.cal-events{\r\n  flex:1;\r\n  display:flex;\r\n  flex-direction:column;\r\n  gap:8px;\r\n}\r\n\r\n\/* \u2500\u2500 EVENTO \u2500\u2500 *\/\r\n.cal-event{\r\n  background:#f6fbfa;\r\n  border-left:4px solid #004d43;\r\n  border-radius:0 12px 12px 0;\r\n  padding:10px 14px;\r\n  transition:0.15s ease;\r\n}\r\n\r\n.cal-event:hover{ background:#edf7f5; }\r\n\r\n.cal-event.taller  { border-left-color:#e07b00; }\r\n.cal-event.prep    { border-left-color:#1a6e8a; }\r\n.cal-event.tesis   { border-left-color:#7c3aed; }\r\n.cal-event.defensa { border-left-color:#c0392b; }\r\n.cal-event.final   { border-left-color:#4a7c00; }\r\n\r\n\/* \u2500\u2500 FILA INTERIOR DEL EVENTO \u2500\u2500 *\/\r\n.cal-event-row{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:10px;\r\n}\r\n\r\n.cal-dot{\r\n  width:8px;\r\n  height:8px;\r\n  border-radius:50%;\r\n  background:#004d43;\r\n  flex-shrink:0;\r\n}\r\n\r\n.cal-event.taller  .cal-dot { background:#e07b00; }\r\n.cal-event.prep    .cal-dot { background:#1a6e8a; }\r\n.cal-event.tesis   .cal-dot { background:#7c3aed; }\r\n.cal-event.defensa .cal-dot { background:#c0392b; }\r\n.cal-event.final   .cal-dot { background:#4a7c00; }\r\n\r\n.cal-event-name{\r\n  flex:1;\r\n  font-size:0.84rem;\r\n  font-weight:600;\r\n  color:#16332f;\r\n  line-height:1.45;\r\n}\r\n\r\n.cal-event-dates-inline{\r\n  font-size:0.72rem;\r\n  font-weight:600;\r\n  color:#6f908b;\r\n  white-space:nowrap;\r\n  flex-shrink:0;\r\n  display:none;\r\n}\r\n\r\n.cal-event-dates-below{\r\n  font-size:0.68rem;\r\n  font-weight:600;\r\n  color:#6f908b;\r\n  line-height:1.5;\r\n  margin-top:6px;\r\n  margin-left:18px;\r\n  display:none;\r\n}\r\n\r\n\/* \u2500\u2500 ESTADO CARGA \u2500\u2500 *\/\r\n.cal-state{\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  min-height:140px;\r\n  gap:12px;\r\n}\r\n\r\n.cal-spinner{\r\n  width:28px;\r\n  height:28px;\r\n  border:3px solid #dfeceb;\r\n  border-top-color:#004d43;\r\n  border-radius:50%;\r\n  animation:cal-spin .7s linear infinite;\r\n}\r\n\r\n.cal-state p{\r\n  font-size:0.76rem;\r\n  font-weight:600;\r\n  color:#6f908b;\r\n}\r\n\r\n@keyframes cal-spin{ to{ transform:rotate(360deg); } }\r\n\r\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\r\n\r\n@media(min-width:769px){\r\n  .cal-event-dates-inline{ display:block; }\r\n  .cal-event-dates-below { display:none;  }\r\n}\r\n\r\n@media(max-width:768px){\r\n\r\n  .cal-event-dates-inline{ display:none;  }\r\n  .cal-event-dates-below { display:block; }\r\n\r\n  .cal-body{ padding:16px 12px; }\r\n\r\n  .cal-toggle{ padding:16px; }\r\n\r\n  .cal-toggle-title{ font-size:0.78rem; }\r\n\r\n  .cal-toggle-chevron{ width:16px; height:16px; }\r\n\r\n  .cal-month-row{ flex-direction:column; gap:8px; }\r\n\r\n  .cal-month-name{\r\n    width:100%;\r\n    min-width:100%;\r\n    padding-top:0;\r\n    font-size:0.68rem;\r\n  }\r\n\r\n  .cal-event{ padding:10px 12px; }\r\n\r\n  .cal-event-name{ font-size:0.74rem; }\r\n\r\n  .cal-legend{ padding:12px 14px; gap:6px 14px; }\r\n\r\n  .cal-legend-label{ font-size:0.68rem; }\r\n\r\n  .cal-card{ max-width:200px; }\r\n  .cal-card.is-open{ max-width:100%; }\r\n}\r\n\r\n@media(max-width:480px){\r\n  .cal-toggle{ padding:14px; }\r\n  .cal-toggle-title{ font-size:0.72rem; }\r\n  .cal-event-name{ font-size:0.7rem; }\r\n  .cal-card{ max-width:180px; }\r\n}\r\n\r\n<\/style>\r\n<\/head>\r\n\r\n<body>\r\n\r\n<div class=\"cal-wrapper\">\r\n\r\n  <div class=\"cal-card\" id=\"calCard\">\r\n\r\n    <button\r\n      class=\"cal-toggle\"\r\n      id=\"calBtn\"\r\n      aria-expanded=\"false\"\r\n      aria-controls=\"calPanel\"\r\n    >\r\n      <span class=\"cal-toggle-label\">\r\n        <span class=\"cal-toggle-dot\"><\/span>\r\n        <span class=\"cal-toggle-title\">CALENDARIO<\/span>\r\n      <\/span>\r\n      <svg class=\"cal-toggle-chevron\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n           stroke=\"currentColor\" stroke-width=\"2\"\r\n           stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n        <polyline points=\"5 8 10 13 15 8\"\/>\r\n      <\/svg>\r\n    <\/button>\r\n\r\n    <div class=\"cal-panel\" id=\"calPanel\">\r\n\r\n      <div class=\"cal-legend\" id=\"cal-legend-top\">\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#004d43\"><\/span>\r\n          <span class=\"cal-legend-label\">M\u00f3dulo<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#e07b00\"><\/span>\r\n          <span class=\"cal-legend-label\">Taller<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#7c3aed\"><\/span>\r\n          <span class=\"cal-legend-label\">Taller de tesis<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#1a6e8a\"><\/span>\r\n          <span class=\"cal-legend-label\">Preparaci\u00f3n<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#c0392b\"><\/span>\r\n          <span class=\"cal-legend-label\">Defensa \/ Evaluaci\u00f3n<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#4a7c00\"><\/span>\r\n          <span class=\"cal-legend-label\">Tesis de maestr\u00eda<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div id=\"cal-body-area\">\r\n        <div class=\"cal-state\">\r\n          <div class=\"cal-spinner\"><\/div>\r\n          <p>Cargando calendario\u2026<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"cal-legend\" id=\"cal-legend-bottom\" style=\"border-bottom:none; border-top:1px solid #e4efec; display:none;\">\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#004d43\"><\/span>\r\n          <span class=\"cal-legend-label\">M\u00f3dulo<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#e07b00\"><\/span>\r\n          <span class=\"cal-legend-label\">Taller<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#7c3aed\"><\/span>\r\n          <span class=\"cal-legend-label\">Taller de tesis<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#1a6e8a\"><\/span>\r\n          <span class=\"cal-legend-label\">Preparaci\u00f3n<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#c0392b\"><\/span>\r\n          <span class=\"cal-legend-label\">Defensa \/ Evaluaci\u00f3n<\/span>\r\n        <\/div>\r\n        <div class=\"cal-legend-item\">\r\n          <span class=\"cal-legend-dot\" style=\"background:#4a7c00\"><\/span>\r\n          <span class=\"cal-legend-label\">Tesis de maestr\u00eda<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n\r\n(function(){\r\n\r\n  'use strict';\r\n\r\n  var card = document.getElementById('calCard');\r\n  var btn  = document.getElementById('calBtn');\r\n\r\n  btn.addEventListener('click', function(){\r\n    var open = card.classList.toggle('is-open');\r\n    btn.setAttribute('aria-expanded', open ? 'true' : 'false');\r\n  });\r\n\r\n  var CSV_URL =\r\n    'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQQCgfhmOjiSoDt0cguUXq4DI2Cy0808qjkU4Kcmkmi2iwEfxmZuP4FOQ2K3KD-5xKhBa920ovMN3I6\/pub?gid=984632358&single=true&output=csv';\r\n\r\n  var BODY         = document.getElementById('cal-body-area');\r\n  var LEGEND_BOT   = document.getElementById('cal-legend-bottom');\r\n\r\n  var MONTHS_ES = [\r\n    'enero','febrero','marzo','abril','mayo','junio',\r\n    'julio','agosto','septiembre','octubre','noviembre','diciembre'\r\n  ];\r\n\r\n  var MONTHS_SHORT = [\r\n    'Ene','Feb','Mar','Abr','May','Jun',\r\n    'Jul','Ago','Sep','Oct','Nov','Dic'\r\n  ];\r\n\r\n  function parseDate(str){\r\n    if(!str) return null;\r\n    var s = str.trim().toLowerCase();\r\n    var m;\r\n    m = s.match(\/\\d{1,2}\\s+al\\s+\\d{1,2}\\s+de\\s+(\\w+)\\s+de\\s+(\\d{4})\/);\r\n    if(m){ var mo = MONTHS_ES.indexOf(m[1]); if(mo >= 0) return { year:+m[2], month:mo }; }\r\n    m = s.match(\/\\d{1,2}\\s+de\\s+(\\w+)\\s+de\\s+(\\d{4})\/);\r\n    if(m){ var mo2 = MONTHS_ES.indexOf(m[1]); if(mo2 >= 0) return { year:+m[2], month:mo2 }; }\r\n    return null;\r\n  }\r\n\r\n  function classify(name){\r\n    var n = name.toLowerCase();\r\n    if(\/defensa|evaluaci[o\u00f3]n\/.test(n)) return 'defensa';\r\n    if(\/taller de tesis\/.test(n))       return 'tesis';\r\n    if(\/preparaci[o\u00f3]n\/.test(n))        return 'prep';\r\n    if(\/taller\/.test(n))                return 'taller';\r\n    if(\/tesis de maestr[i\u00ed]a\/.test(n))  return 'final';\r\n    return '';\r\n  }\r\n\r\n  function esc(s){\r\n    return String(s)\r\n      .replace(\/&\/g,'&amp;')\r\n      .replace(\/<\/g,'&lt;')\r\n      .replace(\/>\/g,'&gt;');\r\n  }\r\n\r\n  function render(pairs){\r\n\r\n    var byYear = {};\r\n\r\n    pairs.forEach(function(p){\r\n      var d = parseDate(p.fecha);\r\n      if(!d) return;\r\n      if(!byYear[d.year])          byYear[d.year] = {};\r\n      if(!byYear[d.year][d.month]) byYear[d.year][d.month] = [];\r\n      byYear[d.year][d.month].push({\r\n        name  : p.modulo,\r\n        dates : p.fecha,\r\n        cls   : classify(p.modulo)\r\n      });\r\n    });\r\n\r\n    var years = Object.keys(byYear).map(Number).sort();\r\n\r\n    if(!years.length){\r\n      BODY.innerHTML = '<div class=\"cal-state\"><p>No hay datos disponibles.<\/p><\/div>';\r\n      return;\r\n    }\r\n\r\n    var html = '<div class=\"cal-body\">';\r\n\r\n    years.forEach(function(year){\r\n\r\n      html +=\r\n        '<div class=\"cal-year-block\">' +\r\n        '<div class=\"cal-year-label\">' + year + '<\/div>';\r\n\r\n      var months = Object.keys(byYear[year]).map(Number).sort(function(a,b){ return a-b; });\r\n\r\n      months.forEach(function(mon){\r\n\r\n        html +=\r\n          '<div class=\"cal-month-row\">' +\r\n          '<div class=\"cal-month-name\">' + MONTHS_SHORT[mon] + '<\/div>' +\r\n          '<div class=\"cal-events\">';\r\n\r\n        byYear[year][mon].forEach(function(ev){\r\n\r\n          html +=\r\n            '<div class=\"cal-event ' + esc(ev.cls) + '\">' +\r\n            '<div class=\"cal-event-row\">' +\r\n            '<div class=\"cal-dot\"><\/div>' +\r\n            '<div class=\"cal-event-name\">' + esc(ev.name) + '<\/div>' +\r\n            '<div class=\"cal-event-dates-inline\">' + esc(ev.dates) + '<\/div>' +\r\n            '<\/div>' +\r\n            '<div class=\"cal-event-dates-below\">' + esc(ev.dates) + '<\/div>' +\r\n            '<\/div>';\r\n        });\r\n\r\n        html += '<\/div><\/div>';\r\n      });\r\n\r\n      html += '<\/div>';\r\n    });\r\n\r\n    html += '<\/div>';\r\n\r\n    BODY.innerHTML = html;\r\n\r\n    LEGEND_BOT.style.display = 'flex';\r\n  }\r\n\r\n  Papa.parse(CSV_URL, {\r\n    download:true,\r\n    complete:function(result){\r\n\r\n      var rows = result.data;\r\n\r\n      var hdr = rows[0].map(function(c){ return (c || '').trim().toLowerCase(); });\r\n\r\n      var iMod = hdr.findIndex(function(c){ return \/m\u00f3dulo|modulo|nombre|materia\/.test(c); });\r\n      var iFec = hdr.findIndex(function(c){ return \/fecha\/.test(c); });\r\n\r\n      if(iMod < 0) iMod = 0;\r\n      if(iFec < 0) iFec = 1;\r\n\r\n      var pairs = rows.slice(1)\r\n        .map(function(r){\r\n          return {\r\n            modulo : (r[iMod] || '').trim(),\r\n            fecha  : (r[iFec] || '').trim()\r\n          };\r\n        })\r\n        .filter(function(p){ return p.modulo && p.fecha; });\r\n\r\n      render(pairs);\r\n    },\r\n    error:function(){\r\n      BODY.innerHTML =\r\n        '<div class=\"cal-state\"><p style=\"color:#c0392b;\">Error al cargar el calendario.<\/p><\/div>';\r\n    }\r\n  });\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3119a28 e-flex e-con-boxed e-con e-parent\" data-id=\"3119a28\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e3848a2 elementor-widget elementor-widget-heading\" data-id=\"e3848a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Horario Acad\u00e9mico<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f65324 elementor-widget elementor-widget-text-editor\" data-id=\"5f65324\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>El horario acad\u00e9mico detalla los d\u00edas y franjas horarias asignadas a cada materia durante el semestre en curso. Las sesiones se imparten en modalidad virtual sincr\u00f3nica, por lo que se solicita puntualidad y conexi\u00f3n estable al momento de ingresar. El acceso a cada clase se habilita \u00fanicamente en el d\u00eda correspondiente mediante un c\u00f3digo de ingreso, garantizando la confidencialidad y el orden de las sesiones.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-931863b elementor-widget elementor-widget-html\" data-id=\"931863b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\"\/>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\r\n<title>Horario Semanal<\/title>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\"\/>\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@tabler\/icons-webfont@latest\/tabler-icons.min.css\"\/>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\r\n\r\n<style>\r\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\nhtml, body { width: 100%; overflow-x: hidden; }\r\nbody {\r\n  font-family: 'Plus Jakarta Sans', sans-serif;\r\n  background: transparent;\r\n  -webkit-font-smoothing: antialiased;\r\n  font-size: 14px;\r\n}\r\n\r\n\/* \u2500\u2500 WRAPPER \u2500\u2500 *\/\r\n.hor-wrapper { width: 100%; padding: 10px 0; }\r\n\r\n\/* \u2500\u2500 CARD \u2500\u2500 *\/\r\n.hor-card {\r\n  flex-direction: column;\r\n  border-radius: 18px;\r\n  overflow: hidden;\r\n  background: #ffffff;\r\n  border: 1px solid #d7e4e1;\r\n  box-shadow: 0 4px 18px rgba(0,69,60,0.08);\r\n  \/* ancho compacto por defecto; transici\u00f3n suave al abrir *\/\r\n  max-width: 240px;\r\n  width: 100%;\r\n  transition: max-width .45s cubic-bezier(.4,0,.2,1),\r\n              border-radius .35s ease,\r\n              box-shadow .35s ease;\r\n}\r\n.hor-card.is-open {\r\n  max-width: 100%;\r\n}\r\n\r\n\/* \u2500\u2500 HEADER \/ TOGGLE \u2500\u2500 *\/\r\n.hor-toggle {\r\n  width: 100%; display: flex; align-items: center;\r\n  justify-content: space-between; gap: 12px; padding: 18px 22px;\r\n  background: #004d43 !important; border: none; outline: none;\r\n  cursor: pointer; user-select: none;\r\n  font-family: 'Plus Jakarta Sans', sans-serif;\r\n  -webkit-appearance: none; appearance: none;\r\n  white-space: nowrap; overflow: hidden;\r\n}\r\n.hor-toggle:hover,\r\n.hor-toggle:focus,\r\n.hor-toggle:active { background: #004d43 !important; outline: none; box-shadow: none; }\r\n\r\n.hor-toggle-label  { display: flex; align-items: center; gap: 10px; min-width: 0; }\r\n.hor-toggle-dot    { width: 8px; height: 8px; border-radius: 50%; background: #65d3c0; flex-shrink: 0; }\r\n.hor-toggle-title  {\r\n  color: #ffffff; font-size: 0.9rem; font-weight: 700;\r\n  letter-spacing: 0.08em; text-transform: uppercase; line-height: 1;\r\n  overflow: hidden; text-overflow: ellipsis;\r\n}\r\n\r\n.hor-toggle-chevron {\r\n  width: 18px; height: 18px; flex-shrink: 0;\r\n  color: #bdece5; transition: transform .4s cubic-bezier(.4,0,.2,1);\r\n}\r\n.hor-card.is-open .hor-toggle-chevron { transform: rotate(180deg); }\r\n\r\n\/* \u2500\u2500 PANEL \u2500\u2500 *\/\r\n.hor-panel { max-height: 0; overflow: hidden; transition: max-height .45s ease; width: 100%; }\r\n.hor-card.is-open .hor-panel { max-height: 6000px; }\r\n\r\n\/* \u2500\u2500 BODY \u2500\u2500 *\/\r\n.hor-body { padding: 22px; }\r\n\r\n\/* \u2500\u2500 GRID D\u00cdAS \u2500\u2500 *\/\r\n.days-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(5, minmax(0, 1fr));\r\n  gap: 12px; align-items: start;\r\n}\r\n\r\n\/* \u2500\u2500 ENCABEZADO D\u00cdA \u2500\u2500 *\/\r\n.day-header {\r\n  display: flex; align-items: center; justify-content: space-between;\r\n  padding: 0 0 8px; border-bottom: 2px solid #e4efec;\r\n  margin-bottom: 10px; cursor: pointer; user-select: none;\r\n}\r\n.day-header:hover .day-lbl { color: #004d43; }\r\n.day-lbl {\r\n  font-size: 0.68rem; font-weight: 700; text-transform: uppercase;\r\n  letter-spacing: 0.08em; color: #6b8f89; transition: color .15s;\r\n}\r\n.day-lbl.today { color: #004d43; }\r\n.day-chev {\r\n  font-size: 14px; color: #b0cec9; transition: transform .25s; flex-shrink: 0;\r\n}\r\n.day-chev.open { transform: rotate(180deg); color: #004d43; }\r\n\r\n\/* \u2500\u2500 DESPLEGABLE D\u00cdA \u2500\u2500 *\/\r\n.day-body { overflow: hidden; max-height: 0; transition: max-height .35s cubic-bezier(.4,0,.2,1); }\r\n.day-body.open { max-height: 3000px; }\r\n\r\n\/* \u2500\u2500 TARJETA MATERIA \u2500\u2500 *\/\r\n.slot {\r\n  background: #f6fbfa;\r\n  border-left: 4px solid #004d43;\r\n  border-radius: 0 12px 12px 0;\r\n  padding: 11px 13px; margin-bottom: 8px;\r\n  transition: background .15s;\r\n}\r\n.slot:hover { background: #edf7f5; }\r\n.slot:last-child { margin-bottom: 0; }\r\n\r\n.slot-sigla {\r\n  font-size: 0.68rem; font-weight: 800; color: #004d43;\r\n  letter-spacing: 0.06em; margin-bottom: 4px; text-transform: uppercase;\r\n}\r\n.slot-name {\r\n  font-size: 0.78rem; font-weight: 600; color: #16332f; line-height: 1.4;\r\n}\r\n.slot-hour {\r\n  font-size: 0.68rem; font-weight: 600; color: #6b8f89;\r\n  margin-top: 6px; display: flex; align-items: center;\r\n  gap: 4px; font-variant-numeric: tabular-nums;\r\n}\r\n.slot-hour i { font-size: 11px; color: #65d3c0; }\r\n\r\n\/* \u2500\u2500 BOT\u00d3N CLASE \u2500\u2500 *\/\r\n.slot-footer {\r\n  display: flex; align-items: center; justify-content: space-between;\r\n  margin-top: 10px; gap: 8px;\r\n}\r\n\r\n.btn-clase {\r\n  display: inline-flex; align-items: center; gap: 5px;\r\n  font-size: 0.68rem; font-weight: 700; font-family: 'Plus Jakarta Sans', sans-serif;\r\n  padding: 6px 12px; border-radius: 20px;\r\n  border: none; cursor: pointer;\r\n  background: #004d43; color: #ffffff;\r\n  letter-spacing: 0.03em; text-transform: uppercase;\r\n  transition: background .15s, box-shadow .15s;\r\n  text-decoration: none;\r\n}\r\n.btn-clase:hover { background: #006055; box-shadow: 0 2px 10px rgba(0,77,67,.25); }\r\n.btn-clase i { font-size: 12px; }\r\n\r\n.btn-clase.disabled {\r\n  background: #e4efec; color: #a0bdb8;\r\n  cursor: not-allowed; pointer-events: none;\r\n}\r\n.btn-clase.disabled i { color: #b0cec9; }\r\n\r\n.active-dot {\r\n  width: 7px; height: 7px; border-radius: 50%;\r\n  background: #004d43; flex-shrink: 0;\r\n  box-shadow: 0 0 0 2px rgba(0,77,67,.15);\r\n  animation: pulse-dot 1.8s ease-in-out infinite;\r\n}\r\n@keyframes pulse-dot {\r\n  0%, 100% { box-shadow: 0 0 0 2px rgba(0,77,67,.15); }\r\n  50%       { box-shadow: 0 0 0 5px rgba(0,77,67,.08); }\r\n}\r\n\r\n\/* \u2500\u2500 ESTADO CARGA \u2500\u2500 *\/\r\n.hor-state {\r\n  display: flex; flex-direction: column; align-items: center;\r\n  justify-content: center; min-height: 140px; gap: 12px;\r\n}\r\n.hor-spinner {\r\n  width: 28px; height: 28px;\r\n  border: 3px solid #dfeceb; border-top-color: #004d43;\r\n  border-radius: 50%; animation: hor-spin .7s linear infinite;\r\n}\r\n.hor-state p { font-size: 0.76rem; font-weight: 600; color: #6f908b; }\r\n@keyframes hor-spin { to { transform: rotate(360deg); } }\r\n.day-empty { font-size: 0.7rem; color: #b0cec9; text-align: center; padding: .9rem 0; font-style: italic; }\r\n\r\n\/* \u2500\u2500 MODAL \u2500\u2500 *\/\r\n.modal-outer {\r\n  display: none; position: fixed; inset: 0;\r\n  background: rgba(0,0,0,.3); align-items: center;\r\n  justify-content: center; z-index: 9999; padding: 1rem;\r\n  backdrop-filter: blur(3px);\r\n}\r\n.modal-outer.show { display: flex; }\r\n.modal {\r\n  background: #fff; border-radius: 18px; border: 1px solid #d7e4e1;\r\n  box-shadow: 0 20px 60px rgba(0,69,60,.15);\r\n  padding: 1.75rem; width: 100%; max-width: 310px;\r\n}\r\n.modal-ico {\r\n  width: 40px; height: 40px; border-radius: 10px; background: #e0f4f0;\r\n  display: flex; align-items: center; justify-content: center; margin-bottom: 1.1rem;\r\n}\r\n.modal-ico i { font-size: 20px; color: #004d43; }\r\n.modal h3   { font-size: 0.88rem; font-weight: 700; color: #16332f; margin-bottom: 4px; }\r\n.modal-sub  { font-size: 0.75rem; font-weight: 500; color: #6b8f89; margin-bottom: 1rem; line-height: 1.55; }\r\n.modal-mat  {\r\n  font-size: 0.72rem; font-weight: 700; color: #004d43;\r\n  margin-bottom: 1rem; background: #e0f4f0; padding: 6px 10px; border-radius: 8px;\r\n}\r\n.modal input[type=password] {\r\n  width: 100%; font-size: 1rem; letter-spacing: 6px; text-align: center;\r\n  margin-bottom: 10px; padding: 11px 14px;\r\n  border: 1px solid #d7e4e1; border-radius: 10px;\r\n  outline: none; font-family: 'Plus Jakarta Sans', sans-serif; transition: border-color .2s;\r\n}\r\n.modal input[type=password]:focus { border-color: #004d43; box-shadow: 0 0 0 3px rgba(0,77,67,.1); }\r\n.modal input::placeholder { letter-spacing: 0; font-size: 0.76rem; text-align: left; color: #b0cec9; }\r\n.err {\r\n  font-size: 0.72rem; font-weight: 600; color: #c0392b;\r\n  margin-bottom: 10px; display: none; align-items: center; gap: 5px;\r\n  background: #fdf2f2; padding: 7px 10px; border-radius: 8px;\r\n}\r\n.mbtns { display: flex; gap: 8px; margin-top: 2px; }\r\n.mbtns button {\r\n  flex: 1; padding: 10px; border-radius: 10px;\r\n  font-size: 0.78rem; font-weight: 700;\r\n  cursor: pointer; font-family: 'Plus Jakarta Sans', sans-serif; transition: all .15s;\r\n}\r\n.b-c { border: 1px solid #d7e4e1; background: #fff; color: #6b8f89; }\r\n.b-c:hover { background: #f6fbfa; }\r\n.b-e { border: none; background: #004d43; color: #fff; }\r\n.b-e:hover { background: #00453c; }\r\n\r\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\r\n@media(max-width:768px){\r\n  .hor-body { padding: 16px 12px; }\r\n  .hor-toggle { padding: 16px; }\r\n  .hor-toggle-title { font-size: 0.78rem; }\r\n  .hor-card { max-width: 200px; }\r\n  .hor-card.is-open { max-width: 100%; }\r\n  .days-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }\r\n}\r\n@media(max-width:420px){\r\n  .days-grid { grid-template-columns: 1fr; }\r\n  .hor-toggle-title { font-size: 0.72rem; }\r\n  .hor-card { max-width: 180px; }\r\n}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"hor-wrapper\">\r\n  <div class=\"hor-card\" id=\"horCard\">\r\n\r\n    <button class=\"hor-toggle\" id=\"horBtn\" aria-expanded=\"false\" aria-controls=\"horPanel\">\r\n      <span class=\"hor-toggle-label\">\r\n        <span class=\"hor-toggle-dot\"><\/span>\r\n        <span class=\"hor-toggle-title\">HORARIO SEMANAL<\/span>\r\n      <\/span>\r\n      <svg class=\"hor-toggle-chevron\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n           stroke=\"currentColor\" stroke-width=\"2\"\r\n           stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n        <polyline points=\"5 8 10 13 15 8\"\/>\r\n      <\/svg>\r\n    <\/button>\r\n\r\n    <div class=\"hor-panel\" id=\"horPanel\">\r\n      <div class=\"hor-body\">\r\n        <div class=\"days-grid\" id=\"grid\">\r\n          <div class=\"hor-state\" style=\"grid-column:1\/-1\">\r\n            <div class=\"hor-spinner\"><\/div>\r\n            <p>Cargando horario\u2026<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- MODAL ACCESO A CLASE -->\r\n<div class=\"modal-outer\" id=\"modal-outer\">\r\n  <div class=\"modal\">\r\n    <div class=\"modal-ico\"><i class=\"ti ti-lock\"><\/i><\/div>\r\n    <h3>Acceso a clase<\/h3>\r\n    <p class=\"modal-sub\">Ingresa el c\u00f3digo para entrar a la sesi\u00f3n<\/p>\r\n    <div class=\"modal-mat\" id=\"modal-name\"><\/div>\r\n    <input type=\"password\" id=\"code-in\" placeholder=\"C\u00f3digo de acceso\" autocomplete=\"off\" maxlength=\"40\"\/>\r\n    <div class=\"err\" id=\"err\"><i class=\"ti ti-alert-circle\"><\/i>&nbsp;C\u00f3digo incorrecto, intenta de nuevo<\/div>\r\n    <div class=\"mbtns\">\r\n      <button class=\"b-c\" id=\"btn-c\">Cancelar<\/button>\r\n      <button class=\"b-e\" id=\"btn-e\">Entrar&nbsp;<i class=\"ti ti-arrow-right\" style=\"font-size:13px;vertical-align:-2px\"><\/i><\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n'use strict';\r\n\r\nvar SHEET_CSV_URL = 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQQCgfhmOjiSoDt0cguUXq4DI2Cy0808qjkU4Kcmkmi2iwEfxmZuP4FOQ2K3KD-5xKhBa920ovMN3I6\/pub?gid=1361483214&single=true&output=csv';\r\n\r\nvar DAYS_CANONICAL = ['Lunes','Martes','Mi\u00e9rcoles','Jueves','Viernes'];\r\nvar TODAY_NAME = ['Domingo','Lunes','Martes','Mi\u00e9rcoles','Jueves','Viernes','S\u00e1bado'][new Date().getDay()];\r\n\r\nvar currentLink = '';\r\nvar currentCode = '';\r\n\r\nfunction norm(s){\r\n  return (s||'').trim().toLowerCase()\r\n    .normalize('NFD').replace(\/[\\u0300-\\u036f]\/g,'');\r\n}\r\n\r\nvar DAY_MAP = {\r\n  'lunes':'Lunes','martes':'Martes',\r\n  'miercoles':'Mi\u00e9rcoles','jueves':'Jueves','viernes':'Viernes'\r\n};\r\n\r\nfunction canonicalDay(raw){\r\n  return DAY_MAP[norm(raw)] || null;\r\n}\r\n\r\nfunction esc(s){\r\n  return String(s||'')\r\n    .replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;');\r\n}\r\n\r\nfunction expandRows(data){\r\n  var slots = [];\r\n  data.forEach(function(d){\r\n    if(!d.materia) return;\r\n    var diasRaw  = d.dias.split(',');\r\n    var horasRaw = d.horas.split(',');\r\n    diasRaw.forEach(function(dRaw, i){\r\n      var canonical = canonicalDay(dRaw.trim());\r\n      if(!canonical) return;\r\n      slots.push({\r\n        sigla  : d.sigla,\r\n        materia: d.materia,\r\n        dia    : canonical,\r\n        hora   : (horasRaw[i] || horasRaw[0] || '').trim(),\r\n        link   : d.link,\r\n        codigo : d.codigo\r\n      });\r\n    });\r\n  });\r\n  return slots;\r\n}\r\n\r\n\/* Construye la grilla \u2014 acepta datos vac\u00edos y muestra igualmente los d\u00edas *\/\r\nfunction buildGrid(data){\r\n  var slots = data ? expandRows(data) : [];\r\n  var byDay = {};\r\n  DAYS_CANONICAL.forEach(function(d){ byDay[d] = []; });\r\n  slots.forEach(function(s){ if(byDay[s.dia]) byDay[s.dia].push(s); });\r\n  DAYS_CANONICAL.forEach(function(d){\r\n    byDay[d].sort(function(a,b){ return a.hora.localeCompare(b.hora); });\r\n  });\r\n\r\n  var grid = document.getElementById('grid');\r\n  grid.innerHTML = DAYS_CANONICAL.map(function(day, di){\r\n    var isToday = (day === TODAY_NAME);\r\n    var items   = byDay[day];\r\n\r\n    var cells = items.length\r\n      ? items.map(function(s){\r\n          var active = isToday;\r\n          var btnClass = 'btn-clase' + (active ? '' : ' disabled');\r\n          var btnAttr  = active\r\n            ? 'onclick=\"openModal(\\'' +\r\n                encodeURIComponent(s.materia) + '\\',\\'' +\r\n                encodeURIComponent(s.link)    + '\\',\\'' +\r\n                encodeURIComponent(s.codigo)  +\r\n              '\\')\" title=\"Ingresar a la clase de hoy\"'\r\n            : 'title=\"Disponible solo el d\u00eda de la clase (' + esc(s.dia) + ')\"';\r\n\r\n          var dotHtml = active ? '<span class=\"active-dot\"><\/span>' : '';\r\n\r\n          return (\r\n            '<div class=\"slot\">' +\r\n              '<div class=\"slot-sigla\">' + esc(s.sigla) + '<\/div>' +\r\n              '<div class=\"slot-name\">'  + esc(s.materia) + '<\/div>' +\r\n              '<div class=\"slot-hour\"><i class=\"ti ti-clock\"><\/i>' + esc(s.hora) + '<\/div>' +\r\n              '<div class=\"slot-footer\">' +\r\n                dotHtml +\r\n                '<button class=\"' + btnClass + '\" ' + btnAttr + '>' +\r\n                  '<i class=\"ti ti-video\"><\/i>' +\r\n                  (active ? ' Entrar' : ' Clase') +\r\n                '<\/button>' +\r\n              '<\/div>' +\r\n            '<\/div>'\r\n          );\r\n        }).join('')\r\n      : '<div class=\"day-empty\">Sin clases<\/div>';\r\n\r\n    var headerStyle = isToday ? 'border-bottom-color:#004d43;' : '';\r\n\r\n    return (\r\n      '<div class=\"day-col\">' +\r\n        '<div class=\"day-header\" onclick=\"toggleDay(' + di + ')\" style=\"' + headerStyle + '\">' +\r\n          '<span class=\"day-lbl' + (isToday ? ' today' : '') + '\">' +\r\n            day + (isToday ? ' \u00b7 hoy' : '') +\r\n          '<\/span>' +\r\n          '<i class=\"ti ti-chevron-down day-chev' + (isToday ? ' open' : '') + '\" id=\"chev-' + di + '\"><\/i>' +\r\n        '<\/div>' +\r\n        '<div class=\"day-body' + (isToday ? ' open' : '') + '\" id=\"body-' + di + '\">' +\r\n          cells +\r\n        '<\/div>' +\r\n      '<\/div>'\r\n    );\r\n  }).join('');\r\n\r\n  checkCols();\r\n}\r\n\r\n\/* \u2500\u2500 TOGGLE D\u00cdA \u2500\u2500 *\/\r\nwindow.toggleDay = function(i){\r\n  document.getElementById('body-'+i).classList.toggle('open');\r\n  document.getElementById('chev-'+i).classList.toggle('open');\r\n};\r\n\r\n\/* \u2500\u2500 MODAL \u2500\u2500 *\/\r\nwindow.openModal = function(matName, lnk, cod){\r\n  currentLink = decodeURIComponent(lnk);\r\n  currentCode = decodeURIComponent(cod);\r\n  document.getElementById('modal-name').textContent = decodeURIComponent(matName);\r\n  document.getElementById('code-in').value = '';\r\n  document.getElementById('err').style.display = 'none';\r\n  document.getElementById('modal-outer').classList.add('show');\r\n  setTimeout(function(){ document.getElementById('code-in').focus(); }, 60);\r\n};\r\n\r\nfunction closeModal(){\r\n  document.getElementById('modal-outer').classList.remove('show');\r\n}\r\n\r\ndocument.getElementById('btn-c').addEventListener('click', closeModal);\r\ndocument.getElementById('modal-outer').addEventListener('click', function(e){\r\n  if(e.target === document.getElementById('modal-outer')) closeModal();\r\n});\r\ndocument.getElementById('btn-e').addEventListener('click', function(){\r\n  var v = document.getElementById('code-in').value.trim();\r\n  if(v === currentCode){\r\n    closeModal();\r\n    window.open(currentLink, '_blank');\r\n  } else {\r\n    document.getElementById('err').style.display = 'flex';\r\n    document.getElementById('code-in').value = '';\r\n    document.getElementById('code-in').focus();\r\n  }\r\n});\r\ndocument.getElementById('code-in').addEventListener('keydown', function(e){\r\n  if(e.key === 'Enter') document.getElementById('btn-e').click();\r\n});\r\n\r\n\/* \u2500\u2500 TOGGLE HEADER \u2500\u2500 *\/\r\nvar card = document.getElementById('horCard');\r\nvar btn  = document.getElementById('horBtn');\r\nvar todayOpened = false;\r\nbtn.addEventListener('click', function(){\r\n  var open = card.classList.toggle('is-open');\r\n  btn.setAttribute('aria-expanded', open ? 'true' : 'false');\r\n  if(open && !todayOpened){\r\n    todayOpened = true;\r\n    var todayIdx = DAYS_CANONICAL.indexOf(TODAY_NAME);\r\n    if(todayIdx >= 0){\r\n      var body = document.getElementById('body-' + todayIdx);\r\n      var chev = document.getElementById('chev-' + todayIdx);\r\n      if(body && !body.classList.contains('open')){\r\n        body.classList.add('open');\r\n        if(chev) chev.classList.add('open');\r\n      }\r\n    }\r\n  }\r\n});\r\n\r\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\r\nfunction checkCols(){\r\n  var w = window.innerWidth;\r\n  var c = w < 420 ? 1 : w < 768 ? 2 : 5;\r\n  var g = document.getElementById('grid');\r\n  if(g) g.style.gridTemplateColumns = 'repeat('+c+',minmax(0,1fr))';\r\n}\r\nwindow.addEventListener('resize', checkCols);\r\ncheckCols();\r\n\r\n\/* \u2500\u2500 CARGA CSV \u2500\u2500 *\/\r\nPapa.parse(SHEET_CSV_URL, {\r\n  download: true,\r\n  skipEmptyLines: true,\r\n  complete: function(result){\r\n    var rows = result.data;\r\n    var data = rows.slice(1).map(function(r){\r\n      return {\r\n        sigla  : (r[0]||'').trim(),\r\n        materia: (r[1]||'').trim(),\r\n        dias   : (r[2]||'').trim(),\r\n        horas  : (r[3]||'').trim(),\r\n        link   : (r[4]||'').trim(),\r\n        codigo : (r[5]||'').trim()\r\n      };\r\n    }).filter(function(d){ return d.materia && d.dias; });\r\n\r\n    \/* Siempre construye la grilla, con o sin datos *\/\r\n    buildGrid(data);\r\n  },\r\n  error: function(){\r\n    \/* Error de red: igual muestra los d\u00edas con \"Sin clases\" *\/\r\n    buildGrid([]);\r\n  }\r\n});\r\n\r\n})();\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-026efc5 e-flex e-con-boxed e-con e-parent\" data-id=\"026efc5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-74c5ac2 elementor-widget elementor-widget-html\" data-id=\"74c5ac2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n  <meta charset=\"UTF-8\" \/>\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\r\n  <title>Footer \u2013 Ingenier\u00eda Petrolera UMSA<\/title>\r\n  <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@tabler\/icons-webfont@latest\/dist\/tabler-icons.min.css\"\/>\r\n  <style>\r\n    * { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n    body {\r\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n      background: transparent;\r\n    }\r\n\r\n    .footer {\r\n      background: transparent;\r\n      border-top: 1px solid #dedad2;\r\n      padding: 2.5rem 3rem 1.5rem;\r\n      width: 100%;\r\n    }\r\n\r\n    .footer-grid {\r\n      display: grid;\r\n      grid-template-columns: 1fr 1fr;\r\n      gap: 2.5rem;\r\n      margin-bottom: 2rem;\r\n      width: 100%;\r\n    }\r\n\r\n    @media (max-width: 720px) {\r\n      .footer { padding: 2rem 1.25rem 1.25rem; }\r\n      .footer-grid { grid-template-columns: 1fr; gap: 2rem; }\r\n      .footer-bottom { flex-direction: column; gap: 0.5rem; text-align: center; }\r\n    }\r\n\r\n    .footer-label {\r\n      font-size: 11.5px;\r\n      letter-spacing: 0.09em;\r\n      text-transform: uppercase;\r\n      color: #9e9b95;\r\n      font-weight: 500;\r\n      margin-bottom: 0.65rem;\r\n    }\r\n\r\n    .footer-title {\r\n      font-size: 16px;\r\n      font-weight: 500;\r\n      color: #1a1a18;\r\n      line-height: 1.4;\r\n      margin-bottom: 0.2rem;\r\n    }\r\n\r\n    .footer-sub {\r\n      font-size: 14px;\r\n      color: #6b6965;\r\n      line-height: 1.6;\r\n    }\r\n\r\n    .footer-tagline {\r\n      font-size: 13px;\r\n      color: #9e9b95;\r\n      line-height: 1.7;\r\n      margin-top: 0.85rem;\r\n      font-style: italic;\r\n    }\r\n\r\n    \/* \u2500\u2500 CONTACTO \u2500\u2500 *\/\r\n    .contact-block {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0;\r\n    }\r\n\r\n    .contact-item {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 10px;\r\n      padding: 10px 0;\r\n      border-bottom: 1px solid #e8e5df;\r\n    }\r\n\r\n    .contact-item:first-child {\r\n      border-top: 1px solid #e8e5df;\r\n    }\r\n\r\n    .contact-item i {\r\n      font-size: 16px;\r\n      color: #b5b2aa;\r\n      flex-shrink: 0;\r\n    }\r\n\r\n    .contact-item span {\r\n      font-size: 14px;\r\n      color: #4a4845;\r\n      font-weight: 400;\r\n      letter-spacing: 0.01em;\r\n    }\r\n\r\n    .contact-item a {\r\n      font-size: 14px;\r\n      color: #4a4845;\r\n      text-decoration: none;\r\n      font-weight: 400;\r\n      letter-spacing: 0.01em;\r\n      transition: color .15s;\r\n    }\r\n\r\n    .contact-item a:hover {\r\n      color: #185FA5;\r\n    }\r\n\r\n    \/* \u2500\u2500 WHATSAPP \u2500\u2500 *\/\r\n    .wsp-btn {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 9px;\r\n      margin-top: 1.4rem;\r\n      padding: 10px 20px;\r\n      background: transparent;\r\n      border: 1.5px solid #25D366;\r\n      border-radius: 8px;\r\n      text-decoration: none;\r\n      transition: background .18s;\r\n      align-self: flex-start;\r\n    }\r\n\r\n    .wsp-btn:hover {\r\n      background: #25D366;\r\n    }\r\n\r\n    .wsp-btn:hover .wsp-label {\r\n      color: #fff;\r\n    }\r\n\r\n    .wsp-btn:hover .wsp-icon {\r\n      fill: #fff;\r\n    }\r\n\r\n    .wsp-icon {\r\n      width: 17px;\r\n      height: 17px;\r\n      fill: #25D366;\r\n      flex-shrink: 0;\r\n      transition: fill .18s;\r\n    }\r\n\r\n    .wsp-label {\r\n      font-size: 14px;\r\n      font-weight: 500;\r\n      color: #25D366;\r\n      transition: color .18s;\r\n    }\r\n\r\n    \/* \u2500\u2500 FOOTER BOTTOM \u2500\u2500 *\/\r\n    .footer-bottom {\r\n      border-top: 1px solid #dedad2;\r\n      padding-top: 1.1rem;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n    }\r\n\r\n    .footer-bottom p {\r\n      font-size: 11px;\r\n      color: #9e9b95;\r\n    }\r\n\r\n    .footer-bottom a {\r\n      color: #185FA5;\r\n      text-decoration: none;\r\n      font-size: 11px;\r\n    }\r\n\r\n    .footer-bottom a:hover { text-decoration: underline; }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<footer class=\"footer\">\r\n\r\n  <div class=\"footer-grid\">\r\n\r\n    <!-- Columna 1: Presentaci\u00f3n -->\r\n    <div>\r\n      <p class=\"footer-label\">Maestr\u00eda<\/p>\r\n      <p class=\"footer-title\">Maestr\u00eda en caracterizaci\u00f3n geoqu\u00edmica y petrof\u00edsica de reservorios orientada a hidrocarburos<\/p>\r\n      <p class=\"footer-sub\">Universidad Mayor de San Andr\u00e9s<\/p>\r\n      <p class=\"footer-sub\">Carrera de Ingenier\u00eda Petrolera<\/p>\r\n      <p class=\"footer-tagline\">\r\n        Impulsa tu formaci\u00f3n profesional con una especializaci\u00f3n\r\n        de excelencia acad\u00e9mica y proyecci\u00f3n internacional.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <!-- Columna 2: Contacto -->\r\n    <div>\r\n      <p class=\"footer-label\">Informaci\u00f3n e inscripciones<\/p>\r\n\r\n      <div class=\"contact-block\">\r\n\r\n        <div class=\"contact-item\">\r\n          <i class=\"ti ti-mail\" aria-hidden=\"true\"><\/i>\r\n          <a href=\"mailto:pet.maestria.inst@gmail.com\">pet.maestria.inst@gmail.com<\/a>\r\n        <\/div>\r\n\r\n        <div class=\"contact-item\">\r\n          <i class=\"ti ti-phone\" aria-hidden=\"true\"><\/i>\r\n          <span>68026269<\/span>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n      <a class=\"wsp-btn\"\r\n         href=\"https:\/\/wa.me\/59168026269\"\r\n         target=\"_blank\"\r\n         rel=\"noopener\"\r\n         aria-label=\"Contactar por WhatsApp\">\r\n        <svg class=\"wsp-icon\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\">\r\n          <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\"\/>\r\n        <\/svg>\r\n        <span class=\"wsp-label\">Escribir por WhatsApp<\/span>\r\n      <\/a>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/footer>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>MAESTRIA EN CARACTERIZACION GEOQUIMICA Y PETROFISICA DE RESERVORIOS ORIENTADA A HIDROCARBUROS UNIVERSIDAD MAYOR DE SAN ANDR\u00c9S FACULTAD DE INGENIER\u00cdA CARRERA [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":11020,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-10452","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/pages\/10452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/comments?post=10452"}],"version-history":[{"count":230,"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/pages\/10452\/revisions"}],"predecessor-version":[{"id":11021,"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/pages\/10452\/revisions\/11021"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/media\/11020"}],"wp:attachment":[{"href":"https:\/\/petrolera.umsa.edu.bo\/index.php\/wp-json\/wp\/v2\/media?parent=10452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}