{"id":17355,"date":"2026-04-13T09:32:26","date_gmt":"2026-04-13T09:32:26","guid":{"rendered":"https:\/\/www.tiritaito.com\/blog\/?p=17355"},"modified":"2026-04-17T19:29:00","modified_gmt":"2026-04-17T19:29:00","slug":"la-santa-misa","status":"publish","type":"post","link":"https:\/\/www.tiritaito.com\/blog\/tiempos-liturgicos\/la-santa-misa\/","title":{"rendered":"La Santa Misa"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-right:0px;--awb-padding-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div style=\"position: relative; display: block; margin: 0 auto;\">\n  <!-- Imagen -->\n  <img decoding=\"async\" src=\"https:\/\/www.tiritaito.com\/blog\/wp-content\/uploads\/2025\/10\/IMAGE-2025-10-03-10-57-41_resultado.webp\" \n       alt=\"Imagen con degradado\" \n       style=\"display: block; width: 100%; height: auto; object-fit: cover;\">\n\n  <!-- Degradado blanco (solo parte inferior) -->\n  <div style=\"\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    height: 40%;\n    background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);\n    pointer-events: none;\n  \"><\/div>\n<\/div>\n<\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-right:12px;--awb-padding-bottom:0px;--awb-padding-left:12px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     LECTURAS LIT\u00daRGICAS DIARIAS \u00b7 tiritaito.com\n     Pegar en Code Block de Avada (dentro de un Container)\n\n     CONFIGURA CUANDO TOQUE \u2014 solo estas variables:\n       DOCX_URL  \u2192 URL del .docx subido a la Biblioteca de Medios de WordPress\n       HOMILIA   \u2192 URL del audio de homil\u00eda (una sola; c\u00e1mbiala cuando quieras; '' = sin homil\u00eda)\n       FIESTA    \u2192 'yes' = mostrar lecturas de la Fiesta ese d\u00eda (si existen)\n                   ''    = mostrar lecturas ordinarias (por defecto)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<script>\nvar DOCX_URL = 'https:\/\/www.tiritaito.com\/blog\/wp-content\/uploads\/2026\/04\/Leccionario-Semanal.docx';\nvar HOMILIA  = 'https:\/\/www.tiritaito.com\/blog\/wp-content\/uploads\/2026\/04\/Homilia-17.4.26.mp3'; \/* \u2190 URL del audio; c\u00e1mbiala cuando quieras *\/\nvar FIESTA = {\n  1:'', \/* lunes     *\/\n  2:'', \/* martes    *\/\n  3:'', \/* mi\u00e9rcoles *\/\n  4:'', \/* jueves    *\/\n  5:'', \/* viernes   *\/\n  6:'', \/* s\u00e1bado    -- pon 'yes' aqu\u00ed si ese s\u00e1bado hay fiesta con lecturas propias *\/\n  0:''  \/* domingo   *\/\n};\n<\/script>\n\n<!-- JSZip cargado de forma diferida para no bloquear el render de la p\u00e1gina -->\n<link rel=\"preload\" as=\"script\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Montserrat:wght@400;500;600&display=swap\" media=\"print\" onload=\"this.media='all'\">\n<noscript><link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Montserrat:wght@400;500;600&display=swap\"><\/noscript>\n\n<div id=\"lw\" role=\"main\" aria-label=\"Lecturas lit\u00fargicas del d\u00eda\"><\/div>\n\n<style>\n\/* \u2500\u2500 Reset \u2500\u2500 *\/\n#lw,#lw *{box-sizing:border-box;margin:0;padding:0}\n\n\/* \u2500\u2500 Wrapper \u2500\u2500 *\/\n#lw{\n  font-family:'EB Garamond',Georgia,serif;\n  max-width:640px;\n  margin:0 auto;\n  padding:1.5rem 0 2rem;\n  background:transparent;\n  color:#1a1a1a;\n  \/* Offset para que el scroll al abrir acorde\u00f3n no quede bajo la barra fija del tema Avada.\n     Ajusta este valor si tu header de Avada tiene otra altura. *\/\n  --lw-scroll-offset: 80px;\n}\n\n\/* \u2500\u2500 Cabecera \u2500\u2500 *\/\n#lw .h{text-align:center;margin-bottom:2rem}\n#lw .h-cruz{font-family:'Montserrat',sans-serif;font-size:12px;letter-spacing:12px;color:#bf4646;margin-bottom:.9rem}\n#lw .h-tag{font-family:'Montserrat',sans-serif;font-size:9px;font-weight:600;letter-spacing:3.5px;text-transform:uppercase;color:#aaa;margin-bottom:.35rem}\n#lw .h-fecha{font-size:26px;font-weight:400;color:#111;letter-spacing:-.3px;line-height:1.2}\n#lw .h-lit{font-family:'Montserrat',sans-serif;font-size:10px;font-weight:400;color:#aaa;letter-spacing:2px;text-transform:uppercase;margin-top:.45rem;line-height:1.6}\n#lw .h-sep{width:1px;height:28px;background:linear-gradient(to bottom,transparent,#bf4646,transparent);margin:.9rem auto}\n#lw .h-fiesta-badge{\n  display:inline-block;\n  font-family:'Montserrat',sans-serif;\n  font-size:8.5px;\n  font-weight:600;\n  letter-spacing:2.5px;\n  text-transform:uppercase;\n  color:#fff;\n  background:#bf4646;\n  border-radius:20px;\n  padding:.25rem .8rem;\n  margin-top:.6rem;\n}\n\n\/* \u2500\u2500 Loading \/ Error \u2500\u2500 *\/\n#lw .loading{text-align:center;padding:3rem 1rem;contain:layout}\n#lw .spin{\n  width:22px;height:22px;\n  border:1.5px solid #ebebeb;\n  border-top-color:#bf4646;\n  border-radius:50%;\n  animation:lw-sp .9s linear infinite;\n  margin:0 auto .9rem;\n  \/* will-change s\u00f3lo donde hay animaci\u00f3n activa *\/\n  will-change:transform;\n}\n@keyframes lw-sp{to{transform:rotate(360deg)}}\n#lw .loading p{font-family:'Montserrat',sans-serif;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#bbb}\n#lw .err{text-align:center;padding:2rem 1rem;font-family:'Montserrat',sans-serif;font-size:11px;color:#bbb;line-height:2}\n\n\/* \u2500\u2500 Tarjeta \u2500\u2500 *\/\n#lw .card{\n  background:#fff;\n  border:.5px solid #ebebeb;\n  border-radius:14px;\n  margin-bottom:.75rem;\n  overflow:hidden;\n  \/* scroll-margin: hace que scrollIntoView respete el offset del header fijo *\/\n  scroll-margin-top:var(--lw-scroll-offset);\n  opacity:0;\n  transform:translateY(10px);\n  animation:lw-up .45s ease forwards;\n  \/* Mejora el rendimiento de animaci\u00f3n en m\u00f3vil *\/\n  contain:layout style;\n}\n#lw .card:nth-child(1){animation-delay:.07s}\n#lw .card:nth-child(2){animation-delay:.17s}\n#lw .card:nth-child(3){animation-delay:.27s}\n#lw .card:nth-child(4){animation-delay:.37s}\n#lw .card:nth-child(5){animation-delay:.47s}\n@keyframes lw-up{to{opacity:1;transform:none}}\n\n\/* \u2500\u2500 Cabecera tarjeta (acorde\u00f3n) \u2500\u2500 *\/\n#lw .card-hd{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  padding:.9rem 1.1rem;\n  cursor:pointer;\n  -webkit-tap-highlight-color:transparent;\n  transition:background .18s;\n  user-select:none;\n}\n#lw .card-hd:hover{background:#fafafa}\n#lw .card-hd-l{display:flex;align-items:center;gap:10px}\n\/* Todos los dots en rojo corporativo *\/\n#lw .dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;background:#bf4646}\n#lw .card-meta{display:flex;flex-direction:column;gap:2px}\n#lw .card-tipo{font-family:'Montserrat',sans-serif;font-size:9px;font-weight:600;letter-spacing:2.5px;text-transform:uppercase;color:#aaa}\n#lw .card-ref{font-family:'Montserrat',sans-serif;font-size:11px;color:#777;margin-top:1px;line-height:1.4}\n#lw .chev{transition:transform .3s ease;flex-shrink:0}\n#lw .chev svg{width:11px;height:11px;stroke:#ccc;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n#lw .chev.open{transform:rotate(180deg)}\n\n\/* \u2500\u2500 Cuerpo acorde\u00f3n \u2500\u2500 *\/\n#lw .card-bd{max-height:0;overflow:hidden;transition:max-height .5s cubic-bezier(.4,0,.2,1)}\n#lw .card-bd.open{max-height:5000px}\n#lw .card-in{padding:1.1rem 1.25rem 1.4rem;border-top:.5px solid #f3f3f3}\n\n\/* \u2500\u2500 T\u00edtulo de la lectura (17 px, rojo) \u2500\u2500 *\/\n#lw .lect-tit{\n  font-family:'Montserrat',sans-serif;\n  font-size:17px;\n  font-weight:500;\n  letter-spacing:0;\n  text-transform:none;\n  color:#bf4646;\n  display:block;\n  margin-bottom:1.1rem;\n  padding-bottom:.85rem;\n  border-bottom:.5px solid #f3f3f3;\n  line-height:1.45;\n}\n\n\/* \u2500\u2500 Texto b\u00edblico (14 px, justificado) \u2500\u2500 *\/\n#lw .texto{font-size:14px;font-weight:400;line-height:1.9;color:#1a1a1a;text-align:justify}\n#lw .texto p{margin-bottom:.85em}\n#lw .texto p:last-child{margin-bottom:0}\n\n\/* \u2500\u2500 Palabra de Dios \/ del Se\u00f1or \u2500\u2500 *\/\n#lw .palabra{\n  display:block;\n  margin-top:1.2rem;\n  padding-top:.95rem;\n  border-top:.5px solid #f3f3f3;\n  font-family:'Montserrat',sans-serif;\n  font-size:9px;\n  font-weight:600;\n  letter-spacing:3px;\n  text-transform:uppercase;\n  color:#bf4646;\n  text-align:right;\n}\n\n\/* \u2500\u2500 Salmo (17 px responsorio, 14 px estrofas, justificado) \u2500\u2500 *\/\n#lw .sal-resp{background:#fdf7f7;border-left:2px solid #bf4646;border-radius:0 8px 8px 0;padding:.7rem 1rem;margin-bottom:1.1rem}\n#lw .sal-resp-lbl{font-family:'Montserrat',sans-serif;font-size:8px;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:#bf4646;display:block;margin-bottom:.3rem}\n#lw .sal-resp-txt{font-size:17px;font-style:italic;color:#1a1a1a;line-height:1.65}\n#lw .sal-v{font-size:14px;line-height:1.85;color:#1a1a1a;margin-bottom:.55rem;text-align:justify}\n#lw .sal-r{font-family:'Montserrat',sans-serif;font-size:8.5px;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:#bf4646;margin:.45rem 0 .85rem;text-align:right}\n\n\/* \u2500\u2500 Cruz evangelio \u2500\u2500 *\/\n#lw .ev-cruz{font-family:'Montserrat',sans-serif;font-size:10px;font-weight:600;letter-spacing:5px;color:#bf4646;text-align:center;display:block;margin-bottom:1rem}\n\n\/* \u2500\u2500 Reproductor audio \u2500\u2500 *\/\n#lw .audio{\n  background:#fff;border:.5px solid #ebebeb;border-radius:14px;\n  padding:1.1rem 1.25rem;margin-top:.25rem;\n  opacity:0;transform:translateY(10px);\n  animation:lw-up .45s ease .55s forwards;\n  contain:layout style;\n}\n#lw .audio-tag{font-family:'Montserrat',sans-serif;font-size:9px;font-weight:600;letter-spacing:2.5px;text-transform:uppercase;color:#aaa;margin-bottom:.35rem}\n#lw .audio-tit{font-size:19px;font-weight:400;color:#111;margin-bottom:1.1rem;line-height:1.3}\n#lw .a-ctrl{display:flex;align-items:center;gap:13px}\n#lw .a-play{width:38px;height:38px;border-radius:50%;background:#bf4646;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:transform .15s,opacity .15s;outline:none;-webkit-tap-highlight-color:transparent}\n#lw .a-play:hover{opacity:.82}\n#lw .a-play:active{transform:scale(.93)}\n#lw .a-play svg{width:13px;height:13px;fill:#fff;stroke:none;margin-left:2px}\n#lw .a-play.playing .pi{display:none}\n#lw .a-play:not(.playing) .pa{display:none}\n#lw .a-prog{flex:1;display:flex;flex-direction:column;gap:6px}\n#lw .a-bar{width:100%;height:2px;background:#e8e8e8;border-radius:2px;cursor:pointer;position:relative}\n#lw .a-fill{height:100%;background:#bf4646;border-radius:2px;width:0%;transition:width .1s linear}\n#lw .a-times{display:flex;justify-content:space-between;font-family:'Montserrat',sans-serif;font-size:10px;color:#ccc}\n#lw .a-none{font-family:'Montserrat',sans-serif;font-size:11px;color:#ccc;font-style:italic;padding:.3rem 0}\n\n\/* \u2500\u2500 Footer \u2500\u2500 *\/\n#lw .footer{text-align:center;margin-top:1.75rem;font-family:'Montserrat',sans-serif;font-size:8.5px;letter-spacing:2px;text-transform:uppercase;color:#ccc}\n<\/style>\n\n<script>\n(function(){\n'use strict';\n\n\/\/ \u2500\u2500\u2500 Constantes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nvar DIAS=['domingo','lunes','martes','mi\u00e9rcoles','jueves','viernes','s\u00e1bado'];\nvar MESES=['enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'];\nvar NS='http:\/\/schemas.openxmlformats.org\/wordprocessingml\/2006\/main';\n\n\/\/ \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction hoy(){var d=new Date();return{dow:d.getDay(),d:d.getDate(),m:d.getMonth(),y:d.getFullYear()}}\nfunction fmtFecha(o){return DIAS[o.dow].charAt(0).toUpperCase()+DIAS[o.dow].slice(1)+', '+o.d+' de '+MESES[o.m]+' de '+o.y}\nfunction esc(s){return String(s).replace(\/&\/g,'&').replace(\/<\/g,'<').replace(\/>\/g,'>').replace(\/\"\/g,'\"')}\nfunction $id(id){return document.getElementById(id)}\nfunction norm(s){return s.toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g,'').replace(\/\\s+\/g,'')}\n\n\/\/ \u2500\u2500\u2500 Parser XML del Word \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ Devuelve array de {text, anyBold, runs:[{bold,text}]}\nfunction parseXML(xmlStr){\n  var doc=new DOMParser().parseFromString(xmlStr,'application\/xml');\n  var paras=[];\n  var pNodes=doc.getElementsByTagNameNS(NS,'p');\n  for(var i=0;i<pNodes.length;i++){\n    var runs=[];\n    var rNodes=pNodes[i].getElementsByTagNameNS(NS,'r');\n    for(var j=0;j<rNodes.length;j++){\n      var tNode=rNodes[j].getElementsByTagNameNS(NS,'t')[0];\n      if(!tNode||!tNode.textContent) continue;\n      runs.push({bold:!!rNodes[j].getElementsByTagNameNS(NS,'b')[0], text:tNode.textContent});\n    }\n    if(!runs.length) continue;\n    var fullText=runs.map(function(r){return r.text}).join('').trim();\n    if(!fullText) continue;\n    paras.push({text:fullText, runs:runs, anyBold:runs.some(function(r){return r.bold})});\n  }\n  return paras;\n}\n\n\/\/ \u2500\u2500\u2500 Parser de semana \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ Admite dos formatos de cabecera de d\u00eda:\n\/\/   Formato A (con n\u00famero): \"1. Lunes, 13 de abril de 2026 (Lunes de la II Semana)\"\n\/\/   Formato B (sin n\u00famero): \"Lunes, 20 de abril de 2026 (Lunes de la III Semana)\"\n\/\/ Admite dos formatos de opcional:\n\/\/   Formato A: l\u00ednea \"B. Opcional: Nombre de la fiesta\" (precedida de \"A. Lecturas de la Feria\")\n\/\/   Formato B: l\u00ednea \"Opcional:\" o \"Opcional (Nombre)\"\n\/\/\n\/\/ Estructura por d\u00eda:\n\/\/   {lit, pl, sl, sl2, ev,\n\/\/    tieneOpcional, opt_lit, opt_pl, opt_sl, opt_sl2, opt_ev}\nfunction parseSemana(paras){\n  var semana={};\n  var DOW={lunes:1,martes:2,miercoles:3,jueves:4,viernes:5,sabado:6,domingo:0};\n\n  function diaKey(s){var n=norm(s);for(var k in DOW){if(n.indexOf(k)===0)return DOW[k]}return null}\n\n  function emptyDia(){\n    return{\n      lit:'',\n      pl:{tit:'',ref:'',texto:[]},\n      sl:{ref:'',resp:'',estrofas:[]},\n      sl2:null,\n      ev:{tit:'',ref:'',texto:[]},\n      tieneOpcional:false,\n      opt_lit:'',\n      opt_pl:{tit:'',ref:'',texto:[]},\n      opt_sl:{ref:'',resp:'',estrofas:[]},\n      opt_sl2:null,\n      opt_ev:{tit:'',ref:'',texto:[]}\n    };\n  }\n\n  var cur=null;       \/\/ dow actual\n  var sec=null;       \/\/ 'primera'|'salmo'|'segunda'|'evangelio'\n  var enOpc=false;    \/\/ dentro del bloque opcional?\n  var buf=[];\n\n  function flush(){\n    if(cur===null||!sec||!semana[cur]) return;\n    var d=semana[cur];\n    var lines=buf.filter(Boolean);\n    var t=enOpc;\n    if(sec==='primera')        (t?d.opt_pl:d.pl).texto=lines;\n    else if(sec==='salmo')     (t?d.opt_sl:d.sl).estrofas=lines;\n    else if(sec==='segunda')   (t?d.opt_sl2:d.sl2).texto=lines;\n    else if(sec==='evangelio') (t?d.opt_ev:d.ev).texto=lines;\n    buf=[];\n  }\n\n  for(var i=0;i<paras.length;i++){\n    var p=paras[i];\n    var t=p.text;\n\n    \/\/ \u2500\u2500 Separador de d\u00eda \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/^-{10,}\/.test(t)){flush();sec=null;enOpc=false;continue}\n\n    \/\/ \u2500\u2500 Cabecera de d\u00eda \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    \/\/ Formato A: \"1. Lunes, 13 de abril\u2026\"\n    var mDia=\/^(?:\\d+\\.\\s*)?(lunes|martes|mi[e\u00e9]rcoles|jueves|viernes|s[a\u00e1]bado|domingo)[,\\s]\/i.exec(t);\n    if(mDia){\n      flush();\n      var dow=diaKey(mDia[1]);\n      if(dow===null) continue;\n      cur=dow; sec=null; enOpc=false;\n      var mLit=\/\\(([^)]+)\\)\/.exec(t);\n      semana[dow]=emptyDia();\n      semana[dow].lit=mLit?mLit[1]:'';\n      continue;\n    }\n\n    if(cur===null) continue;\n    var dia=semana[cur];\n\n    \/\/ \u2500\u2500 Bloque \"A. Lecturas de la Feria\" \u2014 solo lo ignoramos \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/^A\\.\\s*(lecturas?|feria)\/i.test(t)) continue;\n\n    \/\/ \u2500\u2500 Bloque \"B. Opcional: Nombre\" (formato con letra B.) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    var mOpcB=\/^B\\.\\s*opcional\\s*[:\\-\u2013]?\\s*(.*)$\/i.exec(t);\n    if(mOpcB){\n      flush(); sec=null; enOpc=true; dia.tieneOpcional=true;\n      dia.opt_lit=mOpcB[1].trim();\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Bloque \"Opcional:\" \/ \"Opcional (Nombre)\" (formato sin letra) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/^opcional\\b\/i.test(t)||\/^lecturas?\\s+(de\\s+la\\s+)?fiesta\/i.test(t)){\n      flush(); sec=null; enOpc=true; dia.tieneOpcional=true;\n      var mOpcA=\/\\(([^)]+)\\)\/.exec(t)||\/:\\s*(.+)$\/.exec(t);\n      if(mOpcA) dia.opt_lit=mOpcA[1].trim();\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Primera Lectura \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/primera\\s*lectura\/i.test(t)&&p.anyBold){\n      flush(); sec='primera';\n      var tgt=enOpc?dia.opt_pl:dia.pl;\n      var mRef=\/\\(([^)]+)\\)\/.exec(t);\n      tgt.ref=mRef?mRef[1]:'';\n      \/\/ Buscar t\u00edtulo en runs bold que no contengan \"primera\"\n      var bRuns=p.runs.filter(function(r){return r.bold&&r.text.trim()}).map(function(r){return r.text.trim()});\n      var titCandidates=bRuns.filter(function(s){return\/lectura\/i.test(s)&&!\/primera\/i.test(s)});\n      tgt.tit=titCandidates.length?titCandidates[titCandidates.length-1]:(bRuns[bRuns.length-1]||'');\n      \/\/ Si el t\u00edtulo est\u00e1 en texto plano despu\u00e9s de la referencia (formato sin bold separado)\n      if(!tgt.tit){\n        var mTit=\/lectura\\s+del?\\s+(.+?)(?:\\s+\\d|$)\/i.exec(t);\n        if(mTit) tgt.tit='Lectura '+mTit[1];\n      }\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Segunda Lectura \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/segunda\\s*lectura\/i.test(t)&&p.anyBold){\n      flush(); sec='segunda';\n      var tgt2=enOpc?(dia.opt_sl2=dia.opt_sl2||{tit:'',ref:'',texto:[]}):(dia.sl2={tit:'',ref:'',texto:[]});\n      var mRef2=\/\\(([^)]+)\\)\/.exec(t);\n      tgt2.ref=mRef2?mRef2[1]:'';\n      var bRuns2=p.runs.filter(function(r){return r.bold&&r.text.trim()}).map(function(r){return r.text.trim()});\n      var t2=bRuns2.filter(function(s){return\/lectura\/i.test(s)&&!\/segunda\/i.test(s)});\n      tgt2.tit=t2.length?t2[t2.length-1]:(bRuns2[bRuns2.length-1]||'');\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Salmo Responsorial \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/salmo\\s*responsorial\/i.test(t)&&p.anyBold){\n      flush(); sec='salmo';\n      var tgtSl=enOpc?dia.opt_sl:dia.sl;\n      var mRefS=\/\\(([^)]+)\\)\/.exec(t);\n      if(mRefS) tgtSl.ref=mRefS[1];\n      \/\/ El salmo puede tener la ref en texto plano: \"Salmo 118, 23-24. 26-27\"\n      if(!tgtSl.ref){\n        var mRefSp=\/salmo\\s+([\\d,\\.\\s\\-\u2013abcd]+)\/i.exec(t);\n        if(mRefSp) tgtSl.ref='Sal '+mRefSp[1].trim();\n      }\n      \/\/ Responsorio: buscar \"R.\" en bold o en texto con asterisco\/cursiva\n      var bS=p.runs.filter(function(r){return r.bold}).map(function(r){return r.text.trim()});\n      var rBold=bS.filter(function(s){return\/^R\\\/\/i.test(s)});\n      if(rBold.length){\n        tgtSl.resp=rBold[0].replace(\/^R\\\/\\.\\s*\/,'').trim();\n      } else {\n        \/\/ Puede venir como \"R. Texto\" o \"*R. Texto*\" en texto plano\n        var mRp=\/\\*?R[\\\/\\.]\\.?\\s*(.+?)(?:\\*|$)\/i.exec(t.replace(\/salmo\\s*responsorial[^R]*\/i,''));\n        if(mRp) tgtSl.resp=mRp[1].trim();\n      }\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Evangelio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/^evangelio\\b\/i.test(t)&&p.anyBold){\n      flush(); sec='evangelio';\n      var tgtEv=enOpc?dia.opt_ev:dia.ev;\n      var mRefE=\/\\(([^)]+)\\)\/.exec(t);\n      tgtEv.ref=mRefE?mRefE[1]:'';\n      var bE=p.runs.filter(function(r){return r.bold&&r.text.trim()}).map(function(r){return r.text.trim()});\n      var eTit=bE.filter(function(s){return\/lectura\/i.test(s)});\n      tgtEv.tit=eTit.length?eTit[eTit.length-1]:(bE[bE.length-1]||'');\n      continue;\n    }\n\n    \/\/ \u2500\u2500 \"Lectura de\u2026\" o \"Lectura del\u2026\" (sin negrita de tipo, en texto plano) \u2500\n    \/\/ En el nuevo formato algunas l\u00edneas de encabezado de lectura no tienen bold complejo\n    if(\/^lectura\\s+(de[l\\s]|del\\s+libro|del\\s+santo|de\\s+la)\/i.test(t)&&!sec){\n      \/\/ Es el t\u00edtulo de la lectura que viene justo despu\u00e9s de la secci\u00f3n marcada\n      \/\/ Nada que hacer: el texto entrar\u00e1 como buf en la pr\u00f3xima iteraci\u00f3n\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Fin de secci\u00f3n \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(\/^palabra\\s+de\\s+(dios|el\\s+se[\u00f1n]or)\/i.test(t)){flush();sec=null;continue}\n\n    \/\/ \u2500\u2500 R\/. intercalado en el salmo \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(sec==='salmo'){\n      var tgtSlR=enOpc?dia.opt_sl:dia.sl;\n      if(\/^\\*?R[\\\/\\.]\/i.test(t)){\n        if(!tgtSlR.resp){\n          tgtSlR.resp=t.replace(\/^\\*?R[\\\/\\.]\\.?\\s*\/i,'').replace(\/\\*$\/,'').trim();\n        } else {\n          buf.push('__RESP__');\n        }\n      } else {\n        \/\/ Limpiar asteriscos de cursiva del formato sin bold\n        buf.push(t.replace(\/^\\*|\\*$\/g,'').trim());\n      }\n      continue;\n    }\n\n    \/\/ \u2500\u2500 Texto normal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if(sec) buf.push(t);\n  }\n  flush();\n  return semana;\n}\n\n\/\/ \u2500\u2500\u2500 Renders \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction rLect(tit,ref,parrafos,tipo){\n  var h='';\n  \/\/ En el nuevo formato los t\u00edtulos pueden ir en el texto antes del cuerpo\n  if(tit) h+='<span class=\"lect-tit\">'+esc(tit)+(ref?' \u00a0('+esc(ref)+')':'')+'<\/span>';\n  else if(ref) h+='<span class=\"lect-tit\">'+esc(ref)+'<\/span>';\n  h+='<div class=\"texto\">';\n  for(var i=0;i<parrafos.length;i++) h+='<p>'+esc(parrafos[i])+'<\/p>';\n  h+='<\/div><span class=\"palabra\">'+(tipo==='evangelio'?'Palabra del Se\u00f1or':'Palabra de Dios')+'<\/span>';\n  return h;\n}\n\nfunction rSalmo(sl){\n  var h='';\n  if(sl.resp){\n    h+='<div class=\"sal-resp\"><span class=\"sal-resp-lbl\">Responsorio<\/span>'\n      +'<div class=\"sal-resp-txt\">'+esc(sl.resp)+'<\/div><\/div>';\n  }\n  for(var i=0;i<sl.estrofas.length;i++){\n    h+=sl.estrofas[i]==='__RESP__'\n      ?'<div class=\"sal-r\">R\/.<\/div>'\n      :'<div class=\"sal-v\">'+esc(sl.estrofas[i])+'<\/div>';\n  }\n  return h;\n}\n\nfunction rEvangelio(tit,ref,parrafos){\n  var h='<span class=\"ev-cruz\">\u2720 \u00a0 \u2720 \u00a0 \u2720<\/span>';\n  if(tit) h+='<span class=\"lect-tit\">'+esc(tit)+(ref?' \u00a0('+esc(ref)+')':'')+'<\/span>';\n  else if(ref) h+='<span class=\"lect-tit\">'+esc(ref)+'<\/span>';\n  h+='<div class=\"texto\">';\n  for(var i=0;i<parrafos.length;i++) h+='<p>'+esc(parrafos[i])+'<\/p>';\n  h+='<\/div><span class=\"palabra\">Palabra del Se\u00f1or<\/span>';\n  return h;\n}\n\nfunction rCard(id,tipo,ref,body,delay){\n  return '<div class=\"card\" id=\"card-'+id+'\" style=\"animation-delay:'+delay+'s\">'\n    +'<div class=\"card-hd\" onclick=\"lwT(\\''+id+'\\')\">'\n      +'<div class=\"card-hd-l\">'\n        +'<div class=\"dot\"><\/div>'\n        +'<div class=\"card-meta\">'\n          +'<span class=\"card-tipo\">'+tipo+'<\/span>'\n          +'<span class=\"card-ref\">'+esc(ref)+'<\/span>'\n        +'<\/div>'\n      +'<\/div>'\n      +'<div class=\"chev\" id=\"cv-'+id+'\">'\n        +'<svg viewBox=\"0 0 12 12\"><polyline points=\"2,4 6,8 10,4\"\/><\/svg>'\n      +'<\/div>'\n    +'<\/div>'\n    +'<div class=\"card-bd\" id=\"bd-'+id+'\">'\n      +'<div class=\"card-in\">'+body+'<\/div>'\n    +'<\/div>'\n  +'<\/div>';\n}\n\nfunction rAudio(tit,url){\n  var hayAudio=url&&url.trim();\n  return '<div class=\"audio\">'\n    +'<div class=\"audio-tag\">Homil\u00eda del d\u00eda<\/div>'\n    +'<div class=\"audio-tit\">'+esc(tit)+'<\/div>'\n    +(hayAudio\n      ?'<audio id=\"lw-a\" src=\"'+esc(url)+'\" preload=\"none\"><\/audio>'\n        +'<div class=\"a-ctrl\">'\n          +'<button class=\"a-play\" id=\"lw-pb\" onclick=\"lwPlay()\" aria-label=\"Reproducir\">'\n            +'<svg class=\"pi\" viewBox=\"0 0 12 14\"><polygon points=\"0,0 12,7 0,14\"\/><\/svg>'\n            +'<svg class=\"pa\" viewBox=\"0 0 12 14\"><rect x=\"0\" y=\"0\" width=\"4\" height=\"14\" rx=\"1\"\/><rect x=\"8\" y=\"0\" width=\"4\" height=\"14\" rx=\"1\"\/><\/svg>'\n          +'<\/button>'\n          +'<div class=\"a-prog\">'\n            +'<div class=\"a-bar\" id=\"lw-bg\" onclick=\"lwSeek(event)\">'\n              +'<div class=\"a-fill\" id=\"lw-pf\"><\/div>'\n            +'<\/div>'\n            +'<div class=\"a-times\"><span id=\"lw-tc\">0:00<\/span><span id=\"lw-tt\">\u2013:\u2013\u2013<\/span><\/div>'\n          +'<\/div>'\n        +'<\/div>'\n      :'<div class=\"a-none\">La homil\u00eda de hoy estar\u00e1 disponible pr\u00f3ximamente.<\/div>')\n  +'<\/div>';\n}\n\n\/\/ \u2500\u2500\u2500 Toggle acorde\u00f3n \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ scrollIntoView con scroll-margin-top definido en CSS es la forma m\u00e1s fiable\n\/\/ en m\u00f3viles para respetar el header fijo de Avada sin calcular offsets manualmente.\nwindow.lwT=function(id){\n  var bd=$id('bd-'+id), cv=$id('cv-'+id), card=$id('card-'+id);\n  var estaAbierto=bd.classList.contains('open');\n\n  \/\/ Cerrar todos \u2014 desactivamos la transici\u00f3n antes de cerrar para que\n  \/\/ el colapso sea instant\u00e1neo y no desplace el scroll mientras abrimos otra\n  document.querySelectorAll('#lw .card-bd.open').forEach(function(x){\n    x.style.transition='none';\n    x.classList.remove('open');\n    \/\/ Restaurar transici\u00f3n en el siguiente frame\n    requestAnimationFrame(function(){ x.style.transition=''; });\n  });\n  document.querySelectorAll('#lw .chev.open').forEach(function(x){x.classList.remove('open')});\n\n  if(!estaAbierto){\n    bd.classList.add('open');\n    cv.classList.add('open');\n    \/\/ Dos frames: primero el DOM colapsa la anterior, luego medimos posici\u00f3n\n    requestAnimationFrame(function(){\n      requestAnimationFrame(function(){\n        card.scrollIntoView({behavior:'smooth', block:'start'});\n      });\n    });\n  }\n};\n\n\/\/ \u2500\u2500\u2500 Audio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nwindow.lwPlay=function(){\n  var a=$id('lw-a'),b=$id('lw-pb');\n  if(!a) return;\n  if(a.paused){a.play();b.classList.add('playing')}\n  else{a.pause();b.classList.remove('playing')}\n};\nwindow.lwSeek=function(e){\n  var a=$id('lw-a');\n  if(!a||!isFinite(a.duration)) return;\n  var r=$id('lw-bg').getBoundingClientRect();\n  a.currentTime=((e.clientX-r.left)\/r.width)*a.duration;\n};\nfunction fmtT(s){if(!isFinite(s))return'\u2013:\u2013\u2013';var m=Math.floor(s\/60),x=Math.floor(s%60);return m+':'+(x<10?'0':'')+x}\nfunction setupAudio(){\n  var a=$id('lw-a');\n  if(!a) return;\n  a.addEventListener('timeupdate',function(){\n    var pf=$id('lw-pf'),tc=$id('lw-tc');\n    if(pf)pf.style.width=(a.duration?a.currentTime\/a.duration*100:0)+'%';\n    if(tc)tc.textContent=fmtT(a.currentTime);\n  });\n  a.addEventListener('loadedmetadata',function(){var tt=$id('lw-tt');if(tt)tt.textContent=fmtT(a.duration)});\n  a.addEventListener('ended',function(){\n    var b=$id('lw-pb'),pf=$id('lw-pf');\n    if(b)b.classList.remove('playing');\n    if(pf)pf.style.width='0%';\n  });\n}\n\n\/\/ \u2500\u2500\u2500 Render principal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction render(app,o,dia,homUrl,usarFiesta,errMsg){\n  var diaName=DIAS[o.dow].charAt(0).toUpperCase()+DIAS[o.dow].slice(1);\n  var audioTit='Homil\u00eda';\n  var mostrarFiesta=usarFiesta&&dia&&dia.tieneOpcional;\n\n  \/\/ Seleccionar lecturas activas\n  var dPl  = mostrarFiesta?dia.opt_pl  :(dia?dia.pl  :null);\n  var dSl  = mostrarFiesta?dia.opt_sl  :(dia?dia.sl  :null);\n  var dSl2 = mostrarFiesta?dia.opt_sl2 :(dia?dia.sl2 :null);\n  var dEv  = mostrarFiesta?dia.opt_ev  :(dia?dia.ev  :null);\n  var litStr= mostrarFiesta?(dia.opt_lit||dia.lit):(dia?dia.lit:'');\n\n  var html='';\n\n  \/\/ Cabecera\n  html+='<div class=\"h\">'\n    +'<div class=\"h-cruz\">\u2020 \u00a0 \u2020 \u00a0 \u2020<\/div>'\n    +'<div class=\"h-tag\">Lecturas lit\u00fargicas<\/div>'\n    +'<div class=\"h-fecha\">'+fmtFecha(o)+'<\/div>'\n    +(litStr?'<div class=\"h-lit\">'+esc(litStr)+'<\/div>':'')\n    +(mostrarFiesta?'<div><span class=\"h-fiesta-badge\">Lecturas de la Fiesta<\/span><\/div>':'')\n    +'<div class=\"h-sep\"><\/div>'\n  +'<\/div>';\n\n  if(errMsg||!dia){\n    html+='<div class=\"err\">No se pudieron cargar las lecturas de hoy.<br>'\n      +'<small style=\"font-size:10px;color:#ddd\">'+esc(errMsg||'D\u00eda no encontrado en el archivo')+'<\/small><\/div>';\n  } else {\n    var delay=.07;\n    html+=rCard('pl','Primera Lectura', dPl.ref, rLect(dPl.tit,dPl.ref,dPl.texto,'primera'), delay); delay+=.10;\n    html+=rCard('sl','Salmo Responsorial', dSl.ref, rSalmo(dSl), delay); delay+=.10;\n    if(dSl2&&dSl2.texto&&dSl2.texto.length){\n      html+=rCard('se','Segunda Lectura', dSl2.ref, rLect(dSl2.tit,dSl2.ref,dSl2.texto,'segunda'), delay); delay+=.10;\n    }\n    html+=rCard('ev','Evangelio', dEv.ref, rEvangelio(dEv.tit,dEv.ref,dEv.texto), delay);\n  }\n\n  html+=rAudio(audioTit,homUrl);\n  html+='<div class=\"footer\">Para la mayor gloria de Dios \u00a0\u00b7\u00a0 tiritaito.com \u00a0\u00b7\u00a0 '+o.y+'<\/div>';\n\n  app.innerHTML=html;\n  setupAudio();\n\n  \/\/ Abrir Primera Lectura al cargar (sin scroll autom\u00e1tico)\n  if(dia&&dPl&&dPl.texto&&dPl.texto.length){\n    var bd=$id('bd-pl'),cv=$id('cv-pl');\n    if(bd){bd.classList.add('open')}\n    if(cv){cv.classList.add('open')}\n  }\n}\n\n\/\/ \u2500\u2500\u2500 Init \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction init(){\n  var app=$id('lw');\n  var o=hoy();\n  var homUrl=HOMILIA||'';\n  var usarFiesta=(FIESTA[o.dow]||'').toLowerCase().trim()==='yes';\n\n  app.innerHTML='<div class=\"loading\"><div class=\"spin\"><\/div><p>Cargando lecturas\u2026<\/p><\/div>';\n\n  fetch(DOCX_URL,{cache:'no-store'})\n    .then(function(r){\n      if(!r.ok) throw new Error('HTTP '+r.status+'. Verifica la URL del DOCX en la Biblioteca de Medios.');\n      return r.arrayBuffer();\n    })\n    .then(function(buf){return JSZip.loadAsync(buf)})\n    .then(function(zip){\n      var f=zip.file('word\/document.xml');\n      if(!f) throw new Error('Formato incorrecto (falta document.xml).');\n      return f.async('string');\n    })\n    .then(function(xml){\n      var semana=parseSemana(parseXML(xml));\n      var dia=semana[o.dow]||null;\n      render(app,o,dia,homUrl,usarFiesta,\n        dia?null:'No hay lecturas para hoy en el archivo. Comprueba que el DOCX incluye el d\u00eda de hoy.');\n    })\n    .catch(function(e){\n      render(app,o,null,homUrl,false,e.message||String(e));\n    });\n}\n\n\/\/ Cargar JSZip de forma diferida y arrancar cuando est\u00e9 listo\nvar s=document.createElement('script');\ns.src='https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js';\ns.onload=init;\ns.onerror=function(){\n  var app=$id('lw');\n  var o=hoy();\n  render(app,o,null,'',false,'No se pudo cargar JSZip. Comprueba la conexi\u00f3n.');\n};\ndocument.head.appendChild(s);\n\n})();\n<\/script><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:272px;--awb-padding-top-small:121.99728399999998px;--awb-padding-bottom-small:0px;--awb-margin-bottom-small:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:375px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><header class=\"header\">\n  <div class=\"header-inner\">\n    <button class=\"menu-icon\" id=\"menu-btn\" aria-label=\"Men\u00fa\">\u2630<\/button>\n  <\/div>\n<\/header>\n\n<nav class=\"side-menu\" id=\"side-menu\">\n  <button class=\"close-btn\" id=\"close-btn\">\u00d7<\/button>\n  <ul>\n    <li><a href=\"https:\/\/www.tiritaito.com\/blog\/\">Inicio<\/a><\/li>\n    <li><a href=\"https:\/\/www.tiritaito.com\/blog\/seminarios-de-vida-en-el-espiritu\/\">Seminarios de vida en el Espiritu<\/a><\/li>\n    \n\n    <li class=\"has-submenu\">\n      <div class=\"menu-item\">\n        <span class=\"submenu-toggle\">Conecta cada d\u00eda<\/span>\n      <\/div>\n      <ul class=\"submenu\">\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/la-hora-de-la-brisa-2\/\">Hora de la Brisa<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/lenguas-de-cada-dia\/\">Lenguas<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/lenguas-hora-de-la-brisa-2\/\">Mensaje de la virgen para hoy<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/tiempos-liturgicos\/la-santa-misa\/\">La Misa<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/salmos\/salmo-de-cada-dia\/\">Salmo para hoy<\/a><\/li>\n      <\/ul>\n    <\/li>\n\n    <li class=\"has-submenu\">\n      <div class=\"menu-item\">\n        <span class=\"submenu-toggle\">Oraciones<\/span>\n      <\/div>\n      <ul class=\"submenu\">\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/adoracion\/adoraciones\/\">Adoraciones<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/rosario\/santo-rosario\/\">Rosario<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/novenas\/menu-novenas\/\">Novenas<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/oracion-en-lenguas\/lenguas\/\">Lenguas<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/via-crucis\/via-crucis\/\">Via Crucis<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/salmos\/salmos\/\">Salmos<\/a><\/li>\n      <\/ul>\n    <\/li>\n\n    <li><a href=\"https:\/\/www.tiritaito.com\/blog\/rosario\/el-rincon-de-nico\/\">El Rinc\u00f3n de Nico<\/a><\/li>\n    <li><a href=\"https:\/\/www.tiritaito.com\/blog\/ejercito-de-intercesores\/\">Ejercito de Intercesores<\/a><\/li>\n\n    <li class=\"has-submenu\">\n      <div class=\"menu-item\">\n        <span class=\"submenu-toggle\">Hombres de Dios<\/span>\n      <\/div>\n      <ul class=\"submenu\">\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/santa-teresita\/\">Santa Teresita<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/papa-francisco-2\/\">Papa Francisco<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/papa-leon-xiv\/\">Papa Leon XIV<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/san-juan-pablo-ii\/\">San Juan Pablo II<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/hombres-de-dios\/san-maximiliano-kolbe\/\">San Maximiliano kolbe<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/rosario\/ensenanzas-de-emiliano-tardif\/\">Padre Emiliano Tardif<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/hombres-de-dios\/ana-catalina-emmerick\/\">Beata Ana Catalina Emmerick<\/a><\/li>\n       <li><a href=\"https:\/\/www.tiritaito.com\/blog\/hombres-de-dios\/padre-pio\/\">Padre P\u00edo<\/a><\/li>\n      <\/ul>\n    <\/li>\n\n    <li class=\"has-submenu\">\n      <div class=\"menu-item\">\n        <span class=\"submenu-toggle\">Biblioteca<\/span>\n      <\/div>\n      <ul class=\"submenu\">\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/libros\/\">Libros<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/peliculas-2\/\">Pel\u00edculas<\/a><\/li>\n        <li><a href=\"https:\/\/www.tiritaito.com\/blog\/biblia\/charlas-biblia\/\">Charlas Biblia<\/a><\/li>\n      <\/ul>\n    <\/li>\n\n    <li><a href=\"https:\/\/www.tiritaito.com\/blog\/tiritaito-music\/tiritaito-music\/\">Tiritaito Music<\/a><\/li>\n  <\/ul>\n<\/nav>\n\n<style>\nbody {\n  margin: 0;\n  font-family: \"Aptos\", system-ui, sans-serif;\n  color: #333;\n  overflow-x: hidden;\n}\n\n.header {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 80px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: transparent;\n  transition: all 0.5s ease;\n  z-index: 9999;\n  box-shadow: none;\n}\n\n.header.scrolled {\n  background-image: url(\"https:\/\/www.tiritaito.com\/blog\/wp-content\/uploads\/2025\/10\/mensajes-de-la-virgen-para-hoy-4_resultado-scaled-1-e1759744910966.webp\");\n  background-size: cover;\n  background-position: center;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n\n.header-inner {\n  width: 90%;\n  max-width: 1200px;\n  display: flex;\n  justify-content: space-between;\n}\n\n.menu-icon {\n  background: none;\n  border: none;\n  cursor: pointer;\n  font-size: 28px;\n  color: #5A4033;\n}\n\n.side-menu {\n  position: fixed;\n  top: 0;\n  left: -50%;\n  width: 50%;\n  height: 100vh;\n  background-color: #f9f9f9;\n  box-shadow: 4px 0 15px rgba(0,0,0,0.1);\n  z-index: 10000;\n  display: flex;\n  flex-direction: column;\n  padding: 2rem 1.5rem;\n  transition: left 0.9s ease;\n  overflow-y: auto;\n}\n\n.side-menu.active { left: 0; }\n\n.close-btn {\n  align-self: flex-end;\n  background: none;\n  border: none;\n  font-size: 28px;\n  color: #5A4033;\n  cursor: pointer;\n  margin-bottom: 1rem;\n}\n\n.side-menu ul { list-style: none; padding: 0; margin-top: 10px; }\n\n.side-menu ul li { margin-bottom: 10px; }\n\n.side-menu ul li a,\n.side-menu ul li span {\n  display: block;\n  padding: 10px 0;\n  font-size: 18px;\n  text-decoration: none;\n  color: #5A4033;\n}\n\n.side-menu ul li a:hover,\n.side-menu ul li span:hover { color: #9b6a58; }\n\n.has-submenu .menu-item {\n  cursor: pointer;\n}\n\n.submenu-toggle {\n  display: inline-flex;\n  justify-content: space-between;\n  align-items: center;\n  width: 100%;\n}\n\n.submenu-toggle::after {\n  content: \"\u25be\";\n  margin-left: 12px;\n  font-size: 18px;\n}\n\n.submenu {\n  max-height: 0;\n  overflow: hidden;\n  opacity: 0;\n  transition: max-height 0.4s ease, opacity 0.4s ease;\n  padding-left: 20px;\n  margin-left: 20px;\n}\n\n.has-submenu.open .submenu {\n  max-height: 500px;\n  opacity: 1;\n}\n\n@media (max-width: 768px) {\n  .side-menu { width: 70%; left: -70%; }\n  .side-menu.active { left: 0; }\n  .menu-icon { font-size: 26px; }\n}\n<\/style>\n\n<script>\nwindow.addEventListener('scroll', () => {\n  const header = document.querySelector('.header');\n  header.classList.toggle('scrolled', window.scrollY > 80);\n});\n\nconst menuBtn = document.getElementById('menu-btn');\nconst closeBtn = document.getElementById('close-btn');\nconst sideMenu = document.getElementById('side-menu');\n\nmenuBtn.addEventListener('click', () => {\n  sideMenu.classList.add('active');\n  document.body.style.overflow = 'hidden';\n});\n\ncloseBtn.addEventListener('click', () => {\n  sideMenu.classList.remove('active');\n  document.body.style.overflow = '';\n});\n\ndocument.addEventListener('click', (e) => {\n  const isOutside = !sideMenu.contains(e.target) && !menuBtn.contains(e.target);\n  const isMenuActive = sideMenu.classList.contains('active');\n\n  if (isMenuActive && isOutside) {\n    let el = e.target;\n    while (el && el !== document) {\n      if (el.tagName === 'A') {\n        e.preventDefault();\n        break;\n      }\n      el = el.parentNode;\n    }\n    sideMenu.classList.remove('active');\n    document.body.style.overflow = '';\n  }\n});\n\ndocument.querySelectorAll('.submenu-toggle').forEach(toggle => {\n  toggle.addEventListener('click', e => {\n    const parent = toggle.closest('.has-submenu');\n    const allSubmenus = document.querySelectorAll('.has-submenu');\n\n    allSubmenus.forEach(item => {\n      if (item !== parent) {\n        item.classList.remove('open');\n      }\n    });\n\n    parent.classList.toggle('open');\n  });\n});\n<\/script><\/div><\/div><\/div><\/div>\n<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[93],"tags":[],"class_list":["post-17355","post","type-post","status-publish","format-standard","hentry","category-tiempos-liturgicos"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/posts\/17355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/comments?post=17355"}],"version-history":[{"count":24,"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/posts\/17355\/revisions"}],"predecessor-version":[{"id":17547,"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/posts\/17355\/revisions\/17547"}],"wp:attachment":[{"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/media?parent=17355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/categories?post=17355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiritaito.com\/blog\/wp-json\/wp\/v2\/tags?post=17355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}