{"id":"ahv-page-about-us-mobile","file":"AHV Page About Us Mobile.dc.html","sourceSha256":"55585d519434dd6654ee2d956dd227abb1b36213b4ec58c337ab3680414e2bb3","variant":"mobile","template":"\n<helmet>\n<link href=\"/ahv/fonts/ahv-33eeac48ab44.css\" rel=\"stylesheet\">\n\n<style>\nbody{margin:0;background:#EFE9DA;color:#2A2118;font-family:'Mulish',sans-serif;font-size:17px;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=\"About Kairali – The Ayurvedic Healing Village: an NABH-accredited Ayurvedic hospital in Palakkad, Kerala, with physician-led treatment programmes.\">\n<link rel=\"canonical\" href=\"https://ayurvedichealingvillage.com/about-us/\">\n<meta name=\"robots\" content=\"noindex, nofollow\">\n<meta property=\"og:locale\" content=\"en_US\">\n<meta property=\"og:type\" content=\"article\">\n<meta property=\"og:title\" content=\"About Us\">\n<meta property=\"og:description\" content=\"About Kairali – The Ayurvedic Healing Village: an NABH-accredited Ayurvedic hospital in Palakkad, Kerala, with physician-led treatment programmes.\">\n<meta property=\"og:url\" content=\"https://ayurvedichealingvillage.com/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/about-us/\",\"url\":\"https://ayurvedichealingvillage.com/about-us/\",\"name\":\"Kairali - The Ayurvedic Healing Village\",\"description\":\"About Kairali – The Ayurvedic Healing Village: an NABH-accredited Ayurvedic hospital in Palakkad, Kerala, with physician-led treatment programmes.\",\"isPartOf\":{\"@id\":\"https://ayurvedichealingvillage.com/#website\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://ayurvedichealingvillage.com/about-us/#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ayurvedichealingvillage.com/about-us/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://ayurvedichealingvillage.com/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"About Us\",\"item\":\"https://ayurvedichealingvillage.com/about-us/\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://ayurvedichealingvillage.com/#website\",\"url\":\"https://ayurvedichealingvillage.com/\",\"name\":\"Kairali — The Ayurvedic Healing Village\",\"inLanguage\":\"en-US\"}]}\n</script>\n</helmet>\n<div data-screen-label=\"About Us — Mobile\" style=\"max-width:430px;margin:0 auto;background:#F7F4EA;box-shadow:0 0 40px rgba(70,50,20,.15);position:relative;box-sizing:border-box\">\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\">Skip to main content</a>\n<dc-import name=\"AHV Chrome Header\" narrow=\"true\" style=\"position:sticky;top:0;z-index:80\" hint-size=\"100%,64px\"></dc-import>\n<main id=\"main-content\">\n<section style=\"width:min(1220px,94%);margin:0 auto;padding:20px 0 22px\">\n  <nav aria-label=\"Breadcrumb\" 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/\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;min-height:44px;min-width:44px\">Home</a><span aria-hidden=\"true\">/</span><span aria-current=\"page\" style=\"color:#2A2118;display:inline-flex;align-items:center;min-height:44px\">About Us</span></nav>\n  <div style=\"padding-top:4px\">\n    <div style=\"font-weight:700;font-size:12px;letter-spacing:2.4px;color:#8F6212;text-transform:uppercase\">Kairali — The Ayurvedic Healing Village · Since 1908</div>\n    <h1 id=\"page-h1\" style=\"font-family:'Marcellus',serif;font-size:32px;line-height:1.12;margin:10px 0 0;text-wrap:balance\">About Us</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=\"Aerial view of paddy fields and coconut palms in the Kerala countryside around the hospital\" width=\"1440\" height=\"524\" style=\"width:100%;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:32px 0 0\">\n  <blockquote data-pos=\"/3\" style=\"margin:0;text-align:center;font-family:'Marcellus',serif;font-size:22px;line-height:1.4;color:#2A2118;text-wrap:balance;display:flex;flex-direction:column;align-items:center;gap:12px\">\n    <img src=\"/ahv/assets/img/AHV-About-lotus.svg\" alt=\"\" width=\"95\" height=\"57\" style=\"width:56px;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=\"padding:40px 0 0;display:flex;flex-direction:column;gap:18px\">\n    <div>\n      <p style=\"margin:0 0 6px;font-weight:700;font-size:12.5px;letter-spacing:2.4px;color:#8F6212;text-transform:uppercase\">{{ intro.eyebrow }}</p>\n      <h2 id=\"intro-h\" style=\"font-family:'Marcellus',serif;font-size:27px;line-height:1.2;margin:0;text-wrap:balance\">{{ intro.heading }}</h2>\n    </div>\n    <figure data-ahv-banner=\"about-wellness\" style=\"margin:0;width:100%;position:relative;aspect-ratio:448/455;border-radius:4px;overflow:hidden;background:#E0D7C4\"><img src=\"/ahv/assets/img/gallery/a5340555d384edc72099bc9f721bde48ec6e61c57202a233cb9c498d9680b505.webp\" alt=\"Stone pathway winding through planted gardens to a tiled-roof building among palms\" 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:22px;line-height:1.2;color:#2A2118;text-wrap:balance\">Asia's Best Ayurvedic Retreat Since 1999</strong><span style=\"display:block;margin-top:12px;font-size:15.5px;line-height:1.6;color:#514A3F\">Kairali-The Ayurvedic Healing Village, Palakkad, Kerala is one-of-its-kind of a holistic space, which offers traditional and authentic Ayurvedic therapies.</span></figcaption></figure>\n    <p style=\"margin:0;font-size:17px;line-height:1.7;text-wrap:pretty\">{{ intro.paragraph }}</p>\n    <a href=\"{{ intro.linkHref }}\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>{{ intro.linkText }}</a>\n  </section>\n\n  <section id=\"founder\" aria-labelledby=\"founder-h\" style=\"padding:40px 0 0;margin-top:40px;border-top:1px solid #E0D7C4;display:flex;flex-direction:column;gap:18px\">\n    <div>\n      <p style=\"margin:0 0 6px;font-weight:700;font-size:12.5px;letter-spacing:2.4px;color:#8F6212;text-transform:uppercase\">{{ founder.eyebrow }}</p>\n      <h2 id=\"founder-h\" style=\"font-family:'Marcellus',serif;font-size:27px;line-height:1.2;margin:0;text-wrap:balance\">{{ founder.heading }}</h2>\n    </div>\n    <p style=\"margin:0;font-size:19px;line-height:1.65;border-left:3px solid #C1882C;padding-left:16px;text-wrap:pretty\">{{ founder.lead }}</p>\n    <p style=\"margin:0;font-size:17px;line-height:1.7;text-wrap:pretty\">{{ founder.paragraph }}</p>\n    <a href=\"{{ founder.linkHref }}\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>{{ founder.linkText }}</a>\n    <figure style=\"margin:0\">\n      <img src=\"/ahv/assets/img/team-gita1.webp\" alt=\"Gita Ramesh seated in the gardens at Kairali\" width=\"482\" height=\"618\" loading=\"lazy\" style=\"width:100%;height:auto;display:block;border-radius:4px\">\n      <figcaption style=\"padding-top:12px\">\n        <h3 style=\"font-family:'Marcellus',serif;font-size:21px;line-height:1.25;margin:0 0 2px\">{{ founder.name }}</h3>\n        <p style=\"margin:0;font-weight:700;font-size:15px;color:#8F6212;line-height:1.5\">{{ founder.role }}</p>\n      </figcaption>\n    </figure>\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\">A letter from K.V. Ramesh</h2><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\"><strong>Dear Friends, </strong></p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Greetings from Kairali – The Ayurvedic Healing Village, a haven where the ageless knowledge of Ayurveda is combined with the necessities of contemporary life. It gives me great pleasure to share with you the core values of Kairali, which are a dedication to holistic wellness, genuine Ayurvedic therapy, and the progress of humankind.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">My vision for Kairali Ayurvedic Group has always been firmly based on the age-old science of Ayurveda, which I consider to be the best route to harmony and health. Growing up in a household immersed in Ayurvedic customs, I have personally seen the significant influence it has on people’s lives. This gave me the motivation to devote my life to protecting and introducing the world to this priceless legacy. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Authenticity and excellence have always been the cornerstones of Kairali. This idea is reflected in Kairali – The Ayurvedic Healing Village. From the therapies and treatments to the calm, environmentally friendly setting, every element of this retreat has been planned to offer a fully immersive Ayurvedic experience. Here, we establish a sanctuary where visitors can discover tranquility, renewal, and balance by fusing traditional customs with contemporary hospitality standards.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Our goal goes beyond providing Ayurvedic care. It is to encourage a way of living that values mental, spiritual, and physical well-being. We aim to enable our patients to live better, more satisfying lives through our customized therapies, therapeutic diets, yoga classes, and meditation techniques. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Although Kairali Ayurvedic Group has become a well-known brand worldwide throughout the years, our principles have not changed. We are here to act as Ayurveda’s stewards, offering its therapeutic benefits to those who seek them while upholding the integrity that has established our reputation as a leading authority on holistic health.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">To everyone who visits Kairali – The Ayurvedic Healing Village, I extend my heartfelt gratitude. Your conviction in Ayurveda and Kairali motivates us to innovate and improve continuously. I welcome you to begin this transforming process of self-discovery, healing, and regeneration, guided by the timeless principles of Ayurveda. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Together, let us create a healthier, happier world.<br><br>Warm regards,<br><strong>K.V. Ramesh<br></strong>Managing Director, Kairali Ayurvedic Group</p></div></section>\n<section id=\"leadership\" aria-labelledby=\"leadership-h\" style=\"padding:40px 0 0;margin-top:40px;border-top:1px solid #E0D7C4\">\n    <p style=\"margin:0 0 6px;font-weight:700;font-size:12.5px;letter-spacing:2.4px;color:#8F6212;text-transform:uppercase\">{{ leadership.eyebrow }}</p>\n    <h2 id=\"leadership-h\" style=\"font-family:'Marcellus',serif;font-size:27px;line-height:1.2;margin:0 0 8px;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:flex;flex-direction:column;gap:14px;padding:28px 0;border-top:1px solid #E0D7C4\">\n          <div style=\"display:grid;grid-template-columns:104px minmax(0,1fr);gap:16px;align-items:center\">\n            <img src=\"{{ d.portrait.src }}\" alt=\"{{ d.portrait.alt }}\" width=\"{{ d.portrait.width }}\" height=\"{{ d.portrait.height }}\" loading=\"lazy\" style=\"width:104px;height:auto;display:block;border-radius:4px\">\n            <div style=\"min-width:0\">\n              <h3 style=\"font-family:'Marcellus',serif;font-size:22px;line-height:1.25;margin:0 0 4px\">{{ d.name }}</h3>\n              <p style=\"margin:0;font-weight:700;font-size:15px;color:#8F6212;line-height:1.5\">{{ d.role }}</p>\n            </div>\n          </div>\n          <p style=\"margin:0;font-size:17px;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;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>LinkedIn</a></sc-if>\n        </li>\n      </sc-for>\n    </ul>\n  </section>\n\n  <section id=\"awards\" aria-labelledby=\"awards-h\" style=\"padding:40px 0 0;margin-top:12px;border-top:1px solid #E0D7C4;display:flex;flex-direction:column;gap:16px\">\n    <div>\n      <p style=\"margin:0 0 6px;font-weight:700;font-size:12.5px;letter-spacing:2.4px;color:#8F6212;text-transform:uppercase\">{{ awards.eyebrow }}</p>\n      <h2 id=\"awards-h\" style=\"font-family:'Marcellus',serif;font-size:27px;line-height:1.2;margin:0;text-wrap:balance\">{{ awards.heading }}</h2>\n    </div>\n    <figure style=\"margin:0\"><img src=\"/ahv/assets/img/AHV-About-698image.webp\" alt=\"A man in a tuxedo receives a gold trophy at the Spa Awards, est. 2006\" width=\"698\" height=\"642\" loading=\"lazy\" style=\"width:100%;height:auto;display:block;border-radius:4px\"></figure>\n    <h3 style=\"font-family:'Marcellus',serif;font-size:20px;line-height:1.4;margin:0;color:#5A4420;text-wrap:balance\">{{ awards.lead }}</h3>\n    <p style=\"margin:0;font-size:17px;line-height:1.7;text-wrap:pretty\">{{ 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;font-weight:700;font-size:15.5px\"><span aria-hidden=\"true\" style=\"color:#C1882C\">◆</span>{{ awards.linkText }}</a>\n  </section>\n\n  <section id=\"certificates\" aria-labelledby=\"certificates-h\" style=\"padding:40px 0 56px;margin-top:40px;border-top:1px solid #E0D7C4\">\n    <p style=\"margin:0 0 6px;font-weight:700;font-size:12.5px;letter-spacing:2.4px;color:#8F6212;text-transform:uppercase;text-align:center\">{{ certificates.eyebrow }}</p>\n    <h2 id=\"certificates-h\" style=\"font-family:'Marcellus',serif;font-size:27px;line-height:1.2;margin:0 0 24px;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(2,minmax(0,1fr));gap:16px\">\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%;height: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:10px 12px 12px;min-height:44px;box-sizing:border-box\"><span style=\"font-weight:700;font-size:14.5px;line-height:1.35\">{{ 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:6px;font-weight:700;font-size:11.5px;letter-spacing:1.6px;text-transform:uppercase;color:#006038\">View<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\" narrow=\"true\" hint-size=\"100%,900px\"></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,.96);flex-direction:column;padding:12px;box-sizing:border-box;gap:10px\">\n  <div style=\"display:flex;justify-content:space-between;align-items:flex-start;gap:10px;color:#F7F4EA\">\n    <div style=\"display:flex;flex-direction:column;gap:2px;min-width:0\"><span aria-live=\"polite\" style=\"font-weight:700;font-size:12px;letter-spacing:1.8px;text-transform:uppercase;color:#E9E2D3\">{{ counter }}</span><span id=\"doc-dialog-title\" style=\"font-family:'Marcellus',serif;font-size:18px;line-height:1.3\">{{ curLabel }}</span></div>\n    <button type=\"button\" id=\"doc-close\" onClick=\"{{ close }}\" aria-label=\"Close document\" style=\"display:inline-flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border:1px solid rgba(247,244,234,.5);border-radius:4px;background:transparent;color:#F7F4EA;font-size:20px\"><span aria-hidden=\"true\">✕</span></button>\n  </div>\n  <div id=\"doc-stage\" tabindex=\"0\" aria-label=\"Document image. Scroll or drag to pan at actual size\" onPointerDown=\"{{ panStart }}\" onPointerMove=\"{{ panMove }}\" onPointerUp=\"{{ panEnd }}\" onPointerCancel=\"{{ panEnd }}\" style=\"flex:1 1 auto;min-height: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=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px\">\n    <button type=\"button\" id=\"doc-prev\" onClick=\"{{ prev }}\" aria-label=\"Previous document\" style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;border:1px solid rgba(247,244,234,.5);border-radius:4px;background:transparent;color:#F7F4EA;font-weight:700;font-size:13px;letter-spacing:1.6px;text-transform:uppercase\"><span aria-hidden=\"true\">←</span>Prev</button>\n    <button type=\"button\" id=\"doc-zoom\" aria-pressed=\"{{ zoomPressed }}\" onClick=\"{{ toggleZoom }}\" style=\"display:inline-flex;align-items:center;justify-content:center;min-height:48px;border:1px solid rgba(247,244,234,.5);border-radius:4px;background:transparent;color:#F7F4EA;font-weight:700;font-size:13px;letter-spacing:1.6px;text-transform:uppercase\">{{ zoomLabel }}</button>\n    <button type=\"button\" id=\"doc-next\" onClick=\"{{ next }}\" aria-label=\"Next document\" style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;border:1px solid #EEB41E;border-radius:4px;background:#EEB41E;color:#2A2118;font-weight:700;font-size:13px;letter-spacing:1.6px;text-transform:uppercase\">Next<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(\"No. \" + e.number);\n  if (e.order) parts.push(\"Order \" + e.order);\n  if (e.printedValidFrom && e.printedValidThrough) parts.push(\"Valid \" + e.printedValidFrom + \" to \" + e.printedValidThrough);\n  else if (e.printedIssueDate && e.printedValidThrough) parts.push(\"Issued \" + e.printedIssueDate + \", valid to \" + e.printedValidThrough);\n  else if (e.printedValidThrough) parts.push(\"Valid to \" + e.printedValidThrough);\n  else if (e.printedDate && e.printedPeriod) parts.push(\"Dated \" + e.printedDate + \", \" + e.printedPeriod);\n  else if (e.issued) parts.push(\"Issued \" + 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 = 'en-US'; 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: 'Zoom', 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    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: '100%', 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 ? (i + 1) + ' of ' + n : '', curLabel: cur ? cur.label : '',\n      zoomLabel: zoom ? 'Fit' : 'Zoom', 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', 'Home', '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/assets/about-us-data.js"]}
