{
  "id": "ahv-page-about-us-desktop",
  "file": "AHV Page About Us Desktop.dc.html",
  "sourceSha256": "5de545568d2b9226b9d2589b539fc31e4116696ece74f4ce99c8b83525a2cc7b",
  "variant": "desktop",
  "template": "\n<helmet>\n<link href=\"/ahv/fonts/ahv-33eeac48ab44.css\" rel=\"stylesheet\">\n\n<style>\nbody{margin:0;background:#F7F4EA;color:#2A2118;font-family:'Mulish',sans-serif;font-size:18px;line-height:1.7}\na{color:#006038;text-decoration:none}a:hover{color:#004226;text-decoration:underline}\n:focus-visible{outline:3px solid #6B7726;outline-offset:2px;box-shadow:0 0 0 6px rgba(247,244,234,.85)}\na:active,button:active{filter:brightness(.88)}\nbutton{font-family:inherit;cursor:pointer}\nh1,h2,h3,h4{font-weight:400;margin:0}\n@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}\n@media (prefers-reduced-motion:reduce){*{transition:none !important;animation:none !important}}\n</style>\n<title>Kairali - The Ayurvedic Healing Village</title>\n<meta name=\"description\" content=\"Sobre Kairali – The Ayurvedic Healing Village: hospital ayurvédico acreditado NABH en Palakkad, Kerala, con programas de tratamiento dirigidos por médicos.\">\n<link rel=\"canonical\" href=\"https://ayurvedichealingvillage.com/es/about-us/\">\n<meta name=\"robots\" content=\"noindex, nofollow\">\n<meta property=\"og:locale\" content=\"es_ES\">\n<meta property=\"og:type\" content=\"article\">\n<meta property=\"og:title\" content=\"Sobre nosotros\">\n<meta property=\"og:description\" content=\"Sobre Kairali – The Ayurvedic Healing Village: hospital ayurvédico acreditado NABH en Palakkad, Kerala, con programas de tratamiento dirigidos por médicos.\">\n<meta property=\"og:url\" content=\"https://ayurvedichealingvillage.com/es/about-us/\">\n<meta property=\"og:image\" content=\"https://ayurvedichealingvillage.com/wp-content/uploads/2023/11/our-story.png\">\n<meta property=\"og:image:width\" content=\"1440\">\n<meta property=\"og:image:height\" content=\"524\">\n<meta property=\"og:image:type\" content=\"image/png\">\n<meta property=\"og:site_name\" content=\"Ayurvedic Healing Village\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<link rel=\"icon\" href=\"/ahv/assets/img/logo_color-da22eb.svg\" sizes=\"192x192\">\n<script type=\"application/ld+json\">\n{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https://ayurvedichealingvillage.com/es/about-us/\",\"url\":\"https://ayurvedichealingvillage.com/es/about-us/\",\"name\":\"Kairali - The Ayurvedic Healing Village\",\"description\":\"Sobre Kairali – The Ayurvedic Healing Village: hospital ayurvédico acreditado NABH en Palakkad, Kerala, con programas de tratamiento dirigidos por médicos.\",\"isPartOf\":{\"@id\":\"https://ayurvedichealingvillage.com/es/#website\"},\"inLanguage\":\"es\",\"breadcrumb\":{\"@id\":\"https://ayurvedichealingvillage.com/es/about-us/#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ayurvedichealingvillage.com/es/about-us/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https://ayurvedichealingvillage.com/es/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sobre nosotros\",\"item\":\"https://ayurvedichealingvillage.com/es/about-us/\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://ayurvedichealingvillage.com/es/#website\",\"url\":\"https://ayurvedichealingvillage.com/es/\",\"name\":\"Kairali — The Ayurvedic Healing Village\",\"inLanguage\":\"es\"}]}\n</script>\n</helmet>\n<div data-screen-label=\"About Us — Desktop\">\n<a href=\"#main-content\" style=\"position:fixed;left:-9999px;top:12px;z-index:120;background:#5A4420;color:#F7F4EA;padding:14px 24px;border-radius:4px;font-weight:700;font-size:15px\" style-focus=\"left:16px\">Saltar al contenido principal</a>\n<dc-import name=\"AHV Chrome Header\" hint-size=\"100%,72px\"></dc-import>\n<main id=\"main-content\">\n<section style=\"width:min(1220px,94%);margin:0 auto;padding:32px 0 28px\">\n  <nav aria-label=\"Ruta de navegación\" style=\"font-size:15px;color:#75695A;display:flex;flex-wrap:wrap;gap:0 8px;align-items:center;line-height:1.4\"><a href=\"https://ayurvedichealingvillage.com/es/\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;min-height:44px;min-width:44px\">Inicio</a><span aria-hidden=\"true\">/</span><span aria-current=\"page\" style=\"color:#2A2118;display:inline-flex;align-items:center;min-height:44px\">Sobre nosotros</span></nav>\n  <div style=\"padding-top:6px\">\n    <div style=\"font-weight:700;font-size:12.5px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase\">Kairali — The Ayurvedic Healing Village · Desde 1908</div>\n    <h1 id=\"page-h1\" style=\"font-family:'Marcellus',serif;font-size:clamp(36px,4vw,56px);line-height:1.1;margin:12px 0 0;max-width:20ch;text-wrap:balance\">Sobre nosotros</h1>\n  </div>\n</section>\n<div style=\"width:min(1220px,94%);margin:0 auto\">\n  <img src=\"/ahv/assets/img/AHV-About-Landscape.webp\" alt=\"Vista aérea de arrozales y cocoteros en la campiña de Kerala que rodea el hospital\" width=\"1440\" height=\"524\" style=\"width:100%;max-width:1440px;height:auto;display:block;border-radius:4px\">\n</div>\n\n<article aria-labelledby=\"page-h1\" style=\"width:min(1220px,94%);margin:0 auto;padding:48px 0 0\">\n  <blockquote data-pos=\"/3\" style=\"margin:0 auto;max-width:36ch;text-align:center;font-family:'Marcellus',serif;font-size:clamp(24px,2.2vw,32px);line-height:1.35;color:#2A2118;text-wrap:balance;display:flex;flex-direction:column;align-items:center;gap:16px\">\n    <img src=\"/ahv/assets/img/AHV-About-lotus.svg\" alt=\"\" width=\"95\" height=\"57\" style=\"width:64px;height:auto;display:block\">\n    <p style=\"margin:0\"><strong style=\"font-weight:inherit\">{{ quoteText }}</strong></p>\n  </blockquote>\n\n  <section id=\"introduction\" aria-labelledby=\"intro-h\" style=\"display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:32px 64px;align-items:start;padding:64px 0 0\">\n    <div style=\"min-width:0\">\n      <p data-pos=\"h6\" style=\"margin:0 0 8px;font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase\">{{ intro.eyebrow }}</p>\n      <h2 id=\"intro-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.16;margin:0 0 20px;text-wrap:balance\">{{ intro.heading }}</h2>\n      <p style=\"margin:0;font-size:17.5px;line-height:1.7;text-wrap:pretty;max-width:66ch\">{{ intro.paragraph }}</p>\n      <a href=\"{{ intro.linkHref }}\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;margin-top:16px;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>{{ intro.linkText }}</a>\n    </div>\n    <figure data-ahv-banner=\"about-wellness\" style=\"margin:0;justify-self:end;width:100%;max-width:448px;position:relative;aspect-ratio:448/455;border-radius:4px;overflow:hidden;background:#E0D7C4\"><img src=\"/ahv/assets/img/gallery/a5340555d384edc72099bc9f721bde48ec6e61c57202a233cb9c498d9680b505.webp\" alt=\"Sendero de piedra que serpentea entre jardines hasta un edificio con tejado de tejas rodeado de palmeras\" loading=\"lazy\" style=\"position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block\"><figcaption style=\"position:absolute;left:8%;right:8%;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.93);border:1px solid rgba(233,226,211,.9);border-radius:4px;padding:26px 22px;text-align:center;box-sizing:border-box\"><img src=\"/ahv/assets/img/kairali-colorful-logo.webp\" alt=\"Kairali – The Ayurvedic Healing Village\" width=\"150\" height=\"35\" loading=\"lazy\" style=\"width:150px;height:auto;display:block;margin:0 auto 14px\"><strong style=\"display:block;font-family:'Marcellus',serif;font-weight:400;font-size:24px;line-height:1.2;color:#2A2118;text-wrap:balance\">El mejor retiro ayurvédico de Asia desde 1999</strong><span style=\"display:block;margin-top:12px;font-size:15.5px;line-height:1.6;color:#514A3F\">Kairali-The Ayurvedic Healing Village, en Palakkad (Kerala), es un espacio holístico único en su género que ofrece terapias ayurvédicas tradicionales y auténticas.</span></figcaption></figure>\n  </section>\n\n  <section id=\"founder\" aria-labelledby=\"founder-h\" style=\"display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:32px 64px;align-items:start;padding:64px 0 0;margin-top:64px;border-top:1px solid #E0D7C4\">\n    <figure style=\"margin:0;width:100%;max-width:520px\">\n      <img src=\"/ahv/assets/img/team-gita1.webp\" alt=\"Gita Ramesh sentada en los jardines de Kairali\" width=\"482\" height=\"618\" loading=\"lazy\" style=\"width:100%;height:auto;display:block;border-radius:4px\">\n      <figcaption style=\"padding-top:14px\">\n        <h3 style=\"font-family:'Marcellus',serif;font-size:22px;line-height:1.25;margin:0 0 2px\">{{ founder.name }}</h3>\n        <p data-pos=\"h4\" style=\"margin:0;font-weight:700;font-size:15.5px;color:#8F6212;line-height:1.5\">{{ founder.role }}</p>\n      </figcaption>\n    </figure>\n    <div style=\"min-width:0\">\n      <p data-pos=\"h6\" style=\"margin:0 0 8px;font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase\">{{ founder.eyebrow }}</p>\n      <h2 id=\"founder-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.16;margin:0 0 20px;text-wrap:balance\">{{ founder.heading }}</h2>\n      <p style=\"margin:0 0 16px;font-size:clamp(19px,1.5vw,22px);line-height:1.65;color:#2A2118;border-left:3px solid #C1882C;padding-left:20px;max-width:34ch;text-wrap:pretty\">{{ founder.lead }}</p>\n      <p style=\"margin:0;font-size:17.5px;line-height:1.7;text-wrap:pretty;max-width:66ch\">{{ founder.paragraph }}</p>\n      <a href=\"{{ founder.linkHref }}\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;margin-top:16px;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>{{ founder.linkText }}</a>\n    </div>\n  </section>\n\n  <section id=\"founders-letter\" aria-labelledby=\"founders-letter-heading\" style=\"padding:48px 0;margin-top:48px;border-top:1px solid #E0D7C4\"><div style=\"max-width:72ch;margin:0 auto\"><h2 id=\"founders-letter-heading\" style=\"font-family:Marcellus,serif;font-size:clamp(28px,3vw,38px);line-height:1.25;margin:0 0 28px\">Una carta de K.V. Ramesh</h2><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\"><strong>Estimados amigos: </strong></p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Reciba un cordial saludo desde Kairali – The Ayurvedic Healing Village, un refugio donde el conocimiento atemporal del Ayurveda se combina con las necesidades de la vida contemporánea. Es para mí un gran placer compartir con usted los valores fundamentales de Kairali: el compromiso con el bienestar integral, la auténtica terapia ayurvédica y el progreso de la humanidad.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Mi visión para Kairali Ayurvedic Group siempre se ha basado firmemente en la ciencia milenaria del Ayurveda, que considero el mejor camino hacia la armonía y la salud. Al crecer en un hogar impregnado de las costumbres ayurvédicas, he visto personalmente la profunda influencia que tiene en la vida de las personas. Esto me motivó a dedicar mi vida a proteger este valioso legado y darlo a conocer al mundo. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">La autenticidad y la excelencia siempre han sido los pilares de Kairali. Esta idea se refleja en Kairali – The Ayurvedic Healing Village. Desde las terapias y los tratamientos hasta el entorno tranquilo y respetuoso con el medio ambiente, cada elemento de este centro se ha concebido para ofrecer una experiencia ayurvédica plenamente inmersiva. Aquí creamos un santuario donde los visitantes pueden encontrar tranquilidad, renovación y equilibrio, al unir las costumbres tradicionales con los estándares contemporáneos de hospitalidad.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Nuestro objetivo va más allá de ofrecer atención ayurvédica: se trata de fomentar un modo de vida que valore el bienestar mental, espiritual y físico. Aspiramos a que nuestros pacientes puedan llevar una vida mejor y más plena gracias a nuestras terapias personalizadas, dietas terapéuticas, clases de yoga y técnicas de meditación. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Aunque con los años Kairali Ayurvedic Group se ha convertido en una marca reconocida en todo el mundo, nuestros principios no han cambiado. Estamos aquí como custodios del Ayurveda, para ofrecer sus beneficios terapéuticos a quienes los buscan, manteniendo la integridad que nos ha dado nuestra reputación como referente en salud integral.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">A todas las personas que visitan Kairali – The Ayurvedic Healing Village, les expreso mi más sincero agradecimiento. Su confianza en el Ayurveda y en Kairali nos motiva a innovar y mejorar continuamente. Le invito a iniciar este proceso transformador de autoconocimiento, sanación y regeneración, guiado por los principios atemporales del Ayurveda. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Juntos, construyamos un mundo más sano y feliz.<br><br>Atentamente,<br><strong>K.V. Ramesh<br></strong>Director General, Kairali Ayurvedic Group</p></div></section>\n<section id=\"leadership\" aria-labelledby=\"leadership-h\" style=\"padding:64px 0 0;margin-top:64px;border-top:1px solid #E0D7C4\">\n    <p style=\"margin:0 0 8px;font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase\">{{ leadership.eyebrow }}</p>\n    <h2 id=\"leadership-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.16;margin:0 0 12px;text-wrap:balance\">{{ leadership.heading }}</h2>\n    <ul style=\"list-style:none;margin:0;padding:0;display:flex;flex-direction:column\">\n      <sc-for list=\"{{ directors }}\" as=\"d\" hint-placeholder-count=\"4\">\n        <li id=\"{{ d.id }}\" data-profile=\"director\" style=\"display:grid;grid-template-columns:200px minmax(0,1fr);gap:16px 40px;align-items:start;padding:36px 0;border-top:1px solid #E0D7C4\">\n          <img src=\"{{ d.portrait.src }}\" alt=\"{{ d.portrait.alt }}\" width=\"{{ d.portrait.width }}\" height=\"{{ d.portrait.height }}\" loading=\"lazy\" style=\"width:100%;max-width:200px;height:auto;display:block;border-radius:4px\">\n          <div style=\"min-width:0;max-width:70ch\">\n            <h3 style=\"font-family:'Marcellus',serif;font-size:26px;line-height:1.25;margin:0 0 4px\">{{ d.name }}</h3>\n            <p data-pos=\"h4\" style=\"margin:0 0 14px;font-weight:700;font-size:15.5px;color:#8F6212;line-height:1.5\">{{ d.role }}</p>\n            <p style=\"margin:0;font-size:17.5px;line-height:1.7;text-wrap:pretty\">{{ d.paragraph }}</p>\n            <sc-if value=\"{{ d.hasLinkedin }}\" hint-placeholder-val=\"{{ false }}\"><a href=\"{{ d.linkedinHref }}\" target=\"_blank\" rel=\"noopener\" aria-label=\"{{ d.linkedinLabel }}\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;margin-top:10px;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>LinkedIn</a></sc-if>\n          </div>\n        </li>\n      </sc-for>\n    </ul>\n  </section>\n\n  <section id=\"awards\" aria-labelledby=\"awards-h\" style=\"display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:32px 64px;align-items:start;padding:64px 0 0;margin-top:28px;border-top:1px solid #E0D7C4\">\n    <figure style=\"margin:0;width:100%;max-width:520px\"><img src=\"/ahv/assets/img/AHV-About-698image.webp\" alt=\"Un hombre con esmoquin recibe un trofeo de oro en los Spa Awards, est. 2006\" width=\"698\" height=\"642\" loading=\"lazy\" style=\"width:100%;height:auto;display:block;border-radius:4px\"></figure>\n    <div style=\"min-width:0\">\n      <p data-pos=\"h6\" style=\"margin:0 0 8px;font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase\">{{ awards.eyebrow }}</p>\n      <h2 id=\"awards-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.16;margin:0 0 16px;text-wrap:balance\">{{ awards.heading }}</h2>\n      <h3 style=\"font-family:'Marcellus',serif;font-size:clamp(20px,1.6vw,24px);line-height:1.4;margin:0 0 16px;color:#5A4420;text-wrap:balance\">{{ awards.lead }}</h3>\n      <p style=\"margin:0;font-size:17.5px;line-height:1.7;text-wrap:pretty;max-width:66ch\">{{ awards.paragraph }}</p>\n      <a href=\"{{ awards.linkHref }}\" target=\"_blank\" rel=\"noopener\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;margin-top:16px;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>{{ awards.linkText }}</a>\n    </div>\n  </section>\n\n  <section id=\"certificates\" aria-labelledby=\"certificates-h\" style=\"padding:64px 0 72px;margin-top:64px;border-top:1px solid #E0D7C4\">\n    <p style=\"margin:0 0 8px;font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase;text-align:center\">{{ certificates.eyebrow }}</p>\n    <h2 id=\"certificates-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.16;margin:0 0 32px;text-align:center;text-wrap:balance\">{{ certificates.heading }}</h2>\n    <ul style=\"list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(220px,100%),1fr));gap:28px 24px\">\n      <sc-for list=\"{{ documents }}\" as=\"c\" hint-placeholder-count=\"7\">\n        <li style=\"background:#fff;border:1px solid #E9E2D3;border-radius:4px;overflow:hidden;min-width:0\">\n          <button type=\"button\" data-doc-index=\"{{ c.i }}\" onClick=\"{{ c.open }}\" style=\"display:flex;flex-direction:column;width:100%;padding:0;border:0;background:#fff;color:#2A2118;text-align:left\" style-hover=\"color:#006038\">\n            <img src=\"{{ c.src }}\" alt=\"{{ c.label }}\" width=\"{{ c.width }}\" height=\"{{ c.height }}\" loading=\"lazy\" style=\"width:100%;height:auto;display:block;border-bottom:1px solid #E9E2D3\">\n            <span style=\"display:flex;flex-direction:column;gap:4px;padding:14px 16px 16px;min-height:44px;box-sizing:border-box\"><span style=\"font-weight:700;font-size:15.5px;line-height:1.4\">{{ c.label }}</span><span style=\"font-size:14px;line-height:1.45;color:#514A3F\">{{ c.note }}</span><span style=\"display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:12.5px;letter-spacing:2px;text-transform:uppercase;color:#006038\">Ver documento<span aria-hidden=\"true\" style=\"color:#C1882C\">→</span></span></span>\n          </button>\n        </li>\n      </sc-for>\n    </ul>\n  </section>\n</article>\n</main>\n<dc-import name=\"AHV Chrome Footer\" hint-size=\"100%,560px\"></dc-import>\n\n<div id=\"doc-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"doc-dialog-title\" onKeyDown=\"{{ dlgKey }}\" style=\"display:{{ dlgDisplay }};position:fixed;inset:0;z-index:200;background:rgba(26,20,12,.94);flex-direction:column;align-items:center;justify-content:center;padding:24px;box-sizing:border-box\">\n  <div style=\"width:100%;max-width:1280px;display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;color:#F7F4EA\">\n    <div style=\"display:flex;flex-direction:column;gap:2px;min-height:44px;justify-content:center\"><span aria-live=\"polite\" style=\"font-weight:700;font-size:13px;letter-spacing:2px;text-transform:uppercase;color:#E9E2D3\">{{ counter }}</span><span id=\"doc-dialog-title\" style=\"font-family:'Marcellus',serif;font-size:22px;line-height:1.25\">{{ curLabel }}</span></div>\n    <div style=\"display:flex;gap:12px;flex-wrap:wrap\">\n      <button type=\"button\" id=\"doc-zoom\" aria-pressed=\"{{ zoomPressed }}\" onClick=\"{{ toggleZoom }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 20px;border:1px solid rgba(247,244,234,.5);border-radius:4px;background:transparent;color:#F7F4EA;font-weight:700;font-size:13.5px;letter-spacing:2px;text-transform:uppercase\" style-hover=\"background:rgba(247,244,234,.12)\">{{ zoomLabel }}</button>\n      <button type=\"button\" id=\"doc-close\" onClick=\"{{ close }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 20px;border:1px solid rgba(247,244,234,.5);border-radius:4px;background:transparent;color:#F7F4EA;font-weight:700;font-size:13.5px;letter-spacing:2px;text-transform:uppercase\" style-hover=\"background:rgba(247,244,234,.12)\">Cerrar documento<span aria-hidden=\"true\">✕</span></button>\n    </div>\n  </div>\n  <div id=\"doc-stage\" tabindex=\"0\" aria-label=\"Imagen del documento. Desplácese o arrastre para explorar a tamaño real\" onPointerDown=\"{{ panStart }}\" onPointerMove=\"{{ panMove }}\" onPointerUp=\"{{ panEnd }}\" onPointerCancel=\"{{ panEnd }}\" style=\"width:100%;max-width:1280px;flex:1 1 auto;min-height:0;margin:20px 0;display:flex;justify-content:flex-start;align-items:flex-start;overflow:auto;touch-action:pan-x pan-y pinch-zoom;overscroll-behavior:contain;border-radius:4px\">{{ viewerImg }}</div>\n  <div style=\"width:100%;max-width:1280px;display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap\">\n    <button type=\"button\" id=\"doc-prev\" onClick=\"{{ prev }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 22px;border:1px solid rgba(247,244,234,.5);border-radius:4px;background:transparent;color:#F7F4EA;font-weight:700;font-size:13.5px;letter-spacing:2px;text-transform:uppercase\" style-hover=\"background:rgba(247,244,234,.12)\"><span aria-hidden=\"true\">←</span>Documento anterior</button>\n    <button type=\"button\" id=\"doc-next\" onClick=\"{{ next }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 22px;border:1px solid #EEB41E;border-radius:4px;background:#EEB41E;color:#2A2118;font-weight:700;font-size:13.5px;letter-spacing:2px;text-transform:uppercase\" style-hover=\"filter:brightness(.94)\">Documento siguiente<span aria-hidden=\"true\">→</span></button>\n  </div>\n</div>\n</div>\n",
  "logic": "\n\nfunction ahvDocNote(c) {\n  const e = c.printedEvidence || {};\n  const parts = [];\n  if (e.number) parts.push(\"N.º \" + e.number);\n  if (e.order) parts.push(\"Orden \" + e.order);\n  if (e.printedValidFrom && e.printedValidThrough) parts.push(\"Válido \" + e.printedValidFrom + \" hasta \" + e.printedValidThrough);\n  else if (e.printedIssueDate && e.printedValidThrough) parts.push(\"Emitido \" + e.printedIssueDate + \", válido hasta \" + e.printedValidThrough);\n  else if (e.printedValidThrough) parts.push(\"Válido hasta \" + e.printedValidThrough);\n  else if (e.printedDate && e.printedPeriod) parts.push(\"Fechado el \" + e.printedDate + \", \" + e.printedPeriod);\n  else if (e.issued) parts.push(\"Emitido \" + e.issued.replace(/(\\d)(\\D)/, \"$1 $2\"));\n  return parts.join(\" · \");\n}\n\nclass Component extends DCLogic {\n  state = { open: false, i: 0, zoom: false };\n  componentDidMount() { document.documentElement.lang = 'es'; if (this.state.open) this.acquireLock(); }\n  componentWillUnmount() { this._gone = true; this.releaseLock(); }\n  // OWNER-REG-07 (iOS: closing the certificate viewer left scrolling stuck). One paired, idempotent lock: acquire saves\n  // the exact prior inline overflow (value + priority) and the settled scroll position; release (close, Escape, unmount)\n  // puts back only a lock this instance still holds, then the position. Pending focus timers are cancelled and a late\n  // callback never focuses into a closed or unmounted viewer; focus never scrolls the page.\n  acquireLock() {\n    if (this._lock) return;\n    const s = document.body.style;\n    this._lock = { x: window.scrollX, y: window.scrollY, saved: ['overflow-x', 'overflow-y'].map((k) => [k, s.getPropertyValue(k), s.getPropertyPriority(k)]) };\n    s.setProperty('overflow', 'hidden');\n    // Escape also closes when a tap left focus on <body> (Safari does not focus tapped buttons, so the dialog's own\n    // onKeyDown never sees the key); the dialog's handler runs first and prevents the default, so this never doubles\n    this._onEsc = (e) => { if (e.key === 'Escape' && !e.defaultPrevented) this.closeViewer(); };\n    document.addEventListener('keydown', this._onEsc);\n  }\n  releaseLock() {\n    this.cancelFocus();\n    if (this._onEsc) { document.removeEventListener('keydown', this._onEsc); this._onEsc = null; }\n    const l = this._lock;\n    if (!l) return;\n    this._lock = null;\n    const s = document.body.style;\n    // only a lock this instance still holds: another owner's later value is left alone\n    if (l.saved.every(([k]) => s.getPropertyValue(k) === 'hidden' && !s.getPropertyPriority(k))) for (const [k, v, p] of l.saved) { if (v) s.setProperty(k, v, p); else s.removeProperty(k); }\n    if (window.scrollX !== l.x || window.scrollY !== l.y) window.scrollTo({ left: l.x, top: l.y, behavior: 'instant' });\n  }\n  cancelFocus() { if (this._focusTimer) { clearTimeout(this._focusTimer); this._focusTimer = null; } }\n  focusLater(find, whenOpen) {\n    this.cancelFocus();\n    this._focusTimer = setTimeout(() => { this._focusTimer = null; if (this._gone || this.state.open !== whenOpen) return; const el = find(); if (el) el.focus({ preventScroll: true }); }, 30);\n  }\n  openAt(idx) {\n    this._opener = idx;\n    // Settle any in-flight smooth scroll (focus() from page top) instantly at the trigger before locking the page,\n    // so the document position under the fixed overlay is stable (reproduced race, notes/about-us-page.md).\n    const btn = document.querySelector('button[data-doc-index=\"' + idx + '\"]');\n    if (btn) { const r = btn.getBoundingClientRect(); if (r.top < 0 || r.bottom > window.innerHeight) window.scrollTo({ top: window.scrollY + r.top - Math.max(0, (window.innerHeight - r.height) / 2), behavior: 'instant' }); else window.scrollTo({ top: window.scrollY, behavior: 'instant' }); }\n    this.setState({ open: true, i: idx, zoom: false });\n    this.acquireLock();\n    this.focusLater(() => document.getElementById('doc-close'), true);\n  }\n  closeViewer() {\n    if (!this.state.open && !this._lock) return;\n    const idx = this._opener != null ? this._opener : this.state.i; // focus returns to the trigger that opened the viewer\n    this.setState({ open: false, zoom: false });\n    this.releaseLock();\n    this.focusLater(() => document.querySelector('button[data-doc-index=\"' + idx + '\"]'), false);\n  }\n  // AHV viewer pan repair 20260929\n  panStart(e) {\n    if (!this.state.zoom || e.pointerType !== 'mouse' || e.button !== 0) return;\n    e.preventDefault();\n    const el = e.currentTarget;\n    this._pan = { x: e.clientX, y: e.clientY, left: el.scrollLeft, top: el.scrollTop };\n    el.setPointerCapture(e.pointerId);\n  }\n  panMove(e) {\n    if (!this._pan) return;\n    e.currentTarget.scrollLeft = this._pan.left + this._pan.x - e.clientX;\n    e.currentTarget.scrollTop = this._pan.top + this._pan.y - e.clientY;\n  }\n  panEnd() { this._pan = null; }\n  renderVals() {\n    const D = window.AHV_ABOUT;\n    const A = 'https://ayurvedichealingvillage.com';\n    const guard = () => {}; /* preview-only nav guard neutralised for the published site */\n    if (!D) return { guard, quoteText: '', intro: {}, founder: {}, leadership: {}, directors: [], awards: {}, certificates: {}, documents: [], dlgDisplay: 'none', viewerImg: null, counter: '', curLabel: '', zoomLabel: 'Tamaño real', zoomPressed: 'false' };\n    const docs = D.certificates.documents, n = docs.length, i = this.state.i, cur = docs[i] || docs[0];\n    const go = (d) => this.setState(s => ({ i: (s.i + d + n) % n, zoom: false }));\n    const zoom = this.state.zoom;\n    // Viewer image built here so no placeholder request fires at parse time (Gallery limitation avoided) and state survives re-render.\n    const viewerImg = this.state.open ? React.createElement('img', { id: 'doc-expanded', key: cur.src + (zoom ? 'z' : 'f'), src: cur.src, alt: cur.label, width: cur.width, height: cur.height,\n      style: zoom ? { display: 'block', width: cur.width + 'px', flexShrink: 0, margin: '0 auto', maxWidth: 'none', height: 'auto', background: '#000' } : { display: 'block', margin: '0 auto', flexShrink: 0, width: 'auto', height: 'auto', maxWidth: '100%', maxHeight: 'calc(100vh - 240px)', objectFit: 'contain', background: '#000' } }) : null;\n    return {\n      guard, quoteText: D.quote.text,\n      intro: { eyebrow: D.intro.eyebrow, heading: D.intro.heading, paragraph: D.intro.paragraph, linkText: D.intro.link.text, linkHref: A + D.intro.link.href },\n      founder: { eyebrow: D.founder.eyebrow, heading: D.founder.heading, lead: D.founder.lead, paragraph: D.founder.paragraph, linkText: D.founder.link.text, linkHref: A + D.founder.link.href, name: D.founder.name, role: D.founder.role },\n      leadership: { eyebrow: D.leadership.eyebrow, heading: D.leadership.heading },\n      directors: D.leadership.directors.map(d => ({ id: d.id, name: d.name, role: d.role, paragraph: d.paragraph, portrait: d.portrait, hasLinkedin: !!d.linkedin, linkedinHref: d.linkedin ? d.linkedin.href : '', linkedinLabel: d.linkedin ? d.linkedin.label : '' })),\n      awards: { eyebrow: D.awards.eyebrow, heading: D.awards.heading, lead: D.awards.lead, paragraph: D.awards.paragraph, linkText: D.awards.link.text, linkHref: A + D.awards.link.href },\n      certificates: { eyebrow: D.certificates.eyebrow, heading: D.certificates.heading },\n      documents: docs.map((c, idx) => ({ i: idx, src: c.src, label: c.label, note: ahvDocNote(c), width: c.width, height: c.height, open: () => this.openAt(idx) })),\n      dlgDisplay: this.state.open ? 'flex' : 'none', viewerImg, counter: n ? 'Documento ' + (i + 1) + ' de ' + n : '', curLabel: cur ? cur.label : '',\n      zoomLabel: zoom ? 'Ajustar a la pantalla' : 'Tamaño real', zoomPressed: zoom ? 'true' : 'false', toggleZoom: () => this.setState(s => ({ zoom: !s.zoom })),\n      panStart: (e) => this.panStart(e), panMove: (e) => this.panMove(e), panEnd: () => this.panEnd(), close: () => this.closeViewer(), prev: () => go(-1), next: () => go(1),\n      dlgKey: (e) => {\n        if (e.key === 'Escape') { e.preventDefault(); this.closeViewer(); return; }\n        if (this.state.zoom && ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Inicio', 'End'].includes(e.key)) return;\n        if (e.key === 'ArrowLeft') { e.preventDefault(); go(-1); return; }\n        if (e.key === 'ArrowRight') { e.preventDefault(); go(1); return; }\n        if (e.key === 'Tab') {\n          const f = [...e.currentTarget.querySelectorAll('button')];\n          const first = f[0], last = f[f.length - 1];\n          if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n          else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n        }\n      }\n    };\n  }\n}\n",
  "props": "",
  "scripts": [
    "/ahv/l10n/es/assets/about-us-data.js"
  ],
  "locale": "es"
}
