{
  "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>À propos | Kairali - The Ayurvedic Healing Village</title>\n<meta name=\"description\" content=\"À propos de Kairali – The Ayurvedic Healing Village : hôpital ayurvédique accrédité NABH à Palakkad, Kerala, et programmes de soins menés par des médecins.\">\n<link rel=\"canonical\" href=\"https://ayurvedichealingvillage.com/fr/a-propos-de-nous/\">\n<meta name=\"robots\" content=\"noindex, nofollow\">\n<meta property=\"og:locale\" content=\"fr_FR\">\n<meta property=\"og:type\" content=\"article\">\n<meta property=\"og:title\" content=\"À propos\">\n<meta property=\"og:description\" content=\"À propos de Kairali – The Ayurvedic Healing Village : hôpital ayurvédique accrédité NABH à Palakkad, Kerala, et programmes de soins menés par des médecins.\">\n<meta property=\"og:url\" content=\"https://ayurvedichealingvillage.com/fr/a-propos-de-nous/\">\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/fr/a-propos-de-nous/\",\"url\":\"https://ayurvedichealingvillage.com/fr/a-propos-de-nous/\",\"name\":\"Kairali - The Ayurvedic Healing Village\",\"isPartOf\":{\"@id\":\"https://ayurvedichealingvillage.com/fr/#website\"},\"inLanguage\":\"fr\",\"breadcrumb\":{\"@id\":\"https://ayurvedichealingvillage.com/fr/a-propos-de-nous/#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ayurvedichealingvillage.com/fr/a-propos-de-nous/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https://ayurvedichealingvillage.com/fr/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"À propos\",\"item\":\"https://ayurvedichealingvillage.com/fr/a-propos-de-nous/\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://ayurvedichealingvillage.com/fr/#website\",\"url\":\"https://ayurvedichealingvillage.com/fr/\",\"name\":\"Kairali — The Ayurvedic Healing Village\",\"inLanguage\":\"fr\"}]}\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\">Aller au contenu 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=\"Fil d'Ariane\" 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/fr/\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;min-height:44px;min-width:44px\">Accueil</a><span aria-hidden=\"true\">/</span><span aria-current=\"page\" style=\"color:#2A2118;display:inline-flex;align-items:center;min-height:44px\">À propos</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 · Depuis 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\">À propos</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=\"Vue aérienne de rizières et de cocotiers dans la campagne du Kerala, autour de l’hôpital\" 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=\"Allée de pierre serpentant à travers des jardins plantés jusqu'à un bâtiment au toit de tuiles, parmi les palmiers\" 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\">La meilleure retraite ayurvédique d’Asie depuis 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), est un lieu holistique unique en son genre, qui propose des thérapies ayurvédiques traditionnelles et authentiques.</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 assise dans les jardins 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=\"kairali-film\" aria-labelledby=\"kairali-film-h\" style=\"display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:32px 64px;align-items:center;padding:48px 0;margin-top:48px;border-top:1px solid #E0D7C4\"><div style=\"min-width:0\"><a href=\"/fr/galerie-video/#featured-film\" data-ahv-film=\"1RWUh8QEIpE\" data-film-title=\"L'histoire de Kairali\" aria-label=\"Découvrez l’histoire de Kairali — lire le film Kairali, 6 minutes 53 secondes\" style=\"display:block;position:relative;aspect-ratio:16/9;border-radius:4px;overflow:hidden;background:#E0D7C4\"><img src=\"/ahv/assets/img/kairali-story-film-960.webp\" srcset=\"/ahv/assets/img/kairali-story-film-640.webp 640w, /ahv/assets/img/kairali-story-film-960.webp 960w\" sizes=\"(max-width:699px) calc(100vw - 32px), 560px\" width=\"960\" height=\"540\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" style=\"width:100%;height:100%;object-fit:cover;display:block\"><span aria-hidden=\"true\" style=\"position:absolute;top:50%;left:50%;width:86px;height:86px;margin:-43px 0 0 -43px;border-radius:50%;background:#FFFDF7;box-shadow:0 2px 12px rgba(42,33,24,.28);display:flex;align-items:center;justify-content:center;padding-left:6px;box-sizing:border-box;color:#2A2118;font-size:28px;line-height:1\">▶</span><span aria-hidden=\"true\" style=\"position:absolute;inset-block-end:12px;inset-inline-end:12px;background:rgba(42,33,24,.86);color:#FFFFFF;font-weight:700;font-size:13px;line-height:1;letter-spacing:.5px;padding:6px 8px;border-radius:3px\">6:53</span></a></div><div style=\"min-width:0\"><div style=\"margin:0 0 8px;font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase\">Pratique familiale depuis 1908</div><h2 id=\"kairali-film-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.16;margin:0 0 20px;text-wrap:balance\">L'histoire de Kairali</h2><p style=\"margin:0 0 16px;font-size:17.5px;line-height:1.7;text-wrap:pretty;max-width:66ch\">Découvrez les personnes, les lieux et les traditions ayurvédiques qui font Kairali, du Healing Village à ses produits et à ses formations.</p><p style=\"margin:0 0 16px;font-size:17.5px;line-height:1.7;text-wrap:pretty;max-width:66ch\">Kairali – The Ayurvedic Healing Village a officiellement ouvert ses portes le 14 février 1999.</p><a href=\"/fr/galerie-video/#featured-film\" data-ahv-film=\"1RWUh8QEIpE\" data-film-title=\"L'histoire de Kairali\" style=\"display:inline-flex;align-items:center;min-height:44px;font-weight:700;font-size:15.5px\">Voir le film</a></div></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\">Une lettre de K.V. Ramesh</h2><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\"><strong>Chers amis, </strong></p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Bienvenue à Kairali – The Ayurvedic Healing Village, un havre où le savoir intemporel de l'Ayurveda rencontre les besoins de la vie contemporaine. C'est avec un grand plaisir que je partage avec vous les valeurs fondamentales de Kairali : un engagement envers le bien-être holistique, une thérapie ayurvédique authentique et le progrès de l'humanité.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Ma vision pour Kairali Ayurvedic Group a toujours reposé solidement sur la science millénaire de l'Ayurveda, que je considère comme la meilleure voie vers l'harmonie et la santé. Ayant grandi dans une famille imprégnée des traditions ayurvédiques, j'ai pu constater personnellement l'influence profonde qu'elle exerce sur la vie des gens. C'est ce qui m'a motivé à consacrer ma vie à la préservation de ce précieux héritage et à le faire connaître au monde. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">L'authenticité et l'excellence ont toujours été les piliers de Kairali. Cette idée se reflète dans Kairali – The Ayurvedic Healing Village. Des thérapies et traitements jusqu'au cadre paisible et respectueux de l'environnement, chaque élément de ce lieu a été pensé pour offrir une expérience ayurvédique pleinement immersive. Nous y avons créé un sanctuaire où les visiteurs peuvent trouver sérénité, renouveau et équilibre, en alliant les traditions ancestrales aux standards d'accueil contemporains.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Notre objectif va au-delà des soins ayurvédiques. Il s'agit d'encourager un mode de vie qui valorise le bien-être mental, spirituel et physique. Grâce à nos thérapies personnalisées, nos régimes thérapeutiques, nos cours de yoga et nos techniques de méditation, nous souhaitons permettre à nos patients de vivre une vie meilleure et plus épanouissante. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Bien que Kairali Ayurvedic Group soit devenu au fil des années une marque reconnue dans le monde entier, nos principes n'ont pas changé. Nous sommes là pour être les gardiens de l'Ayurveda, en offrant ses bienfaits thérapeutiques à ceux qui les recherchent, tout en préservant l'intégrité qui a forgé notre réputation d'autorité de premier plan en matière de santé holistique.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">À toutes celles et à tous ceux qui viennent à Kairali – The Ayurvedic Healing Village, j'exprime ma sincère gratitude. Votre confiance en l'Ayurveda et en Kairali nous pousse à innover et à nous améliorer sans cesse. Je vous invite à commencer ce processus transformateur de découverte de soi, de guérison et de régénération, guidé par les principes intemporels de l'Ayurveda. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Ensemble, construisons un monde plus sain et plus heureux.<br><br>Bien cordialement,<br><strong>K.V. Ramesh<br></strong>Directeur général, 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 homme en smoking reçoit un trophée doré lors d’une cérémonie de remise de prix\" 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\">Voir le document<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)\">Fermer le document<span aria-hidden=\"true\">✕</span></button>\n    </div>\n  </div>\n  <div id=\"doc-stage\" tabindex=\"0\" aria-label=\"Image du document. Faites défiler ou glissez pour explorer à taille réelle\" 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>Document précédent</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)\">Document suivant<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(\"Décision \" + e.order);\n  if (e.printedValidFrom && e.printedValidThrough) parts.push(\"Valable \" + e.printedValidFrom + \" au \" + e.printedValidThrough);\n  else if (e.printedIssueDate && e.printedValidThrough) parts.push(\"Date d’émission \" + e.printedIssueDate + \", valable jusqu'au \" + e.printedValidThrough);\n  else if (e.printedValidThrough) parts.push(\"Valable jusqu'au \" + e.printedValidThrough);\n  else if (e.printedDate && e.printedPeriod) parts.push(\"Daté du \" + e.printedDate + \", \" + e.printedPeriod);\n  else if (e.issued) parts.push(\"Date d’émission \" + 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 = 'fr'; 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: 'Taille réelle', 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 ? 'Document ' + (i + 1) + ' sur ' + n : '', curLabel: cur ? cur.label : '',\n      zoomLabel: zoom ? 'Ajuster à l\\'écran' : 'Taille réelle', 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', 'Accueil', '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/fr/assets/about-us-data.js"
  ],
  "locale": "fr"
}
