{
  "id": "ahv-page-our-villas-desktop",
  "file": "AHV Page Our Villas Desktop.dc.html",
  "sourceSha256": "62b4003df7b5c4452fa2139a4f2ba9da8778ae059309e4063afd35a7d7438a80",
  "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)}\nh1,h2,h3,h4{font-weight:400;margin:0}\nbutton{font-family:'Mulish',sans-serif;cursor:pointer}\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>Ayurvedic Villas in Kerala | Kairali Healing Village</title>\n<meta name=\"description\" content=\"Kairali – The Ayurvedic Healing Village（喀拉拉邦）依照 Vastu 设计的别墅，患者在接受阿育吠陀治疗方案期间于此入住。\">\n<link rel=\"canonical\" href=\"https://ayurvedichealingvillage.com/zh/our-villas/\">\n<meta name=\"robots\" content=\"noindex, nofollow\">\n<meta property=\"og:locale\" content=\"zh_CN\">\n<meta property=\"og:type\" content=\"article\">\n<meta property=\"og:title\" content=\"我们的别墅\">\n<meta property=\"og:description\" content=\"Kairali – The Ayurvedic Healing Village（喀拉拉邦）依照 Vastu 设计的别墅，患者在接受阿育吠陀治疗方案期间于此入住。\">\n<meta property=\"og:url\" content=\"https://ayurvedichealingvillage.com/zh/our-villas/\">\n<meta property=\"og:image\" content=\"https://ayurvedichealingvillage.com/wp-content/uploads/2024/11/Rectangle-9392.jpg\">\n<meta property=\"og:image:width\" content=\"287\">\n<meta property=\"og:image:height\" content=\"318\">\n<meta property=\"og:image:type\" content=\"image/jpeg\">\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/zh/our-villas/\",\"url\":\"https://ayurvedichealingvillage.com/zh/our-villas/\",\"name\":\"喀拉拉邦阿育吠陀别墅 | Kairali 疗愈村\",\"description\":\"Kairali – The Ayurvedic Healing Village（喀拉拉邦）依照 Vastu 设计的别墅，患者在接受阿育吠陀治疗方案期间于此入住。\",\"isPartOf\":{\"@id\":\"https://ayurvedichealingvillage.com/zh/#website\"},\"inLanguage\":\"zh-Hans\"},{\"@type\":\"WebSite\",\"@id\":\"https://ayurvedichealingvillage.com/zh/#website\",\"url\":\"https://ayurvedichealingvillage.com/zh/\",\"name\":\"Kairali — The Ayurvedic Healing Village\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ayurvedichealingvillage.com/zh/our-villas/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"首页\",\"item\":\"https://ayurvedichealingvillage.com/zh/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"我们的别墅\",\"item\":\"https://ayurvedichealingvillage.com/zh/our-villas/\"}]}]}\n</script>\n</helmet>\n<div data-screen-label=\"Our Villas — 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 0\">\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/zh/\" 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  <p style=\"font-weight:700;font-size:13px;letter-spacing:2.6px;color:#8F6212;text-transform:uppercase;margin:6px 0 0\">在我们的别墅中感受宁静</p>\n  <h1 style=\"font-family:'Marcellus',serif;font-size:clamp(34px,3.6vw,54px);line-height:1.12;margin:12px 0 0;text-wrap:balance\">我们的别墅</h1>\n  <img src=\"/ahv/assets/img/AHV-OurVillas-Hero.webp\" alt=\"别墅旁的花园小径与棕榈树\" width=\"1024\" height=\"458\" style=\"width:100%;max-width:1024px;height:auto;display:block;border-radius:4px;margin-top:32px\">\n</section>\n\n<section aria-labelledby=\"intro-h\" style=\"width:min(1220px,94%);margin:0 auto;padding:48px 0 0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:24px 72px;align-items:start\">\n  <h2 id=\"intro-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(26px,2.6vw,36px);line-height:1.2;text-wrap:balance\">精致的 Vastu（瓦斯图）风格别墅</h2>\n  <p style=\"margin:0;max-width:70ch\">{{ D.intro }}</p>\n</section>\n\n<section id=\"villas\" aria-label=\"我们的四栋别墅\" style=\"width:min(1220px,94%);margin:48px auto 0;display:flex;flex-direction:column;gap:0\">\n  <sc-for list=\"{{ cards }}\" as=\"c\" hint-placeholder-count=\"4\">\n    <article aria-labelledby=\"{{ c.hid }}\" style=\"padding:48px 0;border-top:1px solid #E9E2D3;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:32px 64px;align-items:start\">\n      <div>\n        <h2 id=\"{{ c.hid }}\" style=\"font-family:'Marcellus',serif;font-size:clamp(28px,2.8vw,40px);line-height:1.15\">{{ c.title }}</h2>\n        <ul aria-label=\"{{ c.factsLabel }}\" style=\"list-style:none;margin:18px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:10px\">\n          <sc-for list=\"{{ c.facts }}\" as=\"f\" hint-placeholder-count=\"4\"><li style=\"display:inline-flex;align-items:center;min-height:44px;padding:0 18px;background:#fff;border:1px solid #E0D7C4;border-radius:4px;font-size:16px;font-weight:600\">{{ f }}</li></sc-for>\n        </ul>\n        <p style=\"margin:20px 0 0;max-width:62ch\">{{ c.description }}</p>\n        <div style=\"display:flex;flex-wrap:wrap;gap:12px;margin-top:26px\">\n          <a href=\"{{ c.url }}\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;background:#EEB41E;color:#2A2118;border-radius:4px;font-weight:700;font-size:14px;letter-spacing:1.5px;text-transform:uppercase;padding:0 22px\" style-hover=\"background:#D9A317;color:#2A2118;text-decoration:none\">了解更多<span aria-hidden=\"true\">→</span></a> <a href=\"https://ayurvedichealingvillage.com/zh/contact-us/\" onClick=\"{{ guard }}\" style=\"display:inline-flex;align-items:center;justify-content:center;min-height:52px;border:1.5px solid #006038;color:#006038;border-radius:4px;font-weight:700;font-size:14px;letter-spacing:1.5px;text-transform:uppercase;padding:0 22px\" style-hover=\"background:#006038;color:#F7F4EA;text-decoration:none\">咨询入住事宜</a>\n        </div>\n      </div>\n      <ul aria-label=\"{{ c.galleryLabel }}\" style=\"list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px\">\n        <sc-for list=\"{{ c.images }}\" as=\"g\" hint-placeholder-count=\"6\">\n          <li style=\"background:#fff;border:1px solid #E9E2D3;border-radius:4px;overflow:hidden\">\n            <button type=\"button\" data-card=\"{{ c.i }}\" data-img=\"{{ g.i }}\" aria-label=\"{{ g.btnLabel }}\" onClick=\"{{ g.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=\"{{ g.image }}\" alt=\"{{ g.alt }}\" width=\"{{ g.width }}\" height=\"{{ g.height }}\" loading=\"lazy\" style=\"width:100%;height:auto;display:block\">\n              <span style=\"display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:4px 14px;font-weight:700;font-size:12.5px;letter-spacing:2px;text-transform:uppercase;color:#006038\">查看图片<span aria-hidden=\"true\" style=\"color:#C1882C\">→</span></span>\n            </button>\n          </li>\n        </sc-for>\n      </ul>\n    </article>\n  </sc-for>\n</section>\n\n<section id=\"vastu\" aria-labelledby=\"vastu-h\" style=\"width:min(1220px,94%);margin:0 auto;padding:48px 0;border-top:1px solid #E9E2D3;display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:32px 72px;align-items:start\">\n  <div style=\"max-width:70ch\">\n    <h2 id=\"vastu-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(26px,2.6vw,36px);line-height:1.2;margin:0 0 18px;text-wrap:balance\">为何选择 Vastu 风格别墅？</h2>\n    <p style=\"margin:0 0 20px\">{{ D.vastu.paragraph }}</p>\n    <ul style=\"margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));gap:0 40px;border-top:1px solid #E0D7C4\">\n      <sc-for list=\"{{ D.vastu.items }}\" as=\"it\" hint-placeholder-count=\"4\"><li style=\"display:flex;gap:14px;padding:12px 0;border-bottom:1px solid #E0D7C4;font-size:17.5px;line-height:1.6\"><span aria-hidden=\"true\" style=\"color:#C1882C;flex:none\">◆</span><span>{{ it }}</span></li></sc-for>\n    </ul>\n  </div>\n  <div style=\"display:flex;flex-direction:column;gap:28px\">\n    <blockquote style=\"margin:0;padding:22px 26px;background:#fff;border:1px solid #E0D7C4;border-left:6px solid #C1882C;border-radius:4px;font-family:'Marcellus',serif;font-size:21px;line-height:1.5;color:#2A2118\">{{ D.vastu.quote }}</blockquote>\n    <div aria-label=\"咨询\" style=\"background:#43331E;color:#F7F4EA;border-radius:4px;padding:24px 26px;display:flex;flex-direction:column;gap:12px\">\n      <a href=\"https://ayurvedichealingvillage.com/zh/contact-us/\" onClick=\"{{ guard }}\" style=\"display:flex;align-items:center;justify-content:center;min-height:52px;background:#EEB41E;color:#2A2118;border-radius:4px;font-weight:700;font-size:14px;letter-spacing:1.5px;text-transform:uppercase;padding:0 20px;text-align:center\" style-hover=\"background:#D9A317;color:#2A2118;text-decoration:none\">联系专家</a>\n    </div>\n  </div>\n</section>\n\n<section id=\"closing\" aria-labelledby=\"closing-h\" style=\"width:min(1220px,94%);margin:0 auto;padding:48px 0 64px;border-top:1px solid #E9E2D3;display:grid;grid-template-columns:auto minmax(0,1fr);gap:24px 48px;align-items:center\">\n  <img src=\"/ahv/assets/img/AHV-OurVillas-Closing.webp\" alt=\"装饰花卉\" width=\"271\" height=\"276\" loading=\"lazy\" style=\"width:min(271px,30vw);height:auto;display:block\">\n  <div>\n    <h2 id=\"closing-h\" style=\"font-family:'Marcellus',serif;font-size:clamp(26px,2.6vw,36px);line-height:1.2;text-wrap:balance\">Kairali，纯粹的喜悦，一生难得的体验！</h2>\n    <p style=\"margin:14px 0 0;max-width:62ch\">{{ D.closing.text }}</p>\n  </div>\n</section>\n</main>\n<dc-import name=\"AHV Chrome Footer\" hint-size=\"100%,560px\"></dc-import>\n\n<div id=\"villa-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"{{ dlgLabel }}\" 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 aria-live=\"polite\" style=\"font-weight:700;font-size:14px;letter-spacing:2px;text-transform:uppercase;min-height:44px;display:inline-flex;align-items:center\">{{ counter }}</div>\n    <button type=\"button\" id=\"villa-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  <sc-if value=\"{{ dlgOpen }}\" hint-placeholder-val=\"{{ false }}\"><img id=\"villa-expanded\" ref=\"{{ curRef }}\" alt=\"{{ cur.alt }}\" width=\"{{ cur.width }}\" height=\"{{ cur.height }}\" style=\"display:block;width:auto;height:auto;max-width:min(1280px,100%);max-height:calc(100vh - 220px);object-fit:contain;margin:20px 0;border-radius:4px;background:#000\"></sc-if>\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=\"villa-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=\"villa-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": "\nclass Component extends DCLogic {\n  state = { open: false, set: null, i: 0, ret: null, label: '' };\n  componentDidMount() { document.documentElement.lang = 'zh-Hans'; }\n  componentWillUnmount() { document.body.style.overflow = ''; }\n  openSet(set, idx, ret, label) {\n    this.setState({ open: true, set, i: idx, ret, label });\n    document.body.style.overflow = 'hidden';\n    setTimeout(() => { const c = document.getElementById('villa-close'); if (c) c.focus(); }, 30);\n  }\n  closeViewer() {\n    const ret = this.state.ret;\n    this.setState({ open: false });\n    document.body.style.overflow = '';\n    setTimeout(() => { const btn = ret ? document.querySelector(ret) : null; if (btn) btn.focus(); }, 30);\n  }\n  renderVals() {\n    const D = window.AHV_OUR_VILLAS || { intro: '', cards: [], vastu: { items: [], quote: '', paragraph: '' }, closing: { text: '' } };\n    const A = 'https://ayurvedichealingvillage.com';\n    const cards = (D.cards || []).map((c, ci) => ({\n      ...c, i: ci, url: A + c.href, hid: 'villa-' + c.key.toLowerCase() + '-h',\n      factsLabel: c.title + ' facts', galleryLabel: c.title + ' photographs',\n      images: c.images.map((g, gi) => ({ ...g, i: gi, btnLabel: '查看图片： ' + g.alt,\n        open: () => this.openSet(c.images, gi, 'button[data-card=\"' + ci + '\"][data-img=\"' + gi + '\"]', c.title + ' photographs') }))\n    }));\n    const set = this.state.set || [];\n    const n = set.length, i = this.state.i;\n    const cur = set[i] || { image: '', alt: '', width: 1400, height: 1000 };\n    const go = (d) => this.setState(s => ({ i: (s.i + d + n) % n }));\n    return {\n      guard: () => {} /* preview-only nav guard neutralised for the published site */,\n      D, cards,\n      dlgDisplay: this.state.open ? 'flex' : 'none', dlgOpen: this.state.open, dlgLabel: this.state.label || '别墅照片',\n      cur,\n      // New closure per render, so React re-attaches and assigns the current source each time cur changes.\n      curRef: (el) => { if (el && cur.image) { el.setAttribute('src', cur.image); } },\n      counter: n ? (i + 1) + ' / ' + n : '',\n      close: () => this.closeViewer(), prev: () => go(-1), next: () => go(1),\n      dlgKey: (e) => {\n        if (e.key === 'Escape') { e.preventDefault(); this.closeViewer(); 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/zh/assets/our-villas-data.js"
  ],
  "locale": "zh-Hans"
}
