{
  "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=\"Kairali – The Ayurvedic Healing Village 소개: 케랄라주 팔라카드의 NABH 인증 아유르베다 병원으로, 의사가 주도하는 치료 프로그램을 제공합니다.\">\n<link rel=\"canonical\" href=\"https://ayurvedichealingvillage.com/ko/about-us/\">\n<meta name=\"robots\" content=\"noindex, nofollow\">\n<meta property=\"og:locale\" content=\"ko_KR\">\n<meta property=\"og:type\" content=\"article\">\n<meta property=\"og:title\" content=\"저희 소개\">\n<meta property=\"og:description\" content=\"Kairali – The Ayurvedic Healing Village 소개: 케랄라주 팔라카드의 NABH 인증 아유르베다 병원으로, 의사가 주도하는 치료 프로그램을 제공합니다.\">\n<meta property=\"og:url\" content=\"https://ayurvedichealingvillage.com/ko/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/ko/about-us/\",\"url\":\"https://ayurvedichealingvillage.com/ko/about-us/\",\"name\":\"Kairali - The Ayurvedic Healing Village\",\"description\":\"Kairali – The Ayurvedic Healing Village 소개: 케랄라주 팔라카드의 NABH 인증 아유르베다 병원으로, 의사가 주도하는 치료 프로그램을 제공합니다.\",\"isPartOf\":{\"@id\":\"https://ayurvedichealingvillage.com/ko/#website\"},\"inLanguage\":\"ko\",\"breadcrumb\":{\"@id\":\"https://ayurvedichealingvillage.com/ko/about-us/#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ayurvedichealingvillage.com/ko/about-us/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"홈\",\"item\":\"https://ayurvedichealingvillage.com/ko/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"저희 소개\",\"item\":\"https://ayurvedichealingvillage.com/ko/about-us/\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://ayurvedichealingvillage.com/ko/#website\",\"url\":\"https://ayurvedichealingvillage.com/ko/\",\"name\":\"Kairali — The Ayurvedic Healing Village\",\"inLanguage\":\"ko\"}]}\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\">본문으로 건너뛰기</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=\"이동 경로\" 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/ko/\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;min-height:44px;min-width:44px\">홈</a><span aria-hidden=\"true\">/</span><span aria-current=\"page\" style=\"color:#2A2118;display:inline-flex;align-items:center;min-height:44px\">저희 소개</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 · 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\">저희 소개</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=\"병원 주변 케랄라 시골의 논과 코코넛 야자수를 내려다본 항공 사진\" 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=\"정원 사이로 구불구불 이어져 야자수 사이의 기와지붕 건물로 향하는 돌길\" 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\">1999년부터 이어진 아시아 최고의 아유르베다 리트리트</strong><span style=\"display:block;margin-top:12px;font-size:15.5px;line-height:1.6;color:#514A3F\">케랄라주에 위치한 Kairali – The Ayurvedic Healing Village, 팔라카드는 전통적이고 정통적인 아유르베다 요법을 제공하는 독보적인 홀리스틱 공간입니다.</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=\"Kairali의 정원에 앉아 있는 Gita Ramesh\" 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\">K.V. Ramesh의 편지</h2><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\"><strong>친애하는 여러분께, </strong></p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Kairali – The Ayurvedic Healing Village에서 인사드립니다. 이곳은 아유르베다의 오랜 지혜가 현대 생활의 필요와 어우러지는 안식처입니다. 전인적 웰빙, 정통 아유르베다 치료, 그리고 인류의 발전에 대한 헌신이라는 Kairali의 핵심 가치를 여러분과 나누게 되어 매우 기쁘게 생각합니다.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Kairali Ayurvedic Group에 대한 저의 비전은 언제나 아유르베다라는 오랜 과학에 굳건히 기반해 왔으며, 저는 이것이 조화와 건강에 이르는 가장 좋은 길이라고 생각합니다. 아유르베다 전통이 깊이 배어 있는 가정에서 자라면서, 저는 아유르베다가 사람들의 삶에 미치는 큰 영향을 직접 보아 왔습니다. 이것이 이 소중한 유산을 지키고 세상에 알리는 데 제 삶을 바치게 된 원동력이 되었습니다. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">진정성과 탁월함은 언제나 Kairali의 초석이었습니다. 이러한 정신은 Kairali – The Ayurvedic Healing Village에 그대로 반영되어 있습니다. 요법과 치료에서부터 평온하고 친환경적인 환경에 이르기까지, 이곳의 모든 요소는 온전히 몰입할 수 있는 아유르베다 경험을 제공하도록 계획되었습니다. 저희는 전통 관습과 현대적인 환대 기준을 결합하여, 방문객이 평온과 회복, 균형을 찾을 수 있는 안식처를 만들어 가고 있습니다.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">저희의 목표는 아유르베다 치료를 제공하는 데 그치지 않습니다. 정신적, 영적, 신체적 웰빙을 소중히 여기는 삶의 방식을 장려하는 것입니다. 저희는 맞춤형 요법, 치료식, 요가 수업, 명상 기법을 통해 환자분들이 더 건강하고 만족스러운 삶을 살 수 있도록 돕고자 합니다. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Kairali Ayurvedic Group은 오랜 세월에 걸쳐 세계적으로 잘 알려진 브랜드가 되었지만, 저희의 원칙은 변하지 않았습니다. 저희는 아유르베다의 수호자로서, 이를 찾는 분들께 그 치료적 이점을 제공하는 한편, 전인적 건강 분야의 선도적 권위자로서 저희의 명성을 쌓아 온 진정성을 지켜 나가고 있습니다.</p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">Kairali – The Ayurvedic Healing Village를 찾아 주시는 모든 분께 진심으로 감사드립니다. 아유르베다와 Kairali에 대한 여러분의 믿음은 저희가 끊임없이 혁신하고 개선하도록 이끄는 원동력입니다. 아유르베다의 시대를 초월한 원칙에 따라 자기 발견과 치유, 재생으로 이어지는 이 변화의 과정을 시작하시는 여러분을 환영합니다. </p><p style=\"font-size:18px;line-height:1.8;margin:0 0 20px\">함께 더 건강하고 행복한 세상을 만들어 갑시다.<br><br>따뜻한 마음을 담아,<br><strong>K.V. Ramesh<br></strong>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=\"턱시도를 입은 남성이 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\">문서 보기<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)\">문서 닫기<span aria-hidden=\"true\">✕</span></button>\n    </div>\n  </div>\n  <div id=\"doc-stage\" tabindex=\"0\" aria-label=\"문서 이미지. 실제 크기에서 스크롤하거나 드래그하여 이동하세요\" 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>이전 문서</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)\">다음 문서<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(\"번호 \" + e.number);\n  if (e.order) parts.push(\"명령서 \" + e.order);\n  if (e.printedValidFrom && e.printedValidThrough) parts.push(\"유효 기간 \" + e.printedValidFrom + \" ~ \" + e.printedValidThrough);\n  else if (e.printedIssueDate && e.printedValidThrough) parts.push(\"발행일 \" + e.printedIssueDate + \", 유효 기한: \" + e.printedValidThrough);\n  else if (e.printedValidThrough) parts.push(\"유효 기한: \" + e.printedValidThrough);\n  else if (e.printedDate && e.printedPeriod) parts.push(\"발행일: \" + e.printedDate + \", \" + e.printedPeriod);\n  else if (e.issued) parts.push(\"발행일 \" + 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 = 'ko'; 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: '실제 크기', 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 ? '문서 ' + (i + 1) + ' / ' + n : '', curLabel: cur ? cur.label : '',\n      zoomLabel: 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', '홈', '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/ko/assets/about-us-data.js"
  ],
  "locale": "ko"
}
